@nestia/migrate 6.0.6 → 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 (217) 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 +10041 -693
  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} +14 -10
  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/{MigrateDtoProgrammer.ts → NestiaMigrateDtoProgrammer.ts} +101 -96
  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 -12
  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/MigrateE2eFileProgrammer.ts +0 -117
  209. package/src/programmers/MigrateE2eProgrammer.ts +0 -34
  210. package/src/programmers/MigrateNestControllerProgrammer.ts +0 -57
  211. package/src/programmers/MigrateNestMethodProgrammer.ts +0 -397
  212. package/src/programmers/MigrateNestProgrammer.ts +0 -84
  213. package/src/programmers/MigrateSchemaProgrammer.ts +0 -378
  214. package/src/structures/IHttpMigrateController.ts +0 -8
  215. package/src/structures/IHttpMigrateProgram.ts +0 -35
  216. package/src/structures/IHttpMigrateRoute.ts +0 -1
  217. package/src/structures/IHttpMigrateSchema.ts +0 -4
@@ -1,418 +0,0 @@
1
- import { OpenApi } from "@samchon/openapi";
2
- import ts from "typescript";
3
- import { ExpressionFactory } from "typia/lib/factories/ExpressionFactory";
4
- import { IdentifierFactory } from "typia/lib/factories/IdentifierFactory";
5
- import { LiteralFactory } from "typia/lib/factories/LiteralFactory";
6
- import { TypeFactory } from "typia/lib/factories/TypeFactory";
7
-
8
- import { IHttpMigrateProgram } from "../structures/IHttpMigrateProgram";
9
- import { IHttpMigrateRoute } from "../structures/IHttpMigrateRoute";
10
- import { FilePrinter } from "../utils/FilePrinter";
11
- import { MigrateApiSimulationProgrammer } from "./MigrateApiSimulationProgrammer";
12
- import { MigrateImportProgrammer } from "./MigrateImportProgrammer";
13
- import { MigrateSchemaProgrammer } from "./MigrateSchemaProgrammer";
14
-
15
- export namespace MigrateApiNamespaceProgrammer {
16
- export const write =
17
- (config: IHttpMigrateProgram.IConfig) =>
18
- (components: OpenApi.IComponents) =>
19
- (importer: MigrateImportProgrammer) =>
20
- (route: IHttpMigrateRoute): ts.ModuleDeclaration => {
21
- const types = writeTypes(components)(importer)(route);
22
- return ts.factory.createModuleDeclaration(
23
- [ts.factory.createToken(ts.SyntaxKind.ExportKeyword)],
24
- ts.factory.createIdentifier(route.accessor.at(-1)!),
25
- ts.factory.createModuleBlock([
26
- ...types,
27
- ...(types.length ? [FilePrinter.newLine()] : []),
28
- writeMetadata(components)(importer)(route),
29
- FilePrinter.newLine(),
30
- writePath(components)(importer)(route),
31
- ...(config.simulate
32
- ? [
33
- MigrateApiSimulationProgrammer.random(components)(importer)(
34
- route,
35
- ),
36
- MigrateApiSimulationProgrammer.simulate(components)(importer)(
37
- route,
38
- ),
39
- ]
40
- : []),
41
- ]),
42
- ts.NodeFlags.Namespace,
43
- );
44
- };
45
-
46
- export const writePathCallExpression = (route: IHttpMigrateRoute) =>
47
- ts.factory.createCallExpression(
48
- ts.factory.createIdentifier(`${route.accessor.at(-1)!}.path`),
49
- undefined,
50
- [
51
- ...route.parameters.map((p) => ts.factory.createIdentifier(p.key)),
52
- ...(route.query ? [ts.factory.createIdentifier(route.query.key)] : []),
53
- ],
54
- );
55
-
56
- const writeTypes =
57
- (components: OpenApi.IComponents) =>
58
- (importer: MigrateImportProgrammer) =>
59
- (route: IHttpMigrateRoute): ts.TypeAliasDeclaration[] => {
60
- const array: ts.TypeAliasDeclaration[] = [];
61
- const declare = (name: string, type: ts.TypeNode) =>
62
- array.push(
63
- ts.factory.createTypeAliasDeclaration(
64
- [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],
65
- name,
66
- undefined,
67
- type,
68
- ),
69
- );
70
- if (route.headers)
71
- declare(
72
- "Headers",
73
- MigrateSchemaProgrammer.write(components)(importer)(
74
- route.headers.schema,
75
- ),
76
- );
77
- if (route.query)
78
- declare(
79
- "Query",
80
- MigrateSchemaProgrammer.write(components)(importer)(
81
- route.query.schema,
82
- ),
83
- );
84
- if (route.body)
85
- declare(
86
- "Input",
87
- MigrateSchemaProgrammer.write(components)(importer)(
88
- route.body.schema,
89
- ),
90
- );
91
- if (route.success)
92
- declare(
93
- "Output",
94
- MigrateSchemaProgrammer.write(components)(importer)(
95
- route.success.schema,
96
- ),
97
- );
98
- return array;
99
- };
100
-
101
- const writeMetadata =
102
- (components: OpenApi.IComponents) =>
103
- (importer: MigrateImportProgrammer) =>
104
- (route: IHttpMigrateRoute): ts.VariableStatement =>
105
- constant("METADATA")(
106
- ts.factory.createAsExpression(
107
- ts.factory.createObjectLiteralExpression(
108
- [
109
- ts.factory.createPropertyAssignment(
110
- "method",
111
- ts.factory.createStringLiteral(route.method.toUpperCase()),
112
- ),
113
- ts.factory.createPropertyAssignment(
114
- "path",
115
- ts.factory.createStringLiteral(getPath(route)),
116
- ),
117
- ts.factory.createPropertyAssignment(
118
- "request",
119
- route.body
120
- ? LiteralFactory.write({
121
- type: route.body.type,
122
- encrypted: !!route.body["x-nestia-encrypted"],
123
- })
124
- : ts.factory.createNull(),
125
- ),
126
- ts.factory.createPropertyAssignment(
127
- "response",
128
- route.method.toUpperCase() !== "HEAD"
129
- ? LiteralFactory.write({
130
- type: route.success?.type ?? "application/json",
131
- encrypted: !!route.success?.["x-nestia-encrypted"],
132
- })
133
- : ts.factory.createNull(),
134
- ),
135
- ...(route.success?.type === "application/x-www-form-urlencoded"
136
- ? [
137
- ts.factory.createPropertyAssignment(
138
- "parseQuery",
139
- ts.factory.createCallExpression(
140
- ts.factory.createIdentifier(
141
- `${importer.external({
142
- type: "default",
143
- library: "typia",
144
- name: "typia",
145
- })}.http.createAssertQuery`,
146
- ),
147
- [
148
- MigrateSchemaProgrammer.write(components)(importer)(
149
- route.success.schema,
150
- ),
151
- ],
152
- undefined,
153
- ),
154
- ),
155
- ]
156
- : []),
157
- ],
158
- true,
159
- ),
160
- ts.factory.createTypeReferenceNode(
161
- ts.factory.createIdentifier("const"),
162
- ),
163
- ),
164
- );
165
-
166
- const writePath =
167
- (components: OpenApi.IComponents) =>
168
- (importer: MigrateImportProgrammer) =>
169
- (route: IHttpMigrateRoute): ts.VariableStatement => {
170
- const out = (body: ts.ConciseBody) =>
171
- constant("path")(
172
- ts.factory.createArrowFunction(
173
- [],
174
- [],
175
- [
176
- ...route.parameters.map((p) =>
177
- IdentifierFactory.parameter(
178
- p.key,
179
- MigrateSchemaProgrammer.write(components)(importer)(p.schema),
180
- ),
181
- ),
182
- ...(route.query
183
- ? [
184
- IdentifierFactory.parameter(
185
- route.query.key,
186
- ts.factory.createTypeReferenceNode(
187
- `${route.accessor.at(-1)!}.Query`,
188
- ),
189
- ),
190
- ]
191
- : []),
192
- ],
193
- undefined,
194
- undefined,
195
- body,
196
- ),
197
- );
198
- const template = () => {
199
- const path: string = getPath(route);
200
- const split: string[] = path.split(":");
201
- if (split.length === 1) return ts.factory.createStringLiteral(path);
202
- return ts.factory.createTemplateExpression(
203
- ts.factory.createTemplateHead(split[0]),
204
- split.slice(1).map((s, i, arr) => {
205
- const name: string = s.split("/")[0];
206
- return ts.factory.createTemplateSpan(
207
- ts.factory.createCallExpression(
208
- ts.factory.createIdentifier("encodeURIComponent"),
209
- undefined,
210
- [
211
- ts.factory.createBinaryExpression(
212
- ts.factory.createIdentifier(
213
- route.parameters.find((p) => p.name === name)!.key,
214
- ),
215
- ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
216
- ts.factory.createStringLiteral("null"),
217
- ),
218
- ],
219
- ),
220
- (i !== arr.length - 1
221
- ? ts.factory.createTemplateMiddle
222
- : ts.factory.createTemplateTail)(s.substring(name.length)),
223
- );
224
- }),
225
- );
226
- };
227
- if (!route.query) return out(template());
228
-
229
- const computeName = (str: string): string =>
230
- route.parameters.find((p) => p.key === str) !== undefined
231
- ? computeName("_" + str)
232
- : str;
233
- const variables: string = computeName("variables");
234
- return out(
235
- ts.factory.createBlock(
236
- [
237
- local(variables)("URLSearchParams")(
238
- ts.factory.createNewExpression(
239
- ts.factory.createIdentifier("URLSearchParams"),
240
- [],
241
- [],
242
- ),
243
- ),
244
- ts.factory.createForOfStatement(
245
- undefined,
246
- ts.factory.createVariableDeclarationList(
247
- [
248
- ts.factory.createVariableDeclaration(
249
- ts.factory.createArrayBindingPattern([
250
- ts.factory.createBindingElement(
251
- undefined,
252
- undefined,
253
- ts.factory.createIdentifier("key"),
254
- undefined,
255
- ),
256
- ts.factory.createBindingElement(
257
- undefined,
258
- undefined,
259
- ts.factory.createIdentifier("value"),
260
- undefined,
261
- ),
262
- ]),
263
- undefined,
264
- undefined,
265
- undefined,
266
- ),
267
- ],
268
- ts.NodeFlags.Const,
269
- ),
270
- ts.factory.createCallExpression(
271
- ts.factory.createIdentifier("Object.entries"),
272
- undefined,
273
- [
274
- ts.factory.createAsExpression(
275
- ts.factory.createIdentifier(route.query.key),
276
- TypeFactory.keyword("any"),
277
- ),
278
- ],
279
- ),
280
- ts.factory.createIfStatement(
281
- ts.factory.createStrictEquality(
282
- ts.factory.createIdentifier("undefined"),
283
- ts.factory.createIdentifier("value"),
284
- ),
285
- ts.factory.createContinueStatement(),
286
- ts.factory.createIfStatement(
287
- ts.factory.createCallExpression(
288
- ts.factory.createIdentifier("Array.isArray"),
289
- undefined,
290
- [ts.factory.createIdentifier("value")],
291
- ),
292
- ts.factory.createExpressionStatement(
293
- ts.factory.createCallExpression(
294
- ts.factory.createPropertyAccessExpression(
295
- ts.factory.createIdentifier("value"),
296
- ts.factory.createIdentifier("forEach"),
297
- ),
298
- undefined,
299
- [
300
- ts.factory.createArrowFunction(
301
- undefined,
302
- undefined,
303
- [IdentifierFactory.parameter("elem")],
304
- undefined,
305
- undefined,
306
- ts.factory.createCallExpression(
307
- IdentifierFactory.access(
308
- ts.factory.createIdentifier(variables),
309
- "append",
310
- ),
311
- undefined,
312
- [
313
- ts.factory.createIdentifier("key"),
314
- ts.factory.createCallExpression(
315
- ts.factory.createIdentifier("String"),
316
- undefined,
317
- [ts.factory.createIdentifier("elem")],
318
- ),
319
- ],
320
- ),
321
- ),
322
- ],
323
- ),
324
- ),
325
- ts.factory.createExpressionStatement(
326
- ts.factory.createCallExpression(
327
- IdentifierFactory.access(
328
- ts.factory.createIdentifier(variables),
329
- "set",
330
- ),
331
- undefined,
332
- [
333
- ts.factory.createIdentifier("key"),
334
- ts.factory.createCallExpression(
335
- ts.factory.createIdentifier("String"),
336
- undefined,
337
- [ts.factory.createIdentifier("value")],
338
- ),
339
- ],
340
- ),
341
- ),
342
- ),
343
- ),
344
- ),
345
- local("location")("string")(template()),
346
- ts.factory.createReturnStatement(
347
- ts.factory.createConditionalExpression(
348
- ts.factory.createStrictEquality(
349
- ExpressionFactory.number(0),
350
- IdentifierFactory.access(
351
- ts.factory.createIdentifier(variables),
352
- "size",
353
- ),
354
- ),
355
- undefined,
356
- ts.factory.createIdentifier("location"),
357
- undefined,
358
- ts.factory.createTemplateExpression(
359
- ts.factory.createTemplateHead(""),
360
- [
361
- ts.factory.createTemplateSpan(
362
- ts.factory.createIdentifier("location"),
363
- ts.factory.createTemplateMiddle("?"),
364
- ),
365
- ts.factory.createTemplateSpan(
366
- ts.factory.createCallExpression(
367
- IdentifierFactory.access(
368
- ts.factory.createIdentifier(variables),
369
- "toString",
370
- ),
371
- undefined,
372
- undefined,
373
- ),
374
- ts.factory.createTemplateTail(""),
375
- ),
376
- ],
377
- ),
378
- ),
379
- ),
380
- ],
381
- true,
382
- ),
383
- );
384
- };
385
- }
386
-
387
- const constant = (name: string) => (expression: ts.Expression) =>
388
- ts.factory.createVariableStatement(
389
- [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],
390
- ts.factory.createVariableDeclarationList(
391
- [
392
- ts.factory.createVariableDeclaration(
393
- name,
394
- undefined,
395
- undefined,
396
- expression,
397
- ),
398
- ],
399
- ts.NodeFlags.Const,
400
- ),
401
- );
402
- const getPath = (route: IHttpMigrateRoute) =>
403
- (route.emendedPath.startsWith("/") ? "" : "/") + route.emendedPath;
404
- const local = (name: string) => (type: string) => (expression: ts.Expression) =>
405
- ts.factory.createVariableStatement(
406
- [],
407
- ts.factory.createVariableDeclarationList(
408
- [
409
- ts.factory.createVariableDeclaration(
410
- name,
411
- undefined,
412
- ts.factory.createTypeReferenceNode(type),
413
- expression,
414
- ),
415
- ],
416
- ts.NodeFlags.Const,
417
- ),
418
- );
@@ -1,104 +0,0 @@
1
- import { HashMap, hash } from "tstl";
2
- import ts from "typescript";
3
-
4
- import { IHttpMigrateFile } from "../structures/IHttpMigrateFile";
5
- import { IHttpMigrateProgram } from "../structures/IHttpMigrateProgram";
6
- import { FilePrinter } from "../utils/FilePrinter";
7
- import { MigrateApiFileProgrammer } from "./MigrateApiFileProgrammer";
8
- import { MigrateDtoProgrammer } from "./MigrateDtoProgrammer";
9
- import { MigrateImportProgrammer } from "./MigrateImportProgrammer";
10
-
11
- export namespace MigrateApiProgrammer {
12
- export const write = (program: IHttpMigrateProgram): IHttpMigrateFile[] => {
13
- const dict: HashMap<string[], MigrateApiFileProgrammer.IProps> =
14
- new HashMap(
15
- (x) => hash(x.join(".")),
16
- (x, y) => x.length === y.length && x.join(".") === y.join("."),
17
- );
18
- for (const route of program.routes) {
19
- const namespace: string[] = route.accessor.slice(0, -1);
20
- let last: MigrateApiFileProgrammer.IProps = dict.take(namespace, () => ({
21
- namespace,
22
- routes: [],
23
- children: new Set(),
24
- }));
25
- last.routes.push(route);
26
- namespace.forEach((_s, i, array) => {
27
- const partial: string[] = namespace.slice(0, array.length - i - 1);
28
- const props: MigrateApiFileProgrammer.IProps = dict.take(
29
- partial,
30
- () => ({
31
- namespace: partial,
32
- children: new Set(),
33
- routes: [],
34
- }),
35
- );
36
- props.children.add(last.namespace.at(-1)!);
37
- last = props;
38
- });
39
- }
40
-
41
- // DO GENERATE
42
- const output: IHttpMigrateFile[] = [...dict].map(({ second: props }) => ({
43
- location: `src/${program.mode === "nest" ? "api/" : ""}functional/${props.namespace.join("/")}`,
44
- file: "index.ts",
45
- content: FilePrinter.write({
46
- statements: MigrateApiFileProgrammer.write(program)(
47
- program.document.components,
48
- )(props),
49
- }),
50
- }));
51
- if (program.mode === "sdk")
52
- output.push(
53
- ...[
54
- ...MigrateDtoProgrammer.compose(program)(
55
- program.document.components,
56
- ).entries(),
57
- ].map(([key, value]) => ({
58
- location: "src/structures",
59
- file: `${key}.ts`,
60
- content: FilePrinter.write({
61
- statements: writeDtoFile(key, value),
62
- }),
63
- })),
64
- );
65
- return output;
66
- };
67
-
68
- const writeDtoFile = (
69
- key: string,
70
- modulo: MigrateDtoProgrammer.IModule,
71
- ): ts.Statement[] => {
72
- const importer = new MigrateImportProgrammer();
73
- const statements: ts.Statement[] = iterate(importer)(modulo);
74
- if (statements.length === 0) return [];
75
-
76
- return [
77
- ...importer.toStatements((name) => `./${name}`, key),
78
- ...(importer.empty() ? [] : [FilePrinter.newLine()]),
79
- ...statements,
80
- ];
81
- };
82
-
83
- const iterate =
84
- (importer: MigrateImportProgrammer) =>
85
- (modulo: MigrateDtoProgrammer.IModule): ts.Statement[] => {
86
- const output: ts.Statement[] = [];
87
- if (modulo.programmer !== null) output.push(modulo.programmer(importer));
88
- if (modulo.children.size !== 0) {
89
- const internal: ts.Statement[] = [];
90
- for (const child of modulo.children.values())
91
- internal.push(...iterate(importer)(child));
92
- output.push(
93
- ts.factory.createModuleDeclaration(
94
- [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],
95
- ts.factory.createIdentifier(modulo.name),
96
- ts.factory.createModuleBlock(internal),
97
- ts.NodeFlags.Namespace,
98
- ),
99
- );
100
- }
101
- output.push(FilePrinter.newLine());
102
- return output;
103
- };
104
- }