Skip to content

Commit

Permalink
Merge pull request #82 from svandriel/feature/eslint-fixes
Browse files Browse the repository at this point in the history
ESlint fixes plus other minor improvements
  • Loading branch information
dderevjanik authored May 7, 2024
2 parents d4efe27 + c530e61 commit 70cacd2
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 94 deletions.
2 changes: 1 addition & 1 deletion src/generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ export async function generate(
namedImports: [
{ name: "Client", alias: "SoapClient" },
{ name: "createClientAsync", alias: "soapCreateClientAsync" },
{ name: "IExOptions", alias: "ISoapExOptions" }
{ name: "IExOptions", alias: "ISoapExOptions" },
],
});
clientFile.addImportDeclarations(clientImports);
Expand Down
179 changes: 86 additions & 93 deletions src/parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ interface ParserOptions {
modelNamePreffix: string;
modelNameSuffix: string;
maxRecursiveDefinitionName: number;
caseInsensitiveNames: boolean
caseInsensitiveNames: boolean;
}

const defaultOptions: ParserOptions = {
modelNamePreffix: "",
modelNameSuffix: "",
maxRecursiveDefinitionName: 64,
caseInsensitiveNames: false
caseInsensitiveNames: false,
};

type VisitedDefinition = {
Expand All @@ -45,7 +45,7 @@ const NODE_SOAP_PARSED_TYPES: { [type: string]: string } = {
date: "Date",
};

function toPrimitedType(type: string): string {
function toPrimitiveType(type: string): string {
const index = type.indexOf(":");
if (index >= 0) {
type = type.substring(index + 1);
Expand Down Expand Up @@ -78,7 +78,6 @@ function parseDefinition(
nonCollisionDefName = parsedWsdl.findNonCollisionDefinitionName(defName);
} catch (err) {
const e = new Error(`Error for finding non-collision definition name for ${stack.join(".")}.${name}`);
e.stack.split("\n").slice(0, 2).join("\n") + "\n" + err.stack;
throw e;
}
const definition: Definition = {
Expand Down Expand Up @@ -119,7 +118,7 @@ function parseDefinition(
name: stripedPropName,
sourceName: propName,
description: type,
type: toPrimitedType(type),
type: toPrimitiveType(type),
isArray: true,
});
} else if (type instanceof ComplexTypeElement) {
Expand Down Expand Up @@ -166,68 +165,64 @@ function parseDefinition(
const e = new Error(
`Error while parsing Subdefinition for '${stack.join(".")}.${name}'`
);
e.stack.split("\n").slice(0, 2).join("\n") + "\n" + err.stack;
throw e;
}
}
}
} else if (typeof type === "string") {
// primitive type
definition.properties.push({
kind: "PRIMITIVE",
name: propName,
sourceName: propName,
description: type,
type: toPrimitiveType(type),
isArray: false,
});
} else if (type instanceof ComplexTypeElement) {
// TODO: Finish complex type parsing by updating node-soap
definition.properties.push({
kind: "PRIMITIVE",
name: propName,
sourceName: propName,
description: "ComplexType are not supported yet",
type: "any",
isArray: false,
});
Logger.warn(`Cannot parse ComplexType '${stack.join(".")}.${name}' - using 'any' type`);
} else {
if (typeof type === "string") {
// primitive type
definition.properties.push({
kind: "PRIMITIVE",
name: propName,
sourceName: propName,
description: type,
type: toPrimitedType(type),
isArray: false,
});
} else if (type instanceof ComplexTypeElement) {
// TODO: Finish complex type parsing by updating node-soap
// With sub-type
const reference = findReferenceDefiniton(visitedDefs, type);
if (reference) {
// By referencing already declared definition, we will avoid circular references
definition.properties.push({
kind: "PRIMITIVE",
kind: "REFERENCE",
name: propName,
sourceName: propName,
description: "ComplexType are not supported yet",
type: "any",
description: "",
ref: reference.definition,
isArray: false,
});
Logger.warn(`Cannot parse ComplexType '${stack.join(".")}.${name}' - using 'any' type`);
} else {
// With sub-type
const reference = findReferenceDefiniton(visitedDefs, type);
if (reference) {
// By referencing already declared definition, we will avoid circular references
try {
const subDefinition = parseDefinition(
parsedWsdl,
options,
propName,
type,
[...stack, propName],
visitedDefs
);
definition.properties.push({
kind: "REFERENCE",
name: propName,
sourceName: propName,
description: "",
ref: reference.definition,
ref: subDefinition,
isArray: false,
});
} else {
try {
const subDefinition = parseDefinition(
parsedWsdl,
options,
propName,
type,
[...stack, propName],
visitedDefs
);
definition.properties.push({
kind: "REFERENCE",
name: propName,
sourceName: propName,
ref: subDefinition,
isArray: false,
});
} catch (err) {
const e = new Error(`Error while parsing Subdefinition for ${stack.join(".")}.${name}`);
e.stack.split("\n").slice(0, 2).join("\n") + "\n" + err.stack;
throw e;
}
} catch (err) {
const e = new Error(`Error while parsing Subdefinition for ${stack.join(".")}.${name}`);
throw e;
}
}
}
Expand Down Expand Up @@ -267,7 +262,7 @@ export async function parseWsdl(wsdlPath: string, options: Partial<ParserOptions
maxStack: options.maxRecursiveDefinitionName,
caseInsensitiveNames: options.caseInsensitiveNames,
modelNamePreffix: options.modelNamePreffix,
modelNameSuffix: options.modelNameSuffix
modelNameSuffix: options.modelNameSuffix,
});
const filename = path.basename(wsdlPath);
parsedWsdl.name = changeCase(stripExtension(filename), {
Expand All @@ -278,7 +273,6 @@ export async function parseWsdl(wsdlPath: string, options: Partial<ParserOptions

const visitedDefinitions: Array<VisitedDefinition> = [];

const allMethods: Method[] = [];
const allPorts: Port[] = [];
const services: Service[] = [];
for (const [serviceName, service] of Object.entries(wsdl.definitions.services)) {
Expand Down Expand Up @@ -306,28 +300,28 @@ export async function parseWsdl(wsdlPath: string, options: Partial<ParserOptions
const type = parsedWsdl.findDefinition(
inputMessage.element.$type ?? inputMessage.element.$name
);
inputDefinition = type
? type
: parseDefinition(
parsedWsdl,
mergedOptions,
typeName,
inputMessage.parts,
[typeName],
visitedDefinitions
);
inputDefinition =
type ??
parseDefinition(
parsedWsdl,
mergedOptions,
typeName,
inputMessage.parts,
[typeName],
visitedDefinitions
);
} else if (inputMessage.parts) {
const type = parsedWsdl.findDefinition(paramName);
inputDefinition = type
? type
: parseDefinition(
parsedWsdl,
mergedOptions,
paramName,
inputMessage.parts,
[paramName],
visitedDefinitions
);
inputDefinition =
type ??
parseDefinition(
parsedWsdl,
mergedOptions,
paramName,
inputMessage.parts,
[paramName],
visitedDefinitions
);
} else {
Logger.debug(
`Method '${serviceName}.${portName}.${methodName}' doesn't have any input defined`
Expand All @@ -342,28 +336,28 @@ export async function parseWsdl(wsdlPath: string, options: Partial<ParserOptions
// TODO: if `$type` not defined, inline type into function declartion (do not create definition file) - wsimport
const typeName = outputMessage.element.$type ?? outputMessage.element.$name;
const type = parsedWsdl.findDefinition(typeName);
outputDefinition = type
? type
: parseDefinition(
parsedWsdl,
mergedOptions,
typeName,
outputMessage.parts,
[typeName],
visitedDefinitions
);
outputDefinition =
type ??
parseDefinition(
parsedWsdl,
mergedOptions,
typeName,
outputMessage.parts,
[typeName],
visitedDefinitions
);
} else {
const type = parsedWsdl.findDefinition(paramName);
outputDefinition = type
? type
: parseDefinition(
parsedWsdl,
mergedOptions,
paramName,
outputMessage.parts,
[paramName],
visitedDefinitions
);
outputDefinition =
type ??
parseDefinition(
parsedWsdl,
mergedOptions,
paramName,
outputMessage.parts,
[paramName],
visitedDefinitions
);
}
}

Expand All @@ -377,7 +371,6 @@ export async function parseWsdl(wsdlPath: string, options: Partial<ParserOptions
returnDefinition: outputDefinition, // TODO: Use string from generated definition files
};
portMethods.push(portMethod);
allMethods.push(portMethod);
}

const servicePort: Port = {
Expand Down

0 comments on commit 70cacd2

Please sign in to comment.