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
@@ -1,16 +1,12 @@
1
- import {
2
- isManyToManyRelationProp,
3
- SubsetQuery,
4
- TemplateOptions,
5
- } from "../../types/types";
6
- import { EntityManager } from "../../entity/entity-manager";
7
- import { Template } from "../template";
1
+ import assert from "assert";
8
2
  import inflection from "inflection";
9
- import { SourceCode } from "./generated.template";
10
- import * as _ from "lodash-es";
11
- import { nonNullable } from "../../utils/utils";
3
+ import { unique } from "radashi";
12
4
  import { Sonamu } from "../../api";
13
- import { Entity } from "../../entity/entity";
5
+ import type { Entity } from "../../entity/entity";
6
+ import { EntityManager } from "../../entity/entity-manager";
7
+ import { isManyToManyRelationProp } from "../../types/types";
8
+ import { Template } from "../template";
9
+ import type { SourceCode } from "./generated.template";
14
10
 
15
11
  export class Template__generated_sso extends Template {
16
12
  constructor() {
@@ -26,46 +22,54 @@ export class Template__generated_sso extends Template {
26
22
  };
27
23
  }
28
24
 
29
- render({}: TemplateOptions["generated_sso"]) {
25
+ render() {
30
26
  const entityIds = EntityManager.getAllIds();
31
27
  const entities = entityIds.map((id) => EntityManager.get(id));
32
28
 
33
- const sourceCodes: SourceCode[] = entities
34
- .map((entity) => {
35
- if (
36
- entity.parentId !== undefined ||
37
- Object.keys(entity.subsets).length === 0
38
- ) {
39
- return null;
40
- }
41
- const subsetKeys = Object.keys(entity.subsets);
42
- const subsetQueryObject = subsetKeys.reduce(
43
- (r, subsetKey) => {
44
- const subsetQuery = entity.getSubsetQuery(subsetKey);
45
- r[subsetKey] = subsetQuery;
46
- return r;
47
- },
48
- {} as {
49
- [key: string]: SubsetQuery;
50
- }
51
- );
52
-
53
- const subsetKeyTypeName = `${entity.names.module}SubsetKey`;
54
- return {
55
- label: `SubsetQuery: ${entity.id}`,
56
- lines: [
57
- `export const ${inflection.camelize(
58
- entity.id,
59
- true
60
- )}SubsetQueries:{ [key in ${subsetKeyTypeName}]: SubsetQuery} = ${JSON.stringify(
61
- subsetQueryObject
62
- )};`,
63
- "",
64
- ],
65
- importKeys: [subsetKeyTypeName],
66
- };
67
- })
68
- .filter(nonNullable);
29
+ // SubsetQueries 생성 대상: 부모 엔티티가 없고 서브셋이 존재
30
+ const targetEntities = entities.filter(
31
+ (entity) => entity.parentId === undefined && Object.keys(entity.subsets).length > 0,
32
+ );
33
+
34
+ // SubsetQueries 생성
35
+ const sourceCodes: SourceCode[] = targetEntities.flatMap((entity) => {
36
+ const subsetKeys = Object.keys(entity.subsets);
37
+
38
+ const subsetKeyTypeName = `${entity.names.module}SubsetKey`;
39
+ const entityCamelName = inflection.camelize(entity.id, true);
40
+
41
+ // Puri 기반 SubsetQuery
42
+ const puriSubsetQuery: SourceCode = {
43
+ label: `SubsetQuery: ${entity.id}`,
44
+ lines: [
45
+ `export const ${entityCamelName}SubsetQueries = {`,
46
+ ...subsetKeys.map(
47
+ (subsetKey) => `${subsetKey}: (qbWrapper: PuriWrapper<DatabaseSchemaExtend>) => {
48
+ ${entity.getPuriSubsetQuery(subsetKey)};
49
+ },`,
50
+ ),
51
+ `};`,
52
+ "",
53
+ ],
54
+ importKeys: [],
55
+ };
56
+
57
+ // Puri 기반 SubsetLoadersQuery
58
+ const puriLoaderQuery: SourceCode = {
59
+ label: `LoaderQuery: ${entity.id}`,
60
+ lines: [
61
+ `export const ${entityCamelName}LoaderQueries = {`,
62
+ ...subsetKeys.map((subsetKey) => {
63
+ return `${subsetKey}: ${entity.getPuriLoaderQuery(subsetKey)},`;
64
+ }),
65
+ `} as const satisfies PuriLoaderQueries<${subsetKeyTypeName}>;`,
66
+ "",
67
+ ],
68
+ importKeys: [subsetKeyTypeName],
69
+ };
70
+
71
+ return [puriSubsetQuery, puriLoaderQuery];
72
+ });
69
73
 
70
74
  // DatabaseSchema 생성
71
75
  const dbSchemaSourceCode = this.getDatabaseSchemaSourceCode(entities);
@@ -78,26 +82,35 @@ export class Template__generated_sso extends Template {
78
82
  if (ts === null) {
79
83
  return result;
80
84
  }
85
+ assert(result);
81
86
  return {
82
- lines: [...result!.lines, `// ${ts.label}`, ...ts.lines, ""],
83
- importKeys: _.uniq([...result!.importKeys, ...ts.importKeys]),
87
+ lines: [...result.lines, `// ${ts.label}`, ...ts.lines, ""],
88
+ importKeys: unique([...result.importKeys, ...ts.importKeys]),
84
89
  };
85
90
  },
86
91
  {
87
92
  lines: [],
88
93
  importKeys: [],
89
- } as Omit<SourceCode, "label">
94
+ } as Omit<SourceCode, "label">,
90
95
  );
91
96
 
92
97
  const body = sourceCode.lines.join("\n");
93
98
  const isUsingManyToManyBaseSchema = body.includes("ManyToManyBaseSchema");
99
+
100
+ const sonamuImports = [
101
+ "PuriWrapper",
102
+ "DatabaseSchemaExtend",
103
+ "PuriLoaderQueries",
104
+ isUsingManyToManyBaseSchema ? "ManyToManyBaseSchema" : "",
105
+ ]
106
+ .filter(Boolean)
107
+ .join(", ");
108
+
94
109
  return {
95
110
  ...this.getTargetAndPath(),
96
111
  body: sourceCode.lines.join("\n"),
97
112
  importKeys: sourceCode.importKeys,
98
- customHeaders: [
99
- `import { SubsetQuery, ${isUsingManyToManyBaseSchema ? "ManyToManyBaseSchema" : ""} } from "sonamu";`,
100
- ],
113
+ customHeaders: [`import { ${sonamuImports} } from "sonamu";`],
101
114
  };
102
115
  }
