sonamu 0.10.12 → 0.11.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 (626) 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/base-frame.d.ts.map +1 -1
  18. package/dist/api/caster.d.ts.map +1 -1
  19. package/dist/api/caster.js +17 -17
  20. package/dist/api/code-converters.d.ts +4 -2
  21. package/dist/api/code-converters.d.ts.map +1 -1
  22. package/dist/api/code-converters.js +100 -19
  23. package/dist/api/config.d.ts +16 -1
  24. package/dist/api/config.d.ts.map +1 -1
  25. package/dist/api/config.js +28 -21
  26. package/dist/api/context.d.ts +2 -2
  27. package/dist/api/context.d.ts.map +1 -1
  28. package/dist/api/context.js +1 -1
  29. package/dist/api/decorators.d.ts.map +1 -1
  30. package/dist/api/decorators.js +18 -11
  31. package/dist/api/http-validator.d.ts +36 -0
  32. package/dist/api/http-validator.d.ts.map +1 -0
  33. package/dist/api/http-validator.js +72 -0
  34. package/dist/api/index.js +6 -4
  35. package/dist/api/sonamu.d.ts +59 -20
  36. package/dist/api/sonamu.d.ts.map +1 -1
  37. package/dist/api/sonamu.js +252 -107
  38. package/dist/api/validator.d.ts.map +1 -1
  39. package/dist/api/websocket-helpers.d.ts +7 -5
  40. package/dist/api/websocket-helpers.d.ts.map +1 -1
  41. package/dist/api/websocket-helpers.js +6 -6
  42. package/dist/auth/audit-log/builders.d.ts.map +1 -1
  43. package/dist/auth/audit-log/builders.js +1 -1
  44. package/dist/auth/audit-log/client-ip.d.ts +1 -1
  45. package/dist/auth/audit-log/client-ip.d.ts.map +1 -1
  46. package/dist/auth/audit-log/client-ip.js +4 -2
  47. package/dist/auth/audit-log/events.d.ts +5 -1
  48. package/dist/auth/audit-log/events.d.ts.map +1 -1
  49. package/dist/auth/audit-log/events.js +1 -1
  50. package/dist/auth/audit-log/plugin.d.ts +0 -8
  51. package/dist/auth/audit-log/plugin.d.ts.map +1 -1
  52. package/dist/auth/audit-log/plugin.js +48 -52
  53. package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
  54. package/dist/auth/audit-log-ingestor.js +16 -12
  55. package/dist/auth/auth-generator.d.ts.map +1 -1
  56. package/dist/auth/auth-generator.js +1 -1
  57. package/dist/auth/better-auth-request.d.ts.map +1 -1
  58. package/dist/auth/better-auth-request.js +6 -5
  59. package/dist/auth/index.d.ts +1 -1
  60. package/dist/auth/index.d.ts.map +1 -1
  61. package/dist/auth/index.js +3 -3
  62. package/dist/auth/knex-adapter.d.ts.map +1 -1
  63. package/dist/auth/knex-adapter.js +1 -1
  64. package/dist/auth/plugins/entity-definitions/index.d.ts +13 -1
  65. package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
  66. package/dist/auth/plugins/entity-definitions/index.js +1 -1
  67. package/dist/auth/plugins/wrappers/admin.d.ts +4 -4
  68. package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
  69. package/dist/auth/plugins/wrappers/anonymous.d.ts.map +1 -1
  70. package/dist/auth/plugins/wrappers/api-key.d.ts.map +1 -1
  71. package/dist/auth/plugins/wrappers/jwt.d.ts.map +1 -1
  72. package/dist/auth/plugins/wrappers/organization.d.ts.map +1 -1
  73. package/dist/auth/plugins/wrappers/passkey.d.ts.map +1 -1
  74. package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
  75. package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
  76. package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
  77. package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
  78. package/dist/bin/build-config.d.ts +35 -0
  79. package/dist/bin/build-config.d.ts.map +1 -1
  80. package/dist/bin/build-config.js +232 -5
  81. package/dist/bin/compiler-policy.d.ts +3 -0
  82. package/dist/bin/compiler-policy.d.ts.map +1 -0
  83. package/dist/bin/compiler-policy.js +24 -0
  84. package/dist/bin/fixture.d.ts +7 -4
  85. package/dist/bin/fixture.d.ts.map +1 -1
  86. package/dist/bin/fixture.js +165 -15
  87. package/dist/bin/test-command.d.ts +29 -1
  88. package/dist/bin/test-command.d.ts.map +1 -1
  89. package/dist/bin/test-command.js +33 -11
  90. package/dist/bin/ts-loader-registration.d.ts +7 -1
  91. package/dist/bin/ts-loader-registration.d.ts.map +1 -1
  92. package/dist/bin/ts-loader-registration.js +13 -4
  93. package/dist/bin/typecheck-web.d.ts +2 -0
  94. package/dist/bin/typecheck-web.d.ts.map +1 -0
  95. package/dist/bin/typecheck-web.js +36 -0
  96. package/dist/cache/decorator.d.ts.map +1 -1
  97. package/dist/cache/decorator.js +11 -4
  98. package/dist/cache/drivers.d.ts.map +1 -1
  99. package/dist/cache-control/cache-control.d.ts.map +1 -1
  100. package/dist/compress/compress.d.ts.map +1 -1
  101. package/dist/compress/compress.js +1 -1
  102. package/dist/cone/cone-generator.d.ts +14 -1
  103. package/dist/cone/cone-generator.d.ts.map +1 -1
  104. package/dist/cone/cone-generator.js +14 -10
  105. package/dist/database/_batch_update.js +1 -1
  106. package/dist/database/base-model.d.ts +22 -10
  107. package/dist/database/base-model.d.ts.map +1 -1
  108. package/dist/database/base-model.js +26 -16
  109. package/dist/database/base-model.types.d.ts +15 -4
  110. package/dist/database/base-model.types.d.ts.map +1 -1
  111. package/dist/database/db.d.ts +12 -2
  112. package/dist/database/db.d.ts.map +1 -1
  113. package/dist/database/db.js +10 -7
  114. package/dist/database/knex.d.ts.map +1 -1
  115. package/dist/database/knex.js +17 -14
  116. package/dist/database/puri-subset.types.d.ts +0 -1
  117. package/dist/database/puri-subset.types.d.ts.map +1 -1
  118. package/dist/database/puri-wrapper.d.ts +0 -1
  119. package/dist/database/puri-wrapper.d.ts.map +1 -1
  120. package/dist/database/puri.d.ts +11 -10
  121. package/dist/database/puri.d.ts.map +1 -1
  122. package/dist/database/puri.js +93 -79
  123. package/dist/database/puri.types.d.ts +21 -22
  124. package/dist/database/puri.types.d.ts.map +1 -1
  125. package/dist/database/puri.types.js +1 -1
  126. package/dist/database/transaction-context.d.ts.map +1 -1
  127. package/dist/database/upsert-builder.d.ts +12 -10
  128. package/dist/database/upsert-builder.d.ts.map +1 -1
  129. package/dist/database/upsert-builder.js +20 -12
  130. package/dist/dict/en.d.ts +58 -58
  131. package/dist/dict/en.d.ts.map +1 -1
  132. package/dist/dict/ko.d.ts +58 -58
  133. package/dist/dict/ko.d.ts.map +1 -1
  134. package/dist/dict/rc-keys.d.ts.map +1 -1
  135. package/dist/dict/sd.d.ts.map +1 -1
  136. package/dist/dict/sd.js +1 -1
  137. package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
  138. package/dist/dict/sonamu-dictionary.js +2 -2
  139. package/dist/dict/utils.d.ts.map +1 -1
  140. package/dist/dict/utils.js +7 -2
  141. package/dist/entity/entity-manager.d.ts +126 -115
  142. package/dist/entity/entity-manager.d.ts.map +1 -1
  143. package/dist/entity/entity-manager.js +42 -28
  144. package/dist/entity/entity-template-cone.d.ts +73 -5
  145. package/dist/entity/entity-template-cone.d.ts.map +1 -1
  146. package/dist/entity/entity-template-cone.js +4 -2
  147. package/dist/entity/entity.d.ts +12 -3
  148. package/dist/entity/entity.d.ts.map +1 -1
  149. package/dist/entity/entity.js +37 -30
  150. package/dist/env.d.ts +3 -1
  151. package/dist/env.d.ts.map +1 -1
  152. package/dist/env.js +1 -1
  153. package/dist/exceptions/error-handler.d.ts.map +1 -1
  154. package/dist/exceptions/error-handler.js +7 -2
  155. package/dist/exceptions/so-exceptions.d.ts +24 -20
  156. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  157. package/dist/exceptions/so-exceptions.js +4 -2
  158. package/dist/filter/types.d.ts.map +1 -1
  159. package/dist/filter/utils.d.ts +7 -2
  160. package/dist/filter/utils.d.ts.map +1 -1
  161. package/dist/filter/utils.js +8 -6
  162. package/dist/index.d.ts +3 -0
  163. package/dist/index.d.ts.map +1 -1
  164. package/dist/index.js +17 -11
  165. package/dist/logger/configure.d.ts +10 -1
  166. package/dist/logger/configure.d.ts.map +1 -1
  167. package/dist/logger/configure.js +39 -14
  168. package/dist/migration/code-generation.d.ts.map +1 -1
  169. package/dist/migration/code-generation.js +50 -46
  170. package/dist/migration/index-where-predicate.d.ts.map +1 -1
  171. package/dist/migration/index-where-predicate.js +22 -8
  172. package/dist/migration/migration-set.d.ts.map +1 -1
  173. package/dist/migration/migration-set.js +1 -1
  174. package/dist/migration/migrator.d.ts +15 -3
  175. package/dist/migration/migrator.d.ts.map +1 -1
  176. package/dist/migration/migrator.js +102 -49
  177. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  178. package/dist/migration/postgresql-schema-reader.js +51 -36
  179. package/dist/migration/slack-confirm.d.ts.map +1 -1
  180. package/dist/migration/slack-confirm.js +1 -1
  181. package/dist/naite/messaging-types.d.ts +0 -1
  182. package/dist/naite/messaging-types.d.ts.map +1 -1
  183. package/dist/naite/naite-reporter.d.ts +0 -1
  184. package/dist/naite/naite-reporter.d.ts.map +1 -1
  185. package/dist/naite/naite-reporter.js +2 -2
  186. package/dist/naite/naite.d.ts +74 -15
  187. package/dist/naite/naite.d.ts.map +1 -1
  188. package/dist/naite/naite.js +5 -19
  189. package/dist/runtime-type.d.ts +6 -0
  190. package/dist/runtime-type.d.ts.map +1 -0
  191. package/dist/runtime-type.js +26 -0
  192. package/dist/ssr/hmr-opt-out.d.ts +26 -0
  193. package/dist/ssr/hmr-opt-out.d.ts.map +1 -0
  194. package/dist/ssr/hmr-opt-out.js +59 -0
  195. package/dist/ssr/renderer.d.ts.map +1 -1
  196. package/dist/ssr/renderer.js +4 -1
  197. package/dist/storage/base-file.d.ts.map +1 -1
  198. package/dist/storage/base-file.js +14 -14
  199. package/dist/storage/buffered-file.d.ts +2 -2
  200. package/dist/storage/buffered-file.d.ts.map +1 -1
  201. package/dist/storage/buffered-file.js +12 -12
  202. package/dist/storage/drivers.d.ts.map +1 -1
  203. package/dist/storage/s3-driver.d.ts.map +1 -1
  204. package/dist/storage/s3-driver.js +1 -1
  205. package/dist/storage/storage-manager.d.ts.map +1 -1
  206. package/dist/storage/uploaded-file.d.ts +2 -2
  207. package/dist/storage/uploaded-file.d.ts.map +1 -1
  208. package/dist/storage/uploaded-file.js +8 -8
  209. package/dist/stream/sse.js +11 -11
  210. package/dist/stream/ws-audience-resolver.d.ts.map +1 -1
  211. package/dist/stream/ws-audience.d.ts.map +1 -1
  212. package/dist/stream/ws-cluster-bus.d.ts.map +1 -1
  213. package/dist/stream/ws-core.d.ts +1 -1
  214. package/dist/stream/ws-core.d.ts.map +1 -1
  215. package/dist/stream/ws-delivery.d.ts +1 -1
  216. package/dist/stream/ws-delivery.d.ts.map +1 -1
  217. package/dist/stream/ws-delivery.js +6 -4
  218. package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
  219. package/dist/stream/ws-local-connection-store.js +4 -2
  220. package/dist/stream/ws-presence-store.d.ts.map +1 -1
  221. package/dist/stream/ws-presence-store.js +1 -1
  222. package/dist/stream/ws-registry.d.ts +4 -4
  223. package/dist/stream/ws-registry.d.ts.map +1 -1
  224. package/dist/stream/ws-registry.js +4 -2
  225. package/dist/stream/ws-telemetry-memory.d.ts.map +1 -1
  226. package/dist/stream/ws-telemetry.d.ts +16 -12
  227. package/dist/stream/ws-telemetry.d.ts.map +1 -1
  228. package/dist/stream/ws-telemetry.js +22 -18
  229. package/dist/stream/ws.d.ts +18 -12
  230. package/dist/stream/ws.d.ts.map +1 -1
  231. package/dist/stream/ws.js +26 -22
  232. package/dist/syncer/api-parser.js +2 -2
  233. package/dist/syncer/checksum.d.ts.map +1 -1
  234. package/dist/syncer/checksum.js +7 -8
  235. package/dist/syncer/code-generator.d.ts.map +1 -1
  236. package/dist/syncer/code-generator.js +13 -14
  237. package/dist/syncer/entity-operations.d.ts.map +1 -1
  238. package/dist/syncer/entity-operations.js +5 -6
  239. package/dist/syncer/file-copy.d.ts +5 -0
  240. package/dist/syncer/file-copy.d.ts.map +1 -0
  241. package/dist/syncer/file-copy.js +36 -0
  242. package/dist/syncer/file-patterns.d.ts +17 -16
  243. package/dist/syncer/file-patterns.d.ts.map +1 -1
  244. package/dist/syncer/file-patterns.js +5 -2
  245. package/dist/syncer/file-tracking.d.ts.map +1 -1
  246. package/dist/syncer/file-tracking.js +5 -4
  247. package/dist/syncer/filesystem-dependencies.d.ts +15 -0
  248. package/dist/syncer/filesystem-dependencies.d.ts.map +1 -0
  249. package/dist/syncer/filesystem-dependencies.js +53 -0
  250. package/dist/syncer/module-loader.d.ts +1 -1
  251. package/dist/syncer/module-loader.d.ts.map +1 -1
  252. package/dist/syncer/module-loader.js +6 -4
  253. package/dist/syncer/syncer-actions.d.ts +4 -0
  254. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  255. package/dist/syncer/syncer-actions.js +34 -17
  256. package/dist/syncer/syncer.d.ts +17 -6
  257. package/dist/syncer/syncer.d.ts.map +1 -1
  258. package/dist/syncer/syncer.js +71 -29
  259. package/dist/syncer/watcher.d.ts.map +1 -1
  260. package/dist/syncer/watcher.js +3 -3
  261. package/dist/tasks/decorator.d.ts +6 -6
  262. package/dist/tasks/decorator.d.ts.map +1 -1
  263. package/dist/tasks/decorator.js +4 -4
  264. package/dist/tasks/step-wrapper.d.ts +6 -4
  265. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  266. package/dist/tasks/step-wrapper.js +5 -5
  267. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  268. package/dist/tasks/workflow-manager.js +13 -7
  269. package/dist/template/entity-converter.d.ts +1 -1
  270. package/dist/template/entity-converter.d.ts.map +1 -1
  271. package/dist/template/entity-converter.js +2 -2
  272. package/dist/template/helpers.d.ts +8 -6
  273. package/dist/template/helpers.d.ts.map +1 -1
  274. package/dist/template/helpers.js +1 -1
  275. package/dist/template/implementations/entity.template.d.ts +2 -2
  276. package/dist/template/implementations/entity.template.d.ts.map +1 -1
  277. package/dist/template/implementations/entry-server.template.d.ts +2 -2
  278. package/dist/template/implementations/entry-server.template.d.ts.map +1 -1
  279. package/dist/template/implementations/generated.template.d.ts +2 -2
  280. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  281. package/dist/template/implementations/generated.template.js +4 -4
  282. package/dist/template/implementations/generated_http.template.d.ts +9 -6
  283. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  284. package/dist/template/implementations/generated_http.template.js +21 -21
  285. package/dist/template/implementations/generated_sso.template.d.ts +2 -2
  286. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  287. package/dist/template/implementations/generated_sso.template.js +6 -3
  288. package/dist/template/implementations/http_validators.template.d.ts +18 -0
  289. package/dist/template/implementations/http_validators.template.d.ts.map +1 -0
  290. package/dist/template/implementations/http_validators.template.js +127 -0
  291. package/dist/template/implementations/init_types.template.d.ts +2 -2
  292. package/dist/template/implementations/init_types.template.d.ts.map +1 -1
  293. package/dist/template/implementations/model.template.d.ts +2 -2
  294. package/dist/template/implementations/model.template.d.ts.map +1 -1
  295. package/dist/template/implementations/model.template.js +1 -1
  296. package/dist/template/implementations/model_test.template.d.ts +2 -2
  297. package/dist/template/implementations/model_test.template.d.ts.map +1 -1
  298. package/dist/template/implementations/queries.template.d.ts +2 -2
  299. package/dist/template/implementations/queries.template.d.ts.map +1 -1
  300. package/dist/template/implementations/queries.template.js +1 -1
  301. package/dist/template/implementations/sd.template.d.ts +2 -2
  302. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  303. package/dist/template/implementations/sd.template.js +80 -40
  304. package/dist/template/implementations/services.template.d.ts +2 -2
  305. package/dist/template/implementations/services.template.d.ts.map +1 -1
  306. package/dist/template/implementations/services.template.js +6 -4
  307. package/dist/template/implementations/view_form.template.d.ts +9 -4
  308. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  309. package/dist/template/implementations/view_form.template.js +23 -15
  310. package/dist/template/implementations/view_id_all_select.template.d.ts +2 -2
  311. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -1
  312. package/dist/template/implementations/view_list.template.d.ts +2 -2
  313. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  314. package/dist/template/implementations/view_list.template.js +11 -6
  315. package/dist/template/implementations/view_search_input.template.d.ts +2 -2
  316. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
  317. package/dist/template/template-manager.d.ts.map +1 -1
  318. package/dist/template/template-manager.js +9 -7
  319. package/dist/template/template-types.d.ts +12 -5
  320. package/dist/template/template-types.d.ts.map +1 -1
  321. package/dist/template/template-types.js +1 -1
  322. package/dist/template/template.d.ts +2 -2
  323. package/dist/template/template.d.ts.map +1 -1
  324. package/dist/template/template.js +6 -4
  325. package/dist/template/zod-converter.d.ts +0 -19
  326. package/dist/template/zod-converter.d.ts.map +1 -1
  327. package/dist/template/zod-converter.js +100 -84
  328. package/dist/testing/_relation-graph.d.ts.map +1 -1
  329. package/dist/testing/_relation-graph.js +2 -1
  330. package/dist/testing/bootstrap.d.ts.map +1 -1
  331. package/dist/testing/bootstrap.js +9 -6
  332. package/dist/testing/data-explorer.d.ts +32 -7
  333. package/dist/testing/data-explorer.d.ts.map +1 -1
  334. package/dist/testing/data-explorer.js +77 -31
  335. package/dist/testing/dev-test-routes.d.ts +8 -1
  336. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  337. package/dist/testing/dev-test-routes.js +125 -108
  338. package/dist/testing/dev-vitest-manager.d.ts +54 -8
  339. package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
  340. package/dist/testing/dev-vitest-manager.js +24 -9
  341. package/dist/testing/faker-mappings.d.ts +412 -1
  342. package/dist/testing/faker-mappings.d.ts.map +1 -1
  343. package/dist/testing/faker-mappings.js +1 -1
  344. package/dist/testing/filesystem.d.ts +2 -0
  345. package/dist/testing/filesystem.d.ts.map +1 -0
  346. package/dist/testing/filesystem.js +7 -0
  347. package/dist/testing/fixture-generator.d.ts +25 -8
  348. package/dist/testing/fixture-generator.d.ts.map +1 -1
  349. package/dist/testing/fixture-generator.js +133 -74
  350. package/dist/testing/fixture-loader.d.ts +3 -1
  351. package/dist/testing/fixture-loader.d.ts.map +1 -1
  352. package/dist/testing/fixture-loader.js +1 -20
  353. package/dist/testing/fixture-manager.d.ts +12 -7
  354. package/dist/testing/fixture-manager.d.ts.map +1 -1
  355. package/dist/testing/fixture-manager.js +179 -73
  356. package/dist/testing/global-setup.d.ts.map +1 -1
  357. package/dist/testing/global-setup.js +5 -2
  358. package/dist/testing/index.d.ts +2 -0
  359. package/dist/testing/index.d.ts.map +1 -1
  360. package/dist/testing/index.js +6 -3
  361. package/dist/testing/naite-vitest-reporter.d.ts.map +1 -1
  362. package/dist/testing/parallel-db-manager.d.ts.map +1 -1
  363. package/dist/tooling/__tests__/helpers/sonamu-test-root.d.ts +10 -0
  364. package/dist/tooling/__tests__/helpers/sonamu-test-root.d.ts.map +1 -0
  365. package/dist/tooling/__tests__/helpers/sonamu-test-root.js +42 -0
  366. package/dist/tooling/cdd-service.d.ts +87 -0
  367. package/dist/tooling/cdd-service.d.ts.map +1 -0
  368. package/dist/tooling/cdd-service.js +215 -0
  369. package/dist/tooling/cli-tooling.d.ts +11 -0
  370. package/dist/tooling/cli-tooling.d.ts.map +1 -0
  371. package/dist/tooling/cli-tooling.js +901 -0
  372. package/dist/tooling/fixture-service.d.ts +29 -0
  373. package/dist/tooling/fixture-service.d.ts.map +1 -0
  374. package/dist/tooling/fixture-service.js +53 -0
  375. package/dist/tooling/index.d.ts +2 -0
  376. package/dist/tooling/index.d.ts.map +1 -0
  377. package/dist/tooling/index.js +2 -0
  378. package/dist/tooling/test-run-client.d.ts +27 -0
  379. package/dist/tooling/test-run-client.d.ts.map +1 -0
  380. package/dist/tooling/test-run-client.js +120 -0
  381. package/dist/tsdown.api.config.js +48 -0
  382. package/dist/types/types.d.ts +620 -618
  383. package/dist/types/types.d.ts.map +1 -1
  384. package/dist/types/types.js +234 -225
  385. package/dist/ui/ai-api.d.ts.map +1 -1
  386. package/dist/ui/ai-api.js +1 -1
  387. package/dist/ui/ai-client.d.ts.map +1 -1
  388. package/dist/ui/ai-client.js +28 -18
  389. package/dist/ui/api.d.ts.map +1 -1
  390. package/dist/ui/api.js +135 -128
  391. package/dist/ui/async-route.d.ts +3 -0
  392. package/dist/ui/async-route.d.ts.map +1 -0
  393. package/dist/ui/async-route.js +12 -0
  394. package/dist/ui/cdd-service.d.ts +9 -7
  395. package/dist/ui/cdd-service.d.ts.map +1 -1
  396. package/dist/ui/cdd-service.js +7 -5
  397. package/dist/ui/migrations-api.d.ts.map +1 -1
  398. package/dist/ui/migrations-api.js +17 -15
  399. package/dist/ui-web/assets/index-DV1AAq6W.js +178 -0
  400. package/dist/ui-web/index.html +1 -1
  401. package/dist/utils/formatter.d.ts +6 -0
  402. package/dist/utils/formatter.d.ts.map +1 -1
  403. package/dist/utils/formatter.js +46 -13
  404. package/dist/utils/fs-utils.d.ts +3 -3
  405. package/dist/utils/fs-utils.d.ts.map +1 -1
  406. package/dist/utils/fs-utils.js +6 -6
  407. package/dist/utils/model.d.ts +4 -6
  408. package/dist/utils/model.d.ts.map +1 -1
  409. package/dist/utils/model.js +1 -1
  410. package/dist/utils/object-utils.d.ts +1 -1
  411. package/dist/utils/object-utils.d.ts.map +1 -1
  412. package/dist/utils/object-utils.js +17 -16
  413. package/dist/utils/process-utils.d.ts.map +1 -1
  414. package/dist/utils/process-utils.js +4 -2
  415. package/dist/utils/runtime-value.d.ts +13 -0
  416. package/dist/utils/runtime-value.d.ts.map +1 -0
  417. package/dist/utils/runtime-value.js +40 -0
  418. package/dist/utils/sql-parser.d.ts +8 -1
  419. package/dist/utils/sql-parser.d.ts.map +1 -1
  420. package/dist/utils/sql-parser.js +6 -3
  421. package/dist/utils/type-utils.d.ts.map +1 -1
  422. package/dist/utils/type-utils.js +10 -8
  423. package/dist/utils/utils.d.ts +2 -2
  424. package/dist/utils/utils.d.ts.map +1 -1
  425. package/dist/utils/utils.js +11 -8
  426. package/dist/utils/zod-error.d.ts.map +1 -1
  427. package/dist/utils/zod-error.js +7 -4
  428. package/dist/vector/chunking.d.ts.map +1 -1
  429. package/dist/vector/chunking.js +1 -1
  430. package/dist/vector/embedding.d.ts.map +1 -1
  431. package/dist/vector/embedding.js +1 -1
  432. package/dist/vector/types.d.ts +3 -2
  433. package/dist/vector/types.d.ts.map +1 -1
  434. package/package.json +17 -14
  435. package/src/ai/agents/agent.ts +5 -5
  436. package/src/ai/agents/types.ts +1 -1
  437. package/src/ai/providers/rtzr/__tests__/model.test.ts +2 -2
  438. package/src/ai/providers/rtzr/error.ts +5 -3
  439. package/src/ai/providers/rtzr/model.ts +3 -2
  440. package/src/ai/providers/rtzr/options.ts +10 -5
  441. package/src/ai/providers/rtzr/provider.ts +10 -10
  442. package/src/ai/providers/rtzr/utils.ts +3 -1
  443. package/src/api/__tests__/config.test.ts +11 -21
  444. package/src/api/__tests__/sonamu.http-validator.test.ts +512 -0
  445. package/src/api/__tests__/sonamu.websocket.test.ts +51 -41
  446. package/src/api/__tests__/zod-compiler-policy.test.ts +95 -0
  447. package/src/api/caster.ts +6 -8
  448. package/src/api/code-converters.ts +136 -36
  449. package/src/api/config.ts +62 -4
  450. package/src/api/context.ts +3 -3
  451. package/src/api/decorators.ts +28 -17
  452. package/src/api/http-validator.ts +149 -0
  453. package/src/api/sonamu.ts +461 -153
  454. package/src/api/websocket-helpers.ts +24 -17
  455. package/src/auth/audit-log/builders.ts +3 -2
  456. package/src/auth/audit-log/client-ip.ts +4 -2
  457. package/src/auth/audit-log/events.ts +15 -1
  458. package/src/auth/audit-log/plugin.ts +129 -200
  459. package/src/auth/audit-log-ingestor.ts +19 -15
  460. package/src/auth/auth-generator.ts +10 -5
  461. package/src/auth/better-auth-request.ts +4 -3
  462. package/src/auth/index.ts +1 -1
  463. package/src/auth/knex-adapter.ts +8 -2
  464. package/src/auth/plugins/entity-definitions/index.ts +6 -5
  465. package/src/bin/__tests__/http-validator-benchmark.test.ts +94 -0
  466. package/src/bin/__tests__/test-command.test.ts +9 -15
  467. package/src/bin/__tests__/ts-loader-register.test.ts +15 -17
  468. package/src/bin/__tests__/zod-compiler-build.test.ts +374 -0
  469. package/src/bin/build-config.ts +317 -4
  470. package/src/bin/compiler-policy.ts +35 -0
  471. package/src/bin/fixture.ts +218 -24
  472. package/src/bin/test-command.ts +100 -32
  473. package/src/bin/ts-loader-registration.ts +22 -4
  474. package/src/bin/typecheck-web.ts +56 -0
  475. package/src/cache/decorator.ts +10 -3
  476. package/src/compress/compress.ts +17 -4
  477. package/src/cone/cone-generator.ts +34 -6
  478. package/src/database/__tests__/db.test.ts +1 -0
  479. package/src/database/__tests__/puri.test.ts +16 -15
  480. package/src/database/__tests__/transaction-scope.test.ts +5 -0
  481. package/src/database/_batch_update.ts +1 -0
  482. package/src/database/base-model.ts +81 -50
  483. package/src/database/base-model.types.ts +6 -6
  484. package/src/database/db.ts +29 -19
  485. package/src/database/knex.ts +30 -17
  486. package/src/database/puri-subset.test-d.ts +17 -0
  487. package/src/database/puri.ts +181 -143
  488. package/src/database/puri.types.test-d.ts +31 -1
  489. package/src/database/puri.types.ts +23 -21
  490. package/src/database/upsert-builder.ts +75 -53
  491. package/src/dict/sd.ts +15 -5
  492. package/src/dict/sonamu-dictionary.ts +7 -7
  493. package/src/dict/utils.ts +9 -1
  494. package/src/entity/__tests__/entity-manager-autoload.contract.test.ts +55 -0
  495. package/src/entity/__tests__/entity-manager-explicit-root-registration.contract.test.ts +107 -0
  496. package/src/entity/entity-manager.ts +56 -27
  497. package/src/entity/entity-template-cone.ts +5 -10
  498. package/src/entity/entity.ts +57 -36
  499. package/src/env.ts +7 -3
  500. package/src/exceptions/error-handler.ts +17 -2
  501. package/src/exceptions/so-exceptions.ts +26 -20
  502. package/src/filter/utils.ts +21 -11
  503. package/src/index.ts +3 -0
  504. package/src/logger/__tests__/configure.test.ts +33 -0
  505. package/src/logger/configure.ts +69 -19
  506. package/src/migration/__tests__/migrator.test.ts +101 -57
  507. package/src/migration/code-generation.ts +132 -104
  508. package/src/migration/index-where-predicate.ts +51 -24
  509. package/src/migration/migration-set.ts +11 -5
  510. package/src/migration/migrator.ts +166 -70
  511. package/src/migration/postgresql-schema-reader.ts +52 -47
  512. package/src/migration/slack-confirm.ts +17 -15
  513. package/src/naite/naite-reporter.ts +1 -1
  514. package/src/naite/naite.ts +97 -24
  515. package/src/runtime-type.ts +34 -0
  516. package/src/ssr/hmr-opt-out.ts +78 -0
  517. package/src/ssr/renderer.ts +6 -0
  518. package/src/storage/base-file.ts +13 -13
  519. package/src/storage/buffered-file.ts +11 -11
  520. package/src/storage/s3-driver.ts +4 -1
  521. package/src/storage/uploaded-file.ts +8 -8
  522. package/src/stream/__tests__/ws-contracts.test.ts +4 -2
  523. package/src/stream/__tests__/ws-telemetry.test.ts +1 -1
  524. package/src/stream/__tests__/ws.test.ts +30 -6
  525. package/src/stream/sse.ts +12 -11
  526. package/src/stream/ws-core.ts +1 -1
  527. package/src/stream/ws-delivery.ts +16 -7
  528. package/src/stream/ws-local-connection-store.ts +2 -3
  529. package/src/stream/ws-presence-store.ts +6 -1
  530. package/src/stream/ws-registry.ts +16 -7
  531. package/src/stream/ws-telemetry.ts +66 -43
  532. package/src/stream/ws.ts +73 -39
  533. package/src/syncer/__tests__/api-parser.websocket-type-ref.test.ts +3 -2
  534. package/src/syncer/__tests__/http-validator-registry.test.ts +137 -0
  535. package/src/syncer/api-parser.ts +68 -28
  536. package/src/syncer/checksum.ts +17 -11
  537. package/src/syncer/code-generator.ts +25 -17
  538. package/src/syncer/entity-operations.ts +3 -5
  539. package/src/syncer/file-copy.ts +46 -0
  540. package/src/syncer/file-patterns.ts +11 -8
  541. package/src/syncer/file-tracking.ts +3 -4
  542. package/src/syncer/filesystem-dependencies.ts +73 -0
  543. package/src/syncer/module-loader.ts +8 -4
  544. package/src/syncer/syncer-actions.ts +56 -18
  545. package/src/syncer/syncer.ts +116 -43
  546. package/src/syncer/watcher.ts +8 -4
  547. package/src/tasks/decorator.ts +20 -12
  548. package/src/tasks/step-wrapper.ts +19 -9
  549. package/src/tasks/workflow-manager.ts +15 -9
  550. package/src/template/__tests__/http_validators.template.test.ts +160 -0
  551. package/src/template/__tests__/services.template.mutation.test.ts +24 -23
  552. package/src/template/__tests__/services.template.websocket.test.ts +21 -25
  553. package/src/template/entity-converter.ts +5 -2
  554. package/src/template/helpers.ts +8 -9
  555. package/src/template/implementations/generated.template.ts +5 -4
  556. package/src/template/implementations/generated_http.template.ts +61 -15
  557. package/src/template/implementations/generated_sso.template.ts +15 -4
  558. package/src/template/implementations/http_validators.template.ts +175 -0
  559. package/src/template/implementations/model.template.ts +3 -1
  560. package/src/template/implementations/sd.template.ts +81 -41
  561. package/src/template/implementations/services.template.ts +2 -2
  562. package/src/template/implementations/view_form.template.ts +56 -39
  563. package/src/template/implementations/view_list.template.ts +31 -23
  564. package/src/template/template-manager.ts +15 -13
  565. package/src/template/template-types.ts +13 -5
  566. package/src/template/template.ts +4 -3
  567. package/src/template/zod-converter.ts +206 -91
  568. package/src/testing/__tests__/dev-test-routes.test.ts +85 -25
  569. package/src/testing/__tests__/dev-vitest-manager.test.ts +15 -15
  570. package/src/testing/_relation-graph.ts +4 -1
  571. package/src/testing/bootstrap.ts +12 -5
  572. package/src/testing/data-explorer.ts +102 -53
  573. package/src/testing/dev-test-routes.ts +87 -50
  574. package/src/testing/dev-vitest-manager.ts +88 -32
  575. package/src/testing/faker-mappings.ts +2 -2
  576. package/src/testing/filesystem.ts +1 -0
  577. package/src/testing/fixture-generator.ts +191 -131
  578. package/src/testing/fixture-loader.ts +5 -1
  579. package/src/testing/fixture-manager.ts +237 -106
  580. package/src/testing/global-setup.ts +7 -3
  581. package/src/testing/index.ts +5 -0
  582. package/src/tooling/__tests__/cdd-rule-bootstrap.contract.test.ts +118 -0
  583. package/src/tooling/__tests__/cli-tooling-auth.contract.test.ts +72 -0
  584. package/src/tooling/__tests__/cli-tooling-cone-locale.contract.test.ts +150 -0
  585. package/src/tooling/__tests__/cli-tooling-entity-patch.contract.test.ts +131 -0
  586. package/src/tooling/__tests__/cli-tooling-fixture-transfer.contract.test.ts +255 -0
  587. package/src/tooling/__tests__/cli-tooling-i18n-update.contract.test.ts +104 -0
  588. package/src/tooling/__tests__/cli-tooling-scaffold.contract.test.ts +86 -0
  589. package/src/tooling/__tests__/cli-tooling-stub-practice.contract.test.ts +147 -0
  590. package/src/tooling/__tests__/default-cdd-adapter.contract.test.ts +73 -0
  591. package/src/tooling/__tests__/helpers/sonamu-test-root.ts +42 -0
  592. package/src/tooling/__tests__/test-run-client-config.contract.test.ts +154 -0
  593. package/src/tooling/cdd-service.ts +256 -0
  594. package/src/tooling/cli-tooling.ts +937 -0
  595. package/src/tooling/fixture-service.ts +72 -0
  596. package/src/tooling/index.ts +1 -0
  597. package/src/tooling/test-run-client.ts +196 -0
  598. package/src/types/__tests__/entity-json-schema-search-text.test.ts +9 -3
  599. package/src/types/types.ts +184 -158
  600. package/src/ui/ai-api.ts +9 -7
  601. package/src/ui/ai-client.ts +61 -56
  602. package/src/ui/api.ts +727 -616
  603. package/src/ui/async-route.ts +4 -0
  604. package/src/ui/cdd-service.ts +35 -12
  605. package/src/ui/migrations-api.ts +63 -51
  606. package/src/utils/__tests__/formatter-bin.test.ts +99 -0
  607. package/src/utils/formatter.ts +80 -12
  608. package/src/utils/fs-utils.ts +5 -5
  609. package/src/utils/model.ts +4 -5
  610. package/src/utils/object-utils.ts +32 -22
  611. package/src/utils/process-utils.ts +4 -1
  612. package/src/utils/runtime-value.ts +43 -0
  613. package/src/utils/sql-parser.ts +13 -6
  614. package/src/utils/type-utils.ts +9 -7
  615. package/src/utils/utils.ts +19 -21
  616. package/src/utils/zod-error.ts +4 -2
  617. package/src/vector/chunking.ts +6 -1
  618. package/src/vector/embedding.ts +2 -1
  619. package/src/vector/types.ts +4 -2
  620. package/tsdown.api.config.ts +12 -11
  621. package/bin/cli.js +0 -75
  622. package/dist/bin/cli.d.ts +0 -2
  623. package/dist/bin/cli.d.ts.map +0 -1
  624. package/dist/bin/cli.js +0 -852
  625. package/dist/ui-web/assets/index-C0m1pk6K.js +0 -177
  626. package/src/bin/cli.ts +0 -1049
