@nestia/migrate 0.6.2 → 0.7.0-dev.20240201

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.
Files changed (59) hide show
  1. package/lib/IMigrateConfig.d.ts +4 -0
  2. package/lib/IMigrateConfig.js +3 -0
  3. package/lib/IMigrateConfig.js.map +1 -0
  4. package/lib/MigrateApplication.d.ts +2 -12
  5. package/lib/MigrateApplication.js +20 -60
  6. package/lib/MigrateApplication.js.map +1 -1
  7. package/lib/analyzers/MigrateAnalyzer.d.ts +2 -1
  8. package/lib/analyzers/MigrateAnalyzer.js +2 -1
  9. package/lib/analyzers/MigrateAnalyzer.js.map +1 -1
  10. package/lib/bundles/NEST_TEMPLATE.d.ts +5 -0
  11. package/{src/bundles/TEMPLATE.ts → lib/bundles/NEST_TEMPLATE.js} +71 -27
  12. package/lib/bundles/NEST_TEMPLATE.js.map +1 -0
  13. package/lib/bundles/SDK_TEMPLATE.d.ts +5 -0
  14. package/lib/bundles/SDK_TEMPLATE.js +61 -0
  15. package/lib/bundles/SDK_TEMPLATE.js.map +1 -0
  16. package/lib/bundles/TEMPLATE.d.ts +1 -1
  17. package/lib/bundles/TEMPLATE.js +23 -23
  18. package/lib/bundles/TEMPLATE.js.map +1 -1
  19. package/lib/executable/bundle.js +70 -51
  20. package/lib/executable/bundle.js.map +1 -1
  21. package/lib/executable/migrate.js +2 -59
  22. package/lib/executable/migrate.js.map +1 -1
  23. package/lib/internal/MigrateCli.d.ts +3 -0
  24. package/lib/internal/MigrateCli.js +59 -0
  25. package/lib/internal/MigrateCli.js.map +1 -0
  26. package/lib/internal/MigrateCommander.d.ts +9 -0
  27. package/lib/internal/MigrateCommander.js +70 -0
  28. package/lib/internal/MigrateCommander.js.map +1 -0
  29. package/lib/programmers/ApiFileProgrammer.d.ts +2 -1
  30. package/lib/programmers/ApiFileProgrammer.js +3 -3
  31. package/lib/programmers/ApiFileProgrammer.js.map +1 -1
  32. package/lib/programmers/ApiFunctionProgrammer.d.ts +3 -1
  33. package/lib/programmers/ApiFunctionProgrammer.js +34 -23
  34. package/lib/programmers/ApiFunctionProgrammer.js.map +1 -1
  35. package/lib/programmers/ApiNamespaceProgrammer.d.ts +3 -1
  36. package/lib/programmers/ApiNamespaceProgrammer.js +15 -2
  37. package/lib/programmers/ApiNamespaceProgrammer.js.map +1 -1
  38. package/lib/programmers/ApiProgrammer.js +48 -3
  39. package/lib/programmers/ApiProgrammer.js.map +1 -1
  40. package/lib/programmers/ApiSimulatationProgrammer.d.ts +14 -0
  41. package/lib/programmers/ApiSimulatationProgrammer.js +127 -0
  42. package/lib/programmers/ApiSimulatationProgrammer.js.map +1 -0
  43. package/lib/structures/IMigrateProgram.d.ts +2 -0
  44. package/package.json +68 -64
  45. package/src/IMigrateConfig.ts +4 -0
  46. package/src/MigrateApplication.ts +20 -63
  47. package/src/analyzers/MigrateAnalyzer.ts +8 -4
  48. package/src/bundles/NEST_TEMPLATE.ts +202 -0
  49. package/src/bundles/SDK_TEMPLATE.ts +57 -0
  50. package/src/executable/bundle.ts +80 -50
  51. package/src/executable/migrate.ts +2 -54
  52. package/src/internal/MigrateCommander.ts +52 -0
  53. package/src/internal/MigrateInquirer.ts +79 -0
  54. package/src/programmers/ApiFileProgrammer.ts +4 -2
  55. package/src/programmers/ApiFunctionProgrammer.ts +47 -20
  56. package/src/programmers/ApiNamespaceProgrammer.ts +24 -1
  57. package/src/programmers/ApiProgrammer.ts +63 -3
  58. package/src/programmers/ApiSimulatationProgrammer.ts +328 -0
  59. package/src/structures/IMigrateProgram.ts +2 -0
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ApiSimulatationProgrammer = void 0;
7
+ const typescript_1 = __importDefault(require("typescript"));
8
+ const IdentifierFactory_1 = require("typia/lib/factories/IdentifierFactory");
9
+ const StatementFactory_1 = require("typia/lib/factories/StatementFactory");
10
+ const TypeFactory_1 = require("typia/lib/factories/TypeFactory");
11
+ const ApiFunctionProgrammer_1 = require("./ApiFunctionProgrammer");
12
+ const ApiNamespaceProgrammer_1 = require("./ApiNamespaceProgrammer");
13
+ const SchemaProgrammer_1 = require("./SchemaProgrammer");
14
+ var ApiSimulatationProgrammer;
15
+ (function (ApiSimulatationProgrammer) {
16
+ ApiSimulatationProgrammer.random = (components) => (importer) => (props) => constant("random")(typescript_1.default.factory.createArrowFunction(undefined, undefined, [
17
+ typescript_1.default.factory.createParameterDeclaration(undefined, undefined, "g", typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Partial"), [
18
+ typescript_1.default.factory.createTypeReferenceNode(`${importer.external({
19
+ type: "default",
20
+ library: "typia",
21
+ name: "typia",
22
+ })}.IRandomGenerator`),
23
+ ])),
24
+ ], undefined, undefined, typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(importer.external({
25
+ type: "default",
26
+ library: "typia",
27
+ name: "typia",
28
+ })))("random"), [
29
+ props.route.success
30
+ ? SchemaProgrammer_1.SchemaProgrammer.write(components)(importer)(props.route.success.schema)
31
+ : TypeFactory_1.TypeFactory.keyword("void"),
32
+ ], [typescript_1.default.factory.createIdentifier("g")])));
33
+ ApiSimulatationProgrammer.simulate = (components) => (importer) => (props) => {
34
+ const caller = () => typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("random"), undefined, [
35
+ typescript_1.default.factory.createConditionalExpression(typescript_1.default.factory.createLogicalAnd(typescript_1.default.factory.createStrictEquality(typescript_1.default.factory.createStringLiteral("object"), typescript_1.default.factory.createTypeOfExpression(typescript_1.default.factory.createIdentifier("connection.simulate"))), typescript_1.default.factory.createStrictInequality(typescript_1.default.factory.createNull(), typescript_1.default.factory.createIdentifier("connection.simulate"))), undefined, typescript_1.default.factory.createIdentifier("connection.simulate"), undefined, typescript_1.default.factory.createIdentifier("undefined")),
36
+ ]);
37
+ assert;
38
+ return constant("simulate")(typescript_1.default.factory.createArrowFunction(undefined, undefined, ApiFunctionProgrammer_1.ApiFunctionProgrammer.writeParameterDeclarations(components)(importer)(props), typescript_1.default.factory.createTypeReferenceNode(props.route.success ? "Output" : "void"), undefined, typescript_1.default.factory.createBlock([
39
+ ...assert(components)(importer)(props),
40
+ typescript_1.default.factory.createReturnStatement(caller()),
41
+ ], true)));
42
+ };
43
+ const assert = (components) => (importer) => (props) => {
44
+ var _a, _b;
45
+ const parameters = [
46
+ ...props.route.parameters.map((p) => ({
47
+ category: "param",
48
+ name: p.key,
49
+ schema: SchemaProgrammer_1.SchemaProgrammer.write(components)(importer)(p.schema),
50
+ })),
51
+ ...(props.route.query
52
+ ? [
53
+ {
54
+ category: "query",
55
+ name: props.route.query.key,
56
+ schema: SchemaProgrammer_1.SchemaProgrammer.write(components)(importer)(props.route.query.schema),
57
+ },
58
+ ]
59
+ : []),
60
+ ...(props.route.body
61
+ ? [
62
+ {
63
+ category: "body",
64
+ name: props.route.body.key,
65
+ schema: SchemaProgrammer_1.SchemaProgrammer.write(components)(importer)(props.route.body.schema),
66
+ },
67
+ ]
68
+ : []),
69
+ ];
70
+ if (parameters.length === 0)
71
+ return [];
72
+ const validator = StatementFactory_1.StatementFactory.constant("assert", typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(importer.external({
73
+ type: "instance",
74
+ library: `@nestia/fetcher/lib/NestiaSimulator`,
75
+ name: "NestiaSimulator",
76
+ })))("assert"), undefined, [
77
+ typescript_1.default.factory.createObjectLiteralExpression([
78
+ typescript_1.default.factory.createPropertyAssignment("method", typescript_1.default.factory.createIdentifier("METADATA.method")),
79
+ typescript_1.default.factory.createPropertyAssignment("host", typescript_1.default.factory.createIdentifier("connection.host")),
80
+ typescript_1.default.factory.createPropertyAssignment("path", ApiNamespaceProgrammer_1.ApiNamespaceProgrammer.writePathCallExpression(props)),
81
+ typescript_1.default.factory.createPropertyAssignment("contentType", typescript_1.default.factory.createStringLiteral((_b = (_a = props.route.success) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : "application/json")),
82
+ ], true),
83
+ ]));
84
+ const individual = parameters
85
+ .map((p) => typescript_1.default.factory.createCallExpression((() => {
86
+ const base = IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier("assert"))(p.category);
87
+ if (p.category !== "param")
88
+ return base;
89
+ return typescript_1.default.factory.createCallExpression(base, undefined, [
90
+ typescript_1.default.factory.createStringLiteral(p.name),
91
+ ]);
92
+ })(), undefined, [
93
+ typescript_1.default.factory.createArrowFunction(undefined, undefined, [], undefined, undefined, typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(importer.external({
94
+ type: "default",
95
+ library: "typia",
96
+ name: "typia",
97
+ })))("assert"), undefined, [
98
+ typescript_1.default.factory.createIdentifier(p.category === "headers" ? "connection.headers" : p.name),
99
+ ])),
100
+ ]))
101
+ .map(typescript_1.default.factory.createExpressionStatement);
102
+ return [validator, tryAndCatch(importer)(individual)];
103
+ };
104
+ const tryAndCatch = (importer) => (individual) => typescript_1.default.factory.createTryStatement(typescript_1.default.factory.createBlock(individual, true), typescript_1.default.factory.createCatchClause("exp", typescript_1.default.factory.createBlock([
105
+ typescript_1.default.factory.createIfStatement(typescript_1.default.factory.createLogicalNot(typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(importer.external({
106
+ type: "default",
107
+ library: "typia",
108
+ name: "typia",
109
+ })))("is"), [
110
+ typescript_1.default.factory.createTypeReferenceNode(importer.external({
111
+ type: "instance",
112
+ library: "@nestia/Fetcher",
113
+ name: "HttpError",
114
+ })),
115
+ ], [typescript_1.default.factory.createIdentifier("exp")])), typescript_1.default.factory.createThrowStatement(typescript_1.default.factory.createIdentifier("exp"))),
116
+ typescript_1.default.factory.createReturnStatement(typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createObjectLiteralExpression([
117
+ typescript_1.default.factory.createPropertyAssignment("success", typescript_1.default.factory.createFalse()),
118
+ typescript_1.default.factory.createPropertyAssignment("status", typescript_1.default.factory.createIdentifier("exp.status")),
119
+ typescript_1.default.factory.createPropertyAssignment("headers", typescript_1.default.factory.createIdentifier("exp.headers")),
120
+ typescript_1.default.factory.createPropertyAssignment("data", typescript_1.default.factory.createIdentifier("exp.toJSON().message")),
121
+ ], true), TypeFactory_1.TypeFactory.keyword("any"))),
122
+ ], true)), undefined);
123
+ })(ApiSimulatationProgrammer || (exports.ApiSimulatationProgrammer = ApiSimulatationProgrammer = {}));
124
+ const constant = (name) => (expression) => typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
125
+ typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createIdentifier(name), undefined, undefined, expression),
126
+ ], typescript_1.default.NodeFlags.Const));
127
+ //# sourceMappingURL=ApiSimulatationProgrammer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiSimulatationProgrammer.js","sourceRoot":"","sources":["../../src/programmers/ApiSimulatationProgrammer.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
+ import { IMigrateConfig } from "../IMigrateConfig";
1
2
  import { IMigrateController } from "./IMigrateController";