103
116
 
@@ -106,20 +119,17 @@ export class Template__generated_sso extends Template {
106
119
  return null;
107
120
  }
108
121
 
109
- const entitySchemaLines = entities.map(
110
- (entity) => `${entity.table}: ${entity.id}BaseSchema;`
111
- );
122
+ const entitySchemaLines = entities.map((entity) => `${entity.table}: ${entity.id}BaseSchema;`);
112
123
 
113
- const joinTableSchemaLines = _.uniq(
124
+ const joinTables = unique(
114
125
  entities.flatMap((entity) =>
115
126
  entity.props.filter(isManyToManyRelationProp).map((prop) => {
116
127
  const fromTableKey = inflection.singularize(entity.table);
117
- const toTableKey = inflection.singularize(
118
- EntityManager.get(prop.with).table
119
- );
120
- return `${prop.joinTable}: ManyToManyBaseSchema<"${fromTableKey}", "${toTableKey}">;`;
121
- })
122
- )
128
+ const toTableKey = inflection.singularize(EntityManager.get(prop.with).table);
129
+ return { table: prop.joinTable, fromTableKey, toTableKey };
130
+ }),
131
+ ),
132
+ (joinTable) => joinTable.table,
123
133
  );
124
134
 
125
135
  return {
@@ -128,7 +138,10 @@ export class Template__generated_sso extends Template {
128
138
  `declare module "sonamu" {`,
129
139
  ` export interface DatabaseSchemaExtend {`,
130
140
  ...entitySchemaLines,
131
- ...joinTableSchemaLines,
141
+ ...joinTables.map(
142
+ (joinTable) =>
143
+ `${joinTable.table}: ManyToManyBaseSchema<"${joinTable.fromTableKey}", "${joinTable.toTableKey}">;`,
144
+ ),
132
145
  ` }`,
133
146
  `}`,
134
147
  ],
@@ -1,7 +1,7 @@
1
- import { TemplateOptions } from "../../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
- import { Template } from "../template";
4
1
  import { Sonamu } from "../../api";
2
+ import { EntityManager, type EntityNamesRecord } from "../../entity/entity-manager";
3
+ import type { TemplateOptions } from "../../types/types";
4
+ import { Template } from "../template";
5
5
 
6
6
  export class Template__init_types extends Template {
7
7
  constructor() {
@@ -21,9 +21,7 @@ export class Template__init_types extends Template {
21
21
  const names = EntityManager.getNamesFromId(entityId);
22
22
 
23
23
  const hasCreatedAt =
24
- EntityManager.get(entityId).props.find(
25
- (prop) => prop.name === "created_at"
26
- ) !== undefined;
24
+ EntityManager.get(entityId).props.find((prop) => prop.name === "created_at") !== undefined;
27
25
 
28
26
  return {
29
27
  ...this.getTargetAndPath(names),
@@ -1,9 +1,10 @@
1
- import { TemplateOptions } from "../../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
- import { Template } from "../template";
4
- import { Template__view_list } from "./view_list.template";
5
1
  import { Sonamu } from "../../api";
2
+ import { EntityManager, type EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Naite } from "../../naite/naite";
4
+ import type { TemplateOptions } from "../../types/types";
5
+ import { Template } from "../template";
6
6
  import { getZodTypeById, zodTypeToRenderingNode } from "../zod-converter";
7
+ import { Template__view_list } from "./view_list.template";
7
8
 
8
9
  export class Template__model extends Template {
9
10
  constructor() {
@@ -20,6 +21,8 @@ export class Template__model extends Template {
20
21
  }
21
22
 
22
23
  async render({ entityId }: TemplateOptions["model"]) {
24
+ Naite.t("render", { entityId });
25
+
23
26
  const listParamsZodType = await getZodTypeById(`${entityId}ListParams`);
24
27
  const listParamsNode = zodTypeToRenderingNode(listParamsZodType);
25
28
 
@@ -35,20 +38,26 @@ export class Template__model extends Template {
35
38
  return {
36
39
  ...this.getTargetAndPath(names),
37
40
  body: `
38
- import { BaseModelClass, ListResult, asArray, NotFoundException, BadRequestException, api } from 'sonamu';
41
+ import { BaseModelClass, type ListResult, asArray, NotFoundException, BadRequestException, api, exhaustive } from 'sonamu';
39
42
  import {
40
43
  ${entityId}SubsetKey,
41
44
  ${entityId}SubsetMapping,
42
45
  } from "../sonamu.generated";
43
46
  import {
44
47
  ${names.camel}SubsetQueries,
48
+ ${names.camel}LoaderQueries,
45
49
  } from "../sonamu.generated.sso";
46
50
  import { ${entityId}ListParams, ${entityId}SaveParams } from "./${names.fs}.types";
47
51
 
48
52
  /*
49
53
  ${entityId} Model
50
54
  */
51
- class ${entityId}ModelClass extends BaseModelClass {
55
+ class ${entityId}ModelClass extends BaseModelClass<
56
+ ${entityId}SubsetKey,
57
+ ${entityId}SubsetMapping,
58
+ typeof ${names.camel}SubsetQueries,
59
+ typeof ${names.camel}LoaderQueries
60
+ > {
52
61
  modelName = "${entityId}";
53
62
 
54
63
  @api({ httpMethod: "GET", clients: ["axios", "swr"], resourceName: "${entityId}" })
@@ -96,38 +105,38 @@ class ${entityId}ModelClass extends BaseModelClass {
96
105
  };
97
106
 
98
107
  // build queries
99
- let { rows, total } = await this.runSubsetQuery({
108
+ const { qb, onSubset: _ } = this.getSubsetQueries(subset);
109
+
110
+ // id
111
+ if (params.id) {
112
+ qb.whereIn("${entity.table}.id", asArray(params.id));
113
+ }
114
+
115
+ // search-keyword
116
+ if (params.search && params.keyword && params.keyword.length > 0) {
117
+ if (params.search === "id") {
118
+ qb.where("${entity.table}.id", Number(params.keyword));
119
+ // } else if (params.search === "field") {
120
+ // qb.where("${entity.table}.field", "like", \`%\${params.keyword}%\`);
121
+ } else {
122
+ throw new BadRequestException(\`구현되지 않은 검색 필드 \${params.search}\`);
123
+ }
124
+ }
125
+
126
+ // orderBy
127
+ if (params.orderBy) {
128
+ // default orderBy
129
+ if (params.orderBy === "id-desc") {
130
+ qb.orderBy("${entity.table}.id", "desc");
131
+ } else {
132
+ exhaustive(params.orderBy);
133
+ }
134
+ }
135
+
136
+ const { rows, total } = await this.executeSubsetQuery({
100
137
  subset,
138
+ qb,
101
139
  params,
102
- subsetQuery: ${names.camel}SubsetQueries[subset],
103
- build: ({ qb }) => {
104
- // id
105
- if (params.id) {
106
- qb.whereIn("${entity.table}.id", asArray(params.id));
107
- }
108
-
109
- // search-keyword
110
- if (params.search && params.keyword && params.keyword.length > 0) {
111
- if (params.search === "id") {
112
- qb.where("${entity.table}.id", params.keyword);
113
- // } else if (params.search === "field") {
114
- // qb.where("${entity.table}.field", "like", \`%\${params.keyword}%\`);
115
- } else {
116
- throw new BadRequestException(
117
- \`구현되지 않은 검색 필드 \${params.search}\`
118
- );
119
- }
120
- }
121
-
122
- // orderBy
123
- if (params.orderBy) {
124
- // default orderBy
125
- const [orderByField, orderByDirec] = params.orderBy.split("-");
126
- qb.orderBy("${entity.table}." + orderByField, orderByDirec);
127
- }
128
-
129
- return qb;
130
- },
131
140
  debug: false,
132
141
  });
133
142
 
@@ -144,7 +153,7 @@ class ${entityId}ModelClass extends BaseModelClass {
144
153
  const wdb = this.getPuri("w");
145
154
 
146
155
  // register
147
- spa.map((sp) => {
156
+ spa.forEach((sp) => {
148
157
  wdb.ubRegister("${entity.table}", sp);
149
158
  });
150
159
 
@@ -169,7 +178,7 @@ class ${entityId}ModelClass extends BaseModelClass {
169
178
  }
170
179
  }
171
180
 
172
- export const ${entityId}Model = new ${entityId}ModelClass();
181
+ export const ${entityId}Model = new ${entityId}ModelClass(${names.camel}SubsetQueries, ${names.camel}LoaderQueries);
173
182
  `.trim(),
174
183
  importKeys: [],
175
184
  };
@@ -1,7 +1,7 @@
1
- import { TemplateOptions } from "../../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
- import { Template } from "../template";
4
1
  import { Sonamu } from "../../api";
2
+ import { EntityManager, type EntityNamesRecord } from "../../entity/entity-manager";
3
+ import type { TemplateOptions } from "../../types/types";
4
+ import { Template } from "../template";
5
5
 
6
6
  export class Template__model_test extends Template {
7
7
  constructor() {