sonamu 0.6.0 → 0.7.1

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 (406) hide show
  1. package/.swcrc.project-default +18 -0
  2. package/bin/cli.js +24 -0
  3. package/dist/ai/agents/agent.d.ts +11 -0
  4. package/dist/ai/agents/agent.d.ts.map +1 -0
  5. package/dist/ai/agents/agent.js +65 -0
  6. package/dist/ai/agents/index.d.ts +3 -0
  7. package/dist/ai/agents/index.d.ts.map +1 -0
  8. package/dist/ai/agents/index.js +4 -0
  9. package/dist/ai/agents/types.d.ts +43 -0
  10. package/dist/ai/agents/types.d.ts.map +1 -0
  11. package/dist/ai/agents/types.js +3 -0
  12. package/dist/ai/index.d.ts +2 -0
  13. package/dist/ai/index.d.ts.map +1 -0
  14. package/dist/ai/index.js +3 -0
  15. package/dist/ai/providers/rtzr/api.d.ts +22 -0
  16. package/dist/ai/providers/rtzr/api.d.ts.map +1 -0
  17. package/dist/ai/providers/rtzr/api.js +28 -0
  18. package/dist/ai/providers/rtzr/error.d.ts +18 -0
  19. package/dist/ai/providers/rtzr/error.d.ts.map +1 -0
  20. package/dist/ai/providers/rtzr/error.js +29 -0
  21. package/dist/ai/providers/rtzr/index.d.ts +5 -0
  22. package/dist/ai/providers/rtzr/index.d.ts.map +1 -0
  23. package/dist/ai/providers/rtzr/index.js +6 -0
  24. package/dist/ai/providers/rtzr/model.d.ts +52 -0
  25. package/dist/ai/providers/rtzr/model.d.ts.map +1 -0
  26. package/dist/ai/providers/rtzr/model.js +137 -0
  27. package/dist/ai/providers/rtzr/options.d.ts +7 -0
  28. package/dist/ai/providers/rtzr/options.d.ts.map +1 -0
  29. package/dist/ai/providers/rtzr/options.js +47 -0
  30. package/dist/ai/providers/rtzr/provider.d.ts +18 -0
  31. package/dist/ai/providers/rtzr/provider.d.ts.map +1 -0
  32. package/dist/ai/providers/rtzr/provider.js +54 -0
  33. package/dist/ai/providers/rtzr/utils.d.ts +19 -0
  34. package/dist/ai/providers/rtzr/utils.d.ts.map +1 -0
  35. package/dist/ai/providers/rtzr/utils.js +88 -0
  36. package/dist/api/base-frame.d.ts +2 -2
  37. package/dist/api/base-frame.d.ts.map +1 -1
  38. package/dist/api/base-frame.js +2 -1
  39. package/dist/api/caster.d.ts.map +1 -1
  40. package/dist/api/caster.js +6 -1
  41. package/dist/api/code-converters.d.ts +58 -14
  42. package/dist/api/code-converters.d.ts.map +1 -1
  43. package/dist/api/code-converters.js +178 -409
  44. package/dist/api/config.d.ts +27 -13
  45. package/dist/api/config.d.ts.map +1 -1
  46. package/dist/api/config.js +19 -26
  47. package/dist/api/context.d.ts +4 -3
  48. package/dist/api/context.d.ts.map +1 -1
  49. package/dist/api/context.js +1 -1
  50. package/dist/api/decorators.d.ts +20 -6
  51. package/dist/api/decorators.d.ts.map +1 -1
  52. package/dist/api/decorators.js +111 -18
  53. package/dist/api/index.d.ts +2 -2
  54. package/dist/api/index.d.ts.map +1 -1
  55. package/dist/api/index.js +3 -3
  56. package/dist/api/sonamu.d.ts +7 -7
  57. package/dist/api/sonamu.d.ts.map +1 -1
  58. package/dist/api/sonamu.js +83 -51
  59. package/dist/api/validator.d.ts +6 -0
  60. package/dist/api/validator.d.ts.map +1 -0
  61. package/dist/api/validator.js +81 -0
  62. package/dist/bin/build-config.d.ts +5 -1
  63. package/dist/bin/build-config.d.ts.map +1 -1
  64. package/dist/bin/build-config.js +5 -2
  65. package/dist/bin/cli.js +165 -64
  66. package/dist/bin/loader-register.d.ts +2 -0
  67. package/dist/bin/loader-register.d.ts.map +1 -0
  68. package/dist/bin/loader-register.js +34 -0
  69. package/dist/database/_batch_update.d.ts +5 -3
  70. package/dist/database/_batch_update.d.ts.map +1 -1
  71. package/dist/database/_batch_update.js +30 -13
  72. package/dist/database/base-model.d.ts +96 -10
  73. package/dist/database/base-model.d.ts.map +1 -1
  74. package/dist/database/base-model.js +232 -89
  75. package/dist/database/base-model.types.d.ts +93 -0
  76. package/dist/database/base-model.types.d.ts.map +1 -0
  77. package/dist/database/base-model.types.js +10 -0
  78. package/dist/database/code-generator.d.ts +1 -1
  79. package/dist/database/code-generator.d.ts.map +1 -1
  80. package/dist/database/code-generator.js +11 -10
  81. package/dist/database/db.d.ts +5 -6
  82. package/dist/database/db.d.ts.map +1 -1
  83. package/dist/database/db.js +22 -25
  84. package/dist/database/puri-subset.test-d.js +81 -0
  85. package/dist/database/puri-subset.types.d.ts +123 -0
  86. package/dist/database/puri-subset.types.d.ts.map +1 -0
  87. package/dist/database/puri-subset.types.js +16 -0
  88. package/dist/database/puri-wrapper.d.ts +13 -11
  89. package/dist/database/puri-wrapper.d.ts.map +1 -1
  90. package/dist/database/puri-wrapper.js +2 -2
  91. package/dist/database/puri.d.ts +25 -14
  92. package/dist/database/puri.d.ts.map +1 -1
  93. package/dist/database/puri.js +83 -21
  94. package/dist/database/puri.types.d.ts +21 -7
  95. package/dist/database/puri.types.d.ts.map +1 -1
  96. package/dist/database/puri.types.js +4 -1
  97. package/dist/database/transaction-context.d.ts +1 -1
  98. package/dist/database/transaction-context.d.ts.map +1 -1
  99. package/dist/database/transaction-context.js +1 -1
  100. package/dist/database/upsert-builder.d.ts +9 -3
  101. package/dist/database/upsert-builder.d.ts.map +1 -1
  102. package/dist/database/upsert-builder.js +227 -78
  103. package/dist/entity/entity-manager.d.ts +165 -2
  104. package/dist/entity/entity-manager.d.ts.map +1 -1
  105. package/dist/entity/entity-manager.js +26 -10
  106. package/dist/entity/entity.d.ts +5 -3
  107. package/dist/entity/entity.d.ts.map +1 -1
  108. package/dist/entity/entity.js +153 -54
  109. package/dist/exceptions/error-handler.d.ts +1 -1
  110. package/dist/exceptions/error-handler.d.ts.map +1 -1
  111. package/dist/exceptions/error-handler.js +1 -1
  112. package/dist/exceptions/so-exceptions.d.ts +1 -1
  113. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  114. package/dist/exceptions/so-exceptions.js +1 -1
  115. package/dist/file-storage/driver.d.ts +1 -1
  116. package/dist/file-storage/driver.d.ts.map +1 -1
  117. package/dist/file-storage/driver.js +1 -1
  118. package/dist/file-storage/file-storage.js +2 -2
  119. package/dist/index.d.ts +18 -11
  120. package/dist/index.d.ts.map +1 -1
  121. package/dist/index.js +19 -13
  122. package/dist/migration/code-generation.d.ts +1 -1
  123. package/dist/migration/code-generation.d.ts.map +1 -1
  124. package/dist/migration/code-generation.js +123 -67
  125. package/dist/migration/migration-set.d.ts +2 -10
  126. package/dist/migration/migration-set.d.ts.map +1 -1
  127. package/dist/migration/migration-set.js +67 -218
  128. package/dist/migration/migrator.d.ts +24 -73
  129. package/dist/migration/migrator.d.ts.map +1 -1
  130. package/dist/migration/migrator.js +121 -301
  131. package/dist/migration/postgresql-schema-reader.d.ts +51 -0
  132. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -0
  133. package/dist/migration/postgresql-schema-reader.js +245 -0
  134. package/dist/migration/types.d.ts +6 -38
  135. package/dist/migration/types.d.ts.map +1 -1
  136. package/dist/migration/types.js +1 -1
  137. package/dist/naite/messaging-types.d.ts +43 -0
  138. package/dist/naite/messaging-types.d.ts.map +1 -0
  139. package/dist/naite/messaging-types.js +7 -0
  140. package/dist/naite/naite-reporter.d.ts +41 -0
  141. package/dist/naite/naite-reporter.d.ts.map +1 -0
  142. package/dist/naite/naite-reporter.js +102 -0
  143. package/dist/naite/naite.d.ts +91 -8
  144. package/dist/naite/naite.d.ts.map +1 -1
  145. package/dist/naite/naite.js +285 -41
  146. package/dist/stream/sse.d.ts +2 -2
  147. package/dist/stream/sse.d.ts.map +1 -1
  148. package/dist/stream/sse.js +1 -1
  149. package/dist/syncer/api-parser.d.ts +3 -13
  150. package/dist/syncer/api-parser.d.ts.map +1 -1
  151. package/dist/syncer/api-parser.js +67 -56
  152. package/dist/syncer/checksum.d.ts +2 -2
  153. package/dist/syncer/checksum.d.ts.map +1 -1
  154. package/dist/syncer/checksum.js +11 -11
  155. package/dist/syncer/code-generator.d.ts +3 -3
  156. package/dist/syncer/code-generator.d.ts.map +1 -1
  157. package/dist/syncer/code-generator.js +37 -17
  158. package/dist/syncer/entity-operations.d.ts +2 -2
  159. package/dist/syncer/entity-operations.d.ts.map +1 -1
  160. package/dist/syncer/entity-operations.js +9 -8
  161. package/dist/syncer/file-patterns.d.ts +1 -1
  162. package/dist/syncer/file-patterns.d.ts.map +1 -1
  163. package/dist/syncer/file-patterns.js +1 -1
  164. package/dist/syncer/index.d.ts +4 -4
  165. package/dist/syncer/index.d.ts.map +1 -1
  166. package/dist/syncer/index.js +5 -5
  167. package/dist/syncer/module-loader.d.ts +4 -4
  168. package/dist/syncer/module-loader.d.ts.map +1 -1
  169. package/dist/syncer/module-loader.js +17 -12
  170. package/dist/syncer/syncer.d.ts +31 -24
  171. package/dist/syncer/syncer.d.ts.map +1 -1
  172. package/dist/syncer/syncer.js +92 -45
  173. package/dist/template/entity-converter.d.ts +1 -1
  174. package/dist/template/entity-converter.d.ts.map +1 -1
  175. package/dist/template/entity-converter.js +15 -8
  176. package/dist/template/helpers.d.ts +2 -2
  177. package/dist/template/helpers.d.ts.map +1 -1
  178. package/dist/template/helpers.js +3 -3
  179. package/dist/template/implementations/entity.template.d.ts +2 -2
  180. package/dist/template/implementations/entity.template.d.ts.map +1 -1
  181. package/dist/template/implementations/entity.template.js +4 -5
  182. package/dist/template/implementations/generated.template.d.ts +2 -3
  183. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  184. package/dist/template/implementations/generated.template.js +46 -29
  185. package/dist/template/implementations/generated_http.template.d.ts +2 -3
  186. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  187. package/dist/template/implementations/generated_http.template.js +9 -9
  188. package/dist/template/implementations/generated_sso.template.d.ts +3 -4
  189. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  190. package/dist/template/implementations/generated_sso.template.js +54 -25
  191. package/dist/template/implementations/init_types.template.d.ts +2 -2
  192. package/dist/template/implementations/init_types.template.d.ts.map +1 -1
  193. package/dist/template/implementations/init_types.template.js +2 -2
  194. package/dist/template/implementations/model.template.d.ts +2 -2
  195. package/dist/template/implementations/model.template.d.ts.map +1 -1
  196. package/dist/template/implementations/model.template.js +47 -37
  197. package/dist/template/implementations/model_test.template.d.ts +2 -2
  198. package/dist/template/implementations/model_test.template.d.ts.map +1 -1
  199. package/dist/template/implementations/model_test.template.js +2 -2
  200. package/dist/template/implementations/service.template.d.ts +4 -4
  201. package/dist/template/implementations/service.template.d.ts.map +1 -1
  202. package/dist/template/implementations/service.template.js +24 -16
  203. package/dist/template/implementations/view_enums_buttonset.template.d.ts +2 -2
  204. package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -1
  205. package/dist/template/implementations/view_enums_buttonset.template.js +1 -1
  206. package/dist/template/implementations/view_enums_dropdown.template.d.ts +2 -2
  207. package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -1
  208. package/dist/template/implementations/view_enums_dropdown.template.js +2 -2
  209. package/dist/template/implementations/view_enums_select.template.d.ts +2 -2
  210. package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -1
  211. package/dist/template/implementations/view_enums_select.template.js +2 -2
  212. package/dist/template/implementations/view_form.template.d.ts +2 -2
  213. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  214. package/dist/template/implementations/view_form.template.js +4 -4
  215. package/dist/template/implementations/view_id_all_select.template.d.ts +2 -2
  216. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -1
  217. package/dist/template/implementations/view_id_all_select.template.js +1 -1
  218. package/dist/template/implementations/view_id_async_select.template.d.ts +2 -2
  219. package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -1
  220. package/dist/template/implementations/view_id_async_select.template.js +1 -1
  221. package/dist/template/implementations/view_list.template.d.ts +2 -2
  222. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  223. package/dist/template/implementations/view_list.template.js +29 -19
  224. package/dist/template/implementations/view_list_columns.template.d.ts +3 -3
  225. package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -1
  226. package/dist/template/implementations/view_list_columns.template.js +1 -1
  227. package/dist/template/implementations/view_search_input.template.d.ts +2 -2
  228. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
  229. package/dist/template/implementations/view_search_input.template.js +1 -1
  230. package/dist/template/index.d.ts +4 -2
  231. package/dist/template/index.d.ts.map +1 -1
  232. package/dist/template/index.js +5 -3
  233. package/dist/template/template-manager.d.ts +56 -0
  234. package/dist/template/template-manager.d.ts.map +1 -0
  235. package/dist/template/template-manager.js +125 -0
  236. package/dist/template/template-types.d.ts +16 -0
  237. package/dist/template/template-types.d.ts.map +1 -0
  238. package/dist/template/template-types.js +7 -0
  239. package/dist/template/template.d.ts +12 -2
  240. package/dist/template/template.d.ts.map +1 -1
  241. package/dist/template/template.js +19 -6
  242. package/dist/template/zod-converter.d.ts +40 -7
  243. package/dist/template/zod-converter.d.ts.map +1 -1
  244. package/dist/template/zod-converter.js +386 -58
  245. package/dist/testing/_relation-graph.d.ts +1 -1
  246. package/dist/testing/_relation-graph.d.ts.map +1 -1
  247. package/dist/testing/_relation-graph.js +12 -3
  248. package/dist/testing/fixture-manager.d.ts +42 -11
  249. package/dist/testing/fixture-manager.d.ts.map +1 -1
  250. package/dist/testing/fixture-manager.js +338 -236
  251. package/dist/types/types.d.ts +709 -104
  252. package/dist/types/types.d.ts.map +1 -1
  253. package/dist/types/types.js +309 -52
  254. package/dist/typings/knex.d.js +2 -2
  255. package/dist/utils/async-utils.d.ts.map +1 -1
  256. package/dist/utils/async-utils.js +3 -3
  257. package/dist/utils/console-util.js +1 -1
  258. package/dist/utils/controller.d.ts +1 -0
  259. package/dist/utils/controller.d.ts.map +1 -1
  260. package/dist/utils/controller.js +4 -1
  261. package/dist/utils/esm-utils.d.ts +0 -6
  262. package/dist/utils/esm-utils.d.ts.map +1 -1
  263. package/dist/utils/esm-utils.js +2 -9
  264. package/dist/utils/formatter.d.ts +3 -0
  265. package/dist/utils/formatter.d.ts.map +1 -0
  266. package/dist/utils/formatter.js +110 -0
  267. package/dist/utils/fs-utils.d.ts +1 -1
  268. package/dist/utils/fs-utils.d.ts.map +1 -1
  269. package/dist/utils/fs-utils.js +1 -1
  270. package/dist/utils/lodash-able.d.ts.map +1 -1
  271. package/dist/utils/lodash-able.js +1 -1
  272. package/dist/utils/object-utils.d.ts +44 -0
  273. package/dist/utils/object-utils.d.ts.map +1 -0
  274. package/dist/utils/object-utils.js +191 -0
  275. package/dist/utils/path-utils.d.ts +1 -1
  276. package/dist/utils/path-utils.d.ts.map +1 -1
  277. package/dist/utils/path-utils.js +3 -3
  278. package/dist/utils/process-utils.js +1 -1
  279. package/dist/utils/sql-parser.d.ts +5 -1
  280. package/dist/utils/sql-parser.d.ts.map +1 -1
  281. package/dist/utils/sql-parser.js +14 -3
  282. package/dist/utils/type-utils.d.ts +23 -0
  283. package/dist/utils/type-utils.d.ts.map +1 -0
  284. package/dist/utils/type-utils.js +45 -0
  285. package/dist/utils/utils.d.ts +7 -1
  286. package/dist/utils/utils.d.ts.map +1 -1
  287. package/dist/utils/utils.js +44 -5
  288. package/dist/utils/zod-error.d.ts +1 -1
  289. package/dist/utils/zod-error.d.ts.map +1 -1
  290. package/dist/utils/zod-error.js +1 -1
  291. package/package.json +55 -30
  292. package/src/ai/agents/agent.ts +87 -0
  293. package/src/ai/agents/index.ts +2 -0
  294. package/src/ai/agents/types.ts +47 -0
  295. package/src/ai/index.ts +1 -0
  296. package/src/ai/providers/rtzr/api.ts +37 -0
  297. package/src/ai/providers/rtzr/error.ts +34 -0
  298. package/src/ai/providers/rtzr/index.ts +4 -0
  299. package/src/ai/providers/rtzr/model.ts +201 -0
  300. package/src/ai/providers/rtzr/options.ts +49 -0
  301. package/src/ai/providers/rtzr/provider.ts +91 -0
  302. package/src/ai/providers/rtzr/utils.ts +127 -0
  303. package/src/api/base-frame.ts +4 -2
  304. package/src/api/caster.ts +17 -23
  305. package/src/api/code-converters.ts +176 -533
  306. package/src/api/config.ts +39 -56
  307. package/src/api/context.ts +7 -18
  308. package/src/api/decorators.ts +175 -46
  309. package/src/api/index.ts +2 -2
  310. package/src/api/sonamu.ts +133 -124
  311. package/src/api/validator.ts +83 -0
  312. package/src/bin/build-config.ts +7 -1
  313. package/src/bin/cli.ts +192 -110
  314. package/src/bin/loader-register.ts +38 -0
  315. package/src/database/_batch_update.ts +46 -31
  316. package/src/database/base-model.ts +390 -182
  317. package/src/database/base-model.types.ts +155 -0
  318. package/src/database/code-generator.ts +13 -32
  319. package/src/database/db.ts +36 -50
  320. package/src/database/puri-subset.test-d.ts +471 -0
  321. package/src/database/puri-subset.types.ts +195 -0
  322. package/src/database/puri-wrapper.ts +58 -67
  323. package/src/database/puri.ts +182 -126
  324. package/src/database/puri.types.ts +64 -31
  325. package/src/database/transaction-context.ts +1 -1
  326. package/src/database/upsert-builder.ts +261 -132
  327. package/src/entity/entity-manager.ts +36 -28
  328. package/src/entity/entity.ts +330 -249
  329. package/src/exceptions/error-handler.ts +3 -3
  330. package/src/exceptions/so-exceptions.ts +11 -11
  331. package/src/file-storage/driver.ts +5 -5
  332. package/src/file-storage/file-storage.ts +2 -2
  333. package/src/index.ts +18 -12
  334. package/src/migration/code-generation.ts +185 -172
  335. package/src/migration/migration-set.ts +80 -293
  336. package/src/migration/migrator.ts +182 -425
  337. package/src/migration/mysql-schema-reader.ts.txt +272 -0
  338. package/src/migration/postgresql-schema-reader.ts +310 -0
  339. package/src/migration/types.ts +6 -39
  340. package/src/naite/messaging-types.ts +51 -0
  341. package/src/naite/naite-reporter.ts +128 -0
  342. package/src/naite/naite.ts +378 -33
  343. package/src/shared/web.shared.ts.txt +20 -24
  344. package/src/stream/sse.ts +5 -5
  345. package/src/syncer/api-parser.ts +52 -69
  346. package/src/syncer/checksum.ts +25 -37
  347. package/src/syncer/code-generator.ts +58 -62
  348. package/src/syncer/entity-operations.ts +12 -15
  349. package/src/syncer/file-patterns.ts +2 -2
  350. package/src/syncer/index.ts +4 -4
  351. package/src/syncer/module-loader.ts +28 -25
  352. package/src/syncer/syncer.ts +155 -162
  353. package/src/template/entity-converter.ts +18 -27
  354. package/src/template/helpers.ts +8 -11
  355. package/src/template/implementations/entity.template.ts +6 -6
  356. package/src/template/implementations/generated.template.ts +99 -99
  357. package/src/template/implementations/generated_http.template.ts +21 -54
  358. package/src/template/implementations/generated_sso.template.ts +78 -65
  359. package/src/template/implementations/init_types.template.ts +4 -6
  360. package/src/template/implementations/model.template.ts +47 -38
  361. package/src/template/implementations/model_test.template.ts +3 -3
  362. package/src/template/implementations/service.template.ts +56 -80
  363. package/src/template/implementations/view_enums_buttonset.template.ts +2 -2
  364. package/src/template/implementations/view_enums_dropdown.template.ts +4 -4
  365. package/src/template/implementations/view_enums_select.template.ts +3 -3
  366. package/src/template/implementations/view_form.template.ts +34 -75
  367. package/src/template/implementations/view_id_all_select.template.ts +2 -2
  368. package/src/template/implementations/view_id_async_select.template.ts +9 -23
  369. package/src/template/implementations/view_list.template.ts +54 -95
  370. package/src/template/implementations/view_list_columns.template.ts +4 -10
  371. package/src/template/implementations/view_search_input.template.ts +2 -2
  372. package/src/template/index.ts +4 -2
  373. package/src/template/template-manager.ts +166 -0
  374. package/src/template/template-types.ts +16 -0
  375. package/src/template/template.ts +29 -10
  376. package/src/template/zod-converter.ts +459 -101
  377. package/src/testing/_relation-graph.ts +18 -11
  378. package/src/testing/fixture-manager.ts +468 -362
  379. package/src/types/types.ts +516 -248
  380. package/src/typings/knex.d.ts +7 -9
  381. package/src/utils/async-utils.ts +8 -12
  382. package/src/utils/console-util.ts +1 -1
  383. package/src/utils/controller.ts +3 -0
  384. package/src/utils/esm-utils.ts +8 -18
  385. package/src/utils/formatter.ts +109 -0
  386. package/src/utils/fs-utils.ts +1 -1
  387. package/src/utils/lodash-able.ts +1 -4
  388. package/src/utils/object-utils.ts +217 -0
  389. package/src/utils/path-utils.ts +3 -6
  390. package/src/utils/process-utils.ts +1 -1
  391. package/src/utils/sql-parser.ts +23 -5
  392. package/src/utils/type-utils.ts +83 -0
  393. package/src/utils/utils.ts +58 -9
  394. package/src/utils/zod-error.ts +3 -3
  395. package/dist/bin/cli-wrapper.d.ts +0 -3
  396. package/dist/bin/cli-wrapper.d.ts.map +0 -1
  397. package/dist/bin/cli-wrapper.js +0 -72
  398. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +0 -2
  399. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +0 -1
  400. package/dist/database/knex-plugins/knex-on-duplicate-update.js +0 -39
  401. package/dist/entity/entity-utils.d.ts +0 -61
  402. package/dist/entity/entity-utils.d.ts.map +0 -1
  403. package/dist/entity/entity-utils.js +0 -210
  404. package/src/bin/cli-wrapper.ts +0 -82
  405. package/src/database/knex-plugins/knex-on-duplicate-update.ts +0 -45
  406. package/src/entity/entity-utils.ts +0 -291
