@nestia/migrate 12.0.0-rc.2 → 12.0.0-rc.3

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 (66) hide show
  1. package/LICENSE +21 -21
  2. package/lib/_virtual/_tstl.mjs +2 -2
  3. package/lib/_virtual/index.mjs +2 -2
  4. package/lib/_virtual/index2.mjs +2 -2
  5. package/lib/_virtual/index3.mjs +2 -2
  6. package/lib/archivers/NestiaMigrateFileArchiver2.mjs +2 -2
  7. package/lib/archivers/NestiaMigrateFileArchiver2.mjs.map +1 -1
  8. package/lib/bundles/NEST_TEMPLATE.js +47 -47
  9. package/lib/bundles/NEST_TEMPLATE.js.map +1 -1
  10. package/lib/bundles/NEST_TEMPLATE2.mjs +47 -47
  11. package/lib/bundles/NEST_TEMPLATE2.mjs.map +1 -1
  12. package/lib/bundles/SDK_TEMPLATE.js +20 -20
  13. package/lib/bundles/SDK_TEMPLATE.js.map +1 -1
  14. package/lib/bundles/SDK_TEMPLATE2.mjs +20 -20
  15. package/lib/bundles/SDK_TEMPLATE2.mjs.map +1 -1
  16. package/lib/index2.mjs +1 -1
  17. package/lib/module2.mjs +2 -2
  18. package/lib/programmers/NestiaMigrateApiProgrammer2.mjs +4 -4
  19. package/lib/programmers/NestiaMigrateApiProgrammer2.mjs.map +1 -1
  20. package/lib/programmers/index2.mjs +1 -1
  21. package/lib/structures/index2.mjs +1 -1
  22. package/package.json +6 -6
  23. package/src/NestiaMigrateApplication.ts +196 -196
  24. package/src/analyzers/NestiaMigrateControllerAnalyzer.ts +51 -51
  25. package/src/archivers/NestiaMigrateFileArchiver.ts +28 -28
  26. package/src/bundles/NEST_TEMPLATE.ts +47 -47
  27. package/src/bundles/SDK_TEMPLATE.ts +20 -20
  28. package/src/executable/NestiaMigrateCommander.ts +115 -115
  29. package/src/executable/NestiaMigrateInquirer.ts +106 -106
  30. package/src/executable/bundle.js +323 -349
  31. package/src/executable/migrate.ts +7 -7
  32. package/src/factories/ExpressionFactory.ts +23 -23
  33. package/src/factories/FormatCheatSheet.ts +71 -71
  34. package/src/factories/IdentifierFactory.ts +84 -84
  35. package/src/factories/LiteralFactory.ts +54 -54
  36. package/src/factories/StatementFactory.ts +56 -56
  37. package/src/factories/TypeFactory.ts +27 -27
  38. package/src/factories/TypeLiteralFactory.ts +62 -62
  39. package/src/index.ts +4 -4
  40. package/src/internal/ts.ts +75 -75
  41. package/src/module.ts +6 -6
  42. package/src/programmers/NestiaMigrateApiFileProgrammer.ts +55 -55
  43. package/src/programmers/NestiaMigrateApiFunctionProgrammer.ts +358 -358
  44. package/src/programmers/NestiaMigrateApiNamespaceProgrammer.ts +511 -511
  45. package/src/programmers/NestiaMigrateApiProgrammer.ts +108 -108
  46. package/src/programmers/NestiaMigrateApiSimulationProgrammer.ts +309 -309
  47. package/src/programmers/NestiaMigrateApiStartProgrammer.ts +198 -198
  48. package/src/programmers/NestiaMigrateDtoProgrammer.ts +117 -117
  49. package/src/programmers/NestiaMigrateE2eFileProgrammer.ts +155 -155
  50. package/src/programmers/NestiaMigrateE2eProgrammer.ts +48 -48
  51. package/src/programmers/NestiaMigrateImportProgrammer.ts +119 -119
  52. package/src/programmers/NestiaMigrateNestControllerProgrammer.ts +70 -70
  53. package/src/programmers/NestiaMigrateNestMethodProgrammer.ts +402 -402
  54. package/src/programmers/NestiaMigrateNestModuleProgrammer.ts +64 -64
  55. package/src/programmers/NestiaMigrateNestProgrammer.ts +89 -89
  56. package/src/programmers/NestiaMigrateSchemaProgrammer.ts +475 -475
  57. package/src/programmers/index.ts +15 -15
  58. package/src/structures/INestiaMigrateConfig.ts +19 -19
  59. package/src/structures/INestiaMigrateContext.ts +9 -9
  60. package/src/structures/INestiaMigrateController.ts +8 -8
  61. package/src/structures/INestiaMigrateFile.ts +5 -5
  62. package/src/structures/index.ts +4 -4
  63. package/src/utils/FilePrinter.ts +44 -44
  64. package/src/utils/MapUtil.ts +13 -13
  65. package/src/utils/StringUtil.ts +109 -109
  66. package/README.md +0 -93
