sonamu 0.4.13 → 0.5.0

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 (371) hide show
  1. package/.swcrc +15 -0
  2. package/dist/api/base-frame.d.ts +8 -0
  3. package/dist/api/base-frame.d.ts.map +1 -0
  4. package/dist/api/base-frame.js +2 -0
  5. package/dist/api/base-frame.js.map +1 -0
  6. package/dist/api/caster.d.ts +5 -0
  7. package/dist/api/caster.d.ts.map +1 -0
  8. package/dist/api/caster.js +2 -0
  9. package/dist/api/caster.js.map +1 -0
  10. package/dist/api/code-converters.d.ts +23 -0
  11. package/dist/api/code-converters.d.ts.map +1 -0
  12. package/dist/api/code-converters.js +2 -0
  13. package/dist/api/code-converters.js.map +1 -0
  14. package/dist/api/context.d.ts +16 -0
  15. package/dist/api/context.d.ts.map +1 -0
  16. package/dist/api/context.js +2 -0
  17. package/dist/api/context.js.map +1 -0
  18. package/dist/api/decorators.d.ts +50 -0
  19. package/dist/api/decorators.d.ts.map +1 -0
  20. package/dist/api/decorators.js +2 -0
  21. package/dist/api/decorators.js.map +1 -0
  22. package/dist/api/index.d.ts +8 -0
  23. package/dist/api/index.d.ts.map +1 -0
  24. package/dist/api/index.js +2 -0
  25. package/dist/api/index.js.map +1 -0
  26. package/dist/api/sonamu.d.ts +83 -0
  27. package/dist/api/sonamu.d.ts.map +1 -0
  28. package/dist/api/sonamu.js +2 -0
  29. package/dist/api/sonamu.js.map +1 -0
  30. package/dist/api/sonamu.types.d.ts +30 -0
  31. package/dist/api/sonamu.types.d.ts.map +1 -0
  32. package/dist/api/sonamu.types.js +2 -0
  33. package/dist/api/sonamu.types.js.map +1 -0
  34. package/dist/bin/build-config.d.ts +5 -0
  35. package/dist/bin/build-config.d.ts.map +1 -0
  36. package/dist/bin/build-config.js +2 -0
  37. package/dist/bin/build-config.js.map +1 -0
  38. package/dist/bin/cli-wrapper.d.ts +2 -0
  39. package/dist/bin/cli-wrapper.d.ts.map +1 -0
  40. package/dist/bin/cli-wrapper.js +1 -38
  41. package/dist/bin/cli-wrapper.js.map +1 -1
  42. package/dist/bin/cli.d.ts +2 -2
  43. package/dist/bin/cli.d.ts.map +1 -0
  44. package/dist/bin/cli.js +1 -903
  45. package/dist/bin/cli.js.map +1 -1
  46. package/dist/bin/cli.mjs +2 -2
  47. package/dist/{chunk-DMJSNO2L.js → chunk-2WAC2GER.js} +44 -44
  48. package/dist/{chunk-DMJSNO2L.js.map → chunk-2WAC2GER.js.map} +1 -1
  49. package/dist/{chunk-NI37CY4T.mjs → chunk-C3IPIF6O.mjs} +2 -2
  50. package/dist/{chunk-DYFCACHD.js → chunk-EXHKSVTE.js} +7 -7
  51. package/dist/{chunk-QJFHDCBN.mjs → chunk-FCERKIIF.mjs} +2 -2
  52. package/dist/chunk-FCERKIIF.mjs.map +1 -0
  53. package/dist/{chunk-DDJ7T4MA.mjs → chunk-HGIBJYOU.mjs} +2 -2
  54. package/dist/{chunk-NIFOTHBW.mjs → chunk-JKSOJRQA.mjs} +2 -2
  55. package/dist/{chunk-CXAVBVKC.js → chunk-OTKKFP3Y.js} +100 -100
  56. package/dist/{chunk-J6S43O7G.js → chunk-UZ2IY5VE.js} +4 -4
  57. package/dist/database/_batch_update.d.ts +15 -0
  58. package/dist/database/_batch_update.d.ts.map +1 -0
  59. package/dist/database/_batch_update.js +2 -0
  60. package/dist/database/_batch_update.js.map +1 -0
  61. package/dist/database/base-model.d.ts +41 -0
  62. package/dist/database/base-model.d.ts.map +1 -0
  63. package/dist/database/base-model.js +2 -0
  64. package/dist/database/base-model.js.map +1 -0
  65. package/dist/database/code-generator.d.ts +13 -0
  66. package/dist/database/code-generator.d.ts.map +1 -0
  67. package/dist/database/code-generator.js +2 -0
  68. package/dist/database/code-generator.js.map +1 -0
  69. package/dist/database/db.d.ts +40 -0
  70. package/dist/database/db.d.ts.map +1 -0
  71. package/dist/database/db.js +2 -0
  72. package/dist/database/db.js.map +1 -0
  73. package/dist/database/drivers/knex/base-model.js +8 -8
  74. package/dist/database/drivers/knex/base-model.mjs +3 -3
  75. package/dist/database/drivers/kysely/base-model.js +9 -9
  76. package/dist/database/drivers/kysely/base-model.mjs +3 -3
  77. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +2 -0
  78. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +1 -0
  79. package/dist/database/knex-plugins/knex-on-duplicate-update.js +2 -0
  80. package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +1 -0
  81. package/dist/database/puri-wrapper.d.ts +34 -0
  82. package/dist/database/puri-wrapper.d.ts.map +1 -0
  83. package/dist/database/puri-wrapper.js +2 -0
  84. package/dist/database/puri-wrapper.js.map +1 -0
  85. package/dist/database/puri.d.ts +83 -0
  86. package/dist/database/puri.d.ts.map +1 -0
  87. package/dist/database/puri.js +2 -0
  88. package/dist/database/puri.js.map +1 -0
  89. package/dist/database/puri.types.d.ts +60 -0
  90. package/dist/database/puri.types.d.ts.map +1 -0
  91. package/dist/database/puri.types.js +2 -0
  92. package/dist/database/puri.types.js.map +1 -0
  93. package/dist/database/transaction-context.d.ts +9 -0
  94. package/dist/database/transaction-context.d.ts.map +1 -0
  95. package/dist/database/transaction-context.js +2 -0
  96. package/dist/database/transaction-context.js.map +1 -0
  97. package/dist/database/types.d.ts +39 -0
  98. package/dist/database/types.d.ts.map +1 -0
  99. package/dist/database/types.js +2 -0
  100. package/dist/database/types.js.map +1 -0
  101. package/dist/database/upsert-builder.d.ts +34 -0
  102. package/dist/database/upsert-builder.d.ts.map +1 -0
  103. package/dist/database/upsert-builder.js +2 -0
  104. package/dist/database/upsert-builder.js.map +1 -0
  105. package/dist/entity/entity-manager.d.ts +32 -0
  106. package/dist/entity/entity-manager.d.ts.map +1 -0
  107. package/dist/entity/entity-manager.js +2 -0
  108. package/dist/entity/entity-manager.js.map +1 -0
  109. package/dist/entity/entity-utils.d.ts +61 -0
  110. package/dist/entity/entity-utils.d.ts.map +1 -0
  111. package/dist/entity/entity-utils.js +2 -0
  112. package/dist/entity/entity-utils.js.map +1 -0
  113. package/dist/entity/entity.d.ts +62 -0
  114. package/dist/entity/entity.d.ts.map +1 -0
  115. package/dist/entity/entity.js +2 -0
  116. package/dist/entity/entity.js.map +1 -0
  117. package/dist/entity/migrator.d.ts +135 -0
  118. package/dist/entity/migrator.d.ts.map +1 -0
  119. package/dist/entity/migrator.js +2 -0
  120. package/dist/entity/migrator.js.map +1 -0
  121. package/dist/exceptions/error-handler.d.ts +3 -0
  122. package/dist/exceptions/error-handler.d.ts.map +1 -0
  123. package/dist/exceptions/error-handler.js +2 -0
  124. package/dist/exceptions/error-handler.js.map +1 -0
  125. package/dist/exceptions/so-exceptions.d.ts +48 -0
  126. package/dist/exceptions/so-exceptions.d.ts.map +1 -0
  127. package/dist/exceptions/so-exceptions.js +2 -0
  128. package/dist/exceptions/so-exceptions.js.map +1 -0
  129. package/dist/file-storage/driver.d.ts +45 -0
  130. package/dist/file-storage/driver.d.ts.map +1 -0
  131. package/dist/file-storage/driver.js +2 -0
  132. package/dist/file-storage/driver.js.map +1 -0
  133. package/dist/file-storage/file-storage.d.ts +50 -0
  134. package/dist/file-storage/file-storage.d.ts.map +1 -0
  135. package/dist/file-storage/file-storage.js +2 -0
  136. package/dist/file-storage/file-storage.js.map +1 -0
  137. package/dist/index.d.ts +22 -813
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/index.js +1 -433
  140. package/dist/index.js.map +1 -1
  141. package/dist/index.mjs +3 -3
  142. package/dist/migration/code-generation.d.ts +15 -0
  143. package/dist/migration/code-generation.d.ts.map +1 -0
  144. package/dist/migration/code-generation.js +2 -0
  145. package/dist/migration/code-generation.js.map +1 -0
  146. package/dist/migration/migration-set.d.ts +17 -0
  147. package/dist/migration/migration-set.d.ts.map +1 -0
  148. package/dist/migration/migration-set.js +2 -0
  149. package/dist/migration/migration-set.js.map +1 -0
  150. package/dist/migration/migrator.d.ts +130 -0
  151. package/dist/migration/migrator.d.ts.map +1 -0
  152. package/dist/migration/migrator.js +2 -0
  153. package/dist/migration/migrator.js.map +1 -0
  154. package/dist/migration/types.d.ts +52 -0
  155. package/dist/migration/types.d.ts.map +1 -0
  156. package/dist/migration/types.js +2 -0
  157. package/dist/migration/types.js.map +1 -0
  158. package/dist/smd/smd-manager.d.ts +28 -0
  159. package/dist/smd/smd-manager.d.ts.map +1 -0
  160. package/dist/smd/smd-manager.js +2 -0
  161. package/dist/smd/smd-manager.js.map +1 -0
  162. package/dist/smd/smd.d.ts +40 -0
  163. package/dist/smd/smd.d.ts.map +1 -0
  164. package/dist/smd/smd.js +2 -0
  165. package/dist/smd/smd.js.map +1 -0
  166. package/dist/syncer/index.d.ts +2 -0
  167. package/dist/syncer/index.d.ts.map +1 -0
  168. package/dist/syncer/index.js +2 -0
  169. package/dist/syncer/index.js.map +1 -0
  170. package/dist/syncer/syncer.d.ts +127 -0
  171. package/dist/syncer/syncer.d.ts.map +1 -0
  172. package/dist/syncer/syncer.js +2 -0
  173. package/dist/syncer/syncer.js.map +1 -0
  174. package/dist/templates/base-template.d.ts +13 -0
  175. package/dist/templates/base-template.d.ts.map +1 -0
  176. package/dist/templates/base-template.js +2 -0
  177. package/dist/templates/base-template.js.map +1 -0
  178. package/dist/templates/entity.template.d.ts +17 -0
  179. package/dist/templates/entity.template.d.ts.map +1 -0
  180. package/dist/templates/entity.template.js +2 -0
  181. package/dist/templates/entity.template.js.map +1 -0
  182. package/dist/templates/generated.template.d.ts +27 -0
  183. package/dist/templates/generated.template.d.ts.map +1 -0
  184. package/dist/templates/generated.template.js +2 -0
  185. package/dist/templates/generated.template.js.map +1 -0
  186. package/dist/templates/generated_http.template.d.ts +24 -0
  187. package/dist/templates/generated_http.template.d.ts.map +1 -0
  188. package/dist/templates/generated_http.template.js +2 -0
  189. package/dist/templates/generated_http.template.js.map +1 -0
  190. package/dist/templates/generated_sso.template.d.ts +20 -0
  191. package/dist/templates/generated_sso.template.d.ts.map +1 -0
  192. package/dist/templates/generated_sso.template.js +2 -0
  193. package/dist/templates/generated_sso.template.js.map +1 -0
  194. package/dist/templates/index.d.ts +2 -0
  195. package/dist/templates/index.d.ts.map +1 -0
  196. package/dist/templates/index.js +2 -0
  197. package/dist/templates/index.js.map +1 -0
  198. package/dist/templates/init_types.template.d.ts +17 -0
  199. package/dist/templates/init_types.template.d.ts.map +1 -0
  200. package/dist/templates/init_types.template.js +2 -0
  201. package/dist/templates/init_types.template.js.map +1 -0
  202. package/dist/templates/model.template.d.ts +17 -0
  203. package/dist/templates/model.template.d.ts.map +1 -0
  204. package/dist/templates/model.template.js +2 -0
  205. package/dist/templates/model.template.js.map +1 -0
  206. package/dist/templates/model_test.template.d.ts +17 -0
  207. package/dist/templates/model_test.template.d.ts.map +1 -0
  208. package/dist/templates/model_test.template.js +2 -0
  209. package/dist/templates/model_test.template.js.map +1 -0
  210. package/dist/templates/service.template.d.ts +29 -0
  211. package/dist/templates/service.template.d.ts.map +1 -0
  212. package/dist/templates/service.template.js +2 -0
  213. package/dist/templates/service.template.js.map +1 -0
  214. package/dist/templates/view_enums_buttonset.template.d.ts +17 -0
  215. package/dist/templates/view_enums_buttonset.template.d.ts.map +1 -0
  216. package/dist/templates/view_enums_buttonset.template.js +2 -0
  217. package/dist/templates/view_enums_buttonset.template.js.map +1 -0
  218. package/dist/templates/view_enums_dropdown.template.d.ts +18 -0
  219. package/dist/templates/view_enums_dropdown.template.d.ts.map +1 -0
  220. package/dist/templates/view_enums_dropdown.template.js +2 -0
  221. package/dist/templates/view_enums_dropdown.template.js.map +1 -0
  222. package/dist/templates/view_enums_select.template.d.ts +17 -0
  223. package/dist/templates/view_enums_select.template.d.ts.map +1 -0
  224. package/dist/templates/view_enums_select.template.js +2 -0
  225. package/dist/templates/view_enums_select.template.js.map +1 -0
  226. package/dist/templates/view_form.template.d.ts +26 -0
  227. package/dist/templates/view_form.template.d.ts.map +1 -0
  228. package/dist/templates/view_form.template.js +2 -0
  229. package/dist/templates/view_form.template.js.map +1 -0
  230. package/dist/templates/view_id_all_select.template.d.ts +17 -0
  231. package/dist/templates/view_id_all_select.template.d.ts.map +1 -0
  232. package/dist/templates/view_id_all_select.template.js +2 -0
  233. package/dist/templates/view_id_all_select.template.js.map +1 -0
  234. package/dist/templates/view_id_async_select.template.d.ts +17 -0
  235. package/dist/templates/view_id_async_select.template.d.ts.map +1 -0
  236. package/dist/templates/view_id_async_select.template.js +2 -0
  237. package/dist/templates/view_id_async_select.template.js.map +1 -0
  238. package/dist/templates/view_list.template.d.ts +38 -0
  239. package/dist/templates/view_list.template.d.ts.map +1 -0
  240. package/dist/templates/view_list.template.js +2 -0
  241. package/dist/templates/view_list.template.js.map +1 -0
  242. package/dist/templates/view_list_columns.template.d.ts +17 -0
  243. package/dist/templates/view_list_columns.template.d.ts.map +1 -0
  244. package/dist/templates/view_list_columns.template.js +2 -0
  245. package/dist/templates/view_list_columns.template.js.map +1 -0
  246. package/dist/templates/view_search_input.template.d.ts +17 -0
  247. package/dist/templates/view_search_input.template.d.ts.map +1 -0
  248. package/dist/templates/view_search_input.template.js +2 -0
  249. package/dist/templates/view_search_input.template.js.map +1 -0
  250. package/dist/testing/_relation-graph.d.ts +7 -0
  251. package/dist/testing/_relation-graph.d.ts.map +1 -0
  252. package/dist/testing/_relation-graph.js +2 -0
  253. package/dist/testing/_relation-graph.js.map +1 -0
  254. package/dist/testing/fixture-manager.d.ts +35 -0
  255. package/dist/testing/fixture-manager.d.ts.map +1 -0
  256. package/dist/testing/fixture-manager.js +2 -0
  257. package/dist/testing/fixture-manager.js.map +1 -0
  258. package/dist/types/types.d.ts +609 -0
  259. package/dist/types/types.d.ts.map +1 -0
  260. package/dist/types/types.js +2 -0
  261. package/dist/types/types.js.map +1 -0
  262. package/dist/typings/knex.d.js +2 -0
  263. package/dist/typings/knex.d.js.map +1 -0
  264. package/dist/utils/async-utils.d.ts +25 -0
  265. package/dist/utils/async-utils.d.ts.map +1 -0
  266. package/dist/utils/async-utils.js +2 -0
  267. package/dist/utils/async-utils.js.map +1 -0
  268. package/dist/utils/controller.d.ts +9 -0
  269. package/dist/utils/controller.d.ts.map +1 -0
  270. package/dist/utils/controller.js +2 -0
  271. package/dist/utils/controller.js.map +1 -0
  272. package/dist/utils/fs-utils.d.ts +9 -0
  273. package/dist/utils/fs-utils.d.ts.map +1 -0
  274. package/dist/utils/fs-utils.js +2 -0
  275. package/dist/utils/fs-utils.js.map +1 -0
  276. package/dist/utils/lodash-able.d.ts +2 -0
  277. package/dist/utils/lodash-able.d.ts.map +1 -0
  278. package/dist/utils/lodash-able.js +2 -0
  279. package/dist/utils/lodash-able.js.map +1 -0
  280. package/dist/utils/model.d.ts +17 -0
  281. package/dist/utils/model.d.ts.map +1 -0
  282. package/dist/utils/model.js +2 -0
  283. package/dist/utils/model.js.map +1 -0
  284. package/dist/utils/sql-parser.d.ts +4 -0
  285. package/dist/utils/sql-parser.d.ts.map +1 -0
  286. package/dist/utils/sql-parser.js +2 -0
  287. package/dist/utils/sql-parser.js.map +1 -0
  288. package/dist/utils/utils.d.ts +9 -0
  289. package/dist/utils/utils.d.ts.map +1 -0
  290. package/dist/utils/utils.js +2 -0
  291. package/dist/utils/utils.js.map +1 -0
  292. package/dist/utils/zod-error.d.ts +8 -0
  293. package/dist/utils/zod-error.d.ts.map +1 -0
  294. package/dist/utils/zod-error.js +2 -0
  295. package/dist/utils/zod-error.js.map +1 -0
  296. package/nodemon.json +6 -0
  297. package/package.json +29 -44
  298. package/src/api/base-frame.ts +3 -4
  299. package/src/api/caster.ts +22 -23
  300. package/src/api/code-converters.ts +170 -134
  301. package/src/api/context.ts +13 -6
  302. package/src/api/decorators.ts +146 -20
  303. package/src/api/index.ts +2 -0
  304. package/src/api/sonamu.ts +374 -165
  305. package/src/bin/build-config.ts +5 -0
  306. package/src/bin/cli-wrapper.ts +29 -40
  307. package/src/bin/cli.ts +132 -190
  308. package/src/database/_batch_update.ts +10 -15
  309. package/src/database/base-model.ts +300 -216
  310. package/src/database/db.ts +191 -21
  311. package/src/database/{drivers/knex/plugins → knex-plugins}/knex-on-duplicate-update.ts +1 -1
  312. package/src/database/puri-wrapper.ts +129 -0
  313. package/src/database/puri.ts +808 -0
  314. package/src/database/puri.types.ts +222 -0
  315. package/src/database/transaction-context.ts +18 -0
  316. package/src/database/upsert-builder.ts +32 -35
  317. package/src/entity/entity-manager.ts +7 -15
  318. package/src/entity/entity.ts +9 -31
  319. package/src/entity/migrator-/354/235/264/354/202/254/352/260/224/354/226/264/354/232/224.md +1 -0
  320. package/src/file-storage/driver.ts +121 -0
  321. package/src/file-storage/file-storage.ts +100 -0
  322. package/src/index.ts +14 -11
  323. package/src/migration/code-generation.ts +777 -0
  324. package/src/migration/migration-set.ts +453 -0
  325. package/src/migration/migrator.ts +823 -0
  326. package/src/migration/types.ts +53 -0
  327. package/src/shared/web.shared.ts.txt +33 -2
  328. package/src/syncer/syncer.ts +294 -127
  329. package/src/templates/generated.template.ts +13 -1
  330. package/src/templates/generated_http.template.ts +15 -12
  331. package/src/templates/generated_sso.template.ts +50 -2
  332. package/src/templates/model.template.ts +138 -2
  333. package/src/templates/service.template.ts +0 -1
  334. package/src/templates/view_form.template.ts +11 -7
  335. package/src/templates/view_list.template.ts +12 -4
  336. package/src/testing/fixture-manager.ts +229 -174
  337. package/src/types/types.ts +102 -14
  338. package/src/utils/async-utils.ts +64 -0
  339. package/src/utils/fs-utils.ts +17 -0
  340. package/src/utils/model.ts +0 -2
  341. package/src/utils/utils.ts +14 -58
  342. package/src/utils/zod-error.ts +12 -176
  343. package/tsconfig.json +2 -0
  344. package/tsup.config.js +4 -2
  345. package/.pnp.cjs +0 -14363
  346. package/.pnp.loader.mjs +0 -2047
  347. package/.vscode/extensions.json +0 -6
  348. package/.vscode/settings.json +0 -9
  349. package/.yarnrc.yml +0 -5
  350. package/dist/chunk-QJFHDCBN.mjs.map +0 -1
  351. package/src/database/base-model.abstract.ts +0 -97
  352. package/src/database/db.abstract.ts +0 -75
  353. package/src/database/drivers/knex/base-model.ts +0 -55
  354. package/src/database/drivers/knex/client.ts +0 -209
  355. package/src/database/drivers/knex/db.ts +0 -232
  356. package/src/database/drivers/knex/generator.ts +0 -659
  357. package/src/database/drivers/kysely/base-model.ts +0 -89
  358. package/src/database/drivers/kysely/client.ts +0 -309
  359. package/src/database/drivers/kysely/db.ts +0 -238
  360. package/src/database/drivers/kysely/generator.ts +0 -714
  361. package/src/database/types.ts +0 -118
  362. package/src/entity/migrator.ts +0 -1400
  363. package/src/smd/smd-manager.ts +0 -139
  364. package/src/smd/smd.ts +0 -571
  365. package/src/templates/kysely_types.template.ts +0 -205
  366. /package/dist/{chunk-NI37CY4T.mjs.map → chunk-C3IPIF6O.mjs.map} +0 -0
  367. /package/dist/{chunk-DYFCACHD.js.map → chunk-EXHKSVTE.js.map} +0 -0
  368. /package/dist/{chunk-DDJ7T4MA.mjs.map → chunk-HGIBJYOU.mjs.map} +0 -0
  369. /package/dist/{chunk-NIFOTHBW.mjs.map → chunk-JKSOJRQA.mjs.map} +0 -0
  370. /package/dist/{chunk-CXAVBVKC.js.map → chunk-OTKKFP3Y.js.map} +0 -0
  371. /package/dist/{chunk-J6S43O7G.js.map → chunk-UZ2IY5VE.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bin/cli.ts","../../src/smd/smd-manager.ts","../../src/smd/smd.ts"],"names":["chalk","path","fs","inflection","_","fields","prop","config","fileName"],"mappings":"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","sourcesContent":["/* Global Begin */\nimport chalk from \"chalk\";\nconsole.log(chalk.bgBlue(`BEGIN ${new Date()}`));\n\nimport dotenv from \"dotenv\";\ndotenv.config();\n\nimport path from \"path\";\nimport { tsicli } from \"tsicli\";\nimport { execSync } from \"child_process\";\nimport fs from \"fs-extra\";\nimport inflection from \"inflection\";\nimport prettier from \"prettier\";\nimport process from \"process\";\nimport _ from \"lodash\";\nimport { Sonamu } from \"../api\";\nimport { EntityManager } from \"../entity/entity-manager\";\nimport { Migrator } from \"../entity/migrator\";\nimport { FixtureManager } from \"../testing/fixture-manager\";\nimport { SMDManager } from \"../smd/smd-manager\";\nimport { DB } from \"../database/db\";\nimport {\n KnexConfig,\n KyselyConfig,\n SonamuKnexDBConfig,\n SonamuKyselyDBConfig,\n} from \"../database/types\";\nimport { KnexClient } from \"../database/drivers/knex/client\";\nimport { KyselyClient } from \"../database/drivers/kysely/client\";\n\nlet migrator: Migrator;\n\nasync function bootstrap() {\n await Sonamu.init(false, false);\n\n await tsicli(process.argv, {\n types: {\n \"#entityId\": {\n type: \"autocomplete\",\n name: \"#entityId\",\n message: \"Please input #entityId\",\n choices: EntityManager.getAllParentIds().map((entityId) => ({\n title: entityId,\n value: entityId,\n })),\n },\n \"#recordIds\": \"number[]\",\n \"#name\": \"string\",\n },\n args: [\n [\"fixture\", \"init\"],\n [\"fixture\", \"import\", \"#entityId\", \"#recordIds\"],\n [\"fixture\", \"sync\"],\n [\"migrate\", \"run\"],\n [\"migrate\", \"check\"],\n [\"migrate\", \"rollback\"],\n [\"migrate\", \"reset\"],\n [\"migrate\", \"clear\"],\n [\"migrate\", \"status\"],\n [\"stub\", \"practice\", \"#name\"],\n [\"stub\", \"entity\", \"#name\"],\n [\"scaffold\", \"model\", \"#entityId\"],\n [\"scaffold\", \"model_test\", \"#entityId\"],\n [\"scaffold\", \"view_list\", \"#entityId\"],\n [\"scaffold\", \"view_form\", \"#entityId\"],\n [\"ui\"],\n [\"smd_migration\"],\n ],\n runners: {\n migrate_run,\n migrate_check,\n migrate_rollback,\n migrate_clear,\n migrate_reset,\n migrate_status,\n fixture_init,\n fixture_import,\n fixture_sync,\n stub_practice,\n stub_entity,\n scaffold_model,\n scaffold_model_test,\n ui,\n // scaffold_view_list,\n // scaffold_view_form,\n smd_migration,\n },\n });\n}\nbootstrap().finally(async () => {\n if (migrator) {\n await migrator.destroy();\n }\n await FixtureManager.destory();\n\n /* Global End */\n console.log(chalk.bgBlue(`END ${new Date()}\\n`));\n});\n\nasync function setupMigrator() {\n // migrator\n migrator = new Migrator({\n mode: \"dev\",\n });\n}\n\nasync function setupFixtureManager() {\n FixtureManager.init();\n}\n\nasync function migrate_run() {\n await setupMigrator();\n\n await migrator.cleanUpDist();\n await migrator.run();\n}\n\nasync function migrate_check() {\n await setupMigrator();\n\n await migrator.cleanUpDist();\n await migrator.check();\n}\n\nasync function migrate_status() {\n await setupMigrator();\n\n const status = await migrator.getStatus();\n // status;\n console.log(status);\n}\n\nasync function migrate_rollback() {\n await setupMigrator();\n\n await migrator.rollback();\n}\n\nasync function migrate_clear() {\n await setupMigrator();\n\n await migrator.clearPendingList();\n}\n\nasync function migrate_reset() {\n await setupMigrator();\n\n await migrator.resetAll();\n}\n\nasync function fixture_init() {\n const _db = DB.getClient(\"development_master\");\n const srcConn = _db.connectionInfo;\n\n const targets = [\n {\n label: \"(REMOTE) Fixture DB\",\n connKey: \"fixture_remote\",\n },\n {\n label: \"(LOCAL) Fixture DB\",\n connKey: \"fixture_local\",\n },\n {\n label: \"(LOCAL) Testing DB\",\n connKey: \"test\",\n },\n ] as {\n label: string;\n connKey: keyof SonamuKnexDBConfig | keyof SonamuKyselyDBConfig;\n }[];\n\n // 1. 기준DB 스키마를 덤프\n console.log(\"DUMP...\");\n const dumpFilename = `/tmp/sonamu-fixture-init-${Date.now()}.sql`;\n const migrationsDump = `/tmp/sonamu-fixture-init-migrations-${Date.now()}.sql`;\n execSync(\n `mysqldump -h${srcConn.host} -P${srcConn.port} -u${srcConn.user} -p${srcConn.password} --single-transaction -d --no-create-db --triggers ${srcConn.database} > ${dumpFilename}`\n );\n\n // 2. 마이그레이션 테이블이 존재하면 덤프\n const dbClient = DB.baseConfig!.client;\n const migrationTable = DB.migrationTable;\n const [migrations] = await _db.raw<{ count: number }>(\n \"SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = ? AND table_name = ?\",\n [srcConn.database, migrationTable]\n );\n if (migrations.count > 0) {\n execSync(\n `mysqldump -h${srcConn.host} -P${srcConn.port} -u${srcConn.user} -p${srcConn.password} --single-transaction --no-create-db --triggers ${srcConn.database} ${migrationTable} ${migrationTable}_lock > ${migrationsDump}`\n );\n }\n\n // 2. 대상DB 각각에 대하여 존재여부 확인 후 붓기\n for await (const { label, connKey } of targets) {\n const config = DB.connectionInfo[connKey];\n\n if (\n label === \"(LOCAL) Fixture DB\" &&\n targets.find(\n (t) =>\n t.label === \"(REMOTE) Fixture DB\" &&\n DB.connectionInfo[t.connKey].host === config.host &&\n DB.connectionInfo[t.connKey].database === config.database\n )\n ) {\n console.log(chalk.red(`${label}: Skipped!`));\n continue;\n }\n\n const db = (() => {\n if (dbClient === \"knex\") {\n const config = _.cloneDeep(DB.fullConfig[connKey]) as KnexConfig;\n config.connection.database = undefined;\n return new KnexClient(config);\n } else {\n const config = _.cloneDeep(DB.fullConfig[connKey]) as KyselyConfig;\n config.database = undefined;\n return new KyselyClient(config);\n }\n })();\n\n const [row] = await db.raw(`SHOW DATABASES LIKE \"${config.database}\"`);\n if (row) {\n console.log(\n chalk.yellow(`${label}: Database \"${config.database}\" Already exists`)\n );\n await db.destroy();\n continue;\n }\n\n console.log(`SYNC to ${label}...`);\n const mysqlCmd = `mysql -h${config.host} -P${srcConn.port} -u${config.user} -p${config.password}`;\n execSync(`${mysqlCmd} -e 'DROP DATABASE IF EXISTS \\`${config.database}\\`'`);\n execSync(`${mysqlCmd} -e 'CREATE DATABASE \\`${config.database}\\`'`);\n execSync(`${mysqlCmd} ${config.database} < ${dumpFilename}`);\n if (fs.existsSync(migrationsDump)) {\n execSync(`${mysqlCmd} ${config.database} < ${migrationsDump}`);\n }\n\n await db.destroy();\n }\n}\n\nasync function fixture_import(entityId: string, recordIds: number[]) {\n await setupFixtureManager();\n\n await FixtureManager.importFixture(entityId, recordIds);\n await FixtureManager.sync();\n}\n\nasync function fixture_sync() {\n await setupFixtureManager();\n\n await FixtureManager.sync();\n}\n\nasync function stub_practice(name: string) {\n const practiceDir = path.join(Sonamu.apiRootPath, \"src\", \"practices\");\n const fileNames = fs.readdirSync(practiceDir);\n\n const maxSeqNo = (() => {\n if (fs.existsSync(practiceDir) === false) {\n fs.mkdirSync(practiceDir, { recursive: true });\n }\n\n const filteredSeqs = fileNames\n .filter(\n (fileName) => fileName.startsWith(\"p\") && fileName.endsWith(\".ts\")\n )\n .map((fileName) => {\n const [, seqNo] = fileName.match(/^p([0-9]+)\\-/) ?? [\"0\", \"0\"];\n return parseInt(seqNo);\n })\n .sort((a, b) => b - a);\n\n if (filteredSeqs.length > 0) {\n return filteredSeqs[0];\n }\n\n return 0;\n })();\n\n const currentSeqNo = maxSeqNo + 1;\n const fileName = `p${currentSeqNo}-${name}.ts`;\n const dstPath = path.join(practiceDir, fileName);\n\n // FIXME\n const code = [\n `import { BaseModel } from \"sonamu\";`,\n \"\",\n `console.clear();`,\n `console.log(\"${fileName}\");`,\n \"\",\n `async function bootstrap() {`,\n ` // TODO`,\n `}`,\n `bootstrap().finally(async () => {`,\n `await BaseModel.destroy();`,\n `});`,\n ].join(\"\\n\");\n fs.writeFileSync(dstPath, code);\n\n execSync(`code ${dstPath}`);\n\n const runCode = `yarn node -r source-map-support/register dist/practices/${fileName.replace(\n \".ts\",\n \".js\"\n )}`;\n console.log(`${chalk.blue(runCode)} copied to clipboard.`);\n execSync(`echo \"${runCode}\" | pbcopy`);\n}\n\nasync function stub_entity(entityId: string) {\n await Sonamu.syncer.createEntity({ entityId });\n}\n\nasync function scaffold_model(entityId: string) {\n await Sonamu.syncer.generateTemplate(\"model\", {\n entityId,\n });\n}\n\nasync function scaffold_model_test(entityId: string) {\n await Sonamu.syncer.generateTemplate(\"model_test\", {\n entityId,\n });\n}\n\nasync function ui() {\n try {\n const sonamuUI: {\n startServers: (appRootPath: string) => void;\n } = await import(\"@sonamu-kit/ui\" as string);\n sonamuUI.startServers(Sonamu.apiRootPath);\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes(\"isn't declared\")) {\n console.log(`You need to install ${chalk.blue(`@sonamu-kit/ui`)} first.`);\n return;\n }\n throw e;\n }\n}\n\nasync function smd_migration() {\n await SMDManager.autoload();\n const smdIds = SMDManager.getAllIds();\n\n function enumLabelsToEntityEnums(\n entityId: string,\n enumLabels: {\n [enumName: string]: { [name: string]: { ko: string } };\n }\n ): { [enumName: string]: { [name: string]: string } } {\n return Object.fromEntries(\n Object.entries(enumLabels).map(([enumLabelName, enumLabel]) => {\n const enumName =\n entityId + inflection.camelize(enumLabelName.toLowerCase(), false);\n return [\n enumName,\n Object.fromEntries(\n Object.entries(enumLabel).map(([name, { ko }]) => [name, ko])\n ),\n ];\n })\n );\n }\n for await (const smdId of smdIds) {\n const smd = SMDManager.get(smdId);\n const entityJson = {\n id: smd.id,\n ...(smd.parentId && { parentId: smd.parentId }),\n title: smd.title,\n props: smd.props,\n indexes: smd.indexes,\n subsets: smd.subsets,\n enums: enumLabelsToEntityEnums(smd.id, smd.enumLabels),\n };\n\n const parentNames = SMDManager.getNamesFromId(smd.parentId ?? smd.id);\n const names = SMDManager.getNamesFromId(smd.id);\n const dstPath = path.join(\n Sonamu.apiRootPath,\n \"src\",\n \"application\",\n parentNames.fs,\n `${names.fs}.entity.json`\n );\n\n const formatted = await prettier.format(JSON.stringify(entityJson), {\n parser: \"json\",\n });\n fs.writeFileSync(dstPath, formatted);\n console.log(chalk.blue(`CREATED: ${dstPath}`));\n\n // smd.ts, enums.ts, genereated.ts 삭제 (트랜스파일 된 js파일도 삭제)\n const srcSmdPath = path.join(\n Sonamu.apiRootPath,\n \"src\",\n \"application\",\n parentNames.fs,\n `${names.fs}.smd.ts`\n );\n const dstSmdPath = srcSmdPath\n .replace(\"/src/\", \"/dist/\")\n .replace(/\\.ts$/, \".js\");\n const srcEnumsPath = path.join(\n Sonamu.apiRootPath,\n \"src\",\n \"application\",\n parentNames.fs,\n `${names.fs}.enums.ts`\n );\n const dstEnumsPath = srcEnumsPath\n .replace(\"/src/\", \"/dist/\")\n .replace(/\\.ts$/, \".js\");\n const srcGeneratedPath = path.join(\n Sonamu.apiRootPath,\n \"src\",\n \"application\",\n parentNames.fs,\n `${names.fs}.generated.ts`\n );\n const dstGeneratedPath = srcGeneratedPath\n .replace(\"/src/\", \"/dist/\")\n .replace(/\\.ts$/, \".js\");\n\n [\n srcSmdPath,\n dstSmdPath,\n srcEnumsPath,\n dstEnumsPath,\n ...Sonamu.config.sync.targets.map((target) =>\n srcEnumsPath\n .replace(Sonamu.apiRootPath, path.join(Sonamu.appRootPath, target))\n .replace(\"/src/application/\", \"/src/services/\")\n ),\n srcGeneratedPath,\n dstGeneratedPath,\n ].map((p) => {\n if (fs.existsSync(p) === false) {\n console.log(chalk.yellow(`NOT FOUND: ${p}`));\n return;\n }\n fs.unlinkSync(p);\n console.log(chalk.red(`DELETED: ${p}`));\n });\n }\n\n // Entity로 reload\n console.log(\"Entity로 다시 로드합니다.\");\n EntityManager.isAutoloaded = false;\n await EntityManager.autoload();\n\n // Entity를 통해 generated.ts 재생성\n const entityIds = EntityManager.getAllParentIds();\n for await (const entityId of entityIds) {\n await Sonamu.syncer.generateTemplate(\"generated\", { entityId });\n }\n}\n","import chalk from \"chalk\";\nimport glob from \"glob\";\nimport inflection from \"inflection\";\nimport _ from \"lodash\";\nimport path from \"path\";\nimport { SMD } from \"./smd\";\nimport { SMDInput } from \"../types/types\";\nimport { Sonamu } from \"../api/sonamu\";\nimport { EntityNamesRecord } from \"../entity/entity-manager\";\n\ntype TableSpec = {\n name: string;\n uniqueColumns: string[];\n};\nclass SMDManagerClass {\n private SMDs: Map<string, SMD> = new Map();\n public modulePaths: Map<string, string> = new Map();\n private tableSpecs: Map<string, TableSpec> = new Map();\n public isAutoloaded: boolean = false;\n\n // 경로 전달받아 모든 SMD 파일 로드\n async autoload(doSilent: boolean = false) {\n if (this.isAutoloaded) {\n return;\n }\n const pathPattern = path.join(\n Sonamu.apiRootPath,\n \"/dist/application/**/*.smd.js\"\n );\n !doSilent && console.log(chalk.yellow(`autoload ${pathPattern}`));\n\n return new Promise((resolve) => {\n glob.glob(path.resolve(pathPattern!), (_err, files) => {\n const importPaths = files.map((filePath) =>\n path.relative(__dirname, filePath)\n );\n Promise.all(\n importPaths.map(async (importPath) => {\n const imported = await import(importPath);\n Object.values(imported).map((smdInput) =>\n this.register(smdInput as SMDInput<string>)\n );\n return imported;\n })\n ).then(() => {\n resolve(\"ok\");\n this.isAutoloaded = true;\n });\n });\n });\n }\n\n register(smdInput: SMDInput<string>): void {\n const smd = new SMD(smdInput);\n this.SMDs.set(smdInput.id, smd);\n }\n\n get(smdId: string): SMD {\n const smd = this.SMDs.get(smdId);\n if (smd === undefined) {\n throw new Error(`존재하지 않는 SMD 요청 ${smdId}`);\n }\n\n return smd;\n }\n\n exists(smdId: string): boolean {\n const smd = this.SMDs.get(smdId);\n return smd !== undefined;\n }\n\n getAllIds(): string[] {\n return Array.from(SMDManager.SMDs.keys());\n }\n\n getAllParentIds(): string[] {\n return this.getAllIds().filter((smdId) => {\n const smd = this.get(smdId);\n return smd.parentId === undefined;\n });\n }\n\n getChildrenIds(parentId: string): string[] {\n return this.getAllIds().filter((smdId) => {\n const smd = this.get(smdId);\n return smd.parentId === parentId;\n });\n }\n\n setModulePath(key: string, modulePath: string): void {\n // console.debug(chalk.cyan(`setModulePath :: ${key} :: ${modulePath}`));\n this.modulePaths.set(key, modulePath);\n }\n\n getModulePath(key: string): string {\n const modulePath = this.modulePaths.get(key);\n if (modulePath === undefined) {\n throw new Error(`존재하지 않는 모듈 패스 요청 ${key}`);\n }\n\n return modulePath;\n }\n\n setTableSpec(tableSpec: TableSpec) {\n this.tableSpecs.set(tableSpec.name, tableSpec);\n }\n\n getTableSpec(key: string): TableSpec {\n const tableSpec = this.tableSpecs.get(key);\n if (tableSpec === undefined) {\n throw new Error(`존재하지 않는 테이블 스펙 요청 ${key}`);\n }\n\n return tableSpec;\n }\n\n getNamesFromId(smdId: string): EntityNamesRecord {\n // entityId가 단복수 동형 단어인 경우 List 붙여서 생성\n const pluralized =\n inflection.pluralize(smdId) === smdId\n ? `${smdId}List`\n : inflection.pluralize(smdId);\n\n return {\n fs: inflection.dasherize(inflection.underscore(smdId)).toLowerCase(),\n fsPlural: inflection\n .dasherize(inflection.underscore(pluralized))\n .toLowerCase(),\n camel: inflection.camelize(smdId, true),\n camelPlural: inflection.camelize(pluralized, true),\n capital: smdId,\n capitalPlural: pluralized,\n upper: smdId.toUpperCase(),\n constant: inflection.underscore(smdId).toUpperCase(),\n };\n }\n}\n\nexport const SMDManager = new SMDManagerClass();\n","import _ from \"lodash\";\nimport {\n EntityProp,\n RelationProp,\n isRelationProp,\n SubsetQuery,\n isVirtualProp,\n isBelongsToOneRelationProp,\n isOneToOneRelationProp,\n isHasManyRelationProp,\n isManyToManyRelationProp,\n EntityPropNode,\n isEnumProp,\n StringProp,\n EntityIndex,\n EnumsLabelKo,\n SMDInput,\n} from \"../types/types\";\nimport inflection from \"inflection\";\nimport path from \"path\";\nimport fs from \"fs-extra\";\nimport { z } from \"zod\";\nimport { Sonamu } from \"../api/sonamu\";\nimport { SMDManager } from \"./smd-manager\";\n\nexport class SMD {\n id: string;\n parentId?: string;\n table: string;\n title: string;\n names: {\n fs: string;\n module: string;\n };\n props: EntityProp[];\n propsDict: {\n [key: string]: EntityProp;\n };\n relations: {\n [key: string]: RelationProp;\n };\n indexes: EntityIndex[];\n subsets: {\n [key: string]: string[];\n };\n types: {\n [name: string]: z.ZodTypeAny;\n } = {};\n enums: {\n [name: string]: z.ZodEnum<any>;\n } = {};\n enumLabels: {\n [name: string]: EnumsLabelKo<string>;\n } = {};\n\n constructor({\n id,\n parentId,\n table,\n title,\n props,\n indexes,\n subsets,\n }: SMDInput<any>) {\n // id\n this.id = id;\n this.parentId = parentId;\n this.title = title ?? this.id;\n this.table = table ?? inflection.underscore(inflection.pluralize(id));\n\n // props\n if (props) {\n this.props = props.map((prop) => {\n if (isEnumProp(prop)) {\n if (prop.id.includes(\"$Model\")) {\n prop.id = prop.id.replace(\"$Model\", id);\n }\n }\n return prop;\n });\n this.propsDict = props.reduce((result, prop) => {\n return {\n ...result,\n [prop.name]: prop,\n };\n }, {});\n\n // relations\n this.relations = props\n .filter((prop) => isRelationProp(prop))\n .reduce((result, prop) => {\n return {\n ...result,\n [prop.name]: prop,\n };\n }, {});\n } else {\n this.props = [];\n this.propsDict = {};\n this.relations = {};\n }\n\n // indexes\n this.indexes = indexes ?? [];\n\n // subsets\n this.subsets = subsets ?? {};\n\n // names\n this.names = {\n fs:\n parentId === undefined\n ? inflection.dasherize(inflection.underscore(id)).toLowerCase()\n : inflection.dasherize(parentId).toLowerCase(),\n module: id,\n };\n\n this.registerModulePaths();\n this.registerTableSpecs();\n }\n\n /*\n subset SELECT/JOIN/LOADER 결과 리턴\n */\n getSubsetQuery(subsetKey: string): SubsetQuery {\n const subset = this.subsets[subsetKey];\n\n const result: SubsetQuery = this.resolveSubsetQuery(\"\", subset);\n return result;\n }\n\n /*\n */\n resolveSubsetQuery(\n prefix: string,\n fields: string[],\n isAlreadyOuterJoined: boolean = false\n ): SubsetQuery {\n // prefix 치환 (prefix는 ToOneRelation이 복수로 붙은 경우 모두 __로 변경됨)\n prefix = prefix.replace(/\\./g, \"__\");\n\n // 서브셋을 1뎁스만 분리하여 그룹핑\n const subsetGroup = _.groupBy(fields, (field) => {\n if (field.includes(\".\")) {\n const [rel] = field.split(\".\");\n return rel;\n } else {\n return \"\";\n }\n });\n\n const result = Object.keys(subsetGroup).reduce(\n (r, groupKey) => {\n const fields = subsetGroup[groupKey];\n // 현재 테이블 필드셋은 select, virtual에 추가하고 리턴\n if (groupKey === \"\") {\n const realFields = fields.filter(\n (field) => !isVirtualProp(this.propsDict[field])\n );\n const virtualFields = fields.filter((field) =>\n isVirtualProp(this.propsDict[field])\n );\n\n if (prefix === \"\") {\n // 현재 테이블인 경우\n r.select = r.select.concat(\n realFields.map((field) => `${this.table}.${field}`)\n );\n r.virtual = r.virtual.concat(virtualFields);\n } else {\n // 넘어온 테이블인 경우\n r.select = r.select.concat(\n realFields.map(\n (field) => `${prefix}.${field} as ${prefix}__${field}`\n )\n );\n }\n\n return r;\n }\n\n const relation = this.relations[groupKey];\n if (relation === undefined) {\n throw new Error(`존재하지 않는 relation 참조 ${groupKey}`);\n }\n const relSMD = SMDManager.get(relation.with);\n\n if (\n isOneToOneRelationProp(relation) ||\n isBelongsToOneRelationProp(relation)\n ) {\n // -One Relation: JOIN 으로 처리\n const relFields = fields.map((field) =>\n field.split(\".\").slice(1).join(\".\")\n );\n\n // -One Relation에서 id 필드만 참조하는 경우 릴레이션 넘기지 않고 리턴\n if (relFields.length === 1 && relFields[0] === \"id\") {\n if (prefix === \"\") {\n r.select = r.select.concat(`${this.table}.${groupKey}_id`);\n } else {\n r.select = r.select.concat(\n `${prefix}.${groupKey}_id as ${prefix}__${groupKey}_id`\n );\n }\n return r;\n }\n\n // innerOrOuter\n const innerOrOuter = (() => {\n if (isAlreadyOuterJoined) {\n return \"outer\";\n }\n\n if (isOneToOneRelationProp(relation)) {\n if (\n relation.hasJoinColumn === true &&\n (relation.nullable ?? false) === false\n ) {\n return \"inner\";\n } else {\n return \"outer\";\n }\n } else {\n if (relation.nullable) {\n return \"outer\";\n } else {\n return \"inner\";\n }\n }\n })();\n const relSubsetQuery = relSMD.resolveSubsetQuery(\n `${prefix !== \"\" ? prefix + \".\" : \"\"}${groupKey}`,\n relFields,\n innerOrOuter === \"outer\"\n );\n r.select = r.select.concat(relSubsetQuery.select);\n r.virtual = r.virtual.concat(relSubsetQuery.virtual);\n\n const joinAs = prefix === \"\" ? groupKey : prefix + \"__\" + groupKey;\n const fromTable = prefix === \"\" ? this.table : prefix;\n\n let joinClause;\n if (relation.customJoinClause) {\n joinClause = {\n custom: relation.customJoinClause,\n };\n } else {\n let from, to;\n if (isOneToOneRelationProp(relation)) {\n if (relation.hasJoinColumn) {\n from = `${fromTable}.${relation.name}_id`;\n to = `${joinAs}.id`;\n } else {\n from = `${fromTable}.id`;\n to = `${joinAs}.${inflection.underscore(\n this.names.fs.replace(/\\-/g, \"_\")\n )}_id`;\n }\n } else {\n from = `${fromTable}.${relation.name}_id`;\n to = `${joinAs}.id`;\n }\n joinClause = {\n from,\n to,\n };\n }\n\n r.joins.push({\n as: joinAs,\n join: innerOrOuter,\n table: relSMD.table,\n ...joinClause,\n });\n\n // BelongsToOne 밑에 HasMany가 붙은 경우\n if (relSubsetQuery.loaders.length > 0) {\n const convertedLoaders = relSubsetQuery.loaders.map((loader) => {\n const newAs = [groupKey, loader.as].join(\"__\");\n return {\n as: newAs,\n table: loader.table,\n manyJoin: loader.manyJoin,\n oneJoins: loader.oneJoins,\n select: loader.select,\n };\n });\n\n r.loaders = [...r.loaders, ...convertedLoaders];\n }\n\n r.joins = r.joins.concat(relSubsetQuery.joins);\n } else if (\n isHasManyRelationProp(relation) ||\n isManyToManyRelationProp(relation)\n ) {\n // -Many Relation: Loader 로 처리\n const relFields = fields.map((field) =>\n field.split(\".\").slice(1).join(\".\")\n );\n const relSubsetQuery = relSMD.resolveSubsetQuery(\"\", relFields);\n\n let manyJoin: SubsetQuery[\"loaders\"][number][\"manyJoin\"];\n if (isHasManyRelationProp(relation)) {\n manyJoin = {\n fromTable: this.table,\n fromCol: \"id\",\n idField: prefix === \"\" ? `id` : `${prefix}__id`,\n toTable: relSMD.table,\n toCol: relation.joinColumn,\n };\n } else if (isManyToManyRelationProp(relation)) {\n const [table1, table2] = relation.joinTable.split(\"__\");\n\n manyJoin = {\n fromTable: this.table,\n fromCol: \"id\",\n idField: prefix === \"\" ? `id` : `${prefix}__id`,\n through: {\n table: relation.joinTable,\n fromCol: `${inflection.singularize(table1)}_id`,\n toCol: `${inflection.singularize(table2)}_id`,\n },\n toTable: relSMD.table,\n toCol: \"id\",\n };\n } else {\n throw new Error();\n }\n\n r.loaders.push({\n as: groupKey,\n table: relSMD.table,\n manyJoin,\n oneJoins: relSubsetQuery.joins,\n select: relSubsetQuery.select,\n loaders: relSubsetQuery.loaders,\n });\n }\n\n return r;\n },\n {\n select: [],\n virtual: [],\n joins: [],\n loaders: [],\n } as SubsetQuery\n );\n return result;\n }\n\n /*\n FieldExpr[] 을 SMDPropNode[] 로 변환\n */\n fieldExprsToPropNodes(\n fieldExprs: string[],\n smd: SMD = this\n ): EntityPropNode[] {\n const groups = fieldExprs.reduce(\n (result, fieldExpr) => {\n let key, value, elseExpr;\n if (fieldExpr.includes(\".\")) {\n [key, ...elseExpr] = fieldExpr.split(\".\");\n value = elseExpr.join(\".\");\n } else {\n key = \"\";\n value = fieldExpr;\n }\n result[key] = (result[key] ?? []).concat(value);\n\n return result;\n },\n {} as {\n [k: string]: string[];\n }\n );\n\n return Object.keys(groups)\n .map((key) => {\n const group = groups[key];\n\n // 일반 prop 처리\n if (key === \"\") {\n return group.map((propName) => {\n // uuid 개별 처리\n if (propName === \"uuid\") {\n return {\n nodeType: \"plain\" as const,\n prop: {\n type: \"string\",\n name: \"uuid\",\n length: 128,\n } as StringProp,\n children: [],\n };\n }\n\n const prop = smd.propsDict[propName];\n if (prop === undefined) {\n throw new Error(`${this.id} -- 잘못된 FieldExpr ${propName}`);\n }\n return {\n nodeType: \"plain\" as const,\n prop,\n children: [],\n };\n });\n }\n\n // relation prop 처리\n const prop = smd.propsDict[key];\n if (!isRelationProp(prop)) {\n throw new Error(`잘못된 FieldExpr ${key}.${group[0]}`);\n }\n const relSMD = SMDManager.get(prop.with);\n\n // relation -One 에 id 필드 하나인 경우\n if (isBelongsToOneRelationProp(prop) || isOneToOneRelationProp(prop)) {\n if (group.length == 1 && (group[0] === \"id\" || group[0] == \"id?\")) {\n // id 하나만 있는지 체크해서, 하나만 있으면 상위 prop으로 id를 리턴\n const idProp = relSMD.propsDict.id;\n return {\n nodeType: \"plain\" as const,\n prop: {\n ...idProp,\n name: key + \"_id\",\n nullable: prop.nullable,\n },\n children: [],\n };\n }\n }\n\n // -One 그외의 경우 object로 리턴\n // -Many의 경우 array로 리턴\n // Recursive 로 뎁스 처리\n const children = this.fieldExprsToPropNodes(group, relSMD);\n const nodeType =\n isBelongsToOneRelationProp(prop) || isOneToOneRelationProp(prop)\n ? (\"object\" as const)\n : (\"array\" as const);\n\n return {\n prop,\n children,\n nodeType,\n };\n })\n .flat();\n }\n\n getFieldExprs(\n prefix = \"\",\n maxDepth: number = 3,\n froms: string[] = []\n ): string[] {\n return this.props\n .map((prop) => {\n const propName = [prefix, prop.name].filter((v) => v !== \"\").join(\".\");\n if (propName === prefix) {\n return null;\n }\n if (isRelationProp(prop)) {\n if (maxDepth < 0) {\n return null;\n }\n if (froms.includes(prop.with)) {\n // 역방향 relation인 경우 제외\n return null;\n }\n // 정방향 relation인 경우 recursive 콜\n const relMd = SMDManager.get(prop.with);\n return relMd.getFieldExprs(propName, maxDepth - 1, [\n ...froms,\n this.id,\n ]);\n }\n return propName;\n })\n .flat()\n .filter((f) => f !== null) as string[];\n }\n\n registerModulePaths() {\n const basePath = `${this.names.fs}`;\n\n // base-scheme\n SMDManager.setModulePath(\n `${this.id}BaseSchema`,\n `${basePath}/${this.names.fs}.generated`\n );\n\n // subset\n if (Object.keys(this.subsets).length > 0) {\n SMDManager.setModulePath(\n `${this.id}SubsetKey`,\n `${basePath}/${this.names.fs}.generated`\n );\n SMDManager.setModulePath(\n `${this.id}SubsetMapping`,\n `${basePath}/${this.names.fs}.generated`\n );\n Object.keys(this.subsets).map((subsetKey) => {\n SMDManager.setModulePath(\n `${this.id}Subset${subsetKey.toUpperCase()}`,\n `${basePath}/${this.names.fs}.generated`\n );\n });\n }\n\n // types\n const typesModulePath = `${basePath}/${this.names.fs}.types`;\n const typesFileDistPath = path.join(\n Sonamu.apiRootPath,\n `dist/application/${typesModulePath}.js`\n );\n\n if (fs.existsSync(typesFileDistPath)) {\n const importPath = path.relative(__dirname, typesFileDistPath);\n import(importPath).then((t) => {\n this.types = Object.keys(t).reduce((result, key) => {\n SMDManager.setModulePath(key, typesModulePath);\n return {\n ...result,\n [key]: t[key],\n };\n }, {});\n });\n }\n\n // enums\n const enumsModulePath = `${basePath}/${this.names.fs}.enums`;\n const enumsFileDistPath = path.join(\n Sonamu.apiRootPath,\n `/dist/application/${enumsModulePath}.js`\n );\n if (fs.existsSync(enumsFileDistPath)) {\n const importPath = path.relative(__dirname, enumsFileDistPath);\n import(importPath).then((t) => {\n this.enums = Object.keys(t).reduce((result, key) => {\n SMDManager.setModulePath(key, enumsModulePath);\n\n // Enum Labels 별도 처리\n if (key === inflection.underscore(this.id).toUpperCase()) {\n this.enumLabels = t[key];\n }\n return {\n ...result,\n [key]: t[key],\n };\n }, {});\n });\n }\n }\n\n registerTableSpecs(): void {\n const uniqueColumns = _.uniq(\n this.indexes\n .filter((idx) => idx.type === \"unique\")\n .map((idx) => idx.columns)\n .flat()\n );\n\n SMDManager.setTableSpec({\n name: this.table,\n uniqueColumns,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/bin/cli.ts"],"sourcesContent":["/* Global Begin */\nimport chalk from \"chalk\";\nconsole.log(chalk.bgBlue(`BEGIN ${new Date()}`));\n\nimport dotenv from \"dotenv\";\ndotenv.config();\n\nimport path from \"path\";\nimport { tsicli } from \"tsicli\";\nimport { execSync } from \"child_process\";\nimport { mkdir, readFile, readdir, writeFile } from \"fs/promises\";\nimport { exists } from \"../utils/fs-utils\";\nimport process from \"process\";\nimport { Sonamu } from \"../api\";\nimport knex, { Knex } from \"knex\";\nimport { EntityManager } from \"../entity/entity-manager\";\nimport { Migrator } from \"../migration/migrator\";\nimport { FixtureManager } from \"../testing/fixture-manager\";\nimport { SWC_BUILD_COMMAND } from \"./build-config\";\n\nlet migrator: Migrator;\n\nasync function bootstrap() {\n await Sonamu.init(false, false);\n\n await tsicli(process.argv, {\n types: {\n \"#entityId\": {\n type: \"autocomplete\",\n name: \"#entityId\",\n message: \"Please input #entityId\",\n choices: EntityManager.getAllParentIds().map((entityId) => ({\n title: entityId,\n value: entityId,\n })),\n },\n \"#recordIds\": \"number[]\",\n \"#name\": \"string\",\n },\n args: [\n [\"fixture\", \"init\"],\n [\"fixture\", \"import\", \"#entityId\", \"#recordIds\"],\n [\"fixture\", \"sync\"],\n [\"migrate\", \"run\"],\n [\"migrate\", \"check\"],\n [\"migrate\", \"rollback\"],\n [\"migrate\", \"reset\"],\n [\"migrate\", \"clear\"],\n [\"migrate\", \"status\"],\n [\"stub\", \"practice\", \"#name\"],\n [\"stub\", \"entity\", \"#name\"],\n [\"scaffold\", \"model\", \"#entityId\"],\n [\"scaffold\", \"model_test\", \"#entityId\"],\n [\"scaffold\", \"view_list\", \"#entityId\"],\n [\"scaffold\", \"view_form\", \"#entityId\"],\n [\"ui\"],\n [\"dev:serve\"],\n [\"serve\"],\n ],\n runners: {\n migrate_run,\n migrate_check,\n migrate_rollback,\n migrate_clear,\n migrate_reset,\n migrate_status,\n fixture_init,\n fixture_import,\n fixture_sync,\n stub_practice,\n stub_entity,\n scaffold_model,\n scaffold_model_test,\n ui,\n // scaffold_view_list,\n // scaffold_view_form,\n \"dev:serve\": dev_serve,\n serve,\n },\n });\n}\nbootstrap().finally(async () => {\n if (migrator) {\n await migrator.destroy();\n }\n await FixtureManager.destroy();\n\n /* Global End */\n console.log(chalk.bgBlue(`END ${new Date()}\\n`));\n});\n\nasync function dev_serve() {\n const nodemon = await import(\"nodemon\");\n\n const nodemonConfig = await (async () => {\n const projectNodemonPath = path.join(Sonamu.apiRootPath, \"nodemon.json\");\n const hasProjectNodemon = await exists(projectNodemonPath);\n\n if (hasProjectNodemon) {\n return JSON.parse(await readFile(projectNodemonPath, \"utf8\"));\n }\n\n return {\n watch: [\"src/index.ts\"],\n ignore: [\"dist/**\", \"**/*.js\", \"**/*.d.ts\"],\n exec: [\n SWC_BUILD_COMMAND,\n \"node -r source-map-support/register -r dotenv/config dist/index.js\",\n ].join(\" && \"),\n };\n })();\n\n nodemon.default(nodemonConfig);\n\n // 프로세스 종료 처리\n const cleanup = async () => {\n await Sonamu.server?.close();\n process.exit(0);\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n process.on(\"SIGUSR2\", cleanup);\n}\n\nasync function serve() {\n const distIndexPath = path.join(Sonamu.apiRootPath, \"dist\", \"index.js\");\n\n if (!(await exists(distIndexPath))) {\n console.log(\n chalk.red(\"dist/index.js not found. Please build your project first.\")\n );\n console.log(chalk.blue(\"Run: yarn sonamu build\"));\n return;\n }\n\n const { spawn } = await import(\"child_process\");\n const serverProcess = spawn(\n \"node\",\n [\"-r\", \"source-map-support/register\", \"-r\", \"dotenv/config\", distIndexPath],\n {\n cwd: Sonamu.apiRootPath,\n stdio: \"inherit\",\n }\n );\n\n process.on(\"SIGINT\", () => {\n serverProcess.kill(\"SIGTERM\");\n process.exit(0);\n });\n}\n\nasync function setupMigrator() {\n // migrator\n migrator = new Migrator({\n mode: \"dev\",\n });\n}\n\nasync function setupFixtureManager() {\n FixtureManager.init();\n}\n\nasync function migrate_run() {\n await setupMigrator();\n\n await migrator.cleanUpDist();\n await migrator.run();\n}\n\nasync function migrate_check() {\n await setupMigrator();\n\n await migrator.cleanUpDist();\n await migrator.check();\n}\n\nasync function migrate_status() {\n await setupMigrator();\n\n const status = await migrator.getStatus();\n // status;\n console.log(status);\n}\n\nasync function migrate_rollback() {\n await setupMigrator();\n\n await migrator.rollback();\n}\n\nasync function migrate_clear() {\n await setupMigrator();\n\n await migrator.clearPendingList();\n}\n\nasync function migrate_reset() {\n await setupMigrator();\n\n await migrator.resetAll();\n}\n\nasync function fixture_init() {\n const srcConfig = Sonamu.dbConfig.development_master;\n const targets = [\n {\n label: \"(REMOTE) Fixture DB\",\n config: Sonamu.dbConfig.fixture_remote,\n },\n {\n label: \"(LOCAL) Fixture DB\",\n config: Sonamu.dbConfig.fixture_local,\n toSkip: (() => {\n const remoteConn = Sonamu.dbConfig.fixture_remote\n .connection as Knex.ConnectionConfig;\n const localConn = Sonamu.dbConfig.fixture_local\n .connection as Knex.ConnectionConfig;\n return (\n remoteConn.host === localConn.host &&\n remoteConn.database === localConn.database\n );\n })(),\n },\n {\n label: \"(LOCAL) Testing DB\",\n config: Sonamu.dbConfig.test,\n },\n ] as {\n label: string;\n config: Knex.Config;\n toSkip?: boolean;\n }[];\n\n // 1. 기준DB 스키마를 덤프\n console.log(\"DUMP...\");\n const dumpFilename = `/tmp/sonamu-fixture-init-${Date.now()}.sql`;\n const srcConn = srcConfig.connection as Knex.ConnectionConfig;\n const migrationsDump = `/tmp/sonamu-fixture-init-migrations-${Date.now()}.sql`;\n execSync(\n `mysqldump -h${srcConn.host} -u${srcConn.user} -p${srcConn.password} --single-transaction -d --no-create-db --triggers ${srcConn.database} > ${dumpFilename}`\n );\n const _db = knex(srcConfig);\n const [[migrations]] = await _db.raw(\n \"SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = ? AND table_name = 'knex_migrations'\",\n [srcConn.database]\n );\n if (migrations.count > 0) {\n execSync(\n `mysqldump -h${srcConn.host} -u${srcConn.user} -p${srcConn.password} --single-transaction --no-create-db --triggers ${srcConn.database} knex_migrations knex_migrations_lock > ${migrationsDump}`\n );\n }\n\n // 2. 대상DB 각각에 대하여 존재여부 확인 후 붓기\n for await (const { label, config, toSkip } of targets) {\n const conn = config.connection as Knex.ConnectionConfig;\n\n if (toSkip === true) {\n console.log(chalk.red(`${label}: Skipped!`));\n continue;\n }\n\n const db = knex({\n ...config,\n connection: {\n ...((config.connection ?? {}) as Knex.ConnectionConfig),\n database: undefined,\n },\n });\n const [[row]] = await db.raw(`SHOW DATABASES LIKE \"${conn.database}\"`);\n if (row) {\n console.log(\n chalk.yellow(`${label}: Database \"${conn.database}\" Already exists`)\n );\n await db.destroy();\n continue;\n }\n\n console.log(`SYNC to ${label}...`);\n const mysqlCmd = `mysql -h${conn.host} -u${conn.user} -p${conn.password}`;\n execSync(`${mysqlCmd} -e 'DROP DATABASE IF EXISTS \\`${conn.database}\\`'`);\n execSync(`${mysqlCmd} -e 'CREATE DATABASE \\`${conn.database}\\`'`);\n execSync(`${mysqlCmd} ${conn.database} < ${dumpFilename}`);\n if (await exists(migrationsDump)) {\n execSync(`${mysqlCmd} ${conn.database} < ${migrationsDump}`);\n }\n\n await db.destroy();\n }\n\n await _db.destroy();\n}\n\nasync function fixture_import(entityId: string, recordIds: number[]) {\n await setupFixtureManager();\n\n await FixtureManager.importFixture(entityId, recordIds);\n await FixtureManager.sync();\n}\n\nasync function fixture_sync() {\n await setupFixtureManager();\n\n await FixtureManager.sync();\n}\n\nasync function stub_practice(name: string) {\n const practiceDir = path.join(Sonamu.apiRootPath, \"src\", \"practices\");\n const fileNames = await readdir(practiceDir);\n\n const maxSeqNo = await (async () => {\n if (!(await exists(practiceDir))) {\n await mkdir(practiceDir, { recursive: true });\n }\n\n const filteredSeqs = fileNames\n .filter(\n (fileName) => fileName.startsWith(\"p\") && fileName.endsWith(\".ts\")\n )\n .map((fileName) => {\n const [, seqNo] = fileName.match(/^p([0-9]+)\\-/) ?? [\"0\", \"0\"];\n return parseInt(seqNo);\n })\n .sort((a, b) => b - a);\n\n if (filteredSeqs.length > 0) {\n return filteredSeqs[0];\n }\n\n return 0;\n })();\n\n const currentSeqNo = maxSeqNo + 1;\n const fileName = `p${currentSeqNo}-${name}.ts`;\n const dstPath = path.join(practiceDir, fileName);\n\n // FIXME\n const code = [\n `import { BaseModel } from \"sonamu\";`,\n \"\",\n `console.clear();`,\n `console.log(\"${fileName}\");`,\n \"\",\n `async function bootstrap() {`,\n ` // TODO`,\n `}`,\n `bootstrap().finally(async () => {`,\n `await BaseModel.destroy();`,\n `});`,\n ].join(\"\\n\");\n await writeFile(dstPath, code);\n\n execSync(`code ${dstPath}`);\n\n const runCode = `yarn node -r source-map-support/register dist/practices/${fileName.replace(\n \".ts\",\n \".js\"\n )}`;\n console.log(`${chalk.blue(runCode)} copied to clipboard.`);\n execSync(`echo \"${runCode}\" | pbcopy`);\n}\n\nasync function stub_entity(entityId: string) {\n await Sonamu.syncer.createEntity({ entityId });\n}\n\nasync function scaffold_model(entityId: string) {\n await Sonamu.syncer.generateTemplate(\"model\", {\n entityId,\n });\n}\n\nasync function scaffold_model_test(entityId: string) {\n await Sonamu.syncer.generateTemplate(\"model_test\", {\n entityId,\n });\n}\n\nasync function ui() {\n try {\n type StartServersOptions = {\n projectName: string;\n apiRootPath: string;\n port: number;\n };\n const sonamuUI: {\n startServers: (options: StartServersOptions) => void;\n } = await import(\"@sonamu-kit/ui\" as string);\n sonamuUI.startServers({\n projectName:\n Sonamu.config.projectName ?? path.basename(Sonamu.apiRootPath),\n apiRootPath: Sonamu.apiRootPath,\n port: Sonamu.config.ui?.port ?? 57000,\n });\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes(\"isn't declared\")) {\n console.log(`You need to install ${chalk.blue(`@sonamu-kit/ui`)} first.`);\n return;\n }\n throw e;\n }\n}\n"],"names":["console","log","chalk","bgBlue","Date","dotenv","config","migrator","bootstrap","Sonamu","init","tsicli","process","argv","types","type","name","message","choices","EntityManager","getAllParentIds","map","entityId","title","value","args","runners","migrate_run","migrate_check","migrate_rollback","migrate_clear","migrate_reset","migrate_status","fixture_init","fixture_import","fixture_sync","stub_practice","stub_entity","scaffold_model","scaffold_model_test","ui","dev_serve","serve","finally","destroy","FixtureManager","nodemon","nodemonConfig","cleanup","projectNodemonPath","hasProjectNodemon","path","join","apiRootPath","exists","JSON","parse","readFile","watch","ignore","exec","SWC_BUILD_COMMAND","default","server","close","exit","on","distIndexPath","spawn","serverProcess","red","blue","cwd","stdio","kill","setupMigrator","Migrator","mode","setupFixtureManager","cleanUpDist","run","check","status","getStatus","rollback","clearPendingList","resetAll","srcConfig","targets","dumpFilename","srcConn","migrationsDump","_db","migrations","label","toSkip","conn","db","row","mysqlCmd","dbConfig","development_master","fixture_remote","fixture_local","remoteConn","connection","localConn","host","database","test","now","execSync","user","password","knex","raw","count","undefined","yellow","recordIds","importFixture","sync","practiceDir","fileNames","maxSeqNo","currentSeqNo","fileName","dstPath","code","runCode","readdir","filteredSeqs","mkdir","recursive","filter","startsWith","endsWith","match","seqNo","parseInt","sort","a","b","length","writeFile","replace","syncer","createEntity","generateTemplate","sonamuUI","e","startServers","projectName","basename","port","Error","includes"],"mappings":"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"}
