sonamu 0.10.12 → 0.10.13

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 (513) hide show
  1. package/dist/ai/agents/agent.d.ts +1 -1
  2. package/dist/ai/agents/agent.d.ts.map +1 -1
  3. package/dist/ai/agents/agent.js +5 -6
  4. package/dist/ai/agents/types.d.ts +1 -1
  5. package/dist/ai/agents/types.d.ts.map +1 -1
  6. package/dist/ai/providers/rtzr/api.js +18 -18
  7. package/dist/ai/providers/rtzr/error.d.ts.map +1 -1
  8. package/dist/ai/providers/rtzr/error.js +17 -15
  9. package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
  10. package/dist/ai/providers/rtzr/model.js +3 -2
  11. package/dist/ai/providers/rtzr/options.d.ts.map +1 -1
  12. package/dist/ai/providers/rtzr/options.js +16 -16
  13. package/dist/ai/providers/rtzr/provider.d.ts.map +1 -1
  14. package/dist/ai/providers/rtzr/provider.js +9 -9
  15. package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
  16. package/dist/ai/providers/rtzr/utils.js +1 -1
  17. package/dist/api/caster.d.ts.map +1 -1
  18. package/dist/api/caster.js +17 -17
  19. package/dist/api/code-converters.d.ts +4 -2
  20. package/dist/api/code-converters.d.ts.map +1 -1
  21. package/dist/api/code-converters.js +100 -19
  22. package/dist/api/config.d.ts +16 -1
  23. package/dist/api/config.d.ts.map +1 -1
  24. package/dist/api/config.js +28 -21
  25. package/dist/api/context.d.ts +2 -2
  26. package/dist/api/context.d.ts.map +1 -1
  27. package/dist/api/context.js +1 -1
  28. package/dist/api/decorators.d.ts.map +1 -1
  29. package/dist/api/decorators.js +18 -11
  30. package/dist/api/http-validator.d.ts +36 -0
  31. package/dist/api/http-validator.d.ts.map +1 -0
  32. package/dist/api/http-validator.js +72 -0
  33. package/dist/api/index.js +6 -4
  34. package/dist/api/sonamu.d.ts +59 -20
  35. package/dist/api/sonamu.d.ts.map +1 -1
  36. package/dist/api/sonamu.js +250 -106
  37. package/dist/api/websocket-helpers.d.ts +7 -5
  38. package/dist/api/websocket-helpers.d.ts.map +1 -1
  39. package/dist/api/websocket-helpers.js +6 -6
  40. package/dist/auth/audit-log/builders.d.ts.map +1 -1
  41. package/dist/auth/audit-log/builders.js +1 -1
  42. package/dist/auth/audit-log/client-ip.d.ts +1 -1
  43. package/dist/auth/audit-log/client-ip.d.ts.map +1 -1
  44. package/dist/auth/audit-log/client-ip.js +4 -2
  45. package/dist/auth/audit-log/events.d.ts +5 -1
  46. package/dist/auth/audit-log/events.d.ts.map +1 -1
  47. package/dist/auth/audit-log/events.js +1 -1
  48. package/dist/auth/audit-log/plugin.d.ts +0 -8
  49. package/dist/auth/audit-log/plugin.d.ts.map +1 -1
  50. package/dist/auth/audit-log/plugin.js +48 -52
  51. package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
  52. package/dist/auth/audit-log-ingestor.js +16 -12
  53. package/dist/auth/auth-generator.d.ts.map +1 -1
  54. package/dist/auth/auth-generator.js +1 -1
  55. package/dist/auth/better-auth-request.d.ts.map +1 -1
  56. package/dist/auth/better-auth-request.js +6 -5
  57. package/dist/auth/knex-adapter.js +1 -1
  58. package/dist/auth/plugins/entity-definitions/index.d.ts +13 -1
  59. package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
  60. package/dist/auth/plugins/entity-definitions/index.js +1 -1
  61. package/dist/auth/plugins/wrappers/admin.d.ts +1 -1
  62. package/dist/bin/build-config.d.ts +25 -0
  63. package/dist/bin/build-config.d.ts.map +1 -1
  64. package/dist/bin/build-config.js +105 -2
  65. package/dist/bin/cli.js +131 -27
  66. package/dist/bin/compiler-policy.d.ts +3 -0
  67. package/dist/bin/compiler-policy.d.ts.map +1 -0
  68. package/dist/bin/compiler-policy.js +24 -0
  69. package/dist/bin/fixture.d.ts.map +1 -1
  70. package/dist/bin/fixture.js +5 -3
  71. package/dist/bin/test-command.d.ts +22 -1
  72. package/dist/bin/test-command.d.ts.map +1 -1
  73. package/dist/bin/test-command.js +18 -10
  74. package/dist/bin/ts-loader-registration.d.ts +7 -1
  75. package/dist/bin/ts-loader-registration.d.ts.map +1 -1
  76. package/dist/bin/ts-loader-registration.js +13 -4
  77. package/dist/cache/decorator.d.ts.map +1 -1
  78. package/dist/cache/decorator.js +11 -4
  79. package/dist/compress/compress.d.ts.map +1 -1
  80. package/dist/compress/compress.js +1 -1
  81. package/dist/cone/cone-generator.d.ts +14 -1
  82. package/dist/cone/cone-generator.d.ts.map +1 -1
  83. package/dist/cone/cone-generator.js +13 -9
  84. package/dist/database/_batch_update.js +1 -1
  85. package/dist/database/base-model.d.ts +22 -10
  86. package/dist/database/base-model.d.ts.map +1 -1
  87. package/dist/database/base-model.js +26 -16
  88. package/dist/database/base-model.types.d.ts +15 -3
  89. package/dist/database/base-model.types.d.ts.map +1 -1
  90. package/dist/database/db.d.ts +12 -2
  91. package/dist/database/db.d.ts.map +1 -1
  92. package/dist/database/db.js +10 -7
  93. package/dist/database/knex.d.ts.map +1 -1
  94. package/dist/database/knex.js +17 -14
  95. package/dist/database/puri.d.ts +11 -9
  96. package/dist/database/puri.d.ts.map +1 -1
  97. package/dist/database/puri.js +93 -79
  98. package/dist/database/puri.types.d.ts +21 -21
  99. package/dist/database/puri.types.d.ts.map +1 -1
  100. package/dist/database/puri.types.js +1 -1
  101. package/dist/database/upsert-builder.d.ts +12 -10
  102. package/dist/database/upsert-builder.d.ts.map +1 -1
  103. package/dist/database/upsert-builder.js +20 -12
  104. package/dist/dict/sd.d.ts.map +1 -1
  105. package/dist/dict/sd.js +1 -1
  106. package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
  107. package/dist/dict/sonamu-dictionary.js +1 -1
  108. package/dist/dict/utils.d.ts.map +1 -1
  109. package/dist/dict/utils.js +7 -2
  110. package/dist/entity/entity-manager.d.ts +13 -4
  111. package/dist/entity/entity-manager.d.ts.map +1 -1
  112. package/dist/entity/entity-manager.js +19 -11
  113. package/dist/entity/entity-template-cone.d.ts +73 -5
  114. package/dist/entity/entity-template-cone.d.ts.map +1 -1
  115. package/dist/entity/entity-template-cone.js +4 -2
  116. package/dist/entity/entity.d.ts +6 -2
  117. package/dist/entity/entity.d.ts.map +1 -1
  118. package/dist/entity/entity.js +30 -28
  119. package/dist/env.d.ts +3 -1
  120. package/dist/env.d.ts.map +1 -1
  121. package/dist/env.js +1 -1
  122. package/dist/exceptions/error-handler.d.ts.map +1 -1
  123. package/dist/exceptions/error-handler.js +7 -2
  124. package/dist/exceptions/so-exceptions.d.ts +24 -20
  125. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  126. package/dist/exceptions/so-exceptions.js +4 -2
  127. package/dist/filter/utils.d.ts +7 -2
  128. package/dist/filter/utils.d.ts.map +1 -1
  129. package/dist/filter/utils.js +8 -6
  130. package/dist/index.d.ts +3 -0
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +12 -6
  133. package/dist/logger/configure.d.ts.map +1 -1
  134. package/dist/logger/configure.js +10 -10
  135. package/dist/migration/code-generation.d.ts.map +1 -1
  136. package/dist/migration/code-generation.js +50 -46
  137. package/dist/migration/index-where-predicate.d.ts.map +1 -1
  138. package/dist/migration/index-where-predicate.js +22 -8
  139. package/dist/migration/migration-set.d.ts.map +1 -1
  140. package/dist/migration/migration-set.js +1 -1
  141. package/dist/migration/migrator.d.ts +3 -2
  142. package/dist/migration/migrator.d.ts.map +1 -1
  143. package/dist/migration/migrator.js +27 -21
  144. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  145. package/dist/migration/postgresql-schema-reader.js +51 -36
  146. package/dist/migration/slack-confirm.d.ts.map +1 -1
  147. package/dist/migration/slack-confirm.js +1 -1
  148. package/dist/naite/naite-reporter.js +2 -2
  149. package/dist/naite/naite.d.ts +74 -15
  150. package/dist/naite/naite.d.ts.map +1 -1
  151. package/dist/naite/naite.js +5 -19
  152. package/dist/runtime-type.d.ts +6 -0
  153. package/dist/runtime-type.d.ts.map +1 -0
  154. package/dist/runtime-type.js +26 -0
  155. package/dist/ssr/hmr-opt-out.d.ts +26 -0
  156. package/dist/ssr/hmr-opt-out.d.ts.map +1 -0
  157. package/dist/ssr/hmr-opt-out.js +59 -0
  158. package/dist/ssr/renderer.d.ts.map +1 -1
  159. package/dist/ssr/renderer.js +4 -1
  160. package/dist/storage/base-file.js +14 -14
  161. package/dist/storage/buffered-file.d.ts +2 -2
  162. package/dist/storage/buffered-file.d.ts.map +1 -1
  163. package/dist/storage/buffered-file.js +12 -12
  164. package/dist/storage/s3-driver.d.ts.map +1 -1
  165. package/dist/storage/s3-driver.js +1 -1
  166. package/dist/storage/uploaded-file.d.ts +2 -2
  167. package/dist/storage/uploaded-file.d.ts.map +1 -1
  168. package/dist/storage/uploaded-file.js +8 -8
  169. package/dist/stream/sse.js +11 -11
  170. package/dist/stream/ws-core.d.ts +1 -1
  171. package/dist/stream/ws-core.d.ts.map +1 -1
  172. package/dist/stream/ws-delivery.d.ts +1 -1
  173. package/dist/stream/ws-delivery.d.ts.map +1 -1
  174. package/dist/stream/ws-delivery.js +6 -4
  175. package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
  176. package/dist/stream/ws-local-connection-store.js +4 -2
  177. package/dist/stream/ws-presence-store.js +1 -1
  178. package/dist/stream/ws-registry.d.ts +4 -4
  179. package/dist/stream/ws-registry.d.ts.map +1 -1
  180. package/dist/stream/ws-registry.js +4 -2
  181. package/dist/stream/ws-telemetry.d.ts +16 -12
  182. package/dist/stream/ws-telemetry.d.ts.map +1 -1
  183. package/dist/stream/ws-telemetry.js +22 -18
  184. package/dist/stream/ws.d.ts +18 -12
  185. package/dist/stream/ws.d.ts.map +1 -1
  186. package/dist/stream/ws.js +26 -22
  187. package/dist/syncer/api-parser.js +1 -1
  188. package/dist/syncer/checksum.d.ts.map +1 -1
  189. package/dist/syncer/checksum.js +7 -8
  190. package/dist/syncer/code-generator.d.ts.map +1 -1
  191. package/dist/syncer/code-generator.js +13 -14
  192. package/dist/syncer/entity-operations.d.ts.map +1 -1
  193. package/dist/syncer/entity-operations.js +5 -6
  194. package/dist/syncer/file-copy.d.ts +5 -0
  195. package/dist/syncer/file-copy.d.ts.map +1 -0
  196. package/dist/syncer/file-copy.js +36 -0
  197. package/dist/syncer/file-patterns.d.ts +1 -0
  198. package/dist/syncer/file-patterns.d.ts.map +1 -1
  199. package/dist/syncer/file-patterns.js +5 -2
  200. package/dist/syncer/file-tracking.d.ts.map +1 -1
  201. package/dist/syncer/file-tracking.js +5 -4
  202. package/dist/syncer/filesystem-dependencies.d.ts +15 -0
  203. package/dist/syncer/filesystem-dependencies.d.ts.map +1 -0
  204. package/dist/syncer/filesystem-dependencies.js +53 -0
  205. package/dist/syncer/module-loader.d.ts +1 -1
  206. package/dist/syncer/module-loader.d.ts.map +1 -1
  207. package/dist/syncer/module-loader.js +6 -4
  208. package/dist/syncer/syncer-actions.d.ts +4 -0
  209. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  210. package/dist/syncer/syncer-actions.js +34 -17
  211. package/dist/syncer/syncer.d.ts +17 -6
  212. package/dist/syncer/syncer.d.ts.map +1 -1
  213. package/dist/syncer/syncer.js +71 -29
  214. package/dist/syncer/watcher.d.ts.map +1 -1
  215. package/dist/syncer/watcher.js +3 -3
  216. package/dist/tasks/decorator.d.ts +6 -6
  217. package/dist/tasks/decorator.d.ts.map +1 -1
  218. package/dist/tasks/decorator.js +4 -4
  219. package/dist/tasks/step-wrapper.d.ts +6 -4
  220. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  221. package/dist/tasks/step-wrapper.js +5 -5
  222. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  223. package/dist/tasks/workflow-manager.js +13 -7
  224. package/dist/template/entity-converter.d.ts +1 -1
  225. package/dist/template/entity-converter.d.ts.map +1 -1
  226. package/dist/template/entity-converter.js +2 -2
  227. package/dist/template/helpers.d.ts +8 -6
  228. package/dist/template/helpers.d.ts.map +1 -1
  229. package/dist/template/helpers.js +1 -1
  230. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  231. package/dist/template/implementations/generated.template.js +4 -4
  232. package/dist/template/implementations/generated_http.template.d.ts +7 -4
  233. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  234. package/dist/template/implementations/generated_http.template.js +21 -21
  235. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  236. package/dist/template/implementations/generated_sso.template.js +6 -3
  237. package/dist/template/implementations/http_validators.template.d.ts +18 -0
  238. package/dist/template/implementations/http_validators.template.d.ts.map +1 -0
  239. package/dist/template/implementations/http_validators.template.js +127 -0
  240. package/dist/template/implementations/model.template.d.ts.map +1 -1
  241. package/dist/template/implementations/model.template.js +1 -1
  242. package/dist/template/implementations/queries.template.js +1 -1
  243. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  244. package/dist/template/implementations/sd.template.js +79 -39
  245. package/dist/template/implementations/services.template.d.ts.map +1 -1
  246. package/dist/template/implementations/services.template.js +6 -4
  247. package/dist/template/implementations/view_form.template.d.ts +6 -1
  248. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  249. package/dist/template/implementations/view_form.template.js +23 -15
  250. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  251. package/dist/template/implementations/view_list.template.js +11 -6
  252. package/dist/template/template-manager.d.ts.map +1 -1
  253. package/dist/template/template-manager.js +9 -7
  254. package/dist/template/template-types.d.ts +12 -5
  255. package/dist/template/template-types.d.ts.map +1 -1
  256. package/dist/template/template-types.js +1 -1
  257. package/dist/template/template.d.ts +2 -2
  258. package/dist/template/template.d.ts.map +1 -1
  259. package/dist/template/template.js +6 -4
  260. package/dist/template/zod-converter.d.ts +0 -19
  261. package/dist/template/zod-converter.d.ts.map +1 -1
  262. package/dist/template/zod-converter.js +100 -84
  263. package/dist/testing/_relation-graph.d.ts.map +1 -1
  264. package/dist/testing/_relation-graph.js +2 -1
  265. package/dist/testing/bootstrap.d.ts.map +1 -1
  266. package/dist/testing/bootstrap.js +9 -6
  267. package/dist/testing/data-explorer.d.ts +32 -7
  268. package/dist/testing/data-explorer.d.ts.map +1 -1
  269. package/dist/testing/data-explorer.js +77 -31
  270. package/dist/testing/dev-test-routes.d.ts +8 -1
  271. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  272. package/dist/testing/dev-test-routes.js +125 -108
  273. package/dist/testing/dev-vitest-manager.d.ts +54 -8
  274. package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
  275. package/dist/testing/dev-vitest-manager.js +24 -9
  276. package/dist/testing/faker-mappings.d.ts +412 -1
  277. package/dist/testing/faker-mappings.d.ts.map +1 -1
  278. package/dist/testing/faker-mappings.js +1 -1
  279. package/dist/testing/filesystem.d.ts +2 -0
  280. package/dist/testing/filesystem.d.ts.map +1 -0
  281. package/dist/testing/filesystem.js +7 -0
  282. package/dist/testing/fixture-generator.d.ts +25 -8
  283. package/dist/testing/fixture-generator.d.ts.map +1 -1
  284. package/dist/testing/fixture-generator.js +132 -73
  285. package/dist/testing/fixture-loader.d.ts +3 -1
  286. package/dist/testing/fixture-loader.d.ts.map +1 -1
  287. package/dist/testing/fixture-loader.js +1 -20
  288. package/dist/testing/fixture-manager.d.ts +8 -7
  289. package/dist/testing/fixture-manager.d.ts.map +1 -1
  290. package/dist/testing/fixture-manager.js +91 -59
  291. package/dist/testing/global-setup.d.ts.map +1 -1
  292. package/dist/testing/global-setup.js +5 -2
  293. package/dist/testing/index.d.ts +2 -0
  294. package/dist/testing/index.d.ts.map +1 -1
  295. package/dist/testing/index.js +6 -3
  296. package/dist/types/types.d.ts +101 -99
  297. package/dist/types/types.d.ts.map +1 -1
  298. package/dist/types/types.js +234 -225
  299. package/dist/ui/ai-api.d.ts.map +1 -1
  300. package/dist/ui/ai-api.js +1 -1
  301. package/dist/ui/ai-client.d.ts.map +1 -1
  302. package/dist/ui/ai-client.js +28 -18
  303. package/dist/ui/api.d.ts.map +1 -1
  304. package/dist/ui/api.js +135 -128
  305. package/dist/ui/async-route.d.ts +3 -0
  306. package/dist/ui/async-route.d.ts.map +1 -0
  307. package/dist/ui/async-route.js +12 -0
  308. package/dist/ui/cdd-service.d.ts +9 -7
  309. package/dist/ui/cdd-service.d.ts.map +1 -1
  310. package/dist/ui/cdd-service.js +7 -5
  311. package/dist/ui/migrations-api.d.ts.map +1 -1
  312. package/dist/ui/migrations-api.js +17 -15
  313. package/dist/ui-web/assets/index-DV1AAq6W.js +178 -0
  314. package/dist/ui-web/index.html +1 -1
  315. package/dist/utils/formatter.d.ts.map +1 -1
  316. package/dist/utils/formatter.js +7 -5
  317. package/dist/utils/fs-utils.d.ts +3 -3
  318. package/dist/utils/fs-utils.d.ts.map +1 -1
  319. package/dist/utils/fs-utils.js +6 -6
  320. package/dist/utils/model.d.ts +3 -5
  321. package/dist/utils/model.d.ts.map +1 -1
  322. package/dist/utils/model.js +1 -1
  323. package/dist/utils/object-utils.d.ts +1 -1
  324. package/dist/utils/object-utils.d.ts.map +1 -1
  325. package/dist/utils/object-utils.js +17 -16
  326. package/dist/utils/process-utils.d.ts.map +1 -1
  327. package/dist/utils/process-utils.js +4 -2
  328. package/dist/utils/runtime-value.d.ts +13 -0
  329. package/dist/utils/runtime-value.d.ts.map +1 -0
  330. package/dist/utils/runtime-value.js +40 -0
  331. package/dist/utils/sql-parser.d.ts +8 -1
  332. package/dist/utils/sql-parser.d.ts.map +1 -1
  333. package/dist/utils/sql-parser.js +6 -3
  334. package/dist/utils/type-utils.d.ts.map +1 -1
  335. package/dist/utils/type-utils.js +10 -8
  336. package/dist/utils/utils.d.ts +2 -2
  337. package/dist/utils/utils.d.ts.map +1 -1
  338. package/dist/utils/utils.js +11 -8
  339. package/dist/utils/zod-error.d.ts.map +1 -1
  340. package/dist/utils/zod-error.js +7 -4
  341. package/dist/vector/chunking.d.ts.map +1 -1
  342. package/dist/vector/chunking.js +1 -1
  343. package/dist/vector/embedding.d.ts.map +1 -1
  344. package/dist/vector/embedding.js +1 -1
  345. package/dist/vector/types.d.ts +3 -2
  346. package/dist/vector/types.d.ts.map +1 -1
  347. package/package.json +5 -3
  348. package/src/ai/agents/agent.ts +5 -5
  349. package/src/ai/agents/types.ts +1 -1
  350. package/src/ai/providers/rtzr/__tests__/model.test.ts +2 -2
  351. package/src/ai/providers/rtzr/error.ts +5 -3
  352. package/src/ai/providers/rtzr/model.ts +3 -2
  353. package/src/ai/providers/rtzr/options.ts +10 -5
  354. package/src/ai/providers/rtzr/provider.ts +10 -10
  355. package/src/ai/providers/rtzr/utils.ts +3 -1
  356. package/src/api/__tests__/config.test.ts +11 -21
  357. package/src/api/__tests__/sonamu.http-validator.test.ts +512 -0
  358. package/src/api/__tests__/sonamu.websocket.test.ts +51 -41
  359. package/src/api/__tests__/zod-compiler-policy.test.ts +95 -0
  360. package/src/api/caster.ts +6 -8
  361. package/src/api/code-converters.ts +136 -36
  362. package/src/api/config.ts +62 -4
  363. package/src/api/context.ts +3 -3
  364. package/src/api/decorators.ts +28 -17
  365. package/src/api/http-validator.ts +149 -0
  366. package/src/api/sonamu.ts +459 -152
  367. package/src/api/websocket-helpers.ts +24 -17
  368. package/src/auth/audit-log/builders.ts +3 -2
  369. package/src/auth/audit-log/client-ip.ts +4 -2
  370. package/src/auth/audit-log/events.ts +15 -1
  371. package/src/auth/audit-log/plugin.ts +129 -200
  372. package/src/auth/audit-log-ingestor.ts +19 -15
  373. package/src/auth/auth-generator.ts +10 -5
  374. package/src/auth/better-auth-request.ts +4 -3
  375. package/src/auth/knex-adapter.ts +8 -2
  376. package/src/auth/plugins/entity-definitions/index.ts +6 -5
  377. package/src/bin/__tests__/http-validator-benchmark.test.ts +94 -0
  378. package/src/bin/__tests__/test-command.test.ts +9 -15
  379. package/src/bin/__tests__/ts-loader-register.test.ts +15 -17
  380. package/src/bin/__tests__/zod-compiler-build.test.ts +307 -0
  381. package/src/bin/build-config.ts +167 -0
  382. package/src/bin/cli.ts +153 -36
  383. package/src/bin/compiler-policy.ts +35 -0
  384. package/src/bin/fixture.ts +14 -3
  385. package/src/bin/test-command.ts +74 -29
  386. package/src/bin/ts-loader-registration.ts +22 -4
  387. package/src/cache/decorator.ts +10 -3
  388. package/src/compress/compress.ts +17 -4
  389. package/src/cone/cone-generator.ts +34 -6
  390. package/src/database/__tests__/db.test.ts +1 -0
  391. package/src/database/__tests__/puri.test.ts +16 -15
  392. package/src/database/__tests__/transaction-scope.test.ts +5 -0
  393. package/src/database/_batch_update.ts +1 -0
  394. package/src/database/base-model.ts +81 -50
  395. package/src/database/base-model.types.ts +6 -6
  396. package/src/database/db.ts +29 -19
  397. package/src/database/knex.ts +30 -17
  398. package/src/database/puri-subset.test-d.ts +17 -0
  399. package/src/database/puri.ts +181 -143
  400. package/src/database/puri.types.test-d.ts +31 -1
  401. package/src/database/puri.types.ts +23 -21
  402. package/src/database/upsert-builder.ts +75 -53
  403. package/src/dict/sd.ts +15 -5
  404. package/src/dict/sonamu-dictionary.ts +6 -6
  405. package/src/dict/utils.ts +9 -1
  406. package/src/entity/entity-manager.ts +26 -9
  407. package/src/entity/entity-template-cone.ts +5 -10
  408. package/src/entity/entity.ts +50 -34
  409. package/src/env.ts +7 -3
  410. package/src/exceptions/error-handler.ts +17 -2
  411. package/src/exceptions/so-exceptions.ts +26 -20
  412. package/src/filter/utils.ts +21 -11
  413. package/src/index.ts +3 -0
  414. package/src/logger/configure.ts +26 -18
  415. package/src/migration/__tests__/migrator.test.ts +50 -57
  416. package/src/migration/code-generation.ts +132 -104
  417. package/src/migration/index-where-predicate.ts +51 -24
  418. package/src/migration/migration-set.ts +11 -5
  419. package/src/migration/migrator.ts +68 -41
  420. package/src/migration/postgresql-schema-reader.ts +52 -47
  421. package/src/migration/slack-confirm.ts +17 -15
  422. package/src/naite/naite-reporter.ts +1 -1
  423. package/src/naite/naite.ts +97 -24
  424. package/src/runtime-type.ts +34 -0
  425. package/src/ssr/hmr-opt-out.ts +78 -0
  426. package/src/ssr/renderer.ts +6 -0
  427. package/src/storage/base-file.ts +13 -13
  428. package/src/storage/buffered-file.ts +11 -11
  429. package/src/storage/s3-driver.ts +4 -1
  430. package/src/storage/uploaded-file.ts +8 -8
  431. package/src/stream/__tests__/ws-contracts.test.ts +4 -2
  432. package/src/stream/__tests__/ws-telemetry.test.ts +1 -1
  433. package/src/stream/__tests__/ws.test.ts +30 -6
  434. package/src/stream/sse.ts +12 -11
  435. package/src/stream/ws-core.ts +1 -1
  436. package/src/stream/ws-delivery.ts +16 -7
  437. package/src/stream/ws-local-connection-store.ts +2 -3
  438. package/src/stream/ws-presence-store.ts +6 -1
  439. package/src/stream/ws-registry.ts +16 -7
  440. package/src/stream/ws-telemetry.ts +66 -43
  441. package/src/stream/ws.ts +73 -39
  442. package/src/syncer/__tests__/api-parser.websocket-type-ref.test.ts +3 -2
  443. package/src/syncer/__tests__/http-validator-registry.test.ts +137 -0
  444. package/src/syncer/api-parser.ts +67 -27
  445. package/src/syncer/checksum.ts +17 -11
  446. package/src/syncer/code-generator.ts +25 -17
  447. package/src/syncer/entity-operations.ts +3 -5
  448. package/src/syncer/file-copy.ts +46 -0
  449. package/src/syncer/file-patterns.ts +11 -8
  450. package/src/syncer/file-tracking.ts +3 -4
  451. package/src/syncer/filesystem-dependencies.ts +73 -0
  452. package/src/syncer/module-loader.ts +8 -4
  453. package/src/syncer/syncer-actions.ts +56 -18
  454. package/src/syncer/syncer.ts +116 -43
  455. package/src/syncer/watcher.ts +8 -4
  456. package/src/tasks/decorator.ts +20 -12
  457. package/src/tasks/step-wrapper.ts +19 -9
  458. package/src/tasks/workflow-manager.ts +15 -9
  459. package/src/template/__tests__/http_validators.template.test.ts +160 -0
  460. package/src/template/__tests__/services.template.mutation.test.ts +24 -23
  461. package/src/template/__tests__/services.template.websocket.test.ts +21 -25
  462. package/src/template/entity-converter.ts +5 -2
  463. package/src/template/helpers.ts +8 -9
  464. package/src/template/implementations/generated.template.ts +5 -4
  465. package/src/template/implementations/generated_http.template.ts +61 -15
  466. package/src/template/implementations/generated_sso.template.ts +15 -4
  467. package/src/template/implementations/http_validators.template.ts +175 -0
  468. package/src/template/implementations/model.template.ts +3 -1
  469. package/src/template/implementations/sd.template.ts +81 -41
  470. package/src/template/implementations/services.template.ts +2 -2
  471. package/src/template/implementations/view_form.template.ts +56 -39
  472. package/src/template/implementations/view_list.template.ts +31 -23
  473. package/src/template/template-manager.ts +15 -13
  474. package/src/template/template-types.ts +13 -5
  475. package/src/template/template.ts +4 -3
  476. package/src/template/zod-converter.ts +206 -91
  477. package/src/testing/__tests__/dev-test-routes.test.ts +85 -25
  478. package/src/testing/__tests__/dev-vitest-manager.test.ts +15 -15
  479. package/src/testing/_relation-graph.ts +4 -1
  480. package/src/testing/bootstrap.ts +12 -5
  481. package/src/testing/data-explorer.ts +102 -53
  482. package/src/testing/dev-test-routes.ts +87 -50
  483. package/src/testing/dev-vitest-manager.ts +88 -32
  484. package/src/testing/faker-mappings.ts +2 -2
  485. package/src/testing/filesystem.ts +1 -0
  486. package/src/testing/fixture-generator.ts +191 -131
  487. package/src/testing/fixture-loader.ts +5 -1
  488. package/src/testing/fixture-manager.ts +129 -90
  489. package/src/testing/global-setup.ts +7 -3
  490. package/src/testing/index.ts +5 -0
  491. package/src/types/__tests__/entity-json-schema-search-text.test.ts +9 -3
  492. package/src/types/types.ts +184 -158
  493. package/src/ui/ai-api.ts +9 -7
  494. package/src/ui/ai-client.ts +61 -56
  495. package/src/ui/api.ts +727 -616
  496. package/src/ui/async-route.ts +4 -0
  497. package/src/ui/cdd-service.ts +35 -12
  498. package/src/ui/migrations-api.ts +63 -51
  499. package/src/utils/formatter.ts +7 -3
  500. package/src/utils/fs-utils.ts +5 -5
  501. package/src/utils/model.ts +4 -5
  502. package/src/utils/object-utils.ts +32 -22
  503. package/src/utils/process-utils.ts +4 -1
  504. package/src/utils/runtime-value.ts +43 -0
  505. package/src/utils/sql-parser.ts +13 -6
  506. package/src/utils/type-utils.ts +9 -7
  507. package/src/utils/utils.ts +19 -21
  508. package/src/utils/zod-error.ts +4 -2
  509. package/src/vector/chunking.ts +6 -1
  510. package/src/vector/embedding.ts +2 -1
  511. package/src/vector/types.ts +4 -2
  512. package/tsdown.api.config.ts +5 -2
  513. package/dist/ui-web/assets/index-C0m1pk6K.js +0 -177
