@nestia/migrate 0.11.7 → 0.12.1
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.
- package/lib/MigrateApplication.js +6 -6
- package/lib/analyzers/MigrateMethodAnalyzer.js +1 -1
- package/lib/bundles/NEST_TEMPLATE.js +2 -2
- package/lib/bundles/NEST_TEMPLATE.js.map +1 -1
- package/lib/bundles/SDK_TEMPLATE.js +1 -1
- package/lib/bundles/SDK_TEMPLATE.js.map +1 -1
- package/lib/factories/TypeLiteralFactory.d.ts +4 -0
- package/lib/factories/TypeLiteralFactory.js +33 -0
- package/lib/factories/TypeLiteralFactory.js.map +1 -0
- package/lib/programmers/MigrateImportProgrammer.d.ts +1 -1
- package/lib/programmers/MigrateImportProgrammer.js +2 -4
- package/lib/programmers/MigrateImportProgrammer.js.map +1 -1
- package/lib/programmers/MigrateSchemaProgrammer.js +92 -6
- package/lib/programmers/MigrateSchemaProgrammer.js.map +1 -1
- package/lib/structures/ISwaggerComponents.d.ts +0 -1
- package/lib/structures/ISwaggerSchema.d.ts +1 -0
- package/lib/utils/OpenApiConverter.js +6 -6
- package/package.json +6 -3
- package/src/MigrateApplication.ts +86 -86
- package/src/bundles/NEST_TEMPLATE.ts +2 -2
- package/src/bundles/SDK_TEMPLATE.ts +1 -1
- package/src/factories/TypeLiteralFactory.ts +50 -0
- package/src/programmers/MigrateImportProgrammer.ts +3 -7
- package/src/programmers/MigrateSchemaProgrammer.ts +307 -267
- package/src/structures/ISwaggerComponents.ts +13 -14
- package/src/structures/ISwaggerSchema.ts +1 -0
@@ -22,7 +22,7 @@ var OpenApiConverter;
|
|
22
22
|
const $io2 = input => (undefined === input.name || "string" === typeof input.name) && (undefined === input.url || "string" === typeof input.url && (/\/|:/.test(input.url) && /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i.test(input.url))) && (undefined === input.email || "string" === typeof input.email && /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(input.email));
|
23
23
|
const $io3 = input => "string" === typeof input.name && (undefined === input.url || "string" === typeof input.url && (/\/|:/.test(input.url) && /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i.test(input.url)));
|
24
24
|
const $io4 = input => "string" === typeof input.url && (undefined === input.description || "string" === typeof input.description);
|
25
|
-
const $io5 = input => (undefined === input.parameters || "object" === typeof input.parameters && null !== input.parameters && false === Array.isArray(input.parameters) && $io6(input.parameters)) && (undefined === input.requestBodies || "object" === typeof input.requestBodies && null !== input.requestBodies && false === Array.isArray(input.requestBodies) && $io21(input.requestBodies)) && (undefined === input.responses || "object" === typeof input.responses && null !== input.responses && false === Array.isArray(input.responses) && $io25(input.responses)) && (undefined === input.schemas || "object" === typeof input.schemas && null !== input.schemas && false === Array.isArray(input.schemas) && $io18(input.schemas)) && (undefined === input.securitySchemes || "object" === typeof input.securitySchemes && null !== input.securitySchemes && false === Array.isArray(input.securitySchemes) && $io27(input.securitySchemes))
|
25
|
+
const $io5 = input => (undefined === input.parameters || "object" === typeof input.parameters && null !== input.parameters && false === Array.isArray(input.parameters) && $io6(input.parameters)) && (undefined === input.requestBodies || "object" === typeof input.requestBodies && null !== input.requestBodies && false === Array.isArray(input.requestBodies) && $io21(input.requestBodies)) && (undefined === input.responses || "object" === typeof input.responses && null !== input.responses && false === Array.isArray(input.responses) && $io25(input.responses)) && (undefined === input.schemas || "object" === typeof input.schemas && null !== input.schemas && false === Array.isArray(input.schemas) && $io18(input.schemas)) && (undefined === input.securitySchemes || "object" === typeof input.securitySchemes && null !== input.securitySchemes && false === Array.isArray(input.securitySchemes) && $io27(input.securitySchemes));
|
26
26
|
const $io6 = input => Object.keys(input).every(key => {
|
27
27
|
const value = input[key];
|
28
28
|
if (undefined === value)
|
@@ -37,7 +37,7 @@ var OpenApiConverter;
|
|
37
37
|
const $io12 = input => (undefined === input["default"] || "boolean" === typeof input["default"]) && (undefined === input["enum"] || Array.isArray(input["enum"]) && input["enum"].every(elem => "boolean" === typeof elem)) && "boolean" === input.type && (undefined === input.nullable || "boolean" === typeof input.nullable) && (undefined === input.title || "string" === typeof input.title) && (undefined === input.description || "string" === typeof input.description) && (undefined === input.deprecated || "boolean" === typeof input.deprecated) && (undefined === input["x-typia-optional"] || "boolean" === typeof input["x-typia-optional"]) && (undefined === input["x-typia-rest"] || "boolean" === typeof input["x-typia-rest"]);
|
38
38
|
const $io13 = input => (undefined === input["default"] || "number" === typeof input["default"] && (Math.floor(input["default"]) === input["default"] && -2147483648 <= input["default"] && input["default"] <= 2147483647)) && (undefined === input["enum"] || Array.isArray(input["enum"]) && input["enum"].every(elem => "number" === typeof elem)) && (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -2147483648 <= input.minimum && input.minimum <= 2147483647)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -2147483648 <= input.maximum && input.maximum <= 2147483647)) && (undefined === input.exclusiveMinimum || "boolean" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "boolean" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 4294967295)) && "integer" === input.type && (undefined === input.nullable || "boolean" === typeof input.nullable) && (undefined === input.title || "string" === typeof input.title) && (undefined === input.description || "string" === typeof input.description) && (undefined === input.deprecated || "boolean" === typeof input.deprecated) && (undefined === input["x-typia-optional"] || "boolean" === typeof input["x-typia-optional"]) && (undefined === input["x-typia-rest"] || "boolean" === typeof input["x-typia-rest"]);
|
39
39
|
const $io14 = input => (undefined === input["default"] || "number" === typeof input["default"]) && (undefined === input["enum"] || Array.isArray(input["enum"]) && input["enum"].every(elem => "number" === typeof elem)) && (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "boolean" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "boolean" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf) && "number" === input.type && (undefined === input.nullable || "boolean" === typeof input.nullable) && (undefined === input.title || "string" === typeof input.title) && (undefined === input.description || "string" === typeof input.description) && (undefined === input.deprecated || "boolean" === typeof input.deprecated) && (undefined === input["x-typia-optional"] || "boolean" === typeof input["x-typia-optional"]) && (undefined === input["x-typia-rest"] || "boolean" === typeof input["x-typia-rest"]);
|
40
|
-
const $io15 = input => (undefined === input["default"] || "string" === typeof input["default"]) && (undefined === input["enum"] || Array.isArray(input["enum"]) && input["enum"].every(elem => "string" === typeof elem)) && (undefined === input.format || "string" === typeof input.format) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 4294967295)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 4294967295)) && "string" === input.type && (undefined === input.nullable || "boolean" === typeof input.nullable) && (undefined === input.title || "string" === typeof input.title) && (undefined === input.description || "string" === typeof input.description) && (undefined === input.deprecated || "boolean" === typeof input.deprecated) && (undefined === input["x-typia-optional"] || "boolean" === typeof input["x-typia-optional"]) && (undefined === input["x-typia-rest"] || "boolean" === typeof input["x-typia-rest"]);
|
40
|
+
const $io15 = input => (undefined === input["default"] || "string" === typeof input["default"]) && (undefined === input["enum"] || Array.isArray(input["enum"]) && input["enum"].every(elem => "string" === typeof elem)) && (undefined === input.format || "string" === typeof input.format) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 4294967295)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 4294967295)) && "string" === input.type && (undefined === input.nullable || "boolean" === typeof input.nullable) && (undefined === input.title || "string" === typeof input.title) && (undefined === input.description || "string" === typeof input.description) && (undefined === input.deprecated || "boolean" === typeof input.deprecated) && (undefined === input["x-typia-optional"] || "boolean" === typeof input["x-typia-optional"]) && (undefined === input["x-typia-rest"] || "boolean" === typeof input["x-typia-rest"]);
|
41
41
|
const $io16 = input => "object" === typeof input.items && null !== input.items && false === Array.isArray(input.items) && $iu0(input.items) && (undefined === input.minItems || "number" === typeof input.minItems && (Math.floor(input.minItems) === input.minItems && 0 <= input.minItems && input.minItems <= 4294967295)) && (undefined === input.maxItems || "number" === typeof input.maxItems && (Math.floor(input.maxItems) === input.maxItems && 0 <= input.maxItems && input.maxItems <= 4294967295)) && (undefined === input["x-typia-tuple"] || "object" === typeof input["x-typia-tuple"] && null !== input["x-typia-tuple"] && $io20(input["x-typia-tuple"])) && "array" === input.type && (undefined === input.nullable || "boolean" === typeof input.nullable) && (undefined === input.title || "string" === typeof input.title) && (undefined === input.description || "string" === typeof input.description) && (undefined === input.deprecated || "boolean" === typeof input.deprecated) && (undefined === input["x-typia-optional"] || "boolean" === typeof input["x-typia-optional"]) && (undefined === input["x-typia-rest"] || "boolean" === typeof input["x-typia-rest"]);
|
42
42
|
const $io17 = input => (undefined === input.properties || "object" === typeof input.properties && null !== input.properties && false === Array.isArray(input.properties) && $io18(input.properties)) && (undefined === input.required || Array.isArray(input.required) && input.required.every(elem => "string" === typeof elem)) && (null !== input.additionalProperties && (undefined === input.additionalProperties || "boolean" === typeof input.additionalProperties || "object" === typeof input.additionalProperties && null !== input.additionalProperties && false === Array.isArray(input.additionalProperties) && $iu0(input.additionalProperties))) && (undefined === input["x-typia-patternProperties"] || "object" === typeof input["x-typia-patternProperties"] && null !== input["x-typia-patternProperties"] && false === Array.isArray(input["x-typia-patternProperties"]) && $io18(input["x-typia-patternProperties"])) && "object" === input.type && (undefined === input.nullable || "boolean" === typeof input.nullable) && (undefined === input.title || "string" === typeof input.title) && (undefined === input.description || "string" === typeof input.description) && (undefined === input.deprecated || "boolean" === typeof input.deprecated) && (undefined === input["x-typia-optional"] || "boolean" === typeof input["x-typia-optional"]) && (undefined === input["x-typia-rest"] || "boolean" === typeof input["x-typia-rest"]);
|
43
43
|
const $io18 = input => Object.keys(input).every(key => {
|
@@ -348,10 +348,6 @@ var OpenApiConverter;
|
|
348
348
|
path: _path + ".securitySchemes",
|
349
349
|
expected: "(Record<string, ISwaggerSecurityScheme> | undefined)",
|
350
350
|
value: input.securitySchemes
|
351
|
-
}, errorFactory)) && (undefined === input["x-nestia-namespace"] || "string" === typeof input["x-nestia-namespace"] || $guard(_exceptionable, {
|
352
|
-
path: _path + "[\"x-nestia-namespace\"]",
|
353
|
-
expected: "(string | undefined)",
|
354
|
-
value: input["x-nestia-namespace"]
|
355
351
|
}, errorFactory));
|
356
352
|
const $ao6 = (input, _path, _exceptionable = true) => false === _exceptionable || Object.keys(input).every(key => {
|
357
353
|
const value = input[key];
|
@@ -735,6 +731,10 @@ var OpenApiConverter;
|
|
735
731
|
path: _path + ".pattern",
|
736
732
|
expected: "(string | undefined)",
|
737
733
|
value: input.pattern
|
734
|
+
}, errorFactory)) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType || $guard(_exceptionable, {
|
735
|
+
path: _path + ".contentMediaType",
|
736
|
+
expected: "(string | undefined)",
|
737
|
+
value: input.contentMediaType
|
738
738
|
}, errorFactory)) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 4294967295 || $guard(_exceptionable, {
|
739
739
|
path: _path + ".minLength",
|
740
740
|
expected: "number & Type<\"uint32\">",
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@nestia/migrate",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.12.1",
|
4
4
|
"description": "Migration program from swagger to NestJS",
|
5
5
|
"main": "lib/index.js",
|
6
6
|
"typings": "lib/index.d.ts",
|
@@ -45,11 +45,14 @@
|
|
45
45
|
"@types/express": "^4.17.21",
|
46
46
|
"@types/inquirer": "^9.0.7",
|
47
47
|
"@types/node": "^20.3.3",
|
48
|
+
"@types/swagger-ui-express": "^4.1.6",
|
48
49
|
"dotenv": "^16.3.1",
|
49
50
|
"dotenv-expand": "^10.0.0",
|
51
|
+
"express": "^4.19.2",
|
50
52
|
"rimraf": "^5.0.1",
|
51
53
|
"serialize-error": "^4.1.0",
|
52
54
|
"source-map-support": "^0.5.21",
|
55
|
+
"swagger-ui-express": "^5.0.0",
|
53
56
|
"ts-node": "^10.9.1",
|
54
57
|
"ts-patch": "^3.1.0",
|
55
58
|
"typescript-transform-paths": "^3.4.6"
|
@@ -60,8 +63,8 @@
|
|
60
63
|
"openapi-types": "^12.1.3",
|
61
64
|
"prettier": "^3.2.5",
|
62
65
|
"tstl": "^3.0.0",
|
63
|
-
"typescript": "^5.4.
|
64
|
-
"typia": "^5.5.
|
66
|
+
"typescript": "^5.4.3",
|
67
|
+
"typia": "^5.5.10"
|
65
68
|
},
|
66
69
|
"files": [
|
67
70
|
"lib",
|
@@ -1,86 +1,86 @@
|
|
1
|
-
import typia, { IValidation } from "typia";
|
2
|
-
|
3
|
-
import { MigrateAnalyzer } from "./analyzers/MigrateAnalyzer";
|
4
|
-
import { NEST_TEMPLATE } from "./bundles/NEST_TEMPLATE";
|
5
|
-
import { SDK_TEMPLATE } from "./bundles/SDK_TEMPLATE";
|
6
|
-
import { MigrateApiProgrammer } from "./programmers/MigrateApiProgrammer";
|
7
|
-
import { MigrateApiStartProgrammer } from "./programmers/MigrateApiStartProgrammer";
|
8
|
-
import { MigrateE2eProgrammer } from "./programmers/MigrateE2eProgrammer";
|
9
|
-
import { MigrateNestProgrammer } from "./programmers/MigrateNestProgrammer";
|
10
|
-
import { IMigrateFile } from "./structures/IMigrateFile";
|
11
|
-
import { IMigrateProgram } from "./structures/IMigrateProgram";
|
12
|
-
import { ISwagger } from "./structures/ISwagger";
|
13
|
-
import { ISwaggerV31 } from "./structures/ISwaggerV31";
|
14
|
-
import { OpenApiConverter } from "./utils/OpenApiConverter";
|
15
|
-
|
16
|
-
export class MigrateApplication {
|
17
|
-
private constructor(public readonly swagger: ISwagger) {}
|
18
|
-
|
19
|
-
public static async create(
|
20
|
-
swagger: ISwagger | ISwaggerV31,
|
21
|
-
): Promise<IValidation<MigrateApplication>> {
|
22
|
-
swagger = typia.is<ISwaggerV31.IVersion>(swagger)
|
23
|
-
? OpenApiConverter.v3_1(swagger)
|
24
|
-
: swagger;
|
25
|
-
const result = typia.validate<ISwagger>(swagger);
|
26
|
-
if (result.success === false) return result;
|
27
|
-
return {
|
28
|
-
success: true,
|
29
|
-
data: new MigrateApplication(swagger),
|
30
|
-
errors: [],
|
31
|
-
};
|
32
|
-
}
|
33
|
-
|
34
|
-
public nest(config: MigrateApplication.IConfig): MigrateApplication.IOutput {
|
35
|
-
const program: IMigrateProgram = MigrateAnalyzer.analyze({
|
36
|
-
mode: "nest",
|
37
|
-
swagger: this.swagger,
|
38
|
-
dictionary: new Map(),
|
39
|
-
simulate: config.simulate,
|
40
|
-
e2e: config.e2e,
|
41
|
-
});
|
42
|
-
return {
|
43
|
-
program,
|
44
|
-
files: [
|
45
|
-
...NEST_TEMPLATE,
|
46
|
-
...MigrateNestProgrammer.write(program),
|
47
|
-
...MigrateApiProgrammer.write(program),
|
48
|
-
...(config.e2e ? MigrateE2eProgrammer.write(program) : []),
|
49
|
-
],
|
50
|
-
};
|
51
|
-
}
|
52
|
-
|
53
|
-
public sdk(config: MigrateApplication.IConfig): MigrateApplication.IOutput {
|
54
|
-
const program: IMigrateProgram = MigrateAnalyzer.analyze({
|
55
|
-
mode: "sdk",
|
56
|
-
swagger: this.swagger,
|
57
|
-
dictionary: new Map(),
|
58
|
-
simulate: config.simulate,
|
59
|
-
e2e: config.e2e,
|
60
|
-
});
|
61
|
-
return {
|
62
|
-
program,
|
63
|
-
files: [
|
64
|
-
...SDK_TEMPLATE,
|
65
|
-
...MigrateApiProgrammer.write(program),
|
66
|
-
MigrateApiStartProgrammer.write(program),
|
67
|
-
...(config.e2e ? MigrateE2eProgrammer.write(program) : []),
|
68
|
-
{
|
69
|
-
location: "",
|
70
|
-
file: "swagger.json",
|
71
|
-
content: JSON.stringify(this.swagger, null, 2),
|
72
|
-
},
|
73
|
-
],
|
74
|
-
};
|
75
|
-
}
|
76
|
-
}
|
77
|
-
export namespace MigrateApplication {
|
78
|
-
export interface IOutput {
|
79
|
-
program: IMigrateProgram;
|
80
|
-
files: IMigrateFile[];
|
81
|
-
}
|
82
|
-
export interface IConfig {
|
83
|
-
simulate: boolean;
|
84
|
-
e2e: boolean;
|
85
|
-
}
|
86
|
-
}
|
1
|
+
import typia, { IValidation } from "typia";
|
2
|
+
|
3
|
+
import { MigrateAnalyzer } from "./analyzers/MigrateAnalyzer";
|
4
|
+
import { NEST_TEMPLATE } from "./bundles/NEST_TEMPLATE";
|
5
|
+
import { SDK_TEMPLATE } from "./bundles/SDK_TEMPLATE";
|
6
|
+
import { MigrateApiProgrammer } from "./programmers/MigrateApiProgrammer";
|
7
|
+
import { MigrateApiStartProgrammer } from "./programmers/MigrateApiStartProgrammer";
|
8
|
+
import { MigrateE2eProgrammer } from "./programmers/MigrateE2eProgrammer";
|
9
|
+
import { MigrateNestProgrammer } from "./programmers/MigrateNestProgrammer";
|
10
|
+
import { IMigrateFile } from "./structures/IMigrateFile";
|
11
|
+
import { IMigrateProgram } from "./structures/IMigrateProgram";
|
12
|
+
import { ISwagger } from "./structures/ISwagger";
|
13
|
+
import { ISwaggerV31 } from "./structures/ISwaggerV31";
|
14
|
+
import { OpenApiConverter } from "./utils/OpenApiConverter";
|
15
|
+
|
16
|
+
export class MigrateApplication {
|
17
|
+
private constructor(public readonly swagger: ISwagger) {}
|
18
|
+
|
19
|
+
public static async create(
|
20
|
+
swagger: ISwagger | ISwaggerV31,
|
21
|
+
): Promise<IValidation<MigrateApplication>> {
|
22
|
+
swagger = typia.is<ISwaggerV31.IVersion>(swagger)
|
23
|
+
? OpenApiConverter.v3_1(swagger)
|
24
|
+
: swagger;
|
25
|
+
const result = typia.validate<ISwagger>(swagger);
|
26
|
+
if (result.success === false) return result;
|
27
|
+
return {
|
28
|
+
success: true,
|
29
|
+
data: new MigrateApplication(swagger),
|
30
|
+
errors: [],
|
31
|
+
};
|
32
|
+
}
|
33
|
+
|
34
|
+
public nest(config: MigrateApplication.IConfig): MigrateApplication.IOutput {
|
35
|
+
const program: IMigrateProgram = MigrateAnalyzer.analyze({
|
36
|
+
mode: "nest",
|
37
|
+
swagger: this.swagger,
|
38
|
+
dictionary: new Map(),
|
39
|
+
simulate: config.simulate,
|
40
|
+
e2e: config.e2e,
|
41
|
+
});
|
42
|
+
return {
|
43
|
+
program,
|
44
|
+
files: [
|
45
|
+
...NEST_TEMPLATE,
|
46
|
+
...MigrateNestProgrammer.write(program),
|
47
|
+
...MigrateApiProgrammer.write(program),
|
48
|
+
...(config.e2e ? MigrateE2eProgrammer.write(program) : []),
|
49
|
+
],
|
50
|
+
};
|
51
|
+
}
|
52
|
+
|
53
|
+
public sdk(config: MigrateApplication.IConfig): MigrateApplication.IOutput {
|
54
|
+
const program: IMigrateProgram = MigrateAnalyzer.analyze({
|
55
|
+
mode: "sdk",
|
56
|
+
swagger: this.swagger,
|
57
|
+
dictionary: new Map(),
|
58
|
+
simulate: config.simulate,
|
59
|
+
e2e: config.e2e,
|
60
|
+
});
|
61
|
+
return {
|
62
|
+
program,
|
63
|
+
files: [
|
64
|
+
...SDK_TEMPLATE,
|
65
|
+
...MigrateApiProgrammer.write(program),
|
66
|
+
MigrateApiStartProgrammer.write(program),
|
67
|
+
...(config.e2e ? MigrateE2eProgrammer.write(program) : []),
|
68
|
+
{
|
69
|
+
location: "",
|
70
|
+
file: "swagger.json",
|
71
|
+
content: JSON.stringify(this.swagger, null, 2),
|
72
|
+
},
|
73
|
+
],
|
74
|
+
};
|
75
|
+
}
|
76
|
+
}
|
77
|
+
export namespace MigrateApplication {
|
78
|
+
export interface IOutput {
|
79
|
+
program: IMigrateProgram;
|
80
|
+
files: IMigrateFile[];
|
81
|
+
}
|
82
|
+
export interface IConfig {
|
83
|
+
simulate: boolean;
|
84
|
+
e2e: boolean;
|
85
|
+
}
|
86
|
+
}
|
@@ -47,7 +47,7 @@ export const NEST_TEMPLATE = [
|
|
47
47
|
{
|
48
48
|
"location": "",
|
49
49
|
"file": "package.json",
|
50
|
-
"content": "{\r\n \"private\": true,\r\n \"name\": \"@ORGANIZATION/PROJECT\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"Starter kit of Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"scripts\": {\r\n \"test\": \"node bin/test\",\r\n \"test:webpack\": \"npm run webpack && node bin/test/webpack.js\",\r\n \"------------------------BUILDS------------------------\": \"\",\r\n \"build\": \"npm run build:sdk && npm run build:main && npm run build:test\",\r\n \"build:api\": \"rimraf packages/api/lib && npm run build:sdk && tsc -p packages/api/tsconfig.json\",\r\n \"build:main\": \"rimraf lib && tsc\",\r\n \"build:sdk\": \"rimraf src/api/functional && nestia sdk\",\r\n \"build:swagger\": \"npx nestia swagger\",\r\n \"build:test\": \"rimraf bin && tsc -p test/tsconfig.json\",\r\n \"dev\": \"npm run build:test -- --watch\",\r\n \"eslint\": \"eslint src && eslint test\",\r\n \"eslint:fix\": \"eslint --fix src && eslint --fix test\",\r\n \"prepare\": \"ts-patch install && typia patch\",\r\n \"prettier\": \"prettier src --write && prettier test --write\",\r\n \"------------------------WEBPACK------------------------\": \"\",\r\n \"webpack\": \"rimraf dist && webpack\",\r\n \"webpack:start\": \"cd dist && node dist/server\",\r\n \"------------------------DEPLOYS------------------------\": \"\",\r\n \"package:api\": \"npm run build:swagger && npm run build:api && cd packages/api && npm publish\",\r\n \"start\": \"node lib/executable/server\",\r\n \"start:swagger\": \"ts-node src/executable/swagger.ts\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia-start\"\r\n },\r\n \"keywords\": [\r\n \"nestia\",\r\n \"template\",\r\n \"boilerplate\"\r\n ],\r\n \"author\": \"AUTHOR\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia-start/issues\"\r\n },\r\n \"homepage\": \"https://github.com/samchon/nestia-start#readme\",\r\n \"devDependencies\": {\r\n \"@nestia/e2e\": \"^0.4.2\",\r\n \"@nestia/sdk\": \"^2.6.
|
50
|
+
"content": "{\r\n \"private\": true,\r\n \"name\": \"@ORGANIZATION/PROJECT\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"Starter kit of Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"scripts\": {\r\n \"test\": \"node bin/test\",\r\n \"test:webpack\": \"npm run webpack && node bin/test/webpack.js\",\r\n \"------------------------BUILDS------------------------\": \"\",\r\n \"build\": \"npm run build:sdk && npm run build:main && npm run build:test\",\r\n \"build:api\": \"rimraf packages/api/lib && npm run build:sdk && tsc -p packages/api/tsconfig.json\",\r\n \"build:main\": \"rimraf lib && tsc\",\r\n \"build:sdk\": \"rimraf src/api/functional && nestia sdk\",\r\n \"build:swagger\": \"npx nestia swagger\",\r\n \"build:test\": \"rimraf bin && tsc -p test/tsconfig.json\",\r\n \"dev\": \"npm run build:test -- --watch\",\r\n \"eslint\": \"eslint src && eslint test\",\r\n \"eslint:fix\": \"eslint --fix src && eslint --fix test\",\r\n \"prepare\": \"ts-patch install && typia patch\",\r\n \"prettier\": \"prettier src --write && prettier test --write\",\r\n \"------------------------WEBPACK------------------------\": \"\",\r\n \"webpack\": \"rimraf dist && webpack\",\r\n \"webpack:start\": \"cd dist && node dist/server\",\r\n \"------------------------DEPLOYS------------------------\": \"\",\r\n \"package:api\": \"npm run build:swagger && npm run build:api && cd packages/api && npm publish\",\r\n \"start\": \"node lib/executable/server\",\r\n \"start:swagger\": \"ts-node src/executable/swagger.ts\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia-start\"\r\n },\r\n \"keywords\": [\r\n \"nestia\",\r\n \"template\",\r\n \"boilerplate\"\r\n ],\r\n \"author\": \"AUTHOR\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia-start/issues\"\r\n },\r\n \"homepage\": \"https://github.com/samchon/nestia-start#readme\",\r\n \"devDependencies\": {\r\n \"@nestia/e2e\": \"^0.4.2\",\r\n \"@nestia/sdk\": \"^2.6.4\",\r\n \"@trivago/prettier-plugin-sort-imports\": \"^4.3.0\",\r\n \"@types/cli\": \"^0.11.21\",\r\n \"@types/express\": \"^4.17.21\",\r\n \"@types/inquirer\": \"^8.2.5\",\r\n \"@types/node\": \"^18.11.0\",\r\n \"@types/uuid\": \"^8.3.4\",\r\n \"@typescript-eslint/eslint-plugin\": \"^6.19.1\",\r\n \"@typescript-eslint/parser\": \"^6.19.1\",\r\n \"chalk\": \"^4.1.0\",\r\n \"cli\": \"^1.0.1\",\r\n \"copy-webpack-plugin\": \"^11.0.0\",\r\n \"eslint-plugin-deprecation\": \"^2.0.0\",\r\n \"express\": \"^4.18.2\",\r\n \"nestia\": \"^5.3.0\",\r\n \"prettier\": \"^3.2.4\",\r\n \"prettier-plugin-prisma\": \"^5.0.0\",\r\n \"rimraf\": \"^3.0.2\",\r\n \"source-map-support\": \"^0.5.21\",\r\n \"swagger-ui-express\": \"^5.0.0\",\r\n \"ts-loader\": \"^9.5.1\",\r\n \"ts-node\": \"^10.9.1\",\r\n \"ts-patch\": \"^3.0.2\",\r\n \"typescript\": \"^5.3.2\",\r\n \"typescript-transform-paths\": \"^3.4.6\",\r\n \"webpack\": \"^5.89.0\",\r\n \"webpack-cli\": \"^5.1.4\",\r\n \"write-file-webpack-plugin\": \"^4.5.1\"\r\n },\r\n \"dependencies\": {\r\n \"@nestia/core\": \"^2.6.4\",\r\n \"@nestia/fetcher\": \"^2.6.4\",\r\n \"@nestjs/common\": \"^10.3.7\",\r\n \"@nestjs/core\": \"^10.3.7\",\r\n \"@nestjs/platform-express\": \"^10.3.7\",\r\n \"commander\": \"10.0.0\",\r\n \"dotenv\": \"^16.3.1\",\r\n \"dotenv-expand\": \"^10.0.0\",\r\n \"inquirer\": \"8.2.5\",\r\n \"serialize-error\": \"^4.1.0\",\r\n \"tstl\": \"^3.0.0\",\r\n \"typia\": \"^5.5.10\",\r\n \"uuid\": \"^9.0.0\"\r\n },\r\n \"stackblitz\": {\r\n \"startCommand\": \"npm run prepare && npm run build:test && npm run test\"\r\n }\r\n}"
|
51
51
|
},
|
52
52
|
{
|
53
53
|
"location": "packages/api",
|
@@ -62,7 +62,7 @@ export const NEST_TEMPLATE = [
|
|
62
62
|
{
|
63
63
|
"location": "packages/api",
|
64
64
|
"file": "package.json",
|
65
|
-
"content": "{\r\n \"name\": \"@ORGANIZATION/PROJECT-api\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"SDK library generated by Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"typings\": \"lib/index.d.ts\",\r\n \"scripts\": {\r\n \"build\": \"npm run build:sdk && npm run compile\",\r\n \"build:sdk\": \"rimraf ../../src/api/functional && cd ../.. && npx nestia sdk && cd packages/api\",\r\n \"compile\": \"rimraf lib && tsc\",\r\n \"deploy\": \"npm run build && npm publish\",\r\n \"prepare\": \"ts-patch install && typia patch\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia\"\r\n },\r\n \"author\": \"Jeongho Nam\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia/issues\"\r\n },\r\n \"homepage\": \"https://nestia.io\",\r\n \"files\": [\r\n \"lib\",\r\n \"swagger.json\",\r\n \"package.json\",\r\n \"README.md\"\r\n ],\r\n \"devDependencies\": {\r\n \"rimraf\": \"^5.0.5\",\r\n \"ts-node\": \"^10.9.2\",\r\n \"ts-patch\": \"^3.1.2\",\r\n \"typescript\": \"^5.3.3\"\r\n },\r\n \"dependencies\": {\r\n \"@nestia/fetcher\": \"^2.6.
|
65
|
+
"content": "{\r\n \"name\": \"@ORGANIZATION/PROJECT-api\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"SDK library generated by Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"typings\": \"lib/index.d.ts\",\r\n \"scripts\": {\r\n \"build\": \"npm run build:sdk && npm run compile\",\r\n \"build:sdk\": \"rimraf ../../src/api/functional && cd ../.. && npx nestia sdk && cd packages/api\",\r\n \"compile\": \"rimraf lib && tsc\",\r\n \"deploy\": \"npm run build && npm publish\",\r\n \"prepare\": \"ts-patch install && typia patch\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia\"\r\n },\r\n \"author\": \"Jeongho Nam\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia/issues\"\r\n },\r\n \"homepage\": \"https://nestia.io\",\r\n \"files\": [\r\n \"lib\",\r\n \"swagger.json\",\r\n \"package.json\",\r\n \"README.md\"\r\n ],\r\n \"devDependencies\": {\r\n \"rimraf\": \"^5.0.5\",\r\n \"ts-node\": \"^10.9.2\",\r\n \"ts-patch\": \"^3.1.2\",\r\n \"typescript\": \"^5.3.3\"\r\n },\r\n \"dependencies\": {\r\n \"@nestia/fetcher\": \"^2.6.4\",\r\n \"typia\": \"^5.5.10\"\r\n }\r\n}"
|
66
66
|
},
|
67
67
|
{
|
68
68
|
"location": "packages/api",
|
@@ -27,7 +27,7 @@ export const SDK_TEMPLATE = [
|
|
27
27
|
{
|
28
28
|
"location": "",
|
29
29
|
"file": "package.json",
|
30
|
-
"content": "{\r\n \"name\": \"@ORGANIZATION/PROJECT-api\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"SDK library generated by Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"typings\": \"lib/index.d.ts\",\r\n \"exports\": {\r\n \".\": {\r\n \"types\": \"./lib/index.d.ts\",\r\n \"require\": \"./lib/index.js\",\r\n \"import\": \"./lib/index.mjs\"\r\n }\r\n },\r\n \"scripts\": {\r\n \"build\": \"rimraf lib && tsc && rollup -c\",\r\n \"build:test\": \"rimraf bin && tsc --project test/tsconfig.json\",\r\n \"deploy\": \"npm run build && npm publish\",\r\n \"dev\": \"npm run build:test -- --watch\",\r\n \"hello\": \"node hello\",\r\n \"prepare\": \"ts-patch install && typia patch\",\r\n \"start\": \"ts-node test/start.ts\",\r\n \"swagger\": \"ts-node test/swagger.ts\",\r\n \"test\": \"ts-node test/index.ts\",\r\n \"test:simulate\": \"ts-node test/index.ts --simulate true\",\r\n \"test:manual\": \"ts-node test/manual.ts\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia\"\r\n },\r\n \"author\": \"Jeongho Nam\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia/issues\"\r\n },\r\n \"homepage\": \"https://nestia.io\",\r\n \"files\": [\r\n \"lib\",\r\n \"swagger.json\",\r\n \"package.json\",\r\n \"README.md\"\r\n ],\r\n \"dependencies\": {\r\n \"@nestia/fetcher\": \"^2.6.
|
30
|
+
"content": "{\r\n \"name\": \"@ORGANIZATION/PROJECT-api\",\r\n \"version\": \"0.1.0\",\r\n \"description\": \"SDK library generated by Nestia\",\r\n \"main\": \"lib/index.js\",\r\n \"typings\": \"lib/index.d.ts\",\r\n \"exports\": {\r\n \".\": {\r\n \"types\": \"./lib/index.d.ts\",\r\n \"require\": \"./lib/index.js\",\r\n \"import\": \"./lib/index.mjs\"\r\n }\r\n },\r\n \"scripts\": {\r\n \"build\": \"rimraf lib && tsc && rollup -c\",\r\n \"build:test\": \"rimraf bin && tsc --project test/tsconfig.json\",\r\n \"deploy\": \"npm run build && npm publish\",\r\n \"dev\": \"npm run build:test -- --watch\",\r\n \"hello\": \"node hello\",\r\n \"prepare\": \"ts-patch install && typia patch\",\r\n \"start\": \"ts-node test/start.ts\",\r\n \"swagger\": \"ts-node test/swagger.ts\",\r\n \"test\": \"ts-node test/index.ts\",\r\n \"test:simulate\": \"ts-node test/index.ts --simulate true\",\r\n \"test:manual\": \"ts-node test/manual.ts\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"https://github.com/samchon/nestia\"\r\n },\r\n \"author\": \"Jeongho Nam\",\r\n \"license\": \"MIT\",\r\n \"bugs\": {\r\n \"url\": \"https://github.com/samchon/nestia/issues\"\r\n },\r\n \"homepage\": \"https://nestia.io\",\r\n \"files\": [\r\n \"lib\",\r\n \"swagger.json\",\r\n \"package.json\",\r\n \"README.md\"\r\n ],\r\n \"dependencies\": {\r\n \"@nestia/fetcher\": \"^2.6.4\",\r\n \"typia\": \"^5.5.10\"\r\n },\r\n \"devDependencies\": {\r\n \"@nestia/e2e\": \"^0.4.2\",\r\n \"@rollup/plugin-terser\": \"^0.4.4\",\r\n \"@rollup/plugin-typescript\": \"^11.1.6\",\r\n \"@trivago/prettier-plugin-sort-imports\": \"^4.3.0\",\r\n \"@types/express\": \"^4.17.21\",\r\n \"@types/inquirer\": \"8.2.5\",\r\n \"@types/swagger-ui-express\": \"^4.1.6\",\r\n \"commander\": \"^10.0.0\",\r\n \"express\": \"^4.19.2\",\r\n \"inquirer\": \"8.2.5\",\r\n \"prettier\": \"^3.2.5\",\r\n \"rimraf\": \"^5.0.5\",\r\n \"rollup\": \"^4.13.2\",\r\n \"swagger-ui-express\": \"^5.0.0\",\r\n \"ts-node\": \"^10.9.2\",\r\n \"ts-patch\": \"^3.1.2\",\r\n \"typescript\": \"^5.3.3\",\r\n \"typescript-transform-paths\": \"^3.4.6\"\r\n }\r\n}"
|
31
31
|
},
|
32
32
|
{
|
33
33
|
"location": "",
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import ts from "typescript";
|
2
|
+
import { Escaper } from "typia/lib/utils/Escaper";
|
3
|
+
|
4
|
+
export namespace TypeLiteralFactory {
|
5
|
+
export const generate = (value: any): ts.TypeNode =>
|
6
|
+
typeof value === "boolean"
|
7
|
+
? generateBoolean(value)
|
8
|
+
: typeof value === "number"
|
9
|
+
? generateNumber(value)
|
10
|
+
: typeof value === "string"
|
11
|
+
? generatestring(value)
|
12
|
+
: typeof value === "object"
|
13
|
+
? value === null
|
14
|
+
? generateNull()
|
15
|
+
: Array.isArray(value)
|
16
|
+
? generateTuple(value)
|
17
|
+
: generateObject(value)
|
18
|
+
: ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword);
|
19
|
+
|
20
|
+
const generatestring = (str: string) =>
|
21
|
+
ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(str));
|
22
|
+
|
23
|
+
const generateNumber = (num: number) =>
|
24
|
+
ts.factory.createLiteralTypeNode(ts.factory.createNumericLiteral(num));
|
25
|
+
|
26
|
+
const generateBoolean = (bool: boolean) =>
|
27
|
+
ts.factory.createLiteralTypeNode(
|
28
|
+
bool ? ts.factory.createTrue() : ts.factory.createFalse(),
|
29
|
+
);
|
30
|
+
|
31
|
+
const generateNull = () =>
|
32
|
+
ts.factory.createLiteralTypeNode(ts.factory.createNull());
|
33
|
+
|
34
|
+
const generateTuple = (items: any[]) =>
|
35
|
+
ts.factory.createTupleTypeNode(items.map(generate));
|
36
|
+
|
37
|
+
const generateObject = (obj: object) =>
|
38
|
+
ts.factory.createTypeLiteralNode(
|
39
|
+
Object.entries(obj).map(([key, value]) =>
|
40
|
+
ts.factory.createPropertySignature(
|
41
|
+
undefined,
|
42
|
+
Escaper.variable(key)
|
43
|
+
? ts.factory.createIdentifier(key)
|
44
|
+
: ts.factory.createStringLiteral(key),
|
45
|
+
undefined,
|
46
|
+
generate(value),
|
47
|
+
),
|
48
|
+
),
|
49
|
+
);
|
50
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import ts from "typescript";
|
2
|
-
import { ExpressionFactory } from "typia/lib/factories/ExpressionFactory";
|
3
2
|
|
3
|
+
import { TypeLiteralFactory } from "../factories/TypeLiteralFactory";
|
4
4
|
import { FilePrinter } from "../utils/FilePrinter";
|
5
5
|
import { MapUtil } from "../utils/MapUtil";
|
6
6
|
|
@@ -38,18 +38,14 @@ export class MigrateImportProgrammer {
|
|
38
38
|
);
|
39
39
|
}
|
40
40
|
|
41
|
-
public tag(type: string, arg:
|
41
|
+
public tag(type: string, arg: any): ts.TypeReferenceNode {
|
42
42
|
const instance: string = this.external({
|
43
43
|
type: "instance",
|
44
44
|
library: "typia",
|
45
45
|
name: "tags",
|
46
46
|
});
|
47
47
|
return ts.factory.createTypeReferenceNode(`${instance}.${type}`, [
|
48
|
-
|
49
|
-
typeof arg === "string"
|
50
|
-
? ts.factory.createStringLiteral(arg)
|
51
|
-
: ExpressionFactory.number(arg),
|
52
|
-
),
|
48
|
+
TypeLiteralFactory.generate(arg),
|
53
49
|
]);
|
54
50
|
}
|
55
51
|
|