@@ -8,15 +8,18 @@ import {
88    PropertySignatureStructure , 
99    StructureKind , 
1010}  from  "ts-morph" ; 
11+ import  {  ModelPropertyNaming  }  from  "." ; 
1112import  {  Definition ,  Method ,  ParsedWsdl  }  from  "./models/parsed-wsdl" ; 
1213import  {  Logger  }  from  "./utils/logger" ; 
1314
1415export  interface  GeneratorOptions  { 
1516    emitDefinitionsOnly : boolean ; 
17+     modelPropertyNaming : ModelPropertyNaming 
1618} 
1719
1820const  defaultOptions : GeneratorOptions  =  { 
19-     emitDefinitionsOnly : false 
21+     emitDefinitionsOnly : false , 
22+     modelPropertyNaming : null 
2023} ; 
2124
2225/** 
@@ -63,7 +66,8 @@ function generateDefinitionFile(
6366    definition : null  |  Definition , 
6467    defDir : string , 
6568    stack : string [ ] , 
66-     generated : Definition [ ] 
69+     generated : Definition [ ] , 
70+     options : GeneratorOptions 
6771) : void { 
6872    const  defName  =  definition . name ; 
6973    const  defFilePath  =  path . join ( defDir ,  `${ defName }  ) ; 
@@ -76,14 +80,24 @@ function generateDefinitionFile(
7680    const  definitionImports : OptionalKind < ImportDeclarationStructure > [ ]  =  [ ] ; 
7781    const  definitionProperties : PropertySignatureStructure [ ]  =  [ ] ; 
7882    for  ( const  prop  of  definition . properties )  { 
83+         if ( options . modelPropertyNaming )  { 
84+             switch  ( options . modelPropertyNaming )  { 
85+                 case  ModelPropertyNaming . camelCase :
86+                     prop . name  =  camelcase ( prop . name ) ; 
87+                     break ; 
88+                 case  ModelPropertyNaming . PascalCase :
89+                     prop . name  =  camelcase ( prop . name ,  {  pascalCase : true  } ) ; 
90+                     break ; 
91+             } 
92+         } 
7993        if  ( prop . kind  ===  "PRIMITIVE" )  { 
8094            // e.g. string 
8195            definitionProperties . push ( createProperty ( prop . name ,  prop . type ,  prop . description ,  prop . isArray ) ) ; 
8296        }  else  if  ( prop . kind  ===  "REFERENCE" )  { 
8397            // e.g. Items 
8498            if  ( ! generated . includes ( prop . ref ) )  { 
8599                // Wasn't generated yet 
86-                 generateDefinitionFile ( project ,  prop . ref ,  defDir ,  [ ...stack ,  prop . ref . name ] ,  generated ) ; 
100+                 generateDefinitionFile ( project ,  prop . ref ,  defDir ,  [ ...stack ,  prop . ref . name ] ,  generated ,   options ) ; 
87101            } 
88102            // If a property is of the same type as its parent type, don't add import 
89103            if ( prop . ref . name  !==  definition . name )  { 
@@ -150,7 +164,8 @@ export async function generate(parsedWsdl: ParsedWsdl, outDir: string, options:
150164                            method . paramDefinition , 
151165                            defDir , 
152166                            [ method . paramDefinition . name ] , 
153-                             allDefinitions 
167+                             allDefinitions , 
168+                             mergedOptions 
154169                        ) ; 
155170                        addSafeImport ( clientImports ,  `./definitions/${ method . paramDefinition . name }  ,  method . paramDefinition . name ) ; 
156171                    } 
@@ -164,7 +179,8 @@ export async function generate(parsedWsdl: ParsedWsdl, outDir: string, options:
164179                            method . returnDefinition , 
165180                            defDir , 
166181                            [ method . returnDefinition . name ] , 
167-                             allDefinitions 
182+                             allDefinitions , 
183+                             mergedOptions 
168184                        ) ; 
169185                        addSafeImport ( clientImports ,  `./definitions/${ method . returnDefinition . name }  ,  method . returnDefinition . name ) ; 
170186                    } 
0 commit comments