Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
BREAKING CHANGE: Drop support for TypeScript 3.9
TypeDoc only supports the latest two TS minor releases to make development easier.
  • Loading branch information
Gerrit0 committed May 1, 2021
1 parent e1b4834 commit 5d45539
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 35 deletions.
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -30,7 +30,7 @@
"typedoc-default-themes": "^0.12.10"
},
"peerDependencies": {
"typescript": "3.9.x || 4.0.x || 4.1.x || 4.2.x"
"typescript": "4.0.x || 4.1.x || 4.2.x"
},
"devDependencies": {
"@types/lodash": "^4.14.168",
Expand Down
61 changes: 27 additions & 34 deletions src/lib/converter/types.ts
Expand Up @@ -856,17 +856,13 @@ const thisConverter: TypeConverter<ts.ThisTypeNode> = {
const tupleConverter: TypeConverter<ts.TupleTypeNode, ts.TupleTypeReference> = {
kind: [ts.SyntaxKind.TupleType],
convert(context, node) {
// TS 3.9 support
const elementTypes = node.elements ?? (node as any).elementTypes;
const elements = elementTypes.map((node) => convertType(context, node));
const elements = node.elements.map((node) =>
convertType(context, node)
);
return new TupleType(elements);
},
convertType(context, type, node) {
// TS 3.9 support
const elementTypes = node.elements ?? (node as any).elementTypes;
// We need to do this because of type argument constraints, see GH1449
// In TS 4.0 we could use type.target.fixedLength
const types = type.typeArguments?.slice(0, elementTypes.length);
convertType(context, type) {
const types = type.typeArguments?.slice(0, type.target.fixedLength);
let elements = types?.map((type) => convertType(context, type));

if (type.target.labeledElementDeclarations) {
Expand All @@ -881,34 +877,31 @@ const tupleConverter: TypeConverter<ts.TupleTypeNode, ts.TupleTypeReference> = {
);
}

// TS 3.9 support - always defined in 4.0
if (type.target.elementFlags) {
elements = elements?.map((el, i) => {
if (type.target.elementFlags[i] & ts.ElementFlags.Variable) {
// In the node case, we don't need to add the wrapping Array type... but we do here.
if (el instanceof NamedTupleMember) {
return new RestType(
new NamedTupleMember(
el.name,
el.isOptional,
new ArrayType(el.element)
)
);
}

return new RestType(new ArrayType(el));
elements = elements?.map((el, i) => {
if (type.target.elementFlags[i] & ts.ElementFlags.Variable) {
// In the node case, we don't need to add the wrapping Array type... but we do here.
if (el instanceof NamedTupleMember) {
return new RestType(
new NamedTupleMember(
el.name,
el.isOptional,
new ArrayType(el.element)
)
);
}

if (
type.target.elementFlags[i] & ts.ElementFlags.Optional &&
!(el instanceof NamedTupleMember)
) {
return new OptionalType(removeUndefined(el));
}
return new RestType(new ArrayType(el));
}

return el;
});
}
if (
type.target.elementFlags[i] & ts.ElementFlags.Optional &&
!(el instanceof NamedTupleMember)
) {
return new OptionalType(removeUndefined(el));
}

return el;
});

return new TupleType(elements ?? []);
},
Expand Down

0 comments on commit 5d45539

Please sign in to comment.