package/dist/bin/cli.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  FixtureManager,
3
3
  Migrator
4
- } from "../chunk-NI37CY4T.mjs";
4
+ } from "../chunk-C3IPIF6O.mjs";
5
5
  import {
6
6
  DB,
7
7
  EntityManager,
@@ -15,7 +15,7 @@ import {
15
15
  isOneToOneRelationProp,
16
16
  isRelationProp,
17
17
  isVirtualProp
18
- } from "../chunk-QJFHDCBN.mjs";
18
+ } from "../chunk-FCERKIIF.mjs";
19
19
  import {
20
20
  __dirname
21
21
  } from "../chunk-PTFDTOJU.mjs";
@@ -991,7 +991,7 @@ function isZodNumberAnyway(zodType) {
991
991
  } else if (zodType instanceof _zod.z.ZodNullable && zodType._def.innerType instanceof _zod.z.ZodNumber) {
992
992
  return true;
993
993
  } else if (zodType instanceof _zod.z.ZodOptional && zodType._def.innerType instanceof _zod.z.ZodNumber) {
994
- } else if (zodType instanceof _zod.z.ZodOptional && zodType._def.innerType instanceof _zod.z.ZodOptional && zodType._type.def.innerType instanceof _zod.z.ZodNumber) {
994
+ } else if (zodType instanceof _zod.z.ZodOptional && _optionalChain([zodType, 'access', _63 => _63._def, 'optionalAccess', _64 => _64.innerType]) instanceof _zod.z.ZodOptional && _optionalChain([zodType, 'access', _65 => _65._type, 'optionalAccess', _66 => _66.def, 'optionalAccess', _67 => _67.innerType]) instanceof _zod.z.ZodNumber) {
995
995
  return true;
996
996
  }
