Skip to content

Commit

Permalink
feat: support typescript >= 4.8 (#96)
Browse files Browse the repository at this point in the history
BREAKING CHANGE: require typescript >= 4.8
  • Loading branch information
Himenon committed Jan 3, 2023
1 parent e4ac34a commit f0e6d70
Show file tree
Hide file tree
Showing 8 changed files with 162 additions and 169 deletions.
25 changes: 12 additions & 13 deletions src/internal/TsGenerator/factory/ClassDeclaration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,18 @@ export interface Factory {
create: (params: Params$Create) => ts.ClassDeclaration;
}

export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
params: Params$Create,
): ts.ClassDeclaration => {
const node = factory.createClassDeclaration(
undefined,
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
factory.createIdentifier(params.name),
params.typeParameterDeclaration,
undefined,
params.members,
);
return node;
};
export const create =
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
(params: Params$Create): ts.ClassDeclaration => {
const node = factory.createClassDeclaration(
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
factory.createIdentifier(params.name),
params.typeParameterDeclaration,
undefined,
params.members,
);
return node;
};

export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
return {
Expand Down
12 changes: 6 additions & 6 deletions src/internal/TsGenerator/factory/ConstructorDeclaration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ export interface Factory {
create: (params: Params$Create) => ts.ConstructorDeclaration;
}

export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
params: Params$Create,
): ts.ConstructorDeclaration => {
const node = factory.createConstructorDeclaration(undefined, undefined, params.parameters || [], params.body);
return node;
};
export const create =
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
(params: Params$Create): ts.ConstructorDeclaration => {
const node = factory.createConstructorDeclaration(undefined, params.parameters || [], params.body);
return node;
};

export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
return {
Expand Down
33 changes: 16 additions & 17 deletions src/internal/TsGenerator/factory/InterfaceDeclaration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,22 @@ export interface Factory {
create: (params: Params$Create) => ts.InterfaceDeclaration;
}

export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
params: Params$Create,
): ts.InterfaceDeclaration => {
const node = factory.createInterfaceDeclaration(
undefined,
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
factory.createIdentifier(escapeIdentiferText(params.name)),
params.typeParameters,
undefined,
params.members,
);
if (params.comment) {
const comment = generateComment(params.comment, params.deprecated);
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
}
return node;
};
export const create =
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
(params: Params$Create): ts.InterfaceDeclaration => {
const node = ts.factory.createInterfaceDeclaration(
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
factory.createIdentifier(escapeIdentiferText(params.name)),
params.typeParameters,
undefined,
params.members,
);
if (params.comment) {
const comment = generateComment(params.comment, params.deprecated);
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
}
return node;
};

export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
return {
Expand Down
57 changes: 28 additions & 29 deletions src/internal/TsGenerator/factory/MethodDeclaration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,35 +18,34 @@ export interface Factory {
create: (params: Params$Create) => ts.MethodDeclaration;
}

export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
params: Params$Create,
): ts.MethodDeclaration => {
const modifiers: ts.Modifier[] = [];
if (params.private) {
modifiers.push(factory.createModifier(ts.SyntaxKind.PrivateKeyword));
} else {
modifiers.push(factory.createModifier(ts.SyntaxKind.PublicKeyword));
}
if (params.async) {
modifiers.push(factory.createModifier(ts.SyntaxKind.AsyncKeyword));
}
const node = factory.createMethodDeclaration(
undefined,
modifiers,
undefined,
factory.createIdentifier(params.name),
undefined,
params.typeParameters,
params.parameters || [],
params.type,
params.body,
);
if (params.comment) {
const comment = generateComment(params.comment, params.deprecated);
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
}
return node;
};
export const create =
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
(params: Params$Create): ts.MethodDeclaration => {
const modifiers: ts.Modifier[] = [];
if (params.private) {
modifiers.push(factory.createModifier(ts.SyntaxKind.PrivateKeyword));
} else {
modifiers.push(factory.createModifier(ts.SyntaxKind.PublicKeyword));
}
if (params.async) {
modifiers.push(factory.createModifier(ts.SyntaxKind.AsyncKeyword));
}
const node = factory.createMethodDeclaration(
modifiers,
undefined,
factory.createIdentifier(params.name),
undefined,
params.typeParameters,
params.parameters || [],
params.type,
params.body,
);
if (params.comment) {
const comment = generateComment(params.comment, params.deprecated);
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
}
return node;
};

export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
return {
Expand Down
135 changes: 67 additions & 68 deletions src/internal/TsGenerator/factory/Namespace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,80 +33,79 @@ export interface Factory {
}

// eslint-disable-next-line no-unused-vars
export const findStatement = (context: Pick<ts.TransformationContext, "factory">): Factory["findNamespace"] => (
params: Params$FindStatement,
): ts.Statement | undefined => {
let statement: ts.Statement | undefined;
params.node.forEachChild(node => {
if (ts.isModuleDeclaration(node) && node.name.text === params.name) {
statement = node;
}
});
return statement;
};
export const findStatement =
(context: Pick<ts.TransformationContext, "factory">): Factory["findNamespace"] =>
(params: Params$FindStatement): ts.Statement | undefined => {
let statement: ts.Statement | undefined;
params.node.forEachChild(node => {
if (ts.isModuleDeclaration(node) && node.name.text === params.name) {
statement = node;
}
});
return statement;
};

export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
params: Params$Create,
): ts.ModuleDeclaration => {
const node = factory.createModuleDeclaration(
undefined,
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
factory.createIdentifier(params.name),
factory.createModuleBlock(params.statements),
ts.NodeFlags.Namespace,
);
if (params.comment) {
const comment = generateComment(params.comment, params.deprecated);
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
}
return node;
};
export const create =
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
(params: Params$Create): ts.ModuleDeclaration => {
const node = factory.createModuleDeclaration(
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
factory.createIdentifier(params.name),
factory.createModuleBlock(params.statements),
ts.NodeFlags.Namespace,
);
if (params.comment) {
const comment = generateComment(params.comment, params.deprecated);
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
}
return node;
};