@@ -1,6 +1,6 @@
1
1
  import { __exports as NestiaMigrateApiProgrammer$1 } from '../_virtual/NestiaMigrateApiProgrammer.mjs';
2
- import require$$0 from '../_virtual/factory.mjs';
3
- import require$$1 from '../_virtual/_tstl.mjs';
2
+ import require$$0$1 from '../_virtual/factory.mjs';
3
+ import require$$0 from '../_virtual/_tstl.mjs';
4
4
  import '../utils/FilePrinter2.mjs';
5
5
  import './NestiaMigrateApiFileProgrammer2.mjs';
6
6
  import './NestiaMigrateDtoProgrammer2.mjs';
@@ -12,8 +12,8 @@ import { __exports as NestiaMigrateImportProgrammer } from '../_virtual/NestiaMi
12
12
 
13
13
  Object.defineProperty(NestiaMigrateApiProgrammer$1, "__esModule", { value: true });
14
14
  var NestiaMigrateApiProgrammer_2 = NestiaMigrateApiProgrammer$1.NestiaMigrateApiProgrammer = void 0;
15
- const factory_1 = require$$0;
16
- const tstl_1 = require$$1;
15
+ const factory_1 = require$$0$1;
16
+ const tstl_1 = require$$0;
17
17
  const FilePrinter_1 = FilePrinter;
18
18
  const NestiaMigrateApiFileProgrammer_1 = NestiaMigrateApiFileProgrammer;
19
19
  const NestiaMigrateDtoProgrammer_1 = NestiaMigrateDtoProgrammer;
