@nestia/migrate 12.0.0-rc.1 → 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 (59) hide show
  1. package/LICENSE +21 -21
  2. package/lib/_virtual/_tstl.mjs +2 -2
  3. package/lib/archivers/NestiaMigrateFileArchiver2.mjs +2 -2
  4. package/lib/archivers/NestiaMigrateFileArchiver2.mjs.map +1 -1
  5. package/lib/bundles/NEST_TEMPLATE.js +47 -47
  6. package/lib/bundles/NEST_TEMPLATE.js.map +1 -1
  7. package/lib/bundles/NEST_TEMPLATE2.mjs +47 -47
  8. package/lib/bundles/NEST_TEMPLATE2.mjs.map +1 -1
  9. package/lib/bundles/SDK_TEMPLATE.js +20 -20
  10. package/lib/bundles/SDK_TEMPLATE.js.map +1 -1
  11. package/lib/bundles/SDK_TEMPLATE2.mjs +20 -20
  12. package/lib/bundles/SDK_TEMPLATE2.mjs.map +1 -1
  13. package/lib/programmers/NestiaMigrateApiProgrammer2.mjs +4 -4
  14. package/lib/programmers/NestiaMigrateApiProgrammer2.mjs.map +1 -1
  15. package/package.json +6 -6
  16. package/src/NestiaMigrateApplication.ts +196 -196
  17. package/src/analyzers/NestiaMigrateControllerAnalyzer.ts +51 -51
  18. package/src/archivers/NestiaMigrateFileArchiver.ts +28 -28
  19. package/src/bundles/NEST_TEMPLATE.ts +47 -47
  20. package/src/bundles/SDK_TEMPLATE.ts +20 -20
  21. package/src/executable/NestiaMigrateCommander.ts +115 -115
  22. package/src/executable/NestiaMigrateInquirer.ts +106 -106
  23. package/src/executable/bundle.js +323 -349
  24. package/src/executable/migrate.ts +7 -7
  25. package/src/factories/ExpressionFactory.ts +23 -23
  26. package/src/factories/FormatCheatSheet.ts +71 -71
  27. package/src/factories/IdentifierFactory.ts +84 -84
  28. package/src/factories/LiteralFactory.ts +54 -54
  29. package/src/factories/StatementFactory.ts +56 -56
  30. package/src/factories/TypeFactory.ts +27 -27
  31. package/src/factories/TypeLiteralFactory.ts +62 -62
  32. package/src/index.ts +4 -4
  33. package/src/internal/ts.ts +75 -75
  34. package/src/module.ts +6 -6
  35. package/src/programmers/NestiaMigrateApiFileProgrammer.ts +55 -55
  36. package/src/programmers/NestiaMigrateApiFunctionProgrammer.ts +358 -358
  37. package/src/programmers/NestiaMigrateApiNamespaceProgrammer.ts +511 -511
  38. package/src/programmers/NestiaMigrateApiProgrammer.ts +108 -108
  39. package/src/programmers/NestiaMigrateApiSimulationProgrammer.ts +309 -309
  40. package/src/programmers/NestiaMigrateApiStartProgrammer.ts +198 -198
  41. package/src/programmers/NestiaMigrateDtoProgrammer.ts +117 -117
  42. package/src/programmers/NestiaMigrateE2eFileProgrammer.ts +155 -155
  43. package/src/programmers/NestiaMigrateE2eProgrammer.ts +48 -48
  44. package/src/programmers/NestiaMigrateImportProgrammer.ts +119 -119
  45. package/src/programmers/NestiaMigrateNestControllerProgrammer.ts +70 -70
  46. package/src/programmers/NestiaMigrateNestMethodProgrammer.ts +402 -402
  47. package/src/programmers/NestiaMigrateNestModuleProgrammer.ts +64 -64
  48. package/src/programmers/NestiaMigrateNestProgrammer.ts +89 -89
  49. package/src/programmers/NestiaMigrateSchemaProgrammer.ts +475 -475
  50. package/src/programmers/index.ts +15 -15
  51. package/src/structures/INestiaMigrateConfig.ts +19 -19
  52. package/src/structures/INestiaMigrateContext.ts +9 -9
  53. package/src/structures/INestiaMigrateController.ts +8 -8
  54. package/src/structures/INestiaMigrateFile.ts +5 -5
  55. package/src/structures/index.ts +4 -4
  56. package/src/utils/FilePrinter.ts +44 -44
  57. package/src/utils/MapUtil.ts +13 -13
  58. package/src/utils/StringUtil.ts +109 -109
  59. package/README.md +0 -93
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/migrate",
3
- "version": "12.0.0-rc.1",
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
+ };
@@ -1,28 +1,28 @@
1
- import { VariadicSingleton } from "tstl";
2
-
3
- export namespace NestiaMigrateFileArchiver {
4
- export const archive = async (props: {
5
- mkdir: (path: string) => Promise<void>;
6
- writeFile: (path: string, content: string) => Promise<void>;
7
- root: string;
8
- files: Record<string, string>;
9
- }): Promise<void> => {
10
- const mkdir = new VariadicSingleton(
11
- async (location: string): Promise<void> => {
12
- try {
13
- await props.mkdir(`${props.root}/${location}`);
14
- } catch {}
15
- },
16
- );
17
- const iterate = async (location: string): Promise<void> => {
18
- const sequence: string[] = location
19
- .split("/")
20
- .map((_str, i, entire) => entire.slice(0, i + 1).join("/"));
21
- for (const s of sequence) await mkdir.get(s);
22
- };
23
- for (const [key, value] of Object.entries(props.files)) {
24
- await iterate(key.split("/").slice(0, -1).join("/"));
25
- await props.writeFile(`${props.root}/${key}`, value);
26
- }
27
- };
28
- }
1
+ import { VariadicSingleton } from "tstl";
2
+
3
+ export namespace NestiaMigrateFileArchiver {
4
+ export const archive = async (props: {
5
+ mkdir: (path: string) => Promise<void>;
6
+ writeFile: (path: string, content: string) => Promise<void>;
7
+ root: string;
8
+ files: Record<string, string>;
9
+ }): Promise<void> => {
10
+ const mkdir = new VariadicSingleton(
11
+ async (location: string): Promise<void> => {
12
+ try {
13
+ await props.mkdir(`${props.root}/${location}`);
14
+ } catch {}
15
+ },
16
+ );
17
+ const iterate = async (location: string): Promise<void> => {
18
+ const sequence: string[] = location
19
+ .split("/")
20
+ .map((_str, i, entire) => entire.slice(0, i + 1).join("/"));
21
+ for (const s of sequence) await mkdir.get(s);
22
+ };
23
+ for (const [key, value] of Object.entries(props.files)) {
24
+ await iterate(key.split("/").slice(0, -1).join("/"));
25
+ await props.writeFile(`${props.root}/${key}`, value);
26
+ }
27
+ };
28
+ }