Skip to content

Commit 833ebb8

Browse files
Gerrit0Dergash
andcommitted
feat: Re-introduce support for TS 3.9
Closes #1362. Co-Authored-By: Constantine Dergachev <[email protected]>
1 parent 36aeac6 commit 833ebb8

File tree

5 files changed

+54
-16
lines changed

5 files changed

+54
-16
lines changed

package-lock.json

Lines changed: 15 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@
2828
"marked": "^1.1.1",
2929
"minimatch": "^3.0.0",
3030
"progress": "^2.0.3",
31+
"semver": "^7.3.2",
3132
"shelljs": "^0.8.4",
3233
"typedoc-default-themes": "^0.11.1"
3334
},
3435
"peerDependencies": {
35-
"typescript": ">=4.0.2"
36+
"typescript": "3.9.x || 4.0.x"
3637
},
3738
"devDependencies": {
3839
"@types/fs-extra": "^9.0.1",
Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,29 @@
11
// @ts-check
22

3-
const fs = require('fs-extra');
4-
const { join } = require('path');
3+
const fs = require("fs-extra");
4+
const { join } = require("path");
55

6-
const file = join(__dirname, '../dist/lib/application.js');
6+
const file = join(__dirname, "../dist/lib/application.js");
77

8-
Promise.all([
9-
fs.readJson(join(__dirname, '../package.json')).then(({ version }) => version),
10-
fs.readFile(file, { encoding: 'utf-8' })
11-
]).then(([version, text]) => {
12-
return fs.writeFile(file, text.replace(/{{ VERSION }}/g, version));
13-
}).catch(reason => {
8+
async function main() {
9+
const [package, text] = await Promise.all([
10+
fs.readJson(join(__dirname, "../package.json")),
11+
fs.readFile(file, { encoding: "utf-8" }),
12+
]);
13+
14+
const replacements = {
15+
VERSION: package.version,
16+
SUPPORTED: package.peerDependencies.typescript,
17+
};
18+
19+
const replaced = text.replace(/{{ (VERSION|SUPPORTED) }}/g, (_, match) => {
20+
return replacements[match];
21+
});
22+
23+
await fs.writeFile(file, replaced);
24+
}
25+
26+
main().catch((reason) => {
1427
console.error(reason);
1528
process.exit(1);
1629
});

src/lib/application.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import * as Path from 'path';
1010
import * as FS from 'fs';
1111
import * as typescript from 'typescript';
12+
import * as semver from 'semver';
1213

1314
import { Converter } from './converter/index';
1415
import { Renderer } from './output/renderer';
@@ -92,6 +93,11 @@ export class Application extends ChildableComponent<
9293
*/
9394
static VERSION = '{{ VERSION }}';
9495

96+
/**
97+
* The supported TypeScript version.
98+
*/
99+
static SUPPORTED_TS_VERSION = '{{ SUPPORTED }}';
100+
95101
/**
96102
* Create a new TypeDoc application instance.
97103
*
@@ -184,6 +190,10 @@ export class Application extends ChildableComponent<
184190
this.getTypeScriptPath()
185191
);
186192

193+
if (!semver.satisfies(typescript.version, Application.SUPPORTED_TS_VERSION)) {
194+
this.logger.warn(`You are running in an unsupported TypeScript version! TypeDoc supports ${Application.SUPPORTED_TS_VERSION}`);
195+
}
196+
187197
const result = this.converter.convert(src);
188198
if (result.errors && result.errors.length) {
189199
this.logger.diagnostics(result.errors);

src/lib/converter/types/tuple.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ export class TupleConverter extends ConverterTypeComponent implements TypeConver
4747
* @returns The type reflection representing the given tuple type node.
4848
*/
4949
convertNode(context: Context, node: ts.TupleTypeNode): TupleType {
50-
const elements: Type[] = this.owner.convertTypes(context, node.elements);
50+
// TS 3.9 support
51+
const elementTypes = node.elements ?? (node as any).elementTypes;
52+
const elements: Type[] = this.owner.convertTypes(context, elementTypes);
5153
return new TupleType(elements);
5254
}
5355

@@ -74,7 +76,8 @@ export class TupleConverter extends ConverterTypeComponent implements TypeConver
7476
@Component({ name: 'type:named-tuple-member' })
7577
export class NamedTupleMemberConverter extends ConverterTypeComponent implements TypeNodeConverter<ts.Type, ts.NamedTupleMember> {
7678
supportsNode(_context: Context, node: ts.Node) {
77-
return ts.isNamedTupleMember(node);
79+
// TS 3.9 support
80+
return ts.isNamedTupleMember && ts.isNamedTupleMember(node);
7881
}
7982

8083
convertNode(context: Context, node: ts.NamedTupleMember): NamedTupleMember | undefined {

0 commit comments

Comments
 (0)