@@ -1 +1 @@
1
- {"version":3,"file":"NestiaMigrateApiProgrammer2.mjs","sources":["NestiaMigrateApiProgrammer.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NestiaMigrateApiProgrammer = void 0;\nconst factory_1 = require(\"@ttsc/factory\");\nconst tstl_1 = require(\"tstl\");\nconst FilePrinter_1 = require(\"../utils/FilePrinter\");\nconst NestiaMigrateApiFileProgrammer_1 = require(\"./NestiaMigrateApiFileProgrammer\");\nconst NestiaMigrateDtoProgrammer_1 = require(\"./NestiaMigrateDtoProgrammer\");\nconst NestiaMigrateImportProgrammer_1 = require(\"./NestiaMigrateImportProgrammer\");\nvar NestiaMigrateApiProgrammer;\n(function (NestiaMigrateApiProgrammer) {\n NestiaMigrateApiProgrammer.write = (ctx) => {\n const dict = new tstl_1.HashMap((x) => (0, tstl_1.hash)(x.join(\".\")), (x, y) => x.length === y.length && x.join(\".\") === y.join(\".\"));\n for (const route of ctx.application.routes) {\n const namespace = route.accessor.slice(0, -1);\n let last = dict.take(namespace, () => ({\n config: ctx.config,\n components: ctx.application.document().components,\n namespace,\n routes: [],\n children: new Set(),\n }));\n last.routes.push(route);\n namespace.forEach((_s, i, array) => {\n const partial = namespace.slice(0, array.length - i - 1);\n const props = dict.take(partial, () => ({\n config: ctx.config,\n components: ctx.application.document().components,\n namespace: partial,\n children: new Set(),\n routes: [],\n }));\n props.children.add(last.namespace.at(-1));\n last = props;\n });\n }\n // DO GENERATE\n const files = Object.fromEntries(dict.toJSON().map(({ second: value }) => [\n `src/${ctx.mode === \"nest\" ? \"api/\" : \"\"}functional/${[...value.namespace, \"index.ts\"].join(\"/\")}`,\n FilePrinter_1.FilePrinter.write({\n statements: NestiaMigrateApiFileProgrammer_1.NestiaMigrateApiFileProgrammer.write(Object.assign(Object.assign({}, value), { config: ctx.config, components: ctx.application.document().components })),\n }),\n ]));\n if (ctx.mode === \"sdk\")\n for (const [key, value] of NestiaMigrateDtoProgrammer_1.NestiaMigrateDtoProgrammer.compose({\n config: ctx.config,\n components: ctx.application.document().components,\n }).entries())\n files[`src/structures/${key}.ts`] = FilePrinter_1.FilePrinter.write({\n statements: writeDtoFile(key, value),\n });\n return files;\n };\n const writeDtoFile = (key, modulo) => {\n const importer = new NestiaMigrateImportProgrammer_1.NestiaMigrateImportProgrammer();\n const statements = iterate(importer, modulo);\n if (statements.length === 0)\n return [];\n return [\n ...importer.toStatements((name) => `./${name}`, key),\n ...(importer.empty() ? [] : [FilePrinter_1.FilePrinter.newLine()]),\n ...statements,\n ];\n };\n const iterate = (importer, modulo) => {\n const output = [];\n if (modulo.programmer !== null)\n output.push(modulo.programmer(importer));\n if (modulo.children.size !== 0) {\n const internal = [];\n for (const child of modulo.children.values())\n internal.push(...iterate(importer, child));\n output.push(factory_1.factory.createModuleDeclaration([factory_1.factory.createModifier(factory_1.SyntaxKind.ExportKeyword)], factory_1.factory.createIdentifier(modulo.name), factory_1.factory.createModuleBlock(internal), factory_1.NodeFlags.Namespace));\n }\n output.push(FilePrinter_1.FilePrinter.newLine());\n return output;\n };\n})(NestiaMigrateApiProgrammer || (exports.NestiaMigrateApiProgrammer = NestiaMigrateApiProgrammer = {}));\n//# sourceMappingURL=NestiaMigrateApiProgrammer.js.map"],"names":["NestiaMigrateApiProgrammer_1","require$$2","require$$3","require$$4","require$$5"],"mappings":"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"}
1
+ {"version":3,"file":"NestiaMigrateApiProgrammer2.mjs","sources":["NestiaMigrateApiProgrammer.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NestiaMigrateApiProgrammer = void 0;\nconst factory_1 = require(\"@ttsc/factory\");\nconst tstl_1 = require(\"tstl\");\nconst FilePrinter_1 = require(\"../utils/FilePrinter\");\nconst NestiaMigrateApiFileProgrammer_1 = require(\"./NestiaMigrateApiFileProgrammer\");\nconst NestiaMigrateDtoProgrammer_1 = require(\"./NestiaMigrateDtoProgrammer\");\nconst NestiaMigrateImportProgrammer_1 = require(\"./NestiaMigrateImportProgrammer\");\nvar NestiaMigrateApiProgrammer;\n(function (NestiaMigrateApiProgrammer) {\n NestiaMigrateApiProgrammer.write = (ctx) => {\n const dict = new tstl_1.HashMap((x) => (0, tstl_1.hash)(x.join(\".\")), (x, y) => x.length === y.length && x.join(\".\") === y.join(\".\"));\n for (const route of ctx.application.routes) {\n const namespace = route.accessor.slice(0, -1);\n let last = dict.take(namespace, () => ({\n config: ctx.config,\n components: ctx.application.document().components,\n namespace,\n routes: [],\n children: new Set(),\n }));\n last.routes.push(route);\n namespace.forEach((_s, i, array) => {\n const partial = namespace.slice(0, array.length - i - 1);\n const props = dict.take(partial, () => ({\n config: ctx.config,\n components: ctx.application.document().components,\n namespace: partial,\n children: new Set(),\n routes: [],\n }));\n props.children.add(last.namespace.at(-1));\n last = props;\n });\n }\n // DO GENERATE\n const files = Object.fromEntries(dict.toJSON().map(({ second: value }) => [\n `src/${ctx.mode === \"nest\" ? \"api/\" : \"\"}functional/${[...value.namespace, \"index.ts\"].join(\"/\")}`,\n FilePrinter_1.FilePrinter.write({\n statements: NestiaMigrateApiFileProgrammer_1.NestiaMigrateApiFileProgrammer.write(Object.assign(Object.assign({}, value), { config: ctx.config, components: ctx.application.document().components })),\n }),\n ]));\n if (ctx.mode === \"sdk\")\n for (const [key, value] of NestiaMigrateDtoProgrammer_1.NestiaMigrateDtoProgrammer.compose({\n config: ctx.config,\n components: ctx.application.document().components,\n }).entries())\n files[`src/structures/${key}.ts`] = FilePrinter_1.FilePrinter.write({\n statements: writeDtoFile(key, value),\n });\n return files;\n };\n const writeDtoFile = (key, modulo) => {\n const importer = new NestiaMigrateImportProgrammer_1.NestiaMigrateImportProgrammer();\n const statements = iterate(importer, modulo);\n if (statements.length === 0)\n return [];\n return [\n ...importer.toStatements((name) => `./${name}`, key),\n ...(importer.empty() ? [] : [FilePrinter_1.FilePrinter.newLine()]),\n ...statements,\n ];\n };\n const iterate = (importer, modulo) => {\n const output = [];\n if (modulo.programmer !== null)\n output.push(modulo.programmer(importer));\n if (modulo.children.size !== 0) {\n const internal = [];\n for (const child of modulo.children.values())\n internal.push(...iterate(importer, child));\n output.push(factory_1.factory.createModuleDeclaration([factory_1.factory.createModifier(factory_1.SyntaxKind.ExportKeyword)], factory_1.factory.createIdentifier(modulo.name), factory_1.factory.createModuleBlock(internal), factory_1.NodeFlags.Namespace));\n }\n output.push(FilePrinter_1.FilePrinter.newLine());\n return output;\n };\n})(NestiaMigrateApiProgrammer || (exports.NestiaMigrateApiProgrammer = NestiaMigrateApiProgrammer = {}));\n//# sourceMappingURL=NestiaMigrateApiProgrammer.js.map"],"names":["NestiaMigrateApiProgrammer_1","require$$0","require$$1","require$$2","require$$3","require$$4","require$$5"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs } from '../_virtual/_commonjsHelpers.mjs';
2
- import { __exports as programmers } from '../_virtual/index2.mjs';
2
+ import { __exports as programmers } from '../_virtual/index3.mjs';
3
3
  import './NestiaMigrateApiFileProgrammer2.mjs';
4
4
  import './NestiaMigrateApiFunctionProgrammer2.mjs';
5
5
  import './NestiaMigrateApiNamespaceProgrammer2.mjs';
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs } from '../_virtual/_commonjsHelpers.mjs';
2
- import { __exports as structures } from '../_virtual/index.mjs';
2
+ import { __exports as structures } from '../_virtual/index2.mjs';
3
3
  import './INestiaMigrateConfig2.mjs';
