@@ -13,6 +13,7 @@ const {
1313  getCLIOptionsInfo, 
1414  getEmbedderOptions : getEmbedderOptionsFromBinding , 
1515  getEnvOptionsInputType, 
16+   getNamespaceOptionsInputType, 
1617}  =  internalBinding ( 'options' ) ; 
1718
1819let  warnOnAllowUnauthorized  =  true ; 
@@ -38,7 +39,22 @@ function getEmbedderOptions() {
3839} 
3940
4041function  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+   } 
4258
4359  const  schema  =  { 
4460    __proto__ : null , 
@@ -60,31 +76,58 @@ function generateConfigJsonSchema() {
6076    type : 'object' , 
6177  } ; 
6278
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 ; 
6482
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 )  { 
6685    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 ) ; 
77105    } 
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 ; 
78113  } 
79114
80-   // Sort the proerties  by key alphabetically.  
115+   // Sort the top-level properties  by key alphabetically 
81116  const  sortedKeys  =  ArrayPrototypeSort ( ObjectKeys ( nodeOptions ) ) ; 
82117  const  sortedProperties  =  ObjectFromEntries ( 
83118    ArrayPrototypeMap ( sortedKeys ,  ( key )  =>  [ key ,  nodeOptions [ key ] ] ) , 
84119  ) ; 
85120
86121  schema . properties . nodeOptions . properties  =  sortedProperties ; 
87122
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+ 
88131  return  schema ; 
89132} 
90133
0 commit comments