sonamu 0.8.26 → 0.9.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 (684) hide show
  1. package/bin/cli.js +60 -13
  2. package/dist/_virtual/rolldown_runtime.js +39 -0
  3. package/dist/ai/agents/agent.d.ts +3 -3
  4. package/dist/ai/agents/agent.d.ts.map +1 -1
  5. package/dist/ai/agents/agent.js +76 -73
  6. package/dist/ai/agents/index.js +3 -3
  7. package/dist/ai/agents/types.d.ts +3 -3
  8. package/dist/ai/agents/types.d.ts.map +1 -1
  9. package/dist/ai/agents/types.js +1 -3
  10. package/dist/ai/index.js +3 -2
  11. package/dist/ai/providers/rtzr/api.js +25 -25
  12. package/dist/ai/providers/rtzr/error.js +25 -26
  13. package/dist/ai/providers/rtzr/index.js +5 -5
  14. package/dist/ai/providers/rtzr/model.d.ts +1 -1
  15. package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
  16. package/dist/ai/providers/rtzr/model.js +117 -133
  17. package/dist/ai/providers/rtzr/options.d.ts.map +1 -1
  18. package/dist/ai/providers/rtzr/options.js +35 -41
  19. package/dist/ai/providers/rtzr/provider.d.ts +1 -1
  20. package/dist/ai/providers/rtzr/provider.d.ts.map +1 -1
  21. package/dist/ai/providers/rtzr/provider.js +53 -51
  22. package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
  23. package/dist/ai/providers/rtzr/utils.js +84 -84
  24. package/dist/api/base-frame.d.ts +2 -2
  25. package/dist/api/base-frame.d.ts.map +1 -1
  26. package/dist/api/base-frame.js +29 -19
  27. package/dist/api/caster.d.ts +1 -1
  28. package/dist/api/caster.d.ts.map +1 -1
  29. package/dist/api/caster.js +51 -61
  30. package/dist/api/code-converters.d.ts +4 -3
  31. package/dist/api/code-converters.d.ts.map +1 -1
  32. package/dist/api/code-converters.js +226 -249
  33. package/dist/api/config.d.ts +17 -17
  34. package/dist/api/config.d.ts.map +1 -1
  35. package/dist/api/config.js +37 -30
  36. package/dist/api/context.d.ts +10 -10
  37. package/dist/api/context.d.ts.map +1 -1
  38. package/dist/api/context.js +8 -2
  39. package/dist/api/decorators.d.ts +8 -8
  40. package/dist/api/decorators.d.ts.map +1 -1
  41. package/dist/api/decorators.js +245 -268
  42. package/dist/api/index.js +39 -7
  43. package/dist/api/secret.js +22 -15
  44. package/dist/api/sonamu.d.ts +15 -15
  45. package/dist/api/sonamu.d.ts.map +1 -1
  46. package/dist/api/sonamu.js +1012 -1131
  47. package/dist/api/validator.js +88 -79
  48. package/dist/auth/auth-generator.d.ts.map +1 -1
  49. package/dist/auth/auth-generator.js +203 -200
  50. package/dist/auth/better-auth-entities.d.ts +2 -2
  51. package/dist/auth/better-auth-entities.d.ts.map +1 -1
  52. package/dist/auth/better-auth-entities.js +369 -429
  53. package/dist/auth/index.js +21 -6
  54. package/dist/auth/knex-adapter.d.ts +2 -2
  55. package/dist/auth/knex-adapter.d.ts.map +1 -1
  56. package/dist/auth/knex-adapter.js +153 -157
  57. package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
  58. package/dist/auth/plugins/entity-definitions/admin.d.ts.map +1 -1
  59. package/dist/auth/plugins/entity-definitions/admin.js +58 -56
  60. package/dist/auth/plugins/entity-definitions/anonymous.d.ts +1 -1
  61. package/dist/auth/plugins/entity-definitions/anonymous.d.ts.map +1 -1
  62. package/dist/auth/plugins/entity-definitions/anonymous.js +20 -20
  63. package/dist/auth/plugins/entity-definitions/api-key.d.ts +1 -1
  64. package/dist/auth/plugins/entity-definitions/api-key.d.ts.map +1 -1
  65. package/dist/auth/plugins/entity-definitions/api-key.js +185 -196
  66. package/dist/auth/plugins/entity-definitions/index.d.ts +1 -1
  67. package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
  68. package/dist/auth/plugins/entity-definitions/index.js +26 -29
  69. package/dist/auth/plugins/entity-definitions/jwt.d.ts +1 -1
  70. package/dist/auth/plugins/entity-definitions/jwt.d.ts.map +1 -1
  71. package/dist/auth/plugins/entity-definitions/jwt.js +62 -64
  72. package/dist/auth/plugins/entity-definitions/organization.d.ts +1 -1
  73. package/dist/auth/plugins/entity-definitions/organization.d.ts.map +1 -1
  74. package/dist/auth/plugins/entity-definitions/organization.js +362 -421
  75. package/dist/auth/plugins/entity-definitions/passkey.d.ts +1 -1
  76. package/dist/auth/plugins/entity-definitions/passkey.d.ts.map +1 -1
  77. package/dist/auth/plugins/entity-definitions/passkey.js +115 -126
  78. package/dist/auth/plugins/entity-definitions/phone-number.d.ts +1 -1
  79. package/dist/auth/plugins/entity-definitions/phone-number.d.ts.map +1 -1
  80. package/dist/auth/plugins/entity-definitions/phone-number.js +31 -40
  81. package/dist/auth/plugins/entity-definitions/sso.d.ts +1 -1
  82. package/dist/auth/plugins/entity-definitions/sso.d.ts.map +1 -1
  83. package/dist/auth/plugins/entity-definitions/sso.js +94 -107
  84. package/dist/auth/plugins/entity-definitions/two-factor.d.ts +1 -1
  85. package/dist/auth/plugins/entity-definitions/two-factor.d.ts.map +1 -1
  86. package/dist/auth/plugins/entity-definitions/two-factor.js +78 -92
  87. package/dist/auth/plugins/entity-definitions/types.d.ts +1 -1
  88. package/dist/auth/plugins/entity-definitions/types.d.ts.map +1 -1
  89. package/dist/auth/plugins/entity-definitions/types.js +1 -10
  90. package/dist/auth/plugins/entity-definitions/username.d.ts +1 -1
  91. package/dist/auth/plugins/entity-definitions/username.d.ts.map +1 -1
  92. package/dist/auth/plugins/entity-definitions/username.js +31 -40
  93. package/dist/auth/plugins/index.js +12 -3
  94. package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
  95. package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
  96. package/dist/auth/plugins/wrappers/admin.js +28 -29
  97. package/dist/auth/plugins/wrappers/anonymous.d.ts +2 -1
  98. package/dist/auth/plugins/wrappers/anonymous.d.ts.map +1 -1
  99. package/dist/auth/plugins/wrappers/anonymous.js +23 -22
  100. package/dist/auth/plugins/wrappers/api-key.d.ts +2 -1
  101. package/dist/auth/plugins/wrappers/api-key.d.ts.map +1 -1
  102. package/dist/auth/plugins/wrappers/api-key.js +39 -34
  103. package/dist/auth/plugins/wrappers/index.js +11 -11
  104. package/dist/auth/plugins/wrappers/jwt.d.ts +2 -1
  105. package/dist/auth/plugins/wrappers/jwt.d.ts.map +1 -1
  106. package/dist/auth/plugins/wrappers/jwt.js +31 -26
  107. package/dist/auth/plugins/wrappers/organization.d.ts +2 -1
  108. package/dist/auth/plugins/wrappers/organization.d.ts.map +1 -1
  109. package/dist/auth/plugins/wrappers/organization.js +65 -62
  110. package/dist/auth/plugins/wrappers/passkey.d.ts +2 -1
  111. package/dist/auth/plugins/wrappers/passkey.d.ts.map +1 -1
  112. package/dist/auth/plugins/wrappers/passkey.js +33 -28
  113. package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
  114. package/dist/auth/plugins/wrappers/phone-number.js +26 -23
  115. package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
  116. package/dist/auth/plugins/wrappers/sso.js +37 -31
  117. package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
  118. package/dist/auth/plugins/wrappers/two-factor.js +31 -28
  119. package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
  120. package/dist/auth/plugins/wrappers/username.js +23 -23
  121. package/dist/bin/build-config.js +31 -31
  122. package/dist/bin/cli.js +1063 -1204
  123. package/dist/bin/fixture.d.ts.map +1 -1
  124. package/dist/bin/fixture.js +266 -259
  125. package/dist/bin/hmr-hook-register.d.ts.map +1 -1
  126. package/dist/bin/hmr-hook-register.js +19 -18
  127. package/dist/bin/test-command.d.ts.map +1 -1
  128. package/dist/bin/test-command.js +180 -177
  129. package/dist/bin/ts-loader-register.js +13 -6
  130. package/dist/bin/ts-loader-registration.d.ts.map +1 -1
  131. package/dist/bin/ts-loader-registration.js +28 -38
  132. package/dist/cache/cache-manager.d.ts +1 -1
  133. package/dist/cache/cache-manager.d.ts.map +1 -1
  134. package/dist/cache/cache-manager.js +20 -15
  135. package/dist/cache/decorator.d.ts +1 -1
  136. package/dist/cache/decorator.d.ts.map +1 -1
  137. package/dist/cache/decorator.js +84 -76
  138. package/dist/cache/drivers.js +21 -34
  139. package/dist/cache/index.js +10 -7
  140. package/dist/cache/types.d.ts +2 -2
  141. package/dist/cache/types.d.ts.map +1 -1
  142. package/dist/cache/types.js +1 -6
  143. package/dist/cache-control/cache-control.d.ts +2 -2
  144. package/dist/cache-control/cache-control.d.ts.map +1 -1
  145. package/dist/cache-control/cache-control.js +106 -122
  146. package/dist/cache-control/types.d.ts +2 -2
  147. package/dist/cache-control/types.d.ts.map +1 -1
  148. package/dist/cache-control/types.js +1 -19
  149. package/dist/compress/compress.d.ts +1 -1
  150. package/dist/compress/compress.d.ts.map +1 -1
  151. package/dist/compress/compress.js +58 -56
  152. package/dist/compress/index.js +7 -2
  153. package/dist/compress/types.js +1 -11
  154. package/dist/cone/cone-generator.d.ts +1 -1
  155. package/dist/cone/cone-generator.d.ts.map +1 -1
  156. package/dist/cone/cone-generator.js +216 -219
  157. package/dist/database/_batch_update.d.ts +1 -1
  158. package/dist/database/_batch_update.d.ts.map +1 -1
  159. package/dist/database/_batch_update.js +107 -102
  160. package/dist/database/base-model.d.ts +8 -9
  161. package/dist/database/base-model.d.ts.map +1 -1
  162. package/dist/database/base-model.js +371 -392
  163. package/dist/database/base-model.types.d.ts +5 -5
  164. package/dist/database/base-model.types.d.ts.map +1 -1
  165. package/dist/database/base-model.types.js +1 -20
  166. package/dist/database/db.d.ts +5 -2
  167. package/dist/database/db.d.ts.map +1 -1
  168. package/dist/database/db.js +185 -171
  169. package/dist/database/knex.d.ts +1 -1
  170. package/dist/database/knex.d.ts.map +1 -1
  171. package/dist/database/knex.js +48 -42
  172. package/dist/database/puri-subset.types.d.ts +6 -7
  173. package/dist/database/puri-subset.types.d.ts.map +1 -1
  174. package/dist/database/puri-subset.types.js +1 -16
  175. package/dist/database/puri-wrapper.d.ts +6 -6
  176. package/dist/database/puri-wrapper.d.ts.map +1 -1
  177. package/dist/database/puri-wrapper.js +99 -101
  178. package/dist/database/puri.d.ts +4 -5
  179. package/dist/database/puri.d.ts.map +1 -1
  180. package/dist/database/puri.js +1021 -1227
  181. package/dist/database/puri.types.d.ts +6 -6
  182. package/dist/database/puri.types.d.ts.map +1 -1
  183. package/dist/database/puri.types.js +15 -6
  184. package/dist/database/transaction-context.d.ts +2 -2
  185. package/dist/database/transaction-context.d.ts.map +1 -1
  186. package/dist/database/transaction-context.js +22 -13
  187. package/dist/database/upsert-builder.d.ts +3 -3
  188. package/dist/database/upsert-builder.d.ts.map +1 -1
  189. package/dist/database/upsert-builder.js +405 -465
  190. package/dist/dict/en.js +72 -74
  191. package/dist/dict/index.js +13 -13
  192. package/dist/dict/ko.js +72 -74
  193. package/dist/dict/rc-keys.js +150 -168
  194. package/dist/dict/sd.d.ts +3 -1
  195. package/dist/dict/sd.d.ts.map +1 -1
  196. package/dist/dict/sd.js +54 -40
  197. package/dist/dict/sonamu-dictionary.d.ts +1 -1
  198. package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
  199. package/dist/dict/sonamu-dictionary.js +887 -955
  200. package/dist/dict/types.js +1 -7
  201. package/dist/dict/utils.js +26 -24
  202. package/dist/entity/entity-manager.d.ts +9 -9
  203. package/dist/entity/entity-manager.d.ts.map +1 -1
  204. package/dist/entity/entity-manager.js +226 -223
  205. package/dist/entity/entity-template-cone.d.ts +1 -1
  206. package/dist/entity/entity-template-cone.d.ts.map +1 -1
  207. package/dist/entity/entity-template-cone.js +152 -151
  208. package/dist/entity/entity.d.ts.map +1 -1
  209. package/dist/entity/entity.js +952 -1089
  210. package/dist/exceptions/error-handler.d.ts +1 -1
  211. package/dist/exceptions/error-handler.d.ts.map +1 -1
  212. package/dist/exceptions/error-handler.js +32 -27
  213. package/dist/exceptions/so-exceptions.d.ts +1 -1
  214. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  215. package/dist/exceptions/so-exceptions.js +61 -68
  216. package/dist/filter/index.js +9 -3
  217. package/dist/filter/types.js +92 -88
  218. package/dist/filter/utils.d.ts +1 -1
  219. package/dist/filter/utils.d.ts.map +1 -1
  220. package/dist/filter/utils.js +147 -161
  221. package/dist/index.js +87 -40
  222. package/dist/logger/category.d.ts.map +1 -1
  223. package/dist/logger/category.js +30 -29
  224. package/dist/logger/configure.d.ts.map +1 -1
  225. package/dist/logger/configure.js +83 -107
  226. package/dist/migration/code-generation.d.ts +2 -2
  227. package/dist/migration/code-generation.d.ts.map +1 -1
  228. package/dist/migration/code-generation.js +1385 -1578
  229. package/dist/migration/migration-set.d.ts +1 -1
  230. package/dist/migration/migration-set.d.ts.map +1 -1
  231. package/dist/migration/migration-set.js +177 -227
  232. package/dist/migration/migrator.d.ts +4 -3
  233. package/dist/migration/migrator.d.ts.map +1 -1
  234. package/dist/migration/migrator.js +340 -345
  235. package/dist/migration/postgresql-schema-reader.d.ts +2 -2
  236. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  237. package/dist/migration/postgresql-schema-reader.js +506 -564
  238. package/dist/migration/slack-confirm.d.ts +2 -2
  239. package/dist/migration/slack-confirm.d.ts.map +1 -1
  240. package/dist/migration/slack-confirm.js +205 -193
  241. package/dist/migration/types.d.ts +2 -2
  242. package/dist/migration/types.d.ts.map +1 -1
  243. package/dist/migration/types.js +1 -3
  244. package/dist/naite/messaging-types.d.ts +1 -0
  245. package/dist/naite/messaging-types.d.ts.map +1 -1
  246. package/dist/naite/messaging-types.js +1 -7
  247. package/dist/naite/naite-reporter.d.ts +2 -2
  248. package/dist/naite/naite-reporter.d.ts.map +1 -1
  249. package/dist/naite/naite-reporter.js +127 -120
  250. package/dist/naite/naite.d.ts +3 -2
  251. package/dist/naite/naite.d.ts.map +1 -1
  252. package/dist/naite/naite.js +266 -300
  253. package/dist/ssr/index.d.ts +2 -2
  254. package/dist/ssr/index.d.ts.map +1 -1
  255. package/dist/ssr/index.js +13 -3
  256. package/dist/ssr/registry.d.ts +1 -1
  257. package/dist/ssr/registry.d.ts.map +1 -1
  258. package/dist/ssr/registry.js +45 -37
  259. package/dist/ssr/renderer.d.ts +4 -4
  260. package/dist/ssr/renderer.d.ts.map +1 -1
  261. package/dist/ssr/renderer.js +84 -91
  262. package/dist/ssr/types.d.ts +2 -2
  263. package/dist/ssr/types.d.ts.map +1 -1
  264. package/dist/ssr/types.js +1 -3
  265. package/dist/storage/base-file.js +54 -41
  266. package/dist/storage/buffered-file.d.ts +2 -2
  267. package/dist/storage/buffered-file.d.ts.map +1 -1
  268. package/dist/storage/buffered-file.js +51 -44
  269. package/dist/storage/drivers.d.ts +2 -2
  270. package/dist/storage/drivers.d.ts.map +1 -1
  271. package/dist/storage/drivers.js +12 -7
  272. package/dist/storage/index.js +14 -7
  273. package/dist/storage/s3-driver.d.ts +2 -2
  274. package/dist/storage/s3-driver.d.ts.map +1 -1
  275. package/dist/storage/s3-driver.js +52 -48
  276. package/dist/storage/storage-manager.d.ts +2 -2
  277. package/dist/storage/storage-manager.d.ts.map +1 -1
  278. package/dist/storage/storage-manager.js +33 -25
  279. package/dist/storage/types.d.ts +2 -2
  280. package/dist/storage/types.d.ts.map +1 -1
  281. package/dist/storage/types.js +1 -5
  282. package/dist/storage/uploaded-file.d.ts +1 -1
  283. package/dist/storage/uploaded-file.d.ts.map +1 -1
  284. package/dist/storage/uploaded-file.js +45 -35
  285. package/dist/stream/index.js +7 -2
  286. package/dist/stream/sse.d.ts +2 -2
  287. package/dist/stream/sse.d.ts.map +1 -1
  288. package/dist/stream/sse.js +72 -67
  289. package/dist/syncer/api-parser.d.ts +1 -1
  290. package/dist/syncer/api-parser.d.ts.map +1 -1
  291. package/dist/syncer/api-parser.js +224 -245
  292. package/dist/syncer/checksum.d.ts +1 -1
  293. package/dist/syncer/checksum.d.ts.map +1 -1
  294. package/dist/syncer/checksum.js +86 -72
  295. package/dist/syncer/code-generator.d.ts +2 -2
  296. package/dist/syncer/code-generator.d.ts.map +1 -1
  297. package/dist/syncer/code-generator.js +154 -160
  298. package/dist/syncer/entity-operations.d.ts +1 -1
  299. package/dist/syncer/entity-operations.d.ts.map +1 -1
  300. package/dist/syncer/entity-operations.js +63 -54
  301. package/dist/syncer/file-patterns.d.ts +1 -1
  302. package/dist/syncer/file-patterns.d.ts.map +1 -1
  303. package/dist/syncer/file-patterns.js +38 -38
  304. package/dist/syncer/index.js +19 -8
  305. package/dist/syncer/module-loader.d.ts +5 -5
  306. package/dist/syncer/module-loader.d.ts.map +1 -1
  307. package/dist/syncer/module-loader.js +83 -78
  308. package/dist/syncer/syncer-actions.d.ts +2 -2
  309. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  310. package/dist/syncer/syncer-actions.js +76 -91
  311. package/dist/syncer/syncer.d.ts +7 -6
  312. package/dist/syncer/syncer.d.ts.map +1 -1
  313. package/dist/syncer/syncer.js +426 -492
  314. package/dist/tasks/decorator.d.ts +3 -3
  315. package/dist/tasks/decorator.d.ts.map +1 -1
  316. package/dist/tasks/decorator.js +32 -28
  317. package/dist/tasks/step-wrapper.d.ts +1 -1
  318. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  319. package/dist/tasks/step-wrapper.js +42 -41
  320. package/dist/tasks/workflow-manager.d.ts +2 -2
  321. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  322. package/dist/tasks/workflow-manager.js +192 -221
  323. package/dist/template/entity-converter.d.ts +1 -1
  324. package/dist/template/entity-converter.d.ts.map +1 -1
  325. package/dist/template/entity-converter.js +103 -103
  326. package/dist/template/helpers.d.ts.map +1 -1
  327. package/dist/template/helpers.js +163 -163
  328. package/dist/template/implementations/entity.template.d.ts +1 -1
  329. package/dist/template/implementations/entity.template.d.ts.map +1 -1
  330. package/dist/template/implementations/entity.template.js +76 -85
  331. package/dist/template/implementations/entry-server.template.d.ts +1 -1
  332. package/dist/template/implementations/entry-server.template.d.ts.map +1 -1
  333. package/dist/template/implementations/entry-server.template.js +32 -27
  334. package/dist/template/implementations/generated.template.d.ts +1 -1
  335. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  336. package/dist/template/implementations/generated.template.js +254 -275
  337. package/dist/template/implementations/generated_http.template.d.ts +2 -2
  338. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  339. package/dist/template/implementations/generated_http.template.js +114 -133
  340. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  341. package/dist/template/implementations/generated_sso.template.js +249 -275
  342. package/dist/template/implementations/init_types.template.d.ts +1 -1
  343. package/dist/template/implementations/init_types.template.d.ts.map +1 -1
  344. package/dist/template/implementations/init_types.template.js +40 -34
  345. package/dist/template/implementations/model.template.d.ts +1 -1
  346. package/dist/template/implementations/model.template.d.ts.map +1 -1
  347. package/dist/template/implementations/model.template.js +56 -53
  348. package/dist/template/implementations/model_test.template.d.ts +1 -1
  349. package/dist/template/implementations/model_test.template.d.ts.map +1 -1
  350. package/dist/template/implementations/model_test.template.js +32 -24
  351. package/dist/template/implementations/queries.template.d.ts +1 -1
  352. package/dist/template/implementations/queries.template.d.ts.map +1 -1
  353. package/dist/template/implementations/queries.template.js +84 -89
  354. package/dist/template/implementations/sd.template.d.ts +1 -1
  355. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  356. package/dist/template/implementations/sd.template.js +137 -144
  357. package/dist/template/implementations/services.template.d.ts +1 -1
  358. package/dist/template/implementations/services.template.d.ts.map +1 -1
  359. package/dist/template/implementations/services.template.js +164 -189
  360. package/dist/template/implementations/view_form.template.d.ts +1 -1
  361. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  362. package/dist/template/implementations/view_form.template.js +258 -285
  363. package/dist/template/implementations/view_id_all_select.template.d.ts +1 -1
  364. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -1
  365. package/dist/template/implementations/view_id_all_select.template.js +31 -25
  366. package/dist/template/implementations/view_list.template.d.ts +1 -1
  367. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  368. package/dist/template/implementations/view_list.template.js +304 -355
  369. package/dist/template/implementations/view_search_input.template.d.ts +1 -1
  370. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
  371. package/dist/template/implementations/view_search_input.template.js +31 -27
  372. package/dist/template/index.js +21 -7
  373. package/dist/template/template-manager.d.ts +1 -1
  374. package/dist/template/template-manager.d.ts.map +1 -1
  375. package/dist/template/template-manager.js +132 -123
  376. package/dist/template/template-types.js +8 -6
  377. package/dist/template/template.d.ts +2 -2
  378. package/dist/template/template.d.ts.map +1 -1
  379. package/dist/template/template.js +73 -68
  380. package/dist/template/zod-converter.d.ts.map +1 -1
  381. package/dist/template/zod-converter.js +603 -657
  382. package/dist/testing/_relation-graph.d.ts +1 -1
  383. package/dist/testing/_relation-graph.d.ts.map +1 -1
  384. package/dist/testing/_relation-graph.js +93 -88
  385. package/dist/testing/bootstrap.d.ts +22 -13
  386. package/dist/testing/bootstrap.d.ts.map +1 -1
  387. package/dist/testing/bootstrap.js +114 -114
  388. package/dist/testing/data-explorer.d.ts +3 -3
  389. package/dist/testing/data-explorer.d.ts.map +1 -1
  390. package/dist/testing/data-explorer.js +237 -265
  391. package/dist/testing/dev-test-routes.d.ts +2 -2
  392. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  393. package/dist/testing/dev-test-routes.js +258 -249
  394. package/dist/testing/dev-vitest-manager.d.ts +1 -1
  395. package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
  396. package/dist/testing/dev-vitest-manager.js +514 -539
  397. package/dist/testing/faker-mappings.js +422 -420
  398. package/dist/testing/fixture-generator.d.ts +3 -3
  399. package/dist/testing/fixture-generator.d.ts.map +1 -1
  400. package/dist/testing/fixture-generator.js +1216 -1346
  401. package/dist/testing/fixture-loader.js +26 -25
  402. package/dist/testing/fixture-manager.d.ts +3 -3
  403. package/dist/testing/fixture-manager.d.ts.map +1 -1
  404. package/dist/testing/fixture-manager.js +706 -776
  405. package/dist/testing/global-setup.js +53 -49
  406. package/dist/testing/index.js +19 -11
  407. package/dist/testing/naite-vitest-reporter.js +18 -13
  408. package/dist/testing/parallel-db-manager.d.ts +1 -1
  409. package/dist/testing/parallel-db-manager.d.ts.map +1 -1
  410. package/dist/testing/parallel-db-manager.js +63 -78
  411. package/dist/testing/vitest-helpers.d.ts +1 -1
  412. package/dist/testing/vitest-helpers.d.ts.map +1 -1
  413. package/dist/testing/vitest-helpers.js +37 -33
  414. package/dist/types/types.d.ts +28 -28
  415. package/dist/types/types.d.ts.map +1 -1
  416. package/dist/types/types.js +764 -890
  417. package/dist/ui/ai-api.d.ts +1 -1
  418. package/dist/ui/ai-api.d.ts.map +1 -1
  419. package/dist/ui/ai-api.js +52 -42
  420. package/dist/ui/ai-client.d.ts +1 -2
  421. package/dist/ui/ai-client.d.ts.map +1 -1
  422. package/dist/ui/ai-client.js +353 -388
  423. package/dist/ui/api.d.ts +1 -1
  424. package/dist/ui/api.d.ts.map +1 -1
  425. package/dist/ui/api.js +903 -1145
  426. package/dist/ui/cdd-service.d.ts +1 -1
  427. package/dist/ui/cdd-service.d.ts.map +1 -1
  428. package/dist/ui/cdd-service.js +406 -407
  429. package/dist/ui/cdd-types.js +1 -3
  430. package/dist/ui-web/assets/index-C-Zz-wYg.css +1 -0
  431. package/dist/ui-web/assets/index-DejDON8K.js +238 -0
  432. package/dist/ui-web/index.html +3 -3
  433. package/dist/utils/async-utils.js +57 -45
  434. package/dist/utils/console-util.d.ts.map +1 -1
  435. package/dist/utils/console-util.js +104 -87
  436. package/dist/utils/controller.js +26 -19
  437. package/dist/utils/esm-utils.js +49 -38
  438. package/dist/utils/formatter.d.ts +1 -2
  439. package/dist/utils/formatter.d.ts.map +1 -1
  440. package/dist/utils/formatter.js +89 -115
  441. package/dist/utils/fs-utils.d.ts.map +1 -1
  442. package/dist/utils/fs-utils.js +68 -65
  443. package/dist/utils/lodash-able.js +11 -4
  444. package/dist/utils/model.d.ts +1 -1
  445. package/dist/utils/model.d.ts.map +1 -1
  446. package/dist/utils/model.js +21 -19
  447. package/dist/utils/object-utils.js +148 -186
  448. package/dist/utils/path-utils.js +67 -57
  449. package/dist/utils/process-utils.d.ts.map +1 -1
  450. package/dist/utils/process-utils.js +37 -31
  451. package/dist/utils/sql-parser.d.ts +1 -1
  452. package/dist/utils/sql-parser.d.ts.map +1 -1
  453. package/dist/utils/sql-parser.js +40 -40
  454. package/dist/utils/type-utils.js +44 -43
  455. package/dist/utils/utils.d.ts +2 -3
  456. package/dist/utils/utils.d.ts.map +1 -1
  457. package/dist/utils/utils.js +81 -93
  458. package/dist/utils/zod-error.d.ts +1 -1
  459. package/dist/utils/zod-error.d.ts.map +1 -1
  460. package/dist/utils/zod-error.js +24 -17
  461. package/dist/vector/chunking.d.ts +1 -1
  462. package/dist/vector/chunking.d.ts.map +1 -1
  463. package/dist/vector/chunking.js +100 -94
  464. package/dist/vector/config.d.ts +1 -1
  465. package/dist/vector/config.d.ts.map +1 -1
  466. package/dist/vector/config.js +76 -78
  467. package/dist/vector/embedding.d.ts +1 -1
  468. package/dist/vector/embedding.d.ts.map +1 -1
  469. package/dist/vector/embedding.js +128 -125
  470. package/dist/vector/index.js +5 -5
  471. package/dist/vector/types.js +1 -5
  472. package/package.json +31 -36
  473. package/src/ai/agents/agent.ts +12 -5
  474. package/src/ai/agents/types.ts +5 -5
  475. package/src/ai/providers/rtzr/model.ts +8 -10
  476. package/src/ai/providers/rtzr/options.ts +2 -1
  477. package/src/ai/providers/rtzr/provider.ts +5 -3
  478. package/src/ai/providers/rtzr/utils.ts +2 -7
  479. package/src/api/__tests__/config.test.ts +15 -8
  480. package/src/api/base-frame.ts +5 -3
  481. package/src/api/caster.ts +7 -6
  482. package/src/api/code-converters.ts +23 -26
  483. package/src/api/config.ts +23 -17
  484. package/src/api/context.ts +18 -11
  485. package/src/api/decorators.ts +17 -18
  486. package/src/api/sonamu.ts +44 -49
  487. package/src/auth/auth-generator.ts +4 -6
  488. package/src/auth/better-auth-entities.ts +3 -2
  489. package/src/auth/knex-adapter.ts +6 -5
  490. package/src/auth/plugins/entity-definitions/admin.ts +1 -1
  491. package/src/auth/plugins/entity-definitions/anonymous.ts +1 -1
  492. package/src/auth/plugins/entity-definitions/api-key.ts +1 -1
  493. package/src/auth/plugins/entity-definitions/index.ts +1 -1
  494. package/src/auth/plugins/entity-definitions/jwt.ts +1 -1
  495. package/src/auth/plugins/entity-definitions/organization.ts +1 -1
  496. package/src/auth/plugins/entity-definitions/passkey.ts +1 -1
  497. package/src/auth/plugins/entity-definitions/phone-number.ts +1 -1
  498. package/src/auth/plugins/entity-definitions/sso.ts +1 -1
  499. package/src/auth/plugins/entity-definitions/two-factor.ts +1 -1
  500. package/src/auth/plugins/entity-definitions/types.ts +1 -1
  501. package/src/auth/plugins/entity-definitions/username.ts +1 -1
  502. package/src/auth/plugins/wrappers/admin.ts +3 -1
  503. package/src/auth/plugins/wrappers/anonymous.ts +3 -1
  504. package/src/auth/plugins/wrappers/api-key.ts +3 -1
  505. package/src/auth/plugins/wrappers/jwt.ts +3 -1
  506. package/src/auth/plugins/wrappers/organization.ts +3 -1
  507. package/src/auth/plugins/wrappers/passkey.ts +3 -1
  508. package/src/auth/plugins/wrappers/phone-number.ts +3 -1
  509. package/src/auth/plugins/wrappers/sso.ts +2 -1
  510. package/src/auth/plugins/wrappers/two-factor.ts +3 -1
  511. package/src/auth/plugins/wrappers/username.ts +3 -1
  512. package/src/bin/__tests__/ts-loader-register.test.ts +7 -12
  513. package/src/bin/build-config.ts +3 -3
  514. package/src/bin/cli.ts +27 -25
  515. package/src/bin/fixture.ts +4 -2
  516. package/src/bin/hmr-hook-register.ts +1 -0
  517. package/src/bin/test-command.ts +4 -2
  518. package/src/bin/ts-loader-registration.ts +6 -22
  519. package/src/cache/cache-manager.ts +2 -1
  520. package/src/cache/decorator.ts +2 -2
  521. package/src/cache/types.ts +3 -3
  522. package/src/cache-control/cache-control.ts +3 -2
  523. package/src/cache-control/types.ts +2 -2
  524. package/src/compress/compress.ts +1 -1
  525. package/src/cone/cone-generator.ts +5 -3
  526. package/src/database/_batch_update.ts +1 -1
  527. package/src/database/base-model.ts +20 -14
  528. package/src/database/base-model.types.ts +12 -11
  529. package/src/database/db.ts +56 -21
  530. package/src/database/knex.ts +2 -2
  531. package/src/database/puri-subset.test-d.ts +33 -32
  532. package/src/database/puri-subset.types.ts +6 -7
  533. package/src/database/puri-wrapper.ts +29 -26
  534. package/src/database/puri.ts +36 -34
  535. package/src/database/puri.types.test-d.ts +6 -5
  536. package/src/database/puri.types.ts +9 -12
  537. package/src/database/transaction-context.ts +2 -2
  538. package/src/database/upsert-builder.ts +17 -10
  539. package/src/dict/sd.ts +17 -4
  540. package/src/dict/sonamu-dictionary.ts +23 -17
  541. package/src/entity/entity-manager.ts +9 -7
  542. package/src/entity/entity-template-cone.ts +10 -3
  543. package/src/entity/entity.ts +20 -16
  544. package/src/exceptions/error-handler.ts +2 -1
  545. package/src/exceptions/so-exceptions.ts +1 -1
  546. package/src/filter/utils.ts +3 -2
  547. package/src/logger/category.ts +1 -0
  548. package/src/logger/configure.ts +5 -5
  549. package/src/migration/__tests__/code-generation.search-text.test.ts +2 -3
  550. package/src/migration/code-generation.ts +26 -25
  551. package/src/migration/migration-set.ts +16 -18
  552. package/src/migration/migrator.ts +38 -33
  553. package/src/migration/postgresql-schema-reader.ts +12 -12
  554. package/src/migration/slack-confirm.ts +5 -4
  555. package/src/migration/types.ts +2 -2
  556. package/src/naite/messaging-types.ts +1 -1
  557. package/src/naite/naite-reporter.ts +5 -3
  558. package/src/naite/naite.ts +12 -7
  559. package/src/shared/app.shared.ts.txt +2 -2
  560. package/src/shared/web.shared.ts.txt +2 -2
  561. package/src/skills/AGENTS.md +19 -18
  562. package/src/skills/commands/sonamu-skills.md +9 -9
  563. package/src/skills/sonamu/SKILL.md +111 -104
  564. package/src/skills/sonamu/ai-agents.md +27 -26
  565. package/src/skills/sonamu/api.md +81 -69
  566. package/src/skills/sonamu/auth-migration.md +13 -27
  567. package/src/skills/sonamu/auth-plugins.md +41 -31
  568. package/src/skills/sonamu/auth.md +30 -24
  569. package/src/skills/sonamu/cdd.md +26 -17
  570. package/src/skills/sonamu/cone.md +50 -50
  571. package/src/skills/sonamu/config.md +74 -51
  572. package/src/skills/sonamu/create-sonamu.md +31 -19
  573. package/src/skills/sonamu/database.md +43 -26
  574. package/src/skills/sonamu/entity-basic.md +61 -61
  575. package/src/skills/sonamu/entity-relations.md +84 -80
  576. package/src/skills/sonamu/entity-validation-checklist.md +19 -15
  577. package/src/skills/sonamu/fixture-cli.md +52 -30
  578. package/src/skills/sonamu/framework-change.md +9 -7
  579. package/src/skills/sonamu/frontend.md +64 -82
  580. package/src/skills/sonamu/i18n.md +45 -37
  581. package/src/skills/sonamu/migration.md +54 -31
  582. package/src/skills/sonamu/model.md +98 -66
  583. package/src/skills/sonamu/naite.md +34 -32
  584. package/src/skills/sonamu/project-init.md +28 -8
  585. package/src/skills/sonamu/puri.md +82 -91
  586. package/src/skills/sonamu/scaffolding.md +44 -32
  587. package/src/skills/sonamu/skill-contribution.md +50 -45
  588. package/src/skills/sonamu/subset.md +13 -13
  589. package/src/skills/sonamu/tasks.md +73 -58
  590. package/src/skills/sonamu/testing-devrunner.md +56 -36
  591. package/src/skills/sonamu/testing.md +23 -58
  592. package/src/skills/sonamu/upsert.md +32 -31
  593. package/src/skills/sonamu/vector.md +37 -36
  594. package/src/ssr/index.ts +2 -12
  595. package/src/ssr/registry.ts +1 -1
  596. package/src/ssr/renderer.ts +7 -5
  597. package/src/ssr/types.ts +2 -2
  598. package/src/storage/buffered-file.ts +4 -2
  599. package/src/storage/drivers.ts +3 -2
  600. package/src/storage/s3-driver.ts +7 -4
  601. package/src/storage/storage-manager.ts +3 -2
  602. package/src/storage/types.ts +3 -2
  603. package/src/storage/uploaded-file.ts +1 -1
  604. package/src/stream/sse.ts +2 -2
  605. package/src/syncer/api-parser.ts +8 -5
  606. package/src/syncer/checksum.ts +9 -5
  607. package/src/syncer/code-generator.ts +16 -8
  608. package/src/syncer/entity-operations.ts +5 -3
  609. package/src/syncer/file-patterns.ts +2 -1
  610. package/src/syncer/module-loader.ts +9 -6
  611. package/src/syncer/syncer-actions.ts +5 -3
  612. package/src/syncer/syncer.ts +18 -24
  613. package/src/tasks/decorator.ts +10 -8
  614. package/src/tasks/step-wrapper.ts +1 -1
  615. package/src/tasks/workflow-manager.ts +18 -15
  616. package/src/template/__tests__/generated.template.search-text.test.ts +1 -0
  617. package/src/template/entity-converter.ts +4 -2
  618. package/src/template/generated.template.test-d.ts +2 -1
  619. package/src/template/helpers.ts +5 -2
  620. package/src/template/implementations/entity.template.ts +9 -8
  621. package/src/template/implementations/entry-server.template.ts +1 -1
  622. package/src/template/implementations/generated.template.ts +21 -29
  623. package/src/template/implementations/generated_http.template.ts +9 -6
  624. package/src/template/implementations/generated_sso.template.ts +6 -4
  625. package/src/template/implementations/init_types.template.ts +3 -2
  626. package/src/template/implementations/model.template.ts +4 -2
  627. package/src/template/implementations/model_test.template.ts +3 -2
  628. package/src/template/implementations/queries.template.ts +6 -14
  629. package/src/template/implementations/sd.template.ts +4 -2
  630. package/src/template/implementations/services.template.ts +7 -11
  631. package/src/template/implementations/view_form.template.ts +5 -3
  632. package/src/template/implementations/view_id_all_select.template.ts +3 -2
  633. package/src/template/implementations/view_list.template.ts +7 -5
  634. package/src/template/implementations/view_search_input.template.ts +3 -2
  635. package/src/template/template-manager.ts +4 -3
  636. package/src/template/template.ts +4 -3
  637. package/src/template/zod-converter.ts +10 -7
  638. package/src/testing/__tests__/dev-test-routes.test.ts +3 -2
  639. package/src/testing/__tests__/dev-vitest-manager.test.ts +1 -0
  640. package/src/testing/_relation-graph.ts +2 -2
  641. package/src/testing/bootstrap.ts +55 -27
  642. package/src/testing/data-explorer.ts +5 -4
  643. package/src/testing/dev-test-routes.ts +8 -5
  644. package/src/testing/dev-vitest-manager.ts +13 -12
  645. package/src/testing/fixture-generator.ts +11 -17
  646. package/src/testing/fixture-manager.ts +21 -17
  647. package/src/testing/parallel-db-manager.ts +2 -1
  648. package/src/testing/vitest-helpers.ts +2 -1
  649. package/src/types/__tests__/entity-json-schema-search-text.test.ts +1 -0
  650. package/src/types/types.ts +8 -8
  651. package/src/typings/knex.d.ts +4 -4
  652. package/src/ui/ai-api.ts +5 -3
  653. package/src/ui/ai-client.ts +6 -5
  654. package/src/ui/api.ts +25 -23
  655. package/src/ui/cdd-service.ts +12 -11
  656. package/src/utils/console-util.ts +3 -1
  657. package/src/utils/formatter.ts +94 -102
  658. package/src/utils/fs-utils.ts +2 -1
  659. package/src/utils/model.ts +2 -2
  660. package/src/utils/object-utils.ts +3 -3
  661. package/src/utils/process-utils.ts +2 -1
  662. package/src/utils/sql-parser.ts +10 -1
  663. package/src/utils/type-utils.ts +3 -3
  664. package/src/utils/utils.ts +9 -7
  665. package/src/utils/zod-error.ts +1 -1
  666. package/src/vector/chunking.ts +1 -1
  667. package/src/vector/config.ts +1 -1
  668. package/src/vector/embedding.ts +11 -9
  669. package/tsdown.api.config.ts +50 -0
  670. package/.swcrc.project-default +0 -18
  671. package/dist/api/__tests__/config.test.js +0 -189
  672. package/dist/bin/__tests__/test-command.test.js +0 -112
  673. package/dist/bin/__tests__/ts-loader-register.test.js +0 -45
  674. package/dist/database/puri-subset.test-d.js +0 -89
  675. package/dist/database/puri.types.test-d.js +0 -129
  676. package/dist/migration/__tests__/code-generation.search-text.test.js +0 -435
  677. package/dist/template/__tests__/generated.template.search-text.test.js +0 -99
  678. package/dist/template/generated.template.test-d.js +0 -24
  679. package/dist/testing/__tests__/dev-test-routes.test.js +0 -144
  680. package/dist/testing/__tests__/dev-vitest-manager.test.js +0 -152
  681. package/dist/types/__tests__/entity-json-schema-search-text.test.js +0 -256
  682. package/dist/typings/knex.d.js +0 -3
  683. package/dist/ui-web/assets/index-CKo0Z2Iu.css +0 -1
  684. package/dist/ui-web/assets/index-DK-2aacv.js +0 -257