4
4
  import './INestiaMigrateContext2.mjs';
5
5
  import './INestiaMigrateController2.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/migrate",
3
- "version": "12.0.0-rc.2",
3
+ "version": "12.0.0-rc.3",
4
4
  "description": "Migration program from swagger to NestJS",
5
5
  "main": "lib/index.js",
6
6
  "exports": {
@@ -44,19 +44,19 @@
44
44
  "rimraf": "^6.1.3",
45
45
  "rollup": "^4.56.0",
46
46
  "rollup-plugin-node-externals": "^8.1.2",
47
- "typescript": "7.0.1-rc"
47
+ "typescript": "^7.0.2"
48
48
  },
49
49
  "dependencies": {
50
50
  "@trivago/prettier-plugin-sort-imports": "^4.3.0",
51
- "@ttsc/factory": "^0.16.10",
52
- "@typia/interface": "^13.0.0-rc.1",
53
- "@typia/utils": "^13.0.0-rc.1",
51
+ "@ttsc/factory": "^0.18.0",
52
+ "@typia/interface": "^13.0.0",
53
+ "@typia/utils": "^13.0.0",
54
54
  "commander": "10.0.0",
55
55
  "inquirer": "8.2.5",
56
56
  "prettier": "^3.8.1",
57
57
  "prettier-plugin-jsdoc": "^1.8.0",
58
58
  "tstl": "^3.0.0",
59
- "typia": "^13.0.0-rc.1"
59
+ "typia": "^13.0.0"
60
60
  },
