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
@@ -45,6 +45,7 @@ export default defineConfig({
45
45
  ```
46
46
 
47
47
  Configuration type (`SonamuDevRunnerConfig`):
48
+
48
49
  - `enabled: boolean` — Whether to enable DevRunner (default: false)
49
50
  - `routePrefix?: string` — Test endpoint path prefix (default: `/__test__`)
50
51
  - `vitestConfigPath?: string` — vitest.config.ts path (relative to api-root)
@@ -82,6 +83,7 @@ sonamu test user.model -p "findMany" -t
82
83
  ```
83
84
 
84
85
  Argument processing rules:
86
+
85
87
  - `--pattern` / `-p`: test name string filter (`setGlobalTestNamePattern` → `resetGlobalTestNamePattern` after execution)
86
88
  - `--traces` / `-t`: boolean flag, enables Naite trace output
87
89
  - Arguments not starting with `-`: treated as file list
@@ -115,6 +117,7 @@ For trace data details: see `naite.md`
115
117
  ### HMR Integration — Automatic Vitest Module Graph Invalidation on Source Changes
116
118
 
117
119
  When a source file is modified, `syncFromWatcher` in the syncer triggers both of the following simultaneously:
120
+
118
121
  1. Server HMR cache invalidation (`hot.invalidateFile`)
119
122
  2. Vitest module graph invalidation (`Sonamu.devVitestManager.invalidateFiles([filePath])`)
120
123
 
@@ -127,6 +130,7 @@ sonamu test user.model ← runs with latest code
127
130
  Because Vite's `moduleGraph.invalidateModule()` recursively cascades in the importer direction, invalidating a single source file automatically invalidates any test files that import it. No restart is needed.
128
131
 
129
132
  **Transitive dependency example:**
133
+
130
134
  - Change `utils.ts` → `user.model.ts` (imports utils) → `user.model.test.ts` all automatically invalidated
131
135
 
132
136
  ### Direct HTTP API Calls
@@ -144,24 +148,36 @@ curl http://localhost:3000/__test__/status
144
148
  ```
145
149
 
146
150
  **POST `/__test__/run`** request:
151
+
147
152
  ```json
148
153
  { "files": ["src/user/user.model.test.ts"], "pattern": "should create user" }
149
154
  ```
150
155
 
151
156
  Response (success):
157
+
152
158
  ```json
153
159
  {
154
160
  "ok": true,
155
161
  "summary": { "total": 12, "passed": 11, "failed": 1, "skipped": 0, "durationMs": 842 },
156
162
  "failed": [
157
- { "file": "src/user/user.model.test.ts", "name": "UserModel > should create user", "error": "Expected ..." }
163
+ {
164
+ "file": "src/user/user.model.test.ts",
165
+ "name": "UserModel > should create user",
166
+ "error": "Expected ..."
167
+ }
158
168
  ],
159
169
  "traces": [
160
170
  {
161
171
  "testName": "UserModel > should create user",
162
172
  "file": "src/user/user.model.test.ts",
163
173
  "traces": [
164
- { "key": "esq-query", "value": "select ...", "filePath": "user.model.ts", "lineNumber": 113, "at": "2026-02-23T14:51:35+09:00" }
174
+ {
175
+ "key": "esq-query",
176
+ "value": "select ...",
177
+ "filePath": "user.model.ts",
178
+ "lineNumber": 113,
179
+ "at": "2026-02-23T14:51:35+09:00"
180
+ }
165
181
  ]
166
182
  }
167
183
  ]
@@ -169,6 +185,7 @@ Response (success):
169
185
  ```
170
186
 
171
187
  **GET `/__test__/status`** response:
188
+
172
189
  ```json
173
190
  { "ready": true, "running": false, "lastRunAt": "2026-02-13T12:34:56.000Z" }
174
191
  ```
@@ -176,6 +193,7 @@ Response (success):
176
193
  ### Internal Architecture
177
194
 
178
195
  **DevVitestManager** (`testing/dev-vitest-manager.ts`):
196
+
179
197
  - Creates a resident instance with `createVitest('test', cliOptions, viteOverrides)`
180
198
  - Configured with `watch: true, standalone: true`, but blocks automatic re-runs:
181
199
  - `forceRerunTriggers: []`
@@ -187,11 +205,13 @@ Response (success):
187
205
  - Keeps loading the project's `vitest.config.ts` (reuses existing sequencer/reporter/globalSetup)
188
206
 
189
207
  **Fastify integration** (`testing/dev-test-routes.ts`):
208
+
190
209
  - Registers routes with `registerDevTestRoutes(server, config)`
191
210
  - Stores manager instance in `Sonamu.devVitestManager`
192
211
  - Ensures `shutdown()` is called in `server.addHook('onClose')`
193
212
 
194
213
  **CLI** (`bin/test-command.ts`):
214
+
195
215
  - Calls `testCommand()` directly before `tsicli` matching (to handle variadic arguments)
196
216
  - Included in `bootstrap()`'s `notToInit` list (no need for `Sonamu.init` since it only makes HTTP calls)
197
217
  - Server port/host read from `server.listen` in `sonamu.config.ts`
@@ -200,30 +220,30 @@ Response (success):
200
220
 
201
221
  Single file (`user.model.test.ts`):
202
222
 
203
- | Item | `vitest run` | `sonamu test` | Difference |
204
- |---|---|---|---|
205
- | Test execution time | 2,610ms | 823ms | 3.2x faster |
206
- | Total elapsed time (wall clock) | 4,118ms | 1,907ms | 2.2x faster |
223
+ | Item | `vitest run` | `sonamu test` | Difference |
224
+ | ------------------------------- | ------------ | ------------- | ----------- |
225
+ | Test execution time | 2,610ms | 823ms | 3.2x faster |
226
+ | Total elapsed time (wall clock) | 4,118ms | 1,907ms | 2.2x faster |
207
227
 
208
228
  Multiple files (puri tests, 4 files 147 tests):
209
229
 
210
- | Item | `vitest run` | `sonamu test` | Difference |
211
- |---|---|---|---|
212
- | Test execution time | 5,740ms | 1,774ms | 3.2x faster |
213
- | Total elapsed time (wall clock) | 7,035ms | 2,673ms | 2.6x faster |
230
+ | Item | `vitest run` | `sonamu test` | Difference |
231
+ | ------------------------------- | ------------ | ------------- | ----------- |
232
+ | Test execution time | 5,740ms | 1,774ms | 3.2x faster |
233
+ | Total elapsed time (wall clock) | 7,035ms | 2,673ms | 2.6x faster |
214
234
 
215
235
  Speed difference reason: `vitest run` requires process boot (~1.5s) + module transform (~400ms) on every execution, whereas `sonamu test` reuses an already-initialized instance and avoids this overhead.
216
236
 
217
237
  ### `pnpm sonamu test` vs `pnpm test` Comparison
218
238
 
219
- | | `pnpm sonamu test` (default) | `pnpm test` (CI/fallback) |
220
- |---|---|---|
221
- | Execution method | Resident instance inside dev server | Independent Vitest process |
222
- | Initialization cost | None (already initialized) | Initialization on every run |
223
- | HMR integration | Source changes reflected immediately | Not applicable |
224
- | Naite trace | CLI output via `--traces` flag | Available through reporter |
225
- | Use case | **Default test execution during development** | CI environments |
226
- | Prerequisite | `sonamu dev` running (assumed always running) | None |
239
+ | | `pnpm sonamu test` (default) | `pnpm test` (CI/fallback) |
240
+ | ------------------- | --------------------------------------------- | --------------------------- |
241
+ | Execution method | Resident instance inside dev server | Independent Vitest process |
242
+ | Initialization cost | None (already initialized) | Initialization on every run |
243
+ | HMR integration | Source changes reflected immediately | Not applicable |
244
+ | Naite trace | CLI output via `--traces` flag | Available through reporter |
245
+ | Use case | **Default test execution during development** | CI environments |
246
+ | Prerequisite | `sonamu dev` running (assumed always running) | None |
227
247
 
228
248
  ### Troubleshooting
229
249
 
@@ -275,8 +295,8 @@ Both `pnpm sonamu test` and `pnpm test` share the parallel configuration. Only c
275
295
  ```typescript
276
296
  export default defineConfig({
277
297
  test: {
278
- parallel: true, // Separate DB execution per worker
279
- maxWorkers: 4, // Number of workers (default: 4)
298
+ parallel: true, // Separate DB execution per worker
299
+ maxWorkers: 4, // Number of workers (default: 4)
280
300
  },
281
301
  });
282
302
  ```
@@ -291,14 +311,14 @@ To use `pnpm sonamu test`, DevRunner must be enabled. Just add `test.devRunner.e
291
311
  export default defineConfig({
292
312
  server: {
293
313
  listen: {
294
- port: 3000, // CLI sends HTTP requests to this port
295
- host: "localhost", // CLI connects to this host (default: localhost)
314
+ port: 3000, // CLI sends HTTP requests to this port
315
+ host: "localhost", // CLI connects to this host (default: localhost)
296
316
  },
297
317
  },
298
318
 
299
319
  test: {
300
320
  devRunner: {
301
- enabled: true, // Required: enable DevRunner
321
+ enabled: true, // Required: enable DevRunner
302
322
  // routePrefix: "/__test__", // Optional: endpoint path (default value)
303
323
  // vitestConfigPath: undefined, // Optional: vitest.config.ts path (default: vitest.config.ts in api-root)
304
324
  },
@@ -310,16 +330,16 @@ export default defineConfig({
310
330
 
311
331
  ### Source Code Reference Locations per Setting
312
332
 
313
- | Setting path | Default | Reference location | Purpose |
314
- |---|---|---|---|
315
- | `test.devRunner.enabled` | `false` | `sonamu.ts` L394, `test-command.ts` | DevRunner activation condition |
316
- | `test.devRunner.routePrefix` | `"/__test__"` | `dev-test-routes.ts`, `test-command.ts` | HTTP endpoint path |
317
- | `test.devRunner.vitestConfigPath` | `undefined` | `dev-vitest-manager.ts` `start()` | Vitest config file location |
318
- | `test.parallel` | `false` | `vitest-helpers.ts` `getSonamuTestConfig()` | `pool: "forks"` + `SONAMU_WORKER_DB` env injection |
319
- | `test.maxWorkers` | `4` | `vitest-helpers.ts`, `global-setup.ts` | Vitest maxWorkers + number of worker DBs |
320
- | `server.listen.port` | `3000` | `test-command.ts` | CLI → dev server HTTP connection port |
321
- | `server.listen.host` | `"localhost"` | `test-command.ts` | CLI → dev server HTTP connection host |
322
- | `database.name` | — | `db.ts` `generateDBConfig()`, `global-setup.ts` | Test DB name (`{name}_test`) |
333
+ | Setting path | Default | Reference location | Purpose |
334
+ | --------------------------------- | ------------- | ----------------------------------------------- | -------------------------------------------------- |
335
+ | `test.devRunner.enabled` | `false` | `sonamu.ts` L394, `test-command.ts` | DevRunner activation condition |
336
+ | `test.devRunner.routePrefix` | `"/__test__"` | `dev-test-routes.ts`, `test-command.ts` | HTTP endpoint path |
337
+ | `test.devRunner.vitestConfigPath` | `undefined` | `dev-vitest-manager.ts` `start()` | Vitest config file location |
338
+ | `test.parallel` | `false` | `vitest-helpers.ts` `getSonamuTestConfig()` | `pool: "forks"` + `SONAMU_WORKER_DB` env injection |
339
+ | `test.maxWorkers` | `4` | `vitest-helpers.ts`, `global-setup.ts` | Vitest maxWorkers + number of worker DBs |
340
+ | `server.listen.port` | `3000` | `test-command.ts` | CLI → dev server HTTP connection port |
341
+ | `server.listen.host` | `"localhost"` | `test-command.ts` | CLI → dev server HTTP connection host |
342
+ | `database.name` | — | `db.ts` `generateDBConfig()`, `global-setup.ts` | Test DB name (`{name}_test`) |
323
343
 
324
344
  ### Activation Conditions
325
345
 
@@ -372,10 +392,10 @@ export { setup } from "sonamu/test";
372
392
  ```typescript
373
393
  export default defineConfig({
374
394
  test: {
375
- parallel: true, // Enable parallel testing
376
- maxWorkers: 4, // Number of workers (default: 4)
395
+ parallel: true, // Enable parallel testing
396
+ maxWorkers: 4, // Number of workers (default: 4)
377
397
  devRunner: {
378
- enabled: true, // Enable DevRunner
398
+ enabled: true, // Enable DevRunner
379
399
  },
380
400
  },
381
401
  });
@@ -35,9 +35,7 @@ import PostModel from "../post/post.model";
35
35
  import CommentModel from "../comment/comment.model";
36
36
 
37
37
  // User helper
38
- export async function createTestUser(
39
- params?: Partial<UserSaveParams>,
40
- ): Promise<number> {
38
+ export async function createTestUser(params?: Partial<UserSaveParams>): Promise<number> {
41
39
  const user: UserSaveParams = {
42
40
  email: `test-${Date.now()}@example.com`,
43
41
  name: "Test User",
@@ -598,11 +596,7 @@ export async function createTestConsultationWithDeps() {
598
596
  role: "counselor",
599
597
  });
600
598
  const damageTypeId = await createTestDamageType(null);
601
- const consultationId = await createTestConsultation(
602
- applicantId,
603
- counselorId,
604
- damageTypeId,
605
- );
599
+ const consultationId = await createTestConsultation(applicantId, counselorId, damageTypeId);
606
600
  return { applicantId, counselorId, damageTypeId, consultationId };
607
601
  }
608
602
  ```
@@ -625,8 +619,7 @@ This is what differentiates it from simple CRUD tests, and it's **the core that
625
619
  describe("E. Business Logic", () => {
626
620
  test("full process from consultation submission to completion", async () => {
627
621
  // 1. submit consultation + create dependencies
628
- const { consultationId, counselorId } =
629
- await createTestConsultationWithDeps();
622
+ const { consultationId, counselorId } = await createTestConsultationWithDeps();
630
623
  // 2. record channel logs (online submission, phone consultation)
631
624
  await createTestConsultationChannelLog(consultationId, {
632
625
  channel: "online",
@@ -785,12 +778,12 @@ const [id] = await FAQModel.save([
785
778
 
786
779
  #### Application Criteria
787
780
 
788
- | Field type | Handling |
781
+ | Field type | Handling |
789
782
  | -------------------------------- | ------------------------------- |
790
783
  | `id`, `created_at`, `updated_at` | Always partial (auto-generated) |
791
- | Fields with `dbDefault` | `.optional().default(value)` |
792
- | Fields with `nullable: true` | partial + extend + `.nullish()` |
793
- | Required fields | Excluded from partial |
784
+ | Fields with `dbDefault` | `.optional().default(value)` |
785
+ | Fields with `nullable: true` | partial + extend + `.nullish()` |
786
+ | Required fields | Excluded from partial |
794
787
 
795
788
  #### Checklist
796
789
 
@@ -872,12 +865,12 @@ expect(item?.field).toBe(expectedValue); // find() can return undefined
872
865
 
873
866
  Sonamu Model provides the following methods by default. Tests are written targeting these methods:
874
867
 
875
- | Method | Purpose | Returns |
876
- | -------------------------- | ------------------ | ----------------------------- |
877
- | `findById(subset, id)` | Fetch single record | `Promise<Subset>` |
878
- | `findMany(subset, params)` | Fetch list | `Promise<ListResult<Subset>>` |
879
- | `save(rows)` | Create/update (upsert) | `Promise<number[]>` (ids) |
880
- | `del(ids)` | Delete | `Promise<number>` (delete count) |
868
+ | Method | Purpose | Returns |
869
+ | -------------------------- | ---------------------- | -------------------------------- |
870
+ | `findById(subset, id)` | Fetch single record | `Promise<Subset>` |
871
+ | `findMany(subset, params)` | Fetch list | `Promise<ListResult<Subset>>` |
872
+ | `save(rows)` | Create/update (upsert) | `Promise<number[]>` (ids) |
873
+ | `del(ids)` | Delete | `Promise<number>` (delete count) |
881
874
 
882
875
  **Note:** It's `del`, not `delete`. This avoids JavaScript reserved words.
883
876
 
@@ -1231,9 +1224,7 @@ test("validate select query", async () => {
1231
1224
 
1232
1225
  expectQuery(query, "type").toBe("select");
1233
1226
  expectQuery(query, "table").toBe("users");
1234
- expectQuery(query, "columns").toMatchInlineSnapshot(
1235
- `""users"."id" AS \`id\`"`,
1236
- );
1227
+ expectQuery(query, "columns").toMatchInlineSnapshot(`""users"."id" AS \`id\`"`);
1237
1228
  });
1238
1229
 
1239
1230
  test("validate where condition", async () => {
@@ -1246,9 +1237,7 @@ test("validate where condition", async () => {
1246
1237
 
1247
1238
  test("validate join", async () => {
1248
1239
  const db = UserModel.getPuri("r");
1249
- await db
1250
- .table("employees")
1251
- .leftJoin("departments", "employees.department_id", "departments.id");
1240
+ await db.table("employees").leftJoin("departments", "employees.department_id", "departments.id");
1252
1241
  const query = Naite.get("puri:executed-query").first();
1253
1242
 
1254
1243
  expectQuery(query, "join").toMatchInlineSnapshot(
@@ -1427,9 +1416,7 @@ test("unresolved reference error", async () => {
1427
1416
  ub.register("departments", { company_id: companyRef, name: "Dept" });
1428
1417
 
1429
1418
  // attempt upsert in wrong order
1430
- await expect(ub.upsert(wdb, "departments")).rejects.toThrow(
1431
- /unresolved reference/,
1432
- );
1419
+ await expect(ub.upsert(wdb, "departments")).rejects.toThrow(/unresolved reference/);
1433
1420
  });
1434
1421
  ```
1435
1422
 
@@ -1572,10 +1559,7 @@ SaveParams types are exported from each entity's types.ts, not from sonamu.gener
1572
1559
 
1573
1560
  ```typescript
1574
1561
  // test-helpers.ts
1575
- import type {
1576
- UserSaveParams,
1577
- TaskSaveParams,
1578
- } from "../application/sonamu.generated"; // WRONG
1562
+ import type { UserSaveParams, TaskSaveParams } from "../application/sonamu.generated"; // WRONG
1579
1563
  ```
1580
1564
 
1581
1565
  **Correct:**
@@ -1870,9 +1854,7 @@ function uniqueId(prefix: string) {
1870
1854
  return `${prefix}_${Date.now()}_${++counter}`;
1871
1855
  }
1872
1856
 
1873
- export async function createTestInstitution(
1874
- override?: Partial<InstitutionSaveParams>,
1875
- ) {
1857
+ export async function createTestInstitution(override?: Partial<InstitutionSaveParams>) {
1876
1858
  const [id] = await InstitutionModel.save([
1877
1859
  {
1878
1860
  name: "Test Institution",
@@ -1903,10 +1885,7 @@ export async function createTestDepartment(
1903
1885
  return id;
1904
1886
  }
1905
1887
 
1906
- export async function createTestUser(
1907
- institutionId: number,
1908
- override?: Partial<UserSaveParams>,
1909
- ) {
1888
+ export async function createTestUser(institutionId: number, override?: Partial<UserSaveParams>) {
1910
1889
  const [id] = await UserModel.save([
1911
1890
  {
1912
1891
  employee_no: uniqueId("EMP"),
@@ -1940,18 +1919,14 @@ export async function createTestTask(
1940
1919
  }
1941
1920
 
1942
1921
  // create the entire dependency chain at once
1943
- export async function createTestTaskWithDeps(
1944
- taskOverride?: Partial<TaskSaveParams>,
1945
- ) {
1922
+ export async function createTestTaskWithDeps(taskOverride?: Partial<TaskSaveParams>) {
1946
1923
  const institutionId = await createTestInstitution();
1947
1924
  const userId = await createTestUser(institutionId);
1948
1925
  const taskId = await createTestTask(userId, taskOverride);
1949
1926
  return { institutionId, userId, taskId };
1950
1927
  }
1951
1928
 
1952
- export async function createTestUserWithDeps(
1953
- userOverride?: Partial<UserSaveParams>,
1954
- ) {
1929
+ export async function createTestUserWithDeps(userOverride?: Partial<UserSaveParams>) {
1955
1930
  const institutionId = await createTestInstitution();
1956
1931
  const userId = await createTestUser(institutionId, userOverride);
1957
1932
  return { institutionId, userId };
@@ -2005,14 +1980,7 @@ When modifying findById results and saving again, relations must be converted to
2005
1980
 
2006
1981
  // Task Subset A → SaveParams conversion
2007
1982
  export function taskToSaveParams(task: TaskSubsetA): TaskSaveParams {
2008
- const {
2009
- program,
2010
- project,
2011
- principal_investigator,
2012
- department,
2013
- prev_task,
2014
- ...rest
2015
- } = task;
1983
+ const { program, project, principal_investigator, department, prev_task, ...rest } = task;
2016
1984
 
2017
1985
  return {
2018
1986
  ...rest,
@@ -2047,10 +2015,7 @@ export function relationToFk<T extends Record<string, any>>(
2047
2015
  ### Simplifying Update Tests
2048
2016
 
2049
2017
  ```typescript
2050
- import {
2051
- createTestTaskWithDeps,
2052
- taskToSaveParams,
2053
- } from "../../testing/test-helpers";
2018
+ import { createTestTaskWithDeps, taskToSaveParams } from "../../testing/test-helpers";
2054
2019
 
2055
2020
  test("Update - update task info", async () => {
2056
2021
  const { taskId } = await createTestTaskWithDeps();
@@ -11,9 +11,9 @@ The reference object returned by `ubRegister()`:
11
11
 
12
12
  ```typescript
13
13
  type UBRef = {
14
- uuid: string; // unique identifier
15
- of: string; // table name
16
- use?: string; // field to reference (default: "id")
14
+ uuid: string; // unique identifier
15
+ of: string; // table name
16
+ use?: string; // field to reference (default: "id")
17
17
  };
18
18
  ```
19
19
 
@@ -30,8 +30,8 @@ wdb.ubRegister("employees", { user_id: userRef, department_id: deptId });
30
30
 
31
31
  // Save in order inside a transaction
32
32
  return wdb.transaction(async (trx) => {
33
- await trx.ubUpsert("users"); // Save first (referenced by FK)
34
- return trx.ubUpsert("employees"); // Save after (uses FK)
33
+ await trx.ubUpsert("users"); // Save first (referenced by FK)
34
+ return trx.ubUpsert("employees"); // Save after (uses FK)
35
35
  });
36
36
  ```
37
37
 
@@ -54,12 +54,13 @@ wdb.ubRegister("posts", {
54
54
  wdb.ubRegister("posts", {
55
55
  id: 1,
56
56
  title: "Updated Title",
57
- content: "Updated Content", // required field included!
58
- author_id: 1, // FK also included if required!
57
+ content: "Updated Content", // required field included!
58
+ author_id: 1, // FK also included if required!
59
59
  });
60
60
  ```
61
61
 
62
62
  **How to identify required fields**:
63
+
63
64
  1. Check props in entity.json
64
65
  2. Fields without `nullable: true` = required fields
65
66
  3. `id`, `created_at`, fields with `dbDefault` can be omitted
@@ -68,11 +69,11 @@ wdb.ubRegister("posts", {
68
69
  // entity.json example
69
70
  {
70
71
  "props": [
71
- { "name": "id", "type": "integer" }, // can be omitted
72
- { "name": "title", "type": "string" }, // required! (no nullable)
73
- { "name": "content", "type": "string" }, // required! (no nullable)
74
- { "name": "category", "type": "string", "nullable": true }, // optional
75
- { "name": "created_at", "type": "date", "dbDefault": "CURRENT_TIMESTAMP" } // can be omitted
72
+ { "name": "id", "type": "integer" }, // can be omitted
73
+ { "name": "title", "type": "string" }, // required! (no nullable)
74
+ { "name": "content", "type": "string" }, // required! (no nullable)
75
+ { "name": "category", "type": "string", "nullable": true }, // optional
76
+ { "name": "created_at", "type": "date", "dbDefault": "CURRENT_TIMESTAMP" } // can be omitted
76
77
  ]
77
78
  }
78
79
  ```
@@ -82,10 +83,10 @@ wdb.ubRegister("posts", {
82
83
  Save the table referenced by FK first:
83
84
 
84
85
  ```typescript
85
- await trx.ubUpsert("companies"); // 1. No dependencies
86
+ await trx.ubUpsert("companies"); // 1. No dependencies
86
87
  await trx.ubUpsert("departments"); // 2. Needs company_id
87
- await trx.ubUpsert("users"); // 3. No dependencies
88
- await trx.ubUpsert("employees"); // 4. Needs user_id, department_id
88
+ await trx.ubUpsert("users"); // 3. No dependencies
89
+ await trx.ubUpsert("employees"); // 4. Needs user_id, department_id
89
90
  ```
90
91
 
91
92
  ## Model save Pattern
@@ -165,10 +166,10 @@ In hierarchical structures (e.g. categories, org charts), self-referential relat
165
166
  await wdb.transaction(async (trx) => {
166
167
  // Root category
167
168
  const rootRef = trx.ubRegister("categories", { name: "Root", parent_id: null });
168
-
169
+
169
170
  // Child category (references rootRef)
170
171
  const childRef = trx.ubRegister("categories", { name: "Child", parent_id: rootRef });
171
-
172
+
172
173
  // Grandchild category (references childRef)
173
174
  trx.ubRegister("categories", { name: "Grandchild", parent_id: childRef });
174
175
 
@@ -197,8 +198,8 @@ wdb.ubRegister("users", { id: 3, status: "inactive" });
197
198
 
198
199
  await wdb.transaction(async (trx) => {
199
200
  await trx.updateBatch("users", {
200
- chunkSize: 500, // batch size (default: 500)
201
- where: "id", // WHERE condition column (default: "id")
201
+ chunkSize: 500, // batch size (default: 500)
202
+ where: "id", // WHERE condition column (default: "id")
202
203
  });
203
204
  });
204
205
 
@@ -214,9 +215,9 @@ Options for `ubUpsert()`:
214
215
 
215
216
  ```typescript
216
217
  type UpsertOptions = {
217
- chunkSize?: number; // batch size
218
- cleanOrphans?: string | string[]; // FK column(s) to use as basis for deleting orphan records
219
- inherit?: string[]; // columns to preserve existing values on UPDATE
218
+ chunkSize?: number; // batch size
219
+ cleanOrphans?: string | string[]; // FK column(s) to use as basis for deleting orphan records
220
+ inherit?: string[]; // columns to preserve existing values on UPDATE
220
221
  };
221
222
  ```
222
223
 
@@ -235,7 +236,7 @@ Automatically delete orphan records based on FK:
235
236
  ```typescript
236
237
  // Single FK
237
238
  await trx.ubUpsert("order_items", {
238
- cleanOrphans: "order_id", // delete records with the same order_id that were not upserted this time
239
+ cleanOrphans: "order_id", // delete records with the same order_id that were not upserted this time
239
240
  });
240
241
 
241
242
  // Composite FK
@@ -250,7 +251,7 @@ Preserve existing values for specific columns on UPDATE:
250
251
 
251
252
  ```typescript
252
253
  await trx.ubUpsert("users", {
253
- inherit: ["created_at", "password"], // these columns are excluded from UPDATE
254
+ inherit: ["created_at", "password"], // these columns are excluded from UPDATE
254
255
  });
255
256
  ```
256
257
 
@@ -259,16 +260,16 @@ await trx.ubUpsert("users", {
259
260
  Select upsert or insert mode at runtime.
260
261
 
261
262
  ```typescript
262
- await trx.ubUpsertOrInsert("logs", "insert"); // INSERT only
263
- await trx.ubUpsertOrInsert("users", "upsert"); // UPSERT (default)
263
+ await trx.ubUpsertOrInsert("logs", "insert"); // INSERT only
264
+ await trx.ubUpsertOrInsert("users", "upsert"); // UPSERT (default)
264
265
  await trx.ubUpsertOrInsert("users", "upsert", { cleanOrphans: "team_id" });
265
266
  ```
266
267
 
267
- | Parameter | Type | Description |
268
- |----------|------|------|
269
- | `tableName` | string | table name |
270
- | `mode` | `"upsert"` \| `"insert"` | operation mode |
271
- | `options` | `UpsertOptions` | chunkSize, cleanOrphans, inherit (same as ubUpsert) |
268
+ | Parameter | Type | Description |
269
+ | ----------- | ------------------------ | --------------------------------------------------- |
270
+ | `tableName` | string | table name |
271
+ | `mode` | `"upsert"` \| `"insert"` | operation mode |
272
+ | `options` | `UpsertOptions` | chunkSize, cleanOrphans, inherit (same as ubUpsert) |
272
273
 
273
274
  When `mode: "insert"`, unlike `insertOnly`, `UpsertOptions` (cleanOrphans, inherit) can be used.
274
275