@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,475 +1,472 @@
1
- import { SyntaxKind, factory } from "@ttsc/factory";
2
- import * as typiaUtils from "@typia/utils";
3
- import type { OpenApi } from "typia";
4
-
5
- import { FormatCheatSheet } from "../factories/FormatCheatSheet";
6
- import { TypeFactory } from "../factories/TypeFactory";
7
- import ts from "../internal/ts";
8
- import { FilePrinter } from "../utils/FilePrinter";
9
- import { StringUtil } from "../utils/StringUtil";
10
- import { NestiaMigrateImportProgrammer } from "./NestiaMigrateImportProgrammer";
11
-
12
- const { NamingConvention, OpenApiTypeChecker } =
13
- (typiaUtils as { default?: typeof typiaUtils }).default ?? typiaUtils;
14
-
15
- export namespace NestiaMigrateSchemaProgrammer {
16
- /* -----------------------------------------------------------
17
- FACADE
18
- ----------------------------------------------------------- */
19
- export const write = (props: {
20
- components: OpenApi.IComponents;
21
- importer: NestiaMigrateImportProgrammer;
22
- schema: OpenApi.IJsonSchema;
23
- }): ts.TypeNode => {
24
- // CONSIDER ANY TYPE CASE
25
- const union: ts.TypeNode[] = [];
26
- if (OpenApiTypeChecker.isUnknown(props.schema))
27
- return TypeFactory.keyword("any");
28
-
29
- // ITERATION
30
- const type: ts.TypeNode = (() => {
31
- // ATOMIC
32
- if (OpenApiTypeChecker.isConstant(props.schema))
33
- return writeConstant({
34
- importer: props.importer,
35
- schema: props.schema,
36
- });
37
- else if (OpenApiTypeChecker.isBoolean(props.schema))
38
- return writeBoolean();
39
- else if (OpenApiTypeChecker.isInteger(props.schema))
40
- return writeInteger({
41
- importer: props.importer,
42
- schema: props.schema,
43
- });
44
- else if (OpenApiTypeChecker.isNumber(props.schema))
45
- return writeNumber({
46
- importer: props.importer,
47
- schema: props.schema,
48
- });
49
- else if (OpenApiTypeChecker.isString(props.schema))
50
- return writeString({
51
- importer: props.importer,
52
- schema: props.schema,
53
- });
54
- // INSTANCES
55
- else if (OpenApiTypeChecker.isArray(props.schema))
56
- return writeArray({
57
- components: props.components,
58
- importer: props.importer,
59
- schema: props.schema,
60
- });
61
- else if (OpenApiTypeChecker.isTuple(props.schema))
62
- return writeTuple({
63
- components: props.components,
64
- importer: props.importer,
65
- schema: props.schema,
66
- });
67
- else if (OpenApiTypeChecker.isObject(props.schema))
68
- return writeObject({
69
- components: props.components,
70
- importer: props.importer,
71
- schema: props.schema,
72
- });
73
- else if (OpenApiTypeChecker.isReference(props.schema))
74
- return writeReference({
75
- importer: props.importer,
76
- schema: props.schema,
77
- });
78
- // UNION
79
- else if (OpenApiTypeChecker.isOneOf(props.schema))
80
- return writeUnion({
81
- components: props.components,
82
- importer: props.importer,
83
- elements: props.schema.oneOf,
84
- });
85
- else if (OpenApiTypeChecker.isNull(props.schema))
86
- return createNode("null");
87
- else return TypeFactory.keyword("any");
88
- })();
89
- union.push(type);
90
-
91
- // DETERMINE
92
- if (union.length === 0) return TypeFactory.keyword("any");
93
- else if (union.length === 1) return union[0]!;
94
- return factory.createUnionTypeNode(union);
95
- };
96
-
97
- /* -----------------------------------------------------------
98
- ATOMICS
99
- ----------------------------------------------------------- */
100
- const writeConstant = (props: {
101
- importer: NestiaMigrateImportProgrammer;
102
- schema: OpenApi.IJsonSchema.IConstant;
103
- }): ts.TypeNode => {
104
- return factory.createLiteralTypeNode(
105
- typeof props.schema.const === "boolean"
106
- ? props.schema.const === true
107
- ? factory.createTrue()
108
- : factory.createFalse()
109
- : typeof props.schema.const === "number"
110
- ? props.schema.const < 0
111
- ? factory.createPrefixUnaryExpression(
112
- SyntaxKind.MinusToken,
113
- factory.createNumericLiteral(-props.schema.const),
114
- )
115
- : factory.createNumericLiteral(props.schema.const)
116
- : factory.createStringLiteral(props.schema.const),
117
- );
118
- };
119
-
120
- const writeBoolean = (): ts.TypeNode => TypeFactory.keyword("boolean");
121
-
122
- const writeInteger = (props: {
123
- importer: NestiaMigrateImportProgrammer;
124
- schema: OpenApi.IJsonSchema.IInteger;
125
- }): ts.TypeNode =>
126
- writeNumeric({
127
- factory: () => [
128
- TypeFactory.keyword("number"),
129
- props.importer.tag("Type", "int32"),
130
- ],
131
- importer: props.importer,
132
- schema: props.schema,
133
- });
134
-
135
- const writeNumber = (props: {
136
- importer: NestiaMigrateImportProgrammer;
137
- schema: OpenApi.IJsonSchema.INumber;
138
- }): ts.TypeNode =>
139
- writeNumeric({
140
- factory: () => [TypeFactory.keyword("number")],
141
- importer: props.importer,
142
- schema: props.schema,
143
- });
144
-
145
- const writeNumeric = (props: {
146
- factory: () => ts.TypeNode[];
147
- importer: NestiaMigrateImportProgrammer;
148
- schema: OpenApi.IJsonSchema.IInteger | OpenApi.IJsonSchema.INumber;
149
- }): ts.TypeNode => {
150
- const intersection: ts.TypeNode[] = props.factory();
151
- if (props.schema.default !== undefined)
152
- intersection.push(props.importer.tag("Default", props.schema.default));
153
- if (props.schema.minimum !== undefined)
154
- intersection.push(
155
- props.importer.tag(
156
- props.schema.exclusiveMinimum ? "ExclusiveMinimum" : "Minimum",
157
- props.schema.minimum,
158
- ),
159
- );
160
- if (props.schema.maximum !== undefined)
161
- intersection.push(
162
- props.importer.tag(
163
- props.schema.exclusiveMaximum ? "ExclusiveMaximum" : "Maximum",
164
- props.schema.maximum,
165
- ),
166
- );
167
- if (props.schema.multipleOf !== undefined)
168
- intersection.push(
169
- props.importer.tag("MultipleOf", props.schema.multipleOf),
170
- );
171
- return intersection.length === 1
172
- ? intersection[0]!
173
- : factory.createIntersectionTypeNode(intersection);
174
- };
175
-
176
- const writeString = (props: {
177
- importer: NestiaMigrateImportProgrammer;
178
- schema: OpenApi.IJsonSchema.IString;
179
- }): ts.TypeNode => {
180
- if (props.schema.format === "binary")
181
- return factory.createTypeReferenceNode("File");
182
-
183
- const intersection: ts.TypeNode[] = [TypeFactory.keyword("string")];
184
- if (props.schema.default !== undefined)
185
- intersection.push(props.importer.tag("Default", props.schema.default));
186
- if (props.schema.minLength !== undefined)
187
- intersection.push(
188
- props.importer.tag("MinLength", props.schema.minLength),
189
- );
190
- if (props.schema.maxLength !== undefined)
191
- intersection.push(
192
- props.importer.tag("MaxLength", props.schema.maxLength),
193
- );
194
- if (props.schema.pattern !== undefined)
195
- intersection.push(props.importer.tag("Pattern", props.schema.pattern));
196
- if (
197
- props.schema.format !== undefined &&
198
- (FormatCheatSheet as Record<string, string>)[props.schema.format] !==
199
- undefined
200
- )
201
- intersection.push(props.importer.tag("Format", props.schema.format));
202
- if (props.schema.contentMediaType !== undefined)
203
- intersection.push(
204
- props.importer.tag("ContentMediaType", props.schema.contentMediaType),
205
- );
206
- return intersection.length === 1
207
- ? intersection[0]!
208
- : factory.createIntersectionTypeNode(intersection);
209
- };
210
-
211
- /* -----------------------------------------------------------
212
- INSTANCES
213
- ----------------------------------------------------------- */
214
- const writeArray = (props: {
215
- components: OpenApi.IComponents;
216
- importer: NestiaMigrateImportProgrammer;
217
- schema: OpenApi.IJsonSchema.IArray;
218
- }): ts.TypeNode => {
219
- const intersection: ts.TypeNode[] = [
220
- factory.createArrayTypeNode(
221
- write({
222
- components: props.components,
223
- importer: props.importer,
224
- schema: props.schema.items,
225
- }),
226
- ),
227
- ];
228
- if (props.schema.minItems !== undefined)
229
- intersection.push(props.importer.tag("MinItems", props.schema.minItems));
230
- if (props.schema.maxItems !== undefined)
231
- intersection.push(props.importer.tag("MaxItems", props.schema.maxItems));
232
- if (props.schema.uniqueItems === true)
233
- intersection.push(props.importer.tag("UniqueItems"));
234
- return intersection.length === 1
235
- ? intersection[0]!
236
- : factory.createIntersectionTypeNode(intersection);
237
- };
238
-
239
- const writeTuple = (props: {
240
- components: OpenApi.IComponents;
241
- importer: NestiaMigrateImportProgrammer;
242
- schema: OpenApi.IJsonSchema.ITuple;
243
- }): ts.TypeNode =>
244
- factory.createTupleTypeNode([
245
- ...props.schema.prefixItems.map((item) =>
246
- write({
247
- components: props.components,
248
- importer: props.importer,
249
- schema: item,
250
- }),
251
- ),
252
- ...(typeof props.schema.additionalItems === "object" &&
253
- props.schema.additionalItems !== null
254
- ? [
255
- factory.createRestTypeNode(
256
- write({
257
- components: props.components,
258
- importer: props.importer,
259
- schema: props.schema.additionalItems,
260
- }),
261
- ),
262
- ]
263
- : props.schema.additionalItems === true
264
- ? [
265
- factory.createRestTypeNode(
266
- factory.createArrayTypeNode(
267
- factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
268
- ),
269
- ),
270
- ]
271
- : []),
272
- ]);
273
-
274
- const writeObject = (props: {
275
- components: OpenApi.IComponents;
276
- importer: NestiaMigrateImportProgrammer;
277
- schema: OpenApi.IJsonSchema.IObject;
278
- }): ts.TypeNode => {
279
- const regular = () =>
280
- factory.createTypeLiteralNode(
281
- Object.entries(props.schema.properties ?? [])
282
- .map(([key, value], index) => [
283
- ...(index !== 0 &&
284
- (!!value.title?.length || !!value.description?.length)
285
- ? [factory.createIdentifier("\n") as any]
286
- : []),
287
- writeRegularProperty({
288
- components: props.components,
289
- importer: props.importer,
290
- required: props.schema.required ?? [],
291
- key,
292
- value,
293
- }),
294
- ])
295
- .flat(),
296
- );
297
- const dynamic = () =>
298
- factory.createTypeLiteralNode([
299
- writeDynamicProperty({
300
- components: props.components,
301
- importer: props.importer,
302
- schema: props.schema.additionalProperties as OpenApi.IJsonSchema,
303
- }),
304
- ]);
305
- return !!props.schema.properties?.length &&
306
- typeof props.schema.additionalProperties === "object"
307
- ? factory.createIntersectionTypeNode([regular(), dynamic()])
308
- : typeof props.schema.additionalProperties === "object"
309
- ? dynamic()
310
- : regular();
311
- };
312
-
313
- const writeRegularProperty = (props: {
314
- components: OpenApi.IComponents;
315
- importer: NestiaMigrateImportProgrammer;
316
- required: string[];
317
- key: string;
318
- value: OpenApi.IJsonSchema;
319
- }) => {
320
- const valueTypeNode: ts.TypeNode = write({
321
- components: props.components,
322
- importer: props.importer,
323
- schema: props.value,
324
- });
325
- return FilePrinter.description(
326
- factory.createPropertySignature(
327
- props.value.readOnly
328
- ? [factory.createToken(SyntaxKind.ReadonlyKeyword)]
329
- : undefined,
330
- NamingConvention.variable(props.key)
331
- ? factory.createIdentifier(props.key)
332
- : factory.createStringLiteral(props.key),
333
- props.required.includes(props.key)
334
- ? undefined
335
- : factory.createToken(SyntaxKind.QuestionToken),
336
- props.required.includes(props.key)
337
- ? valueTypeNode
338
- : ts.isUnionTypeNode(valueTypeNode)
339
- ? factory.createUnionTypeNode([
340
- ...(valueTypeNode.types ?? []),
341
- factory.createTypeReferenceNode("undefined"),
342
- ])
343
- : factory.createUnionTypeNode([
344
- valueTypeNode,
345
- factory.createTypeReferenceNode("undefined"),
346
- ]),
347
- ),
348
- writeComment(props.value),
349
- );
350
- };
351
-
352
- const writeDynamicProperty = (props: {
353
- components: OpenApi.IComponents;
354
- importer: NestiaMigrateImportProgrammer;
355
- schema: OpenApi.IJsonSchema;
356
- }) =>
357
- FilePrinter.description(
358
- factory.createIndexSignature(
359
- undefined,
360
- [
361
- factory.createParameterDeclaration(
362
- undefined,
363
- undefined,
364
- factory.createIdentifier("key"),
365
- undefined,
366
- TypeFactory.keyword("string"),
367
- ),
368
- ],
369
- write(props),
370
- ),
371
- writeComment(props.schema),
372
- );
373
-
374
- const writeReference = (props: {
375
- importer: NestiaMigrateImportProgrammer;
376
- schema: OpenApi.IJsonSchema.IReference;
377
- }): ts.TypeReferenceNode | ts.KeywordTypeNode => {
378
- if (props.schema.$ref.startsWith("#/components/schemas") === false)
379
- return TypeFactory.keyword("any");
380
- const name: string = props.schema.$ref
381
- .split("/")
382
- .slice(3)
383
- .filter((str) => str.length !== 0)
384
- .map(StringUtil.escapeNonVariable)
385
- .join("");
386
- if (name === "") return TypeFactory.keyword("any");
387
- return props.importer.dto(name);
388
- };
389
-
390
- /* -----------------------------------------------------------
391
- UNIONS
392
- ----------------------------------------------------------- */
393
- const writeUnion = (props: {
394
- components: OpenApi.IComponents;
395
- importer: NestiaMigrateImportProgrammer;
396
- elements: OpenApi.IJsonSchema[];
397
- }): ts.UnionTypeNode =>
398
- factory.createUnionTypeNode(
399
- props.elements.map((schema) =>
400
- write({
401
- components: props.components,
402
- importer: props.importer,
403
- schema,
404
- }),
405
- ),
406
- );
407
- }
408
- const createNode = (text: string) => factory.createTypeReferenceNode(text);
409
-
410
- const writeComment = (schema: OpenApi.IJsonSchema): string => {
411
- interface IPlugin {
412
- key: string;
413
- value: undefined | string | number | boolean;
414
- }
415
- const plugins: IPlugin[] = [];
416
- if (schema.title !== undefined)
417
- plugins.push({
418
- key: "title",
419
- value: schema.title,
420
- });
421
- if (schema.deprecated === true)
422
- plugins.push({
423
- key: "deprecated",
424
- value: undefined,
425
- });
426
- for (const [key, value] of Object.entries(schema))
427
- if (key.startsWith("x-") && isExtensionValue(value))
428
- plugins.push({
429
- key,
430
- value,
431
- });
432
- return [
433
- ...(schema.description?.length
434
- ? [eraseCommentTags(schema.description)]
435
- : []),
436
- ...(schema.description?.length && plugins.length !== 0 ? [""] : []),
437
- ...plugins.map((p) =>
438
- p.value === undefined ? `@${p.key}` : `@${p.key} ${String(p.value)}`,
439
- ),
440
- ].join("\n");
441
- };
442
-
443
- const isExtensionValue = (value: unknown): value is boolean | number | string =>
444
- typeof value === "boolean" ||
445
- typeof value === "number" ||
446
- typeof value === "string";
447
-
448
- const eraseCommentTags = (description: string): string => {
449
- const lines: string[] = description.split("\n");
450
- return lines
451
- .filter((s) => COMMENT_TAGS.every((tag) => !s.includes(tag)))
452
- .join("\n");
453
- };
454
-
455
- const COMMENT_TAGS = [
456
- // string
457
- "@format",
458
- "@pattern",
459
- "@length",
460
- "@minLength",
461
- "@maxLength",
462
- "@contentMediaType",
463
- // number
464
- "@type",
465
- "@minimum",
466
- "@maximum",
467
- "@exclusiveMinimum",
468
- "@exclusiveMaximum",
469
- "@multipleOf",
470
- // array
471
- "@items",
472
- "@minItems",
473
- "@maxItems",
474
- "@uniqueItems",
475
- ];
1
+ import { SyntaxKind, factory } from "@ttsc/factory";
2
+ import { NamingConvention, OpenApiTypeChecker } from "@typia/utils";
3
+ import type { OpenApi } from "typia";
4
+
5
+ import { FormatCheatSheet } from "../factories/FormatCheatSheet";
6
+ import { TypeFactory } from "../factories/TypeFactory";
7
+ import ts from "../internal/ts";
8
+ import { FilePrinter } from "../utils/FilePrinter";
9
+ import { StringUtil } from "../utils/StringUtil";
10
+ import { NestiaMigrateImportProgrammer } from "./NestiaMigrateImportProgrammer";
11
+
12
+ export namespace NestiaMigrateSchemaProgrammer {
13
+ /* -----------------------------------------------------------
14
+ FACADE
15
+ ----------------------------------------------------------- */
16
+ export const write = (props: {
17
+ components: OpenApi.IComponents;
18
+ importer: NestiaMigrateImportProgrammer;
19
+ schema: OpenApi.IJsonSchema;
20
+ }): ts.TypeNode => {
21
+ // CONSIDER ANY TYPE CASE
22
+ const union: ts.TypeNode[] = [];
23
+ if (OpenApiTypeChecker.isUnknown(props.schema))
24
+ return TypeFactory.keyword("any");
25
+
26
+ // ITERATION
27
+ const type: ts.TypeNode = (() => {
28
+ // ATOMIC
29
+ if (OpenApiTypeChecker.isConstant(props.schema))
30
+ return writeConstant({
31
+ importer: props.importer,
32
+ schema: props.schema,
33
+ });
34
+ else if (OpenApiTypeChecker.isBoolean(props.schema))
35
+ return writeBoolean();
36
+ else if (OpenApiTypeChecker.isInteger(props.schema))
37
+ return writeInteger({
38
+ importer: props.importer,
39
+ schema: props.schema,
40
+ });
41
+ else if (OpenApiTypeChecker.isNumber(props.schema))
42
+ return writeNumber({
43
+ importer: props.importer,
44
+ schema: props.schema,
45
+ });
46
+ else if (OpenApiTypeChecker.isString(props.schema))
47
+ return writeString({
48
+ importer: props.importer,
49
+ schema: props.schema,
50
+ });
51
+ // INSTANCES
52
+ else if (OpenApiTypeChecker.isArray(props.schema))
53
+ return writeArray({
54
+ components: props.components,
55
+ importer: props.importer,
56
+ schema: props.schema,
57
+ });
58
+ else if (OpenApiTypeChecker.isTuple(props.schema))
59
+ return writeTuple({
60
+ components: props.components,
61
+ importer: props.importer,
62
+ schema: props.schema,
63
+ });
64
+ else if (OpenApiTypeChecker.isObject(props.schema))
65
+ return writeObject({
66
+ components: props.components,
67
+ importer: props.importer,
68
+ schema: props.schema,
69
+ });
70
+ else if (OpenApiTypeChecker.isReference(props.schema))
71
+ return writeReference({
72
+ importer: props.importer,
73
+ schema: props.schema,
74
+ });
75
+ // UNION
76
+ else if (OpenApiTypeChecker.isOneOf(props.schema))
77
+ return writeUnion({
78
+ components: props.components,
79
+ importer: props.importer,
80
+ elements: props.schema.oneOf,
81
+ });
82
+ else if (OpenApiTypeChecker.isNull(props.schema))
83
+ return createNode("null");
84
+ else return TypeFactory.keyword("any");
85
+ })();
86
+ union.push(type);
87
+
88
+ // DETERMINE
89
+ if (union.length === 0) return TypeFactory.keyword("any");
90
+ else if (union.length === 1) return union[0]!;
91
+ return factory.createUnionTypeNode(union);
92
+ };
93
+
94
+ /* -----------------------------------------------------------
95
+ ATOMICS
96
+ ----------------------------------------------------------- */
97
+ const writeConstant = (props: {
98
+ importer: NestiaMigrateImportProgrammer;
99
+ schema: OpenApi.IJsonSchema.IConstant;
100
+ }): ts.TypeNode => {
101
+ return factory.createLiteralTypeNode(
102
+ typeof props.schema.const === "boolean"
103
+ ? props.schema.const === true
104
+ ? factory.createTrue()
105
+ : factory.createFalse()
106
+ : typeof props.schema.const === "number"
107
+ ? props.schema.const < 0
108
+ ? factory.createPrefixUnaryExpression(
109
+ SyntaxKind.MinusToken,
110
+ factory.createNumericLiteral(-props.schema.const),
111
+ )
112
+ : factory.createNumericLiteral(props.schema.const)
113
+ : factory.createStringLiteral(props.schema.const),
114
+ );
115
+ };
116
+
117
+ const writeBoolean = (): ts.TypeNode => TypeFactory.keyword("boolean");
118
+
119
+ const writeInteger = (props: {
120
+ importer: NestiaMigrateImportProgrammer;
121
+ schema: OpenApi.IJsonSchema.IInteger;
122
+ }): ts.TypeNode =>
123
+ writeNumeric({
124
+ factory: () => [
125
+ TypeFactory.keyword("number"),
126
+ props.importer.tag("Type", "int32"),
127
+ ],
128
+ importer: props.importer,
129
+ schema: props.schema,
130
+ });
131
+
132
+ const writeNumber = (props: {
133
+ importer: NestiaMigrateImportProgrammer;
134
+ schema: OpenApi.IJsonSchema.INumber;
135
+ }): ts.TypeNode =>
136
+ writeNumeric({
137
+ factory: () => [TypeFactory.keyword("number")],
138
+ importer: props.importer,
139
+ schema: props.schema,
140
+ });
141
+
142
+ const writeNumeric = (props: {
143
+ factory: () => ts.TypeNode[];
144
+ importer: NestiaMigrateImportProgrammer;
145
+ schema: OpenApi.IJsonSchema.IInteger | OpenApi.IJsonSchema.INumber;
146
+ }): ts.TypeNode => {
147
+ const intersection: ts.TypeNode[] = props.factory();
148
+ if (props.schema.default !== undefined)
149
+ intersection.push(props.importer.tag("Default", props.schema.default));
150
+ if (props.schema.minimum !== undefined)
151
+ intersection.push(
152
+ props.importer.tag(
153
+ props.schema.exclusiveMinimum ? "ExclusiveMinimum" : "Minimum",
154
+ props.schema.minimum,
155
+ ),
156
+ );
157
+ if (props.schema.maximum !== undefined)
158
+ intersection.push(
159
+ props.importer.tag(
160
+ props.schema.exclusiveMaximum ? "ExclusiveMaximum" : "Maximum",
161
+ props.schema.maximum,
162
+ ),
163
+ );
164
+ if (props.schema.multipleOf !== undefined)
165
+ intersection.push(
166
+ props.importer.tag("MultipleOf", props.schema.multipleOf),
167
+ );
168
+ return intersection.length === 1
169
+ ? intersection[0]!
170
+ : factory.createIntersectionTypeNode(intersection);
171
+ };
172
+
173
+ const writeString = (props: {
174
+ importer: NestiaMigrateImportProgrammer;
175
+ schema: OpenApi.IJsonSchema.IString;
176
+ }): ts.TypeNode => {
177
+ if (props.schema.format === "binary")
178
+ return factory.createTypeReferenceNode("File");
179
+
180
+ const intersection: ts.TypeNode[] = [TypeFactory.keyword("string")];
181
+ if (props.schema.default !== undefined)
182
+ intersection.push(props.importer.tag("Default", props.schema.default));
183
+ if (props.schema.minLength !== undefined)
184
+ intersection.push(
185
+ props.importer.tag("MinLength", props.schema.minLength),
186
+ );
187
+ if (props.schema.maxLength !== undefined)
188
+ intersection.push(
189
+ props.importer.tag("MaxLength", props.schema.maxLength),
190
+ );
191
+ if (props.schema.pattern !== undefined)
192
+ intersection.push(props.importer.tag("Pattern", props.schema.pattern));
193
+ if (
194
+ props.schema.format !== undefined &&
195
+ (FormatCheatSheet as Record<string, string>)[props.schema.format] !==
196
+ undefined
197
+ )
198
+ intersection.push(props.importer.tag("Format", props.schema.format));
199
+ if (props.schema.contentMediaType !== undefined)
200
+ intersection.push(
201
+ props.importer.tag("ContentMediaType", props.schema.contentMediaType),
202
+ );
203
+ return intersection.length === 1
204
+ ? intersection[0]!
205
+ : factory.createIntersectionTypeNode(intersection);
206
+ };
207
+
208
+ /* -----------------------------------------------------------
209
+ INSTANCES
210
+ ----------------------------------------------------------- */
211
+ const writeArray = (props: {
212
+ components: OpenApi.IComponents;
213
+ importer: NestiaMigrateImportProgrammer;
214
+ schema: OpenApi.IJsonSchema.IArray;
215
+ }): ts.TypeNode => {
216
+ const intersection: ts.TypeNode[] = [
217
+ factory.createArrayTypeNode(
218
+ write({
219
+ components: props.components,
220
+ importer: props.importer,
221
+ schema: props.schema.items,
222
+ }),
223
+ ),
224
+ ];
225
+ if (props.schema.minItems !== undefined)
226
+ intersection.push(props.importer.tag("MinItems", props.schema.minItems));
227
+ if (props.schema.maxItems !== undefined)
228
+ intersection.push(props.importer.tag("MaxItems", props.schema.maxItems));
229
+ if (props.schema.uniqueItems === true)
230
+ intersection.push(props.importer.tag("UniqueItems"));
231
+ return intersection.length === 1
232
+ ? intersection[0]!
233
+ : factory.createIntersectionTypeNode(intersection);
234
+ };
235
+
236
+ const writeTuple = (props: {
237
+ components: OpenApi.IComponents;
238
+ importer: NestiaMigrateImportProgrammer;
239
+ schema: OpenApi.IJsonSchema.ITuple;
240
+ }): ts.TypeNode =>
241
+ factory.createTupleTypeNode([
242
+ ...props.schema.prefixItems.map((item) =>
243
+ write({
244
+ components: props.components,
245
+ importer: props.importer,
246
+ schema: item,
247
+ }),
248
+ ),
249
+ ...(typeof props.schema.additionalItems === "object" &&
250
+ props.schema.additionalItems !== null
251
+ ? [
252
+ factory.createRestTypeNode(
253
+ write({
254
+ components: props.components,
255
+ importer: props.importer,
256
+ schema: props.schema.additionalItems,
257
+ }),
258
+ ),
259
+ ]
260
+ : props.schema.additionalItems === true
261
+ ? [
262
+ factory.createRestTypeNode(
263
+ factory.createArrayTypeNode(
264
+ factory.createKeywordTypeNode(SyntaxKind.AnyKeyword),
265
+ ),
266
+ ),
267
+ ]
268
+ : []),
269
+ ]);
270
+
271
+ const writeObject = (props: {
272
+ components: OpenApi.IComponents;
273
+ importer: NestiaMigrateImportProgrammer;
274
+ schema: OpenApi.IJsonSchema.IObject;
275
+ }): ts.TypeNode => {
276
+ const regular = () =>
277
+ factory.createTypeLiteralNode(
278
+ Object.entries(props.schema.properties ?? [])
279
+ .map(([key, value], index) => [
280
+ ...(index !== 0 &&
281
+ (!!value.title?.length || !!value.description?.length)
282
+ ? [factory.createIdentifier("\n") as any]
283
+ : []),
284
+ writeRegularProperty({
285
+ components: props.components,
286
+ importer: props.importer,
287
+ required: props.schema.required ?? [],
288
+ key,
289
+ value,
290
+ }),
291
+ ])
292
+ .flat(),
293
+ );
294
+ const dynamic = () =>
295
+ factory.createTypeLiteralNode([
296
+ writeDynamicProperty({
297
+ components: props.components,
298
+ importer: props.importer,
299
+ schema: props.schema.additionalProperties as OpenApi.IJsonSchema,
300
+ }),
301
+ ]);
302
+ return !!props.schema.properties?.length &&
303
+ typeof props.schema.additionalProperties === "object"
304
+ ? factory.createIntersectionTypeNode([regular(), dynamic()])
305
+ : typeof props.schema.additionalProperties === "object"
306
+ ? dynamic()
307
+ : regular();
308
+ };
309
+
310
+ const writeRegularProperty = (props: {
311
+ components: OpenApi.IComponents;
312
+ importer: NestiaMigrateImportProgrammer;
313
+ required: string[];
314
+ key: string;
315
+ value: OpenApi.IJsonSchema;
316
+ }) => {
317
+ const valueTypeNode: ts.TypeNode = write({
318
+ components: props.components,
319
+ importer: props.importer,
320
+ schema: props.value,
321
+ });
322
+ return FilePrinter.description(
323
+ factory.createPropertySignature(
324
+ props.value.readOnly
325
+ ? [factory.createToken(SyntaxKind.ReadonlyKeyword)]
326
+ : undefined,
327
+ NamingConvention.variable(props.key)
328
+ ? factory.createIdentifier(props.key)
329
+ : factory.createStringLiteral(props.key),
330
+ props.required.includes(props.key)
331
+ ? undefined
332
+ : factory.createToken(SyntaxKind.QuestionToken),
333
+ props.required.includes(props.key)
334
+ ? valueTypeNode
335
+ : ts.isUnionTypeNode(valueTypeNode)
336
+ ? factory.createUnionTypeNode([
337
+ ...(valueTypeNode.types ?? []),
338
+ factory.createTypeReferenceNode("undefined"),
339
+ ])
340
+ : factory.createUnionTypeNode([
341
+ valueTypeNode,
342
+ factory.createTypeReferenceNode("undefined"),
343
+ ]),
344
+ ),
345
+ writeComment(props.value),
346
+ );
347
+ };
348
+
349
+ const writeDynamicProperty = (props: {
350
+ components: OpenApi.IComponents;
351
+ importer: NestiaMigrateImportProgrammer;
352
+ schema: OpenApi.IJsonSchema;
353
+ }) =>
354
+ FilePrinter.description(
355
+ factory.createIndexSignature(
356
+ undefined,
357
+ [
358
+ factory.createParameterDeclaration(
359
+ undefined,
360
+ undefined,
361
+ factory.createIdentifier("key"),
362
+ undefined,
363
+ TypeFactory.keyword("string"),
364
+ ),
365
+ ],
366
+ write(props),
367
+ ),
368
+ writeComment(props.schema),
369
+ );
370
+
371
+ const writeReference = (props: {
372
+ importer: NestiaMigrateImportProgrammer;
373
+ schema: OpenApi.IJsonSchema.IReference;
374
+ }): ts.TypeReferenceNode | ts.KeywordTypeNode => {
375
+ if (props.schema.$ref.startsWith("#/components/schemas") === false)
376
+ return TypeFactory.keyword("any");
377
+ const name: string = props.schema.$ref
378
+ .split("/")
379
+ .slice(3)
380
+ .filter((str) => str.length !== 0)
381
+ .map(StringUtil.escapeNonVariable)
382
+ .join("");
383
+ if (name === "") return TypeFactory.keyword("any");
384
+ return props.importer.dto(name);
385
+ };
386
+
387
+ /* -----------------------------------------------------------
388
+ UNIONS
389
+ ----------------------------------------------------------- */
390
+ const writeUnion = (props: {
391
+ components: OpenApi.IComponents;
392
+ importer: NestiaMigrateImportProgrammer;
393
+ elements: OpenApi.IJsonSchema[];
394
+ }): ts.UnionTypeNode =>
395
+ factory.createUnionTypeNode(
396
+ props.elements.map((schema) =>
397
+ write({
398
+ components: props.components,
399
+ importer: props.importer,
400
+ schema,
401
+ }),
402
+ ),
403
+ );
404
+ }
405
+ const createNode = (text: string) => factory.createTypeReferenceNode(text);
406
+
407
+ const writeComment = (schema: OpenApi.IJsonSchema): string => {
408
+ interface IPlugin {
409
+ key: string;
410
+ value: undefined | string | number | boolean;
411
+ }
412
+ const plugins: IPlugin[] = [];
413
+ if (schema.title !== undefined)
414
+ plugins.push({
415
+ key: "title",
416
+ value: schema.title,
417
+ });
418
+ if (schema.deprecated === true)
419
+ plugins.push({
420
+ key: "deprecated",
421
+ value: undefined,
422
+ });
423
+ for (const [key, value] of Object.entries(schema))
424
+ if (key.startsWith("x-") && isExtensionValue(value))
425
+ plugins.push({
426
+ key,
427
+ value,
428
+ });
429
+ return [
430
+ ...(schema.description?.length
431
+ ? [eraseCommentTags(schema.description)]
432
+ : []),
433
+ ...(schema.description?.length && plugins.length !== 0 ? [""] : []),
434
+ ...plugins.map((p) =>
435
+ p.value === undefined ? `@${p.key}` : `@${p.key} ${String(p.value)}`,
436
+ ),
437
+ ].join("\n");
438
+ };
439
+
440
+ const isExtensionValue = (value: unknown): value is boolean | number | string =>
441
+ typeof value === "boolean" ||
442
+ typeof value === "number" ||
443
+ typeof value === "string";
444
+
445
+ const eraseCommentTags = (description: string): string => {
446
+ const lines: string[] = description.split("\n");
447
+ return lines
448
+ .filter((s) => COMMENT_TAGS.every((tag) => !s.includes(tag)))
449
+ .join("\n");
450
+ };
451
+
452
+ const COMMENT_TAGS = [
453
+ // string
454
+ "@format",
455
+ "@pattern",
456
+ "@length",
457
+ "@minLength",
458
+ "@maxLength",
459
+ "@contentMediaType",
460
+ // number
461
+ "@type",
462
+ "@minimum",
463
+ "@maximum",
464
+ "@exclusiveMinimum",
465
+ "@exclusiveMaximum",
466
+ "@multipleOf",
467
+ // array
468
+ "@items",
469
+ "@minItems",
470
+ "@maxItems",
471
+ "@uniqueItems",
472
+ ];