997
997
  return false;
@@ -1339,13 +1339,13 @@ var Template__entity = class extends Template {
1339
1339
  }
1340
1340
  })();
1341
1341
  return {
1342
- ...this.getTargetAndPath(names, _nullishCoalesce(_optionalChain([parent, 'optionalAccess', _63 => _63.names]), () => ( names))),
1342
+ ...this.getTargetAndPath(names, _nullishCoalesce(_optionalChain([parent, 'optionalAccess', _68 => _68.names]), () => ( names))),
1343
1343
  body: JSON.stringify({
1344
1344
  id: entityId,
1345
1345
  title: _nullishCoalesce(title, () => ( entityId)),
1346
1346
  parentId,
1347
1347
  table: _nullishCoalesce(table, () => ( names.fsPlural.replace(/\-/g, "_"))),
1348
- props: _optionalChain([options, 'access', _64 => _64.props, 'optionalAccess', _65 => _65.length]) ? options.props : [
1348
+ props: _optionalChain([options, 'access', _69 => _69.props, 'optionalAccess', _70 => _70.length]) ? options.props : [
1349
1349
  { name: "id", type: "integer", unsigned: true, desc: "ID" },
1350
1350
  ...parent ? [
1351
1351
  {
@@ -1436,7 +1436,7 @@ var Template__view_list = class extends Template {
1436
1436
  return `<>{/* object ${colName} */}</>`;
1437
1437
  case "object-pick":
1438
1438
  const pickedChild = col.children.find(
1439
- (child) => child.name === _optionalChain([col, 'access', _66 => _66.config, 'optionalAccess', _67 => _67.picked])
1439
+ (child) => child.name === _optionalChain([col, 'access', _71 => _71.config, 'optionalAccess', _72 => _72.picked])
1440
1440
  );
1441
1441
  if (!pickedChild) {
1442
1442
  throw new Error(`object-pick \uC120\uD0DD \uC2E4\uD328 (\uC624\uBE0C\uC81D\uD2B8: ${col.name})`);
@@ -1550,13 +1550,13 @@ var Template__view_list = class extends Template {
1550
1550
  orderBy: "id-desc",
1551
1551
  search: "title"
1552
1552
  };
1553
- const orderByZodType = _optionalChain([columns, 'access', _68 => _68.find, 'call', _69 => _69(
1553
+ const orderByZodType = _optionalChain([columns, 'access', _73 => _73.find, 'call', _74 => _74(
1554
1554
  (col) => col.name === "orderBy"
1555
- ), 'optionalAccess', _70 => _70.zodType]);
1555
+ ), 'optionalAccess', _75 => _75.zodType]);
1556
1556
  if (orderByZodType && orderByZodType instanceof _zod.z.ZodEnum) {
1557
1557
  def.orderBy = Object.keys(orderByZodType.Enum)[0];
1558
1558
  }
1559
- const searchZodType = _optionalChain([columns, 'access', _71 => _71.find, 'call', _72 => _72((col) => col.name === "search"), 'optionalAccess', _73 => _73.zodType]);
1559
+ const searchZodType = _optionalChain([columns, 'access', _76 => _76.find, 'call', _77 => _77((col) => col.name === "search"), 'optionalAccess', _78 => _78.zodType]);
1560
1560
  if (searchZodType && searchZodType instanceof _zod.z.ZodEnum) {
1561
1561
  def.search = Object.keys(searchZodType.Enum)[0];
1562
1562
  }
@@ -1569,7 +1569,7 @@ var Template__view_list = class extends Template {
1569
1569
  const propCandidate = entity.props.find((p) => p.name === col.name);
1570
1570
  return {
1571
1571
  name: col.name,
1572
- label: _nullishCoalesce(_optionalChain([propCandidate, 'optionalAccess', _74 => _74.desc]), () => ( col.label)),
1572
+ label: _nullishCoalesce(_optionalChain([propCandidate, 'optionalAccess', _79 => _79.desc]), () => ( col.label)),
1573
1573
  tc: `(row) => ${this.renderColumn(entityId, col, names)}`
1574
1574
  };
1575
1575
  });
@@ -2528,11 +2528,11 @@ var KnexClient = (_class = class _KnexClient {
2528
2528
  __init() {this.generator = new KnexGenerator()}
2529
2529
  get connectionInfo() {
2530
2530
  return {
2531
- host: _nullishCoalesce(_optionalChain([this, 'access', _75 => _75.knex, 'access', _76 => _76.client, 'access', _77 => _77.config, 'access', _78 => _78.connection, 'optionalAccess', _79 => _79.host]), () => ( "localhost")),
2532
- port: _nullishCoalesce(_optionalChain([this, 'access', _80 => _80.knex, 'access', _81 => _81.client, 'access', _82 => _82.config, 'access', _83 => _83.connection, 'optionalAccess', _84 => _84.port]), () => ( 3306)),
2533
- database: _nullishCoalesce(_optionalChain([this, 'access', _85 => _85.knex, 'access', _86 => _86.client, 'access', _87 => _87.config, 'access', _88 => _88.connection, 'optionalAccess', _89 => _89.database]), () => ( "")),
2534
- user: _nullishCoalesce(_optionalChain([this, 'access', _90 => _90.knex, 'access', _91 => _91.client, 'access', _92 => _92.config, 'access', _93 => _93.connection, 'optionalAccess', _94 => _94.user]), () => ( "")),
2535
- password: _nullishCoalesce(_optionalChain([this, 'access', _95 => _95.knex, 'access', _96 => _96.client, 'access', _97 => _97.config, 'access', _98 => _98.connection, 'optionalAccess', _99 => _99.password]), () => ( ""))
2531
+ host: _nullishCoalesce(_optionalChain([this, 'access', _80 => _80.knex, 'access', _81 => _81.client, 'access', _82 => _82.config, 'access', _83 => _83.connection, 'optionalAccess', _84 => _84.host]), () => ( "localhost")),
2532
+ port: _nullishCoalesce(_optionalChain([this, 'access', _85 => _85.knex, 'access', _86 => _86.client, 'access', _87 => _87.config, 'access', _88 => _88.connection, 'optionalAccess', _89 => _89.port]), () => ( 3306)),
2533
+ database: _nullishCoalesce(_optionalChain([this, 'access', _90 => _90.knex, 'access', _91 => _91.client, 'access', _92 => _92.config, 'access', _93 => _93.connection, 'optionalAccess', _94 => _94.database]), () => ( "")),
2534
+ user: _nullishCoalesce(_optionalChain([this, 'access', _95 => _95.knex, 'access', _96 => _96.client, 'access', _97 => _97.config, 'access', _98 => _98.connection, 'optionalAccess', _99 => _99.user]), () => ( "")),
2535
+ password: _nullishCoalesce(_optionalChain([this, 'access', _100 => _100.knex, 'access', _101 => _101.client, 'access', _102 => _102.config, 'access', _103 => _103.connection, 'optionalAccess', _104 => _104.password]), () => ( ""))
2536
2536
  };
2537
2537
  }
2538
2538
 
@@ -2627,13 +2627,13 @@ var KnexClient = (_class = class _KnexClient {
2627
2627
  return this.qb.pluck(column);
2628
2628
  }
2629
2629
  createRawQuery(query, bindings) {
2630
- if (_optionalChain([bindings, 'optionalAccess', _100 => _100.length])) {
2630
+ if (_optionalChain([bindings, 'optionalAccess', _105 => _105.length])) {
2631
2631
  return this.knex.raw(query, bindings).toQuery();
2632
2632
  }
2633
2633
  return this.knex.raw(query).toQuery();
2634
2634
  }
2635
2635
  async raw(query, bindings) {
2636
- if (_optionalChain([bindings, 'optionalAccess', _101 => _101.length])) {
2636
+ if (_optionalChain([bindings, 'optionalAccess', _106 => _106.length])) {
2637
2637
  return (await this.knex.raw(query, bindings))[0];
2638
2638
  }
2639
2639
  return (await this.knex.raw(query))[0];
@@ -2833,7 +2833,7 @@ var KyselyClient = class _KyselyClient {
2833
2833
  return result.map((row) => row[column]);
2834
2834
  }
2835
2835
  createRawQuery(query, bindings) {
2836
- if (_optionalChain([bindings, 'optionalAccess', _102 => _102.length])) {
2836
+ if (_optionalChain([bindings, 'optionalAccess', _107 => _107.length])) {
2837
2837
  query = query.replace(
2838
2838
  /\?/g,
2839
2839
  () => _kysely.sql.lit(bindings.shift()).compile(this.kysely).sql
@@ -2842,7 +2842,7 @@ var KyselyClient = class _KyselyClient {
2842
2842
  return _kysely.sql.raw(query).compile(this.kysely).sql;
2843
2843
  }
2844
2844
  async raw(query, bindings) {
2845
- if (_optionalChain([bindings, 'optionalAccess', _103 => _103.length])) {
2845
+ if (_optionalChain([bindings, 'optionalAccess', _108 => _108.length])) {
2846
2846
  query = query.replace(
2847
2847
  /\?/g,
2848
2848
  () => _kysely.sql.lit(bindings.shift()).compile(this.kysely).sql
@@ -2895,14 +2895,14 @@ var KyselyClient = class _KyselyClient {
2895
2895
  if (error) {
2896
2896
  throw error;
2897
2897
  }
2898
- return [0, _optionalChain([results, 'optionalAccess', _104 => _104.map, 'call', _105 => _105((r) => r.migrationName)])];
2898
+ return [0, _optionalChain([results, 'optionalAccess', _109 => _109.map, 'call', _110 => _110((r) => r.migrationName)])];
2899
2899
  }
2900
2900
  async rollback() {
2901
2901
  const { results, error } = await this.migrator.migrateDown();
2902
2902
  if (error) {
2903
2903
  throw error;
2904
2904
  }
2905
- return [0, _optionalChain([results, 'optionalAccess', _106 => _106.map, 'call', _107 => _107((r) => r.migrationName)])];
2905
+ return [0, _optionalChain([results, 'optionalAccess', _111 => _111.map, 'call', _112 => _112((r) => r.migrationName)])];
2906
2906
  }
2907
2907
  async rollbackAll() {
2908
2908
  while (true) {
@@ -2934,7 +2934,7 @@ var DBClass = class {
2934
2934
  async getBaseConfig(rootPath) {
2935
2935
  const baseConfigPath = _path2.default.join(rootPath, "/dist/configs/db.js");
2936
2936
  const module = await Promise.resolve().then(() => _interopRequireWildcard(require(baseConfigPath)));
2937
- const config = _nullishCoalesce(_nullishCoalesce(_optionalChain([module, 'access', _108 => _108.default, 'optionalAccess', _109 => _109.default]), () => ( module.default)), () => ( module));
2937
+ const config = _nullishCoalesce(_nullishCoalesce(_optionalChain([module, 'access', _113 => _113.default, 'optionalAccess', _114 => _114.default]), () => ( module.default)), () => ( module));
2938
2938
  return config;
2939
2939
  }
2940
2940
  getCurrentConfig(which) {
@@ -3134,15 +3134,15 @@ var DBKnexClass = (_class2 = class extends DBClass {
3134
3134
  database: `${config.database}_test`
3135
3135
  }
3136
3136
  },
3137
- _optionalChain([config, 'access', _110 => _110.environments, 'optionalAccess', _111 => _111.test])
3137
+ _optionalChain([config, 'access', _115 => _115.environments, 'optionalAccess', _116 => _116.test])
3138
3138
  );
3139
3139
  const fixture_local = _lodash2.default.merge({}, defaultKnexConfig, {
3140
3140
  connection: {
3141
3141
  database: `${config.database}_fixture`
3142
3142
  }
3143
3143
  });
3144
- const devMasterOptions = _optionalChain([config, 'access', _112 => _112.environments, 'optionalAccess', _113 => _113.development]);
3145
- const devSlaveOptions = _optionalChain([config, 'access', _114 => _114.environments, 'optionalAccess', _115 => _115.development_slave]);
3144
+ const devMasterOptions = _optionalChain([config, 'access', _117 => _117.environments, 'optionalAccess', _118 => _118.development]);
3145
+ const devSlaveOptions = _optionalChain([config, 'access', _119 => _119.environments, 'optionalAccess', _120 => _120.development_slave]);
3146
3146
  const development_master = _lodash2.default.merge({}, defaultKnexConfig, devMasterOptions);
3147
3147
  const development_slave = _lodash2.default.merge(
3148
3148
  {},
@@ -3155,8 +3155,8 @@ var DBKnexClass = (_class2 = class extends DBClass {
3155
3155
  database: `${config.database}_fixture`
3156
3156
  }
3157
3157
  });
3158
- const prodMasterOptions = _nullishCoalesce(_optionalChain([config, 'access', _116 => _116.environments, 'optionalAccess', _117 => _117.production]), () => ( {}));
3159
- const prodSlaveOptions = _nullishCoalesce(_optionalChain([config, 'access', _118 => _118.environments, 'optionalAccess', _119 => _119.production_slave]), () => ( {}));
3158
+ const prodMasterOptions = _nullishCoalesce(_optionalChain([config, 'access', _121 => _121.environments, 'optionalAccess', _122 => _122.production]), () => ( {}));
3159
+ const prodSlaveOptions = _nullishCoalesce(_optionalChain([config, 'access', _123 => _123.environments, 'optionalAccess', _124 => _124.production_slave]), () => ( {}));
3160
3160
  const production_master = _lodash2.default.merge({}, defaultKnexConfig, prodMasterOptions);
3161
3161
  const production_slave = _lodash2.default.merge(
3162
3162
  {},
@@ -3897,8 +3897,8 @@ var DBKyselyClass = (_class3 = class extends DBClass {
3897
3897
  const fixture_local = _lodash2.default.merge({}, defaultKyselyConfig, {
3898
3898
  database: `${config.database}_fixture`
3899
3899
  });
3900
- const devMasterOptions = _optionalChain([config, 'access', _120 => _120.environments, 'optionalAccess', _121 => _121.development]);
3901
- const devSlaveOptions = _optionalChain([config, 'access', _122 => _122.environments, 'optionalAccess', _123 => _123.development_slave]);
3900
+ const devMasterOptions = _optionalChain([config, 'access', _125 => _125.environments, 'optionalAccess', _126 => _126.development]);
3901
+ const devSlaveOptions = _optionalChain([config, 'access', _127 => _127.environments, 'optionalAccess', _128 => _128.development_slave]);
3902
3902
  const development_master = _lodash2.default.merge(
3903
3903
  {},
3904
3904
  defaultKyselyConfig,
@@ -3913,8 +3913,8 @@ var DBKyselyClass = (_class3 = class extends DBClass {
3913
3913
  const fixture_remote = _lodash2.default.merge({}, defaultKyselyConfig, devMasterOptions, {
3914
3914
  database: `${config.database}_fixture`
3915
3915
  });
3916
- const prodMasterOptions = _nullishCoalesce(_optionalChain([config, 'access', _124 => _124.environments, 'optionalAccess', _125 => _125.production]), () => ( {}));
3917
- const prodSlaveOptions = _nullishCoalesce(_optionalChain([config, 'access', _126 => _126.environments, 'optionalAccess', _127 => _127.production_slave]), () => ( {}));
3916
+ const prodMasterOptions = _nullishCoalesce(_optionalChain([config, 'access', _129 => _129.environments, 'optionalAccess', _130 => _130.production]), () => ( {}));
3917
+ const prodSlaveOptions = _nullishCoalesce(_optionalChain([config, 'access', _131 => _131.environments, 'optionalAccess', _132 => _132.production_slave]), () => ( {}));
3918
3918
  const production_master = _lodash2.default.merge(
3919
3919
  {},
3920
3920
  defaultKyselyConfig,
@@ -3958,7 +3958,7 @@ var dbConfigPath = _path2.default.join(
3958
3958
  );
3959
3959
  var knexfileModule = __require(dbConfigPath);
3960
3960
  var DB = (() => {
3961
- const config = _nullishCoalesce(_nullishCoalesce(_optionalChain([knexfileModule, 'access', _128 => _128.default, 'optionalAccess', _129 => _129.default]), () => ( knexfileModule.default)), () => ( knexfileModule));
3961
+ const config = _nullishCoalesce(_nullishCoalesce(_optionalChain([knexfileModule, 'access', _133 => _133.default, 'optionalAccess', _134 => _134.default]), () => ( knexfileModule.default)), () => ( knexfileModule));
3962
3962
  if (config.client === "knex") {
3963
3963
  return new DBKnexClass();
3964
3964
  } else if (config.client === "kysely") {
@@ -3982,7 +3982,7 @@ var Template__model = class extends Template {
3982
3982
  render({ entityId }, _columnsNode, listParamsNode) {
3983
3983
  const names = EntityManager.getNamesFromId(entityId);
3984
3984
  const vlTpl = new Template__view_list();
3985
- if (_optionalChain([listParamsNode, 'optionalAccess', _130 => _130.children]) === void 0) {
3985
+ if (_optionalChain([listParamsNode, 'optionalAccess', _135 => _135.children]) === void 0) {
3986
3986
  throw new Error(`listParamsNode\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. ${entityId}`);
3987
3987
  }
3988
3988
  const def = vlTpl.getDefault(listParamsNode.children);
@@ -4388,7 +4388,7 @@ var Template__view_form = class extends Template {
4388
4388
  const propCandidate = entity.props.find(
4389
4389
  (prop) => prop.name === col.name
4390
4390
  );
4391
- col.label = _nullishCoalesce(_optionalChain([propCandidate, 'optionalAccess', _131 => _131.desc]), () => ( col.label));
4391
+ col.label = _nullishCoalesce(_optionalChain([propCandidate, 'optionalAccess', _136 => _136.desc]), () => ( col.label));
4392
4392
  return col;
4393
4393
  });
4394
4394
  const defaultValue = this.resolveDefaultValue(columns);
@@ -5191,8 +5191,8 @@ var Template__kysely_interface = class extends Template {
5191
5191
  getTargetAndPath() {
5192
5192
  const { dir } = Sonamu.config.api;
5193
5193
  const { types } = DB.baseConfig;
5194
- const outDir = _nullishCoalesce(_optionalChain([types, 'optionalAccess', _132 => _132.outDir]), () => ( "src/typings"));
5195
- const fileName = _nullishCoalesce(_optionalChain([types, 'optionalAccess', _133 => _133.fileName]), () => ( "database.types.ts"));
5194
+ const outDir = _nullishCoalesce(_optionalChain([types, 'optionalAccess', _137 => _137.outDir]), () => ( "src/typings"));
5195
+ const fileName = _nullishCoalesce(_optionalChain([types, 'optionalAccess', _138 => _138.fileName]), () => ( "database.types.ts"));
5196
5196
  return {
5197
5197
  target: `${dir}/${outDir}`,
5198
5198
  path: fileName
@@ -5416,7 +5416,7 @@ var Syncer = (_class4 = class {
5416
5416
  if (diffTypes.includes("entity") || diffTypes.includes("types")) {
5417
5417
  console.log("// \uC561\uC158: \uC2A4\uD0A4\uB9C8 \uC0DD\uC131");
5418
5418
  await this.actionGenerateSchemas();
5419
- if (_optionalChain([DB, 'access', _135 => _135.baseConfig, 'optionalAccess', _136 => _136.client]) === "kysely" && _optionalChain([DB, 'access', _137 => _137.baseConfig, 'access', _138 => _138.types, 'optionalAccess', _139 => _139.enabled]) !== false) {
5419
+ if (_optionalChain([DB, 'access', _140 => _140.baseConfig, 'optionalAccess', _141 => _141.client]) === "kysely" && _optionalChain([DB, 'access', _142 => _142.baseConfig, 'access', _143 => _143.types, 'optionalAccess', _144 => _144.enabled]) !== false) {
5420
5420
  console.log("// \uC561\uC158: kysely \uC778\uD130\uD398\uC774\uC2A4 \uC0DD\uC131");
5421
5421
  await this.generateTemplate(
5422
5422
  "kysely_interface",
@@ -5691,7 +5691,7 @@ var Syncer = (_class4 = class {
5691
5691
  return extendedApis;
5692
5692
  }
5693
5693
  resolveTypeNode(typeNode) {
5694
- switch (_optionalChain([typeNode, 'optionalAccess', _140 => _140.kind])) {
5694
+ switch (_optionalChain([typeNode, 'optionalAccess', _145 => _145.kind])) {
5695
5695
  case _typescript2.default.SyntaxKind.AnyKeyword:
5696
5696
  return "any";
5697
5697
  case _typescript2.default.SyntaxKind.UnknownKeyword:
@@ -5767,7 +5767,7 @@ var Syncer = (_class4 = class {
5767
5767
  return {
5768
5768
  t: "ref",
5769
5769
  id: typeNode.typeName.escapedText.toString(),
5770
- args: _optionalChain([typeNode, 'access', _141 => _141.typeArguments, 'optionalAccess', _142 => _142.map, 'call', _143 => _143(
5770
+ args: _optionalChain([typeNode, 'access', _146 => _146.typeArguments, 'optionalAccess', _147 => _147.map, 'call', _148 => _148(
5771
5771
  (typeArg) => this.resolveTypeNode(typeArg)
5772
5772
  )])
5773
5773
  };
@@ -5821,7 +5821,7 @@ var Syncer = (_class4 = class {
5821
5821
  name: name.escapedText ? name.escapedText.toString() : `nonameAt${index}`,
5822
5822
  type,
5823
5823
  optional: paramDec.optional === true,
5824
- defaultDef: _optionalChain([paramDec, 'optionalAccess', _144 => _144.defaultDef])
5824
+ defaultDef: _optionalChain([paramDec, 'optionalAccess', _149 => _149.defaultDef])
5825
5825
  };
5826
5826
  if (_typescript2.default.isObjectBindingPattern(name) && _typescript2.default.isTypeReferenceNode(paramDec.type) && _typescript2.default.isIdentifier(paramDec.type.typeName)) {
5827
5827
  result.name = _inflection2.default.camelize(paramDec.type.typeName.text, true);
@@ -6161,7 +6161,7 @@ var Syncer = (_class4 = class {
6161
6161
  },
6162
6162
  {}
6163
6163
  );
6164
- if (_optionalChain([propNode, 'access', _145 => _145.prop, 'optionalAccess', _146 => _146.nullable]) === true) {
6164
+ if (_optionalChain([propNode, 'access', _150 => _150.prop, 'optionalAccess', _151 => _151.nullable]) === true) {
6165
6165
  return _zod.z.object(obj).nullable();
6166
6166
  } else {
6167
6167
  return _zod.z.object(obj);
@@ -6560,7 +6560,7 @@ var SonamuClass = (_class5 = class {constructor() { _class5.prototype.__init15.c
6560
6560
  __init16() {this.asyncLocalStorage = new (0, _async_hooks.AsyncLocalStorage)()}
6561
6561
  getContext() {
6562
6562
  const store = this.asyncLocalStorage.getStore();
6563
- if (_optionalChain([store, 'optionalAccess', _147 => _147.context])) {
6563
+ if (_optionalChain([store, 'optionalAccess', _152 => _152.context])) {
6564
6564
  return store.context;
6565
6565
  }
6566
6566
  throw new Error("Sonamu cannot find context");
@@ -6675,7 +6675,7 @@ var SonamuClass = (_class5 = class {constructor() { _class5.prototype.__init15.c
6675
6675
  }
6676
6676
  async withFastify(server, config, options) {
6677
6677
  if (this.isInitialized === false) {
6678
- await this.init(_optionalChain([options, 'optionalAccess', _148 => _148.doSilent]), _optionalChain([options, 'optionalAccess', _149 => _149.enableSync]));
6678
+ await this.init(_optionalChain([options, 'optionalAccess', _153 => _153.doSilent]), _optionalChain([options, 'optionalAccess', _154 => _154.enableSync]));
6679
6679
  }
6680
6680
  server.get(
6681
6681
  `${this.config.route.prefix}/routes`,
@@ -6811,7 +6811,7 @@ var EntityManagerClass = (_class6 = class {constructor() { _class6.prototype.__i
6811
6811
  Sonamu.apiRootPath,
6812
6812
  `dist/application/sonamu.generated.js?t=${Date.now()}`
6813
6813
  );
6814
- if (_optionalChain([__require, 'optionalAccess', _150 => _150.cache]) && __require.cache[sonamuPath]) {
6814
+ if (_optionalChain([__require, 'optionalAccess', _155 => _155.cache]) && __require.cache[sonamuPath]) {
6815
6815
  delete __require.cache[sonamuPath];
6816
6816
  }
6817
6817
  return await this.autoload(doSilent);
@@ -7107,7 +7107,7 @@ var Entity = (_class7 = class {
7107
7107
  const relSubsetQuery = relEntity.resolveSubsetQuery("", relFields);
7108
7108
  let manyJoin;
7109
7109
  if (isHasManyRelationProp(relation)) {
7110
- const fromCol = _nullishCoalesce(_optionalChain([relation, 'optionalAccess', _151 => _151.fromColumn]), () => ( "id"));
7110
+ const fromCol = _nullishCoalesce(_optionalChain([relation, 'optionalAccess', _156 => _156.fromColumn]), () => ( "id"));
7111
7111
  manyJoin = {
7112
7112
  fromTable: this.table,
7113
7113
  fromCol,
@@ -7622,4 +7622,4 @@ var Entity = (_class7 = class {
7622
7622
 
7623
7623
 
7624
7624
  exports.SQLDateTimeString = SQLDateTimeString; exports.zArrayable = zArrayable; exports.isIntegerProp = isIntegerProp; exports.isBigIntegerProp = isBigIntegerProp; exports.isTextProp = isTextProp; exports.isStringProp = isStringProp; exports.isEnumProp = isEnumProp; exports.isFloatProp = isFloatProp; exports.isDoubleProp = isDoubleProp; exports.isDecimalProp = isDecimalProp; exports.isBooleanProp = isBooleanProp; exports.isDateProp = isDateProp; exports.isDateTimeProp = isDateTimeProp; exports.isTimeProp = isTimeProp; exports.isTimestampProp = isTimestampProp; exports.isJsonProp = isJsonProp; exports.isUuidProp = isUuidProp; exports.isVirtualProp = isVirtualProp; exports.isRelationProp = isRelationProp; exports.isOneToOneRelationProp = isOneToOneRelationProp; exports.isBelongsToOneRelationProp = isBelongsToOneRelationProp; exports.isHasManyRelationProp = isHasManyRelationProp; exports.isManyToManyRelationProp = isManyToManyRelationProp; exports.isCustomJoinClause = isCustomJoinClause; exports.SonamuQueryMode = SonamuQueryMode; exports.isKnexError = isKnexError; exports.isKyselyError = isKyselyError; exports.ApiParamType = ApiParamType; exports.RenderingNode = RenderingNode; exports.TemplateOptions = TemplateOptions; exports.TemplateKey = TemplateKey; exports.GenerateOptions = GenerateOptions; exports.PathAndCode = PathAndCode; exports.getZodObjectFromApi = getZodObjectFromApi; exports.getZodObjectFromApiParams = getZodObjectFromApiParams; exports.getZodTypeFromApiParamType = getZodTypeFromApiParamType; exports.propNodeToZodTypeDef = propNodeToZodTypeDef; exports.getTextTypeLength = getTextTypeLength; exports.propToZodTypeDef = propToZodTypeDef; exports.zodTypeToZodCode = zodTypeToZodCode; exports.apiParamToTsCode = apiParamToTsCode; exports.apiParamToTsCodeAsObject = apiParamToTsCodeAsObject; exports.apiParamTypeToTsType = apiParamTypeToTsType; exports.unwrapPromiseOnce = unwrapPromiseOnce; exports.serializeZodType = serializeZodType; exports.zodTypeToTsTypeDef = zodTypeToTsTypeDef; exports.registeredApis = registeredApis; exports.api = api; exports.stream = stream; exports.SoException = SoException; exports.isSoException = isSoException; exports.BadRequestException = BadRequestException; exports.UnauthorizedException = UnauthorizedException; exports.NotFoundException = NotFoundException; exports.ServiceUnavailableException = ServiceUnavailableException; exports.InternalServerErrorException = InternalServerErrorException; exports.AlreadyProcessedException = AlreadyProcessedException; exports.DuplicateRowException = DuplicateRowException; exports.TargetNotFoundException = TargetNotFoundException; exports.globAsync = globAsync; exports.importMultiple = importMultiple; exports.findAppRootPath = findAppRootPath; exports.findApiRootPath = findApiRootPath; exports.nonNullable = nonNullable; exports.hydrate = hydrate; exports.Entity = Entity; exports.EntityManager = EntityManager; exports.asArray = asArray; exports.objToMap = objToMap; exports.KnexClient = KnexClient; exports.KyselyClient = KyselyClient; exports.DBKnexClass = DBKnexClass; exports.DBKyselyClass = DBKyselyClass; exports.DB = DB; exports.Syncer = Syncer; exports.isLocal = isLocal; exports.isRemote = isRemote; exports.isInDocker = isInDocker; exports.isDaemonServer = isDaemonServer; exports.isDevelopment = isDevelopment; exports.isStaging = isStaging; exports.isProduction = isProduction; exports.isTest = isTest; exports.Sonamu = Sonamu;
7625
- //# sourceMappingURL=chunk-DMJSNO2L.js.map
7625
+ //# sourceMappingURL=chunk-2WAC2GER.js.map