@@ -13,6 +13,7 @@ const {
13
13
getCLIOptionsInfo,
14
14
getEmbedderOptions : getEmbedderOptionsFromBinding ,
15
15
getEnvOptionsInputType,
16
+ getNamespaceOptionsInputType,
16
17
} = internalBinding ( 'options' ) ;
17
18
18
19
let warnOnAllowUnauthorized = true ;
@@ -38,7 +39,22 @@ function getEmbedderOptions() {
38
39
}
39
40
40
41
function generateConfigJsonSchema ( ) {
41
- const map = getEnvOptionsInputType ( ) ;
42
+ const envOptionsMap = getEnvOptionsInputType ( ) ;
43
+ const namespaceOptionsMap = getNamespaceOptionsInputType ( ) ;
44
+
45
+ function createPropertyForType ( type ) {
46
+ if ( type === 'array' ) {
47
+ return {
48
+ __proto__ : null ,
49
+ oneOf : [
50
+ { __proto__ : null , type : 'string' } ,
51
+ { __proto__ : null , items : { __proto__ : null , type : 'string' , minItems : 1 } , type : 'array' } ,
52
+ ] ,
53
+ } ;
54
+ }
55
+
56
+ return { __proto__ : null , type } ;
57
+ }
42
58
43
59
const schema = {
44
60
__proto__ : null ,
@@ -60,31 +76,58 @@ function generateConfigJsonSchema() {
60
76
type : 'object' ,
61
77
} ;
62
78
63
- const nodeOptions = schema . properties . nodeOptions . properties ;
79
+ // Get the root properties object for adding namespaces
80
+ const rootProperties = schema . properties ;
81
+ const nodeOptions = rootProperties . nodeOptions . properties ;
64
82
65
- for ( const { 0 : key , 1 : type } of map ) {
83
+ // Add env options to nodeOptions (backward compatibility)
84
+ for ( const { 0 : key , 1 : type } of envOptionsMap ) {
66
85
const keyWithoutPrefix = StringPrototypeReplace ( key , '--' , '' ) ;
67
- if ( type === 'array' ) {
68
- nodeOptions [ keyWithoutPrefix ] = {
69
- __proto__ : null ,
70
- oneOf : [
71
- { __proto__ : null , type : 'string' } ,
72
- { __proto__ : null , items : { __proto__ : null , type : 'string' , minItems : 1 } , type : 'array' } ,
73
- ] ,
74
- } ;
75
- } else {
76
- nodeOptions [ keyWithoutPrefix ] = { __proto__ : null , type } ;
86
+ nodeOptions [ keyWithoutPrefix ] = createPropertyForType ( type ) ;
87
+ }
88
+
89
+ // Add namespace properties at the root level
90
+ for ( const { 0 : namespace , 1 : optionsMap } of namespaceOptionsMap ) {
91
+ // Create namespace object at the root level
92
+ rootProperties [ namespace ] = {
93
+ __proto__ : null ,
94
+ type : 'object' ,
95
+ additionalProperties : false ,
96
+ properties : { __proto__ : null } ,
97
+ } ;
98
+
99
+ const namespaceProperties = rootProperties [ namespace ] . properties ;
100
+
101
+ // Add all options for this namespace
102
+ for ( const { 0 : optionName , 1 : optionType } of optionsMap ) {
103
+ const keyWithoutPrefix = StringPrototypeReplace ( optionName , '--' , '' ) ;
104
+ namespaceProperties [ keyWithoutPrefix ] = createPropertyForType ( optionType ) ;
77
105
}
106
+
107
+ // Sort the namespace properties alphabetically
108
+ const sortedNamespaceKeys = ArrayPrototypeSort ( ObjectKeys ( namespaceProperties ) ) ;
109
+ const sortedNamespaceProperties = ObjectFromEntries (
110
+ ArrayPrototypeMap ( sortedNamespaceKeys , ( key ) => [ key , namespaceProperties [ key ] ] ) ,
111
+ ) ;
112
+ rootProperties [ namespace ] . properties = sortedNamespaceProperties ;
78
113
}
79
114
80
- // Sort the proerties by key alphabetically.
115
+ // Sort the top-level properties by key alphabetically
81
116
const sortedKeys = ArrayPrototypeSort ( ObjectKeys ( nodeOptions ) ) ;
82
117
const sortedProperties = ObjectFromEntries (
83
118
ArrayPrototypeMap ( sortedKeys , ( key ) => [ key , nodeOptions [ key ] ] ) ,
84
119
) ;
85
120
86
121
schema . properties . nodeOptions . properties = sortedProperties ;
87
122
123
+ // Also sort the root level properties
124
+ const sortedRootKeys = ArrayPrototypeSort ( ObjectKeys ( rootProperties ) ) ;
125
+ const sortedRootProperties = ObjectFromEntries (
126
+ ArrayPrototypeMap ( sortedRootKeys , ( key ) => [ key , rootProperties [ key ] ] ) ,
127
+ ) ;
128
+
129
+ schema . properties = sortedRootProperties ;
130
+
88
131
return schema ;
89
132
}
90
133
0 commit comments