Skip to content

Commit f0e6d70

Browse files
authored
feat: support typescript >= 4.8 (#96)
BREAKING CHANGE: require typescript >= 4.8
1 parent e4ac34a commit f0e6d70

File tree

8 files changed

+162
-169
lines changed

8 files changed

+162
-169
lines changed

src/internal/TsGenerator/factory/ClassDeclaration.ts

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,18 @@ export interface Factory {
1111
create: (params: Params$Create) => ts.ClassDeclaration;
1212
}
1313

14-
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
15-
params: Params$Create,
16-
): ts.ClassDeclaration => {
17-
const node = factory.createClassDeclaration(
18-
undefined,
19-
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
20-
factory.createIdentifier(params.name),
21-
params.typeParameterDeclaration,
22-
undefined,
23-
params.members,
24-
);
25-
return node;
26-
};
14+
export const create =
15+
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
16+
(params: Params$Create): ts.ClassDeclaration => {
17+
const node = factory.createClassDeclaration(
18+
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
19+
factory.createIdentifier(params.name),
20+
params.typeParameterDeclaration,
21+
undefined,
22+
params.members,
23+
);
24+
return node;
25+
};
2726

2827
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
2928
return {

src/internal/TsGenerator/factory/ConstructorDeclaration.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ export interface Factory {
99
create: (params: Params$Create) => ts.ConstructorDeclaration;
1010
}
1111

12-
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
13-
params: Params$Create,
14-
): ts.ConstructorDeclaration => {
15-
const node = factory.createConstructorDeclaration(undefined, undefined, params.parameters || [], params.body);
16-
return node;
17-
};
12+
export const create =
13+
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
14+
(params: Params$Create): ts.ConstructorDeclaration => {
15+
const node = factory.createConstructorDeclaration(undefined, params.parameters || [], params.body);
16+
return node;
17+
};
1818

1919
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
2020
return {

src/internal/TsGenerator/factory/InterfaceDeclaration.ts

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,22 @@ export interface Factory {
1515
create: (params: Params$Create) => ts.InterfaceDeclaration;
1616
}
1717

18-
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
19-
params: Params$Create,
20-
): ts.InterfaceDeclaration => {
21-
const node = factory.createInterfaceDeclaration(
22-
undefined,
23-
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
24-
factory.createIdentifier(escapeIdentiferText(params.name)),
25-
params.typeParameters,
26-
undefined,
27-
params.members,
28-
);
29-
if (params.comment) {
30-
const comment = generateComment(params.comment, params.deprecated);
31-
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
32-
}
33-
return node;
34-
};
18+
export const create =
19+
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
20+
(params: Params$Create): ts.InterfaceDeclaration => {
21+
const node = ts.factory.createInterfaceDeclaration(
22+
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
23+
factory.createIdentifier(escapeIdentiferText(params.name)),
24+
params.typeParameters,
25+
undefined,
26+
params.members,
27+
);
28+
if (params.comment) {
29+
const comment = generateComment(params.comment, params.deprecated);
30+
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
31+
}
32+
return node;
33+
};
3534

3635
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
3736
return {

src/internal/TsGenerator/factory/MethodDeclaration.ts

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,35 +18,34 @@ export interface Factory {
1818
create: (params: Params$Create) => ts.MethodDeclaration;
1919
}
2020

21-
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
22-
params: Params$Create,
23-
): ts.MethodDeclaration => {
24-
const modifiers: ts.Modifier[] = [];
25-
if (params.private) {
26-
modifiers.push(factory.createModifier(ts.SyntaxKind.PrivateKeyword));
27-
} else {
28-
modifiers.push(factory.createModifier(ts.SyntaxKind.PublicKeyword));
29-
}
30-
if (params.async) {
31-
modifiers.push(factory.createModifier(ts.SyntaxKind.AsyncKeyword));
32-
}
33-
const node = factory.createMethodDeclaration(
34-
undefined,
35-
modifiers,
36-
undefined,
37-
factory.createIdentifier(params.name),
38-
undefined,
39-
params.typeParameters,
40-
params.parameters || [],
41-
params.type,
42-
params.body,
43-
);
44-
if (params.comment) {
45-
const comment = generateComment(params.comment, params.deprecated);
46-
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
47-
}
48-
return node;
49-
};
21+
export const create =
22+
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
23+
(params: Params$Create): ts.MethodDeclaration => {
24+
const modifiers: ts.Modifier[] = [];
25+
if (params.private) {
26+
modifiers.push(factory.createModifier(ts.SyntaxKind.PrivateKeyword));
27+
} else {
28+
modifiers.push(factory.createModifier(ts.SyntaxKind.PublicKeyword));
29+
}
30+
if (params.async) {
31+
modifiers.push(factory.createModifier(ts.SyntaxKind.AsyncKeyword));
32+
}
33+
const node = factory.createMethodDeclaration(
34+
modifiers,
35+
undefined,
36+
factory.createIdentifier(params.name),
37+
undefined,
38+
params.typeParameters,
39+
params.parameters || [],
40+
params.type,
41+
params.body,
42+
);
43+
if (params.comment) {
44+
const comment = generateComment(params.comment, params.deprecated);
45+
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
46+
}
47+
return node;
48+
};
5049

