sonamu 0.10.11 → 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 (519) 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 +133 -29
  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 +13 -7
  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 +61 -36
  142. package/dist/migration/migrator.d.ts.map +1 -1
  143. package/dist/migration/migrator.js +276 -167
  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/migration/types.d.ts +54 -0
  149. package/dist/migration/types.d.ts.map +1 -1
  150. package/dist/naite/naite-reporter.js +2 -2
  151. package/dist/naite/naite.d.ts +74 -15
  152. package/dist/naite/naite.d.ts.map +1 -1
  153. package/dist/naite/naite.js +5 -19
  154. package/dist/runtime-type.d.ts +6 -0
  155. package/dist/runtime-type.d.ts.map +1 -0
  156. package/dist/runtime-type.js +26 -0
  157. package/dist/ssr/hmr-opt-out.d.ts +26 -0
  158. package/dist/ssr/hmr-opt-out.d.ts.map +1 -0
  159. package/dist/ssr/hmr-opt-out.js +59 -0
  160. package/dist/ssr/renderer.d.ts.map +1 -1
  161. package/dist/ssr/renderer.js +4 -1
  162. package/dist/storage/base-file.js +14 -14
  163. package/dist/storage/buffered-file.d.ts +2 -2
  164. package/dist/storage/buffered-file.d.ts.map +1 -1
  165. package/dist/storage/buffered-file.js +12 -12
  166. package/dist/storage/s3-driver.d.ts.map +1 -1
  167. package/dist/storage/s3-driver.js +1 -1
  168. package/dist/storage/uploaded-file.d.ts +2 -2
  169. package/dist/storage/uploaded-file.d.ts.map +1 -1
  170. package/dist/storage/uploaded-file.js +8 -8
  171. package/dist/stream/sse.js +11 -11
  172. package/dist/stream/ws-core.d.ts +1 -1
  173. package/dist/stream/ws-core.d.ts.map +1 -1
  174. package/dist/stream/ws-delivery.d.ts +1 -1
  175. package/dist/stream/ws-delivery.d.ts.map +1 -1
  176. package/dist/stream/ws-delivery.js +6 -4
  177. package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
  178. package/dist/stream/ws-local-connection-store.js +4 -2
  179. package/dist/stream/ws-presence-store.js +1 -1
  180. package/dist/stream/ws-registry.d.ts +4 -4
  181. package/dist/stream/ws-registry.d.ts.map +1 -1
  182. package/dist/stream/ws-registry.js +4 -2
  183. package/dist/stream/ws-telemetry.d.ts +16 -12
  184. package/dist/stream/ws-telemetry.d.ts.map +1 -1
  185. package/dist/stream/ws-telemetry.js +22 -18
  186. package/dist/stream/ws.d.ts +18 -12
  187. package/dist/stream/ws.d.ts.map +1 -1
  188. package/dist/stream/ws.js +26 -22
  189. package/dist/syncer/api-parser.js +1 -1
  190. package/dist/syncer/checksum.d.ts.map +1 -1
  191. package/dist/syncer/checksum.js +7 -8
  192. package/dist/syncer/code-generator.d.ts.map +1 -1
  193. package/dist/syncer/code-generator.js +13 -14
  194. package/dist/syncer/entity-operations.d.ts.map +1 -1
  195. package/dist/syncer/entity-operations.js +5 -6
  196. package/dist/syncer/file-copy.d.ts +5 -0
  197. package/dist/syncer/file-copy.d.ts.map +1 -0
  198. package/dist/syncer/file-copy.js +36 -0
  199. package/dist/syncer/file-patterns.d.ts +1 -0
  200. package/dist/syncer/file-patterns.d.ts.map +1 -1
  201. package/dist/syncer/file-patterns.js +5 -2
  202. package/dist/syncer/file-tracking.d.ts.map +1 -1
  203. package/dist/syncer/file-tracking.js +5 -4
  204. package/dist/syncer/filesystem-dependencies.d.ts +15 -0
  205. package/dist/syncer/filesystem-dependencies.d.ts.map +1 -0
  206. package/dist/syncer/filesystem-dependencies.js +53 -0
  207. package/dist/syncer/module-loader.d.ts +1 -1
  208. package/dist/syncer/module-loader.d.ts.map +1 -1
  209. package/dist/syncer/module-loader.js +6 -4
  210. package/dist/syncer/syncer-actions.d.ts +4 -0
  211. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  212. package/dist/syncer/syncer-actions.js +34 -17
  213. package/dist/syncer/syncer.d.ts +17 -6
  214. package/dist/syncer/syncer.d.ts.map +1 -1
  215. package/dist/syncer/syncer.js +71 -29
  216. package/dist/syncer/watcher.d.ts.map +1 -1
  217. package/dist/syncer/watcher.js +3 -3
  218. package/dist/tasks/decorator.d.ts +6 -6
  219. package/dist/tasks/decorator.d.ts.map +1 -1
  220. package/dist/tasks/decorator.js +4 -4
  221. package/dist/tasks/step-wrapper.d.ts +6 -4
  222. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  223. package/dist/tasks/step-wrapper.js +5 -5
  224. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  225. package/dist/tasks/workflow-manager.js +13 -7
  226. package/dist/template/entity-converter.d.ts +1 -1
  227. package/dist/template/entity-converter.d.ts.map +1 -1
  228. package/dist/template/entity-converter.js +2 -2
  229. package/dist/template/helpers.d.ts +8 -6
  230. package/dist/template/helpers.d.ts.map +1 -1
  231. package/dist/template/helpers.js +1 -1
  232. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  233. package/dist/template/implementations/generated.template.js +4 -4
  234. package/dist/template/implementations/generated_http.template.d.ts +7 -4
  235. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  236. package/dist/template/implementations/generated_http.template.js +21 -21
  237. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  238. package/dist/template/implementations/generated_sso.template.js +6 -3
  239. package/dist/template/implementations/http_validators.template.d.ts +18 -0
  240. package/dist/template/implementations/http_validators.template.d.ts.map +1 -0
  241. package/dist/template/implementations/http_validators.template.js +127 -0
  242. package/dist/template/implementations/model.template.d.ts.map +1 -1
  243. package/dist/template/implementations/model.template.js +1 -1
  244. package/dist/template/implementations/queries.template.js +1 -1
  245. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  246. package/dist/template/implementations/sd.template.js +79 -39
  247. package/dist/template/implementations/services.template.d.ts.map +1 -1
  248. package/dist/template/implementations/services.template.js +6 -4
  249. package/dist/template/implementations/view_form.template.d.ts +6 -1
  250. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  251. package/dist/template/implementations/view_form.template.js +23 -15
  252. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  253. package/dist/template/implementations/view_list.template.js +11 -6
  254. package/dist/template/template-manager.d.ts.map +1 -1
  255. package/dist/template/template-manager.js +9 -7
  256. package/dist/template/template-types.d.ts +12 -5
  257. package/dist/template/template-types.d.ts.map +1 -1
  258. package/dist/template/template-types.js +1 -1
  259. package/dist/template/template.d.ts +2 -2
  260. package/dist/template/template.d.ts.map +1 -1
  261. package/dist/template/template.js +6 -4
  262. package/dist/template/zod-converter.d.ts +0 -19
  263. package/dist/template/zod-converter.d.ts.map +1 -1
  264. package/dist/template/zod-converter.js +100 -84
  265. package/dist/testing/_relation-graph.d.ts.map +1 -1
  266. package/dist/testing/_relation-graph.js +2 -1
  267. package/dist/testing/bootstrap.d.ts.map +1 -1
  268. package/dist/testing/bootstrap.js +9 -6
  269. package/dist/testing/data-explorer.d.ts +32 -7
  270. package/dist/testing/data-explorer.d.ts.map +1 -1
  271. package/dist/testing/data-explorer.js +77 -31
  272. package/dist/testing/dev-test-routes.d.ts +8 -1
  273. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  274. package/dist/testing/dev-test-routes.js +125 -108
  275. package/dist/testing/dev-vitest-manager.d.ts +54 -8
  276. package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
  277. package/dist/testing/dev-vitest-manager.js +24 -9
  278. package/dist/testing/faker-mappings.d.ts +412 -1
  279. package/dist/testing/faker-mappings.d.ts.map +1 -1
  280. package/dist/testing/faker-mappings.js +1 -1
  281. package/dist/testing/filesystem.d.ts +2 -0
  282. package/dist/testing/filesystem.d.ts.map +1 -0
  283. package/dist/testing/filesystem.js +7 -0
  284. package/dist/testing/fixture-generator.d.ts +25 -8
  285. package/dist/testing/fixture-generator.d.ts.map +1 -1
  286. package/dist/testing/fixture-generator.js +132 -73
  287. package/dist/testing/fixture-loader.d.ts +3 -1
  288. package/dist/testing/fixture-loader.d.ts.map +1 -1
  289. package/dist/testing/fixture-loader.js +1 -20
  290. package/dist/testing/fixture-manager.d.ts +8 -7
  291. package/dist/testing/fixture-manager.d.ts.map +1 -1
  292. package/dist/testing/fixture-manager.js +91 -59
  293. package/dist/testing/global-setup.d.ts.map +1 -1
  294. package/dist/testing/global-setup.js +5 -2
  295. package/dist/testing/index.d.ts +2 -0
  296. package/dist/testing/index.d.ts.map +1 -1
  297. package/dist/testing/index.js +6 -3
  298. package/dist/types/types.d.ts +101 -99
  299. package/dist/types/types.d.ts.map +1 -1
  300. package/dist/types/types.js +234 -225
  301. package/dist/ui/ai-api.d.ts.map +1 -1
  302. package/dist/ui/ai-api.js +1 -1
  303. package/dist/ui/ai-client.d.ts.map +1 -1
  304. package/dist/ui/ai-client.js +28 -18
  305. package/dist/ui/api.d.ts.map +1 -1
  306. package/dist/ui/api.js +146 -210
  307. package/dist/ui/async-route.d.ts +3 -0
  308. package/dist/ui/async-route.d.ts.map +1 -0
  309. package/dist/ui/async-route.js +12 -0
  310. package/dist/ui/cdd-service.d.ts +9 -7
  311. package/dist/ui/cdd-service.d.ts.map +1 -1
  312. package/dist/ui/cdd-service.js +7 -5
  313. package/dist/ui/migrations-api.d.ts +3 -0
  314. package/dist/ui/migrations-api.d.ts.map +1 -0
  315. package/dist/ui/migrations-api.js +215 -0
  316. package/dist/ui-web/assets/index-D3QNH-Dv.css +1 -0
  317. package/dist/ui-web/assets/index-DV1AAq6W.js +178 -0
  318. package/dist/ui-web/index.html +2 -2
  319. package/dist/utils/formatter.d.ts.map +1 -1
  320. package/dist/utils/formatter.js +7 -5
  321. package/dist/utils/fs-utils.d.ts +3 -3
  322. package/dist/utils/fs-utils.d.ts.map +1 -1
  323. package/dist/utils/fs-utils.js +6 -6
  324. package/dist/utils/model.d.ts +3 -5
  325. package/dist/utils/model.d.ts.map +1 -1
  326. package/dist/utils/model.js +1 -1
  327. package/dist/utils/object-utils.d.ts +1 -1
  328. package/dist/utils/object-utils.d.ts.map +1 -1
  329. package/dist/utils/object-utils.js +17 -16
  330. package/dist/utils/process-utils.d.ts.map +1 -1
  331. package/dist/utils/process-utils.js +4 -2
  332. package/dist/utils/runtime-value.d.ts +13 -0
  333. package/dist/utils/runtime-value.d.ts.map +1 -0
  334. package/dist/utils/runtime-value.js +40 -0
  335. package/dist/utils/sql-parser.d.ts +8 -1
  336. package/dist/utils/sql-parser.d.ts.map +1 -1
  337. package/dist/utils/sql-parser.js +6 -3
  338. package/dist/utils/type-utils.d.ts.map +1 -1
  339. package/dist/utils/type-utils.js +10 -8
  340. package/dist/utils/utils.d.ts +2 -2
  341. package/dist/utils/utils.d.ts.map +1 -1
  342. package/dist/utils/utils.js +11 -8
  343. package/dist/utils/zod-error.d.ts.map +1 -1
  344. package/dist/utils/zod-error.js +7 -4
  345. package/dist/vector/chunking.d.ts.map +1 -1
  346. package/dist/vector/chunking.js +1 -1
  347. package/dist/vector/embedding.d.ts.map +1 -1
  348. package/dist/vector/embedding.js +1 -1
  349. package/dist/vector/types.d.ts +3 -2
  350. package/dist/vector/types.d.ts.map +1 -1
  351. package/package.json +11 -7
  352. package/src/ai/agents/agent.ts +5 -5
  353. package/src/ai/agents/types.ts +1 -1
  354. package/src/ai/providers/rtzr/__tests__/model.test.ts +2 -2
  355. package/src/ai/providers/rtzr/error.ts +5 -3
  356. package/src/ai/providers/rtzr/model.ts +3 -2
  357. package/src/ai/providers/rtzr/options.ts +10 -5
  358. package/src/ai/providers/rtzr/provider.ts +10 -10
  359. package/src/ai/providers/rtzr/utils.ts +3 -1
  360. package/src/api/__tests__/config.test.ts +11 -21
  361. package/src/api/__tests__/sonamu.http-validator.test.ts +512 -0
  362. package/src/api/__tests__/sonamu.websocket.test.ts +51 -41
  363. package/src/api/__tests__/zod-compiler-policy.test.ts +95 -0
  364. package/src/api/caster.ts +6 -8
  365. package/src/api/code-converters.ts +136 -36
  366. package/src/api/config.ts +62 -4
  367. package/src/api/context.ts +3 -3
  368. package/src/api/decorators.ts +28 -17
  369. package/src/api/http-validator.ts +149 -0
  370. package/src/api/sonamu.ts +459 -152
  371. package/src/api/websocket-helpers.ts +24 -17
  372. package/src/auth/audit-log/builders.ts +3 -2
  373. package/src/auth/audit-log/client-ip.ts +4 -2
  374. package/src/auth/audit-log/events.ts +15 -1
  375. package/src/auth/audit-log/plugin.ts +129 -200
  376. package/src/auth/audit-log-ingestor.ts +19 -15
  377. package/src/auth/auth-generator.ts +10 -5
  378. package/src/auth/better-auth-request.ts +4 -3
  379. package/src/auth/knex-adapter.ts +8 -2
  380. package/src/auth/plugins/entity-definitions/index.ts +6 -5
  381. package/src/bin/__tests__/http-validator-benchmark.test.ts +94 -0
  382. package/src/bin/__tests__/test-command.test.ts +9 -15
  383. package/src/bin/__tests__/ts-loader-register.test.ts +15 -17
  384. package/src/bin/__tests__/zod-compiler-build.test.ts +307 -0
  385. package/src/bin/build-config.ts +167 -0
  386. package/src/bin/cli.ts +155 -38
  387. package/src/bin/compiler-policy.ts +35 -0
  388. package/src/bin/fixture.ts +14 -3
  389. package/src/bin/test-command.ts +74 -29
  390. package/src/bin/ts-loader-registration.ts +22 -4
  391. package/src/cache/decorator.ts +10 -3
  392. package/src/compress/compress.ts +17 -4
  393. package/src/cone/cone-generator.ts +34 -6
  394. package/src/database/__tests__/db.test.ts +1 -0
  395. package/src/database/__tests__/puri.test.ts +16 -15
  396. package/src/database/__tests__/transaction-scope.test.ts +5 -0
  397. package/src/database/_batch_update.ts +1 -0
  398. package/src/database/base-model.ts +81 -50
  399. package/src/database/base-model.types.ts +6 -6
  400. package/src/database/db.ts +29 -19
  401. package/src/database/knex.ts +30 -17
  402. package/src/database/puri-subset.test-d.ts +17 -0
  403. package/src/database/puri.ts +181 -143
  404. package/src/database/puri.types.test-d.ts +31 -1
  405. package/src/database/puri.types.ts +23 -21
  406. package/src/database/upsert-builder.ts +75 -53
  407. package/src/dict/sd.ts +15 -5
  408. package/src/dict/sonamu-dictionary.ts +6 -6
  409. package/src/dict/utils.ts +9 -1
  410. package/src/entity/entity-manager.ts +26 -9
  411. package/src/entity/entity-template-cone.ts +5 -10
  412. package/src/entity/entity.ts +50 -34
  413. package/src/env.ts +7 -3
  414. package/src/exceptions/error-handler.ts +17 -2
  415. package/src/exceptions/so-exceptions.ts +26 -20
  416. package/src/filter/utils.ts +21 -11
  417. package/src/index.ts +3 -0
  418. package/src/logger/configure.ts +26 -18
  419. package/src/migration/__tests__/migrator.test.ts +50 -57
  420. package/src/migration/code-generation.ts +132 -104
  421. package/src/migration/index-where-predicate.ts +51 -24
  422. package/src/migration/migration-set.ts +11 -5
  423. package/src/migration/migrator.ts +392 -244
  424. package/src/migration/postgresql-schema-reader.ts +52 -47
  425. package/src/migration/slack-confirm.ts +17 -15
  426. package/src/migration/types.ts +57 -0
  427. package/src/naite/naite-reporter.ts +1 -1
  428. package/src/naite/naite.ts +97 -24
  429. package/src/runtime-type.ts +34 -0
  430. package/src/ssr/hmr-opt-out.ts +78 -0
  431. package/src/ssr/renderer.ts +6 -0
  432. package/src/storage/base-file.ts +13 -13
  433. package/src/storage/buffered-file.ts +11 -11
  434. package/src/storage/s3-driver.ts +4 -1
  435. package/src/storage/uploaded-file.ts +8 -8
  436. package/src/stream/__tests__/ws-contracts.test.ts +4 -2
  437. package/src/stream/__tests__/ws-telemetry.test.ts +1 -1
  438. package/src/stream/__tests__/ws.test.ts +30 -6
  439. package/src/stream/sse.ts +12 -11
  440. package/src/stream/ws-core.ts +1 -1
  441. package/src/stream/ws-delivery.ts +16 -7
  442. package/src/stream/ws-local-connection-store.ts +2 -3
  443. package/src/stream/ws-presence-store.ts +6 -1
  444. package/src/stream/ws-registry.ts +16 -7
  445. package/src/stream/ws-telemetry.ts +66 -43
  446. package/src/stream/ws.ts +73 -39
  447. package/src/syncer/__tests__/api-parser.websocket-type-ref.test.ts +3 -2
  448. package/src/syncer/__tests__/http-validator-registry.test.ts +137 -0
  449. package/src/syncer/api-parser.ts +67 -27
  450. package/src/syncer/checksum.ts +17 -11
  451. package/src/syncer/code-generator.ts +25 -17
  452. package/src/syncer/entity-operations.ts +3 -5
  453. package/src/syncer/file-copy.ts +46 -0
  454. package/src/syncer/file-patterns.ts +11 -8
  455. package/src/syncer/file-tracking.ts +3 -4
  456. package/src/syncer/filesystem-dependencies.ts +73 -0
  457. package/src/syncer/module-loader.ts +8 -4
  458. package/src/syncer/syncer-actions.ts +56 -18
  459. package/src/syncer/syncer.ts +116 -43
  460. package/src/syncer/watcher.ts +8 -4
  461. package/src/tasks/decorator.ts +20 -12
  462. package/src/tasks/step-wrapper.ts +19 -9
  463. package/src/tasks/workflow-manager.ts +15 -9
  464. package/src/template/__tests__/http_validators.template.test.ts +160 -0
  465. package/src/template/__tests__/services.template.mutation.test.ts +24 -23
  466. package/src/template/__tests__/services.template.websocket.test.ts +21 -25
  467. package/src/template/entity-converter.ts +5 -2
  468. package/src/template/helpers.ts +8 -9
  469. package/src/template/implementations/generated.template.ts +5 -4
  470. package/src/template/implementations/generated_http.template.ts +61 -15
  471. package/src/template/implementations/generated_sso.template.ts +15 -4
  472. package/src/template/implementations/http_validators.template.ts +175 -0
  473. package/src/template/implementations/model.template.ts +3 -1
  474. package/src/template/implementations/sd.template.ts +81 -41
  475. package/src/template/implementations/services.template.ts +2 -2
  476. package/src/template/implementations/view_form.template.ts +56 -39
  477. package/src/template/implementations/view_list.template.ts +31 -23
  478. package/src/template/template-manager.ts +15 -13
  479. package/src/template/template-types.ts +13 -5
  480. package/src/template/template.ts +4 -3
  481. package/src/template/zod-converter.ts +206 -91
  482. package/src/testing/__tests__/dev-test-routes.test.ts +85 -25
  483. package/src/testing/__tests__/dev-vitest-manager.test.ts +15 -15
  484. package/src/testing/_relation-graph.ts +4 -1
  485. package/src/testing/bootstrap.ts +12 -5
  486. package/src/testing/data-explorer.ts +102 -53
  487. package/src/testing/dev-test-routes.ts +87 -50
  488. package/src/testing/dev-vitest-manager.ts +88 -32
  489. package/src/testing/faker-mappings.ts +2 -2
  490. package/src/testing/filesystem.ts +1 -0
  491. package/src/testing/fixture-generator.ts +191 -131
  492. package/src/testing/fixture-loader.ts +5 -1
  493. package/src/testing/fixture-manager.ts +129 -90
  494. package/src/testing/global-setup.ts +7 -3
  495. package/src/testing/index.ts +5 -0
  496. package/src/types/__tests__/entity-json-schema-search-text.test.ts +9 -3
  497. package/src/types/types.ts +184 -158
  498. package/src/ui/ai-api.ts +9 -7
  499. package/src/ui/ai-client.ts +61 -56
  500. package/src/ui/api.ts +726 -770
  501. package/src/ui/async-route.ts +4 -0
  502. package/src/ui/cdd-service.ts +35 -12
  503. package/src/ui/migrations-api.ts +381 -0
  504. package/src/utils/formatter.ts +7 -3
  505. package/src/utils/fs-utils.ts +5 -5
  506. package/src/utils/model.ts +4 -5
  507. package/src/utils/object-utils.ts +32 -22
  508. package/src/utils/process-utils.ts +4 -1
  509. package/src/utils/runtime-value.ts +43 -0
  510. package/src/utils/sql-parser.ts +13 -6
  511. package/src/utils/type-utils.ts +9 -7
  512. package/src/utils/utils.ts +19 -21
  513. package/src/utils/zod-error.ts +4 -2
  514. package/src/vector/chunking.ts +6 -1
  515. package/src/vector/embedding.ts +2 -1
  516. package/src/vector/types.ts +4 -2
  517. package/tsdown.api.config.ts +5 -2
  518. package/dist/ui-web/assets/index-CJf8uJYf.js +0 -176
  519. package/dist/ui-web/assets/index-GMMIVGja.css +0 -1
