@@ -11,14 +11,14 @@ interface ParserOptions {
1111 modelNamePreffix : string ;
1212 modelNameSuffix : string ;
1313 maxRecursiveDefinitionName : number ;
14- caseInsensitiveNames : boolean
14+ caseInsensitiveNames : boolean ;
1515}
1616
1717const defaultOptions : ParserOptions = {
1818 modelNamePreffix : "" ,
1919 modelNameSuffix : "" ,
2020 maxRecursiveDefinitionName : 64 ,
21- caseInsensitiveNames : false
21+ caseInsensitiveNames : false ,
2222} ;
2323
2424type VisitedDefinition = {
@@ -45,7 +45,7 @@ const NODE_SOAP_PARSED_TYPES: { [type: string]: string } = {
4545 date : "Date" ,
4646} ;
4747
48- function toPrimitedType ( type : string ) : string {
48+ function toPrimitiveType ( type : string ) : string {
4949 const index = type . indexOf ( ":" ) ;
5050 if ( index >= 0 ) {
5151 type = type . substring ( index + 1 ) ;
@@ -78,7 +78,6 @@ function parseDefinition(
7878 nonCollisionDefName = parsedWsdl . findNonCollisionDefinitionName ( defName ) ;
7979 } catch ( err ) {
8080 const e = new Error ( `Error for finding non-collision definition name for ${ stack . join ( "." ) } .${ name } ` ) ;
81- e . stack . split ( "\n" ) . slice ( 0 , 2 ) . join ( "\n" ) + "\n" + err . stack ;
8281 throw e ;
8382 }
8483 const definition : Definition = {
@@ -119,7 +118,7 @@ function parseDefinition(
119118 name : stripedPropName ,
120119 sourceName : propName ,
121120 description : type ,
122- type : toPrimitedType ( type ) ,
121+ type : toPrimitiveType ( type ) ,
123122 isArray : true ,
124123 } ) ;
125124 } else if ( type instanceof ComplexTypeElement ) {
@@ -166,68 +165,64 @@ function parseDefinition(
166165 const e = new Error (
167166 `Error while parsing Subdefinition for '${ stack . join ( "." ) } .${ name } '`
168167 ) ;
169- e . stack . split ( "\n" ) . slice ( 0 , 2 ) . join ( "\n" ) + "\n" + err . stack ;
170168 throw e ;
171169 }
172170 }
173171 }
172+ } else if ( typeof type === "string" ) {
173+ // primitive type
174+ definition . properties . push ( {
175+ kind : "PRIMITIVE" ,
176+ name : propName ,
177+ sourceName : propName ,
178+ description : type ,
179+ type : toPrimitiveType ( type ) ,
180+ isArray : false ,
181+ } ) ;
182+ } else if ( type instanceof ComplexTypeElement ) {
183+ // TODO: Finish complex type parsing by updating node-soap
184+ definition . properties . push ( {
185+ kind : "PRIMITIVE" ,
186+ name : propName ,
187+ sourceName : propName ,
188+ description : "ComplexType are not supported yet" ,
189+ type : "any" ,
190+ isArray : false ,
191+ } ) ;
192+ Logger . warn ( `Cannot parse ComplexType '${ stack . join ( "." ) } .${ name } ' - using 'any' type` ) ;
174193 } else {
175- if ( typeof type === "string" ) {
176- // primitive type
177- definition . properties . push ( {
178- kind : "PRIMITIVE" ,
179- name : propName ,
180- sourceName : propName ,
181- description : type ,
182- type : toPrimitedType ( type ) ,
183- isArray : false ,
184- } ) ;
185- } else if ( type instanceof ComplexTypeElement ) {
186- // TODO: Finish complex type parsing by updating node-soap
194+ // With sub-type
195+ const reference = findReferenceDefiniton ( visitedDefs , type ) ;
196+ if ( reference ) {
197+ // By referencing already declared definition, we will avoid circular references
187198 definition . properties . push ( {
188- kind : "PRIMITIVE " ,
199+ kind : "REFERENCE " ,
189200 name : propName ,
190201 sourceName : propName ,
191- description : "ComplexType are not supported yet " ,
192- type : "any" ,
202+ description : "" ,
203+ ref : reference . definition ,
193204 isArray : false ,
194205 } ) ;
195- Logger . warn ( `Cannot parse ComplexType '${ stack . join ( "." ) } .${ name } ' - using 'any' type` ) ;
196206 } else {
197- // With sub-type
198- const reference = findReferenceDefiniton ( visitedDefs , type ) ;
199- if ( reference ) {
200- // By referencing already declared definition, we will avoid circular references
207+ try {
208+ const subDefinition = parseDefinition (
209+ parsedWsdl ,
210+ options ,
211+ propName ,
212+ type ,
213+ [ ...stack , propName ] ,
214+ visitedDefs
215+ ) ;
201216 definition . properties . push ( {
202217 kind : "REFERENCE" ,
203218 name : propName ,
204219 sourceName : propName ,
205- description : "" ,
206- ref : reference . definition ,
220+ ref : subDefinition ,
207221 isArray : false ,
208222 } ) ;
209- } else {
210- try {
211- const subDefinition = parseDefinition (
212- parsedWsdl ,
213- options ,
214- propName ,
215- type ,
216- [ ...stack , propName ] ,
217- visitedDefs
218- ) ;
219- definition . properties . push ( {
220- kind : "REFERENCE" ,
221- name : propName ,
222- sourceName : propName ,
223- ref : subDefinition ,
224- isArray : false ,
225- } ) ;
226- } catch ( err ) {
227- const e = new Error ( `Error while parsing Subdefinition for ${ stack . join ( "." ) } .${ name } ` ) ;
228- e . stack . split ( "\n" ) . slice ( 0 , 2 ) . join ( "\n" ) + "\n" + err . stack ;
229- throw e ;
230- }
223+ } catch ( err ) {
224+ const e = new Error ( `Error while parsing Subdefinition for ${ stack . join ( "." ) } .${ name } ` ) ;
225+ throw e ;
231226 }
232227 }
233228 }
@@ -267,7 +262,7 @@ export async function parseWsdl(wsdlPath: string, options: Partial<ParserOptions
267262 maxStack : options . maxRecursiveDefinitionName ,
268263 caseInsensitiveNames : options . caseInsensitiveNames ,
269264 modelNamePreffix : options . modelNamePreffix ,
270- modelNameSuffix : options . modelNameSuffix
265+ modelNameSuffix : options . modelNameSuffix ,
271266 } ) ;
272267 const filename = path . basename ( wsdlPath ) ;
273268 parsedWsdl . name = changeCase ( stripExtension ( filename ) , {
@@ -278,7 +273,6 @@ export async function parseWsdl(wsdlPath: string, options: Partial<ParserOptions
278273
279274 const visitedDefinitions : Array < VisitedDefinition > = [ ] ;
280275
281- const allMethods : Method [ ] = [ ] ;
282276 const allPorts : Port [ ] = [ ] ;
283277 const services : Service [ ] = [ ] ;
284278 for ( const [ serviceName , service ] of Object . entries ( wsdl . definitions . services ) ) {
@@ -306,28 +300,28 @@ export async function parseWsdl(wsdlPath: string, options: Partial<ParserOptions
306300 const type = parsedWsdl . findDefinition (
307301 inputMessage . element . $type ?? inputMessage . element . $name
308302 ) ;
309- inputDefinition = type
310- ? type
311- : parseDefinition (
312- parsedWsdl ,
313- mergedOptions ,
314- typeName ,
315- inputMessage . parts ,
316- [ typeName ] ,
317- visitedDefinitions
318- ) ;
303+ inputDefinition =
304+ type ??
305+ parseDefinition (
306+ parsedWsdl ,
307+ mergedOptions ,
308+ typeName ,
309+ inputMessage . parts ,
310+ [ typeName ] ,
311+ visitedDefinitions
312+ ) ;
319313 } else if ( inputMessage . parts ) {
320314 const type = parsedWsdl . findDefinition ( paramName ) ;
321- inputDefinition = type
322- ? type
323- : parseDefinition (
324- parsedWsdl ,
325- mergedOptions ,
326- paramName ,
327- inputMessage . parts ,
328- [ paramName ] ,
329- visitedDefinitions
330- ) ;
315+ inputDefinition =
316+ type ??
317+ parseDefinition (
318+ parsedWsdl ,
319+ mergedOptions ,
320+ paramName ,
321+ inputMessage . parts ,
322+ [ paramName ] ,
323+ visitedDefinitions
324+ ) ;
331325 } else {
332326 Logger . debug (
333327 `Method '${ serviceName } .${ portName } .${ methodName } ' doesn't have any input defined`
@@ -342,28 +336,28 @@ export async function parseWsdl(wsdlPath: string, options: Partial<ParserOptions
342336 // TODO: if `$type` not defined, inline type into function declartion (do not create definition file) - wsimport
343337 const typeName = outputMessage . element . $type ?? outputMessage . element . $name ;
344338 const type = parsedWsdl . findDefinition ( typeName ) ;
345- outputDefinition = type
346- ? type
347- : parseDefinition (
348- parsedWsdl ,
349- mergedOptions ,
350- typeName ,
351- outputMessage . parts ,
352- [ typeName ] ,
353- visitedDefinitions
354- ) ;
339+ outputDefinition =
340+ type ??
341+ parseDefinition (
342+ parsedWsdl ,
343+ mergedOptions ,
344+ typeName ,
345+ outputMessage . parts ,
346+ [ typeName ] ,
347+ visitedDefinitions
348+ ) ;
355349 } else {
356350 const type = parsedWsdl . findDefinition ( paramName ) ;
357- outputDefinition = type
358- ? type
359- : parseDefinition (
360- parsedWsdl ,
361- mergedOptions ,
362- paramName ,
363- outputMessage . parts ,
364- [ paramName ] ,
365- visitedDefinitions
366- ) ;
351+ outputDefinition =
352+ type ??
353+ parseDefinition (
354+ parsedWsdl ,
355+ mergedOptions ,
356+ paramName ,
357+ outputMessage . parts ,
358+ [ paramName ] ,
359+ visitedDefinitions
360+ ) ;
367361 }
368362 }
369363
@@ -377,7 +371,6 @@ export async function parseWsdl(wsdlPath: string, options: Partial<ParserOptions
377371 returnDefinition : outputDefinition , // TODO: Use string from generated definition files
378372 } ;
379373 portMethods . push ( portMethod ) ;
380- allMethods . push ( portMethod ) ;
381374 }
382375
383376 const servicePort : Port = {
0 commit comments