@@ -5,41 +5,46 @@ import { type Knex } from "knex";
5
5
 
6
6
  import { type DatabaseConfig, type SonamuConfig } from "../api/config";
7
7
  import { getSonamuEnvironment, type EnvironmentSnapshots, type SonamuEnvironment } from "../env";
8
+ import { isObjectValue } from "../utils/runtime-value";
8
9
  import { createKnexInstance } from "./knex";
9
10
  import { type PuriTransactionWrapper } from "./puri-wrapper";
10
11
  import { TransactionContext } from "./transaction-context";
11
12
 
12
- function isPlainObject(value: unknown): value is Record<string, unknown> {
13
- return typeof value === "object" && value !== null && !Array.isArray(value);
13
+ function isPlainObject<Value>(value: Value): value is Value & object {
14
+ return isObjectValue(value) && !Array.isArray(value);
14
15
  }
15
16
 
16
- function mergeRecord(
17
- target: Record<string, unknown>,
18
- source: Record<string, unknown>,
19
- ): Record<string, unknown> {
20
- for (const [key, value] of Object.entries(source)) {
21
- const currentValue = target[key];
17
+ function mergeRecord<Target extends object, Source extends object>(
18
+ target: Target,
19
+ source: Source,
20
+ ): Target {
21
+ const targetEntries = new Map(Object.entries(target));
22
22
 
23
- if (isPlainObject(currentValue) && isPlainObject(value)) {
24
- target[key] = mergeRecord({ ...currentValue }, value);
25
- } else {
26
- target[key] = value;
27
- }
23
+ for (const [key, value] of Object.entries(source)) {
24
+ const currentValue = targetEntries.get(key);
25
+ const mergedValue =
26
+ isPlainObject(currentValue) && isPlainObject(value)
27
+ ? mergeRecord({ ...currentValue }, value)
28
+ : value;
29
+ Object.assign(target, { [key]: mergedValue });
28
30
  }
29
31
 
30
32
  return target;
31
33
  }
32
34
 
33
- function mergeConfigs<T extends object>(...configs: (Partial<T> | undefined | null)[]): T {
34
- const merged: Record<string, unknown> = {};
35
+ function mergeConfigs<T extends object>(
36
+ baseConfig: T,
37
+ ...configs: (Partial<T> | undefined | null)[]
38
+ ): T {
39
+ const merged = { ...baseConfig };
35
40
 
36
41
  for (const config of configs) {
37
42
  if (config !== undefined && config !== null) {
38
- mergeRecord(merged, config as Record<string, unknown>);
43
+ mergeRecord(merged, config);
39
44
  }
40
45
  }
41
46
 
42
- return merged as T;
47
+ return merged;
43
48
  }
44
49
 
45
50
  export type SonamuMainDBPreset = "test" | "fixture" | SonamuEnvironment;
@@ -58,6 +63,7 @@ function isConcretePreset(value: DBPreset): value is SonamuDBPreset {
58
63
  }
59
64
 
60
65
  function getReadonlyPreset(environment: SonamuEnvironment): SonamuReadonlyDBPreset {
66
+ // SAFETY: 쿼리 빌더의 제네릭 계약과 선행 검증이 이 타입을 보장합니다.
61
67
  return `${environment}_readonly` as SonamuReadonlyDBPreset;
62
68
  }
63
69
 
@@ -135,6 +141,7 @@ function neutralizeEnvironmentConnectionFields(
135
141
  }
136
142
 
137
143
  function assertNoLegacyDatabaseConfig(config: SonamuConfig["database"]): void {
144
+ // SAFETY: 쿼리 빌더의 제네릭 계약과 선행 검증이 이 타입을 보장합니다.
138
145
  const legacyConfig = config as SonamuConfig["database"] & {
139
146
  name?: unknown;
140
147
  environments?: unknown;
@@ -243,6 +250,7 @@ export class DBClass {
243
250
 
244
251
  if (!this.workerDBs.has(workerId)) {
245
252
  const baseTestConfig = dbConfig.test;
253
+ // SAFETY: 쿼리 빌더의 제네릭 계약과 선행 검증이 이 타입을 보장합니다.
246
254
  const connection = baseTestConfig.connection as { database: string };
247
255
  const workerDbName = `${connection.database}_${workerId}`;
248
256
 
@@ -308,7 +316,7 @@ export class DBClass {
308
316
  config: SonamuConfig["database"],
309
317
  projectName?: string,
310
318
  snapshots?: EnvironmentSnapshots,
311
- ): SonamuDBConfig {
319
+ ) {
312
320
  assertNoLegacyDatabaseConfig(config);
313
321
 
314
322
  const baseName = getProjectDatabaseBaseName(projectName);
@@ -325,6 +333,7 @@ export class DBClass {
325
333
  },
326
334
  config.defaultOptions,
327
335
  );
336
+ // SAFETY: 쿼리 빌더의 제네릭 계약과 선행 검증이 이 타입을 보장합니다.
328
337
  const baseConnection = defaultKnexConfig.connection as Knex.PgConnectionConfig | undefined;
329
338
  const environmentFallbackConnection = snapshots
330
339
  ? neutralizeEnvironmentConnectionFields(baseConnection)
@@ -354,6 +363,7 @@ export class DBClass {
354
363
  connection: connectionFromEnv({
355
364
  baseName,
356
365
  suffix: environment,
366
+ // SAFETY: 쿼리 빌더의 제네릭 계약과 선행 검증이 이 타입을 보장합니다.
357
367
  baseConnection: mainConfig(environment).connection as Knex.PgConnectionConfig,
358
368
  prefix: "SONAMU_DB_READONLY",
359
369
  env: envForPreset(environment),
@@ -380,7 +390,7 @@ export class DBClass {
380
390
  staging_readonly: readonlyConfig("staging"),
381
391
  production: mainConfig("production"),
382
392
  production_readonly: readonlyConfig("production"),
383
- };
393
+ } satisfies SonamuDBConfig;
384
394
  }
385
395
 
386
396
  public testTransaction: Knex.Transaction | null = null;
@@ -1,13 +1,29 @@
1
1
  import { type Knex } from "knex";
2
2
  import knex from "knex";
3
3
 
4
+ import { isObjectValue } from "../utils/runtime-value";
5
+
6
+ type KnexClientWithConnection = Knex.Client & {
7
+ connection?: {
8
+ stream?: {
9
+ setKeepAlive?: (enable: boolean, initialDelay: number) => void;
10
+ };
11
+ };
12
+ };
13
+
4
14
  export function createKnexInstance(config: Knex.Config): Knex {
5
- if (config.connection && typeof config.connection === "object") {
6
- const conn = config.connection as Record<string, unknown>;
15
+ if (config.connection && isObjectValue(config.connection)) {
16
+ const keepAlive = "keepAlive" in config.connection ? config.connection.keepAlive : undefined;
17
+ const initialDelay =
18
+ "keepAliveInitialDelayMillis" in config.connection
19
+ ? config.connection.keepAliveInitialDelayMillis
20
+ : undefined;
7
21
 
8
- if (conn.keepAlive === undefined) {
9
- conn.keepAlive = true;
10
- conn.keepAliveInitialDelayMillis = conn.keepAliveInitialDelayMillis ?? 10000;
22
+ if (keepAlive === undefined) {
23
+ Object.assign(config.connection, {
24
+ keepAlive: true,
25
+ keepAliveInitialDelayMillis: initialDelay ?? 10000,
26
+ });
11
27
  }
12
28
  }
13
29
 
@@ -23,22 +39,19 @@ export function createKnexInstance(config: Knex.Config): Knex {
23
39
  createTimeoutMillis: 30000,
24
40
  ...config.pool,
25
41
  // validate/afterCreate는 항상 프레임워크 기본값을 사용한다.
26
- validate: (connection: unknown) => {
27
- if (typeof connection !== "object" || connection === null) return false;
28
- const conn = connection as Record<string, unknown>;
29
- if (conn._ending === true || conn._closed === true) return false;
30
- return true;
42
+ validate: <Connection>(connection: Connection) => {
43
+ if (!isObjectValue(connection)) return false;
44
+ const isEnding = "_ending" in connection && connection["_ending"] === true;
45
+ const isClosed = "_closed" in connection && connection["_closed"] === true;
46
+ return !isEnding && !isClosed;
31
47
  },
32
48
  afterCreate: ((
33
- conn: Knex.Client & Record<string, unknown>,
49
+ conn: KnexClientWithConnection,
34
50
  done: (err: Error | null, conn: Knex.Client) => void,
35
51
  ) => {
36
- // pg driver: 소켓 레벨 keepAlive 설정
37
- const stream = (conn as Record<string, unknown>).connection as
38
- | { stream?: { setKeepAlive?: (enable: boolean, initialDelay: number) => void } }
39
- | undefined;
40
- if (stream?.stream?.setKeepAlive) {
41
- stream.stream.setKeepAlive(true, 10000);
52
+ // pg driver 소켓에 keepAlive를 적용해 유휴 연결 단절을 줄입니다.
53
+ if (conn.connection?.stream?.setKeepAlive) {
54
+ conn.connection.stream.setKeepAlive(true, 10000);
42
55
  }
43
56
 
44
57
  done(null, conn);
@@ -13,6 +13,7 @@ describe("Hydrate", () => {
13
13
  type Input = { id: number; name: string };
14
14
  type Result = Hydrate<Input>;
15
15
 
16
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
16
17
  const result = {} as Result;
17
18
  expectTypeOf(result).toEqualTypeOf<Hydrate<Input>>();
18
19
  });
@@ -21,6 +22,7 @@ describe("Hydrate", () => {
21
22
  type Input = { id: number; user__name: string; user__email: string };
22
23
  type Result = Hydrate<Input>;
23
24
 
25
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
24
26
  const result = {} as Result;
25
27
  expectTypeOf(result).toEqualTypeOf<{
26
28
  id: number;
@@ -37,6 +39,7 @@ describe("Hydrate", () => {
37
39
  };
38
40
  type Result = Hydrate<Input>;
39
41
 
42
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
40
43
  const result = {} as Result;
41
44
  expectTypeOf(result).toEqualTypeOf<{
42
45
  id: number;
@@ -57,6 +60,7 @@ describe("Hydrate", () => {
57
60
  };
58
61
  type Result = Hydrate<Input>;
59
62
 
63
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
60
64
  const result = {} as Result;
61
65
  expectTypeOf(result).toEqualTypeOf<{
62
66
  id: number;
@@ -69,6 +73,7 @@ describe("Hydrate", () => {
69
73
  type Input = {};
70
74
  type Result = Hydrate<Input>;
71
75
 
76
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
72
77
  const result = {} as Result;
73
78
  expectTypeOf(result).toEqualTypeOf<{}>();
74
79
  });
@@ -81,6 +86,7 @@ describe("Hydrate", () => {
81
86
  };
82
87
  type Result = Hydrate<Input>;
83
88
 
89
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
84
90
  const result = {} as Result;
85
91
  expectTypeOf(result).toEqualTypeOf<{
86
92
  id: number;
@@ -97,6 +103,7 @@ describe("Hydrate", () => {
97
103
  };
98
104
  type Result = Hydrate<Input>;
99
105
 
106
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
100
107
  const result = {} as Result;
101
108
  expectTypeOf(result).toEqualTypeOf<{
102
109
  id: number;
@@ -122,6 +129,7 @@ describe("LoadersResult", () => {
122
129
  ];
123
130
  type Result = LoadersResult<Loaders>;
124
131
 
132
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
125
133
  const result = {} as Result;
126
134
  expectTypeOf(result).toHaveProperty("posts");
127
135
  expectTypeOf(result).toEqualTypeOf<{ posts: { id: number; title: string }[] }>();
@@ -154,6 +162,7 @@ describe("LoadersResult", () => {
154
162
  ];
155
163
  type Result = LoadersResult<Loaders>;
156
164
 
165
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
157
166
  const result = {} as Result;
158
167
  expectTypeOf(result).toHaveProperty("posts");
159
168
  expectTypeOf(result).toEqualTypeOf<{
@@ -193,6 +202,7 @@ describe("LoadersResult", () => {
193
202
  ];
194
203
  type Result = LoadersResult<Loaders>;
195
204
 
205
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
196
206
  const result = {} as Result;
197
207
  expectTypeOf(result).toEqualTypeOf<{
198
208
  items: {
@@ -245,6 +255,7 @@ describe("LoadersResult", () => {
245
255
  type Loaders = [ProjectLoader, DepartmentLoader, EmployeeLoader];
246
256
  type Result = LoadersResult<Loaders>;
247
257
 
258
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
248
259
  const result = {} as Result;
249
260
  expectTypeOf(result).toHaveProperty("projects");
250
261
  expectTypeOf(result).toHaveProperty("employees");
@@ -284,6 +295,7 @@ describe("InferAllSubsets", () => {
284
295
  // Result
285
296
  type Result = InferAllSubsets<SubsetQueries, LoaderQueries>;
286
297
 
298
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
287
299
  const result = {} as Result;
288
300
  expectTypeOf(result).toHaveProperty("A");
289
301
  expectTypeOf(result.A).toEqualTypeOf<{
@@ -331,6 +343,7 @@ describe("InferAllSubsets", () => {
331
343
  // Result
332
344
  type Result = InferAllSubsets<SubsetQueries, LoaderQueries>;
333
345
 
346
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
334
347
  const result = {} as Result;
335
348
  expectTypeOf(result).toHaveProperty("A");
336
349
  expectTypeOf(result).toEqualTypeOf<{
@@ -382,6 +395,7 @@ describe("InferAllSubsets", () => {
382
395
  // Result
383
396
  type Result = InferAllSubsets<SubsetQueries, LoaderQueries>;
384
397
 
398
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
385
399
  const result = {} as Result;
386
400
  expectTypeOf(result).toEqualTypeOf<{
387
401
  A: {
@@ -436,6 +450,7 @@ describe("InferAllSubsets", () => {
436
450
 
437
451
  type Result = InferAllSubsets<SubsetQueries, LoaderQueries>;
438
452
 
453
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
439
454
  const result = {} as Result;
440
455
  expectTypeOf(result).toEqualTypeOf<{
441
456
  A: {
@@ -492,6 +507,7 @@ describe("InferAllSubsets", () => {
492
507
  // Result
493
508
  type Result = InferAllSubsets<SubsetQueries, LoaderQueries>;
494
509
 
510
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
495
511
  const result = {} as Result;
496
512
  expectTypeOf(result).toEqualTypeOf<{
497
513
  A: { id: number; name: string; email: string; department: { name: string } };
@@ -553,6 +569,7 @@ describe("InferAllSubsets", () => {
553
569
  // Result
554
570
  type Result = InferAllSubsets<SubsetQueries, LoaderQueries>;
555
571
 
572
+ // SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
556
573
  const result = {} as Result;
557
574
  expectTypeOf(result).toEqualTypeOf<{
558
575
  A: {