@nestia/migrate 6.0.5 → 7.0.0-dev.20250605

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 (218) hide show
  1. package/README.md +92 -92
  2. package/lib/NestiaMigrateApplication.d.ts +23 -0
  3. package/lib/NestiaMigrateApplication.js +17522 -0
  4. package/lib/NestiaMigrateApplication.js.map +1 -0
  5. package/lib/analyzers/NestiaMigrateControllerAnalyzer.d.ts +5 -0
  6. package/lib/analyzers/{MigrateControllerAnalyzer.js → NestiaMigrateControllerAnalyzer.js} +10 -10
  7. package/lib/analyzers/NestiaMigrateControllerAnalyzer.js.map +1 -0
  8. package/lib/archivers/NestiaMigrateFileArchiver.d.ts +8 -0
  9. package/lib/archivers/NestiaMigrateFileArchiver.js +36 -0
  10. package/lib/archivers/NestiaMigrateFileArchiver.js.map +1 -0
  11. package/lib/bundles/NEST_TEMPLATE.d.ts +1 -5
  12. package/lib/bundles/NEST_TEMPLATE.js +50 -242
  13. package/lib/bundles/NEST_TEMPLATE.js.map +1 -1
  14. package/lib/bundles/SDK_TEMPLATE.d.ts +1 -5
  15. package/lib/bundles/SDK_TEMPLATE.js +23 -107
  16. package/lib/bundles/SDK_TEMPLATE.js.map +1 -1
  17. package/lib/{internal/MigrateCommander.d.ts → executable/NestiaMigrateCommander.d.ts} +1 -1
  18. package/lib/{internal/MigrateCommander.js → executable/NestiaMigrateCommander.js} +23 -21
  19. package/lib/executable/NestiaMigrateCommander.js.map +1 -0
  20. package/lib/{internal/MigrateInquirer.d.ts → executable/NestiaMigrateInquirer.d.ts} +2 -1
  21. package/lib/{internal/MigrateInquirer.js → executable/NestiaMigrateInquirer.js} +22 -9
  22. package/lib/executable/NestiaMigrateInquirer.js.map +1 -0
  23. package/lib/executable/migrate.js +2 -2
  24. package/lib/executable/migrate.js.map +1 -1
  25. package/lib/index.mjs +10042 -694
  26. package/lib/index.mjs.map +1 -1
  27. package/lib/module.d.ts +2 -5
  28. package/lib/module.js +2 -5
  29. package/lib/module.js.map +1 -1
  30. package/lib/programmers/NestiaMigrateApiFileProgrammer.d.ts +13 -0
  31. package/lib/programmers/NestiaMigrateApiFileProgrammer.js +40 -0
  32. package/lib/programmers/NestiaMigrateApiFileProgrammer.js.map +1 -0
  33. package/lib/programmers/NestiaMigrateApiFunctionProgrammer.d.ts +14 -0
  34. package/lib/programmers/NestiaMigrateApiFunctionProgrammer.js +132 -0
  35. package/lib/programmers/NestiaMigrateApiFunctionProgrammer.js.map +1 -0
  36. package/lib/programmers/NestiaMigrateApiNamespaceProgrammer.d.ts +14 -0
  37. package/lib/programmers/NestiaMigrateApiNamespaceProgrammer.js +237 -0
  38. package/lib/programmers/NestiaMigrateApiNamespaceProgrammer.js.map +1 -0
  39. package/lib/programmers/NestiaMigrateApiProgrammer.d.ts +4 -0
  40. package/lib/programmers/{MigrateApiProgrammer.js → NestiaMigrateApiProgrammer.js} +31 -30
  41. package/lib/programmers/NestiaMigrateApiProgrammer.js.map +1 -0
  42. package/lib/programmers/NestiaMigrateApiSimulationProgrammer.d.ts +14 -0
  43. package/lib/programmers/{MigrateApiSimulationProgrammer.js → NestiaMigrateApiSimulationProgrammer.js} +54 -36
  44. package/lib/programmers/NestiaMigrateApiSimulationProgrammer.js.map +1 -0
  45. package/lib/programmers/NestiaMigrateApiStartProgrammer.d.ts +4 -0
  46. package/lib/programmers/{MigrateApiStartProgrammer.js → NestiaMigrateApiStartProgrammer.js} +23 -20
  47. package/lib/programmers/NestiaMigrateApiStartProgrammer.js.map +1 -0
  48. package/lib/programmers/NestiaMigrateDtoProgrammer.d.ts +15 -0
  49. package/lib/programmers/{MigrateDtoProgrammer.js → NestiaMigrateDtoProgrammer.js} +21 -12
  50. package/lib/programmers/NestiaMigrateDtoProgrammer.js.map +1 -0
  51. package/lib/programmers/NestiaMigrateE2eFileProgrammer.d.ts +14 -0
  52. package/lib/programmers/NestiaMigrateE2eFileProgrammer.js +81 -0
  53. package/lib/programmers/NestiaMigrateE2eFileProgrammer.js.map +1 -0
  54. package/lib/programmers/NestiaMigrateE2eProgrammer.d.ts +4 -0
  55. package/lib/programmers/NestiaMigrateE2eProgrammer.js +32 -0
  56. package/lib/programmers/NestiaMigrateE2eProgrammer.js.map +1 -0
  57. package/lib/programmers/{MigrateImportProgrammer.d.ts → NestiaMigrateImportProgrammer.d.ts} +1 -1
  58. package/lib/programmers/{MigrateImportProgrammer.js → NestiaMigrateImportProgrammer.js} +4 -4
  59. package/lib/programmers/NestiaMigrateImportProgrammer.js.map +1 -0
  60. package/lib/programmers/NestiaMigrateNestControllerProgrammer.d.ts +12 -0
  61. package/lib/programmers/{MigrateNestControllerProgrammer.js → NestiaMigrateNestControllerProgrammer.js} +20 -13
  62. package/lib/programmers/NestiaMigrateNestControllerProgrammer.js.map +1 -0
  63. package/lib/programmers/NestiaMigrateNestMethodProgrammer.d.ts +15 -0
  64. package/lib/programmers/{MigrateNestMethodProgrammer.js → NestiaMigrateNestMethodProgrammer.js} +85 -69
  65. package/lib/programmers/NestiaMigrateNestMethodProgrammer.js.map +1 -0
  66. package/lib/programmers/NestiaMigrateNestModuleProgrammer.d.ts +5 -0
  67. package/lib/programmers/{MigrateNestModuleProgrammer.js → NestiaMigrateNestModuleProgrammer.js} +6 -6
  68. package/lib/programmers/NestiaMigrateNestModuleProgrammer.js.map +1 -0
  69. package/lib/programmers/NestiaMigrateNestProgrammer.d.ts +4 -0
  70. package/lib/programmers/NestiaMigrateNestProgrammer.js +65 -0
  71. package/lib/programmers/NestiaMigrateNestProgrammer.js.map +1 -0
  72. package/lib/programmers/NestiaMigrateSchemaProgrammer.d.ts +10 -0
  73. package/lib/programmers/NestiaMigrateSchemaProgrammer.js +414 -0
  74. package/lib/programmers/NestiaMigrateSchemaProgrammer.js.map +1 -0
  75. package/lib/structures/INestiaMigrateConfig.d.ts +10 -0
  76. package/lib/structures/{IHttpMigrateFile.js → INestiaMigrateConfig.js} +1 -1
  77. package/lib/structures/INestiaMigrateConfig.js.map +1 -0
  78. package/lib/structures/INestiaMigrateContext.d.ts +9 -0
  79. package/lib/structures/INestiaMigrateContext.js +3 -0
  80. package/lib/structures/INestiaMigrateContext.js.map +1 -0
  81. package/lib/structures/INestiaMigrateController.d.ts +7 -0
  82. package/lib/structures/{IHttpMigrateController.js → INestiaMigrateController.js} +1 -1
  83. package/lib/structures/INestiaMigrateController.js.map +1 -0
  84. package/lib/structures/{IHttpMigrateDto.d.ts → INestiaMigrateDto.d.ts} +2 -2
  85. package/lib/structures/{IHttpMigrateRoute.js → INestiaMigrateDto.js} +1 -1
  86. package/lib/structures/INestiaMigrateDto.js.map +1 -0
  87. package/lib/structures/{IHttpMigrateFile.d.ts → INestiaMigrateFile.d.ts} +1 -1
  88. package/lib/structures/{IHttpMigrateDto.js → INestiaMigrateFile.js} +1 -1
  89. package/lib/structures/INestiaMigrateFile.js.map +1 -0
  90. package/lib/structures/INestiaMigrateProgram.d.ts +9 -0
  91. package/lib/structures/INestiaMigrateProgram.js +3 -0
  92. package/lib/structures/INestiaMigrateProgram.js.map +1 -0
  93. package/lib/structures/INestiaMigrateSchema.d.ts +4 -0
  94. package/lib/structures/{IHttpMigrateProgram.js → INestiaMigrateSchema.js} +1 -1
  95. package/lib/structures/INestiaMigrateSchema.js.map +1 -0
  96. package/lib/utils/openapi-down-convert/converter.js +2 -2
  97. package/package.json +8 -8
  98. package/src/NestiaMigrateApplication.ts +144 -0
  99. package/src/analyzers/{MigrateControllerAnalyzer.ts → NestiaMigrateControllerAnalyzer.ts} +51 -51
  100. package/src/archivers/NestiaMigrateFileArchiver.ts +28 -0
  101. package/src/bundles/NEST_TEMPLATE.ts +50 -242
  102. package/src/bundles/SDK_TEMPLATE.ts +23 -107
  103. package/src/{internal/MigrateCommander.ts → executable/NestiaMigrateCommander.ts} +98 -94
  104. package/src/{internal/MigrateInquirer.ts → executable/NestiaMigrateInquirer.ts} +106 -89
  105. package/src/executable/bundle.js +129 -127
  106. package/src/executable/migrate.ts +7 -7
  107. package/src/factories/TypeLiteralFactory.ts +57 -57
  108. package/src/index.ts +4 -4
  109. package/src/module.ts +2 -8
  110. package/src/programmers/NestiaMigrateApiFileProgrammer.ts +55 -0
  111. package/src/programmers/NestiaMigrateApiFunctionProgrammer.ts +256 -0
  112. package/src/programmers/NestiaMigrateApiNamespaceProgrammer.ts +524 -0
  113. package/src/programmers/NestiaMigrateApiProgrammer.ts +107 -0
  114. package/src/programmers/NestiaMigrateApiSimulationProgrammer.ts +340 -0
  115. package/src/programmers/NestiaMigrateApiStartProgrammer.ts +198 -0
  116. package/src/programmers/NestiaMigrateDtoProgrammer.ts +101 -0
  117. package/src/programmers/NestiaMigrateE2eFileProgrammer.ts +153 -0
  118. package/src/programmers/NestiaMigrateE2eProgrammer.ts +46 -0
  119. package/src/programmers/{MigrateImportProgrammer.ts → NestiaMigrateImportProgrammer.ts} +118 -118
  120. package/src/programmers/NestiaMigrateNestControllerProgrammer.ts +66 -0
  121. package/src/programmers/NestiaMigrateNestMethodProgrammer.ts +406 -0
  122. package/src/programmers/{MigrateNestModuleProgrammer.ts → NestiaMigrateNestModuleProgrammer.ts} +65 -65
  123. package/src/programmers/NestiaMigrateNestProgrammer.ts +88 -0
  124. package/src/programmers/NestiaMigrateSchemaProgrammer.ts +475 -0
  125. package/src/structures/INestiaMigrateConfig.ts +10 -0
  126. package/src/structures/INestiaMigrateContext.ts +15 -0
  127. package/src/structures/INestiaMigrateController.ts +8 -0
  128. package/src/structures/{IHttpMigrateDto.ts → INestiaMigrateDto.ts} +8 -8
  129. package/src/structures/{IHttpMigrateFile.ts → INestiaMigrateFile.ts} +5 -5
  130. package/src/structures/INestiaMigrateProgram.ts +11 -0
  131. package/src/structures/INestiaMigrateSchema.ts +4 -0
  132. package/src/utils/FilePrinter.ts +38 -38
  133. package/src/utils/MapUtil.ts +13 -13
  134. package/src/utils/OpenApiTypeChecker.ts +73 -73
  135. package/src/utils/SetupWizard.ts +12 -12
  136. package/src/utils/StringUtil.ts +113 -113
  137. package/src/utils/openapi-down-convert/RefVisitor.ts +139 -139
  138. package/src/utils/openapi-down-convert/converter.ts +527 -527
  139. package/lib/MigrateApplication.d.ts +0 -28
  140. package/lib/MigrateApplication.js +0 -7994
  141. package/lib/MigrateApplication.js.map +0 -1
  142. package/lib/analyzers/MigrateApplicationAnalyzer.d.ts +0 -4
  143. package/lib/analyzers/MigrateApplicationAnalyzer.js +0 -12
  144. package/lib/analyzers/MigrateApplicationAnalyzer.js.map +0 -1
  145. package/lib/analyzers/MigrateControllerAnalyzer.d.ts +0 -7
  146. package/lib/analyzers/MigrateControllerAnalyzer.js.map +0 -1
  147. package/lib/archivers/MigrateFileArchiver.d.ts +0 -8
  148. package/lib/archivers/MigrateFileArchiver.js +0 -35
  149. package/lib/archivers/MigrateFileArchiver.js.map +0 -1
  150. package/lib/internal/MigrateCommander.js.map +0 -1
  151. package/lib/internal/MigrateInquirer.js.map +0 -1
  152. package/lib/programmers/MigrateApiFileProgrammer.d.ts +0 -11
  153. package/lib/programmers/MigrateApiFileProgrammer.js +0 -30
  154. package/lib/programmers/MigrateApiFileProgrammer.js.map +0 -1
  155. package/lib/programmers/MigrateApiFunctionProgrammer.d.ts +0 -9
  156. package/lib/programmers/MigrateApiFunctionProgrammer.js +0 -102
  157. package/lib/programmers/MigrateApiFunctionProgrammer.js.map +0 -1
  158. package/lib/programmers/MigrateApiNamespaceProgrammer.d.ts +0 -9
  159. package/lib/programmers/MigrateApiNamespaceProgrammer.js +0 -142
  160. package/lib/programmers/MigrateApiNamespaceProgrammer.js.map +0 -1
  161. package/lib/programmers/MigrateApiProgrammer.d.ts +0 -5
  162. package/lib/programmers/MigrateApiProgrammer.js.map +0 -1
  163. package/lib/programmers/MigrateApiSimulationProgrammer.d.ts +0 -8
  164. package/lib/programmers/MigrateApiSimulationProgrammer.js.map +0 -1
  165. package/lib/programmers/MigrateApiStartProgrammer.d.ts +0 -5
  166. package/lib/programmers/MigrateApiStartProgrammer.js.map +0 -1
  167. package/lib/programmers/MigrateDtoProgrammer.d.ts +0 -11
  168. package/lib/programmers/MigrateDtoProgrammer.js.map +0 -1
  169. package/lib/programmers/MigrateE2eFileProgrammer.d.ts +0 -8
  170. package/lib/programmers/MigrateE2eFileProgrammer.js +0 -45
  171. package/lib/programmers/MigrateE2eFileProgrammer.js.map +0 -1
  172. package/lib/programmers/MigrateE2eProgrammer.d.ts +0 -5
  173. package/lib/programmers/MigrateE2eProgrammer.js +0 -25
  174. package/lib/programmers/MigrateE2eProgrammer.js.map +0 -1
  175. package/lib/programmers/MigrateImportProgrammer.js.map +0 -1
  176. package/lib/programmers/MigrateNestControllerProgrammer.d.ts +0 -7
  177. package/lib/programmers/MigrateNestControllerProgrammer.js.map +0 -1
  178. package/lib/programmers/MigrateNestMethodProgrammer.d.ts +0 -9
  179. package/lib/programmers/MigrateNestMethodProgrammer.js.map +0 -1
  180. package/lib/programmers/MigrateNestModuleProgrammer.d.ts +0 -5
  181. package/lib/programmers/MigrateNestModuleProgrammer.js.map +0 -1
  182. package/lib/programmers/MigrateNestProgrammer.d.ts +0 -5
  183. package/lib/programmers/MigrateNestProgrammer.js +0 -69
  184. package/lib/programmers/MigrateNestProgrammer.js.map +0 -1
  185. package/lib/programmers/MigrateSchemaProgrammer.d.ts +0 -6
  186. package/lib/programmers/MigrateSchemaProgrammer.js +0 -335
  187. package/lib/programmers/MigrateSchemaProgrammer.js.map +0 -1
  188. package/lib/structures/IHttpMigrateController.d.ts +0 -7
  189. package/lib/structures/IHttpMigrateController.js.map +0 -1
  190. package/lib/structures/IHttpMigrateDto.js.map +0 -1
  191. package/lib/structures/IHttpMigrateFile.js.map +0 -1
  192. package/lib/structures/IHttpMigrateProgram.d.ts +0 -33
  193. package/lib/structures/IHttpMigrateProgram.js.map +0 -1
  194. package/lib/structures/IHttpMigrateRoute.d.ts +0 -1
  195. package/lib/structures/IHttpMigrateRoute.js.map +0 -1
  196. package/lib/structures/IHttpMigrateSchema.d.ts +0 -4
  197. package/lib/structures/IHttpMigrateSchema.js +0 -3
  198. package/lib/structures/IHttpMigrateSchema.js.map +0 -1
  199. package/src/MigrateApplication.ts +0 -124
  200. package/src/analyzers/MigrateApplicationAnalyzer.ts +0 -18
  201. package/src/archivers/MigrateFileArchiver.ts +0 -38
  202. package/src/programmers/MigrateApiFileProgrammer.ts +0 -51
  203. package/src/programmers/MigrateApiFunctionProgrammer.ts +0 -213
  204. package/src/programmers/MigrateApiNamespaceProgrammer.ts +0 -418
  205. package/src/programmers/MigrateApiProgrammer.ts +0 -104
  206. package/src/programmers/MigrateApiSimulationProgrammer.ts +0 -324
  207. package/src/programmers/MigrateApiStartProgrammer.ts +0 -194
  208. package/src/programmers/MigrateDtoProgrammer.ts +0 -87
  209. package/src/programmers/MigrateE2eFileProgrammer.ts +0 -117
  210. package/src/programmers/MigrateE2eProgrammer.ts +0 -34
  211. package/src/programmers/MigrateNestControllerProgrammer.ts +0 -57
  212. package/src/programmers/MigrateNestMethodProgrammer.ts +0 -397
  213. package/src/programmers/MigrateNestProgrammer.ts +0 -82
  214. package/src/programmers/MigrateSchemaProgrammer.ts +0 -378
  215. package/src/structures/IHttpMigrateController.ts +0 -8
  216. package/src/structures/IHttpMigrateProgram.ts +0 -35
  217. package/src/structures/IHttpMigrateRoute.ts +0 -1
  218. package/src/structures/IHttpMigrateSchema.ts +0 -4