5150
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
5251
return {

src/internal/TsGenerator/factory/Namespace.ts

Lines changed: 67 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -33,80 +33,79 @@ export interface Factory {
3333
}
3434

3535
// eslint-disable-next-line no-unused-vars
36-
export const findStatement = (context: Pick<ts.TransformationContext, "factory">): Factory["findNamespace"] => (
37-
params: Params$FindStatement,
38-
): ts.Statement | undefined => {
39-
let statement: ts.Statement | undefined;
40-
params.node.forEachChild(node => {
41-
if (ts.isModuleDeclaration(node) && node.name.text === params.name) {
42-
statement = node;
43-
}
44-
});
45-
return statement;
46-
};
36+
export const findStatement =
37+
(context: Pick<ts.TransformationContext, "factory">): Factory["findNamespace"] =>
38+
(params: Params$FindStatement): ts.Statement | undefined => {
39+
let statement: ts.Statement | undefined;
40+
params.node.forEachChild(node => {
41+
if (ts.isModuleDeclaration(node) && node.name.text === params.name) {
42+
statement = node;
43+
}
44+
});
45+
return statement;
46+
};
4747

48-
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
49-
params: Params$Create,
50-
): ts.ModuleDeclaration => {
51-
const node = factory.createModuleDeclaration(
52-
undefined,
53-
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
54-
factory.createIdentifier(params.name),
55-
factory.createModuleBlock(params.statements),
56-
ts.NodeFlags.Namespace,
57-
);
58-
if (params.comment) {
59-
const comment = generateComment(params.comment, params.deprecated);
60-
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
61-
}
62-
return node;
63-
};
48+
export const create =
49+
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
50+
(params: Params$Create): ts.ModuleDeclaration => {
51+
const node = factory.createModuleDeclaration(
52+
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
53+
factory.createIdentifier(params.name),
54+
factory.createModuleBlock(params.statements),
55+
ts.NodeFlags.Namespace,
56+
);
57+
if (params.comment) {
58+
const comment = generateComment(params.comment, params.deprecated);
59+
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
60+
}
61+
return node;
62+
};
6463

65-
export const createMultiple = (context: Pick<ts.TransformationContext, "factory">): Factory["createMultiple"] => (
66-
params: Params$CreateMulti,
67-
): ts.ModuleDeclaration => {
68-
const names = params.names.reverse();
69-
const firstName = names[0];
70-
const restNames = names.slice(1, names.length);
71-
const child = create(context)({
72-
export: true,
73-
name: firstName,
74-
statements: params.statements,
75-
comment: params.comment,
76-
deprecated: params.deprecated,
77-
});
78-
return restNames.reduce<ts.ModuleDeclaration>((previousStatement, currentName) => {
79-
return create(context)({
64+
export const createMultiple =
65+
(context: Pick<ts.TransformationContext, "factory">): Factory["createMultiple"] =>
66+
(params: Params$CreateMulti): ts.ModuleDeclaration => {
67+
const names = params.names.reverse();
68+
const firstName = names[0];
69+
const restNames = names.slice(1, names.length);
70+
const child = create(context)({
8071
export: true,
81-
name: currentName,
82-
statements: [previousStatement],
72+
name: firstName,
73+
statements: params.statements,
74+
comment: params.comment,
75+
deprecated: params.deprecated,
8376
});
84-
}, child);
85-
};
77+
return restNames.reduce<ts.ModuleDeclaration>((previousStatement, currentName) => {
78+
return create(context)({
79+
export: true,
80+
name: currentName,
81+
statements: [previousStatement],
82+
});
83+
}, child);
84+
};
8685

87-
export const update = (context: Pick<ts.TransformationContext, "factory">): Factory["update"] => (
88-
params: Params$Update,
89-
): ts.ModuleDeclaration => {
90-
const { factory } = context;
91-
const { node, statements } = params;
92-
if (node.body && ts.isModuleBlock(node.body)) {
93-
const body = ModuleBlock.update(context)({ node: node.body, statements });
94-
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, body);
95-
}
96-
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, node.body);
97-
};
86+
export const update =
87+
(context: Pick<ts.TransformationContext, "factory">): Factory["update"] =>
88+
(params: Params$Update): ts.ModuleDeclaration => {
89+
const { factory } = context;
90+
const { node, statements } = params;
91+
if (node.body && ts.isModuleBlock(node.body)) {
92+
const body = ModuleBlock.update(context)({ node: node.body, statements });
93+
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, body);
94+
}
95+
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, node.body);
96+
};
9897