@@ -1,3 +1,12 @@
1
+ import {
2
+ isBigIntValue,
3
+ isFunctionValue,
4
+ isNumberValue,
5
+ isObjectValue,
6
+ isStringValue,
7
+ isSymbolValue,
8
+ } from "./runtime-value";
9
+
1
10
  type Primitive = string | number | boolean | null | undefined;
2
11
 
3
12
  type TypedArray =
@@ -84,8 +93,8 @@ export interface SerializableCheckResult {
84
93
  * isSerializable({ fn: () => {} }) // { valid: false, reason: "Function at fn" }
85
94
  * isSerializable({ deep: { nested: Promise.resolve() } }) // { valid: false, reason: "Promise at deep.nested" }
86
95
  */
87
- export function isSerializable(
88
- value: unknown,
96
+ export function isSerializable<Value>(
97
+ value: Value,
89
98
  path: string[] = [],
90
99
  seen: WeakSet<object> = new WeakSet(),
91
100
  ): SerializableCheckResult {
@@ -94,23 +103,26 @@ export function isSerializable(
94
103
  return { valid: true };
95
104
  }
96
105
 
97
- const type = typeof value;
98
- if (type === "string" || type === "number" || type === "boolean" || type === "undefined") {
99
- return { valid: true };
100
- }
101
- if (type === "bigint") {
106
+ if (
107
+ isStringValue(value) ||
108
+ isNumberValue(value) ||
109
+ value === true ||
110
+ value === false ||
111
+ value === undefined ||
112
+ isBigIntValue(value)
113
+ ) {
102
114
  return { valid: true };
103
115
  }
104
116
 
105
- if (type === "function") {
117
+ if (isFunctionValue(value)) {
106
118
  return { valid: false, reason: `Function at ${formatPath(path)}` };
107
119
  }
108
- if (type === "symbol") {
120
+ if (isSymbolValue(value)) {
109
121
  return { valid: false, reason: `Symbol at ${formatPath(path)}` };
110
122
  }
111
123
 
112
- if (type === "object") {
113
- const obj = value as object;
124
+ if (isObjectValue(value)) {
125
+ const obj = value;
114
126
 
115
127
  if (obj instanceof Promise) {
116
128
  return { valid: false, reason: `Promise at ${formatPath(path)}` };
@@ -126,7 +138,7 @@ export function isSerializable(
126
138
  if (obj instanceof WeakSet) {
127
139
  return { valid: false, reason: `WeakSet at ${formatPath(path)}` };
128
140
  }
129
- if (typeof WeakRef !== "undefined" && obj instanceof WeakRef) {
141
+ if ("WeakRef" in globalThis && obj instanceof WeakRef) {
130
142
  return { valid: false, reason: `WeakRef at ${formatPath(path)}` };
131
143
  }
132
144
 
@@ -179,13 +191,11 @@ export function isSerializable(
179
191
 
180
192
  // Vitest는 Error를 허용하지만 속성은 직렬화 필요
181
193
  if (obj instanceof Error) {
182
- const errorProps = Object.keys(obj).filter((k) => !["name", "message", "stack"].includes(k));
183
- for (const key of errorProps) {
184
- const result = isSerializable(
185
- (obj as unknown as Record<string, unknown>)[key],
186
- [...path, key],
187
- seen,
188
- );
194
+ const errorEntries = Object.entries(obj).filter(
195
+ ([key]) => !["name", "message", "stack"].includes(key),
196
+ );
197
+ for (const [key, nestedValue] of errorEntries) {
198
+ const result = isSerializable(nestedValue, [...path, key], seen);
189
199
  if (!result.valid) return result;
190
200
  }
191
201
  return { valid: true };
@@ -201,14 +211,14 @@ export function isSerializable(
201
211
  };
202
212
  }
203
213
 
204
- for (const key of Object.keys(obj)) {
205
- const result = isSerializable((obj as Record<string, unknown>)[key], [...path, key], seen);
214
+ for (const [key, nestedValue] of Object.entries(obj)) {
215
+ const result = isSerializable(nestedValue, [...path, key], seen);
206
216
  if (!result.valid) return result;
207
217
  }
208
218
  return { valid: true };
209
219
  }
210
220
 
211
- return { valid: false, reason: `Unknown type (${type}) at ${formatPath(path)}` };
221
+ return { valid: false, reason: `Unknown value at ${formatPath(path)}` };
212
222
  }
213
223
 
214
224
  function formatPath(path: string[]): string {
@@ -4,6 +4,8 @@ import { promisify } from "util";
4
4
 
5
5
  import chalk from "chalk";
6
6
 
7
+ import { isStringValue } from "./runtime-value";
8
+
7
9
  const execFileAsync = promisify(execFile);
8
10
 
9
11
  /**
@@ -16,7 +18,7 @@ export async function execute(
16
18
  options?: ExecFileOptions,
17
19
  ): Promise<string> {
18
20
  const { stdout } = await execFileAsync(bin, args, options);
19
- return typeof stdout === "string" ? stdout : stdout.toString();
21
+ return isStringValue(stdout) ? stdout : stdout.toString();
20
22
  }
21
23
 
22
24
  /**
@@ -37,6 +39,7 @@ export async function runWithGracefulShutdown(
37
39
  waitForUpTo: 20000,
38
40
  },
39
41
  ): Promise<void> {
42
+ // SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
40
43
  let isRunning = true as boolean;
41
44
 
42
45
  const abortController = new AbortController();
@@ -0,0 +1,43 @@
1
+ function hasPrimitiveTag<Value>(value: Value, tag: string): boolean {
2
+ return Object.prototype.toString.call(value) === tag && Object(value) !== value;
3
+ }
4
+
5
+ /** 런타임 값이 원시 문자열인지 판별합니다. */
6
+ export function isStringValue<Value>(value: Value): value is Value & string {
7
+ return hasPrimitiveTag(value, "[object String]");
8
+ }
9
+
10
+ /** 런타임 값이 원시 숫자인지 판별합니다. */
11
+ export function isNumberValue<Value>(value: Value): value is Value & number {
12
+ return hasPrimitiveTag(value, "[object Number]");
13
+ }
14
+
15
+ /** 런타임 값이 원시 심벌인지 판별합니다. */
16
+ export function isSymbolValue<Value>(value: Value): value is Value & symbol {
17
+ return hasPrimitiveTag(value, "[object Symbol]");
18
+ }
19
+
20
+ /** 런타임 값이 원시 bigint인지 판별합니다. */
21
+ export function isBigIntValue<Value>(value: Value): value is Value & bigint {
22
+ return hasPrimitiveTag(value, "[object BigInt]");
23
+ }
24
+
25
+ /** 런타임 값이 함수인지 판별합니다. */
26
+ export function isFunctionValue<Value>(value: Value): value is Value & CallableFunction {
27
+ try {
28
+ const tag = Object.prototype.toString.call(value);
29
+ return (
30
+ tag === "[object Function]" ||
31
+ tag === "[object AsyncFunction]" ||
32
+ tag === "[object GeneratorFunction]" ||
33
+ tag === "[object AsyncGeneratorFunction]"
34
+ );
35
+ } catch {
36
+ return false;
37
+ }
38
+ }
39
+
40
+ /** null과 함수를 제외한 객체 표현인지 판별합니다. */
41
+ export function isObjectValue<Value>(value: Value): value is Value & object {
42
+ return value !== null && Object(value) === value && !isFunctionValue(value);
43
+ }
@@ -9,15 +9,21 @@ import {
9
9
  } from "node-sql-parser";
10
10
  import { unique } from "radashi";
11
11
 
12
+ import { isObjectValue, isStringValue } from "./runtime-value";
12
13
  import { nonNullable } from "./utils";
13
14
 
14
- export function getTableName(expr: ColumnRef) {
15
- if ("table" in expr && expr.table !== null) {
16
- return typeof expr.table === "string"
17
- ? expr.table
18
- : (expr.table as { type: string; value: string }).value;
15
+ type ParserColumnRef = Omit<ColumnRef, "table"> & {
16
+ table?: string | { type: string; value: string } | null;
17
+ };
18
+
19
+ export function getTableName(expr: ParserColumnRef) {
20
+ const table = expr.table;
21
+ if (isStringValue(table)) {
22
+ return table;
19
23
  }
20
- return null;
24
+ return isObjectValue(table) && "value" in table && isStringValue(table.value)
25
+ ? table.value
26
+ : null;
21
27
  }
22
28
 
23
29
  // where 조건에 사용된 테이블명을 추출
@@ -29,6 +35,7 @@ export function getTableNamesFromWhere(ast: AST | AST[]): string[] {
29
35
 
30
36
  const extractTableName = (expr: Expr | ExpressionValue): string[] => {
31
37
  if (expr.type === "column_ref") {
38
+ // SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
32
39
  const table = getTableName(expr as ColumnRef);
33
40
  return table ? [table] : [];
34
41
  } else if (expr.type === "binary_expr" && "left" in expr) {
@@ -1,3 +1,4 @@
1
+ import { isObjectValue } from "./runtime-value";
1
2
  // 타입을 펼쳐서 보여주는 유틸리티 (객체에만 사용해야 함)
2
3
  type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
3
4
 
@@ -32,9 +33,9 @@ export function withProp<T extends object, P extends string, V>(
32
33
  const result = structuredClone(obj);
33
34
 
34
35
  // oxlint-disable-next-line @typescript-eslint/no-explicit-any -- 범용 배열 요소 타입
35
- const setDeep = (current: any, keys: string[], value: V): void => {
36
- if (keys.length === 0) return;
37
- const [key, ...rest] = keys;
36
+ const setDeep = (current: any, pathKeys: string[]): void => {
37
+ if (pathKeys.length === 0) return;
38
+ const [key, ...rest] = pathKeys;
38
39
 
39
40
  if (rest.length === 0) {
40
41
  if (Array.isArray(current)) {
@@ -45,21 +46,22 @@ export function withProp<T extends object, P extends string, V>(
45
46
  current[key] = value;
46
47
  }
47
48
  } else {
48
- if (!(key in current) || typeof current[key] !== "object") {
49
+ if (!(key in current) || !isObjectValue(current[key])) {
49
50
  current[key] = {};
50
51
  }
51
52
  if (Array.isArray(current[key])) {
52
53
  // oxlint-disable-next-line @typescript-eslint/no-explicit-any -- 범용 배열 요소 타입
53
54
  current[key].forEach((item: any) => {
54
- setDeep(item, rest, value);
55
+ setDeep(item, rest);
55
56
  });
56
57
  } else {
57
- setDeep(current[key], rest, value);
58
+ setDeep(current[key], rest);
58
59
  }
59
60
  }
60
61
  };
61
62
 
62
- setDeep(result, keys, value);
63
+ setDeep(result, keys);
64
+ // SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
63
65
  return result as SetPath<T, P, V>;
64
66
  }
65
67
 
@@ -4,9 +4,11 @@ import path from "path";
4
4
  import { type FastifyRequest } from "fastify";
5
5
 
6
6
  import { type AbsolutePath } from "./path-utils";
7
+ import { isObjectValue } from "./runtime-value";
7
8
 
8
9
  export function findAppRootPath(): AbsolutePath {
9
10
  const apiRootPath = findApiRootPath();
11
+ // SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
10
12
  return path.dirname(apiRootPath) as AbsolutePath;
11
13
  }
12
14
 
@@ -15,15 +17,18 @@ export function findApiRootPath(): AbsolutePath {
15
17
  // 하지만 workspace 쓰면 process.cwd() 하면 되는데... 이건 나중에 협의 후 수정하는걸로
16
18
  const workspacePath = process.env.PNPM_SCRIPT_SRC_DIR ?? process.env.INIT_CWD;
17
19
  if (nonNullable(workspacePath)) {
20
+ // SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
18
21
  return workspacePath as AbsolutePath;
19
22
  }
20
23
 
21
24
  if (nonNullable(process.env.PNPM_PACKAGE_NAME)) {
25
+ // SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
22
26
  return process.cwd().split(path.sep).join(path.sep) as AbsolutePath;
23
27
  }
24
28
 
25
29
  const cwdPackagePath = path.join(process.cwd(), "package.json");
26
30
  if (fs.existsSync(cwdPackagePath)) {
31
+ // SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
27
32
  return process.cwd().split(path.sep).join(path.sep) as AbsolutePath;
28
33
  }
29
34
 
@@ -35,6 +40,7 @@ export function findApiRootPath(): AbsolutePath {
35
40
 
36
41
  do {
37
42
  if (fs.existsSync(path.join(dir, "/package.json"))) {
43
+ // SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
38
44
  return dir.split(path.sep).join(path.sep) as AbsolutePath;
39
45
  }
40
46
  dir = dir.split(path.sep).slice(0, -1).join(path.sep);
@@ -91,26 +97,18 @@ export function differenceWith<T>(
91
97
  return arr1.filter((itemA) => !arr2.some((itemB) => comparator(itemA, itemB)));
92
98
  }
93
99
 
94
- // biome-ignore lint/suspicious/noExplicitAny: dynamic property access
95
- export function merge<T extends Record<string, any>>(defaultObj: T, userObj: T): T {
96
- // 원본 보존을 위해 defaultObj 복사
100
+ export function merge<T extends object>(defaultObj: T, userObj: T): T {
101
+ // 원본을 보존하면서 사용자 설정의 own enumerable 속성만 병합합니다.
97
102
  const result = { ...defaultObj };
98
-
99
- // userObj의 각 속성을 순회
100
- for (const key in userObj) {
101
- // userObj의 own property만 처리 (프로토타입 체인 제외)
102
- if (Object.hasOwn(userObj, key)) {
103
- const userValue = userObj[key];
104
- const defaultValue = result[key];
105
-
106
- // 두 값이 모두 객체이고, 배열이 아닌 경우 재귀적으로 병합
107
- if (isPlainObject(userValue) && isPlainObject(defaultValue)) {
108
- result[key] = merge(defaultValue, userValue);
109
- } else {
110
- // 그 외의 경우 userObj의 값으로 덮어쓰기
111
- result[key] = userValue;
112
- }
113
- }
103
+ const defaultEntries = new Map(Object.entries(defaultObj));
104
+
105
+ for (const [key, userValue] of Object.entries(userObj)) {
106
+ const defaultValue = defaultEntries.get(key);
107
+ const mergedValue =
108
+ isPlainObject(userValue) && isPlainObject(defaultValue)
109
+ ? merge(defaultValue, userValue)
110
+ : userValue;
111
+ Object.assign(result, { [key]: mergedValue });
114
112
  }
115
113
 
116
114
  return result;
@@ -118,10 +116,10 @@ export function merge<T extends Record<string, any>>(defaultObj: T, userObj: T):
118
116
 
119
117
  // plain object 판별 헬퍼 함수
120
118
  // (배열, null, Date 등을 제외한 순수 객체만 true)
121
- export function isPlainObject(value: unknown): value is Record<string, unknown> {
119
+ export function isPlainObject<Value>(value: Value): value is Value & object {
122
120
  return (
123
121
  value !== null &&
124
- typeof value === "object" &&
122
+ isObjectValue(value) &&
125
123
  !Array.isArray(value) &&
126
124
  Object.prototype.toString.call(value) === "[object Object]"
127
125
  );
@@ -1,5 +1,7 @@
1
1
  import { type z } from "zod";
2
2
 
3
+ import { isNumberValue, isSymbolValue } from "./runtime-value";
4
+
3
5
  type ValidationError = {
4
6
  path: string[];
5
7
  message: string;
@@ -8,11 +10,11 @@ type ValidationError = {
8
10
  export function humanizeZodError(error: z.ZodError): ValidationError[] {
9
11
  return error.issues.map(({ path: originPath, message }) => {
10
12
  const path = originPath.map((item) => {
11
- if (typeof item === "symbol") {
13
+ if (isSymbolValue(item)) {
12
14
  return item.description ?? item.toString();
13
15
  }
14
16
 
15
- if (typeof item === "number") {
17
+ if (isNumberValue(item)) {
16
18
  return `[${item}]`;
17
19
  }
18
20
 
@@ -1,6 +1,11 @@
1
1
  import { DEFAULT_VECTOR_CONFIG } from "./config";
2
2
  import { type Chunk, type ChunkingConfig } from "./types";
3
3
 
4
+ interface ExtractedChunk {
5
+ chunk: string;
6
+ length: number;
7
+ }
8
+
4
9
  /**
5
10
  * 텍스트 청킹
6
11
  * - 현재 가이드에서는 400토큰 이하만 저장하므로 기본적으로 사용하지 않음
@@ -69,7 +74,7 @@ export class Chunking {
69
74
  return Math.ceil(text.length / effectiveChunkSize);
70
75
  }
71
76
 
72
- private extractChunk(text: string): { chunk: string; length: number } {
77
+ private extractChunk(text: string): ExtractedChunk {
73
78
  if (text.length <= this.config.chunkSize) {
74
79
  return { chunk: text, length: text.length };
75
80
  }
@@ -139,7 +139,8 @@ class EmbeddingClass {
139
139
  const model = openai.embeddingModel(openaiConfig.model);
140
140
 
141
141
  const { embeddings, usage } = await embedMany({
142
- model: model as EmbeddingModel,
142
+ model:
143
+ /* SAFETY: 호출 경계의 선행 검증과 소유 타입 계약이 이 값의 타입을 보장한다. */ model as EmbeddingModel,
143
144
  values: texts,
144
145
  });
145
146
 
@@ -2,6 +2,8 @@
2
2
  * pgvector 통합을 위한 타입 정의
3
3
  */
4
4
 
5
+ import { type JsonValue } from "../types/types";
6
+
5
7
  /** 임베딩 제공자 */
6
8
  export type EmbeddingProvider = "voyage" | "openai";
7
9
 
@@ -24,14 +26,14 @@ export interface Chunk {
24
26
  }
25
27
 
26
28
  /** 벡터 검색 결과 */
27
- export interface VectorSearchResult<T = Record<string, unknown>> {
29
+ export interface VectorSearchResult<T = Record<string, JsonValue>> {
28
30
  id: number | string;
29
31
  similarity: number;
30
32
  data: T;
31
33
  }
32
34
 
33
35
  /** 하이브리드 검색 결과 (Vector + FTS) */
34
- export interface HybridSearchResult<T = Record<string, unknown>> extends VectorSearchResult<T> {
36
+ export interface HybridSearchResult<T = Record<string, JsonValue>> extends VectorSearchResult<T> {
35
37
  vectorScore?: number;
36
38
  ftsScore?: number;
37
39
  }
@@ -6,9 +6,12 @@ import { defineConfig } from "tsdown";
6
6
  const srcRoot = path.resolve(process.cwd(), "src");
7
7
  const ignoredSuffixes = [".test.ts", ".test-hold.ts", ".ignore.ts", ".d.ts"];
8
8
  const ignoredDirectories = new Set(["__mocks__", "_templates", "wasted_src"]);
9
+ interface BuildEntries {
10
+ [entryName: string]: string;
11
+ }
9
12
 
10
- function collectEntries(directory: string): Record<string, string> {
11
- const entries: Record<string, string> = {};
13
+ function collectEntries(directory: string): BuildEntries {
14
+ const entries: BuildEntries = {};
12
15
 
13
16
  for (const entry of readdirSync(directory)) {
14
17
  if (ignoredDirectories.has(entry)) {