@@ -0,0 +1,144 @@
1
+ import {
2
+ HttpMigration,
3
+ IHttpMigrateApplication,
4
+ OpenApi,
5
+ OpenApiV3,
6
+ OpenApiV3_1,
7
+ SwaggerV2,
8
+ } from "@samchon/openapi";
9
+ import typia, { IValidation } from "typia";
10
+
11
+ import { NEST_TEMPLATE } from "./bundles/NEST_TEMPLATE";
12
+ import { SDK_TEMPLATE } from "./bundles/SDK_TEMPLATE";
13
+ import { NestiaMigrateApiProgrammer } from "./programmers/NestiaMigrateApiProgrammer";
14
+ import { NestiaMigrateApiStartProgrammer } from "./programmers/NestiaMigrateApiStartProgrammer";
15
+ import { NestiaMigrateE2eProgrammer } from "./programmers/NestiaMigrateE2eProgrammer";
16
+ import { NestiaMigrateNestProgrammer } from "./programmers/NestiaMigrateNestProgrammer";
17
+ import { INestiaMigrateConfig } from "./structures/INestiaMigrateConfig";
18
+ import { INestiaMigrateContext } from "./structures/INestiaMigrateContext";
19
+ import { INestiaMigrateFile } from "./structures/INestiaMigrateFile";
20
+
21
+ export class NestiaMigrateApplication {
22
+ private readonly application_: IHttpMigrateApplication;
23
+
24
+ public constructor(public readonly document: OpenApi.IDocument) {
25
+ this.application_ = HttpMigration.application(document);
26
+ }
27
+
28
+ public static assert(
29
+ document:
30
+ | SwaggerV2.IDocument
31
+ | OpenApiV3.IDocument
32
+ | OpenApiV3_1.IDocument
33
+ | OpenApi.IDocument,
34
+ ): NestiaMigrateApplication {
35
+ return new NestiaMigrateApplication(
36
+ OpenApi.convert(typia.assert(document)),
37
+ );
38
+ }
39
+
40
+ public static validate(
41
+ document:
42
+ | SwaggerV2.IDocument
43
+ | OpenApiV3.IDocument
44
+ | OpenApiV3_1.IDocument
45
+ | OpenApi.IDocument,
46
+ ): IValidation<NestiaMigrateApplication> {
47
+ const result: IValidation<
48
+ | SwaggerV2.IDocument
49
+ | OpenApiV3.IDocument
50
+ | OpenApiV3_1.IDocument
51
+ | OpenApi.IDocument
52
+ > = typia.validate(document);
53
+ if (result.success === false) return result;
54
+ return {
55
+ success: true,
56
+ data: new NestiaMigrateApplication(OpenApi.convert(document)),
57
+ };
58
+ }
59
+
60
+ public getErrors(): IHttpMigrateApplication.IError[] {
61
+ return this.application_.errors;
62
+ }
63
+
64
+ public nest(config: INestiaMigrateConfig): Record<string, string> {
65
+ const context: INestiaMigrateContext = createContext(
66
+ "nest",
67
+ this.document,
68
+ config,
69
+ );
70
+ const files: Record<string, string> = {
71
+ ...Object.fromEntries(
72
+ Object.entries(NEST_TEMPLATE).filter(
73
+ ([key]) =>
74
+ key.startsWith("src/api/structures") === false &&
75
+ key.startsWith("src/api/functional") === false &&
76
+ key.startsWith("src/api/controllers") === false &&
77
+ key.startsWith("test/features") === false,
78
+ ),
79
+ ),
80
+ ...NestiaMigrateNestProgrammer.write(context),
81
+ ...NestiaMigrateApiProgrammer.write(context),
82
+ ...(config.e2e ? NestiaMigrateE2eProgrammer.write(context) : {}),
83
+ };
84
+ return config.package ? this.rename(config.package, files) : files;
85
+ }
86
+
87
+ public sdk(config: INestiaMigrateConfig): Record<string, string> {
88
+ const context: INestiaMigrateContext = createContext(
89
+ "sdk",
90
+ this.document,
91
+ config,
92
+ );
93
+ const files: Record<string, string> = {
94
+ ...Object.fromEntries(
95
+ Object.entries(SDK_TEMPLATE).filter(
96
+ ([key]) =>
97
+ key.startsWith("src/structures") === false &&
98
+ key.startsWith("src/functional") === false &&
99
+ key.startsWith("test/features") === false,
100
+ ),
101
+ ),
102
+ ...NestiaMigrateApiProgrammer.write(context),
103
+ ...NestiaMigrateApiStartProgrammer.write(context),
104
+ ...(config.e2e ? NestiaMigrateE2eProgrammer.write(context) : {}),
105
+ "swagger.json": JSON.stringify(this.document, null, 2),
106
+ };
107
+ return config.package ? this.rename(config.package, files) : files;
108
+ }
109
+
110
+ private rename(
111
+ slug: string,
112
+ files: Record<string, string>,
113
+ ): Record<string, string> {
114
+ return Object.fromEntries(
115
+ Object.entries(files).map(([key, value]) => [
116
+ key,
117
+ value.split(`@ORGANIZATION/PROJECT`).join(slug),
118
+ ]),
119
+ );
120
+ }
121
+ }
122
+ export namespace MigrateApplication {
123
+ export interface IOutput {
124
+ context: INestiaMigrateContext;
125
+ files: INestiaMigrateFile[];
126
+ errors: IHttpMigrateApplication.IError[];
127
+ }
128
+ }
129
+
130
+ const createContext = (
131
+ mode: "nest" | "sdk",
132
+ document: OpenApi.IDocument,
133
+ config: INestiaMigrateConfig,
134
+ ): INestiaMigrateContext => {
135
+ const application: IHttpMigrateApplication =
136
+ HttpMigration.application(document);
137
+ return {
138
+ mode,
139
+ document,
140
+ config,
141
+ routes: application.routes,
142
+ errors: application.errors,
143
+ };
144
+ };
@@ -1,51 +1,51 @@
1
- import { IHttpMigrateRoute } from "@samchon/openapi";
2
-
3
- import { IHttpMigrateController } from "../structures/IHttpMigrateController";
4
- import { MapUtil } from "../utils/MapUtil";
5
- import { StringUtil } from "../utils/StringUtil";
6
-
7
- export namespace MigrateControllerAnalyzer {
8
- export const analyze = (props: {
9
- routes: IHttpMigrateRoute[];
10
- }): IHttpMigrateController[] => {
11
- const collection: Map<string, IHttpMigrateController> = new Map();
12
- for (const route of props.routes) {
13
- const name: string =
14
- route.operation()["x-samchon-controller"] ??
15
- (route.accessor.length <= 1
16
- ? "__App"
17
- : route.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(route);
25
- }
26
-
27
- const controllers: IHttpMigrateController[] = [...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 "@samchon/openapi";
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
+ };
@@ -0,0 +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
+ }