99-
export const addStatements = (context: Pick<ts.TransformationContext, "factory">): Factory["addStatements"] => (
100-
params: Params$Update,
101-
): ts.ModuleDeclaration => {
102-
const { factory } = context;
103-
const { node, statements } = params;
104-
if (node.body && ts.isModuleBlock(node.body)) {
105-
const body = ModuleBlock.update(context)({ node: node.body, statements: node.body.statements.concat(statements) });
106-
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, body);
107-
}
108-
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, node.body);
109-
};
98+
export const addStatements =
99+
(context: Pick<ts.TransformationContext, "factory">): Factory["addStatements"] =>
100+
(params: Params$Update): ts.ModuleDeclaration => {
101+
const { factory } = context;
102+
const { node, statements } = params;
103+
if (node.body && ts.isModuleBlock(node.body)) {
104+
const body = ModuleBlock.update(context)({ node: node.body, statements: node.body.statements.concat(statements) });
105+
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, body);
106+
}
107+
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, node.body);
108+
};
110109

111110
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
112111
return {

src/internal/TsGenerator/factory/PropertyDeclaration.ts

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import ts from "typescript";
22

33
export interface Params {
4-
decorators?: readonly ts.Decorator[] | undefined;
54
modifiers: readonly ts.Modifier[] | undefined;
65
name: string | ts.PropertyName;
76
questionOrExclamationToken?: ts.QuestionToken | ts.ExclamationToken | undefined;
@@ -13,19 +12,18 @@ export interface Factory {
1312
create: (params: Params) => ts.PropertyDeclaration;
1413
}
1514

16-
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
17-
params: Params,
18-
): ts.PropertyDeclaration => {
19-
const node = factory.createPropertyDeclaration(
20-
params.decorators,
21-
params.modifiers,
22-
params.name,
23-
params.questionOrExclamationToken,
24-
params.type,
25-
params.initializer,
26-
);
27-
return node;
28-
};
15+
export const create =
16+
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
17+
(params: Params): ts.PropertyDeclaration => {
18+
const node = factory.createPropertyDeclaration(
19+
params.modifiers,
20+
params.name,
21+
params.questionOrExclamationToken,
22+
params.type,
23+
params.initializer,
24+
);
25+
return node;
26+
};
2927

3028
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
3129
return {

src/internal/TsGenerator/factory/TypeAliasDeclaration.ts

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,21 @@ export interface Factory {
1414
create: (params: Params$Create) => ts.TypeAliasDeclaration;
1515
}
1616

17-
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
18-
params: Params$Create,
19-
): ts.TypeAliasDeclaration => {
20-
const node = factory.createTypeAliasDeclaration(
21-
undefined,
22-
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
23-
factory.createIdentifier(params.name),
24-
undefined,
25-
params.type,
26-
);
27-
if (params.comment) {
28-
const comment = generateComment(params.comment, params.deprecated);
29-
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
30-
}
31-
return node;
32-
};
17+
export const create =
18+
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
19+
(params: Params$Create): ts.TypeAliasDeclaration => {
20+
const node = factory.createTypeAliasDeclaration(
21+
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
22+
factory.createIdentifier(params.name),
23+
undefined,
24+
params.type,
25+
);
26+
if (params.comment) {
27+
const comment = generateComment(params.comment, params.deprecated);
28+
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
29+
}
30+
return node;
31+
};
3332

3433
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
3534
return {

src/internal/TsGenerator/factory/TypeParameterDeclaration.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ export interface Factory {
1010
create: (params: Params$Create) => ts.TypeParameterDeclaration;
1111
}
1212

13-
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
14-
params: Params$Create,
15-
): ts.TypeParameterDeclaration => {
16-
const node = factory.createTypeParameterDeclaration(factory.createIdentifier(params.name), params.constraint, params.defaultType);
17-
return node;
18-
};
13+
export const create =
14+
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
15+
(params: Params$Create): ts.TypeParameterDeclaration => {
16+
const node = factory.createTypeParameterDeclaration([], factory.createIdentifier(params.name), params.constraint, params.defaultType);
17+
return node;
18+
};
1919

2020
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
2121
return {

0 commit comments

Comments
 (0)