2
3
  import { ISwagger } from "./ISwagger";
3
4
  export interface IMigrateProgram {
5
+ config: IMigrateConfig;
4
6
  controllers: IMigrateController[];
5
7
  swagger: ISwagger;
6
8
  }
package/package.json CHANGED
@@ -1,64 +1,68 @@
1
- {
2
- "name": "@nestia/migrate",
3
- "version": "0.6.2",
4
- "description": "Migration program from swagger to NestJS",
5
- "main": "lib/index.js",
6
- "typings": "lib/index.d.ts",
7
- "bin": {
8
- "@nestia/migrate": "lib/executable/migrate.js"
9
- },
10
- "scripts": {
11
- "build": "rimraf lib && tsc",
12
- "dev": "npm run build -- --watch",
13
- "prepare": "ts-patch install && typia patch && ts-node src/executable/bundle.ts",
14
- "test": "node lib/test"
15
- },
16
- "repository": {
17
- "type": "git",
18
- "url": "https://github.com/samchon/nestia"
19
- },
20
- "keywords": [
21
- "migration",
22
- "swagger",
23
- "NestJS",
24
- "nestia"
25
- ],
26
- "author": "Jeongho Nam",
27
- "license": "MIT",
28
- "bugs": {
29
- "url": "https://github.com/samchon/nestia/issues"
30
- },
31
- "homepage": "https://github.com/samchon/nestia#readme",
32
- "devDependencies": {
33
- "@nestia/core": "^2.4.0",
34
- "@nestia/fetcher": "^2.4.0",
35
- "@nestjs/common": "^10.3.1",
36
- "@nestjs/core": "^10.3.1",
37
- "@nestjs/platform-express": "^10.3.1",
38
- "@nestjs/platform-fastify": "^10.3.1",
39
- "@types/express": "^4.17.21",
40
- "@types/node": "^20.3.3",
41
- "dotenv": "^16.3.1",
42
- "dotenv-expand": "^10.0.0",
43
- "rimraf": "^5.0.1",
44
- "serialize-error": "^4.1.0",
45
- "source-map-support": "^0.5.21",
46
- "ts-node": "^10.9.1",
47
- "ts-patch": "^3.1.0",
48
- "tstl": "^2.5.13",
49
- "typescript-transform-paths": "^3.4.6"
50
- },
51
- "dependencies": {
52
- "typia": "^5.4.1",
53
- "typescript": "^5.3.3"
54
- },
55
- "files": [
56
- "lib",
57
- "src",
58
- "!lib/test",
59
- "!src/test",
60
- "package.json",
61
- "README.md",
62
- "LICENSE"
63
- ]
64
- }
1
+ {
2
+ "name": "@nestia/migrate",
3
+ "version": "0.7.0-dev.20240201",
4
+ "description": "Migration program from swagger to NestJS",
5
+ "main": "lib/index.js",
6
+ "typings": "lib/index.d.ts",
7
+ "bin": {
8
+ "@nestia/migrate": "lib/executable/migrate.js"
9
+ },
10
+ "scripts": {
11
+ "build": "rimraf lib && tsc",
12
+ "bundle": "ts-node src/executable/bundle.ts",
13
+ "dev": "npm run build -- --watch",
14
+ "prepare": "ts-patch install && typia patch && npm run bundle",
15
+ "test": "node lib/test"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/samchon/nestia"
20
+ },
21
+ "keywords": [
22
+ "migration",
23
+ "swagger",
24
+ "NestJS",
25
+ "nestia"
26
+ ],
27
+ "author": "Jeongho Nam",
28
+ "license": "MIT",
29
+ "bugs": {
30
+ "url": "https://github.com/samchon/nestia/issues"
31
+ },
32
+ "homepage": "https://github.com/samchon/nestia#readme",
33
+ "devDependencies": {
34
+ "@nestia/core": "2.5.0-dev.20240201",
35
+ "@nestia/fetcher": "2.5.0-dev.20240201",
36
+ "@nestjs/common": "^10.3.1",
37
+ "@nestjs/core": "^10.3.1",
38
+ "@nestjs/platform-express": "^10.3.1",
39
+ "@nestjs/platform-fastify": "^10.3.1",
40
+ "@types/express": "^4.17.21",
41
+ "@types/inquirer": "^9.0.7",
42
+ "@types/node": "^20.3.3",
43
+ "dotenv": "^16.3.1",
44
+ "dotenv-expand": "^10.0.0",
45
+ "rimraf": "^5.0.1",
46
+ "serialize-error": "^4.1.0",
47
+ "source-map-support": "^0.5.21",
48
+ "ts-node": "^10.9.1",
49
+ "ts-patch": "^3.1.0",
50
+ "tstl": "^2.5.13",
51
+ "typescript-transform-paths": "^3.4.6"
52
+ },
53
+ "dependencies": {
54
+ "commander": "10.0.0",
55
+ "inquirer": "8.2.5",
56
+ "typescript": "^5.3.3",
57
+ "typia": "^5.4.1"
58
+ },
59
+ "files": [
60
+ "lib",
61
+ "src",
62
+ "!lib/test",
63
+ "!src/test",
64
+ "package.json",
65
+ "README.md",
66
+ "LICENSE"
67
+ ]
68
+ }
@@ -0,0 +1,4 @@
1
+ export interface IMigrateConfig {
2
+ mode: "nest" | "sdk";
3
+ simulate: boolean;
4
+ }
@@ -1,78 +1,35 @@
1
- import cp from "child_process";
2
- import fs from "fs";
3
1
  import typia from "typia";