61
61
  "files": [
62
62
  "lib",
@@ -1,196 +1,196 @@
1
- import {
2
- IHttpMigrateApplication,
3
- IHttpMigrateRoute,
4
- OpenApi,
5
- OpenApiV3,
6
- OpenApiV3_1,
7
- OpenApiV3_2,
8
- SwaggerV2,
9
- } from "@typia/interface";
10
- import type { IValidation } from "@typia/interface";
11
- import * as typiaUtils from "@typia/utils";
12
-
13
- import { NEST_TEMPLATE } from "./bundles/NEST_TEMPLATE";
14
- import { SDK_TEMPLATE } from "./bundles/SDK_TEMPLATE";
15
- import { NestiaMigrateApiProgrammer } from "./programmers/NestiaMigrateApiProgrammer";
16
- import { NestiaMigrateApiStartProgrammer } from "./programmers/NestiaMigrateApiStartProgrammer";
17
- import { NestiaMigrateE2eProgrammer } from "./programmers/NestiaMigrateE2eProgrammer";
18
- import { NestiaMigrateNestProgrammer } from "./programmers/NestiaMigrateNestProgrammer";
19
- import { INestiaMigrateConfig } from "./structures/INestiaMigrateConfig";
20
- import { INestiaMigrateContext } from "./structures/INestiaMigrateContext";
21
-
22
- const { HttpMigration, OpenApiConverter } =
23
- (typiaUtils as { default?: typeof typiaUtils }).default ?? typiaUtils;
24
-
25
- export class NestiaMigrateApplication {
26
- private readonly data_: IHttpMigrateApplication;
27
-
28
- /* -----------------------------------------------------------
29
- CONSTRUCTORS
30
- ----------------------------------------------------------- */
31
- public constructor(public readonly document: OpenApi.IDocument) {
32
- this.data_ = HttpMigration.application(document);
33
- }
34
-
35
- public static assert(
36
- document:
37
- | SwaggerV2.IDocument
38
- | OpenApiV3.IDocument
39
- | OpenApiV3_1.IDocument
40
- | OpenApiV3_2.IDocument
41
- | OpenApi.IDocument,
42
- ): NestiaMigrateApplication {
43
- return new NestiaMigrateApplication(
44
- OpenApiConverter.upgradeDocument(document),
45
- );
46
- }
47
-
48
- public static validate(
49
- document:
50
- | SwaggerV2.IDocument
51
- | OpenApiV3.IDocument
52
- | OpenApiV3_1.IDocument
53
- | OpenApiV3_2.IDocument
54
- | OpenApi.IDocument,
55
- ): IValidation<NestiaMigrateApplication> {
56
- try {
57
- return {
58
- success: true,
59
- data: new NestiaMigrateApplication(
60
- OpenApiConverter.upgradeDocument(document),
61
- ),
62
- };
63
- } catch (exp) {
64
- const message: string = exp instanceof Error ? exp.message : String(exp);
65
- return {
66
- success: false,
67
- data: document,
68
- errors: [
69
- {
70
- path: "$input",
71
- expected:
72
- "SwaggerV2.IDocument | OpenApiV3.IDocument | OpenApiV3_1.IDocument | OpenApiV3_2.IDocument | OpenApi.IDocument",
73
- value: message,
74
- },
75
- ],
76
- };
77
- }
78
- }
79
-
80
- /* -----------------------------------------------------------
81
- ACCESSORS
82
- ----------------------------------------------------------- */
83
- public getData(): IHttpMigrateApplication {
84
- return this.data_;
85
- }
86
-
87
- public nest(config: INestiaMigrateConfig): Record<string, string> {
88
- const context: INestiaMigrateContext = createContext(
89
- "nest",
90
- this.data_,
91
- config,
92
- );
93
- const files: Record<string, string> = {
94
- ...Object.fromEntries(
95
- Object.entries(NEST_TEMPLATE).filter(
96
- ([key]) =>
97
- key.startsWith("src/api/structures") === false &&
98
- key.startsWith("src/api/functional") === false &&
99
- key.startsWith("src/api/controllers") === false &&
100
- key.startsWith("test/features") === false,
101
- ),
102
- ),
103
- ...NestiaMigrateNestProgrammer.write(context),
104
- ...NestiaMigrateApiProgrammer.write(context),
105
- ...(config.e2e ? NestiaMigrateE2eProgrammer.write(context) : {}),
106
- ...(config.keyword === false
107
- ? {
108
- "nestia.config.ts": NEST_TEMPLATE["nestia.config.ts"]!.replace(
109
- "keyword: true",
110
- "keyword: false",
111
- ),
112
- }
113
- : {}),
114
- };
115
- return config.package ? renameSlug(config.package, files) : files;
116
- }
117
-
118
- public sdk(config: INestiaMigrateConfig): Record<string, string> {
119
- const context: INestiaMigrateContext = createContext(
120
- "sdk",
121
- this.data_,
122
- config,
123
- );
124
- const files: Record<string, string> = {
125
- ...Object.fromEntries(
126
- Object.entries(SDK_TEMPLATE).filter(
127
- ([key]) =>
128
- key.startsWith("src/structures") === false &&
129
- key.startsWith("src/functional") === false &&
130
- key.startsWith("test/features") === false,
131
- ),
132
- ),
133
- ...NestiaMigrateApiProgrammer.write(context),
134
- ...NestiaMigrateApiStartProgrammer.write(context),
135
- ...(config.e2e ? NestiaMigrateE2eProgrammer.write(context) : {}),
136
- "swagger.json": JSON.stringify(this.document, null, 2),
137
- };
138
- return config.package ? renameSlug(config.package, files) : files;
139
- }
140
- }
141
-
142
- const createContext = (
143
- mode: "nest" | "sdk",
144
- application: IHttpMigrateApplication,
145
- config: INestiaMigrateConfig,
146
- ): INestiaMigrateContext => {
147
- const routes: IHttpMigrateRoute[] = escapeConflictingAccessors(
148
- application.routes
149
- .filter((r) => r.method !== "query")
150
- .map((r) => ({
151
- ...r,
152
- accessor: [...r.accessor],
153
- })),
154
- );
155
- return {
156
- mode,
157
- application: {
158
- ...application,
159
- routes,
160
- },
161
- config,
162
- };
163
- };
164
-
165
- const escapeConflictingAccessors = (
166
- routes: IHttpMigrateRoute[],
167
- ): IHttpMigrateRoute[] => {
168
- for (const route of routes)
169
- while (true) {
170
- const neighbor: IHttpMigrateRoute | undefined = routes.find(
171
- (candidate) =>
172
- candidate !== route &&
173
- candidate.accessor.length < route.accessor.length &&
174
- route.accessor
175
- .slice(0, candidate.accessor.length)
176
- .every((value, index) => value === candidate.accessor[index]),
177
- );
178
- if (neighbor === undefined) break;
179
-
180
- const index: number = neighbor.accessor.length - 1;
181
- route.accessor[index] = `_${route.accessor[index]}`;
182
- }
183
- return routes;
184
- };
185
-
186
- const renameSlug = (
187
- slug: string,
188
- files: Record<string, string>,
189
- ): Record<string, string> => {
190
- return Object.fromEntries(
191
- Object.entries(files).map(([key, value]) => [
192
- key,
193
- value.split(`@ORGANIZATION/PROJECT`).join(slug),
194
- ]),
195
- );
196
- };
1
+ import {
2
+ IHttpMigrateApplication,
3
+ IHttpMigrateRoute,
4
+ OpenApi,
5
+ OpenApiV3,
6
+ OpenApiV3_1,
7
+ OpenApiV3_2,
8
+ SwaggerV2,
9
+ } from "@typia/interface";
10
+ import type { IValidation } from "@typia/interface";
11
+ import * as typiaUtils from "@typia/utils";
12
+
13
+ import { NEST_TEMPLATE } from "./bundles/NEST_TEMPLATE";
14
+ import { SDK_TEMPLATE } from "./bundles/SDK_TEMPLATE";
15
+ import { NestiaMigrateApiProgrammer } from "./programmers/NestiaMigrateApiProgrammer";
16
+ import { NestiaMigrateApiStartProgrammer } from "./programmers/NestiaMigrateApiStartProgrammer";
17
+ import { NestiaMigrateE2eProgrammer } from "./programmers/NestiaMigrateE2eProgrammer";
18
+ import { NestiaMigrateNestProgrammer } from "./programmers/NestiaMigrateNestProgrammer";
19
+ import { INestiaMigrateConfig } from "./structures/INestiaMigrateConfig";
20
+ import { INestiaMigrateContext } from "./structures/INestiaMigrateContext";
21
+
22
+ const { HttpMigration, OpenApiConverter } =
23
+ (typiaUtils as { default?: typeof typiaUtils }).default ?? typiaUtils;
24
+
25
+ export class NestiaMigrateApplication {
26
+ private readonly data_: IHttpMigrateApplication;
27
+
28
+ /* -----------------------------------------------------------
29
+ CONSTRUCTORS
30
+ ----------------------------------------------------------- */
31
+ public constructor(public readonly document: OpenApi.IDocument) {
32
+ this.data_ = HttpMigration.application(document);
33
+ }
34
+
35
+ public static assert(
36
+ document:
37
+ | SwaggerV2.IDocument
38
+ | OpenApiV3.IDocument
39
+ | OpenApiV3_1.IDocument
40
+ | OpenApiV3_2.IDocument
41
+ | OpenApi.IDocument,
42
+ ): NestiaMigrateApplication {
43
+ return new NestiaMigrateApplication(
44
+ OpenApiConverter.upgradeDocument(document),
45
+ );
46
+ }
47
+
48
+ public static validate(
49
+ document:
50
+ | SwaggerV2.IDocument
51
+ | OpenApiV3.IDocument
52
+ | OpenApiV3_1.IDocument
53
+ | OpenApiV3_2.IDocument
54
+ | OpenApi.IDocument,
55
+ ): IValidation<NestiaMigrateApplication> {
56
+ try {
57
+ return {
58
+ success: true,
59
+ data: new NestiaMigrateApplication(
60
+ OpenApiConverter.upgradeDocument(document),
61
+ ),
62
+ };
63
+ } catch (exp) {
64
+ const message: string = exp instanceof Error ? exp.message : String(exp);
65
+ return {
66
+ success: false,
67
+ data: document,
68
+ errors: [
69
+ {
70
+ path: "$input",
71
+ expected:
72
+ "SwaggerV2.IDocument | OpenApiV3.IDocument | OpenApiV3_1.IDocument | OpenApiV3_2.IDocument | OpenApi.IDocument",
73
+ value: message,
74
+ },
75
+ ],
76
+ };
77
+ }
78
+ }
79
+
80
+ /* -----------------------------------------------------------
81
+ ACCESSORS
82
+ ----------------------------------------------------------- */
83
+ public getData(): IHttpMigrateApplication {
84
+ return this.data_;
85
+ }
86
+
87
+ public nest(config: INestiaMigrateConfig): Record<string, string> {
88
+ const context: INestiaMigrateContext = createContext(
89
+ "nest",
90
+ this.data_,
91
+ config,
92
+ );
93
+ const files: Record<string, string> = {
94
+ ...Object.fromEntries(
95
+ Object.entries(NEST_TEMPLATE).filter(
96
+ ([key]) =>
97
+ key.startsWith("src/api/structures") === false &&
98
+ key.startsWith("src/api/functional") === false &&
99
+ key.startsWith("src/api/controllers") === false &&
100
+ key.startsWith("test/features") === false,
101
+ ),
102
+ ),
103
+ ...NestiaMigrateNestProgrammer.write(context),
104
+ ...NestiaMigrateApiProgrammer.write(context),
105
+ ...(config.e2e ? NestiaMigrateE2eProgrammer.write(context) : {}),
106
+ ...(config.keyword === false
107
+ ? {
108
+ "nestia.config.ts": NEST_TEMPLATE["nestia.config.ts"]!.replace(
109
+ "keyword: true",
110
+ "keyword: false",
111
+ ),
112
+ }
113
+ : {}),
114
+ };
115
+ return config.package ? renameSlug(config.package, files) : files;
116
+ }
117
+
118
+ public sdk(config: INestiaMigrateConfig): Record<string, string> {
119
+ const context: INestiaMigrateContext = createContext(
120
+ "sdk",
121
+ this.data_,
122
+ config,
123
+ );
124
+ const files: Record<string, string> = {
125
+ ...Object.fromEntries(
126
+ Object.entries(SDK_TEMPLATE).filter(
127
+ ([key]) =>
128
+ key.startsWith("src/structures") === false &&
129
+ key.startsWith("src/functional") === false &&
130
+ key.startsWith("test/features") === false,
131
+ ),
132
+ ),
133
+ ...NestiaMigrateApiProgrammer.write(context),
134
+ ...NestiaMigrateApiStartProgrammer.write(context),
135
+ ...(config.e2e ? NestiaMigrateE2eProgrammer.write(context) : {}),
136
+ "swagger.json": JSON.stringify(this.document, null, 2),
137
+ };
138
+ return config.package ? renameSlug(config.package, files) : files;
139
+ }
140
+ }
141
+
142
+ const createContext = (
143
+ mode: "nest" | "sdk",
144
+ application: IHttpMigrateApplication,
145
+ config: INestiaMigrateConfig,
146
+ ): INestiaMigrateContext => {
147
+ const routes: IHttpMigrateRoute[] = escapeConflictingAccessors(
148
+ application.routes
149
+ .filter((r) => r.method !== "query")
150
+ .map((r) => ({
151
+ ...r,
152
+ accessor: [...r.accessor],
153
+ })),
154
+ );
155
+ return {
156
+ mode,
157
+ application: {
158
+ ...application,
159
+ routes,
160
+ },
161
+ config,
162
+ };
163
+ };
164
+
165
+ const escapeConflictingAccessors = (
166
+ routes: IHttpMigrateRoute[],
167
+ ): IHttpMigrateRoute[] => {
168
+ for (const route of routes)
169
+ while (true) {
170
+ const neighbor: IHttpMigrateRoute | undefined = routes.find(
171
+ (candidate) =>
172
+ candidate !== route &&
173
+ candidate.accessor.length < route.accessor.length &&
174
+ route.accessor
175
+ .slice(0, candidate.accessor.length)
176
+ .every((value, index) => value === candidate.accessor[index]),
177
+ );
178
+ if (neighbor === undefined) break;
179
+
180
+ const index: number = neighbor.accessor.length - 1;
181
+ route.accessor[index] = `_${route.accessor[index]}`;
182
+ }
183
+ return routes;
184
+ };
185
+
186
+ const renameSlug = (
187
+ slug: string,
188
+ files: Record<string, string>,
189
+ ): Record<string, string> => {
190
+ return Object.fromEntries(
191
+ Object.entries(files).map(([key, value]) => [
192
+ key,
193
+ value.split(`@ORGANIZATION/PROJECT`).join(slug),
194
+ ]),
195
+ );
196
+ };
@@ -1,51 +1,51 @@
1
- import { IHttpMigrateRoute } from "@typia/interface";
2
-
3
- import { INestiaMigrateController } from "../structures/INestiaMigrateController";
4
- import { MapUtil } from "../utils/MapUtil";
5
- import { StringUtil } from "../utils/StringUtil";
6
-
7
- export namespace NestiaMigrateControllerAnalyzer {
8
- export const analyze = (
9
- routes: IHttpMigrateRoute[],
10
- ): INestiaMigrateController[] => {
11
- const collection: Map<string, INestiaMigrateController> = new Map();
12
- for (const r of routes) {
13
- const name: string =
14
- r.operation()["x-samchon-controller"] ??
15
- (r.accessor.length <= 1
16
- ? "__App"
17
- : r.accessor.slice(0, -1).map(StringUtil.capitalize).join("")) +
18
- "Controller";
19
- MapUtil.take(collection)(name)(() => ({
20
- name,
21
- path: "@lazy",
22
- location: "@lazy",
23
- routes: [],
24
- })).routes.push(r);
25
- }
26
-
27
- const controllers: INestiaMigrateController[] = [...collection.values()];
28
- for (const col of controllers) {
29
- const splitPath = (r: IHttpMigrateRoute): string[] =>
30
- r.emendedPath.split("/");
31
- const splitLocation = (r: IHttpMigrateRoute): string[] =>
32
- splitPath(r).filter((s) => s.length !== 0 && s[0] !== ":");
33
-
34
- const minPath: string[] = splitPath(col.routes[0]!);
35
- const minLocation: string[] = splitLocation(col.routes[0]!);
36
- for (const r of col.routes.slice(1)) {
37
- minPath.splice(getSplitIndex(minPath, splitPath(r)));
38
- minLocation.splice(getSplitIndex(minLocation, splitLocation(r)));
39
- }
40
- col.path = minPath.join("/");
41
- col.location = ["src", "controllers", ...minLocation].join("/");
42
- }
43
- return controllers;
44
- };
45
- }
46
-
47
- const getSplitIndex = (x: string[], y: string[]) => {
48
- const n: number = Math.min(x.length, y.length);
49
- for (let i: number = 0; i < n; ++i) if (x[i] !== y[i]) return i;
50
- return n;
51
- };
1
+ import { IHttpMigrateRoute } from "@typia/interface";
2
+
3
+ import { INestiaMigrateController } from "../structures/INestiaMigrateController";
4
+ import { MapUtil } from "../utils/MapUtil";
5
+ import { StringUtil } from "../utils/StringUtil";
6
+
7
+ export namespace NestiaMigrateControllerAnalyzer {
8
+ export const analyze = (
9
+ routes: IHttpMigrateRoute[],
10
+ ): INestiaMigrateController[] => {
11
+ const collection: Map<string, INestiaMigrateController> = new Map();
12
+ for (const r of routes) {
13
+ const name: string =
14
+ r.operation()["x-samchon-controller"] ??
15
+ (r.accessor.length <= 1
16
+ ? "__App"
17
+ : r.accessor.slice(0, -1).map(StringUtil.capitalize).join("")) +
18
+ "Controller";
19
+ MapUtil.take(collection)(name)(() => ({
20
+ name,
21
+ path: "@lazy",
22
+ location: "@lazy",
23
+ routes: [],
24
+ })).routes.push(r);
25
+ }
26
+
27
+ const controllers: INestiaMigrateController[] = [...collection.values()];
28
+ for (const col of controllers) {
29
+ const splitPath = (r: IHttpMigrateRoute): string[] =>
30
+ r.emendedPath.split("/");
31
+ const splitLocation = (r: IHttpMigrateRoute): string[] =>
32
+ splitPath(r).filter((s) => s.length !== 0 && s[0] !== ":");
33
+
34
+ const minPath: string[] = splitPath(col.routes[0]!);
35
+ const minLocation: string[] = splitLocation(col.routes[0]!);
36
+ for (const r of col.routes.slice(1)) {
37
+ minPath.splice(getSplitIndex(minPath, splitPath(r)));
38
+ minLocation.splice(getSplitIndex(minLocation, splitLocation(r)));
39
+ }
40
+ col.path = minPath.join("/");
41
+ col.location = ["src", "controllers", ...minLocation].join("/");
42
+ }
43
+ return controllers;
44
+ };
45
+ }
46
+
47
+ const getSplitIndex = (x: string[], y: string[]) => {
48
+ const n: number = Math.min(x.length, y.length);
49
+ for (let i: number = 0; i < n; ++i) if (x[i] !== y[i]) return i;
50
+ return n;
51
+ };