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

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 (349) hide show
  1. package/LICENSE +21 -21
  2. package/lib/NestiaMigrateApplication.js +9 -44
  3. package/lib/NestiaMigrateApplication.js.map +1 -1
  4. package/lib/NestiaMigrateApplication.mjs +90 -3
  5. package/lib/NestiaMigrateApplication.mjs.map +1 -1
  6. package/lib/_virtual/_rolldown/runtime.mjs +13 -0
  7. package/lib/analyzers/NestiaMigrateControllerAnalyzer.mjs +45 -3
  8. package/lib/analyzers/NestiaMigrateControllerAnalyzer.mjs.map +1 -1
  9. package/lib/archivers/NestiaMigrateFileArchiver.js +4 -0
  10. package/lib/archivers/NestiaMigrateFileArchiver.js.map +1 -1
  11. package/lib/archivers/NestiaMigrateFileArchiver.mjs +25 -3
  12. package/lib/archivers/NestiaMigrateFileArchiver.mjs.map +1 -1
  13. package/lib/bundles/NEST_TEMPLATE.js +51 -49
  14. package/lib/bundles/NEST_TEMPLATE.js.map +1 -1
  15. package/lib/bundles/NEST_TEMPLATE.mjs +58 -3
  16. package/lib/bundles/NEST_TEMPLATE.mjs.map +1 -1
  17. package/lib/bundles/SDK_TEMPLATE.js +20 -20
  18. package/lib/bundles/SDK_TEMPLATE.js.map +1 -1
  19. package/lib/bundles/SDK_TEMPLATE.mjs +28 -3
  20. package/lib/bundles/SDK_TEMPLATE.mjs.map +1 -1
  21. package/lib/executable/NestiaMigrateCommander.mjs +80 -3
  22. package/lib/executable/NestiaMigrateCommander.mjs.map +1 -1
  23. package/lib/executable/NestiaMigrateInquirer.mjs +59 -3
  24. package/lib/executable/NestiaMigrateInquirer.mjs.map +1 -1
  25. package/lib/executable/migrate.mjs +9 -3
  26. package/lib/executable/migrate.mjs.map +1 -1
  27. package/lib/factories/ExpressionFactory.mjs +10 -3
  28. package/lib/factories/ExpressionFactory.mjs.map +1 -1
  29. package/lib/factories/FormatCheatSheet.mjs +31 -3
  30. package/lib/factories/FormatCheatSheet.mjs.map +1 -1
  31. package/lib/factories/IdentifierFactory.mjs +22 -3
  32. package/lib/factories/IdentifierFactory.mjs.map +1 -1
  33. package/lib/factories/LiteralFactory.mjs +31 -3
  34. package/lib/factories/LiteralFactory.mjs.map +1 -1
  35. package/lib/factories/StatementFactory.mjs +12 -3
  36. package/lib/factories/StatementFactory.mjs.map +1 -1
  37. package/lib/factories/TypeFactory.mjs +21 -3
  38. package/lib/factories/TypeFactory.mjs.map +1 -1
  39. package/lib/factories/TypeLiteralFactory.js +2 -37
  40. package/lib/factories/TypeLiteralFactory.js.map +1 -1
  41. package/lib/factories/TypeLiteralFactory.mjs +17 -3
  42. package/lib/factories/TypeLiteralFactory.mjs.map +1 -1
  43. package/lib/index.mjs +24 -2
  44. package/lib/index.mjs.map +1 -1
  45. package/lib/internal/ts.mjs +6 -2
  46. package/lib/internal/ts.mjs.map +1 -1
  47. package/lib/module.mjs +43 -2
  48. package/lib/module.mjs.map +1 -1
  49. package/lib/programmers/NestiaMigrateApiFileProgrammer.mjs +36 -3
  50. package/lib/programmers/NestiaMigrateApiFileProgrammer.mjs.map +1 -1
  51. package/lib/programmers/NestiaMigrateApiFunctionProgrammer.js +2 -37
  52. package/lib/programmers/NestiaMigrateApiFunctionProgrammer.js.map +1 -1
  53. package/lib/programmers/NestiaMigrateApiFunctionProgrammer.mjs +106 -3
  54. package/lib/programmers/NestiaMigrateApiFunctionProgrammer.mjs.map +1 -1
  55. package/lib/programmers/NestiaMigrateApiNamespaceProgrammer.mjs +139 -3
  56. package/lib/programmers/NestiaMigrateApiNamespaceProgrammer.mjs.map +1 -1
  57. package/lib/programmers/NestiaMigrateApiProgrammer.js +1 -1
  58. package/lib/programmers/NestiaMigrateApiProgrammer.js.map +1 -1
  59. package/lib/programmers/NestiaMigrateApiProgrammer.mjs +71 -3
  60. package/lib/programmers/NestiaMigrateApiProgrammer.mjs.map +1 -1
  61. package/lib/programmers/NestiaMigrateApiSimulationProgrammer.mjs +102 -3
  62. package/lib/programmers/NestiaMigrateApiSimulationProgrammer.mjs.map +1 -1
  63. package/lib/programmers/NestiaMigrateApiStartProgrammer.mjs +50 -3
  64. package/lib/programmers/NestiaMigrateApiStartProgrammer.mjs.map +1 -1
  65. package/lib/programmers/NestiaMigrateDtoProgrammer.mjs +53 -3
  66. package/lib/programmers/NestiaMigrateDtoProgrammer.mjs.map +1 -1
  67. package/lib/programmers/NestiaMigrateE2eFileProgrammer.mjs +58 -3
  68. package/lib/programmers/NestiaMigrateE2eFileProgrammer.mjs.map +1 -1
  69. package/lib/programmers/NestiaMigrateE2eProgrammer.js +11 -4
  70. package/lib/programmers/NestiaMigrateE2eProgrammer.js.map +1 -1
  71. package/lib/programmers/NestiaMigrateE2eProgrammer.mjs +35 -3
  72. package/lib/programmers/NestiaMigrateE2eProgrammer.mjs.map +1 -1
  73. package/lib/programmers/NestiaMigrateImportProgrammer.js +12 -5
  74. package/lib/programmers/NestiaMigrateImportProgrammer.js.map +1 -1
  75. package/lib/programmers/NestiaMigrateImportProgrammer.mjs +50 -3
  76. package/lib/programmers/NestiaMigrateImportProgrammer.mjs.map +1 -1
  77. package/lib/programmers/NestiaMigrateNestControllerProgrammer.js +4 -3
  78. package/lib/programmers/NestiaMigrateNestControllerProgrammer.js.map +1 -1
  79. package/lib/programmers/NestiaMigrateNestControllerProgrammer.mjs +31 -3
  80. package/lib/programmers/NestiaMigrateNestControllerProgrammer.mjs.map +1 -1
  81. package/lib/programmers/NestiaMigrateNestMethodProgrammer.mjs +128 -3
  82. package/lib/programmers/NestiaMigrateNestMethodProgrammer.mjs.map +1 -1
  83. package/lib/programmers/NestiaMigrateNestModuleProgrammer.mjs +18 -3
  84. package/lib/programmers/NestiaMigrateNestModuleProgrammer.mjs.map +1 -1
  85. package/lib/programmers/NestiaMigrateNestProgrammer.js +25 -4
  86. package/lib/programmers/NestiaMigrateNestProgrammer.js.map +1 -1
  87. package/lib/programmers/NestiaMigrateNestProgrammer.mjs +60 -3
  88. package/lib/programmers/NestiaMigrateNestProgrammer.mjs.map +1 -1
  89. package/lib/programmers/NestiaMigrateSchemaProgrammer.js +14 -49
  90. package/lib/programmers/NestiaMigrateSchemaProgrammer.js.map +1 -1
  91. package/lib/programmers/NestiaMigrateSchemaProgrammer.mjs +199 -3
  92. package/lib/programmers/NestiaMigrateSchemaProgrammer.mjs.map +1 -1
  93. package/lib/programmers/index.mjs +16 -2
  94. package/lib/structures/INestiaMigrateConfig.mjs +0 -3
  95. package/lib/structures/INestiaMigrateContext.mjs +0 -3
  96. package/lib/structures/INestiaMigrateController.mjs +0 -3
  97. package/lib/structures/INestiaMigrateFile.mjs +0 -3
  98. package/lib/structures/index.mjs +0 -2
  99. package/lib/utils/FilePrinter.mjs +20 -3
  100. package/lib/utils/FilePrinter.mjs.map +1 -1
  101. package/lib/utils/MapUtil.mjs +15 -3
  102. package/lib/utils/MapUtil.mjs.map +1 -1
  103. package/lib/utils/StringUtil.mjs +100 -3
  104. package/lib/utils/StringUtil.mjs.map +1 -1
  105. package/package.json +8 -12
  106. package/src/NestiaMigrateApplication.ts +192 -196
  107. package/src/analyzers/NestiaMigrateControllerAnalyzer.ts +51 -51
  108. package/src/archivers/NestiaMigrateFileArchiver.ts +32 -28
  109. package/src/bundles/NEST_TEMPLATE.ts +51 -49
  110. package/src/bundles/SDK_TEMPLATE.ts +20 -20
  111. package/src/executable/NestiaMigrateCommander.ts +115 -115
  112. package/src/executable/NestiaMigrateInquirer.ts +106 -106
  113. package/src/executable/bundle.js +396 -349
  114. package/src/executable/migrate.ts +7 -7
  115. package/src/factories/ExpressionFactory.ts +23 -23
  116. package/src/factories/FormatCheatSheet.ts +71 -71
  117. package/src/factories/IdentifierFactory.ts +84 -84
  118. package/src/factories/LiteralFactory.ts +54 -54
  119. package/src/factories/StatementFactory.ts +56 -56
  120. package/src/factories/TypeFactory.ts +27 -27
  121. package/src/factories/TypeLiteralFactory.ts +59 -62
  122. package/src/index.ts +4 -4
  123. package/src/internal/ts.ts +75 -75
  124. package/src/module.ts +6 -6
  125. package/src/programmers/NestiaMigrateApiFileProgrammer.ts +55 -55
  126. package/src/programmers/NestiaMigrateApiFunctionProgrammer.ts +355 -358
  127. package/src/programmers/NestiaMigrateApiNamespaceProgrammer.ts +511 -511
  128. package/src/programmers/NestiaMigrateApiProgrammer.ts +108 -108
  129. package/src/programmers/NestiaMigrateApiSimulationProgrammer.ts +309 -309
  130. package/src/programmers/NestiaMigrateApiStartProgrammer.ts +198 -198
  131. package/src/programmers/NestiaMigrateDtoProgrammer.ts +117 -117
  132. package/src/programmers/NestiaMigrateE2eFileProgrammer.ts +155 -155
  133. package/src/programmers/NestiaMigrateE2eProgrammer.ts +62 -48
  134. package/src/programmers/NestiaMigrateImportProgrammer.ts +127 -119
  135. package/src/programmers/NestiaMigrateNestControllerProgrammer.ts +66 -70
  136. package/src/programmers/NestiaMigrateNestMethodProgrammer.ts +402 -402
  137. package/src/programmers/NestiaMigrateNestModuleProgrammer.ts +64 -64
  138. package/src/programmers/NestiaMigrateNestProgrammer.ts +110 -89
  139. package/src/programmers/NestiaMigrateSchemaProgrammer.ts +472 -475
  140. package/src/programmers/index.ts +15 -15
  141. package/src/structures/INestiaMigrateConfig.ts +19 -19
  142. package/src/structures/INestiaMigrateContext.ts +9 -9
  143. package/src/structures/INestiaMigrateController.ts +8 -8
  144. package/src/structures/INestiaMigrateFile.ts +5 -5
  145. package/src/structures/index.ts +4 -4
  146. package/src/utils/FilePrinter.ts +44 -44
  147. package/src/utils/MapUtil.ts +13 -13
  148. package/src/utils/StringUtil.ts +109 -109
  149. package/README.md +0 -93
  150. package/lib/NestiaMigrateApplication2.mjs +0 -153
  151. package/lib/NestiaMigrateApplication2.mjs.map +0 -1
  152. package/lib/_virtual/ExpressionFactory.mjs +0 -4
  153. package/lib/_virtual/ExpressionFactory.mjs.map +0 -1
  154. package/lib/_virtual/FilePrinter.mjs +0 -4
  155. package/lib/_virtual/FilePrinter.mjs.map +0 -1
  156. package/lib/_virtual/FormatCheatSheet.mjs +0 -4
  157. package/lib/_virtual/FormatCheatSheet.mjs.map +0 -1
  158. package/lib/_virtual/INestiaMigrateConfig.mjs +0 -4
  159. package/lib/_virtual/INestiaMigrateConfig.mjs.map +0 -1
  160. package/lib/_virtual/INestiaMigrateContext.mjs +0 -4
  161. package/lib/_virtual/INestiaMigrateContext.mjs.map +0 -1
  162. package/lib/_virtual/INestiaMigrateController.mjs +0 -4
  163. package/lib/_virtual/INestiaMigrateController.mjs.map +0 -1
  164. package/lib/_virtual/INestiaMigrateFile.mjs +0 -4
  165. package/lib/_virtual/INestiaMigrateFile.mjs.map +0 -1
  166. package/lib/_virtual/IdentifierFactory.mjs +0 -4
  167. package/lib/_virtual/IdentifierFactory.mjs.map +0 -1
  168. package/lib/_virtual/LiteralFactory.mjs +0 -4
  169. package/lib/_virtual/LiteralFactory.mjs.map +0 -1
  170. package/lib/_virtual/MapUtil.mjs +0 -4
  171. package/lib/_virtual/MapUtil.mjs.map +0 -1
  172. package/lib/_virtual/NEST_TEMPLATE.mjs +0 -4
  173. package/lib/_virtual/NEST_TEMPLATE.mjs.map +0 -1
  174. package/lib/_virtual/NestiaMigrateApiFileProgrammer.mjs +0 -4
  175. package/lib/_virtual/NestiaMigrateApiFileProgrammer.mjs.map +0 -1
  176. package/lib/_virtual/NestiaMigrateApiFunctionProgrammer.mjs +0 -4
  177. package/lib/_virtual/NestiaMigrateApiFunctionProgrammer.mjs.map +0 -1
  178. package/lib/_virtual/NestiaMigrateApiNamespaceProgrammer.mjs +0 -4
  179. package/lib/_virtual/NestiaMigrateApiNamespaceProgrammer.mjs.map +0 -1
  180. package/lib/_virtual/NestiaMigrateApiProgrammer.mjs +0 -4
  181. package/lib/_virtual/NestiaMigrateApiProgrammer.mjs.map +0 -1
  182. package/lib/_virtual/NestiaMigrateApiSimulationProgrammer.mjs +0 -4
  183. package/lib/_virtual/NestiaMigrateApiSimulationProgrammer.mjs.map +0 -1
  184. package/lib/_virtual/NestiaMigrateApiStartProgrammer.mjs +0 -4
  185. package/lib/_virtual/NestiaMigrateApiStartProgrammer.mjs.map +0 -1
  186. package/lib/_virtual/NestiaMigrateApplication.mjs +0 -4
  187. package/lib/_virtual/NestiaMigrateApplication.mjs.map +0 -1
  188. package/lib/_virtual/NestiaMigrateCommander.mjs +0 -4
  189. package/lib/_virtual/NestiaMigrateCommander.mjs.map +0 -1
  190. package/lib/_virtual/NestiaMigrateControllerAnalyzer.mjs +0 -4
  191. package/lib/_virtual/NestiaMigrateControllerAnalyzer.mjs.map +0 -1
  192. package/lib/_virtual/NestiaMigrateDtoProgrammer.mjs +0 -4
  193. package/lib/_virtual/NestiaMigrateDtoProgrammer.mjs.map +0 -1
  194. package/lib/_virtual/NestiaMigrateE2eFileProgrammer.mjs +0 -4
  195. package/lib/_virtual/NestiaMigrateE2eFileProgrammer.mjs.map +0 -1
  196. package/lib/_virtual/NestiaMigrateE2eProgrammer.mjs +0 -4
  197. package/lib/_virtual/NestiaMigrateE2eProgrammer.mjs.map +0 -1
  198. package/lib/_virtual/NestiaMigrateFileArchiver.mjs +0 -4
  199. package/lib/_virtual/NestiaMigrateFileArchiver.mjs.map +0 -1
  200. package/lib/_virtual/NestiaMigrateImportProgrammer.mjs +0 -4
  201. package/lib/_virtual/NestiaMigrateImportProgrammer.mjs.map +0 -1
  202. package/lib/_virtual/NestiaMigrateInquirer.mjs +0 -4
  203. package/lib/_virtual/NestiaMigrateInquirer.mjs.map +0 -1
  204. package/lib/_virtual/NestiaMigrateNestControllerProgrammer.mjs +0 -4
  205. package/lib/_virtual/NestiaMigrateNestControllerProgrammer.mjs.map +0 -1
  206. package/lib/_virtual/NestiaMigrateNestMethodProgrammer.mjs +0 -4
  207. package/lib/_virtual/NestiaMigrateNestMethodProgrammer.mjs.map +0 -1
  208. package/lib/_virtual/NestiaMigrateNestModuleProgrammer.mjs +0 -4
  209. package/lib/_virtual/NestiaMigrateNestModuleProgrammer.mjs.map +0 -1
  210. package/lib/_virtual/NestiaMigrateNestProgrammer.mjs +0 -4
  211. package/lib/_virtual/NestiaMigrateNestProgrammer.mjs.map +0 -1
  212. package/lib/_virtual/NestiaMigrateSchemaProgrammer.mjs +0 -4
  213. package/lib/_virtual/NestiaMigrateSchemaProgrammer.mjs.map +0 -1
  214. package/lib/_virtual/SDK_TEMPLATE.mjs +0 -4
  215. package/lib/_virtual/SDK_TEMPLATE.mjs.map +0 -1
  216. package/lib/_virtual/StatementFactory.mjs +0 -4
  217. package/lib/_virtual/StatementFactory.mjs.map +0 -1
  218. package/lib/_virtual/StringUtil.mjs +0 -4
  219. package/lib/_virtual/StringUtil.mjs.map +0 -1
  220. package/lib/_virtual/TypeFactory.mjs +0 -4
  221. package/lib/_virtual/TypeFactory.mjs.map +0 -1
  222. package/lib/_virtual/TypeLiteralFactory.mjs +0 -4
  223. package/lib/_virtual/TypeLiteralFactory.mjs.map +0 -1
  224. package/lib/_virtual/_commander.mjs +0 -7
  225. package/lib/_virtual/_commander.mjs.map +0 -1
  226. package/lib/_virtual/_commonjsHelpers.mjs +0 -35
  227. package/lib/_virtual/_commonjsHelpers.mjs.map +0 -1
  228. package/lib/_virtual/_inquirer.mjs +0 -7
  229. package/lib/_virtual/_inquirer.mjs.map +0 -1
  230. package/lib/_virtual/_node_child_process.mjs +0 -7
  231. package/lib/_virtual/_node_child_process.mjs.map +0 -1
  232. package/lib/_virtual/_node_fs.mjs +0 -7
  233. package/lib/_virtual/_node_fs.mjs.map +0 -1
  234. package/lib/_virtual/_node_path.mjs +0 -7
  235. package/lib/_virtual/_node_path.mjs.map +0 -1
  236. package/lib/_virtual/_prettier-plugin-jsdoc.mjs +0 -7
  237. package/lib/_virtual/_prettier-plugin-jsdoc.mjs.map +0 -1
  238. package/lib/_virtual/_prettier.mjs +0 -7
  239. package/lib/_virtual/_prettier.mjs.map +0 -1
  240. package/lib/_virtual/_tstl.mjs +0 -7
  241. package/lib/_virtual/_tstl.mjs.map +0 -1
  242. package/lib/_virtual/factory.mjs +0 -7
  243. package/lib/_virtual/factory.mjs.map +0 -1
  244. package/lib/_virtual/index.mjs +0 -4
  245. package/lib/_virtual/index.mjs.map +0 -1
  246. package/lib/_virtual/index2.mjs +0 -4
  247. package/lib/_virtual/index2.mjs.map +0 -1
  248. package/lib/_virtual/index3.mjs +0 -4
  249. package/lib/_virtual/index3.mjs.map +0 -1
  250. package/lib/_virtual/index4.mjs +0 -4
  251. package/lib/_virtual/index4.mjs.map +0 -1
  252. package/lib/_virtual/migrate.mjs +0 -4
  253. package/lib/_virtual/migrate.mjs.map +0 -1
  254. package/lib/_virtual/module.mjs +0 -4
  255. package/lib/_virtual/module.mjs.map +0 -1
  256. package/lib/_virtual/prettier-plugin-sort-imports.mjs +0 -7
  257. package/lib/_virtual/prettier-plugin-sort-imports.mjs.map +0 -1
  258. package/lib/_virtual/ts.mjs +0 -4
  259. package/lib/_virtual/ts.mjs.map +0 -1
  260. package/lib/_virtual/utils.mjs +0 -7
  261. package/lib/_virtual/utils.mjs.map +0 -1
  262. package/lib/analyzers/NestiaMigrateControllerAnalyzer2.mjs +0 -53
  263. package/lib/analyzers/NestiaMigrateControllerAnalyzer2.mjs.map +0 -1
  264. package/lib/archivers/NestiaMigrateFileArchiver2.mjs +0 -40
  265. package/lib/archivers/NestiaMigrateFileArchiver2.mjs.map +0 -1
  266. package/lib/bundles/NEST_TEMPLATE2.mjs +0 -66
  267. package/lib/bundles/NEST_TEMPLATE2.mjs.map +0 -1
  268. package/lib/bundles/SDK_TEMPLATE2.mjs +0 -38
  269. package/lib/bundles/SDK_TEMPLATE2.mjs.map +0 -1
  270. package/lib/executable/NestiaMigrateCommander2.mjs +0 -148
  271. package/lib/executable/NestiaMigrateCommander2.mjs.map +0 -1
  272. package/lib/executable/NestiaMigrateInquirer2.mjs +0 -93
  273. package/lib/executable/NestiaMigrateInquirer2.mjs.map +0 -1
  274. package/lib/executable/migrate2.mjs +0 -13
  275. package/lib/executable/migrate2.mjs.map +0 -1
  276. package/lib/factories/ExpressionFactory2.mjs +0 -20
  277. package/lib/factories/ExpressionFactory2.mjs.map +0 -1
  278. package/lib/factories/FormatCheatSheet2.mjs +0 -37
  279. package/lib/factories/FormatCheatSheet2.mjs.map +0 -1
  280. package/lib/factories/IdentifierFactory2.mjs +0 -56
  281. package/lib/factories/IdentifierFactory2.mjs.map +0 -1
  282. package/lib/factories/LiteralFactory2.mjs +0 -56
  283. package/lib/factories/LiteralFactory2.mjs.map +0 -1
  284. package/lib/factories/StatementFactory2.mjs +0 -26
  285. package/lib/factories/StatementFactory2.mjs.map +0 -1
  286. package/lib/factories/TypeFactory2.mjs +0 -31
  287. package/lib/factories/TypeFactory2.mjs.map +0 -1
  288. package/lib/factories/TypeLiteralFactory2.mjs +0 -72
  289. package/lib/factories/TypeLiteralFactory2.mjs.map +0 -1
  290. package/lib/index2.mjs +0 -53
  291. package/lib/index2.mjs.map +0 -1
  292. package/lib/internal/ts2.mjs +0 -10
  293. package/lib/internal/ts2.mjs.map +0 -1
  294. package/lib/module2.mjs +0 -38
  295. package/lib/module2.mjs.map +0 -1
  296. package/lib/programmers/NestiaMigrateApiFileProgrammer2.mjs +0 -49
  297. package/lib/programmers/NestiaMigrateApiFileProgrammer2.mjs.map +0 -1
  298. package/lib/programmers/NestiaMigrateApiFunctionProgrammer2.mjs +0 -234
  299. package/lib/programmers/NestiaMigrateApiFunctionProgrammer2.mjs.map +0 -1
  300. package/lib/programmers/NestiaMigrateApiNamespaceProgrammer2.mjs +0 -238
  301. package/lib/programmers/NestiaMigrateApiNamespaceProgrammer2.mjs.map +0 -1
  302. package/lib/programmers/NestiaMigrateApiProgrammer2.mjs +0 -92
  303. package/lib/programmers/NestiaMigrateApiProgrammer2.mjs.map +0 -1
  304. package/lib/programmers/NestiaMigrateApiSimulationProgrammer2.mjs +0 -156
  305. package/lib/programmers/NestiaMigrateApiSimulationProgrammer2.mjs.map +0 -1
  306. package/lib/programmers/NestiaMigrateApiStartProgrammer2.mjs +0 -88
  307. package/lib/programmers/NestiaMigrateApiStartProgrammer2.mjs.map +0 -1
  308. package/lib/programmers/NestiaMigrateDtoProgrammer2.mjs +0 -90
  309. package/lib/programmers/NestiaMigrateDtoProgrammer2.mjs.map +0 -1
  310. package/lib/programmers/NestiaMigrateE2eFileProgrammer2.mjs +0 -88
  311. package/lib/programmers/NestiaMigrateE2eFileProgrammer2.mjs.map +0 -1
  312. package/lib/programmers/NestiaMigrateE2eProgrammer2.mjs +0 -41
  313. package/lib/programmers/NestiaMigrateE2eProgrammer2.mjs.map +0 -1
  314. package/lib/programmers/NestiaMigrateImportProgrammer2.mjs +0 -72
  315. package/lib/programmers/NestiaMigrateImportProgrammer2.mjs.map +0 -1
  316. package/lib/programmers/NestiaMigrateNestControllerProgrammer2.mjs +0 -52
  317. package/lib/programmers/NestiaMigrateNestControllerProgrammer2.mjs.map +0 -1
  318. package/lib/programmers/NestiaMigrateNestMethodProgrammer2.mjs +0 -229
  319. package/lib/programmers/NestiaMigrateNestMethodProgrammer2.mjs.map +0 -1
  320. package/lib/programmers/NestiaMigrateNestModuleProgrammer2.mjs +0 -32
  321. package/lib/programmers/NestiaMigrateNestModuleProgrammer2.mjs.map +0 -1
  322. package/lib/programmers/NestiaMigrateNestProgrammer2.mjs +0 -78
  323. package/lib/programmers/NestiaMigrateNestProgrammer2.mjs.map +0 -1
  324. package/lib/programmers/NestiaMigrateSchemaProgrammer2.mjs +0 -388
  325. package/lib/programmers/NestiaMigrateSchemaProgrammer2.mjs.map +0 -1
  326. package/lib/programmers/index.mjs.map +0 -1
  327. package/lib/programmers/index2.mjs +0 -71
  328. package/lib/programmers/index2.mjs.map +0 -1
  329. package/lib/structures/INestiaMigrateConfig.mjs.map +0 -1
  330. package/lib/structures/INestiaMigrateConfig2.mjs +0 -6
  331. package/lib/structures/INestiaMigrateConfig2.mjs.map +0 -1
  332. package/lib/structures/INestiaMigrateContext.mjs.map +0 -1
  333. package/lib/structures/INestiaMigrateContext2.mjs +0 -6
  334. package/lib/structures/INestiaMigrateContext2.mjs.map +0 -1
  335. package/lib/structures/INestiaMigrateController.mjs.map +0 -1
  336. package/lib/structures/INestiaMigrateController2.mjs +0 -6
  337. package/lib/structures/INestiaMigrateController2.mjs.map +0 -1
  338. package/lib/structures/INestiaMigrateFile.mjs.map +0 -1
  339. package/lib/structures/INestiaMigrateFile2.mjs +0 -6
  340. package/lib/structures/INestiaMigrateFile2.mjs.map +0 -1
  341. package/lib/structures/index.mjs.map +0 -1
  342. package/lib/structures/index2.mjs +0 -38
  343. package/lib/structures/index2.mjs.map +0 -1
  344. package/lib/utils/FilePrinter2.mjs +0 -28
  345. package/lib/utils/FilePrinter2.mjs.map +0 -1
  346. package/lib/utils/MapUtil2.mjs +0 -18
  347. package/lib/utils/MapUtil2.mjs.map +0 -1
  348. package/lib/utils/StringUtil2.mjs +0 -110
  349. package/lib/utils/StringUtil2.mjs.map +0 -1