4
2
 
5
3
  import { MigrateAnalyzer } from "./analyzers/MigrateAnalyzer";
6
- import { FileArchiver } from "./archivers/FileArchiver";
7
- import { TEMPLATE } from "./bundles/TEMPLATE";
4
+ import { NEST_TEMPLATE } from "./bundles/NEST_TEMPLATE";
5
+ import { SDK_TEMPLATE } from "./bundles/SDK_TEMPLATE";
8
6
  import { ApiProgrammer } from "./programmers/ApiProgrammer";
9
7
  import { NestProgrammer } from "./programmers/NestProgrammer";
10
8
  import { IMigrateFile } from "./structures/IMigrateFile";
11
- import { IMigrateProgram } from "./structures/IMigrateProgram";
12
9
  import { ISwagger } from "./structures/ISwagger";
13
10
 
14
11
  export class MigrateApplication {
15
- public readonly swagger: ISwagger;
16
- private program: IMigrateProgram | null;
17
- private files: IMigrateFile[] | null;
18
-
19
- public constructor(swagger: ISwagger) {
20
- this.swagger = typia.assert(swagger);
21
- this.program = null;
22
- this.files = null;
23
- }
24
-
25
- public analyze(): IMigrateProgram {
26
- if (this.program === null)
27
- this.program = MigrateAnalyzer.analyze(this.swagger);
28
- return this.program;
12
+ public constructor(public readonly swagger: ISwagger) {
13
+ typia.assert(swagger);
29
14
  }
30
15
 
31
- public write(): IMigrateFile[] {
32
- if (this.files === null) {
33
- this.program ??= this.analyze();
34
- this.files = [
35
- ...NestProgrammer.write(this.program),
36
- ...ApiProgrammer.write(this.program),
37
- ];
38
- }
39
- return this.files;
16
+ public nest(simulate: boolean): IMigrateFile[] {
17
+ const program = MigrateAnalyzer.analyze({
18
+ mode: "nest",
19
+ simulate,
20
+ })(this.swagger);
21
+ return [
22
+ ...NEST_TEMPLATE,
23
+ ...NestProgrammer.write(program),
24
+ ...ApiProgrammer.write(program),
25
+ ];
40
26
  }
41
27
 
42
- public async generate(output: string): Promise<void> {
43
- const files: IMigrateFile[] = this.write();
44
- const archiver = FileArchiver.archive({
45
- mkdir: fs.promises.mkdir,
46
- writeFile: (file, content) =>
47
- fs.promises.writeFile(file, content, "utf8"),
48
- })(output);
49
- try {
50
- cp.execSync(
51
- `git clone https://github.com/samchon/nestia-template "${output}"`,
52
- { stdio: "ignore" },
53
- );
54
- try {
55
- for (const path of [
56
- "/.git",
57
- "/src/api",
58
- "/src/controllers",
59
- "/src/providers",
60
- "/test/features",
61
- ])
62
- fs.rmSync(`${output}${path}`, {
63
- recursive: true,
64
- force: true,
65
- });
66
- } catch {}
67
- } catch {
68
- await archiver(TEMPLATE);
69
- }
70
- await archiver(files);
71
- }
72
- }
73
- export namespace NestiaMigrateApplication {
74
- export interface IArchiver {
75
- mkdir: (path: string) => void;
76
- writeFile: (path: string, content: string) => void;
28
+ public sdk(simulate: boolean): IMigrateFile[] {
29
+ const program = MigrateAnalyzer.analyze({
30
+ mode: "sdk",
31
+ simulate,
32
+ })(this.swagger);
33
+ return [...SDK_TEMPLATE, ...ApiProgrammer.write(program)];
77
34
  }
78
35
  }
@@ -1,9 +1,13 @@
1
+ import { IMigrateConfig } from "../IMigrateConfig";
1
2
  import { IMigrateProgram, ISwagger } from "../module";
2
3
  import { ControllerAnalyzer } from "./ControllerAnalyzer";
3
4
 
4
5
  export namespace MigrateAnalyzer {
5
- export const analyze = (swagger: ISwagger): IMigrateProgram => ({
6
- swagger,
7
- controllers: ControllerAnalyzer.analyze(swagger),
8
- });
6
+ export const analyze =
7
+ (config: IMigrateConfig) =>
8
+ (swagger: ISwagger): IMigrateProgram => ({
9
+ config,
10
+ swagger,
11
+ controllers: ControllerAnalyzer.analyze(swagger),
12
+ });
9
13
  }