@sdkgen/typescript-generator 0.0.0-dev.20231002144112 → 0.0.0-dev.20231002191238

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,41 @@
1
+ import { astToJson, DecimalPrimitiveType, HiddenAnnotation, VoidPrimitiveType, hasType } from "@sdkgen/parser";
2
+ import { generateTypescriptEnum, generateTypescriptErrorClass, generateTypescriptInterface, generateTypescriptTypeName } from "./helpers";
3
+ export function generateBrowserClientSource(ast) {
4
+ let code = "";
5
+ const hasErrorWithData = ast.errors.some(err => !(err.dataType instanceof VoidPrimitiveType));
6
+ code += `/* eslint-disable */
7
+ import { SdkgenError${hasErrorWithData ? ", SdkgenErrorWithData" : ""}, SdkgenHttpClient } from "@sdkgen/browser-runtime";
8
+ `;
9
+ if (hasType(ast, DecimalPrimitiveType)) {
10
+ code += `import { Decimal } from "decimal.js-light";\n`;
11
+ }
12
+ code += "\n";
13
+ for (const type of ast.enumTypes) {
14
+ code += generateTypescriptEnum(type);
15
+ code += "\n";
16
+ }
17
+ for (const type of ast.structTypes) {
18
+ code += generateTypescriptInterface(type, true);
19
+ code += "\n";
20
+ }
21
+ for (const error of ast.errors) {
22
+ code += generateTypescriptErrorClass(error, true);
23
+ code += "\n";
24
+ }
25
+ code += `export class ApiClient extends SdkgenHttpClient {
26
+ constructor(baseUrl: string) {
27
+ super(baseUrl, astJson, errClasses);
28
+ }
29
+ ${ast.operations
30
+ .filter(op => op.annotations.every(ann => !(ann instanceof HiddenAnnotation)))
31
+ .map(op => `
32
+ ${op.name}(args${op.args.length === 0 ? "?" : ""}: {${op.args
33
+ .map(arg => `${arg.name}${arg.type.name.endsWith("?") ? "?" : ""}: ${generateTypescriptTypeName(arg.type, true)}`)
34
+ .join(", ")}}): Promise<${generateTypescriptTypeName(op.returnType, true)}> { return this.makeRequest("${op.name}", args || {}); }`)
35
+ .join("")}
36
+ }\n\n`;
37
+ code += `const errClasses = {\n${ast.errors.map(err => ` ${err.name}`).join(",\n")}\n};\n\n`;
38
+ code += `const astJson = ${JSON.stringify(astToJson(ast), null, 4).replace(/"(?<key>\w+)":/gu, "$<key>:")} as const;\n`;
39
+ return code;
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYnJvd3Nlci1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFMUksTUFBTSxVQUFVLDJCQUEyQixDQUFDLEdBQVk7SUFDdEQsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRWQsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxZQUFZLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUU5RixJQUFJLElBQUk7c0JBQ1ksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUFFO0NBQ3BFLENBQUM7SUFFQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsRUFBRTtRQUN0QyxJQUFJLElBQUksK0NBQStDLENBQUM7S0FDekQ7SUFFRCxJQUFJLElBQUksSUFBSSxDQUFDO0lBRWIsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFO1FBQ2hDLElBQUksSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLElBQUksSUFBSSxDQUFDO0tBQ2Q7SUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7UUFDbEMsSUFBSSxJQUFJLDJCQUEyQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLElBQUksSUFBSSxDQUFDO0tBQ2Q7SUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDOUIsSUFBSSxJQUFJLDRCQUE0QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLElBQUksSUFBSSxDQUFDO0tBQ2Q7SUFFRCxJQUFJLElBQUk7Ozs7RUFJUixHQUFHLENBQUMsVUFBVTtTQUNiLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7U0FDN0UsR0FBRyxDQUNGLEVBQUUsQ0FBQyxFQUFFLENBQUM7TUFDSixFQUFFLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUk7U0FDMUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssMEJBQTBCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQ2pILElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSwwQkFBMEIsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDLElBQUksbUJBQW1CLENBQ3RJO1NBQ0EsSUFBSSxDQUFDLEVBQUUsQ0FBQztNQUNMLENBQUM7SUFFTCxJQUFJLElBQUkseUJBQXlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUVoRyxJQUFJLElBQUksbUJBQW1CLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLGNBQWMsQ0FBQztJQUV4SCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
@@ -0,0 +1,107 @@
1
+ import { ArrayType, Base64PrimitiveType, BigIntPrimitiveType, BoolPrimitiveType, BytesPrimitiveType, CnpjPrimitiveType, CpfPrimitiveType, DatePrimitiveType, DateTimePrimitiveType, DecimalPrimitiveType, EmailPrimitiveType, EnumType, FloatPrimitiveType, HexPrimitiveType, HtmlPrimitiveType, IntPrimitiveType, JsonPrimitiveType, MoneyPrimitiveType, OptionalType, StringPrimitiveType, StructType, TypeReference, UIntPrimitiveType, UrlPrimitiveType, UuidPrimitiveType, VoidPrimitiveType, XmlPrimitiveType, } from "@sdkgen/parser";
2
+ export function generateTypescriptTypeName(type, isBrowser) {
3
+ switch (type.constructor) {
4
+ case IntPrimitiveType:
5
+ case UIntPrimitiveType:
6
+ case MoneyPrimitiveType:
7
+ case FloatPrimitiveType:
8
+ return "number";
9
+ case BigIntPrimitiveType:
10
+ return "bigint";
11
+ case DecimalPrimitiveType:
12
+ return "Decimal";
13
+ case DatePrimitiveType:
14
+ case DateTimePrimitiveType:
15
+ return "Date";
16
+ case BoolPrimitiveType:
17
+ return "boolean";
18
+ case BytesPrimitiveType:
19
+ return isBrowser ? "ArrayBuffer" : "Buffer";
20
+ case StringPrimitiveType:
21
+ case CpfPrimitiveType:
22
+ case CnpjPrimitiveType:
23
+ case EmailPrimitiveType:
24
+ case HtmlPrimitiveType:
25
+ case UrlPrimitiveType:
26
+ case UuidPrimitiveType:
27
+ case HexPrimitiveType:
28
+ case Base64PrimitiveType:
29
+ case XmlPrimitiveType:
30
+ return "string";
31
+ case VoidPrimitiveType:
32
+ return "void";
33
+ case JsonPrimitiveType:
34
+ return "any";
35
+ case OptionalType:
36
+ return `${generateTypescriptTypeName(type.base, isBrowser)} | null`;
37
+ case ArrayType: {
38
+ const { base } = type;
39
+ const baseGen = generateTypescriptTypeName(base, isBrowser);
40
+ if (base instanceof OptionalType) {
41
+ return `(${baseGen})[]`;
42
+ }
43
+ return `${baseGen}[]`;
44
+ }
45
+ case StructType:
46
+ case EnumType:
47
+ return type.name;
48
+ case TypeReference:
49
+ return generateTypescriptTypeName(type.type, isBrowser);
50
+ default:
51
+ throw new Error(`BUG: generateTypescriptTypeName with ${type.constructor.name}`);
52
+ }
53
+ }
54
+ export function generateTypescriptInterface(type, isBrowser) {
55
+ return `export interface ${type.name} {
56
+ ${type.fields.map(field => ` ${field.name}: ${generateTypescriptTypeName(field.type, isBrowser)}`).join("\n")}
57
+ }\n`;
58
+ }
59
+ export function generateTypescriptEnum(type) {
60
+ if (type.hasStructValues) {
61
+ return `export type ${type.name} = ${type.values
62
+ .map(x => (x.struct ? `({tag: "${x.value}"} & ${x.struct.name})` : `{tag: "${x.value}"}`))
63
+ .join(" | ")};\n`;
64
+ }
65
+ return `export type ${type.name} = ${type.values.map(x => `"${x.value}"`).join(" | ")};\n`;
66
+ }
67
+ export function generateTypescriptErrorClass(error, isBrowser) {
68
+ return `export class ${error.name} extends ${error.dataType instanceof VoidPrimitiveType ? "SdkgenError" : `SdkgenErrorWithData<${generateTypescriptTypeName(error.dataType, isBrowser)}>`} {}\n`;
69
+ }
70
+ export function clearForLogging(path, type) {
71
+ switch (type.constructor) {
72
+ case TypeReference:
73
+ return clearForLogging(path, type.type);
74
+ case OptionalType: {
75
+ const code = clearForLogging(path, type.base);
76
+ if (code) {
77
+ return `if (${path} !== null && ${path} !== undefined) { ${code} }`;
78
+ }
79
+ return "";
80
+ }
81
+ case ArrayType: {
82
+ const code = clearForLogging("el", type.base);
83
+ if (code) {
84
+ return `for (const el of ${path}) { ${code} }`;
85
+ }
86
+ return "";
87
+ }
88
+ case StructType: {
89
+ const codes = [];
90
+ for (const field of type.fields) {
91
+ if (field.secret) {
92
+ codes.push(`${path}.${field.name} = "<secret>";`);
93
+ }
94
+ else {
95
+ const code = clearForLogging(`${path}.${field.name}`, field.type);
96
+ if (code) {
97
+ codes.push(code);
98
+ }
99
+ }
100
+ }
101
+ return codes.join(" ");
102
+ }
103
+ default:
104
+ return "";
105
+ }
106
+ }
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLFFBQVEsRUFDUixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUNqQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxJQUFVLEVBQUUsU0FBa0I7SUFDdkUsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ3hCLEtBQUssZ0JBQWdCLENBQUM7UUFDdEIsS0FBSyxpQkFBaUIsQ0FBQztRQUN2QixLQUFLLGtCQUFrQixDQUFDO1FBQ3hCLEtBQUssa0JBQWtCO1lBQ3JCLE9BQU8sUUFBUSxDQUFDO1FBRWxCLEtBQUssbUJBQW1CO1lBQ3RCLE9BQU8sUUFBUSxDQUFDO1FBRWxCLEtBQUssb0JBQW9CO1lBQ3ZCLE9BQU8sU0FBUyxDQUFDO1FBRW5CLEtBQUssaUJBQWlCLENBQUM7UUFDdkIsS0FBSyxxQkFBcUI7WUFDeEIsT0FBTyxNQUFNLENBQUM7UUFFaEIsS0FBSyxpQkFBaUI7WUFDcEIsT0FBTyxTQUFTLENBQUM7UUFFbkIsS0FBSyxrQkFBa0I7WUFDckIsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENB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
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./browser-client";
2
+ export * from "./interfaces";
3
+ export * from "./node-client";
4
+ export * from "./node-server";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQyJ9
@@ -0,0 +1,14 @@
1
+ import { generateTypescriptEnum, generateTypescriptInterface } from "./helpers";
2
+ export function generateTypescriptInterfaces(ast) {
3
+ let code = "";
4
+ for (const type of ast.enumTypes) {
5
+ code += generateTypescriptEnum(type);
6
+ }
7
+ code += "\n";
8
+ for (const type of ast.structTypes) {
9
+ code += generateTypescriptInterface(type, false);
10
+ code += "\n";
11
+ }
12
+ return code;
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVoRixNQUFNLFVBQVUsNEJBQTRCLENBQUMsR0FBWTtJQUN2RCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFFZCxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUU7UUFDaEMsSUFBSSxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDO0lBRUQsSUFBSSxJQUFJLElBQUksQ0FBQztJQUViLEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRTtRQUNsQyxJQUFJLElBQUksMkJBQTJCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELElBQUksSUFBSSxJQUFJLENBQUM7S0FDZDtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9
@@ -0,0 +1,47 @@
1
+ import { DecimalPrimitiveType, astToJson, HiddenAnnotation, VoidPrimitiveType, hasType } from "@sdkgen/parser";
2
+ import { generateTypescriptEnum, generateTypescriptErrorClass, generateTypescriptInterface, generateTypescriptTypeName } from "./helpers";
3
+ export function generateNodeClientSource(ast) {
4
+ let code = "";
5
+ const hasErrorWithData = ast.errors.some(err => !(err.dataType instanceof VoidPrimitiveType));
6
+ const hasErrorWithoutData = ast.errors.filter(err => err.name !== "Fatal").some(err => err.dataType instanceof VoidPrimitiveType);
7
+ code += `/* eslint-disable */
8
+ import { Context, Fatal${hasErrorWithoutData ? ", SdkgenError" : ""}${hasErrorWithData ? ", SdkgenErrorWithData" : ""}, SdkgenHttpClient } from "@sdkgen/node-runtime";
9
+ import { PartialDeep } from "type-fest";
10
+ export { Fatal } from "@sdkgen/node-runtime";
11
+ `;
12
+ if (hasType(ast, DecimalPrimitiveType)) {
13
+ code += `import { Decimal } from "decimal.js";\n`;
14
+ }
15
+ code += "\n";
16
+ for (const type of ast.enumTypes) {
17
+ code += generateTypescriptEnum(type);
18
+ code += "\n";
19
+ }
20
+ for (const type of ast.structTypes) {
21
+ code += generateTypescriptInterface(type, false);
22
+ code += "\n";
23
+ }
24
+ for (const error of ast.errors) {
25
+ if (error.name === "Fatal") {
26
+ continue;
27
+ }
28
+ code += generateTypescriptErrorClass(error, false);
29
+ code += "\n";
30
+ }
31
+ code += `export class ApiClient extends SdkgenHttpClient {
32
+ constructor(baseUrl: string) {
33
+ super(baseUrl, astJson, errClasses);
34
+ }
35
+ ${ast.operations
36
+ .filter(op => op.annotations.every(ann => !(ann instanceof HiddenAnnotation)))
37
+ .map(op => `
38
+ ${op.name}(ctx: PartialDeep<Context> | null, args: {${op.args
39
+ .map(arg => `${arg.name}${arg.type.name.endsWith("?") ? "?" : ""}: ${generateTypescriptTypeName(arg.type, false)}`)
40
+ .join(", ")}}): Promise<${generateTypescriptTypeName(op.returnType, false)}> { return this.makeRequest(ctx, "${op.name}", args); }`)
41
+ .join("")}
42
+ }\n\n`;
43
+ code += `const errClasses = {\n${ast.errors.map(err => ` ${err.name}`).join(",\n")}\n};\n\n`;
44
+ code += `const astJson = ${JSON.stringify(astToJson(ast), null, 4).replace(/"(?<key>\w+)":/gu, "$<key>:")} as const;\n`;
45
+ return code;
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbm9kZS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFMUksTUFBTSxVQUFVLHdCQUF3QixDQUFDLEdBQVk7SUFDbkQsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRWQsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxZQUFZLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUM5RixNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxZQUFZLGlCQUFpQixDQUFDLENBQUM7SUFFbEksSUFBSSxJQUFJO3lCQUNlLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FDL0QsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUMvQzs7O0NBR0QsQ0FBQztJQUVBLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO1FBQ3RDLElBQUksSUFBSSx5Q0FBeUMsQ0FBQztLQUNuRDtJQUVELElBQUksSUFBSSxJQUFJLENBQUM7SUFFYixLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUU7UUFDaEMsSUFBSSxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksSUFBSSxJQUFJLENBQUM7S0FDZDtJQUVELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRTtRQUNsQyxJQUFJLElBQUksMkJBQTJCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELElBQUksSUFBSSxJQUFJLENBQUM7S0FDZDtJQUVELEtBQUssTUFBTSxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtRQUM5QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQzFCLFNBQVM7U0FDVjtRQUVELElBQUksSUFBSSw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsSUFBSSxJQUFJLElBQUksQ0FBQztLQUNkO0lBRUQsSUFBSSxJQUFJOzs7O0VBSVIsR0FBRyxDQUFDLFVBQVU7U0FDYixNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1NBQzdFLEdBQUcsQ0FDRixFQUFFLENBQUMsRUFBRSxDQUFDO01BQ0osRUFBRSxDQUFDLElBQUksNkNBQTZDLEVBQUUsQ0FBQyxJQUFJO1NBQzFELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUNsSCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsMEJBQTBCLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMscUNBQXFDLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FDdEk7U0FDQSxJQUFJLENBQUMsRUFBRSxDQUFDO01BQ0wsQ0FBQztJQUVMLElBQUksSUFBSSx5QkFBeUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBRWhHLElBQUksSUFBSSxtQkFBbUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsY0FBYyxDQUFDO0lBRXhILE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9
@@ -0,0 +1,48 @@
1
+ import { DecimalPrimitiveType, astToJson, VoidPrimitiveType, hasType } from "@sdkgen/parser";
2
+ import { generateTypescriptEnum, generateTypescriptErrorClass, generateTypescriptInterface, generateTypescriptTypeName } from "./helpers";
3
+ export function generateNodeServerSource(ast) {
4
+ let code = "";
5
+ const hasErrorWithData = ast.errors.some(err => !(err.dataType instanceof VoidPrimitiveType));
6
+ const hasErrorWithoutData = ast.errors.filter(err => err.name !== "Fatal").some(err => err.dataType instanceof VoidPrimitiveType);
7
+ code += `/* eslint-disable */
8
+ import { BaseApiConfig, Context, Fatal${hasErrorWithoutData ? ", SdkgenError" : ""}${hasErrorWithData ? ", SdkgenErrorWithData" : ""} } from "@sdkgen/node-runtime";
9
+ export { Fatal } from "@sdkgen/node-runtime";
10
+ `;
11
+ if (hasType(ast, DecimalPrimitiveType)) {
12
+ code += `import { Decimal } from "decimal.js";\n`;
13
+ }
14
+ code += "\n";
15
+ for (const type of ast.enumTypes) {
16
+ code += generateTypescriptEnum(type);
17
+ code += "\n";
18
+ }
19
+ for (const type of ast.structTypes) {
20
+ code += generateTypescriptInterface(type, false);
21
+ code += "\n";
22
+ }
23
+ for (const error of ast.errors) {
24
+ if (error.name === "Fatal") {
25
+ continue;
26
+ }
27
+ code += generateTypescriptErrorClass(error, false);
28
+ code += "\n";
29
+ }
30
+ code += `export class ApiConfig<ExtraContextT> extends BaseApiConfig<ExtraContextT> {
31
+ declare fn: {${ast.operations
32
+ .map(op => `
33
+ ${op.name}: (ctx: Context & ExtraContextT, args: {${op.args
34
+ .map(arg => `${arg.name}: ${generateTypescriptTypeName(arg.type, false)}`)
35
+ .join(", ")}}) => Promise<${generateTypescriptTypeName(op.returnType, false)}>`)
36
+ .join("")}
37
+ }
38
+
39
+ astJson = ${JSON.stringify(astToJson(ast), null, 4)
40
+ .replace(/"(?<key>\w+)":/gu, "$<key>:")
41
+ .replace(/\n/gu, "\n ")} as const
42
+ }
43
+
44
+ export const api = new ApiConfig<{}>();
45
+ `;
46
+ return code;
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbm9kZS1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFMUksTUFBTSxVQUFVLHdCQUF3QixDQUFDLEdBQVk7SUFDbkQsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRWQsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxZQUFZLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUM5RixNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxZQUFZLGlCQUFpQixDQUFDLENBQUM7SUFFbEksSUFBSSxJQUFJO3dDQUM4QixtQkFBbUIsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQzlFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsRUFDL0M7O0NBRUQsQ0FBQztJQUVBLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO1FBQ3RDLElBQUksSUFBSSx5Q0FBeUMsQ0FBQztLQUNuRDtJQUVELElBQUksSUFBSSxJQUFJLENBQUM7SUFFYixLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUU7UUFDaEMsSUFBSSxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksSUFBSSxJQUFJLENBQUM7S0FDZDtJQUVELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRTtRQUNsQyxJQUFJLElBQUksMkJBQTJCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELElBQUksSUFBSSxJQUFJLENBQUM7S0FDZDtJQUVELEtBQUssTUFBTSxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtRQUM5QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQzFCLFNBQVM7U0FDVjtRQUVELElBQUksSUFBSSw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsSUFBSSxJQUFJLElBQUksQ0FBQztLQUNkO0lBRUQsSUFBSSxJQUFJO21CQUNTLEdBQUcsQ0FBQyxVQUFVO1NBQzFCLEdBQUcsQ0FDRixFQUFFLENBQUMsRUFBRSxDQUFDO1VBQ0osRUFBRSxDQUFDLElBQUksMkNBQTJDLEVBQUUsQ0FBQyxJQUFJO1NBQ3hELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksS0FBSywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsMEJBQTBCLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUNsRjtTQUNBLElBQUksQ0FBQyxFQUFFLENBQUM7OztnQkFHQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2hELE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUM7U0FDdEMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7Ozs7Q0FJL0IsQ0FBQztJQUVBLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9
package/package.json CHANGED
@@ -1,8 +1,15 @@
1
1
  {
2
2
  "name": "@sdkgen/typescript-generator",
3
- "version": "0.0.0-dev.20231002144112",
3
+ "version": "0.0.0-dev.20231002191238",
4
4
  "description": "",
5
- "main": "src/index.ts",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "directories": {
8
+ "lib": "dist"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
6
13
  "scripts": {
7
14
  "test": "jest --passWithNoTests",
8
15
  "eslint:fix": "eslint --fix '{src,spec}/**/*.ts'",
@@ -23,7 +30,7 @@
23
30
  },
24
31
  "homepage": "https://github.com/sdkgen/sdkgen#readme",
25
32
  "dependencies": {
26
- "@sdkgen/parser": "^0.0.0-dev.20231002144112"
33
+ "@sdkgen/parser": "^0.0.0-dev.20231002191238"
27
34
  },
28
35
  "devDependencies": {
29
36
  "@cubos/eslint-config": "^2.2.0",
@@ -32,7 +39,7 @@
32
39
  "jest": "^29.0.0",
33
40
  "ts-jest": "^29.0.0",
34
41
  "type-fest": "^3.0.0",
35
- "typescript": "^4.3.5"
42
+ "typescript": "^5.2.2"
36
43
  },
37
44
  "jest": {
38
45
  "transform": {
@@ -52,5 +59,5 @@
52
59
  "/node_modules/"
53
60
  ]
54
61
  },
55
- "gitHead": "85c11927f0704a14da62d908005ec99c2e3b199f"
62
+ "gitHead": "88f1c400863a2188f29318573284d5d428572433"
56
63
  }
package/.eslintrc.json DELETED
@@ -1,3 +0,0 @@
1
- {
2
- "extends": ["@cubos"]
3
- }
package/.prettierrc DELETED
@@ -1,12 +0,0 @@
1
- {
2
- "arrowParens": "avoid",
3
- "bracketSpacing": true,
4
- "endOfLine": "lf",
5
- "parser": "typescript",
6
- "printWidth": 150,
7
- "semi": true,
8
- "singleQuote": false,
9
- "tabWidth": 2,
10
- "trailingComma": "all",
11
- "useTabs": false
12
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,140 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- const parser = __importStar(require("@sdkgen/parser"));
27
- const helpers_1 = require("../src/helpers");
28
- describe("helpers.ts", () => {
29
- test("generateTypescriptInterface", () => {
30
- const structType = new parser.StructType([]);
31
- structType.fields = [
32
- new parser.Field("int", new parser.IntPrimitiveType()),
33
- new parser.Field("bigint", new parser.BigIntPrimitiveType()),
34
- new parser.Field("date", new parser.DatePrimitiveType()),
35
- new parser.Field("bool", new parser.BoolPrimitiveType()),
36
- new parser.Field("bytes", new parser.BytesPrimitiveType()),
37
- new parser.Field("uuid", new parser.UuidPrimitiveType()),
38
- new parser.Field("void", new parser.VoidPrimitiveType()),
39
- new parser.Field("json", new parser.JsonPrimitiveType()),
40
- new parser.Field("optionalStrArray", new parser.OptionalType(new parser.ArrayType(new parser.StringPrimitiveType()))),
41
- ];
42
- structType.name = "awesomeInterface";
43
- expect((0, helpers_1.generateTypescriptInterface)(structType, false)).toBe(`export interface awesomeInterface {
44
- int: number
45
- bigint: bigint
46
- date: Date
47
- bool: boolean
48
- bytes: Buffer
49
- uuid: string
50
- void: void
51
- json: any
52
- optionalStrArray: string[] | null
53
- }
54
- `);
55
- });
56
- test("generateTypescriptTypeName: IntPrimitiveType", () => {
57
- const type = new parser.IntPrimitiveType();
58
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("number");
59
- });
60
- test("generateTypescriptTypeName: UIntPrimitiveType", () => {
61
- const type = new parser.UIntPrimitiveType();
62
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("number");
63
- });
64
- test("generateTypescriptTypeName: MoneyPrimitiveType", () => {
65
- const type = new parser.MoneyPrimitiveType();
66
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("number");
67
- });
68
- test("generateTypescriptTypeName: FloatPrimitiveType", () => {
69
- const type = new parser.FloatPrimitiveType();
70
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("number");
71
- });
72
- test("generateTypescriptTypeName: DateTimePrimitiveType", () => {
73
- const type = new parser.DateTimePrimitiveType();
74
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("Date");
75
- });
76
- test("generateTypescriptTypeName: StringPrimitiveType", () => {
77
- const type = new parser.StringPrimitiveType();
78
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("string");
79
- });
80
- test("generateTypescriptTypeName: CpfPrimitiveType", () => {
81
- const type = new parser.CpfPrimitiveType();
82
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("string");
83
- });
84
- test("generateTypescriptTypeName: CnpjPrimitiveType", () => {
85
- const type = new parser.CnpjPrimitiveType();
86
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("string");
87
- });
88
- test("generateTypescriptTypeName: EmailPrimitiveType", () => {
89
- const type = new parser.EmailPrimitiveType();
90
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("string");
91
- });
92
- test("generateTypescriptTypeName: HtmlPrimitiveType", () => {
93
- const type = new parser.HtmlPrimitiveType();
94
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("string");
95
- });
96
- test("generateTypescriptTypeName: UrlPrimitiveType", () => {
97
- const type = new parser.UrlPrimitiveType();
98
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("string");
99
- });
100
- test("generateTypescriptTypeName: HexPrimitiveType", () => {
101
- const type = new parser.HexPrimitiveType();
102
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("string");
103
- });
104
- test("generateTypescriptTypeName: Base64PrimitiveType", () => {
105
- const type = new parser.Base64PrimitiveType();
106
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("string");
107
- });
108
- test("generateTypescriptTypeName: XmlPrimitiveType", () => {
109
- const type = new parser.XmlPrimitiveType();
110
- expect((0, helpers_1.generateTypescriptTypeName)(type, false)).toBe("string");
111
- });
112
- test("generateTypescriptTypeName: StructType", () => {
113
- const structType = new parser.StructType([
114
- new parser.Field("int", new parser.IntPrimitiveType()),
115
- new parser.Field("bigint", new parser.BigIntPrimitiveType()),
116
- ]);
117
- structType.name = "simpleInterface";
118
- expect((0, helpers_1.generateTypescriptTypeName)(structType, false)).toBe(structType.name);
119
- });
120
- test("generateTypescriptTypeName: EnumType", () => {
121
- const enumType = new parser.EnumType([new parser.EnumValue("value1")]);
122
- enumType.name = "simpleEnum";
123
- expect((0, helpers_1.generateTypescriptTypeName)(enumType, false)).toBe(enumType.name);
124
- });
125
- test("generateTypescriptTypeName: TypeReference", () => {
126
- const enumType = new parser.TypeReference("typeRef");
127
- enumType.type = new parser.HexPrimitiveType();
128
- expect((0, helpers_1.generateTypescriptTypeName)(enumType, false)).toBe("string");
129
- });
130
- test("generateTypescriptTypeName: unknown PrimitiveType error", () => {
131
- class UnknownType extends parser.Type {
132
- constructor() {
133
- super(...arguments);
134
- this.name = "UnknownType";
135
- }
136
- }
137
- const newUnknownType = new UnknownType();
138
- expect(() => (0, helpers_1.generateTypescriptTypeName)(newUnknownType, false)).toThrowError(`BUG: generateTypescriptTypeName with ${newUnknownType.name}`);
139
- });
140
- });
@@ -1,44 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateBrowserClientSource = void 0;
4
- const parser_1 = require("@sdkgen/parser");
5
- const helpers_1 = require("./helpers");
6
- function generateBrowserClientSource(ast) {
7
- let code = "";
8
- const hasErrorWithData = ast.errors.some(err => !(err.dataType instanceof parser_1.VoidPrimitiveType));
9
- code += `/* eslint-disable */
10
- import { SdkgenError${hasErrorWithData ? ", SdkgenErrorWithData" : ""}, SdkgenHttpClient } from "@sdkgen/browser-runtime";
11
- `;
12
- if ((0, parser_1.hasType)(ast, parser_1.DecimalPrimitiveType)) {
13
- code += `import { Decimal } from "decimal.js-light";\n`;
14
- }
15
- code += "\n";
16
- for (const type of ast.enumTypes) {
17
- code += (0, helpers_1.generateTypescriptEnum)(type);
18
- code += "\n";
19
- }
20
- for (const type of ast.structTypes) {
21
- code += (0, helpers_1.generateTypescriptInterface)(type, true);
22
- code += "\n";
23
- }
24
- for (const error of ast.errors) {
25
- code += (0, helpers_1.generateTypescriptErrorClass)(error, true);
26
- code += "\n";
27
- }
28
- code += `export class ApiClient extends SdkgenHttpClient {
29
- constructor(baseUrl: string) {
30
- super(baseUrl, astJson, errClasses);
31
- }
32
- ${ast.operations
33
- .filter(op => op.annotations.every(ann => !(ann instanceof parser_1.HiddenAnnotation)))
34
- .map(op => `
35
- ${op.name}(args${op.args.length === 0 ? "?" : ""}: {${op.args
36
- .map(arg => `${arg.name}${arg.type.name.endsWith("?") ? "?" : ""}: ${(0, helpers_1.generateTypescriptTypeName)(arg.type, true)}`)
37
- .join(", ")}}): Promise<${(0, helpers_1.generateTypescriptTypeName)(op.returnType, true)}> { return this.makeRequest("${op.name}", args || {}); }`)
38
- .join("")}
39
- }\n\n`;
40
- code += `const errClasses = {\n${ast.errors.map(err => ` ${err.name}`).join(",\n")}\n};\n\n`;
41
- code += `const astJson = ${JSON.stringify((0, parser_1.astToJson)(ast), null, 4).replace(/"(?<key>\w+)":/gu, "$<key>:")} as const;\n`;
42
- return code;
43
- }
44
- exports.generateBrowserClientSource = generateBrowserClientSource;
@@ -1,114 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.clearForLogging = exports.generateTypescriptErrorClass = exports.generateTypescriptEnum = exports.generateTypescriptInterface = exports.generateTypescriptTypeName = void 0;
4
- const parser_1 = require("@sdkgen/parser");
5
- function generateTypescriptTypeName(type, isBrowser) {
6
- switch (type.constructor) {
7
- case parser_1.IntPrimitiveType:
8
- case parser_1.UIntPrimitiveType:
9
- case parser_1.MoneyPrimitiveType:
10
- case parser_1.FloatPrimitiveType:
11
- return "number";
12
- case parser_1.BigIntPrimitiveType:
13
- return "bigint";
14
- case parser_1.DecimalPrimitiveType:
15
- return "Decimal";
16
- case parser_1.DatePrimitiveType:
17
- case parser_1.DateTimePrimitiveType:
18
- return "Date";
19
- case parser_1.BoolPrimitiveType:
20
- return "boolean";
21
- case parser_1.BytesPrimitiveType:
22
- return isBrowser ? "ArrayBuffer" : "Buffer";
23
- case parser_1.StringPrimitiveType:
24
- case parser_1.CpfPrimitiveType:
25
- case parser_1.CnpjPrimitiveType:
26
- case parser_1.EmailPrimitiveType:
27
- case parser_1.HtmlPrimitiveType:
28
- case parser_1.UrlPrimitiveType:
29
- case parser_1.UuidPrimitiveType:
30
- case parser_1.HexPrimitiveType:
31
- case parser_1.Base64PrimitiveType:
32
- case parser_1.XmlPrimitiveType:
33
- return "string";
34
- case parser_1.VoidPrimitiveType:
35
- return "void";
36
- case parser_1.JsonPrimitiveType:
37
- return "any";
38
- case parser_1.OptionalType:
39
- return `${generateTypescriptTypeName(type.base, isBrowser)} | null`;
40
- case parser_1.ArrayType: {
41
- const { base } = type;
42
- const baseGen = generateTypescriptTypeName(base, isBrowser);
43
- if (base instanceof parser_1.OptionalType) {
44
- return `(${baseGen})[]`;
45
- }
46
- return `${baseGen}[]`;
47
- }
48
- case parser_1.StructType:
49
- case parser_1.EnumType:
50
- return type.name;
51
- case parser_1.TypeReference:
52
- return generateTypescriptTypeName(type.type, isBrowser);
53
- default:
54
- throw new Error(`BUG: generateTypescriptTypeName with ${type.constructor.name}`);
55
- }
56
- }
57
- exports.generateTypescriptTypeName = generateTypescriptTypeName;
58
- function generateTypescriptInterface(type, isBrowser) {
59
- return `export interface ${type.name} {
60
- ${type.fields.map(field => ` ${field.name}: ${generateTypescriptTypeName(field.type, isBrowser)}`).join("\n")}
61
- }\n`;
62
- }
63
- exports.generateTypescriptInterface = generateTypescriptInterface;
64
- function generateTypescriptEnum(type) {
65
- if (type.hasStructValues) {
66
- return `export type ${type.name} = ${type.values
67
- .map(x => (x.struct ? `({tag: "${x.value}"} & ${x.struct.name})` : `{tag: "${x.value}"}`))
68
- .join(" | ")};\n`;
69
- }
70
- return `export type ${type.name} = ${type.values.map(x => `"${x.value}"`).join(" | ")};\n`;
71
- }
72
- exports.generateTypescriptEnum = generateTypescriptEnum;
73
- function generateTypescriptErrorClass(error, isBrowser) {
74
- return `export class ${error.name} extends ${error.dataType instanceof parser_1.VoidPrimitiveType ? "SdkgenError" : `SdkgenErrorWithData<${generateTypescriptTypeName(error.dataType, isBrowser)}>`} {}\n`;
75
- }
76
- exports.generateTypescriptErrorClass = generateTypescriptErrorClass;
77
- function clearForLogging(path, type) {
78
- switch (type.constructor) {
79
- case parser_1.TypeReference:
80
- return clearForLogging(path, type.type);
81
- case parser_1.OptionalType: {
82
- const code = clearForLogging(path, type.base);
83
- if (code) {
84
- return `if (${path} !== null && ${path} !== undefined) { ${code} }`;
85
- }
86
- return "";
87
- }
88
- case parser_1.ArrayType: {
89
- const code = clearForLogging("el", type.base);
90
- if (code) {
91
- return `for (const el of ${path}) { ${code} }`;
92
- }
93
- return "";
94
- }
95
- case parser_1.StructType: {
96
- const codes = [];
97
- for (const field of type.fields) {
98
- if (field.secret) {
99
- codes.push(`${path}.${field.name} = "<secret>";`);
100
- }
101
- else {
102
- const code = clearForLogging(`${path}.${field.name}`, field.type);
103
- if (code) {
104
- codes.push(code);
105
- }
106
- }
107
- }
108
- return codes.join(" ");
109
- }
110
- default:
111
- return "";
112
- }
113
- }
114
- exports.clearForLogging = clearForLogging;