@@ -1,349 +1,396 @@
1
- const { version } = require("../../../../package.json");
2
- const cp = require("child_process");
3
- const fs = require("fs");
4
-
5
- const ROOT = `${__dirname}/../..`;
6
- const ASSETS = `${ROOT}/assets`;
7
- const TYPIA = require("js-yaml").load(
8
- fs.readFileSync(`${__dirname}/../../../../pnpm-lock.yaml`, "utf8"),
9
- ).catalogs.samchon;
10
-
11
- const update = (content, options = {}) => {
12
- const parsed = JSON.parse(content);
13
- for (const record of [
14
- parsed.dependencies ?? {},
15
- parsed.devDependencies ?? {},
16
- ])
17
- for (const key of Object.keys(record))
18
- if (key.startsWith("@nestia/") || key === "nestia")
19
- record[key] = `^${version}`;
20
- else if (TYPIA[key]) record[key] = TYPIA[key].specifier;
21
- migratePackageJson(parsed);
22
- if (options.sdkAggregate) {
23
- parsed.devDependencies ??= {};
24
- parsed.devDependencies["@nestia/core"] = `^${version}`;
25
- }
26
- return JSON.stringify(parsed, null, 2);
27
- };
28
-
29
- const migratePackageJson = (parsed) => {
30
- if (parsed.scripts)
31
- for (const [key, value] of Object.entries(parsed.scripts))
32
- if (typeof value === "string")
33
- parsed.scripts[key] = normalizeScript(value);
34
-
35
- if (typeof parsed.scripts?.prepare === "string") {
36
- const prepare = parsed.scripts.prepare
37
- .split("&&")
38
- .map((str) => str.trim())
39
- .filter((str) => str !== "ts-patch install" && str !== "typia patch")
40
- .join(" && ");
41
- if (prepare.length === 0) delete parsed.scripts.prepare;
42
- else parsed.scripts.prepare = prepare;
43
- }
44
-
45
- const devDependencies = parsed.devDependencies;
46
- if (devDependencies) {
47
- const usesTypeScript = typeof devDependencies.typescript === "string";
48
- delete devDependencies["ts-patch"];
49
- delete devDependencies["typescript-transform-paths"];
50
- if (usesTypeScript) devDependencies.ttsc ??= "^0.10.2";
51
- }
52
- };
53
-
54
- const trimTemplateDependencies = (parsed) => {
55
- if (parsed.dependencies) {
56
- delete parsed.dependencies.commander;
57
- delete parsed.dependencies.inquirer;
58
- }
59
- if (parsed.devDependencies) {
60
- delete parsed.devDependencies["@types/inquirer"];
61
- delete parsed.devDependencies.commander;
62
- delete parsed.devDependencies.inquirer;
63
- }
64
- };
65
-
66
- const normalizeScript = (script) =>
67
- script.replace(/(^|[^A-Za-z0-9_-])tsc(?=$|[^A-Za-z0-9_-])/g, "$1ttsc");
68
-
69
- const TYPIA_PLUGIN = `{ "transform": "typia/lib/transform", "enabled": false }`;
70
- const CORE_PLUGIN = `{ "transform": "@nestia/core/native/transform.cjs" }`;
71
-
72
- const ARGUMENT_PARSER = `import { createInterface } from "node:readline/promises";
73
-
74
- export namespace ArgumentParser {
75
- export interface Command {
76
- option: (flags: string, description?: string) => Command;
77
- }
78
-
79
- export interface Prompt {
80
- select: (
81
- name: string,
82
- ) => (
83
- message: string,
84
- ) => <Choice extends string>(choices: Choice[]) => Promise<Choice>;
85
- boolean: (name: string) => (message: string) => Promise<boolean>;
86
- number: (name: string) => (message: string) => Promise<number>;
87
- }
88
-
89
- export const parse = async <T>(
90
- inquiry: (
91
- command: Command,
92
- prompt: Prompt,
93
- action: (closure: (options: Partial<T>) => Promise<T>) => Promise<T>,
94
- ) => Promise<T>,
95
- ): Promise<T> => {
96
- const command: Command = {
97
- option: (_flags: string, _description?: string): Command => command,
98
- };
99
- const action = (closure: (options: Partial<T>) => Promise<T>) =>
100
- closure(parseArguments() as Partial<T>);
101
- return inquiry(
102
- command,
103
- { select, boolean, number },
104
- action,
105
- );
106
- };
107
-
108
- const select =
109
- (_name: string) =>
110
- (message: string) =>
111
- async <Choice extends string>(choices: Choice[]): Promise<Choice> => {
112
- const answer: string = await ask(\`\${message} (\${choices.join("/")})\`);
113
- return (choices.find((choice) => choice === answer) ?? choices[0])!;
114
- };
115
-
116
- const boolean = (_name: string) => async (message: string) =>
117
- /^(true|t|yes|y|1)$/i.test(await ask(\`\${message} [y/N]\`));
118
-
119
- const number = (_name: string) => async (message: string) =>
120
- Number(await ask(message));
121
-
122
- const ask = async (message: string): Promise<string> => {
123
- const reader = createInterface({
124
- input: process.stdin,
125
- output: process.stdout,
126
- });
127
- try {
128
- return (await reader.question(\`\${message}: \`)).trim();
129
- } finally {
130
- reader.close();
131
- }
132
- };
133
-
134
- const parseArguments = (): Record<string, string | string[] | boolean> => {
135
- const output: Record<string, string | string[] | boolean> = {};
136
- const args: string[] = process.argv.slice(2);
137
- for (let i = 0; i < args.length; ++i) {
138
- const raw: string = args[i]!;
139
- if (raw.startsWith("--") === false) continue;
140
-
141
- const equal: number = raw.indexOf("=");
142
- const name: string = toCamelCase(
143
- raw.slice(2, equal === -1 ? undefined : equal),
144
- );
145
- if (equal !== -1) {
146
- assign(output, name, raw.slice(equal + 1));
147
- continue;
148
- }
149
-
150
- const values: string[] = [];
151
- while (i + 1 < args.length && args[i + 1]!.startsWith("--") === false)
152
- values.push(args[++i]!);
153
- assign(
154
- output,
155
- name,
156
- values.length === 0 ? true : values.length === 1 ? values[0]! : values,
157
- );
158
- }
159
- return output;
160
- };
161
-
162
- const assign = (
163
- output: Record<string, string | string[] | boolean>,
164
- name: string,
165
- value: string | string[] | boolean,
166
- ): void => {
167
- const current: string | string[] | boolean | undefined = output[name];
168
- if (current === undefined) output[name] = value;
169
- else
170
- output[name] = [
171
- ...(Array.isArray(current) ? current : [String(current)]),
172
- ...(Array.isArray(value) ? value : [String(value)]),
173
- ];
174
- };
175
-
176
- const toCamelCase = (str: string): string =>
177
- str.replace(/-([a-z])/g, (_matched, letter: string) =>
178
- letter.toUpperCase(),
179
- );
180
- }
181
- `;
182
-
183
- const updateTsConfig = (content, options = {}) => {
184
- content = content.replace(
185
- /^\s*\{\s*"transform":\s*"typescript-transform-paths"\s*\},\n/gm,
186
- "",
187
- );
188
- if (options.disableTypia)
189
- content = content.replace(
190
- /\{\s*"transform":\s*"typia\/lib\/transform"\s*\}/g,
191
- TYPIA_PLUGIN,
192
- );
193
- if (options.useNestiaAggregate)
194
- content = content.replace(
195
- /\{\s*"transform":\s*"@nestia\/core\/lib\/transform"\s*\}/g,
196
- CORE_PLUGIN,
197
- );
198
- content = content.replace(
199
- /^\s*\{\s*"transform":\s*"@nestia\/sdk\/lib\/transform"\s*\},\n/gm,
200
- "",
201
- );
202
- if (
203
- options.useNestiaAggregate &&
204
- content.includes(`"@nestia/core/native/transform.cjs"`) === false
205
- )
206
- content = content.replace(
207
- /\{\s*"transform":\s*"typia\/lib\/transform",\s*"enabled":\s*false\s*\},/g,
208
- `${TYPIA_PLUGIN},\n ${CORE_PLUGIN},`,
209
- );
210
- return content;
211
- };
212
-
213
- const bundle = async ({ mode, repository, exceptions, transform }) => {
214
- const root = `${__dirname}/../..`;
215
- const assets = `${root}/assets`;
216
- const template = `${assets}/${mode}`;
217
-
218
- const clone = async () => {
219
- // CLONE REPOSITORY
220
- if (fs.existsSync(template))
221
- await fs.promises.rm(template, { recursive: true });
222
- else
223
- try {
224
- await fs.promises.mkdir(ASSETS);
225
- } catch {}
226
-
227
- cp.execSync(`git clone https://github.com/samchon/${repository} ${mode}`, {
228
- cwd: ASSETS,
229
- });
230
-
231
- // REMOVE VULNERABLE FILES
232
- for (const location of exceptions ?? [])
233
- await fs.promises.rm(`${template}/${location}`, { recursive: true });
234
- };
235
-
236
- const iterate = (collection) => async (location) => {
237
- const directory = await fs.promises.readdir(location);
238
- for (const file of directory) {
239
- const absolute = location + "/" + file;
240
- const stats = await fs.promises.stat(absolute);
241
- if (stats.isDirectory()) await iterate(collection)(absolute);
242
- else {
243
- const content = await fs.promises.readFile(absolute, "utf-8");
244
- collection[
245
- (() => {
246
- const str = absolute.replace(template, "");
247
- return str[0] === "/" ? str.substring(1) : str;
248
- })()
249
- ] = content;
250
- }
251
- }
252
- };
253
-
254
- const archive = async (collection) => {
255
- const name = `${mode.toUpperCase()}_TEMPLATE`;
256
- const body = JSON.stringify(collection, null, 2);
257
- const content = `export const ${name}: Record<string, string> = ${body}`;
258
-
259
- try {
260
- await fs.promises.mkdir(`${ROOT}/src/bundles`);
261
- } catch {}
262
- await fs.promises.writeFile(
263
- `${ROOT}/src/bundles/${name}.ts`,
264
- content,
265
- "utf8",
266
- );
267
- };
268
-
269
- const collection = {};
270
- await clone();
271
- await iterate(collection)(template);
272
- if (transform)
273
- for (const [key, value] of Object.entries(collection))
274
- collection[key] = await writeTransformedAsset(
275
- template,
276
- key,
277
- transform(key, value),
278
- );
279
- await archive(collection);
280
- };
281
-
282
- const writeTransformedAsset = async (template, key, value) => {
283
- await fs.promises.writeFile(`${template}/${key}`, value, "utf8");
284
- return value;
285
- };
286
-
287
- const main = async () => {
288
- await bundle({
289
- mode: "nest",
290
- repository: "nestia-start",
291
- exceptions: [
292
- ".git",
293
- ".github/dependabot.yml",
294
- ".github/workflows/dependabot-automerge.yml",
295
- "src/api/functional",
296
- "src/controllers",
297
- "src/MyModule.ts",
298
- "src/providers",
299
- "test/features",
300
- ],
301
- transform: (key, value) => {
302
- if (key.endsWith("package.json")) {
303
- const parsed = JSON.parse(update(value));
304
- trimTemplateDependencies(parsed);
305
- return JSON.stringify(parsed, null, 2);
306
- }
307
- if (key === "test/helpers/ArgumentParser.ts") return ARGUMENT_PARSER;
308
- if (key.endsWith("tsconfig.json"))
309
- return updateTsConfig(value, {
310
- disableTypia: true,
311
- useNestiaAggregate: key === "tsconfig.json",
312
- });
313
- return value;
314
- },
315
- });
316
- await bundle({
317
- mode: "sdk",
318
- repository: "nestia-sdk-template",
319
- exceptions: [
320
- ".git",
321
- ".github/dependabot.yml",
322
- ".github/workflows/build.yml",
323
- ".github/workflows/dependabot-automerge.yml",
324
- "src/functional",
325
- "src/structures",
326
- "test/features",
327
- ],
328
- transform: (key, value) => {
329
- if (key.endsWith("package.json")) {
330
- const parsed = JSON.parse(
331
- update(value, { sdkAggregate: key === "package.json" }),
332
- );
333
- trimTemplateDependencies(parsed);
334
- return JSON.stringify(parsed, null, 2);
335
- }
336
- if (key === "test/utils/ArgumentParser.ts") return ARGUMENT_PARSER;
337
- if (key.endsWith("tsconfig.json"))
338
- return updateTsConfig(value, {
339
- disableTypia: true,
340
- useNestiaAggregate: true,
341
- });
342
- return value;
343
- },
344
- });
345
- };
346
- main().catch((exp) => {
347
- console.error(exp);
348
- process.exit(-1);
349
- });
1
+ const { version } = require("../../../../package.json");
2
+ const cp = require("child_process");
3
+ const fs = require("fs");
4
+
5
+ const ROOT = `${__dirname}/../..`;
6
+ const ASSETS = `${ROOT}/assets`;
7
+ const CATALOGS = require("js-yaml").load(
8
+ fs.readFileSync(`${__dirname}/../../../../pnpm-lock.yaml`, "utf8"),
9
+ ).catalogs;
10
+ const TYPIA = CATALOGS.samchon;
11
+ const TYPESCRIPT = CATALOGS.typescript ?? {};
12
+
13
+ const update = (content, options = {}) => {
14
+ const parsed = JSON.parse(content);
15
+ for (const record of [
16
+ parsed.dependencies ?? {},
17
+ parsed.devDependencies ?? {},
18
+ ])
19
+ for (const key of Object.keys(record)) {
20
+ const current = record[key];
21
+ // `catalog:` / `workspace:` specifiers already carry their versions
22
+ // through pnpm-workspace.yaml, which gets its own stamping pass.
23
+ if (
24
+ typeof current === "string" &&
25
+ (current.startsWith("catalog:") || current.startsWith("workspace:"))
26
+ )
27
+ continue;
28
+ if (key.startsWith("@nestia/") || key === "nestia")
29
+ record[key] = `^${version}`;
30
+ else if (TYPIA[key]) record[key] = TYPIA[key].specifier;
31
+ }
32
+ migratePackageJson(parsed);
33
+ if (options.sdkAggregate) {
34
+ parsed.devDependencies ??= {};
35
+ parsed.devDependencies["@nestia/core"] = `^${version}`;
36
+ }
37
+ return JSON.stringify(parsed, null, 2);
38
+ };
39
+
40
+ const migratePackageJson = (parsed) => {
41
+ if (parsed.scripts)
42
+ for (const [key, value] of Object.entries(parsed.scripts))
43
+ if (typeof value === "string")
44
+ parsed.scripts[key] = normalizeScript(value);
45
+
46
+ const devDependencies = parsed.devDependencies;
47
+ if (devDependencies) {
48
+ const usesTypeScript =
49
+ typeof devDependencies.typescript === "string" &&
50
+ devDependencies.typescript.startsWith("catalog:") === false;
51
+ delete devDependencies["typescript-transform-paths"];
52
+ // Single-package templates compiling with a direct typescript dependency
53
+ // need the ttsc compiler this repository currently builds against.
54
+ if (usesTypeScript && TYPESCRIPT.ttsc)
55
+ devDependencies.ttsc ??= TYPESCRIPT.ttsc.specifier;
56
+ }
57
+ };
58
+
59
+ // Stamp the template's pnpm-workspace.yaml catalogs with this repository's
60
+ // current versions. The rewriting is line-targeted on purpose: the samchon
61
+ // catalog relies on YAML anchors (`nestia: &nestia ...` aliased by the
62
+ // `@nestia/*` entries), and a parse/dump round trip would inline and destroy
63
+ // them.
64
+ const updateWorkspaceCatalog = (content) => {
65
+ const replace = (line, name, specifier) => {
66
+ if (typeof specifier !== "string") return line;
67
+ const match = line.match(
68
+ new RegExp(`^(\\s+${name}: (?:&[A-Za-z0-9_-]+ )?)\\S[^\\r\\n]*(\\r?)$`),
69
+ );
70
+ return match === null ? line : `${match[1]}${specifier}${match[2]}`;
71
+ };
72
+ return content
73
+ .split("\n")
74
+ .map((line) => {
75
+ line = replace(line, "nestia", `^${version}`);
76
+ for (const name of ["tgrid", "tstl", "typia"])
77
+ line = replace(line, name, TYPIA[name]?.specifier);
78
+ for (const name of ["ttsc", "typescript"])
79
+ line = replace(line, name, TYPESCRIPT[name]?.specifier);
80
+ return line;
81
+ })
82
+ .join("\n");
83
+ };
84
+
85
+ const trimTemplateDependencies = (parsed) => {
86
+ if (parsed.dependencies) {
87
+ delete parsed.dependencies.commander;
88
+ delete parsed.dependencies.inquirer;
89
+ }
90
+ if (parsed.devDependencies) {
91
+ delete parsed.devDependencies["@types/inquirer"];
92
+ delete parsed.devDependencies.commander;
93
+ delete parsed.devDependencies.inquirer;
94
+ }
95
+ };
96
+
97
+ const normalizeScript = (script) =>
98
+ script.replace(/(^|[^A-Za-z0-9_-])tsc(?=$|[^A-Za-z0-9_-])/g, "$1ttsc");
99
+
100
+ const ARGUMENT_PARSER = `import { createInterface } from "node:readline/promises";
101
+
102
+ export namespace ArgumentParser {
103
+ export interface Command {
104
+ option: (flags: string, description?: string) => Command;
105
+ }
106
+
107
+ export interface Prompt {
108
+ select: (
109
+ name: string,
110
+ ) => (
111
+ message: string,
112
+ ) => <Choice extends string>(choices: Choice[]) => Promise<Choice>;
113
+ boolean: (name: string) => (message: string) => Promise<boolean>;
114
+ number: (name: string) => (message: string) => Promise<number>;
115
+ }
116
+
117
+ export const parse = async <T>(
118
+ inquiry: (
119
+ command: Command,
120
+ prompt: Prompt,
121
+ action: (closure: (options: Partial<T>) => Promise<T>) => Promise<T>,
122
+ ) => Promise<T>,
123
+ ): Promise<T> => {
124
+ const command: Command = {
125
+ option: (_flags: string, _description?: string): Command => command,
126
+ };
127
+ const action = (closure: (options: Partial<T>) => Promise<T>) =>
128
+ closure(parseArguments() as Partial<T>);
129
+ return inquiry(
130
+ command,
131
+ { select, boolean, number },
132
+ action,
133
+ );
134
+ };
135
+
136
+ const select =
137
+ (_name: string) =>
138
+ (message: string) =>
139
+ async <Choice extends string>(choices: Choice[]): Promise<Choice> => {
140
+ const answer: string = await ask(\`\${message} (\${choices.join("/")})\`);
141
+ return (choices.find((choice) => choice === answer) ?? choices[0])!;
142
+ };
143
+
144
+ const boolean = (_name: string) => async (message: string) =>
145
+ /^(true|t|yes|y|1)$/i.test(await ask(\`\${message} [y/N]\`));
146
+
147
+ const number = (_name: string) => async (message: string) =>
148
+ Number(await ask(message));
149
+
150
+ const ask = async (message: string): Promise<string> => {
151
+ const reader = createInterface({
152
+ input: process.stdin,
153
+ output: process.stdout,
154
+ });
155
+ try {
156
+ return (await reader.question(\`\${message}: \`)).trim();
157
+ } finally {
158
+ reader.close();
159
+ }
160
+ };
161
+
162
+ const parseArguments = (): Record<string, string | string[] | boolean> => {
163
+ const output: Record<string, string | string[] | boolean> = {};
164
+ const args: string[] = process.argv.slice(2);
165
+ for (let i = 0; i < args.length; ++i) {
166
+ const raw: string = args[i]!;
167
+ if (raw.startsWith("--") === false) continue;
168
+
169
+ const equal: number = raw.indexOf("=");
170
+ const name: string = toCamelCase(
171
+ raw.slice(2, equal === -1 ? undefined : equal),
172
+ );
173
+ if (equal !== -1) {
174
+ assign(output, name, raw.slice(equal + 1));
175
+ continue;
176
+ }
177
+
178
+ const values: string[] = [];
179
+ while (i + 1 < args.length && args[i + 1]!.startsWith("--") === false)
180
+ values.push(args[++i]!);
181
+ assign(
182
+ output,
183
+ name,
184
+ values.length === 0 ? true : values.length === 1 ? values[0]! : values,
185
+ );
186
+ }
187
+ return output;
188
+ };
189
+
190
+ const assign = (
191
+ output: Record<string, string | string[] | boolean>,
192
+ name: string,
193
+ value: string | string[] | boolean,
194
+ ): void => {
195
+ const current: string | string[] | boolean | undefined = output[name];
196
+ if (current === undefined) output[name] = value;
197
+ else
198
+ output[name] = [
199
+ ...(Array.isArray(current) ? current : [String(current)]),
200
+ ...(Array.isArray(value) ? value : [String(value)]),
201
+ ];
202
+ };
203
+
204
+ const toCamelCase = (str: string): string =>
205
+ str.replace(/-([a-z])/g, (_matched, letter: string) =>
206
+ letter.toUpperCase(),
207
+ );
208
+ }
209
+ `;
210
+
211
+ const updateTsConfig = (content) => {
212
+ content = content.replace(
213
+ /^\s*\{\s*"transform":\s*"typescript-transform-paths"\s*\},\r?\n/gm,
214
+ "",
215
+ );
216
+ content = content.replace(
217
+ /^\s*\{\s*"transform":\s*"typia\/lib\/transform"(?:,\s*"enabled":\s*false)?\s*\},?\r?\n/gm,
218
+ "",
219
+ );
220
+ content = content.replace(
221
+ /^\s*\{\s*"transform":\s*"@nestia\/core\/lib\/transform"\s*\},?\r?\n/gm,
222
+ "",
223
+ );
224
+ content = content.replace(
225
+ /^\s*\{\s*"transform":\s*"@nestia\/core\/native\/transform\.cjs"\s*\},?\r?\n/gm,
226
+ "",
227
+ );
228
+ content = content.replace(
229
+ /^\s*\{\s*"transform":\s*"@nestia\/sdk\/lib\/transform"\s*\},\r?\n/gm,
230
+ "",
231
+ );
232
+ return content;
233
+ };
234
+
235
+ const bundle = async ({
236
+ mode,
237
+ repository,
238
+ revision,
239
+ exceptions,
240
+ transform,
241
+ }) => {
242
+ const root = `${__dirname}/../..`;
243
+ const assets = `${root}/assets`;
244
+ const template = `${assets}/${mode}`;
245
+
246
+ const clone = async () => {
247
+ // CLONE REPOSITORY
248
+ if (fs.existsSync(template))
249
+ await fs.promises.rm(template, { recursive: true });
250
+ else
251
+ try {
252
+ await fs.promises.mkdir(ASSETS);
253
+ } catch {}
254
+
255
+ // Disable line-ending conversion so the bundled template is byte-identical
256
+ // on every platform: with core.autocrlf=true (the common Windows default)
257
+ // the checkout would rewrite LF to CRLF and break the line-targeted
258
+ // transforms below.
259
+ cp.execSync(
260
+ `git clone --config core.autocrlf=false https://github.com/samchon/${repository} ${mode}`,
261
+ {
262
+ cwd: ASSETS,
263
+ },
264
+ );
265
+ // The template repositories are live projects; an unpinned clone lets any
266
+ // upstream push break this build (samchon/nestia-start#632 did exactly
267
+ // that), so every bundle checks out a reviewed revision.
268
+ cp.execSync(`git checkout ${revision}`, {
269
+ cwd: template,
270
+ stdio: "pipe",
271
+ });
272
+
273
+ // REMOVE VULNERABLE FILES
274
+ for (const location of exceptions ?? [])
275
+ await fs.promises.rm(`${template}/${location}`, { recursive: true });
276
+ };
277
+
278
+ const iterate = (collection) => async (location) => {
279
+ const directory = await fs.promises.readdir(location);
280
+ for (const file of directory) {
281
+ const absolute = location + "/" + file;
282
+ const stats = await fs.promises.stat(absolute);
283
+ if (stats.isDirectory()) await iterate(collection)(absolute);
284
+ else {
285
+ const content = await fs.promises.readFile(absolute, "utf-8");
286
+ collection[
287
+ (() => {
288
+ const str = absolute.replace(template, "");
289
+ return str[0] === "/" ? str.substring(1) : str;
290
+ })()
291
+ ] = content;
292
+ }
293
+ }
294
+ };
295
+
296
+ const archive = async (collection) => {
297
+ const name = `${mode.toUpperCase()}_TEMPLATE`;
298
+ const body = JSON.stringify(collection, null, 2);
299
+ const content = `export const ${name}: Record<string, string> = ${body}`;
300
+
301
+ try {
302
+ await fs.promises.mkdir(`${ROOT}/src/bundles`);
303
+ } catch {}
304
+ await fs.promises.writeFile(
305
+ `${ROOT}/src/bundles/${name}.ts`,
306
+ content,
307
+ "utf8",
308
+ );
309
+ };
310
+
311
+ const collection = {};
312
+ await clone();
313
+ await iterate(collection)(template);
314
+ if (transform)
315
+ for (const [key, value] of Object.entries(collection))
316
+ collection[key] = await writeTransformedAsset(
317
+ template,
318
+ key,
319
+ transform(key, value),
320
+ );
321
+ await archive(collection);
322
+ };
323
+
324
+ const writeTransformedAsset = async (template, key, value) => {
325
+ await fs.promises.writeFile(`${template}/${key}`, value, "utf8");
326
+ return value;
327
+ };
328
+
329
+ const main = async () => {
330
+ await bundle({
331
+ mode: "nest",
332
+ repository: "nestia-start",
333
+ // The pnpm monorepo restructuring of nestia-start (samchon/nestia-start#632,
334
+ // #634, #635) is now the layout the migrate programmers emit. This revision
335
+ // is the first monorepo commit whose config package is consumed through
336
+ // workspace dependencies, so the archive works with a plain `pnpm install`.
337
+ revision: "314d77f2e4ef41b18ba1ab7d14ba97f5f74897f3",
338
+ exceptions: [
339
+ ".git",
340
+ ".github/dependabot.yml",
341
+ ".github/workflows/dependabot-automerge.yml",
342
+ // The template's lockfile resolves the catalog versions that the
343
+ // stamping below rewrites; shipping it would only bloat NEST_TEMPLATE
344
+ // with 160 KB of immediately-stale data.
345
+ "pnpm-lock.yaml",
346
+ "packages/api/src/functional",
347
+ "packages/api/src/structures",
348
+ "packages/backend/src/MyModule.ts",
349
+ "packages/backend/src/controllers",
350
+ "packages/backend/src/providers",
351
+ "packages/backend/test/features",
352
+ ],
353
+ transform: (key, value) => {
354
+ if (key.endsWith("package.json")) {
355
+ const parsed = JSON.parse(update(value));
356
+ trimTemplateDependencies(parsed);
357
+ return JSON.stringify(parsed, null, 2);
358
+ }
359
+ if (key === "pnpm-workspace.yaml") return updateWorkspaceCatalog(value);
360
+ if (key === "packages/backend/test/helpers/ArgumentParser.ts")
361
+ return ARGUMENT_PARSER;
362
+ if (key.endsWith("tsconfig.json")) return updateTsConfig(value);
363
+ return value;
364
+ },
365
+ });
366
+ await bundle({
367
+ mode: "sdk",
368
+ repository: "nestia-sdk-template",
369
+ revision: "8cfb771ea2bdc1692ce256863a0ada49990214a8",
370
+ exceptions: [
371
+ ".git",
372
+ ".github/dependabot.yml",
373
+ ".github/workflows/build.yml",
374
+ ".github/workflows/dependabot-automerge.yml",
375
+ "src/functional",
376
+ "src/structures",
377
+ "test/features",
378
+ ],
379
+ transform: (key, value) => {
380
+ if (key.endsWith("package.json")) {
381
+ const parsed = JSON.parse(
382
+ update(value, { sdkAggregate: key === "package.json" }),
383
+ );
384
+ trimTemplateDependencies(parsed);
385
+ return JSON.stringify(parsed, null, 2);
386
+ }
387
+ if (key === "test/utils/ArgumentParser.ts") return ARGUMENT_PARSER;
388
+ if (key.endsWith("tsconfig.json")) return updateTsConfig(value);
389
+ return value;
390
+ },
391
+ });
392
+ };
393
+ main().catch((exp) => {
394
+ console.error(exp);
395
+ process.exit(-1);
396
+ });