Skip to content

Commit 09f8509

Browse files
authored
feat: classify code generator (#31)
1 parent 881625c commit 09f8509

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+287
-273
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const main = () => {
5858
const params: CodeGenerator.Params = {
5959
entryPoint: "your/openapi/spec.yml", // support .yml, .yaml, .json
6060
option: {
61-
rewriteCodeAfterTypeDeclaration: (context: ts.TransformationContext, codeGeneratorParamsList: CodeGenerator.Converter.v3.CodeGeneratorParams[]): ts.Statement[] => {
61+
rewriteCodeAfterTypeDeclaration: (context: Pick<ts.TransformationContext, "factory">, codeGeneratorParamsList: CodeGenerator.Converter.v3.CodeGeneratorParams[]): ts.Statement[] => {
6262
const factory = context.factory; // https://ts-ast-viewer.com/ is very very very useful !
6363
return []; // generate no api client
6464
},

docs/ja/README-ja.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const main = () => {
5454
const params: CodeGenerator.Params = {
5555
entryPoint: "your/openapi/spec.yml", // support .yml, .yaml, .json
5656
option: {
57-
rewriteCodeAfterTypeDeclaration: (context: ts.TransformationContext, codeGeneratorParamsList: CodeGenerator.Converter.v3.CodeGeneratorParams[]): ts.Statement[] => {
57+
rewriteCodeAfterTypeDeclaration: (context: Pick<ts.TransformationContext, "factory">, codeGeneratorParamsList: CodeGenerator.Converter.v3.CodeGeneratorParams[]): ts.Statement[] => {
5858
const factory = context.factory; // https://ts-ast-viewer.com/ is very very very useful !
5959
return []; // generate no api client
6060
},

scripts/testCodeGen.ts

Lines changed: 28 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,41 @@
11
import * as fs from "fs";
22

3-
import * as CodeGenerator from "../lib";
3+
import { CodeGenerator, DefaultCodeTemplate } from "../lib";
44

55
const gen = (name: string, enableValidate = true): void => {
6-
const params: CodeGenerator.OpenApiTsCodeGen.Configuration = {
7-
entryPoint: `test/${name}/index.yml`,
8-
codeGenerator: {
9-
templates: {
10-
Default: CodeGenerator.DefaultCodeTemplate.makeApiClient,
11-
},
12-
},
13-
typeDefinitionGenerator: {
14-
additional: {
15-
template: "Default",
16-
},
17-
},
18-
validator: {
19-
openapiSchema: enableValidate,
20-
logger: {
21-
displayLogLines: 1,
22-
},
23-
},
24-
};
256
fs.mkdirSync("test/code", { recursive: true });
26-
const output = CodeGenerator.make(params);
27-
fs.writeFileSync(`test/code/${name}.ts`, output.typeDefinition.value, { encoding: "utf-8" });
7+
const codeGenerator = new CodeGenerator(`test/${name}/index.yml`);
8+
// codeGenerator.validate();
9+
const code = codeGenerator.generateTypeDefinition<DefaultCodeTemplate.Option>({
10+
generator: DefaultCodeTemplate.makeApiClient,
11+
option: {
12+
sync: false,
13+
},
14+
});
15+
if (enableValidate) {
16+
codeGenerator.validate({
17+
logger: { displayLogLines: 1 },
18+
});
19+
}
20+
fs.writeFileSync(`test/code/${name}.ts`, code, { encoding: "utf-8" });
2821
console.log(`Generate Code : test/code/${name}.ts`);
2922
};
3023

3124
const genSyncMode = (name: string, enableValidate = true): void => {
32-
const params: CodeGenerator.OpenApiTsCodeGen.Configuration = {
33-
entryPoint: `test/${name}/index.yml`,
34-
codeGenerator: {
35-
templates: {
36-
Default: CodeGenerator.DefaultCodeTemplate.makeApiClient,
37-
},
38-
},
39-
typeDefinitionGenerator: {
40-
additional: {
41-
template: "Default",
42-
option: {
43-
sync: true,
44-
},
45-
},
46-
},
47-
validator: {
48-
openapiSchema: enableValidate,
49-
logger: {
50-
displayLogLines: 1,
51-
},
52-
},
53-
};
25+
const codeGenerator = new CodeGenerator(`test/${name}/index.yml`);
5426
fs.mkdirSync("test/code", { recursive: true });
55-
const code = CodeGenerator.make(params);
56-
fs.writeFileSync(`test/code/sync-${name}.ts`, code.typeDefinition.value, { encoding: "utf-8" });
27+
if (enableValidate) {
28+
codeGenerator.validate({
29+
logger: { displayLogLines: 1 },
30+
});
31+
}
32+
const code = codeGenerator.generateTypeDefinition<DefaultCodeTemplate.Option>({
33+
generator: DefaultCodeTemplate.makeApiClient,
34+
option: {
35+
sync: true,
36+
},
37+
});
38+
fs.writeFileSync(`test/code/sync-${name}.ts`, code, { encoding: "utf-8" });
5739
console.log(`Generate Code : test/code/sync-${name}.ts`);
5840
};
5941

scripts/validate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ const validator = new OpenAPISchemaValidator({
1515
},
1616
});
1717

18-
const message = validator.validate(yaml.safeLoad(data) as any);
18+
const message = validator.validate(yaml.load(data) as any);
1919

2020
fs.writeFileSync(path.join(__dirname, "../debug/validate.json"), JSON.stringify(message, null, 2), { encoding: "utf-8" });

src/CodeGenerator/factory/BinaryExpression.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ export interface Factory {
1414
create: (params: Params) => ts.BinaryExpression;
1515
}
1616

17-
export const create = ({ factory }: ts.TransformationContext): Factory["create"] => (params: Params): ts.BinaryExpression => {
17+
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (params: Params): ts.BinaryExpression => {
1818
const node = factory.createBinaryExpression(params.left, operators[params.operator], params.right);
1919
return node;
2020
};
2121

22-
export const make = (context: ts.TransformationContext): Factory => {
22+
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
2323
return {
2424
create: create(context),
2525
};

src/CodeGenerator/factory/Block.ts

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

12-
export const create = ({ factory }: ts.TransformationContext): Factory["create"] => (params: Params$Create): ts.Block => {
12+
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (params: Params$Create): ts.Block => {
1313
const node = factory.createBlock(params.statements, params.multiLine);
1414
return node;
1515
};
1616

17-
export const make = (context: ts.TransformationContext): Factory => {
17+
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
1818
return {
1919
create: create(context),
2020
};

src/CodeGenerator/factory/CallExpression.ts

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

13-
export const create = ({ factory }: ts.TransformationContext): Factory["create"] => (params: Params$Create): ts.CallExpression => {
13+
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (params: Params$Create): ts.CallExpression => {
1414
const node = factory.createCallExpression(params.expression, params.typeArguments, params.argumentsArray);
1515
return node;
1616
};
1717

18-
export const make = (context: ts.TransformationContext): Factory => {
18+
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
1919
return {
2020
create: create(context),
2121
};

src/CodeGenerator/factory/ClassDeclaration.ts

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

14-
export const create = ({ factory }: ts.TransformationContext): Factory["create"] => (params: Params$Create): ts.ClassDeclaration => {
14+
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (params: Params$Create): ts.ClassDeclaration => {
1515
const node = factory.createClassDeclaration(
1616
undefined,
1717
params.export && [factory.createModifier(ts.SyntaxKind.ExportKeyword)],
@@ -23,7 +23,7 @@ export const create = ({ factory }: ts.TransformationContext): Factory["create"]
2323
return node;
2424
};
2525

26-
export const make = (context: ts.TransformationContext): Factory => {
26+
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
2727
return {
2828
create: create(context),
2929
};

src/CodeGenerator/factory/ConstructorDeclaration.ts

Lines changed: 2 additions & 2 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 }: ts.TransformationContext): Factory["create"] => (params: Params$Create): ts.ConstructorDeclaration => {
12+
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (params: Params$Create): ts.ConstructorDeclaration => {
1313
const node = factory.createConstructorDeclaration(undefined, undefined, params.parameters || [], params.body);
1414
return node;
1515
};
1616

17-
export const make = (context: ts.TransformationContext): Factory => {
17+
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
1818
return {
1919
create: create(context),
2020
};

src/CodeGenerator/factory/ElementAccessExpression.ts

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

12-
export const create = ({ factory }: ts.TransformationContext): Factory["create"] => (params: Params$Create): ts.ElementAccessExpression => {
12+
export const create = ({ factory }: Pick<ts.TransformationContext, "factory">): Factory["create"] => (params: Params$Create): ts.ElementAccessExpression => {
1313
const index = typeof params.index === "string" ? factory.createStringLiteral(params.index) : params.index;
1414
const node = factory.createElementAccessExpression(params.expression, index);
1515
return node;
1616
};
1717

18-
export const make = (context: ts.TransformationContext): Factory => {
18+
export const make = (context: Pick<ts.TransformationContext, "factory">): Factory => {
1919
return {
2020
create: create(context),
2121
};

0 commit comments

Comments
 (0)