@@ -6,6 +6,7 @@ description: Writing Sonamu Model classes. BaseModelClass inheritance, CRUD meth
6
6
  # Model Class
7
7
 
8
8
  **Reference working code:**
9
+
9
10
  - `sonamu/examples/miomock/api/src/application/project/project.model.ts` - ManyToMany save implementation
10
11
  - `sonamu/examples/miomock/api/src/application/employee/employee.model.ts` - basic CRUD pattern
11
12
  - `sonamu/examples/miomock/api/src/application/project/project.model.test.ts` - test examples
@@ -36,12 +37,12 @@ export const UserModel = new UserModelClass();
36
37
 
37
38
  Sonamu Model provides the following basic methods:
38
39
 
39
- | Method | Purpose | Notes |
40
- |--------|------|------|
41
- | `findById` | Retrieve single record | |
42
- | `findMany` | Retrieve list | |
43
- | `save` | Create/update | upsert behavior |
44
- | `del` | Delete | Note: not `delete` |
40
+ | Method | Purpose | Notes |
41
+ | ---------- | ---------------------- | ------------------ |
42
+ | `findById` | Retrieve single record | |
43
+ | `findMany` | Retrieve list | |
44
+ | `save` | Create/update | upsert behavior |
45
+ | `del` | Delete | Note: not `delete` |
45
46
 