export const createMultiple = (context: Pick<ts.TransformationContext, "factory">): Factory["createMultiple"] => (
params: Params$CreateMulti,
): ts.ModuleDeclaration => {
const names = params.names.reverse();
const firstName = names[0];
const restNames = names.slice(1, names.length);
const child = create(context)({
export: true,
name: firstName,
statements: params.statements,
comment: params.comment,
deprecated: params.deprecated,
});
return restNames.reduce<ts.ModuleDeclaration>((previousStatement, currentName) => {
return create(context)({
export const createMultiple =
(context: Pick<ts.TransformationContext, "factory">): Factory["createMultiple"] =>
(params: Params$CreateMulti): ts.ModuleDeclaration => {
const names = params.names.reverse();
const firstName = names[0];
const restNames = names.slice(1, names.length);
const child = create(context)({
export: true,
name: currentName,
statements: [previousStatement],
name: firstName,
statements: params.statements,
comment: params.comment,
deprecated: params.deprecated,
});
}, child);
};
return restNames.reduce<ts.ModuleDeclaration>((previousStatement, currentName) => {
return create(context)({
export: true,
name: currentName,
statements: [previousStatement],
});
}, child);
};

export const update = (context: Pick<ts.TransformationContext, "factory">): Factory["update"] => (
params: Params$Update,
): ts.ModuleDeclaration => {
const { factory } = context;
const { node, statements } = params;
if (node.body && ts.isModuleBlock(node.body)) {
const body = ModuleBlock.update(context)({ node: node.body, statements });
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, body);
}
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, node.body);
};
export const update =
(context: Pick<ts.TransformationContext, "factory">): Factory["update"] =>
(params: Params$Update): ts.ModuleDeclaration => {
const { factory } = context;
const { node, statements } = params;
if (node.body && ts.isModuleBlock(node.body)) {
const body = ModuleBlock.update(context)({ node: node.body, statements });
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, body);
}
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, node.body);
};

export const addStatements = (context: Pick<ts.TransformationContext, "factory">): Factory["addStatements"] => (
params: Params$Update,
): ts.ModuleDeclaration => {
const { factory } = context;
const { node, statements } = params;
if (node.body && ts.isModuleBlock(node.body)) {
const body = ModuleBlock.update(context)({ node: node.body, statements: node.body.statements.concat(statements) });
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, body);
}
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, node.body);
};
export const addStatements =
(context: Pick<ts.TransformationContext, "factory">): Factory["addStatements"] =>
(params: Params$Update): ts.ModuleDeclaration => {
const { factory } = context;
const { node, statements } = params;
if (node.body && ts.isModuleBlock(node.body)) {
const body = ModuleBlock.update(context)({ node: node.body, statements: node.body.statements.concat(statements) });
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, body);
}
return factory.updateModuleDeclaration(node, node.decorators, node.modifiers, node.name, node.body);
};

export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
return {
Expand Down
26 changes: 12 additions & 14 deletions src/internal/TsGenerator/factory/PropertyDeclaration.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import ts from "typescript";

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

export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
params: Params,
): ts.PropertyDeclaration => {
const node = factory.createPropertyDeclaration(
params.decorators,
params.modifiers,
params.name,
params.questionOrExclamationToken,
params.type,
params.initializer,
);
return node;
};
export const create =
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
(params: Params): ts.PropertyDeclaration => {
const node = factory.createPropertyDeclaration(
params.modifiers,
params.name,
params.questionOrExclamationToken,
params.type,
params.initializer,
);
return node;
};

export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
return {
Expand Down
31 changes: 15 additions & 16 deletions src/internal/TsGenerator/factory/TypeAliasDeclaration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,21 @@ export interface Factory {
create: (params: Params$Create) => ts.TypeAliasDeclaration;
}

export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
params: Params$Create,
): ts.TypeAliasDeclaration => {
const node = factory.createTypeAliasDeclaration(
undefined,
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
factory.createIdentifier(params.name),
undefined,
params.type,
);
if (params.comment) {
const comment = generateComment(params.comment, params.deprecated);
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
}
return node;
};
export const create =
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
(params: Params$Create): ts.TypeAliasDeclaration => {
const node = factory.createTypeAliasDeclaration(
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
factory.createIdentifier(params.name),
undefined,
params.type,
);
if (params.comment) {
const comment = generateComment(params.comment, params.deprecated);
return ts.addSyntheticLeadingComment(node, ts.SyntaxKind.MultiLineCommentTrivia, comment.value, comment.hasTrailingNewLine);
}
return node;
};

export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
return {
Expand Down
12 changes: 6 additions & 6 deletions src/internal/TsGenerator/factory/TypeParameterDeclaration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ export interface Factory {
create: (params: Params$Create) => ts.TypeParameterDeclaration;
}

export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (
params: Params$Create,
): ts.TypeParameterDeclaration => {
const node = factory.createTypeParameterDeclaration(factory.createIdentifier(params.name), params.constraint, params.defaultType);
return node;
};
export const create =
({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] =>
(params: Params$Create): ts.TypeParameterDeclaration => {
const node = factory.createTypeParameterDeclaration([], factory.createIdentifier(params.name), params.constraint, params.defaultType);
return node;
};

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

0 comments on commit f0e6d70

Please sign in to comment.