@@ -1,3 +1,24 @@
1
+ import assert from "node:assert";
2
+ import { readFile, rm, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+
6
+ import chalk from "chalk";
7
+ import { type UserConfig } from "tsdown";
8
+
9
+ import { type NormalizedZodCompilerPolicy } from "../api/config";
10
+ import {
11
+ execWithLinePrefix,
12
+ printBuildSummary,
13
+ printTaskFailed,
14
+ printTaskHeader,
15
+ printTaskStart,
16
+ printTaskSuccess,
17
+ } from "../utils/console-util";
18
+ import { exists } from "../utils/fs-utils";
19
+ import { findApiRootPath, findAppRootPath } from "../utils/utils";
20
+ import { loadBuildCompilerPolicy } from "./compiler-policy";
21
+
1
22
  export type BuildArtifact<BuildCommandArgs = {}> = {
2
23
  name: string;
3
24
  description: string;
@@ -7,6 +28,179 @@ export type BuildArtifact<BuildCommandArgs = {}> = {
7
28
  postBuildCommand?: () => string;
8
29
  };
9
30
 
31
+ export type ApiTsdownBuildConfig = Pick<UserConfig, "entry" | "plugins">;
32
+
33
+ export function quoteShellArgument(value: string): string {
34
+ // 작은따옴표 자체만 셸 경계를 닫지 못하도록 분리해 리터럴 인수를 보존합니다.
35
+ return `'${value.replaceAll("'", `'"'"'`)}'`;
36
+ }
37
+
38
+ export function createWebTypecheckCommand(): string {
39
+ const isSourceModule = path.extname(import.meta.filename) === ".ts";
40
+ const scriptPath = path.join(
41
+ import.meta.dirname,
42
+ `typecheck-web.${isSourceModule ? "ts" : "js"}`,
43
+ );
44
+ const runner = isSourceModule ? "pnpm exec tsx" : quoteShellArgument(process.execPath);
45
+ return `${runner} ${quoteShellArgument(scriptPath)}`;
46
+ }
47
+
48
+ type ZodCompilerPluginFactory = (typeof import("zod-compiler/rolldown"))["default"];
49
+
50
+ export interface ApiZodCompilerBuildDependencies {
51
+ loadCompilerPlugin: () => Promise<ZodCompilerPluginFactory>;
52
+ }
53
+
54
+ const apiZodCompilerBuildDependencies: ApiZodCompilerBuildDependencies = {
55
+ async loadCompilerPlugin() {
56
+ return (await import("zod-compiler/rolldown")).default;
57
+ },
58
+ };
59
+
60
+ export async function composeApiZodCompilerBuildConfig<T extends ApiTsdownBuildConfig>(
61
+ baseConfig: T,
62
+ options: {
63
+ policy: NormalizedZodCompilerPolicy;
64
+ registryPath?: string;
65
+ },
66
+ dependencies: ApiZodCompilerBuildDependencies = apiZodCompilerBuildDependencies,
67
+ ): Promise<T & ApiTsdownBuildConfig> {
68
+ if (options.policy.api !== "aot") {
69
+ return baseConfig;
70
+ }
71
+ if (options.registryPath === undefined) {
72
+ throw new Error("validation.zodCompiler.api requires the generated HTTP validator registry");
73
+ }
74
+
75
+ const zodCompiler = await dependencies.loadCompilerPlugin();
76
+ const compilerPlugin = zodCompiler({
77
+ codegenMode: "inline",
78
+ include: [options.registryPath],
79
+ output: "compact",
80
+ schemas: "explicit",
81
+ });
82
+
83
+ let configuredPlugins: Exclude<UserConfig["plugins"], undefined>[];
84
+ if (Array.isArray(baseConfig.plugins)) {
85
+ configuredPlugins = baseConfig.plugins;
86
+ } else if (baseConfig.plugins === undefined) {
87
+ configuredPlugins = [];
88
+ } else {
89
+ configuredPlugins = [baseConfig.plugins];
90
+ }
91
+
92
+ return {
93
+ ...baseConfig,
94
+ plugins: [...configuredPlugins, compilerPlugin],
95
+ };
96
+ }
97
+
98
+ export function assertApiZodCompilerBuildOutput(
99
+ outputs: readonly { code: string; path: string }[],
100
+ ): void {
101
+ for (const output of outputs) {
102
+ if (/\bcompile\s*\(/.test(output.code)) {
103
+ throw new Error(`zod-compiler compile boundary remains in ${output.path}`);
104
+ }
105
+ if (output.code.includes("virtual:zod-compiler/runtime")) {
106
+ throw new Error(`zod-compiler virtual runtime import remains in ${output.path}`);
107
+ }
108
+ }
109
+ }
110
+
111
+ export const HTTP_VALIDATOR_REGISTRY_SOURCE_PATH = "src/application/sonamu.validators.generated.ts";
112
+ export const HTTP_VALIDATOR_REGISTRY_BUILD_PATH = "dist/application/sonamu.validators.generated.js";
113
+
114
+ export async function assertApiZodCompilerSourceRegistry(registryPath: string): Promise<void> {
115
+ if (!(await exists(registryPath))) {
116
+ throw new Error(`Generated HTTP validator registry not found: ${registryPath}`);
117
+ }
118
+ const source = await readFile(registryPath, "utf8");
119
+ if (!/fingerprint\s*=\s*["'][a-f0-9]{64}["']/.test(source)) {
120
+ throw new Error(`Generated HTTP validator registry fingerprint is invalid: ${registryPath}`);
121
+ }
122
+ const declaresZeroRoutes = /\brouteIds\s*=\s*\{\s*\}\s*;/.test(source);
123
+ if (!declaresZeroRoutes && !/\bcompile\s*\(/.test(source)) {
124
+ throw new Error(`Generated HTTP validator registry has no compile boundary: ${registryPath}`);
125
+ }
126
+ }
127
+
128
+ export async function createApiZodCompilerBuildWrapper(options: {
129
+ apiRootPath: string;
130
+ baseConfigPath: string;
131
+ policy: NormalizedZodCompilerPolicy;
132
+ registryPath: string;
133
+ }): Promise<string> {
134
+ if (options.policy.api !== "aot") {
135
+ return options.baseConfigPath;
136
+ }
137
+
138
+ await assertApiZodCompilerSourceRegistry(options.registryPath);
139
+ const wrapperPath = path.join(
140
+ options.apiRootPath,
141
+ `.sonamu-zod-compiler-${process.pid}-${Date.now()}.mjs`,
142
+ );
143
+ const baseConfigUrl = pathToFileURL(options.baseConfigPath).href;
144
+ const source = [
145
+ `import path from "node:path";`,
146
+ `import baseConfig from ${JSON.stringify(baseConfigUrl)};`,
147
+ `import zodCompiler from "zod-compiler/rolldown";`,
148
+ "",
149
+ `const compilerPlugin = zodCompiler(${JSON.stringify({
150
+ codegenMode: "inline",
151
+ include: [options.registryPath],
152
+ output: "compact",
153
+ schemas: "explicit",
154
+ })});`,
155
+ `const registryPath = ${JSON.stringify(options.registryPath)};`,
156
+ `const apiRootPath = ${JSON.stringify(options.apiRootPath)};`,
157
+ `const canonicalOutDir = path.join(apiRootPath, "dist");`,
158
+ `const registryEntryName = "application/sonamu.validators.generated";`,
159
+ `const defaultEntry = { index: "src/index.ts" };`,
160
+ "const resolvesToRegistry = (entry) =>",
161
+ ' typeof entry === "string" && path.resolve(apiRootPath, entry) === registryPath;',
162
+ "const appendRegistryEntry = (entry) => {",
163
+ " if (Array.isArray(entry)) {",
164
+ " return entry.some(resolvesToRegistry) ? entry : [...entry, registryPath];",
165
+ " }",
166
+ ' if (typeof entry === "string") {',
167
+ " return resolvesToRegistry(entry) ? entry : [entry, registryPath];",
168
+ " }",
169
+ ' if (typeof entry === "object" && entry !== null) {',
170
+ " if (Object.values(entry).some(resolvesToRegistry)) return entry;",
171
+ " if (registryEntryName in entry) {",
172
+ " throw new Error(`tsdown entry collision: ${registryEntryName}`);",
173
+ " }",
174
+ " return { ...entry, [registryEntryName]: registryPath };",
175
+ " }",
176
+ " if (entry === undefined) {",
177
+ " return { ...defaultEntry, [registryEntryName]: registryPath };",
178
+ " }",
179
+ " return { [registryEntryName]: registryPath };",
180
+ "};",
181
+ "const appendPlugin = (config) => ({",
182
+ " ...config,",
183
+ " // 런타임 loader가 참조하는 registry 경로를 빌드 설정과 일치시킵니다.",
184
+ " outDir: canonicalOutDir,",
185
+ " fixedExtension: false,",
186
+ " entry: appendRegistryEntry(config.entry),",
187
+ " plugins: [...(config.plugins ?? []), compilerPlugin],",
188
+ "});",
189
+ "const appendToResolvedConfig = (config) =>",
190
+ " Array.isArray(config) ? config.map(appendPlugin) : appendPlugin(config);",
191
+ "",
192
+ "export default async (...args) => {",
193
+ ' const resolved = typeof baseConfig === "function"',
194
+ " ? await baseConfig(...args)",
195
+ " : await baseConfig;",
196
+ " return appendToResolvedConfig(resolved);",
197
+ "};",
198
+ "",
199
+ ].join("\n");
200
+ await writeFile(wrapperPath, source, "utf8");
201
+ return wrapperPath;
202
+ }
203
+
10
204
  /**
11
205
  * API 프로젝트 빌드 산출물에 대한 규칙들.
12
206
  * cli.ts의 build_api 함수가 이것을 보고 그대로 실행합니다.
@@ -17,8 +211,11 @@ export const API_ARTIFACTS: BuildArtifact<{ configFilePath: string }>[] = [
17
211
  description: "API 프로젝트 빌드 산출물",
18
212
  projectPath: "api",
19
213
  preBuildCommand: () => "rm -rf dist",
20
- buildCommand: ({ configFilePath }) =>
21
- `tsc --noEmit && pnpm exec tsdown --config ${JSON.stringify(configFilePath)}`,
214
+ buildCommand: ({ configFilePath }) => {
215
+ const configExtension = path.extname(configFilePath);
216
+ const configLoader = [".ts", ".tsx"].includes(configExtension) ? " --config-loader tsx" : "";
217
+ return `tsc --noEmit && pnpm exec tsdown --config ${JSON.stringify(configFilePath)}${configLoader}`;
218
+ },
22
219
  },
23
220
  ];
24
221
 
@@ -33,7 +230,7 @@ export const WEB_ARTIFACTS: BuildArtifact[] = [
33
230
  projectPath: "web",
34
231
  preBuildCommand: () => "rm -rf dist/client",
35
232
  buildCommand: () =>
36
- "tsc -b --noEmit && vite build --config vite.config.ts --outDir dist/client",
233
+ `${createWebTypecheckCommand()} && vite build --config vite.config.ts --outDir dist/client`,
37
234
  },
38
235
  {
39
236
  name: "Web Server",
@@ -41,8 +238,124 @@ export const WEB_ARTIFACTS: BuildArtifact[] = [
41
238
  projectPath: "web",
42
239
  preBuildCommand: () => "rm -rf dist/server",
43
240
  buildCommand: () =>
44
- "tsc -b --noEmit && vite build --config vite.config.ts --ssr src/entry-server.generated.tsx --outDir dist/server",
241
+ `${createWebTypecheckCommand()} && vite build --config vite.config.ts --ssr src/entry-server.generated.tsx --outDir dist/server`,
45
242
  postBuildCommand: () =>
46
243
  "rm -rf ../api/web-dist && mkdir -p ../api/web-dist && cp -r dist/* ../api/web-dist",
47
244
  },
48
245
  ];
246
+
247
+ export async function resolveApiBuildConfigPath(
248
+ apiRootPath: string,
249
+ dependencies: {
250
+ exists: (candidatePath: string) => Promise<boolean>;
251
+ moduleDir: string;
252
+ } = {
253
+ exists,
254
+ moduleDir: import.meta.dirname,
255
+ },
256
+ ): Promise<string> {
257
+ const localConfigPath = path.join(apiRootPath, "tsdown.config.ts");
258
+ if (await dependencies.exists(localConfigPath)) {
259
+ console.log(chalk.dim("Using tsdown.config.ts from project root..."));
260
+ return localConfigPath;
261
+ }
262
+
263
+ console.log(chalk.dim("Using default tsdown API config from sonamu package..."));
264
+ const compiledConfigPath = path.join(dependencies.moduleDir, "..", "tsdown.api.config.js");
265
+ if (await dependencies.exists(compiledConfigPath)) {
266
+ return compiledConfigPath;
267
+ }
268
+ return path.join(dependencies.moduleDir, "..", "..", "tsdown.api.config.ts");
269
+ }
270
+
271
+ async function runBuildSteps<T>(
272
+ artifact: BuildArtifact<T>,
273
+ options: { cwd: string; buildCommandArgs: T },
274
+ ) {
275
+ const steps = [
276
+ { name: "pre-build", cmd: artifact.preBuildCommand?.() },
277
+ { name: "build", cmd: artifact.buildCommand(options.buildCommandArgs) },
278
+ { name: "post-build", cmd: artifact.postBuildCommand?.() },
279
+ ].filter((step) => step.cmd !== undefined);
280
+
281
+ for (let index = 0; index < steps.length; index++) {
282
+ const step = steps[index];
283
+ const isLast = index === steps.length - 1;
284
+ try {
285
+ assert(step.cmd);
286
+ printTaskStart(step.name, step.cmd, isLast);
287
+ await execWithLinePrefix(step.cmd, { cwd: options.cwd });
288
+ printTaskSuccess(step.name, isLast);
289
+ } catch (error) {
290
+ printTaskFailed(step.name, isLast);
291
+ throw new Error(`${step.name} failed`, { cause: error });
292
+ }
293
+ }
294
+ }
295
+
296
+ export async function buildApiCommand(): Promise<void> {
297
+ const apiRootPath = findApiRootPath();
298
+ const baseConfigPath = await resolveApiBuildConfigPath(apiRootPath);
299
+ const policy = await loadBuildCompilerPolicy(apiRootPath);
300
+ const registryPath = path.join(apiRootPath, HTTP_VALIDATOR_REGISTRY_SOURCE_PATH);
301
+ const configFilePath = await createApiZodCompilerBuildWrapper({
302
+ apiRootPath,
303
+ baseConfigPath,
304
+ policy,
305
+ registryPath,
306
+ });
307
+ const temporaryConfigPath = configFilePath === baseConfigPath ? undefined : configFilePath;
308
+ const startedAt = Date.now();
309
+
310
+ try {
311
+ for (const artifact of API_ARTIFACTS) {
312
+ printTaskHeader(artifact.name, artifact.description, apiRootPath);
313
+ await runBuildSteps(artifact, {
314
+ cwd: apiRootPath,
315
+ buildCommandArgs: { configFilePath },
316
+ });
317
+ }
318
+ if (policy.api === "aot") {
319
+ const outputPath = path.join(apiRootPath, HTTP_VALIDATOR_REGISTRY_BUILD_PATH);
320
+ if (!(await exists(outputPath))) {
321
+ throw new Error(`Built HTTP validator registry not found: ${outputPath}`);
322
+ }
323
+ assertApiZodCompilerBuildOutput([
324
+ { code: await readFile(outputPath, "utf8"), path: outputPath },
325
+ ]);
326
+ }
327
+ printBuildSummary("API", true, Date.now() - startedAt);
328
+ } catch (error) {
329
+ printBuildSummary("API", false, Date.now() - startedAt);
330
+ throw error;
331
+ } finally {
332
+ if (temporaryConfigPath !== undefined) await rm(temporaryConfigPath, { force: true });
333
+ }
334
+ }
335
+
336
+ export async function buildWebCommand({
337
+ skipIfMissing = false,
338
+ }: { skipIfMissing?: boolean } = {}): Promise<void> {
339
+ const appRootPath = findAppRootPath();
340
+ const webPath = path.join(appRootPath, "web");
341
+ if (!(await exists(webPath))) {
342
+ if (skipIfMissing) {
343
+ console.log(chalk.gray("Web 디렉토리가 없으므로 Web 빌드를 건너뜁니다."));
344
+ return;
345
+ }
346
+ throw new Error(`web 디렉토리를 찾을 수 없습니다: ${webPath}`);
347
+ }
348
+
349
+ const startedAt = Date.now();
350
+ try {
351
+ for (const artifact of WEB_ARTIFACTS) {
352
+ const cwd = path.join(appRootPath, artifact.projectPath);
353
+ printTaskHeader(artifact.name, artifact.description, cwd);
354
+ await runBuildSteps(artifact, { cwd, buildCommandArgs: {} });
355
+ }
356
+ printBuildSummary("Web", true, Date.now() - startedAt);
357
+ } catch (error) {
358
+ printBuildSummary("Web", false, Date.now() - startedAt);
359
+ throw error;
360
+ }
361
+ }
@@ -0,0 +1,35 @@
1
+ import { pathToFileURL } from "node:url";
2
+
3
+ import { normalizeZodCompilerPolicy, type NormalizedZodCompilerPolicy } from "../api/config";
4
+ import { applyCurrentSnapshotToProcessEnv } from "../env";
5
+ import { isFunctionValue, isObjectValue } from "../utils/runtime-value";
6
+ import { ensureTsLoaderRegistered } from "./ts-loader-registration";
7
+
8
+ type BuildSourceConfig = {
9
+ validation?: {
10
+ zodCompiler?: unknown;
11
+ };
12
+ };
13
+
14
+ export async function loadBuildCompilerPolicy(
15
+ apiRootPath: string,
16
+ ): Promise<NormalizedZodCompilerPolicy> {
17
+ applyCurrentSnapshotToProcessEnv(apiRootPath);
18
+ await ensureTsLoaderRegistered(apiRootPath);
19
+
20
+ const configUrl = pathToFileURL(`${apiRootPath}/src/sonamu.config.ts`);
21
+ configUrl.searchParams.set("sonamu-build", `${Date.now()}-${Math.random()}`);
22
+ const imported =
23
+ /* SAFETY: CLI 파서와 빌드 도구 입력 계약이 이 값의 타입을 보장한다. */ (await import(
24
+ configUrl.href
25
+ )) as { default: unknown };
26
+ const configured = isFunctionValue(imported.default)
27
+ ? await Promise.resolve(imported.default())
28
+ : await Promise.resolve(imported.default);
29
+ if (!isObjectValue(configured) || configured === null || Array.isArray(configured)) {
30
+ throw new Error("sonamu.config.ts must export a configuration object");
31
+ }
32
+
33
+ const config: BuildSourceConfig = configured;
34
+ return normalizeZodCompilerPolicy(config.validation?.zodCompiler);
35
+ }