46
47
  **Avoiding JavaScript reserved words:** `delete` is a JS reserved word, so it is named `del`. While TypeScript allows `delete` as a method name without a compile error, it can cause runtime issues, so Sonamu uses `del`.
47
48
 
@@ -103,13 +104,13 @@ async del(ids: number[]): Promise<number> {
103
104
 
104
105
  ## BaseModel Methods
105
106
 
106
- | Method | Description |
107
- |--------|------|
108
- | `getPuri("r")` | Read query builder |
109
- | `getPuri("w")` | Write query builder |
110
- | `getSubsetQueries(subset)` | Subset query builder (returns `{ qb, onSubset }`) |
111
- | `executeSubsetQuery(options)` | Execute subset query |
112
- | `createEnhancers(enhancers)` | Enhancer object creation helper (type inference) |
107
+ | Method | Description |
108
+ | ----------------------------- | ------------------------------------------------- |
109
+ | `getPuri("r")` | Read query builder |
110
+ | `getPuri("w")` | Write query builder |
111
+ | `getSubsetQueries(subset)` | Subset query builder (returns `{ qb, onSubset }`) |
112
+ | `executeSubsetQuery(options)` | Execute subset query |
113
+ | `createEnhancers(enhancers)` | Enhancer object creation helper (type inference) |
113
114
 
114
115
  ## getSubsetQueries
115
116
 
@@ -120,19 +121,19 @@ const { qb, onSubset } = this.getSubsetQueries(subset);
120
121
  qb.where("users.status", "active");
121
122
 
122
123
  // onSubset: when you need the type for a specific subset
123
- const typedQb = onSubset("A"); // infers as subset A's type
124
+ const typedQb = onSubset("A"); // infers as subset A's type
124
125
  ```
125
126
 
126
127
  ## executeSubsetQuery Options
127
128
 
128
129
  ```typescript
129
130
  return this.executeSubsetQuery({
130
- subset, // subset key
131
- qb, // query builder
132
- params, // ListParams (num, page, queryMode, sonamuFilter, etc.)
133
- debug: true, // print query log (default: false)
134
- optimizeCountQuery: true, // COUNT query optimization - removes unnecessary LEFT JOINs (default: false)
135
- enhancers, // Enhancer function object (optional)
131
+ subset, // subset key
132
+ qb, // query builder
133
+ params, // ListParams (num, page, queryMode, sonamuFilter, etc.)
134
+ debug: true, // print query log (default: false)
135
+ optimizeCountQuery: true, // COUNT query optimization - removes unnecessary LEFT JOINs (default: false)
136
+ enhancers, // Enhancer function object (optional)
136
137
  });
137
138
  ```
138
139
 
@@ -183,11 +184,11 @@ const params = {
183
184
  num: 10,
184
185
  page: 1,
185
186
  sonamuFilter: {
186
- status: "active", // eq (default)
187
- age: { gte: 18 }, // >=
187
+ status: "active", // eq (default)
188
+ age: { gte: 18 }, // >=
188
189
  role: { in: ["admin", "user"] },
189
- email: { contains: "@test" }, // LIKE %...%
190
- }
190
+ email: { contains: "@test" }, // LIKE %...%
191
+ },
191
192
  };
192
193
 
193
194
  // Automatically applied in the Model
@@ -196,31 +197,31 @@ return this.executeSubsetQuery({ subset, qb, params });
196
197
 
197
198
  **Allowed operators by type:**
198
199
 
199
- | Type | Operators |
200
- |------|--------|
201
- | `string` | eq, ne, contains, startsWith, endsWith, in, notIn, isNull, isNotNull |
202
- | `integer` | eq, ne, gt, gte, lt, lte, in, notIn, between, isNull, isNotNull |
203
- | `numeric` | eq, ne, gt, gte, lt, lte, in, notIn, between, isNull, isNotNull |
204
- | `boolean` | eq, ne, isNull, isNotNull |
205
- | `date`/`datetime` | eq, ne, before, after, between, isNull, isNotNull |
206
- | `enum` | eq, ne, in, notIn, isNull, isNotNull |
207
- | `json` | isNull, isNotNull |
200
+ | Type | Operators |
201
+ | ----------------- | -------------------------------------------------------------------- |
202
+ | `string` | eq, ne, contains, startsWith, endsWith, in, notIn, isNull, isNotNull |
203
+ | `integer` | eq, ne, gt, gte, lt, lte, in, notIn, between, isNull, isNotNull |
204
+ | `numeric` | eq, ne, gt, gte, lt, lte, in, notIn, between, isNull, isNotNull |
205
+ | `boolean` | eq, ne, isNull, isNotNull |
206
+ | `date`/`datetime` | eq, ne, before, after, between, isNull, isNotNull |
207
+ | `enum` | eq, ne, in, notIn, isNull, isNotNull |
208
+ | `json` | isNull, isNotNull |
208
209
 
209
210
  **Operator examples:**
210
211
 
211
- | Operator | SQL | Example |
212
- |--------|-----|------|
213
- | `eq` (default) | `=` | `{ status: "active" }` |
214
- | `ne` | `!=` | `{ status: { ne: "deleted" } }` |
215
- | `gt`, `gte` | `>`, `>=` | `{ age: { gte: 18 } }` |
216
- | `lt`, `lte` | `<`, `<=` | `{ price: { lte: 1000 } }` |
217
- | `in`, `notIn` | `IN`, `NOT IN` | `{ role: { in: ["a", "b"] } }` |
218
- | `contains` | `LIKE %...%` | `{ name: { contains: "kim" } }` |
219
- | `startsWith` | `LIKE ...%` | `{ code: { startsWith: "A" } }` |
220
- | `endsWith` | `LIKE %...` | `{ ext: { endsWith: ".pdf" } }` |
221
- | `isNull`, `isNotNull` | `IS NULL` | `{ deleted_at: { isNull: true } }` |
222
- | `before`, `after` | `<`, `>` (date) | `{ created_at: { after: "2024-01-01" } }` |
223
- | `between` | `BETWEEN` | `{ price: { between: [100, 500] } }` |
212
+ | Operator | SQL | Example |
213
+ | --------------------- | --------------- | ----------------------------------------- |
214
+ | `eq` (default) | `=` | `{ status: "active" }` |
215
+ | `ne` | `!=` | `{ status: { ne: "deleted" } }` |
216
+ | `gt`, `gte` | `>`, `>=` | `{ age: { gte: 18 } }` |
217
+ | `lt`, `lte` | `<`, `<=` | `{ price: { lte: 1000 } }` |
218
+ | `in`, `notIn` | `IN`, `NOT IN` | `{ role: { in: ["a", "b"] } }` |
219
+ | `contains` | `LIKE %...%` | `{ name: { contains: "kim" } }` |
220
+ | `startsWith` | `LIKE ...%` | `{ code: { startsWith: "A" } }` |
221
+ | `endsWith` | `LIKE %...` | `{ ext: { endsWith: ".pdf" } }` |
222
+ | `isNull`, `isNotNull` | `IS NULL` | `{ deleted_at: { isNull: true } }` |
223
+ | `before`, `after` | `<`, `>` (date) | `{ created_at: { after: "2024-01-01" } }` |
224
+ | `between` | `BETWEEN` | `{ price: { between: [100, 500] } }` |
224
225
 
225
226
  **Type definition (`ApplySonamuFilter`):**
226
227
 
@@ -232,9 +233,9 @@ type ProjectListParams = {
232
233
  num: number;
233
234
  page: number;
234
235
  sonamuFilter?: ApplySonamuFilter<
235
- ProjectSubsetA, // entity type
236
- "id" | "created_at", // fields to exclude (TOmitKeys)
237
- "budget" // fields to treat as numeric (TNumericKeys)
236
+ ProjectSubsetA, // entity type
237
+ "id" | "created_at", // fields to exclude (TOmitKeys)
238
+ "budget" // fields to treat as numeric (TNumericKeys)
238
239
  >;
239
240
  };
240
241
  ```
@@ -265,7 +266,12 @@ return this.executeSubsetQuery({ subset, qb, params, enhancers });
265
266
  ```typescript
266
267
  // user.types.ts
267
268
  import { z } from "zod";
268
- import { UserOrderBy, UserSearchField, UserBaseSchema, UserBaseListParams } from "../sonamu.generated";
269
+ import {
270
+ UserOrderBy,
271
+ UserSearchField,
272
+ UserBaseSchema,
273
+ UserBaseListParams,
274
+ } from "../sonamu.generated";
269
275
 
270
276
  export const UserListParams = UserBaseListParams;
271
277
  export type UserListParams = z.infer<typeof UserListParams>;
@@ -281,6 +287,7 @@ export type UserSaveParams = z.infer<typeof UserSaveParams>;
281
287
  ### SaveParams Patterns
282
288
 
283
289
  **Basic pattern (no relations):**
290
+
284
291
  ```typescript
285
292
  import { UserBaseSchema, UserBaseListParams } from "../sonamu.generated";
286
293
 
@@ -295,6 +302,7 @@ export type UserSaveParams = z.infer<typeof UserSaveParams>;
295
302
  ```
296
303
 
297
304
  **If a ManyToMany relation exists:**
305
+
298
306
  ```typescript
299
307
  // ManyToMany relation: add {relation_name}_ids array
300
308
  export const ProjectSaveParams = ProjectBaseSchema.partial({
@@ -313,23 +321,26 @@ export type ProjectSaveParams = z.infer<typeof ProjectSaveParams>;
313
321
  ```
314
322
 
315
323
  **Handling nullable fields in BelongsToOne relations:**
324
+
316
325
  ```typescript
317
326
  // Nullable relations are automatically optional, so no extra partial is needed
318
327
  export const ResponseSaveParams = ResponseBaseSchema.partial({
319
328
  id: true,
320
329
  created_at: true,
321
- updated_at: true, // also make timestamp fields partial
330
+ updated_at: true, // also make timestamp fields partial
322
331
  });
323
332
  export type ResponseSaveParams = z.infer<typeof ResponseSaveParams>;
324
333
  ```
325
334
 
326
335
  **Reference working code:**
336
+
327
337
  - `sonamu/examples/miomock/api/src/application/project/project.types.ts` - ManyToMany SaveParams example
328
338
  - `sonamu/examples/miomock/api/src/application/employee/employee.types.ts` - BelongsToOne SaveParams example
329
339
 
330
340
  ### Handling Relations in the Model
331
341
 
332
342
  **Removing relation objects on update:**
343
+
333
344
  ```typescript
334
345
  // Pattern used in tests for updates
335
346
  const original = await UserModel.findById("A", userId);
@@ -340,13 +351,14 @@ const { institution, ...userData } = original;
340
351
  await UserModel.save([
341
352
  {
342
353
  ...userData,
343
- institution_id: institution?.id ?? null, // explicitly add FK
354
+ institution_id: institution?.id ?? null, // explicitly add FK
344
355
  name: "Updated Name",
345
356
  },
346
357
  ]);
347
358
  ```
348
359
 
349
360
  **ManyToMany save:**
361
+
350
362
  ```typescript
351
363
  // ManyToMany is passed as an _ids array
352
364
  await ProjectModel.save([
@@ -360,6 +372,7 @@ await ProjectModel.save([
360
372
  ```
361
373
 
362
374
  **Reference working code:**
375
+
363
376
  - `sonamu/examples/miomock/api/src/application/project/project.model.ts` - ManyToMany save implementation
364
377
  - `sonamu/examples/miomock/api/src/application/project/project.model.test.ts` - Save test example
365
378
 
@@ -385,19 +398,19 @@ async enroll(courseId: number, userId: number): Promise<Enrollment> {
385
398
  course_id: courseId,
386
399
  user_id: userId,
387
400
  });
388
-
401
+
389
402
  if (existing) {
390
403
  throw new Error("Already enrolled in this course");
391
404
  }
392
-
405
+
393
406
  // Step 2: Capacity check
394
407
  const course = await CourseModel.findById("A", courseId);
395
408
  const { total } = await this.findMany({ course_id: courseId });
396
-
409
+
397
410
  if (total >= course.max_students) {
398
411
  throw new Error("The course is full");
399
412
  }
400
-
413
+
401
414
  // Step 3: Execute
402
415
  const [id] = await this.save([{ course_id: courseId, user_id: userId }]);
403
416
  return this.findById("A", id);
@@ -415,17 +428,17 @@ async save(spa: TaskSaveParams[]): Promise<number[]> {
415
428
  if (sp.status === "completed" && !sp.completed_at) {
416
429
  throw new Error("A completion date is required for completed status");
417
430
  }
418
-
431
+
419
432
  // Check amount range only when budget is present
420
433
  if (sp.budget !== null && sp.budget < 0) {
421
434
  throw new Error("Budget must be 0 or greater");
422
435
  }
423
436
  }
424
-
437
+
425
438
  // Save after validation passes
426
439
  const wdb = this.getPuri("w");
427
440
  spa.forEach((sp) => wdb.ubRegister("tasks", sp));
428
-
441
+
429
442
  return wdb.transaction(async (trx) => {
430
443
  return trx.ubUpsert("tasks");
431
444
  });
@@ -441,22 +454,22 @@ async save(spa: ResponseSaveParams[]): Promise<number[]> {
441
454
  for (const sp of spa) {
442
455
  // Check if the survey is still open
443
456
  const collection = await CollectionModel.findById("A", sp.collection_id);
444
-
457
+
445
458
  if (collection.status === "closed") {
446
459
  throw new Error("This survey has already ended");
447
460
  }
448
-
461
+
449
462
  // Check response period
450
463
  const now = new Date();
451
464
  if (now < collection.begin_date || now > collection.end_date) {
452
465
  throw new Error("This is not within the response period");
453
466
  }
454
467
  }
455
-
468
+
456
469
  // Save after validation passes
457
470
  const wdb = this.getPuri("w");
458
471
  spa.forEach((sp) => wdb.ubRegister("responses", sp));
459
-
472
+
460
473
  return wdb.transaction(async (trx) => {
461
474
  return trx.ubUpsert("responses");
462
475
  });
@@ -464,6 +477,7 @@ async save(spa: ResponseSaveParams[]): Promise<number[]> {
464
477
  ```
465
478
 
466
479
  **Key points:**
480
+
467
481
  - Clear error messages when validation fails
468
482
  - Only save after all validations pass
469
483
  - Enforce business rules through code
@@ -517,6 +531,7 @@ if (params.orderBy) {
517
531
  Use `this.modelName` instead of hardcoding the model name in error messages.
518
532
 
519
533
  **BAD: hardcoded model name**
534
+
520
535
  ```typescript
521
536
  // department.model.ts
522
537
  if (!rows[0]) {
@@ -530,6 +545,7 @@ if (!rows[0]) {
530
545
  ```
531
546
 
532
547
  **GOOD: use this.modelName**
548
+
533
549
  ```typescript
534
550
  // Common to all Models
535
551
  if (!rows[0]) {
@@ -538,6 +554,7 @@ if (!rows[0]) {
538
554
  ```
539
555
 
540
556
  **Benefits:**
557
+
541
558
  - Prevents copy-paste mistakes: no need to update the model name when copying from another model
542
559
  - Consistency: all models use the same pattern
543
560
  - Maintainability: changing modelName in the constructor automatically reflects in all error messages
@@ -547,6 +564,7 @@ if (!rows[0]) {
547
564
  Use the same i18n keys consistently for the same purpose across the entire project.
548
565
 
549
566
  **BAD: duplicate i18n keys**
567
+
550
568
  ```typescript
551
569
  // Different keys used across models
552
570
  throw new NotFoundException(SD("error.entityNotFound")(this.modelName, id));
@@ -559,6 +577,7 @@ throw new BadRequestException(SD("error.invalidSearchField")(params.search));
559
577
  ```
560
578
 
561
579
  **GOOD: use standard i18n keys**
580
+
562
581
  ```typescript
563
582
  // Entity lookup failure - short and clear
564
583
  throw new NotFoundException(SD("notFound")(this.modelName, id));
@@ -581,18 +600,21 @@ throw new BadRequestException(SD("search.invalidField")(params.search));
581
600
  When consistently modifying multiple model files, use sed for automation:
582
601
 
583
602
  **Step 1: Confirm pattern**
603
+
584
604
  ```bash
585
605
  # Find files to modify
586
606
  grep -r 'SD("error.entityNotFound")' packages/api/src/application/*/
587
607
  ```
588
608
 
589
609
  **Step 2: Validate changes (dry-run)**
610
+
590
611
  ```bash
591
612
  # Preview changes before applying
592
613
  sed -n 's/SD("error.entityNotFound")(\(.*\), id)/SD("notFound")(this.modelName, id)/p' file.ts
593
614
  ```
594
615
 
595
616
  **Step 3: Apply in bulk**
617
+
596
618
  ```bash
597
619
  # Modify all model files
598
620
  find packages/api/src/application -name "*.model.ts" -exec sed -i '' \
@@ -600,6 +622,7 @@ find packages/api/src/application -name "*.model.ts" -exec sed -i '' \
600
622
  ```
601
623
 
602
624
  **Step 4: Validate with build**
625
+
603
626
  ```bash
604
627
  # TypeScript type check
605
628
  pnpm typecheck
@@ -609,6 +632,7 @@ pnpm build
609
632
  ```
610
633
 
611
634
  **Cautions:**
635
+
612
636
  - Always run after a git commit (to allow rollback)
613
637
  - Confirm changes with dry-run first
614
638
  - Check for type errors with build
@@ -624,7 +648,7 @@ const params = {
624
648
  num: 24,
625
649
  page: 1,
626
650
  search: "id" as const,
627
- orderBy: "wrong-value" as const, // error not detected
651
+ orderBy: "wrong-value" as const, // error not detected
628
652
  ...rawParams,
629
653
  } as RoleListParams;
630
654
 
@@ -633,12 +657,13 @@ const params = {
633
657
  num: 24,
634
658
  page: 1,
635
659
  search: "id" as const,
636
- orderBy: "wrong-value" as const, // compile error!
660
+ orderBy: "wrong-value" as const, // compile error!
637
661
  ...rawParams,
638
662
  } satisfies RoleListParams;
639
663
  ```
640
664
 
641
665
  **Recommended usage locations:**
666
+
642
667
  - Default values for params in findMany
643
668
  - Complex object literals (where type checking is important)
644
669
 
@@ -651,6 +676,7 @@ The following three must always remain consistent. If any one is out of sync, th
651
676
  3. Filter/search handling code in `findMany` in `model.ts`
652
677
 
653
678
  **Checklist:**
679
+
654
680
  - [ ] Are all values declared in SearchField implemented in findMany?
655
681
  - [ ] If any filter branch is commented out, either remove it or implement it
656
682
  - [ ] Are "filter by ~", "search by ~" features from requirements reflected in ListParams?
@@ -673,6 +699,7 @@ if (params.submitter_id) qb.where("achievements.submitter_id", params.submitter_
673
699
  ```
674
700
 
675
701
  **DO NOT - declaration/implementation mismatch:**
702
+
676
703
  ```typescript
677
704
  // SearchField "title" declared in entity.json
678
705
  // model.ts only handles "id" case, "title" is commented out
@@ -686,17 +713,19 @@ if (params.search === "id") {
686
713
  ### Code Review Checklist
687
714
 
688
715
  When writing a new Model:
716
+
689
717
  - [ ] Use `this.modelName` (no hardcoding)
690
718
  - [ ] Use standard i18n keys (`notFound`, `search.invalidField`)
691
719
  - [ ] Use the `satisfies` keyword (type safety)
692
720
  - [ ] Do not unnecessarily specify the debug option
693
721
  - [ ] Exhaustively handle all orderBy cases
694
- - [ ] If a ManyToMany relation exists, add _ids array to SaveParams
722
+ - [ ] If a ManyToMany relation exists, add \_ids array to SaveParams
695
723
  - [ ] Does the `@upload` method have `@api` on it? (`@upload` is used standalone; using both together causes a build error)
696
724
  - [ ] Do the SearchField enum and findMany implementation match?
697
725
  - [ ] For entities with approval workflows, are status/type filters present in both ListParams and findMany?
698
726
 
699
727
  When bulk-modifying 20+ Models:
728
+
700
729
  - [ ] Compare patterns with reference code like miomock
701
730
  - [ ] Prioritize inconsistent patterns
702
731
  - [ ] Write an automation script using sed or similar
@@ -711,12 +740,14 @@ When bulk-modifying 20+ Models:
711
740
  The `any` type neutralizes TypeScript's type safety and must **never be used**.
712
741
 
713
742
  **BAD: using any**
743
+
714
744
  ```typescript
715
745
  const { category_ids, ...data } = sp as any;
716
746
  function process(input: any) { ... }
717
747
  ```
718
748
 
719
749
  **GOOD: use precise types or unknown**
750
+
720
751
  ```typescript
721
752
  // Destructure with a precise type
722
753
  const { category_ids, ...data } = sp as QuestionCollectionSaveParams;
@@ -728,6 +759,7 @@ function process(input: unknown) {
728
759
  ```
729
760
 
730
761
  **Rules:**
762
+
731
763
  - `any` is prohibited
732
764
  - When the type is unknown, use `unknown` and narrow with a type guard
733
765
  - When a type assertion is needed during destructuring, specify the exact type name (`as ConcreteType`)
@@ -10,6 +10,7 @@ Naite is a tracing system for recording values in source code and verifying them
10
10
  **Source code:** `modules/sonamu/src/naite/naite.ts`
11
11
 
12
12
  **How it works:**
13
+
13
14
  1. **Source code**: Record values with `Naite.t("key", value)`
14
15
  2. **Test code**: Retrieve recorded values with `Naite.get("key")`
15
16
 
@@ -49,19 +50,19 @@ expect(trace).toMatchObject({ tableName: "users", rowCount: 3 });
49
50
 
50
51
  ## Built-in Naite Keys (Sonamu)
51
52
 
52
- | Key | Description | Data |
53
- |-----|-------------|------|
54
- | `esq-query` | Executed SQL query | Query string |
55
- | `puri:executed-query` | Query executed by Puri | Query string |
56
- | `puri:ub-register` | UpsertBuilder register call | `{ tableName, uuid, isUuidReused, row }` |
57
- | `puri:ub-upserted` | UpsertBuilder upsert complete | `{ tableName, mode, rowCount, returnedIds }` |
58
- | `puri:ub-ref-resolved` | UBRef → actual ID substitution | `{ tableName, field, from, to }` |
59
- | `puri:ub-batch-updated` | updateBatch complete | `{ tableName, rowCount, whereColumns }` |
60
- | `puri:ub-clean-orphans` | cleanOrphans executed | `{ tableName, cleanOrphans, deletedCount }` |
61
- | `puri:ub-inherit` | inherit option applied | `{ tableName, inheritColumns, excludedFromUpdate }` |
62
- | `mock:fs/promises:virtualFileSystem` | Virtual file system path | File path string |
63
- | `fs/promises:writeFile` | writeFile call | `{ path, data }` |
64
- | `fs/promises:rm` | rm call | `{ path, options }` |
53
+ | Key | Description | Data |
54
+ | ------------------------------------ | ------------------------------ | --------------------------------------------------- |
55
+ | `esq-query` | Executed SQL query | Query string |
56
+ | `puri:executed-query` | Query executed by Puri | Query string |
57
+ | `puri:ub-register` | UpsertBuilder register call | `{ tableName, uuid, isUuidReused, row }` |
58
+ | `puri:ub-upserted` | UpsertBuilder upsert complete | `{ tableName, mode, rowCount, returnedIds }` |
59
+ | `puri:ub-ref-resolved` | UBRef → actual ID substitution | `{ tableName, field, from, to }` |
60
+ | `puri:ub-batch-updated` | updateBatch complete | `{ tableName, rowCount, whereColumns }` |
61
+ | `puri:ub-clean-orphans` | cleanOrphans executed | `{ tableName, cleanOrphans, deletedCount }` |
62
+ | `puri:ub-inherit` | inherit option applied | `{ tableName, inheritColumns, excludedFromUpdate }` |
63
+ | `mock:fs/promises:virtualFileSystem` | Virtual file system path | File path string |
64
+ | `fs/promises:writeFile` | writeFile call | `{ path, data }` |
65
+ | `fs/promises:rm` | rm call | `{ path, options }` |
65
66
 
66
67
  ---
67
68
 
@@ -81,15 +82,15 @@ Naite.t("mock:fs/promises:virtualFileSystem", "/path/to/virtual/file.ts");
81
82
 
82
83
  ```typescript
83
84
  // Basic retrieval
84
- Naite.get("key").first() // first entry
85
- Naite.get("key").last() // last entry
86
- Naite.get("key").at(2) // nth entry
87
- Naite.get("key").result() // all entries as an array
88
- Naite.get("key").getTraces() // raw trace array (includes call stack)
85
+ Naite.get("key").first(); // first entry
86
+ Naite.get("key").last(); // last entry
87
+ Naite.get("key").at(2); // nth entry
88
+ Naite.get("key").result(); // all entries as an array
89
+ Naite.get("key").getTraces(); // raw trace array (includes call stack)
89
90
 
90
91
  // Wildcard patterns
91
- Naite.get("puri:*").result() // all with puri: prefix
92
- Naite.get("syncer:*:user").result() // syncer:XXX:user pattern
92
+ Naite.get("puri:*").result(); // all with puri: prefix
93
+ Naite.get("syncer:*:user").result(); // syncer:XXX:user pattern
93
94
  ```
94
95
 
95
96
  ---
@@ -99,29 +100,29 @@ Naite.get("syncer:*:user").result() // syncer:XXX:user pattern
99
100
  ```typescript
100
101
  // Filter by file name
101
102
  Naite.get("esq-query")
102
- .fromFile("user.model.ts") // only entries recorded from this file
103
+ .fromFile("user.model.ts") // only entries recorded from this file
103
104
  .result();
104
105
 
105
106
  // Filter by function name
106
107
  Naite.get("puri:executed-query")
107
- .fromFunction("findById") // only entries called from this function
108
+ .fromFunction("findById") // only entries called from this function
108
109
  .result();
109
110
 
110
111
  // fromFunction options
111
112
  Naite.get("key")
112
- .fromFunction("save", { from: "direct" }) // direct calls only (stack[0])
113
- .fromFunction("save", { from: "indirect" }) // indirect calls only (stack[1+])
114
- .fromFunction("save", { from: "both" }) // both (default)
113
+ .fromFunction("save", { from: "direct" }) // direct calls only (stack[0])
114
+ .fromFunction("save", { from: "indirect" }) // indirect calls only (stack[1+])
115
+ .fromFunction("save", { from: "both" }); // both (default)
115
116
 
116
117
  // Filter by data path (radash get path)
117
118
  Naite.get("puri:ub-register")
118
- .where("data.tableName", "=", "users") // only where tableName is "users"
119
- .where("data.rowCount", ">", 5) // rowCount > 5
119
+ .where("data.tableName", "=", "users") // only where tableName is "users"
120
+ .where("data.rowCount", ">", 5) // rowCount > 5
120
121
  .result();
121
122
 
122
123
  // where operators: ">", "<", ">=", "<=", "=", "!=", "includes"
123
124
  Naite.get("key")
124
- .where("data.query", "includes", "WHERE") // check if string includes substring
125
+ .where("data.query", "includes", "WHERE") // check if string includes substring
125
126
  .result();
126
127
 
127
128
  // Combining filters
@@ -167,7 +168,7 @@ test("trace UpsertBuilder register", async () => {
167
168
 
168
169
  test("trace upsert completion", async () => {
169
170
  // ... run upsert ...
170
-
171
+
171
172
  const trace = Naite.get("puri:ub-upserted").first();
172
173
  expect(trace).toMatchObject({
173
174
  tableName: "users",
@@ -189,6 +190,7 @@ sonamu test user.model -t
189
190
  ```
190
191
 
191
192
  Example output:
193
+
192
194
  ```
193
195
  Tests: 5 passed, 0 failed, 5 total
194
196
  Duration: 791ms
@@ -221,14 +223,14 @@ type NaiteStore = Map<string, NaiteTrace[]>;
221
223
  interface NaiteTrace {
222
224
  key: string;
223
225
  data: any;
224
- stack: StackFrame[]; // call stack information
226
+ stack: StackFrame[]; // call stack information
225
227
  at: Date;
226
228
  }
227
229
 
228
230
  interface StackFrame {
229
231
  functionName: string | null;
230
- filePath: string; // path relative to TS file
231
- lineNumber: number; // line number in TS file
232
+ filePath: string; // path relative to TS file
233
+ lineNumber: number; // line number in TS file
232
234
  }
233
235
  ```
234
236