diff --git a/CHANGELOG.md b/CHANGELOG.md index a5cb2c0be..22dc23ef4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ - @camc314 - @cprussin +- @Th3S4mur41 ## v0.24.8 (2023-06-04) diff --git a/package-lock.json b/package-lock.json index 7ef595653..3b2f64116 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "prettier": "3.0.1", "puppeteer": "^13.5.2", "ts-node": "^10.9.1", - "typescript": "5.1.6" + "typescript": "5.2.2" }, "engines": { "node": ">= 16" @@ -3235,9 +3235,9 @@ } }, "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, "bin": { "tsc": "bin/tsc", diff --git a/package.json b/package.json index a5460c985..ae552165d 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "shiki": "^0.14.1" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x" }, "devDependencies": { "@types/lunr": "^2.3.4", @@ -47,7 +47,7 @@ "prettier": "3.0.1", "puppeteer": "^13.5.2", "ts-node": "^10.9.1", - "typescript": "5.1.6" + "typescript": "5.2.2" }, "files": [ "/bin", diff --git a/scripts/rebuild_specs.js b/scripts/rebuild_specs.js index 6ddd9ec2e..43b7cf461 100644 --- a/scripts/rebuild_specs.js +++ b/scripts/rebuild_specs.js @@ -15,19 +15,20 @@ const { basename } = require("path"); const base = path.join(__dirname, "../src/test/converter"); async function getApp() { - const app = new td.Application(); - app.options.addReader(new td.TSConfigReader()); - await app.bootstrap({ - name: "typedoc", - excludeExternals: true, - disableSources: false, - tsconfig: path.join(base, "tsconfig.json"), - externalPattern: ["**/node_modules/**"], - entryPointStrategy: td.EntryPointStrategy.Expand, - logLevel: td.LogLevel.Warn, - gitRevision: "fake", - readme: "none", - }); + const app = await td.Application.bootstrap( + { + name: "typedoc", + excludeExternals: true, + disableSources: false, + tsconfig: path.join(base, "tsconfig.json"), + externalPattern: ["**/node_modules/**"], + entryPointStrategy: td.EntryPointStrategy.Expand, + logLevel: td.LogLevel.Warn, + gitRevision: "fake", + readme: "none", + }, + [new td.TSConfigReader()], + ); app.serializer.addSerializer({ priority: -1, supports(obj) { diff --git a/src/lib/converter/types.ts b/src/lib/converter/types.ts index 3cffc218c..2e536f02b 100644 --- a/src/lib/converter/types.ts +++ b/src/lib/converter/types.ts @@ -921,14 +921,16 @@ const tupleConverter: TypeConverter = { if (type.target.labeledElementDeclarations) { const namedDeclarations = type.target.labeledElementDeclarations; - elements = elements?.map( - (el, i) => - new NamedTupleMember( - namedDeclarations[i].name.getText(), - !!namedDeclarations[i].questionToken, - removeUndefined(el), - ), - ); + elements = elements?.map((el, i) => { + const namedDecl = namedDeclarations[i]; + return namedDecl + ? new NamedTupleMember( + namedDecl.name.getText(), + !!namedDecl.questionToken, + removeUndefined(el), + ) + : el; + }); } elements = elements?.map((el, i) => { diff --git a/src/test/behavior.c2.test.ts b/src/test/behavior.c2.test.ts index 859b2d782..177568362 100644 --- a/src/test/behavior.c2.test.ts +++ b/src/test/behavior.c2.test.ts @@ -763,6 +763,27 @@ describe("Behavior Tests", () => { ); }); + it("Handles named tuple declarations", () => { + const project = convert("namedTupleMembers"); + + equal( + query(project, "PartiallyNamedTuple").type?.toString(), + "[name: string, number]", + ); + equal( + query(project, "PartiallyNamedTuple2").type?.toString(), + "[name?: string, number?]", + ); + equal( + query(project, "PartiallyNamedTupleRest").type?.toString(), + "[name?: string, ...number[]]", + ); + equal( + query(project, "partiallyNamedTupleRest").type?.toString(), + "[name?: string, ...number[]]", + ); + }); + it("Handles overloads", () => { const project = convert("overloads"); const foo = query(project, "foo"); diff --git a/src/test/converter2/behavior/namedTupleMembers.ts b/src/test/converter2/behavior/namedTupleMembers.ts new file mode 100644 index 000000000..9d5b01ab4 --- /dev/null +++ b/src/test/converter2/behavior/namedTupleMembers.ts @@ -0,0 +1,10 @@ +export type PartiallyNamedTuple = [name: string, number]; + +export type PartiallyNamedTuple2 = [name?: string, number?]; + +export type PartiallyNamedTupleRest = [name?: string, ...number[]]; + +export const partiallyNamedTupleRest = {} as any as [ + name?: string, + ...number[], +];