diff --git a/package.json b/package.json index 2b4d3fb..fbcc348 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "root", "private": true, + "packageManager": "yarn@1.22.22", "workspaces": { "packages": [ "packages/*", diff --git a/packages/dts-generator/src/phases/dts-code-gen.ts b/packages/dts-generator/src/phases/dts-code-gen.ts index 9108a90..2fa1419 100644 --- a/packages/dts-generator/src/phases/dts-code-gen.ts +++ b/packages/dts-generator/src/phases/dts-code-gen.ts @@ -545,6 +545,14 @@ function genMethodOrFunction( ? "" : `<${_.map(ast.typeParameters, genTypeParameter).join(",")}>`; let text = ""; + if (ast.overloads) { + text += _.map( + ast.overloads, + (overload) => + genMethodOrFunction(overload, staticPossible, isFunc, options) + NL, + ).join(""); + return text; + } text += JSDOC(ast) + NL; text += applyTsIgnore(ast); text += ast.overwrite ? "// @ts-ignore" + NL : ""; @@ -571,6 +579,14 @@ function genMethodOrFunction( function genConstructor(ast: FunctionDesc) { let text = ""; + if (ast.overloads) { + text += _.map( + ast.overloads, + (overload) => genConstructor(overload) + NL, + ).join(""); + return text; + } + text += JSDOC(ast) + NL; text += ast.overwrite ? "// @ts-ignore" + NL : ""; text += ast.visibility === "protected" ? "protected " : ""; // only needed for hiding constructors via @hideconstructor diff --git a/packages/dts-generator/src/phases/json-fixer.ts b/packages/dts-generator/src/phases/json-fixer.ts index fdfa9a1..dabecdb 100644 --- a/packages/dts-generator/src/phases/json-fixer.ts +++ b/packages/dts-generator/src/phases/json-fixer.ts @@ -525,6 +525,9 @@ function parseTypeExpressions(symbols: ConcreteSymbol[]) { if (Array.isArray(method.throws)) { method.throws.forEach(visitAnythingWithAType); } + if (Array.isArray(method.overloads)) { + method.overloads.forEach(visitMethod); + } } function visitEvent(event: Ui5Event) { diff --git a/packages/dts-generator/src/phases/json-to-ast.ts b/packages/dts-generator/src/phases/json-to-ast.ts index d666f76..111583b 100644 --- a/packages/dts-generator/src/phases/json-to-ast.ts +++ b/packages/dts-generator/src/phases/json-to-ast.ts @@ -254,6 +254,9 @@ class ASTVisitor { * @param fct */ _visitFunction(fct: FunctionDesc) { + if (fct.overloads) { + _.forEach(fct.overloads, (overload) => this._visitFunction(overload)); + } _.forEach(fct.typeParameters, (typeParam) => this._visitTypeParam(typeParam), ); @@ -1265,6 +1268,7 @@ function buildFunction(ui5Method: ObjMethod): FunctionDesc { assertKnownProps( [ "name", + "overloads", "typeParameters", "parameters", "returnValue", @@ -1277,6 +1281,9 @@ function buildFunction(ui5Method: ObjMethod): FunctionDesc { const astNode: FunctionDesc = { kind: "FunctionDesc", name: ui5Method.name, + overloads: ui5Method.overloads + ? _.map(ui5Method.overloads, buildFunction) + : undefined, static: ui5Method.static === true, typeParameters: _.map(ui5Method.typeParameters, buildTypeParameter), parameters: _.map(ui5Method.parameters, buildParameter), diff --git a/packages/dts-generator/src/types/ast.d.ts b/packages/dts-generator/src/types/ast.d.ts index 6c2f330..d13d28c 100644 --- a/packages/dts-generator/src/types/ast.d.ts +++ b/packages/dts-generator/src/types/ast.d.ts @@ -135,6 +135,7 @@ export interface VariableWithValue extends Variable { export interface FunctionDesc extends AstNode, UI5JSDocs { kind: "FunctionDesc"; name: string; + overloads?: Array; static?: boolean; overwrite?: boolean; typeParameters?: TypeParameter[];