@@ -0,0 +1,125 @@
1
+ import path from "path";
2
+ import { globAsync } from "../utils/async-utils.js";
3
+ import { importMembers } from "../utils/esm-utils.js";
4
+ import { Template } from "./template.js";
5
+ class TemplateManagerClass {
6
+ templates = new Map();
7
+ isAutoloaded = false;
8
+ // ================================
9
+ // 기본 메서드
10
+ // ================================
11
+ /**
12
+ * 빌트인 템플릿 로드 (implementations/*.template.js)
13
+ */ async autoload() {
14
+ if (this.isAutoloaded) {
15
+ return;
16
+ }
17
+ const templateFiles = await globAsync(path.join(import.meta.dirname, "implementations/*.template.js"));
18
+ for (const templateFile of templateFiles){
19
+ const templates = await importMembers(templateFile);
20
+ if (templates.length === 1 && typeof templates[0].value === "function" && templates[0].value.prototype instanceof Template) {
21
+ const instance = new templates[0].value();
22
+ this.templates.set(instance.key, instance);
23
+ } else {
24
+ throw new Error(`Template ${templateFile} should export only one class that extends Template`);
25
+ }
26
+ }
27
+ for (const [key, template] of this.templates){
28
+ Template._getTemplatesMap().set(key, template);
29
+ }
30
+ this.isAutoloaded = true;
31
+ }
32
+ /**
33
+ * 템플릿 다시 로드
34
+ */ async reload() {
35
+ this.templates.clear();
36
+ Template._clearTemplates();
37
+ this.isAutoloaded = false;
38
+ await this.autoload();
39
+ }
40
+ /**
41
+ * 프로젝트 디렉토리에서 커스텀 템플릿 로드
42
+ */ async loadFromDirectory(dir) {
43
+ const templateFiles = await globAsync(path.join(dir, "*.template.{ts,js}"));
44
+ let count = 0;
45
+ for (const file of templateFiles){
46
+ const templates = await importMembers(file);
47
+ for (const { value } of templates){
48
+ if (this.isTemplateClass(value)) {
49
+ const instance = new value();
50
+ this.register(instance);
51
+ count++;
52
+ }
53
+ }
54
+ }
55
+ return count;
56
+ }
57
+ isTemplateClass(value) {
58
+ return typeof value === "function" && value.prototype instanceof Template;
59
+ }
60
+ // ================================
61
+ // 템플릿 등록
62
+ // ================================
63
+ /**
64
+ * 템플릿 등록
65
+ */ register(template) {
66
+ this.templates.set(template.key, template);
67
+ // 하위 호환
68
+ Template._getTemplatesMap().set(template.key, template);
69
+ }
70
+ /**
71
+ * 여러 템플릿 등록
72
+ */ registerAll(templates) {
73
+ for (const template of templates){
74
+ this.register(template);
75
+ }
76
+ }
77
+ // ================================
78
+ // 템플릿 조회
79
+ // ================================
80
+ /**
81
+ * 템플릿 조회
82
+ * 빌트인 : 자동완성 지원
83
+ * 커스텀 : 임의 문자열 지원
84
+ */ get(key) {
85
+ const template = this.templates.get(key);
86
+ if (!template) {
87
+ throw new Error(`Template '${key}' not found. Available: [${this.getAllKeys().join(", ")}]`);
88
+ }
89
+ return template;
90
+ }
91
+ /**
92
+ * 템플릿 존재 여부
93
+ */ exists(key) {
94
+ return this.templates.has(key);
95
+ }
96
+ /**
97
+ * 모든 템플릿 키 목록
98
+ */ getAllKeys() {
99
+ return Array.from(this.templates.keys()).sort();
100
+ }
101
+ /**
102
+ * 등록된 템플릿 개수
103
+ */ get size() {
104
+ return this.templates.size;
105
+ }
106
+ // ================================
107
+ // 테스트 유틸리티
108
+ // ================================
109
+ /**
110
+ * 모든 상태 초기화 (테스트용)
111
+ */ reset() {
112
+ this.templates.clear();
113
+ this.isAutoloaded = false;
114
+ Template._clearTemplates();
115
+ }
116
+ /**
117
+ * 격리된 인스턴스 생성 (테스트용)
118
+ */ static createInstance() {
119
+ return new TemplateManagerClass();
120
+ }
121
+ }
122
+ export const TemplateManager = new TemplateManagerClass();
123
+ export { TemplateManagerClass };
124
+
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS90ZW1wbGF0ZS1tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlS2V5IH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGltcG9ydE1lbWJlcnMgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuL3RlbXBsYXRlXCI7XG5cbmNsYXNzIFRlbXBsYXRlTWFuYWdlckNsYXNzIHtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZXM6IE1hcDxUZW1wbGF0ZUtleSB8IHN0cmluZywgVGVtcGxhdGU+ID0gbmV3IE1hcCgpO1xuICBpc0F1dG9sb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDquLDrs7gg66mU7ISc65OcXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIOu5jO2KuOyduCDthZztlIzrpr8g66Gc65OcIChpbXBsZW1lbnRhdGlvbnMvKi50ZW1wbGF0ZS5qcylcbiAgICovXG4gIGFzeW5jIGF1dG9sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzQXV0b2xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wbGF0ZUZpbGVzID0gYXdhaXQgZ2xvYkFzeW5jKFxuICAgICAgcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiaW1wbGVtZW50YXRpb25zLyoudGVtcGxhdGUuanNcIiksXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgdGVtcGxhdGVGaWxlIG9mIHRlbXBsYXRlRmlsZXMpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8dW5rbm93bj4odGVtcGxhdGVGaWxlKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGVtcGxhdGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICB0eXBlb2YgdGVtcGxhdGVzWzBdLnZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgdGVtcGxhdGVzWzBdLnZhbHVlLnByb3RvdHlwZSBpbnN0YW5jZW9mIFRlbXBsYXRlXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgKHRlbXBsYXRlc1swXS52YWx1ZSBhcyBuZXcgKCkgPT4gVGVtcGxhdGUpKCk7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzLnNldChpbnN0YW5jZS5rZXksIGluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGVtcGxhdGUgJHt0ZW1wbGF0ZUZpbGV9IHNob3VsZCBleHBvcnQgb25seSBvbmUgY2xhc3MgdGhhdCBleHRlbmRzIFRlbXBsYXRlYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHRlbXBsYXRlXSBvZiB0aGlzLnRlbXBsYXRlcykge1xuICAgICAgVGVtcGxhdGUuX2dldFRlbXBsYXRlc01hcCgpLnNldChrZXkgYXMgVGVtcGxhdGVLZXksIHRlbXBsYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzQXV0b2xvYWRlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICog7YWc7ZSM66a/IOuLpOyLnCDroZzrk5xcbiAgICovXG4gIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnRlbXBsYXRlcy5jbGVhcigpO1xuICAgIFRlbXBsYXRlLl9jbGVhclRlbXBsYXRlcygpO1xuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gZmFsc2U7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2UhOuhnOygne2KuCDrlJTroInthqDrpqzsl5DshJwg7Luk7Iqk7YWAIO2FnO2UjOumvyDroZzrk5xcbiAgICovXG4gIGFzeW5jIGxvYWRGcm9tRGlyZWN0b3J5KGRpcjogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZUZpbGVzID0gYXdhaXQgZ2xvYkFzeW5jKHBhdGguam9pbihkaXIsIFwiKi50ZW1wbGF0ZS57dHMsanN9XCIpKTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRlbXBsYXRlRmlsZXMpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8dW5rbm93bj4oZmlsZSk7XG4gICAgICBmb3IgKGNvbnN0IHsgdmFsdWUgfSBvZiB0ZW1wbGF0ZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUZW1wbGF0ZUNsYXNzKHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3ICh2YWx1ZSBhcyBuZXcgKCkgPT4gVGVtcGxhdGUpKCk7XG4gICAgICAgICAgdGhpcy5yZWdpc3RlcihpbnN0YW5jZSk7XG4gICAgICAgICAgY291bnQrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUZW1wbGF0ZUNsYXNzKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlLnByb3RvdHlwZSBpbnN0YW5jZW9mIFRlbXBsYXRlO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8g7YWc7ZSM66a/IOuTseuhnVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiDthZztlIzrpr8g65Ox66GdXG4gICAqL1xuICByZWdpc3Rlcih0ZW1wbGF0ZTogVGVtcGxhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnRlbXBsYXRlcy5zZXQodGVtcGxhdGUua2V5LCB0ZW1wbGF0ZSk7XG4gICAgLy8g7ZWY7JyEIO2YuO2ZmFxuICAgIFRlbXBsYXRlLl9nZXRUZW1wbGF0ZXNNYXAoKS5zZXQodGVtcGxhdGUua2V5IGFzIFRlbXBsYXRlS2V5LCB0ZW1wbGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICog7Jes65+sIO2FnO2UjOumvyDrk7HroZ1cbiAgICovXG4gIHJlZ2lzdGVyQWxsKHRlbXBsYXRlczogVGVtcGxhdGVbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgdGVtcGxhdGVzKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyKHRlbXBsYXRlKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDthZztlIzrpr8g7KGw7ZqMXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIO2FnO2UjOumvyDsobDtmoxcbiAgICog67mM7Yq47J24IDog7J6Q64+Z7JmE7ISxIOyngOybkFxuICAgKiDsu6TsiqTthYAgOiDsnoTsnZgg66y47J6Q7Je0IOyngOybkFxuICAgKi9cbiAgZ2V0KGtleTogVGVtcGxhdGVLZXkgfCAoc3RyaW5nICYge30pKTogVGVtcGxhdGUge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW1wbGF0ZSAnJHtrZXl9JyBub3QgZm91bmQuIEF2YWlsYWJsZTogWyR7dGhpcy5nZXRBbGxLZXlzKCkuam9pbihcIiwgXCIpfV1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIO2FnO2UjOumvyDsobTsnqwg7Jes67aAXG4gICAqL1xuICBleGlzdHMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMuaGFzKGtleSk7XG4gIH1cblxuICAvKipcbiAgICog66qo65OgIO2FnO2UjOumvyDtgqQg66qp66GdXG4gICAqL1xuICBnZXRBbGxLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRlbXBsYXRlcy5rZXlzKCkpLnNvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrk7HroZ3rkJwg7YWc7ZSM66a/IOqwnOyImFxuICAgKi9cbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMuc2l6ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIO2FjOyKpO2KuCDsnKDti7jrpqzti7BcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICog66qo65OgIOyDge2DnCDstIjquLDtmZQgKO2FjOyKpO2KuOyaqSlcbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMudGVtcGxhdGVzLmNsZWFyKCk7XG4gICAgdGhpcy5pc0F1dG9sb2FkZWQgPSBmYWxzZTtcbiAgICBUZW1wbGF0ZS5fY2xlYXJUZW1wbGF0ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDqsqnrpqzrkJwg7J247Iqk7YS07IqkIOyDneyEsSAo7YWM7Iqk7Yq47JqpKVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKCk6IFRlbXBsYXRlTWFuYWdlckNsYXNzIHtcbiAgICByZXR1cm4gbmV3IFRlbXBsYXRlTWFuYWdlckNsYXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFRlbXBsYXRlTWFuYWdlciA9IG5ldyBUZW1wbGF0ZU1hbmFnZXJDbGFzcygpO1xuZXhwb3J0IHsgVGVtcGxhdGVNYW5hZ2VyQ2xhc3MgfTtcbiJdLCJuYW1lcyI6WyJwYXRoIiwiZ2xvYkFzeW5jIiwiaW1wb3J0TWVtYmVycyIsIlRlbXBsYXRlIiwiVGVtcGxhdGVNYW5hZ2VyQ2xhc3MiLCJ0ZW1wbGF0ZXMiLCJNYXAiLCJpc0F1dG9sb2FkZWQiLCJhdXRvbG9hZCIsInRlbXBsYXRlRmlsZXMiLCJqb2luIiwiZGlybmFtZSIsInRlbXBsYXRlRmlsZSIsImxlbmd0aCIsInZhbHVlIiwicHJvdG90eXBlIiwiaW5zdGFuY2UiLCJzZXQiLCJrZXkiLCJFcnJvciIsInRlbXBsYXRlIiwiX2dldFRlbXBsYXRlc01hcCIsInJlbG9hZCIsImNsZWFyIiwiX2NsZWFyVGVtcGxhdGVzIiwibG9hZEZyb21EaXJlY3RvcnkiLCJkaXIiLCJjb3VudCIsImZpbGUiLCJpc1RlbXBsYXRlQ2xhc3MiLCJyZWdpc3RlciIsInJlZ2lzdGVyQWxsIiwiZ2V0IiwiZ2V0QWxsS2V5cyIsImV4aXN0cyIsImhhcyIsIkFycmF5IiwiZnJvbSIsImtleXMiLCJzb3J0Iiwic2l6ZSIsInJlc2V0IiwiY3JlYXRlSW5zdGFuY2UiLCJUZW1wbGF0ZU1hbmFnZXIiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFVBQVUsT0FBTztBQUV4QixTQUFTQyxTQUFTLFFBQVEsMEJBQXVCO0FBQ2pELFNBQVNDLGFBQWEsUUFBUSx3QkFBcUI7QUFDbkQsU0FBU0MsUUFBUSxRQUFRLGdCQUFhO0FBRXRDLE1BQU1DO0lBQ0lDLFlBQWlELElBQUlDLE1BQU07SUFDbkVDLGVBQXdCLE1BQU07SUFFOUIsbUNBQW1DO0lBQ25DLFNBQVM7SUFDVCxtQ0FBbUM7SUFFbkM7O0dBRUMsR0FDRCxNQUFNQyxXQUEwQjtRQUM5QixJQUFJLElBQUksQ0FBQ0QsWUFBWSxFQUFFO1lBQ3JCO1FBQ0Y7UUFDQSxNQUFNRSxnQkFBZ0IsTUFBTVIsVUFDMUJELEtBQUtVLElBQUksQ0FBQyxZQUFZQyxPQUFPLEVBQUU7UUFHakMsS0FBSyxNQUFNQyxnQkFBZ0JILGNBQWU7WUFDeEMsTUFBTUosWUFBWSxNQUFNSCxjQUF1QlU7WUFDL0MsSUFDRVAsVUFBVVEsTUFBTSxL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
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 템플릿 그룹 (관련 템플릿 묶음 실행)
3
+ */
4
+ export type TemplateGroup = {
5
+ name: string;
6
+ description?: string;
7
+ templates: Array<{
8
+ key: string;
9
+ getOptions: (baseOptions: Record<string, unknown>) => Record<string, unknown>;
10
+ }>;
11
+ };
12
+ /**
13
+ * 템플릿 프리셋 (템플릿별 기본 옵션)
14
+ */
15
+ export type TemplatePreset = Record<string, Record<string, unknown>>;
16
+ //# sourceMappingURL=template-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-types.d.ts","sourceRoot":"","sources":["../../src/template/template-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,KAAK,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/E,CAAC,CAAC;CACJ,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 템플릿 그룹 (관련 템플릿 묶음 실행)
3
+ */ /**
4
+ * 템플릿 프리셋 (템플릿별 기본 옵션)
5
+ */ export { };
6
+
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS90ZW1wbGF0ZS10eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIO2FnO2UjOumvyDqt7jro7kgKOq0gOugqCDthZztlIzrpr8g66y27J2MIOyLpO2WiSlcbiAqL1xuZXhwb3J0IHR5cGUgVGVtcGxhdGVHcm91cCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgdGVtcGxhdGVzOiBBcnJheTx7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgZ2V0T3B0aW9uczogKGJhc2VPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0+O1xufTtcblxuLyoqXG4gKiDthZztlIzrpr8g7ZSE66as7IWLICjthZztlIzrpr/rs4Qg6riw67O4IOyYteyFmClcbiAqL1xuZXhwb3J0IHR5cGUgVGVtcGxhdGVQcmVzZXQgPSBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0NBRUMsR0FVRDs7Q0FFQyxHQUNELFdBQXFFIn0=
@@ -1,5 +1,5 @@
1
- import { TemplateKey, TemplateOptions } from "../types/types";
2
- import { EntityNamesRecord } from "../entity/entity-manager";
1
+ import type { EntityNamesRecord } from "../entity/entity-manager";
2
+ import type { TemplateKey, TemplateOptions } from "../types/types";
3
3
  export type RenderedTemplate = {
4
4
  target: string;
5
5
  path: string;
@@ -21,15 +21,25 @@ export declare abstract class Template {
21
21
  /**
22
22
  * 템플릿 구현체가 있는 디렉토리의 모든 템플릿을 로드합니다.
23
23
  * 템플릿이 필요(Template.find)해지기 전에 최소 한 번 호출해주셔야 합니다.
24
+ * @deprecated TemplateManager.autoload() 사용 권장
24
25
  */
25
26
  static autoload(): Promise<void>;
26
27
  /**
27
28
  * 템플릿 **인스턴스**를 key로 찾아옵니다.
28
29
  * 만약 템플릿이 로드(loadAll)되지 않았거나 찾는 템플릿이 없다면 에러를 던집니다.
30
+ * @deprecated TemplateManager.get() 사용 권장
29
31
  * @param key
30
32
  * @returns
31
33
  */
32
34
  static find(key: TemplateKey): Template;
35
+ /**
36
+ * 내부용: TemplateManager에서 사용
37
+ */
38
+ static _getTemplatesMap(): Map<TemplateKey, Template>;
39
+ /**
40
+ * 내부용: TemplateManager에서 사용
41
+ */
42
+ static _clearTemplates(): void;
33
43
  abstract render(options: TemplateOptions[TemplateKey], ...extra: unknown[]): RenderedTemplate | Promise<RenderedTemplate>;
34
44
  abstract getTargetAndPath(names?: EntityNamesRecord, ...extra: unknown[]): {
35
45
  target: string;
@@ -1 +1 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/template/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAK7D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE;QACb,GAAG,EAAE,WAAW,CAAC;QACjB,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;KACvC,EAAE,CAAC;CACL,CAAC;AAEF;;GAEG;AACH,8BAAsB,QAAQ;IAGT,GAAG,EAAE,WAAW;IAFnC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAyC;gBAE9C,GAAG,EAAE,WAAW;IAEnC;;;OAGG;WACiB,QAAQ;IA6B5B;;;;;OAKG;WACW,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ;aAQ9B,MAAM,CACpB,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,EACrC,GAAG,KAAK,EAAE,OAAO,EAAE,GAClB,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;aAE/B,gBAAgB,CAC9B,KAAK,CAAC,EAAE,iBAAiB,EACzB,GAAG,KAAK,EAAE,OAAO,EAAE,GAClB;QACD,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd;CACF"}
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/template/template.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAInE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE;QACb,GAAG,EAAE,WAAW,CAAC;QACjB,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;KACvC,EAAE,CAAC;CACL,CAAC;AAEF;;GAEG;AACH,8BAAsB,QAAQ;IAGT,GAAG,EAAE,WAAW;IAFnC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAyC;gBAE9C,GAAG,EAAE,WAAW;IAEnC;;;;OAIG;WACiB,QAAQ;IA8B5B;;;;;;OAMG;WACW,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ;IAU9C;;OAEG;WACW,gBAAgB,IAAI,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;IAI5D;;OAEG;WACW,eAAe,IAAI,IAAI;aAIrB,MAAM,CACpB,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,EACrC,GAAG,KAAK,EAAE,OAAO,EAAE,GAClB,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;aAE/B,gBAAgB,CAC9B,KAAK,CAAC,EAAE,iBAAiB,EACzB,GAAG,KAAK,EAAE,OAAO,EAAE,GAClB;QACD,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd;CACF"}
@@ -1,6 +1,6 @@
1
+ import path from "path";
1
2
  import { globAsync } from "../utils/async-utils.js";
2
3
  import { importMembers } from "../utils/esm-utils.js";
3
- import path from "path";
4
4
  /**
5
5
  * 템플릿을 나타내는 베이스 클래스입니다.
6
6
  */ export class Template {
@@ -12,16 +12,18 @@ import path from "path";
12
12
  /**
13
13
  * 템플릿 구현체가 있는 디렉토리의 모든 템플릿을 로드합니다.
14
14
  * 템플릿이 필요(Template.find)해지기 전에 최소 한 번 호출해주셔야 합니다.
15
+ * @deprecated TemplateManager.autoload() 사용 권장
15
16
  */ static async autoload() {
16
17
  const templateFiles = await globAsync(// Sonamu의 코드베이스는 항상 빌드된 채로 dist 속에 머무르므로,
17
18
  // 현재 파일을 기준으로 마찬가지로 dist 속에 있는 템플릿 구현체 js 파일들을 찾습니다.
18
19
  path.join(import.meta.dirname, "implementations/*.template.js"));
19
20
  for (const templateFile of templateFiles){
21
+ // biome-ignore lint/suspicious/noExplicitAny: importMembers의 반환 타입을 명시적으로 지정할 수 없음
20
22
  const templates = await importMembers(templateFile);
21
23
  if (templates.length === 1 && typeof templates[0].value === "function" && templates[0].value.prototype instanceof Template) {
22
24
  // 클래스의 인스턴스를 생성하여 등록
23
25
  const instance = new templates[0].value();
24
- this.templates.set(instance.key, instance);
26
+ Template.templates.set(instance.key, instance);
25
27
  } else {
26
28
  throw new Error(`Template ${templateFile} should export only one class that extends Template`);
27
29
  }
@@ -33,15 +35,26 @@ import path from "path";
33
35
  /**
34
36
  * 템플릿 **인스턴스**를 key로 찾아옵니다.
35
37
  * 만약 템플릿이 로드(loadAll)되지 않았거나 찾는 템플릿이 없다면 에러를 던집니다.
36
- * @param key
37
- * @returns
38
+ * @deprecated TemplateManager.get() 사용 권장
39
+ * @param key
40
+ * @returns
38
41
  */ static find(key) {
39
- const instance = this.templates.get(key);
42
+ const instance = Template.templates.get(key);
40
43
  if (!instance) {
41
44
  throw new Error(`Template ${key} not found. It might be becasuse you tried to find a template before loading all templates. Did you call Template.loadAll()?`);
42
45
  }
43
46
  return instance;
44
47
  }
48
+ /**
49
+ * 내부용: TemplateManager에서 사용
50
+ */ static _getTemplatesMap() {
51
+ return Template.templates;
52
+ }
53
+ /**
54
+ * 내부용: TemplateManager에서 사용
55
+ */ static _clearTemplates() {
56
+ Template.templates.clear();
57
+ }
45
58
  }
46
59
 
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS90ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZW1wbGF0ZUtleSwgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGdsb2JBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgaW1wb3J0TWVtYmVycyB9IGZyb20gXCIuLi91dGlscy9lc20tdXRpbHNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmV4cG9ydCB0eXBlIFJlbmRlcmVkVGVtcGxhdGUgPSB7XG4gIHRhcmdldDogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgaW1wb3J0S2V5czogc3RyaW5nW107XG4gIGN1c3RvbUhlYWRlcnM/OiBzdHJpbmdbXTtcbiAgcHJlVGVtcGxhdGVzPzoge1xuICAgIGtleTogVGVtcGxhdGVLZXk7XG4gICAgb3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1RlbXBsYXRlS2V5XTtcbiAgfVtdO1xufTtcblxuLyoqXG4gKiDthZztlIzrpr/snYQg64KY7YOA64K064qUIOuyoOydtOyKpCDtgbTrnpjsiqTsnoXri4jri6QuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUZW1wbGF0ZSB7XG4gIHByaXZhdGUgc3RhdGljIHRlbXBsYXRlczogTWFwPFRlbXBsYXRlS2V5LCBUZW1wbGF0ZT4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGtleTogVGVtcGxhdGVLZXkpIHt9XG5cbiAgLyoqXG4gICAqIO2FnO2UjOumvyDqtaztmITssrTqsIAg7J6I64qUIOuUlOugie2GoOumrOydmCDrqqjrk6Ag7YWc7ZSM66a/7J2EIOuhnOuTnO2VqeuLiOuLpC5cbiAgICog7YWc7ZSM66a/7J20IO2VhOyalChUZW1wbGF0ZS5maW5kKe2VtOyngOq4sCDsoITsl5Ag7LWc7IaMIO2VnCDrsogg7Zi47Lac7ZW07KO87IWU7JW8IO2VqeuLiOuLpC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgYXV0b2xvYWQoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVGaWxlcyA9IGF3YWl0IGdsb2JBc3luYyhcbiAgICAgIC8vIFNvbmFtdeydmCDsvZTrk5zrsqDsnbTsiqTripQg7ZWt7IOBIOu5jOuTnOuQnCDssYTroZwgZGlzdCDsho3sl5Ag66i466y066W066+A66GcLFxuICAgICAgLy8g7ZiE7J6sIO2MjOydvOydhCDquLDspIDsnLzroZwg66eI7LCs6rCA7KeA66GcIGRpc3Qg7IaN7JeQIOyeiOuKlCDthZztlIzrpr8g6rWs7ZiE7LK0IGpzIO2MjOydvOuTpOydhCDssL7sirXri4jri6QuXG4gICAgICBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCJpbXBsZW1lbnRhdGlvbnMvKi50ZW1wbGF0ZS5qc1wiKVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHRlbXBsYXRlRmlsZSBvZiB0ZW1wbGF0ZUZpbGVzKSB7XG4gICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPGFueT4odGVtcGxhdGVGaWxlKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGVtcGxhdGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICB0eXBlb2YgdGVtcGxhdGVzWzBdLnZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgdGVtcGxhdGVzWzBdLnZhbHVlLnByb3RvdHlwZSBpbnN0YW5jZW9mIFRlbXBsYXRlXG4gICAgICApIHtcbiAgICAgICAgLy8g7YG0656Y7Iqk7J2YIOyduOyKpO2EtOyKpOulvCDsg53shLHtlZjsl6wg65Ox66GdXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IHRlbXBsYXRlc1swXS52YWx1ZSgpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlcy5zZXQoaW5zdGFuY2Uua2V5LCBpbnN0YW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRlbXBsYXRlICR7dGVtcGxhdGVGaWxlfSBzaG91bGQgZXhwb3J0IG9ubHkgb25lIGNsYXNzIHRoYXQgZXh0ZW5kcyBUZW1wbGF0ZWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgIGNoYWxrLmdyYXkoYFtMb2FkaW5nXSBMb2FkZWQgJHt0aGlzLnRlbXBsYXRlcy5zaXplfSB0ZW1wbGF0ZXMuYClcbiAgICAvLyApO1xuICB9XG5cbiAgLyoqXG4gICAqIO2FnO2UjOumvyAqKuyduOyKpO2EtOyKpCoq66W8IGtleeuhnCDssL7slYTsmLXri4jri6QuXG4gICAqIOunjOyVvSDthZztlIzrpr/snbQg66Gc65OcKGxvYWRBbGwp65CY7KeAIOyViuyVmOqxsOuCmCDssL7ripQg7YWc7ZSM66a/7J20IOyXhuuLpOuptCDsl5Drn6zrpbwg642Y7KeR64uI64ukLlxuICAgKiBAcGFyYW0ga2V5IFxuICAgKiBAcmV0dXJucyBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZmluZChrZXk6IFRlbXBsYXRlS2V5KTogVGVtcGxhdGUge1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy50ZW1wbGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW1wbGF0ZSAke2tleX0gbm90IGZvdW5kLiBJdCBtaWdodCBiZSBiZWNhc3VzZSB5b3UgdHJpZWQgdG8gZmluZCBhIHRlbXBsYXRlIGJlZm9yZSBsb2FkaW5nIGFsbCB0ZW1wbGF0ZXMuIERpZCB5b3UgY2FsbCBUZW1wbGF0ZS5sb2FkQWxsKCk/YCk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCByZW5kZXIoXG4gICAgb3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1RlbXBsYXRlS2V5XSxcbiAgICAuLi5leHRyYTogdW5rbm93bltdXG4gICk6IFJlbmRlcmVkVGVtcGxhdGUgfCBQcm9taXNlPFJlbmRlcmVkVGVtcGxhdGU+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRUYXJnZXRBbmRQYXRoKFxuICAgIG5hbWVzPzogRW50aXR5TmFtZXNSZWNvcmQsXG4gICAgLi4uZXh0cmE6IHVua25vd25bXVxuICApOiB7XG4gICAgdGFyZ2V0OiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbImdsb2JBc3luYyIsImltcG9ydE1lbWJlcnMiLCJwYXRoIiwiVGVtcGxhdGUiLCJ0ZW1wbGF0ZXMiLCJNYXAiLCJrZXkiLCJhdXRvbG9hZCIsInRlbXBsYXRlRmlsZXMiLCJqb2luIiwiZGlybmFtZSIsInRlbXBsYXRlRmlsZSIsImxlbmd0aCIsInZhbHVlIiwicHJvdG90eXBlIiwiaW5zdGFuY2UiLCJzZXQiLCJFcnJvciIsImZpbmQiLCJnZXQiXSwibWFwcGluZ3MiOiJBQUVBLFNBQVNBLFNBQVMsUUFBUSwwQkFBdUI7QUFDakQsU0FBU0MsYUFBYSxRQUFRLHdCQUFxQjtBQUNuRCxPQUFPQyxVQUFVLE9BQU87QUFjeEI7O0NBRUMsR0FDRCxPQUFPLE1BQWVDOztJQUNwQixPQUFlQyxZQUF3QyxJQUFJQyxNQUFNO0lBRWpFLFlBQVksQUFBT0MsR0FBZ0IsQ0FBRTthQUFsQkEsTUFBQUE7SUFBbUI7SUFFdEM7OztHQUdDLEdBQ0QsYUFBb0JDLFdBQVc7UUFDN0IsTUFBTUMsZ0JBQWdCLE1BQU1SLFVBQzFCLDBDQUEwQztRQUMxQyxxREFBcUQ7UUFDckRFLEtBQUtPLElBQUksQ0FBQyxZQUFZQyxPQUFPLEVBQUU7UUFHakMsS0FBSyxNQUFNQyxnQkFBZ0JILGNBQWU7WUFDeEMsTUFBTUosWUFBWSxNQUFNSCxjQUFtQlU7WUFDM0MsSUFDRVAsVUFBVVEsTUFBTSxLQUFLLEtBQ3JCLE9BQU9SLFNBQVMsQ0FBQyxFQUFFLENBQUNTLEtBQUssS0FBSyxjQUM5QlQsU0FBUyxDQUFDLEVBQUUsQ0FBQ1MsS0FBSyxDQUFDQyxTQUFTLFlBQVlYLFVBQ3hDO2dCQUNBLHFCQUFxQjtnQkFDckIsTUFBTVksV0FBVyxJQUFJWCxTQUFTLENBQUMsRUFBRSxDQUFDUyxLQUFLO2dCQUN2QyxJQUFJLENBQUNULFNBQVMsQ0FBQ1ksR0FBRyxDQUFDRCxTQUFTVCxHQUFHLEVBQUVTO1lBQ25DLE9BQU87Z0JBQ0wsTUFBTSxJQUFJRSxNQUNSLENBQUMsU0FBUyxFQUFFTixhQUFhLG1EQUFtRCxDQUFDO1lBRWpGO1FBQ0Y7SUFFQSxlQUFlO0lBQ2YscUVBQXFFO0lBQ3JFLEtBQUs7SUFDUDtJQUVBOzs7OztHQUtDLEdBQ0QsT0FBY08sS0FBS1osR0FBZ0IsRUFBWTtRQUM3QyxNQUFNUyxXQUFXLElBQUksQ0FBQ1gsU0FBUyxDQUFDZSxHQUFHLENBQUNiO1FBQ3BDLElBQUksQ0FBQ1MsVUFBVTtZQUNiLE1BQU0sSUFBSUUsTUFBTSxDQUFDLFNBQVMsRUFBRVgsSUFBSSw0SEFBNEgsQ0FBQztRQUMvSjtRQUNBLE9BQU9TO0lBQ1Q7QUFjRiJ9
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS90ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVLZXksIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJlZFRlbXBsYXRlID0ge1xuICB0YXJnZXQ6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGltcG9ydEtleXM6IHN0cmluZ1tdO1xuICBjdXN0b21IZWFkZXJzPzogc3RyaW5nW107XG4gIHByZVRlbXBsYXRlcz86IHtcbiAgICBrZXk6IFRlbXBsYXRlS2V5O1xuICAgIG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUZW1wbGF0ZUtleV07XG4gIH1bXTtcbn07XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOuCmO2DgOuCtOuKlCDrsqDsnbTsiqQg7YG0656Y7Iqk7J6F64uI64ukLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGVtcGxhdGUge1xuICBwcml2YXRlIHN0YXRpYyB0ZW1wbGF0ZXM6IE1hcDxUZW1wbGF0ZUtleSwgVGVtcGxhdGU+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBrZXk6IFRlbXBsYXRlS2V5KSB7fVxuXG4gIC8qKlxuICAgKiDthZztlIzrpr8g6rWs7ZiE7LK06rCAIOyeiOuKlCDrlJTroInthqDrpqzsnZgg66qo65OgIO2FnO2UjOumv+ydhCDroZzrk5ztlanri4jri6QuXG4gICAqIO2FnO2UjOumv+ydtCDtlYTsmpQoVGVtcGxhdGUuZmluZCntlbTsp4DquLAg7KCE7JeQIOy1nOyGjCDtlZwg67KIIO2YuOy2nO2VtOyjvOyFlOyVvCDtlanri4jri6QuXG4gICAqIEBkZXByZWNhdGVkIFRlbXBsYXRlTWFuYWdlci5hdXRvbG9hZCgpIOyCrOyaqSDqtozsnqVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgYXV0b2xvYWQoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVGaWxlcyA9IGF3YWl0IGdsb2JBc3luYyhcbiAgICAgIC8vIFNvbmFtdeydmCDsvZTrk5zrsqDsnbTsiqTripQg7ZWt7IOBIOu5jOuTnOuQnCDssYTroZwgZGlzdCDsho3sl5Ag66i466y066W066+A66GcLFxuICAgICAgLy8g7ZiE7J6sIO2MjOydvOydhCDquLDspIDsnLzroZwg66eI7LCs6rCA7KeA66GcIGRpc3Qg7IaN7JeQIOyeiOuKlCDthZztlIzrpr8g6rWs7ZiE7LK0IGpzIO2MjOydvOuTpOydhCDssL7sirXri4jri6QuXG4gICAgICBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCJpbXBsZW1lbnRhdGlvbnMvKi50ZW1wbGF0ZS5qc1wiKSxcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCB0ZW1wbGF0ZUZpbGUgb2YgdGVtcGxhdGVGaWxlcykge1xuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBpbXBvcnRNZW1iZXJz7J2YIOuwmO2ZmCDtg4DsnoXsnYQg66qF7Iuc7KCB7Jy866GcIOyngOygle2VoCDsiJgg7JeG7J2MXG4gICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPGFueT4odGVtcGxhdGVGaWxlKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGVtcGxhdGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICB0eXBlb2YgdGVtcGxhdGVzWzBdLnZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgdGVtcGxhdGVzWzBdLnZhbHVlLnByb3RvdHlwZSBpbnN0YW5jZW9mIFRlbXBsYXRlXG4gICAgICApIHtcbiAgICAgICAgLy8g7YG0656Y7Iqk7J2YIOyduOyKpO2EtOyKpOulvCDsg53shLHtlZjsl6wg65Ox66GdXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IHRlbXBsYXRlc1swXS52YWx1ZSgpO1xuICAgICAgICBUZW1wbGF0ZS50ZW1wbGF0ZXMuc2V0KGluc3RhbmNlLmtleSwgaW5zdGFuY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUZW1wbGF0ZSAke3RlbXBsYXRlRmlsZX0gc2hvdWxkIGV4cG9ydCBvbmx5IG9uZSBjbGFzcyB0aGF0IGV4dGVuZHMgVGVtcGxhdGVgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKFxuICAgIC8vICAgY2hhbGsuZ3JheShgW0xvYWRpbmddIExvYWRlZCAke3RoaXMudGVtcGxhdGVzLnNpemV9IHRlbXBsYXRlcy5gKVxuICAgIC8vICk7XG4gIH1cblxuICAvKipcbiAgICog7YWc7ZSM66a/ICoq7J247Iqk7YS07IqkKirrpbwga2V566GcIOywvuyVhOyYteuLiOuLpC5cbiAgICog66eM7JW9IO2FnO2UjOumv+ydtCDroZzrk5wobG9hZEFsbCnrkJjsp4Ag7JWK7JWY6rGw64KYIOywvuuKlCDthZztlIzrpr/snbQg7JeG64uk66m0IOyXkOufrOulvCDrjZjsp5Hri4jri6QuXG4gICAqIEBkZXByZWNhdGVkIFRlbXBsYXRlTWFuYWdlci5nZXQoKSDsgqzsmqkg6raM7J6lXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZmluZChrZXk6IFRlbXBsYXRlS2V5KTogVGVtcGxhdGUge1xuICAgIGNvbnN0IGluc3RhbmNlID0gVGVtcGxhdGUudGVtcGxhdGVzLmdldChrZXkpO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRlbXBsYXRlICR7a2V5fSBub3QgZm91bmQuIEl0IG1pZ2h0IGJlIGJlY2FzdXNlIHlvdSB0cmllZCB0byBmaW5kIGEgdGVtcGxhdGUgYmVmb3JlIGxvYWRpbmcgYWxsIHRlbXBsYXRlcy4gRGlkIHlvdSBjYWxsIFRlbXBsYXRlLmxvYWRBbGwoKT9gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIOuCtOu2gOyaqTogVGVtcGxhdGVNYW5hZ2Vy7JeQ7IScIOyCrOyaqVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBfZ2V0VGVtcGxhdGVzTWFwKCk6IE1hcDxUZW1wbGF0ZUtleSwgVGVtcGxhdGU+IHtcbiAgICByZXR1cm4gVGVtcGxhdGUudGVtcGxhdGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIOuCtOu2gOyaqTogVGVtcGxhdGVNYW5hZ2Vy7JeQ7IScIOyCrOyaqVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBfY2xlYXJUZW1wbGF0ZXMoKTogdm9pZCB7XG4gICAgVGVtcGxhdGUudGVtcGxhdGVzLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcmVuZGVyKFxuICAgIG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUZW1wbGF0ZUtleV0sXG4gICAgLi4uZXh0cmE6IHVua25vd25bXVxuICApOiBSZW5kZXJlZFRlbXBsYXRlIHwgUHJvbWlzZTxSZW5kZXJlZFRlbXBsYXRlPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgZ2V0VGFyZ2V0QW5kUGF0aChcbiAgICBuYW1lcz86IEVudGl0eU5hbWVzUmVjb3JkLFxuICAgIC4uLmV4dHJhOiB1bmtub3duW11cbiAgKToge1xuICAgIHRhcmdldDogc3RyaW5nO1xuICAgIHBhdGg6IHN0cmluZztcbiAgfTtcbn1cbiJdLCJuYW1lcyI6WyJwYXRoIiwiZ2xvYkFzeW5jIiwiaW1wb3J0TWVtYmVycyIsIlRlbXBsYXRlIiwidGVtcGxhdGVzIiwiTWFwIiwia2V5IiwiYXV0b2xvYWQiLCJ0ZW1wbGF0ZUZpbGVzIiwiam9pbiIsImRpcm5hbWUiLCJ0ZW1wbGF0ZUZpbGUiLCJsZW5ndGgiLCJ2YWx1ZSIsInByb3RvdHlwZSIsImluc3RhbmNlIiwic2V0IiwiRXJyb3IiLCJmaW5kIiwiZ2V0IiwiX2dldFRlbXBsYXRlc01hcCIsIl9jbGVhclRlbXBsYXRlcyIsImNsZWFyIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxVQUFVLE9BQU87QUFHeEIsU0FBU0MsU0FBUyxRQUFRLDBCQUF1QjtBQUNqRCxTQUFTQyxhQUFhLFFBQVEsd0JBQXFCO0FBY25EOztDQUVDLEdBQ0QsT0FBTyxNQUFlQzs7SUFDcEIsT0FBZUMsWUFBd0MsSUFBSUMsTUFBTTtJQUVqRSxZQUFZLEFBQU9DLEdBQWdCLENBQUU7YUFBbEJBLE1BQUFBO0lBQW1CO0lBRXRDOzs7O0dBSUMsR0FDRCxhQUFvQkMsV0FBVztRQUM3QixNQUFNQyxnQkFBZ0IsTUFBTVAsVUFDMUIsMENBQTBDO1FBQzFDLHFEQUFxRDtRQUNyREQsS0FBS1MsSUFBSSxDQUFDLFlBQVlDLE9BQU8sRUFBRTtRQUdqQyxLQUFLLE1BQU1DLGdCQUFnQkgsY0FBZTtZQUN4QyxtRkFBbUY7WUFDbkYsTUFBTUosWUFBWSxNQUFNRixjQUFtQlM7WUFDM0MsSUFDRVAsVUFBVVEsTUFBTSxLQUFLLEtBQ3JCLE9BQU9SLFNBQVMsQ0FBQyxFQUFFLENBQUNTLEtBQUssS0FBSyxjQUM5QlQsU0FBUyxDQUFDLEVBQUUsQ0FBQ1MsS0FBSyxDQUFDQyxTQUFTLFlBQVlYLFVBQ3hDO2dCQUNBLHFCQUFxQjtnQkFDckIsTUFBTVksV0FBVyxJQUFJWCxTQUFTLENBQUMsRUFBRSxDQUFDUyxLQUFLO2dCQUN2Q1YsU0FBU0MsU0FBUyxDQUFDWSxHQUFHLENBQUNELFNBQVNULEdBQUcsRUFBRVM7WUFDdkMsT0FBTztnQkFDTCxNQUFNLElBQUlFLE1BQ1IsQ0FBQyxTQUFTLEVBQUVOLGFBQWEsbURBQW1ELENBQUM7WUFFakY7UUFDRjtJQUVBLGVBQWU7SUFDZixxRUFBcUU7SUFDckUsS0FBSztJQUNQO0lBRUE7Ozs7OztHQU1DLEdBQ0QsT0FBY08sS0FBS1osR0FBZ0IsRUFBWTtRQUM3QyxNQUFNUyxXQUFXWixTQUFTQyxTQUFTLENBQUNlLEdBQUcsQ0FBQ2I7UUFDeEMsSUFBSSxDQUFDUyxVQUFVO1lBQ2IsTUFBTSxJQUFJRSxNQUNSLENBQUMsU0FBUyxFQUFFWCxJQUFJLDRIQUE0SCxDQUFDO1FBRWpKO1FBQ0EsT0FBT1M7SUFDVDtJQUVBOztHQUVDLEdBQ0QsT0FBY0ssbUJBQStDO1FBQzNELE9BQU9qQixTQUFTQyxTQUFTO0lBQzNCO0lBRUE7O0dBRUMsR0FDRCxPQUFjaUIsa0JBQXdCO1FBQ3BDbEIsU0FBU0MsU0FBUyxDQUFDa0IsS0FBSztJQUMxQjtBQWNGIn0=
@@ -1,18 +1,51 @@
1
- import z from "zod";
2
- import { EntityProp, RenderingNode } from "../types/types";
1
+ /**
2
+ * zod-converter 구성
3
+ * 1. 유틸리티
4
+ * - getZodTypeById
5
+ *
6
+ * 2. Zod 타입 변환 (EntityProp -> ZodType)
7
+ * - propToZodType
8
+ *
9
+ * 3. EntityProp/Node -> Zod 코드 문자열
10
+ * - propToZodTypeDef
11
+ * - propNodeToZodTypeDef
12
+ *
13
+ * 4. Zod 타입 인스턴스를 해당하는 Zod 코드 문자열로 변환 (ZodType -> ZodCode)
14
+ * - zodTypeToZodCode
15
+ *
16
+ * 5. Zod 타입을 UI 렌더링에 사용할 수 있는 RenderingNode로 변환 (ZodType -> RenderingNode)
17
+ * - zodTypeToRenderingNode
18
+ * - resolveRenderType
19
+ */
20
+ import { z } from "zod";
21
+ import { type EntityProp, type EntityPropNode, type RenderingNode } from "../types/types";
3
22
  /**
4
23
  * Zod 타입 ID로부터 동적으로 Zod 스키마를 로드합니다.
5
24
  * dist 디렉토리에서 ESM으로 import하여 가져옵니다.
6
25
  */
7
26
  export declare function getZodTypeById(zodTypeId: string): Promise<z.ZodTypeAny>;
8
- /**
9
- * Zod 타입을 UI 렌더링에 사용할 수 있는 RenderingNode로 변환합니다.
10
- * 재귀적으로 중첩된 타입들을 처리합니다.
11
- */
12
- export declare function zodTypeToRenderingNode(zodType: z.ZodType<any>, baseKey?: string): RenderingNode;
13
27
  /**
14
28
  * EntityProp을 Zod 타입으로 변환합니다.
15
29
  * 각 prop의 타입에 따라 적절한 Zod validator를 생성합니다.
16
30
  */
17
31
  export declare function propToZodType(prop: EntityProp): Promise<z.ZodTypeAny>;
32
+ /**
33
+ * EntityProp을 Zod 타입 정의 코드 문자열로 변환합니다.
34
+ */
35
+ export declare function propToZodTypeDef(prop: EntityProp, injectImportKeys: string[]): string;
36
+ /**
37
+ * EntityPropNode를 Zod 타입 정의 코드 문자열로 변환합니다.
38
+ * plain, array, object 노드 타입을 재귀적으로 처리하여 중첩 구조를 지원합니다.
39
+ */
40
+ export declare function propNodeToZodTypeDef(propNode: EntityPropNode, injectImportKeys: string[]): string;
41
+ export declare function zodTypeToTsTypeDef(zt: z.ZodType): string;
42
+ /**
43
+ * Zod 타입 인스턴스를 해당하는 Zod 코드 문자열로 변환합니다.
44
+ */
45
+ export declare function zodTypeToZodCode(zt: z.ZodType): string;
46
+ /**
47
+ * Zod 타입을 UI 렌더링에 사용할 수 있는 RenderingNode로 변환합니다.
48
+ * 재귀적으로 중첩된 타입들을 처리합니다.
49
+ */
50
+ export declare function zodTypeToRenderingNode(zodType: z.ZodTypeAny, baseKey?: string): RenderingNode;
18
51
  //# sourceMappingURL=zod-converter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"zod-converter.d.ts","sourceRoot":"","sources":["../../src/template/zod-converter.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EACL,UAAU,EAoBV,aAAa,EACd,MAAM,gBAAgB,CAAC;AAOxB;;;GAGG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAe7E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EACvB,OAAO,GAAE,MAAe,GACvB,aAAa,CA0Df;AA8CD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAmD3E"}
1
+ {"version":3,"file":"zod-converter.d.ts","sourceRoot":"","sources":["../../src/template/zod-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EAwBnB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAYxB;;;GAGG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAU7E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAkE3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAyErF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BjG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+FxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CA+GtD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,CAAC,UAAU,EACrB,OAAO,GAAE,MAAe,GACvB,aAAa,CAoDf"}