@warlock.js/core 4.0.135 → 4.0.137

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 (521) hide show
  1. package/esm/benchmark/benchmark-snapshots.d.ts +47 -0
  2. package/esm/benchmark/benchmark-snapshots.d.ts.map +1 -0
  3. package/esm/benchmark/benchmark-snapshots.js +77 -0
  4. package/esm/benchmark/benchmark-snapshots.js.map +1 -0
  5. package/esm/benchmark/benchmark.d.ts +25 -0
  6. package/esm/benchmark/benchmark.d.ts.map +1 -0
  7. package/esm/benchmark/benchmark.example.d.ts +2 -0
  8. package/esm/benchmark/benchmark.example.d.ts.map +1 -0
  9. package/esm/benchmark/benchmark.js +120 -0
  10. package/esm/benchmark/benchmark.js.map +1 -0
  11. package/esm/benchmark/channels/console.channel.d.ts +14 -0
  12. package/esm/benchmark/channels/console.channel.d.ts.map +1 -0
  13. package/esm/benchmark/channels/console.channel.js +29 -0
  14. package/esm/benchmark/channels/console.channel.js.map +1 -0
  15. package/esm/benchmark/channels/index.d.ts +3 -0
  16. package/esm/benchmark/channels/index.d.ts.map +1 -0
  17. package/esm/benchmark/channels/noop.channel.d.ts +5 -0
  18. package/esm/benchmark/channels/noop.channel.d.ts.map +1 -0
  19. package/esm/benchmark/channels/noop.channel.js +3 -0
  20. package/esm/benchmark/channels/noop.channel.js.map +1 -0
  21. package/esm/benchmark/index.d.ts +7 -0
  22. package/esm/benchmark/index.d.ts.map +1 -0
  23. package/esm/benchmark/profiler.d.ts +63 -0
  24. package/esm/benchmark/profiler.d.ts.map +1 -0
  25. package/esm/benchmark/profiler.js +155 -0
  26. package/esm/benchmark/profiler.js.map +1 -0
  27. package/esm/benchmark/types.d.ts +167 -0
  28. package/esm/benchmark/types.d.ts.map +1 -0
  29. package/esm/cli/cli-commands.manager.js +1 -1
  30. package/esm/cli/cli-commands.manager.js.map +1 -1
  31. package/esm/cli/commands/dev-server.command.js +1 -1
  32. package/esm/cli/commands/dev-server.command.js.map +1 -1
  33. package/esm/cli/commands/drop-tables.command.d.ts +2 -0
  34. package/esm/cli/commands/drop-tables.command.d.ts.map +1 -0
  35. package/esm/cli/commands/drop-tables.command.js +17 -0
  36. package/esm/cli/commands/drop-tables.command.js.map +1 -0
  37. package/esm/cli/commands/generate/generate.command.d.ts.map +1 -1
  38. package/esm/cli/commands/generate/generate.command.js +1 -0
  39. package/esm/cli/commands/generate/generate.command.js.map +1 -1
  40. package/esm/cli/commands/generate/generators/controller.generator.js +6 -6
  41. package/esm/cli/commands/generate/generators/controller.generator.js.map +1 -1
  42. package/esm/cli/commands/generate/generators/module.generator.d.ts.map +1 -1
  43. package/esm/cli/commands/generate/generators/module.generator.js +6 -5
  44. package/esm/cli/commands/generate/generators/module.generator.js.map +1 -1
  45. package/esm/cli/commands/generate/generators/validation.generator.js +11 -11
  46. package/esm/cli/commands/generate/generators/validation.generator.js.map +1 -1
  47. package/esm/cli/commands/generate/templates/stubs.d.ts +6 -3
  48. package/esm/cli/commands/generate/templates/stubs.d.ts.map +1 -1
  49. package/esm/cli/commands/generate/templates/stubs.js +37 -25
  50. package/esm/cli/commands/generate/templates/stubs.js.map +1 -1
  51. package/esm/cli/commands/generate/utils/prompt.js +21 -0
  52. package/esm/cli/commands/generate/utils/prompt.js.map +1 -0
  53. package/esm/cli/commands/seed.command.d.ts.map +1 -1
  54. package/esm/cli/commands/seed.command.js +9 -2
  55. package/esm/cli/commands/seed.command.js.map +1 -1
  56. package/esm/cli/commands/storage-put.action.d.ts +22 -0
  57. package/esm/cli/commands/storage-put.action.d.ts.map +1 -0
  58. package/esm/cli/commands/storage-put.action.js +75 -0
  59. package/esm/cli/commands/storage-put.action.js.map +1 -0
  60. package/esm/cli/commands/storage-put.command.d.ts +20 -0
  61. package/esm/cli/commands/storage-put.command.d.ts.map +1 -0
  62. package/esm/cli/commands/storage-put.command.js +41 -0
  63. package/esm/cli/commands/storage-put.command.js.map +1 -0
  64. package/esm/cli/commands/typings-generator.command.js +1 -1
  65. package/esm/cli/commands/typings-generator.command.js.map +1 -1
  66. package/esm/cli/commands-loader.js +1 -1
  67. package/esm/cli/commands-loader.js.map +1 -1
  68. package/esm/cli/framework-cli-commands.d.ts.map +1 -1
  69. package/esm/cli/framework-cli-commands.js +7 -2
  70. package/esm/cli/framework-cli-commands.js.map +1 -1
  71. package/esm/cli/types.d.ts +1 -1
  72. package/esm/cli/types.d.ts.map +1 -1
  73. package/esm/config/config-getter.d.ts +1 -1
  74. package/esm/config/config-getter.d.ts.map +1 -1
  75. package/esm/config/config-getter.js.map +1 -1
  76. package/esm/config/config-loader.d.ts +1 -1
  77. package/esm/config/config-loader.d.ts.map +1 -1
  78. package/esm/config/config-loader.js +1 -1
  79. package/esm/config/config-loader.js.map +1 -1
  80. package/esm/config/config-manager.d.ts +1 -1
  81. package/esm/config/config-manager.d.ts.map +1 -1
  82. package/esm/config/load-config-files.d.ts.map +1 -1
  83. package/esm/config/load-config-files.js +1 -1
  84. package/esm/config/load-config-files.js.map +1 -1
  85. package/esm/connectors/base-connector.d.ts.map +1 -0
  86. package/esm/{dev2-server/connectors → connectors}/base-connector.js +1 -1
  87. package/esm/connectors/base-connector.js.map +1 -0
  88. package/esm/connectors/cache-connector.d.ts.map +1 -0
  89. package/esm/connectors/cache-connector.js.map +1 -0
  90. package/esm/connectors/communicator-connector.d.ts.map +1 -0
  91. package/esm/connectors/communicator-connector.js.map +1 -0
  92. package/esm/connectors/connectors-manager.d.ts.map +1 -0
  93. package/esm/{dev2-server/connectors → connectors}/connectors-manager.js +1 -1
  94. package/esm/connectors/connectors-manager.js.map +1 -0
  95. package/esm/connectors/database-connector.d.ts.map +1 -0
  96. package/esm/connectors/database-connector.js.map +1 -0
  97. package/esm/{dev2-server/connectors → connectors}/http-connector.d.ts +2 -0
  98. package/esm/connectors/http-connector.d.ts.map +1 -0
  99. package/esm/{dev2-server/connectors → connectors}/http-connector.js +18 -4
  100. package/esm/connectors/http-connector.js.map +1 -0
  101. package/esm/connectors/index.d.ts.map +1 -0
  102. package/esm/connectors/storage.connector.d.ts.map +1 -0
  103. package/esm/{dev2-server/connectors → connectors}/storage.connector.js +1 -1
  104. package/esm/connectors/storage.connector.js.map +1 -0
  105. package/esm/connectors/types.d.ts.map +1 -0
  106. package/esm/connectors/types.js.map +1 -0
  107. package/esm/database/drop-tables-action.d.ts +3 -0
  108. package/esm/database/drop-tables-action.d.ts.map +1 -0
  109. package/esm/database/drop-tables-action.js +29 -0
  110. package/esm/database/drop-tables-action.js.map +1 -0
  111. package/esm/database/migrate-action.js +18 -10
  112. package/esm/database/migrate-action.js.map +1 -1
  113. package/esm/database/seed-command-action.js +4 -4
  114. package/esm/database/seed-command-action.js.map +1 -1
  115. package/esm/database/seeds/seeder.d.ts +4 -0
  116. package/esm/database/seeds/seeder.d.ts.map +1 -1
  117. package/esm/database/seeds/seeder.js.map +1 -1
  118. package/esm/database/seeds/seeders.manager.d.ts +1 -1
  119. package/esm/database/seeds/seeders.manager.d.ts.map +1 -1
  120. package/esm/database/seeds/seeders.manager.js +12 -5
  121. package/esm/database/seeds/seeders.manager.js.map +1 -1
  122. package/esm/database/utils.d.ts +1 -2
  123. package/esm/database/utils.d.ts.map +1 -1
  124. package/esm/database/utils.js +2 -2
  125. package/esm/database/utils.js.map +1 -1
  126. package/esm/dev-server/create-worker.d.ts.map +1 -0
  127. package/esm/dev-server/create-worker.js.map +1 -0
  128. package/esm/{dev2-server → dev-server}/dependency-graph.d.ts +10 -1
  129. package/esm/dev-server/dependency-graph.d.ts.map +1 -0
  130. package/esm/{dev2-server → dev-server}/dependency-graph.js +49 -5
  131. package/esm/dev-server/dependency-graph.js.map +1 -0
  132. package/esm/dev-server/dev-logger.d.ts.map +1 -0
  133. package/esm/dev-server/dev-logger.js.map +1 -0
  134. package/esm/{dev2-server → dev-server}/development-server.d.ts +8 -0
  135. package/esm/dev-server/development-server.d.ts.map +1 -0
  136. package/esm/{dev2-server → dev-server}/development-server.js +57 -7
  137. package/esm/dev-server/development-server.js.map +1 -0
  138. package/esm/dev-server/events.d.ts.map +1 -0
  139. package/esm/dev-server/events.js.map +1 -0
  140. package/esm/dev-server/export-analyzer.d.ts.map +1 -0
  141. package/esm/dev-server/export-analyzer.js.map +1 -0
  142. package/esm/dev-server/file-event-handler.d.ts.map +1 -0
  143. package/esm/{dev2-server → dev-server}/file-event-handler.js +13 -4
  144. package/esm/dev-server/file-event-handler.js.map +1 -0
  145. package/esm/{dev2-server → dev-server}/file-manager.d.ts +10 -1
  146. package/esm/dev-server/file-manager.d.ts.map +1 -0
  147. package/esm/{dev2-server → dev-server}/file-manager.js +26 -3
  148. package/esm/dev-server/file-manager.js.map +1 -0
  149. package/esm/dev-server/file-operations.d.ts.map +1 -0
  150. package/esm/dev-server/file-operations.js.map +1 -0
  151. package/esm/{dev2-server → dev-server}/files-orchestrator.d.ts +7 -1
  152. package/esm/dev-server/files-orchestrator.d.ts.map +1 -0
  153. package/esm/{dev2-server → dev-server}/files-orchestrator.js +39 -8
  154. package/esm/dev-server/files-orchestrator.js.map +1 -0
  155. package/esm/dev-server/files-watcher.d.ts.map +1 -0
  156. package/esm/{dev2-server → dev-server}/files-watcher.js +30 -4
  157. package/esm/dev-server/files-watcher.js.map +1 -0
  158. package/esm/dev-server/flags.d.ts.map +1 -0
  159. package/esm/dev-server/flags.js.map +1 -0
  160. package/esm/dev-server/health-checker/checkers/base-health-checker.d.ts.map +1 -0
  161. package/esm/dev-server/health-checker/checkers/base-health-checker.js.map +1 -0
  162. package/esm/dev-server/health-checker/checkers/eslint-health-checker.d.ts.map +1 -0
  163. package/esm/dev-server/health-checker/checkers/eslint-health-checker.js.map +1 -0
  164. package/esm/dev-server/health-checker/checkers/typescript-health-checker.d.ts.map +1 -0
  165. package/esm/dev-server/health-checker/checkers/typescript-health-checker.js.map +1 -0
  166. package/esm/dev-server/health-checker/file-health-checker.contract.d.ts.map +1 -0
  167. package/esm/dev-server/health-checker/file-health-result.d.ts.map +1 -0
  168. package/esm/dev-server/health-checker/file-health-result.js.map +1 -0
  169. package/esm/dev-server/health-checker/files-healthcare.manager.d.ts.map +1 -0
  170. package/esm/dev-server/health-checker/files-healthcare.manager.js.map +1 -0
  171. package/esm/dev-server/health-checker/index.d.ts.map +1 -0
  172. package/esm/dev-server/health-checker/workers/eslint-health.worker.d.ts.map +1 -0
  173. package/esm/dev-server/health-checker/workers/eslint-health.worker.js.map +1 -0
  174. package/esm/dev-server/health-checker/workers/ts-health.worker.d.ts.map +1 -0
  175. package/esm/dev-server/health-checker/workers/ts-health.worker.js.map +1 -0
  176. package/esm/dev-server/import-deduplicator.d.ts +75 -0
  177. package/esm/dev-server/import-deduplicator.d.ts.map +1 -0
  178. package/esm/dev-server/import-deduplicator.js +288 -0
  179. package/esm/dev-server/import-deduplicator.js.map +1 -0
  180. package/esm/dev-server/import-deduplicator.test.d.ts +7 -0
  181. package/esm/dev-server/import-deduplicator.test.d.ts.map +1 -0
  182. package/esm/dev-server/import-transformer.d.ts.map +1 -0
  183. package/esm/{dev2-server → dev-server}/import-transformer.js +61 -129
  184. package/esm/dev-server/import-transformer.js.map +1 -0
  185. package/esm/{dev2-server → dev-server}/index.d.ts.map +1 -1
  186. package/esm/{dev2-server → dev-server}/layer-executor.d.ts +5 -2
  187. package/esm/dev-server/layer-executor.d.ts.map +1 -0
  188. package/esm/{dev2-server → dev-server}/layer-executor.js +34 -9
  189. package/esm/dev-server/layer-executor.js.map +1 -0
  190. package/esm/dev-server/manifest-manager.d.ts.map +1 -0
  191. package/esm/dev-server/manifest-manager.js.map +1 -0
  192. package/esm/{dev2-server → dev-server}/module-loader.d.ts +3 -0
  193. package/esm/dev-server/module-loader.d.ts.map +1 -0
  194. package/esm/{dev2-server → dev-server}/module-loader.js +9 -5
  195. package/esm/dev-server/module-loader.js.map +1 -0
  196. package/esm/dev-server/package-json-manager.d.ts.map +1 -0
  197. package/esm/dev-server/package-json-manager.js.map +1 -0
  198. package/esm/dev-server/parse-imports.d.ts +34 -0
  199. package/esm/dev-server/parse-imports.d.ts.map +1 -0
  200. package/esm/{dev2-server → dev-server}/parse-imports.js +98 -1
  201. package/esm/dev-server/parse-imports.js.map +1 -0
  202. package/esm/dev-server/path.d.ts.map +1 -0
  203. package/esm/dev-server/path.js.map +1 -0
  204. package/esm/dev-server/runtime-import-helper.d.ts.map +1 -0
  205. package/esm/{dev2-server → dev-server}/runtime-import-helper.js +3 -3
  206. package/esm/dev-server/runtime-import-helper.js.map +1 -0
  207. package/esm/dev-server/special-files-collector.d.ts.map +1 -0
  208. package/esm/dev-server/special-files-collector.js.map +1 -0
  209. package/esm/dev-server/start-development-server.d.ts.map +1 -0
  210. package/esm/dev-server/start-development-server.js.map +1 -0
  211. package/esm/dev-server/transpile-file.d.ts.map +1 -0
  212. package/esm/dev-server/transpile-file.js.map +1 -0
  213. package/esm/dev-server/tsconfig-manager.d.ts.map +1 -0
  214. package/esm/dev-server/tsconfig-manager.js.map +1 -0
  215. package/esm/dev-server/type-generator.d.ts.map +1 -0
  216. package/esm/dev-server/type-generator.js.map +1 -0
  217. package/esm/dev-server/types.d.ts.map +1 -0
  218. package/esm/dev-server/utils.d.ts.map +1 -0
  219. package/esm/{dev2-server → dev-server}/utils.js +2 -1
  220. package/esm/dev-server/utils.js.map +1 -0
  221. package/esm/encryption/encrypt.d.ts +23 -0
  222. package/esm/encryption/encrypt.d.ts.map +1 -0
  223. package/esm/encryption/encrypt.js +85 -0
  224. package/esm/encryption/encrypt.js.map +1 -0
  225. package/esm/encryption/hash.d.ts +17 -0
  226. package/esm/encryption/hash.d.ts.map +1 -0
  227. package/esm/encryption/hash.js +26 -0
  228. package/esm/encryption/hash.js.map +1 -0
  229. package/esm/encryption/index.d.ts +5 -0
  230. package/esm/encryption/index.d.ts.map +1 -0
  231. package/esm/encryption/password.d.ts +23 -0
  232. package/esm/encryption/password.d.ts.map +1 -0
  233. package/esm/encryption/password.js +72 -0
  234. package/esm/encryption/password.js.map +1 -0
  235. package/esm/encryption/types.d.ts +51 -0
  236. package/esm/encryption/types.d.ts.map +1 -0
  237. package/esm/generations/add-command.action.d.ts.map +1 -1
  238. package/esm/generations/add-command.action.js +44 -15
  239. package/esm/generations/add-command.action.js.map +1 -1
  240. package/esm/http/middleware/inject-request-context.d.ts.map +1 -1
  241. package/esm/http/middleware/inject-request-context.js +3 -1
  242. package/esm/http/middleware/inject-request-context.js.map +1 -1
  243. package/esm/http/request.d.ts +9 -1
  244. package/esm/http/request.d.ts.map +1 -1
  245. package/esm/http/request.js +11 -1
  246. package/esm/http/request.js.map +1 -1
  247. package/esm/http/response.d.ts.map +1 -1
  248. package/esm/http/response.js +54 -16
  249. package/esm/http/response.js.map +1 -1
  250. package/esm/http/types.d.ts +14 -6
  251. package/esm/http/types.d.ts.map +1 -1
  252. package/esm/http/uploaded-file.js +1 -1
  253. package/esm/index.d.ts +7 -3
  254. package/esm/index.d.ts.map +1 -1
  255. package/esm/index.js +1 -1
  256. package/esm/mail/mailer-pool.js +11 -11
  257. package/esm/mail/send-mail.js +1 -1
  258. package/esm/mail/send-mail.js.map +1 -1
  259. package/esm/production/production-builder.js +1 -1
  260. package/esm/repositories/adapters/cascade/cascade-adapter.js +2 -2
  261. package/esm/repositories/adapters/cascade/cascade-adapter.js.map +1 -1
  262. package/esm/repositories/adapters/cascade/cascade-query-builder.d.ts +17 -0
  263. package/esm/repositories/adapters/cascade/cascade-query-builder.d.ts.map +1 -1
  264. package/esm/repositories/adapters/cascade/cascade-query-builder.js +39 -25
  265. package/esm/repositories/adapters/cascade/cascade-query-builder.js.map +1 -1
  266. package/esm/repositories/adapters/cascade/filter-applicator.d.ts +49 -0
  267. package/esm/repositories/adapters/cascade/filter-applicator.d.ts.map +1 -1
  268. package/esm/repositories/adapters/cascade/filter-applicator.js +99 -0
  269. package/esm/repositories/adapters/cascade/filter-applicator.js.map +1 -1
  270. package/esm/repositories/contracts/query-builder.contract.d.ts +41 -0
  271. package/esm/repositories/contracts/query-builder.contract.d.ts.map +1 -1
  272. package/esm/repositories/contracts/types.d.ts +56 -6
  273. package/esm/repositories/contracts/types.d.ts.map +1 -1
  274. package/esm/repositories/repository.manager.d.ts +93 -48
  275. package/esm/repositories/repository.manager.d.ts.map +1 -1
  276. package/esm/repositories/repository.manager.js +139 -50
  277. package/esm/repositories/repository.manager.js.map +1 -1
  278. package/esm/resource/resource-field-builder.d.ts.map +1 -1
  279. package/esm/resource/resource-field-builder.js +18 -4
  280. package/esm/resource/resource-field-builder.js.map +1 -1
  281. package/esm/resource/resource.d.ts +23 -1
  282. package/esm/resource/resource.d.ts.map +1 -1
  283. package/esm/resource/resource.js +56 -3
  284. package/esm/resource/resource.js.map +1 -1
  285. package/esm/resource/types.d.ts +12 -2
  286. package/esm/resource/types.d.ts.map +1 -1
  287. package/esm/restful/restful.js +1 -1
  288. package/esm/restful/restful.js.map +1 -1
  289. package/esm/retry/index.d.ts +3 -0
  290. package/esm/retry/index.d.ts.map +1 -0
  291. package/esm/retry/retry.d.ts +21 -0
  292. package/esm/retry/retry.d.ts.map +1 -0
  293. package/esm/retry/retry.js +39 -0
  294. package/esm/retry/retry.js.map +1 -0
  295. package/esm/retry/types.d.ts +27 -0
  296. package/esm/retry/types.d.ts.map +1 -0
  297. package/esm/router/types.d.ts +10 -10
  298. package/esm/router/types.d.ts.map +1 -1
  299. package/esm/storage/scoped-storage.d.ts +34 -1
  300. package/esm/storage/scoped-storage.d.ts.map +1 -1
  301. package/esm/storage/scoped-storage.js +84 -1
  302. package/esm/storage/scoped-storage.js.map +1 -1
  303. package/esm/storage/types.d.ts +53 -0
  304. package/esm/storage/types.d.ts.map +1 -1
  305. package/esm/tests/index.d.ts +1 -0
  306. package/esm/tests/index.d.ts.map +1 -1
  307. package/esm/tests/start-http-development-server.d.ts +12 -0
  308. package/esm/tests/start-http-development-server.d.ts.map +1 -1
  309. package/esm/tests/start-http-development-server.js +66 -6
  310. package/esm/tests/start-http-development-server.js.map +1 -1
  311. package/esm/tests/test-helpers.d.ts +43 -0
  312. package/esm/tests/test-helpers.d.ts.map +1 -0
  313. package/esm/tests/test-helpers.js +86 -0
  314. package/esm/tests/test-helpers.js.map +1 -0
  315. package/esm/tests/vitest-setup.d.ts +1 -1
  316. package/esm/tests/vitest-setup.d.ts.map +1 -1
  317. package/esm/tests/vitest-setup.js +1 -1
  318. package/esm/tests/vitest-setup.js.map +1 -1
  319. package/esm/use-cases/index.d.ts +7 -0
  320. package/esm/use-cases/index.d.ts.map +1 -0
  321. package/esm/use-cases/types.d.ts +267 -0
  322. package/esm/use-cases/types.d.ts.map +1 -0
  323. package/esm/use-cases/use-case-events.d.ts +33 -0
  324. package/esm/use-cases/use-case-events.d.ts.map +1 -0
  325. package/esm/use-cases/use-case-events.js +65 -0
  326. package/esm/use-cases/use-case-events.js.map +1 -0
  327. package/esm/use-cases/use-case-pipeline.d.ts +29 -0
  328. package/esm/use-cases/use-case-pipeline.d.ts.map +1 -0
  329. package/esm/use-cases/use-case-pipeline.js +45 -0
  330. package/esm/use-cases/use-case-pipeline.js.map +1 -0
  331. package/esm/use-cases/use-case.d.ts +27 -0
  332. package/esm/use-cases/use-case.d.ts.map +1 -0
  333. package/esm/use-cases/use-case.errors.d.ts +6 -0
  334. package/esm/use-cases/use-case.errors.d.ts.map +1 -0
  335. package/esm/use-cases/use-case.errors.js +8 -0
  336. package/esm/use-cases/use-case.errors.js.map +1 -0
  337. package/esm/use-cases/use-case.js +138 -0
  338. package/esm/use-cases/use-case.js.map +1 -0
  339. package/esm/use-cases/use-cases-registry.d.ts +38 -0
  340. package/esm/use-cases/use-cases-registry.d.ts.map +1 -0
  341. package/esm/use-cases/use-cases-registry.js +92 -0
  342. package/esm/use-cases/use-cases-registry.js.map +1 -0
  343. package/esm/validation/database/exists-except-current-id.js +1 -1
  344. package/esm/validation/database/exists-except-current-user.js +1 -1
  345. package/esm/validation/database/unique-except-current-id.js +1 -1
  346. package/esm/validation/database/unique-except-current-user.js +1 -1
  347. package/esm/validation/init.js.map +1 -1
  348. package/esm/validation/plugins/database-plugin.d.ts.map +1 -1
  349. package/esm/validation/plugins/database-plugin.js +18 -30
  350. package/esm/validation/plugins/database-plugin.js.map +1 -1
  351. package/esm/validation/plugins/file-plugin.d.ts.map +1 -1
  352. package/esm/validation/plugins/file-plugin.js.map +1 -1
  353. package/esm/validation/plugins/localized-plugin.d.ts.map +1 -1
  354. package/esm/validation/plugins/localized-plugin.js.map +1 -1
  355. package/esm/validation/validators/file-validator.d.ts +14 -14
  356. package/esm/validation/validators/file-validator.d.ts.map +1 -1
  357. package/esm/validation/validators/file-validator.js +26 -27
  358. package/esm/validation/validators/file-validator.js.map +1 -1
  359. package/esm/warlock-config/types.d.ts +7 -2
  360. package/esm/warlock-config/types.d.ts.map +1 -1
  361. package/esm/warlock-config/warlock-config.manager.js +1 -1
  362. package/esm/warlock-config/warlock-config.manager.js.map +1 -1
  363. package/package.json +7 -7
  364. package/esm/dev2-server/connectors/base-connector.d.ts.map +0 -1
  365. package/esm/dev2-server/connectors/base-connector.js.map +0 -1
  366. package/esm/dev2-server/connectors/cache-connector.d.ts.map +0 -1
  367. package/esm/dev2-server/connectors/cache-connector.js.map +0 -1
  368. package/esm/dev2-server/connectors/communicator-connector.d.ts.map +0 -1
  369. package/esm/dev2-server/connectors/communicator-connector.js.map +0 -1
  370. package/esm/dev2-server/connectors/connectors-manager.d.ts.map +0 -1
  371. package/esm/dev2-server/connectors/connectors-manager.js.map +0 -1
  372. package/esm/dev2-server/connectors/database-connector.d.ts.map +0 -1
  373. package/esm/dev2-server/connectors/database-connector.js.map +0 -1
  374. package/esm/dev2-server/connectors/http-connector.d.ts.map +0 -1
  375. package/esm/dev2-server/connectors/http-connector.js.map +0 -1
  376. package/esm/dev2-server/connectors/index.d.ts.map +0 -1
  377. package/esm/dev2-server/connectors/storage.connector.d.ts.map +0 -1
  378. package/esm/dev2-server/connectors/storage.connector.js.map +0 -1
  379. package/esm/dev2-server/connectors/types.d.ts.map +0 -1
  380. package/esm/dev2-server/connectors/types.js.map +0 -1
  381. package/esm/dev2-server/create-worker.d.ts.map +0 -1
  382. package/esm/dev2-server/create-worker.js.map +0 -1
  383. package/esm/dev2-server/dependency-graph.d.ts.map +0 -1
  384. package/esm/dev2-server/dependency-graph.js.map +0 -1
  385. package/esm/dev2-server/dev-logger.d.ts.map +0 -1
  386. package/esm/dev2-server/dev-logger.js.map +0 -1
  387. package/esm/dev2-server/development-server.d.ts.map +0 -1
  388. package/esm/dev2-server/development-server.js.map +0 -1
  389. package/esm/dev2-server/events.d.ts.map +0 -1
  390. package/esm/dev2-server/events.js.map +0 -1
  391. package/esm/dev2-server/export-analyzer.d.ts.map +0 -1
  392. package/esm/dev2-server/export-analyzer.js.map +0 -1
  393. package/esm/dev2-server/file-event-handler.d.ts.map +0 -1
  394. package/esm/dev2-server/file-event-handler.js.map +0 -1
  395. package/esm/dev2-server/file-manager.d.ts.map +0 -1
  396. package/esm/dev2-server/file-manager.js.map +0 -1
  397. package/esm/dev2-server/file-operations.d.ts.map +0 -1
  398. package/esm/dev2-server/file-operations.js.map +0 -1
  399. package/esm/dev2-server/files-orchestrator.d.ts.map +0 -1
  400. package/esm/dev2-server/files-orchestrator.js.map +0 -1
  401. package/esm/dev2-server/files-watcher.d.ts.map +0 -1
  402. package/esm/dev2-server/files-watcher.js.map +0 -1
  403. package/esm/dev2-server/flags.d.ts.map +0 -1
  404. package/esm/dev2-server/flags.js.map +0 -1
  405. package/esm/dev2-server/health-checker/checkers/base-health-checker.d.ts.map +0 -1
  406. package/esm/dev2-server/health-checker/checkers/base-health-checker.js.map +0 -1
  407. package/esm/dev2-server/health-checker/checkers/eslint-health-checker.d.ts.map +0 -1
  408. package/esm/dev2-server/health-checker/checkers/eslint-health-checker.js.map +0 -1
  409. package/esm/dev2-server/health-checker/checkers/typescript-health-checker.d.ts.map +0 -1
  410. package/esm/dev2-server/health-checker/checkers/typescript-health-checker.js.map +0 -1
  411. package/esm/dev2-server/health-checker/file-health-checker.contract.d.ts.map +0 -1
  412. package/esm/dev2-server/health-checker/file-health-result.d.ts.map +0 -1
  413. package/esm/dev2-server/health-checker/file-health-result.js.map +0 -1
  414. package/esm/dev2-server/health-checker/files-healthcare.manager.d.ts.map +0 -1
  415. package/esm/dev2-server/health-checker/files-healthcare.manager.js.map +0 -1
  416. package/esm/dev2-server/health-checker/index.d.ts.map +0 -1
  417. package/esm/dev2-server/health-checker/workers/eslint-health.worker.d.ts.map +0 -1
  418. package/esm/dev2-server/health-checker/workers/eslint-health.worker.js.map +0 -1
  419. package/esm/dev2-server/health-checker/workers/ts-health.worker.d.ts.map +0 -1
  420. package/esm/dev2-server/health-checker/workers/ts-health.worker.js.map +0 -1
  421. package/esm/dev2-server/import-transformer.d.ts.map +0 -1
  422. package/esm/dev2-server/import-transformer.js.map +0 -1
  423. package/esm/dev2-server/layer-executor.d.ts.map +0 -1
  424. package/esm/dev2-server/layer-executor.js.map +0 -1
  425. package/esm/dev2-server/manifest-manager.d.ts.map +0 -1
  426. package/esm/dev2-server/manifest-manager.js.map +0 -1
  427. package/esm/dev2-server/module-loader.d.ts.map +0 -1
  428. package/esm/dev2-server/module-loader.js.map +0 -1
  429. package/esm/dev2-server/package-json-manager.d.ts.map +0 -1
  430. package/esm/dev2-server/package-json-manager.js.map +0 -1
  431. package/esm/dev2-server/parse-imports.d.ts +0 -13
  432. package/esm/dev2-server/parse-imports.d.ts.map +0 -1
  433. package/esm/dev2-server/parse-imports.js.map +0 -1
  434. package/esm/dev2-server/path.d.ts.map +0 -1
  435. package/esm/dev2-server/path.js.map +0 -1
  436. package/esm/dev2-server/runtime-import-helper.d.ts.map +0 -1
  437. package/esm/dev2-server/runtime-import-helper.js.map +0 -1
  438. package/esm/dev2-server/special-files-collector.d.ts.map +0 -1
  439. package/esm/dev2-server/special-files-collector.js.map +0 -1
  440. package/esm/dev2-server/start-development-server.d.ts.map +0 -1
  441. package/esm/dev2-server/start-development-server.js.map +0 -1
  442. package/esm/dev2-server/transpile-file.d.ts.map +0 -1
  443. package/esm/dev2-server/transpile-file.js.map +0 -1
  444. package/esm/dev2-server/tsconfig-manager.d.ts.map +0 -1
  445. package/esm/dev2-server/tsconfig-manager.js.map +0 -1
  446. package/esm/dev2-server/type-generator.d.ts.map +0 -1
  447. package/esm/dev2-server/type-generator.js.map +0 -1
  448. package/esm/dev2-server/types.d.ts.map +0 -1
  449. package/esm/dev2-server/utils.d.ts.map +0 -1
  450. package/esm/dev2-server/utils.js.map +0 -1
  451. package/esm/http/errors/resource-not-found.error.d.ts +0 -21
  452. package/esm/http/errors/resource-not-found.error.d.ts.map +0 -1
  453. package/esm/router/utils.d.ts +0 -5
  454. package/esm/router/utils.d.ts.map +0 -1
  455. package/esm/store/index.d.ts +0 -25
  456. package/esm/store/index.d.ts.map +0 -1
  457. package/esm/store/index.js +0 -52
  458. package/esm/store/index.js.map +0 -1
  459. /package/esm/{dev2-server/connectors → connectors}/base-connector.d.ts +0 -0
  460. /package/esm/{dev2-server/connectors → connectors}/cache-connector.d.ts +0 -0
  461. /package/esm/{dev2-server/connectors → connectors}/cache-connector.js +0 -0
  462. /package/esm/{dev2-server/connectors → connectors}/communicator-connector.d.ts +0 -0
  463. /package/esm/{dev2-server/connectors → connectors}/communicator-connector.js +0 -0
  464. /package/esm/{dev2-server/connectors → connectors}/connectors-manager.d.ts +0 -0
  465. /package/esm/{dev2-server/connectors → connectors}/database-connector.d.ts +0 -0
  466. /package/esm/{dev2-server/connectors → connectors}/database-connector.js +0 -0
  467. /package/esm/{dev2-server/connectors → connectors}/index.d.ts +0 -0
  468. /package/esm/{dev2-server/connectors → connectors}/storage.connector.d.ts +0 -0
  469. /package/esm/{dev2-server/connectors → connectors}/types.d.ts +0 -0
  470. /package/esm/{dev2-server/connectors → connectors}/types.js +0 -0
  471. /package/esm/{dev2-server → dev-server}/create-worker.d.ts +0 -0
  472. /package/esm/{dev2-server → dev-server}/create-worker.js +0 -0
  473. /package/esm/{dev2-server → dev-server}/dev-logger.d.ts +0 -0
  474. /package/esm/{dev2-server → dev-server}/dev-logger.js +0 -0
  475. /package/esm/{dev2-server → dev-server}/events.d.ts +0 -0
  476. /package/esm/{dev2-server → dev-server}/events.js +0 -0
  477. /package/esm/{dev2-server → dev-server}/export-analyzer.d.ts +0 -0
  478. /package/esm/{dev2-server → dev-server}/export-analyzer.js +0 -0
  479. /package/esm/{dev2-server → dev-server}/file-event-handler.d.ts +0 -0
  480. /package/esm/{dev2-server → dev-server}/file-operations.d.ts +0 -0
  481. /package/esm/{dev2-server → dev-server}/file-operations.js +0 -0
  482. /package/esm/{dev2-server → dev-server}/files-watcher.d.ts +0 -0
  483. /package/esm/{dev2-server → dev-server}/flags.d.ts +0 -0
  484. /package/esm/{dev2-server → dev-server}/flags.js +0 -0
  485. /package/esm/{dev2-server → dev-server}/health-checker/checkers/base-health-checker.d.ts +0 -0
  486. /package/esm/{dev2-server → dev-server}/health-checker/checkers/base-health-checker.js +0 -0
  487. /package/esm/{dev2-server → dev-server}/health-checker/checkers/eslint-health-checker.d.ts +0 -0
  488. /package/esm/{dev2-server → dev-server}/health-checker/checkers/eslint-health-checker.js +0 -0
  489. /package/esm/{dev2-server → dev-server}/health-checker/checkers/typescript-health-checker.d.ts +0 -0
  490. /package/esm/{dev2-server → dev-server}/health-checker/checkers/typescript-health-checker.js +0 -0
  491. /package/esm/{dev2-server → dev-server}/health-checker/file-health-checker.contract.d.ts +0 -0
  492. /package/esm/{dev2-server → dev-server}/health-checker/file-health-result.d.ts +0 -0
  493. /package/esm/{dev2-server → dev-server}/health-checker/file-health-result.js +0 -0
  494. /package/esm/{dev2-server → dev-server}/health-checker/files-healthcare.manager.d.ts +0 -0
  495. /package/esm/{dev2-server → dev-server}/health-checker/files-healthcare.manager.js +0 -0
  496. /package/esm/{dev2-server → dev-server}/health-checker/index.d.ts +0 -0
  497. /package/esm/{dev2-server → dev-server}/health-checker/workers/eslint-health.worker.d.ts +0 -0
  498. /package/esm/{dev2-server → dev-server}/health-checker/workers/eslint-health.worker.js +0 -0
  499. /package/esm/{dev2-server → dev-server}/health-checker/workers/ts-health.worker.d.ts +0 -0
  500. /package/esm/{dev2-server → dev-server}/health-checker/workers/ts-health.worker.js +0 -0
  501. /package/esm/{dev2-server → dev-server}/import-transformer.d.ts +0 -0
  502. /package/esm/{dev2-server → dev-server}/index.d.ts +0 -0
  503. /package/esm/{dev2-server → dev-server}/manifest-manager.d.ts +0 -0
  504. /package/esm/{dev2-server → dev-server}/manifest-manager.js +0 -0
  505. /package/esm/{dev2-server → dev-server}/package-json-manager.d.ts +0 -0
  506. /package/esm/{dev2-server → dev-server}/package-json-manager.js +0 -0
  507. /package/esm/{dev2-server → dev-server}/path.d.ts +0 -0
  508. /package/esm/{dev2-server → dev-server}/path.js +0 -0
  509. /package/esm/{dev2-server → dev-server}/runtime-import-helper.d.ts +0 -0
  510. /package/esm/{dev2-server → dev-server}/special-files-collector.d.ts +0 -0
  511. /package/esm/{dev2-server → dev-server}/special-files-collector.js +0 -0
  512. /package/esm/{dev2-server → dev-server}/start-development-server.d.ts +0 -0
  513. /package/esm/{dev2-server → dev-server}/start-development-server.js +0 -0
  514. /package/esm/{dev2-server → dev-server}/transpile-file.d.ts +0 -0
  515. /package/esm/{dev2-server → dev-server}/transpile-file.js +0 -0
  516. /package/esm/{dev2-server → dev-server}/tsconfig-manager.d.ts +0 -0
  517. /package/esm/{dev2-server → dev-server}/tsconfig-manager.js +0 -0
  518. /package/esm/{dev2-server → dev-server}/type-generator.d.ts +0 -0
  519. /package/esm/{dev2-server → dev-server}/type-generator.js +0 -0
  520. /package/esm/{dev2-server → dev-server}/types.d.ts +0 -0
  521. /package/esm/{dev2-server → dev-server}/utils.d.ts +0 -0
@@ -0,0 +1,267 @@
1
+ import { type ObjectValidator } from "@warlock.js/seal";
2
+ import { BenchmarkOptions } from "../benchmark";
3
+ import { RetryOptions } from "../retry";
4
+ /**
5
+ * Shared context object passed through the entire use case pipeline.
6
+ * Contains the optional schema and can be enriched by guards/middleware
7
+ * with arbitrary data (e.g., currentUser, permissions, request metadata).
8
+ */
9
+ export type UseCaseContext = {
10
+ schema?: ObjectValidator;
11
+ } & Record<string, any>;
12
+ /**
13
+ * Guard function that runs **before** schema validation.
14
+ *
15
+ * Guards are authorization/precondition checks. They receive a read-only
16
+ * view of the input data and can enrich the context, but **must not** mutate
17
+ * the input. Throw an error to abort the entire pipeline.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const authGuard: UseCaseGuard<LoginInput> = async (data, ctx) => {
22
+ * const user = await getSession(ctx.token);
23
+ * if (!user) throw new UnauthorizedError();
24
+ * ctx.currentUser = user;
25
+ * };
26
+ * ```
27
+ *
28
+ * @template Input - The shape of the use case input data
29
+ */
30
+ export type UseCaseGuard<Input> = (data: Readonly<Input>, ctx: UseCaseContext) => void | Promise<void>;
31
+ /**
32
+ * Before middleware that runs **after** schema validation.
33
+ *
34
+ * Receives validated data and must return the (optionally transformed) data.
35
+ * Multiple before middlewares form a chain: output of one becomes input of next.
36
+ * Can also enrich the context.
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * const normalizeEmail: UseCaseBeforeMiddleware<SignupInput> = async (data, ctx) => {
41
+ * return { ...data, email: data.email.toLowerCase().trim() };
42
+ * };
43
+ * ```
44
+ *
45
+ * @template Input - The shape of the use case input data
46
+ */
47
+ export type UseCaseBeforeMiddleware<Input> = (data: Input, ctx: UseCaseContext) => Input | Promise<Input>;
48
+ /**
49
+ * After middleware that runs **after** the handler succeeds.
50
+ *
51
+ * Fire-and-forget side effects: errors are caught and logged, never thrown.
52
+ * Does **not** affect the returned output. Use for analytics, notifications,
53
+ * cache invalidation, webhooks, etc.
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * const notifySlack: UseCaseAfterMiddleware<OrderOutput> = async (output, ctx) => {
58
+ * await slack.send(`New order #${output.orderId} placed`);
59
+ * };
60
+ * ```
61
+ *
62
+ * @template Output - The shape of the use case output data
63
+ */
64
+ export type UseCaseAfterMiddleware<Output> = (output: Output, ctx: UseCaseContext) => void | Promise<void>;
65
+ /**
66
+ * Context passed to `onExecuting` lifecycle event callbacks.
67
+ * Fired at the start of each use case execution, before guards run.
68
+ */
69
+ export type UseCaseOnExecutingContext = {
70
+ /** The shared pipeline context */
71
+ ctx: UseCaseContext;
72
+ /** Unique execution ID */
73
+ id: string;
74
+ /** Use case name */
75
+ name: string;
76
+ /** Raw input data */
77
+ data: any;
78
+ /** Schema validator (if defined) */
79
+ schema: ObjectValidator;
80
+ /** Timestamp when execution started */
81
+ startedAt: Date;
82
+ };
83
+ /**
84
+ * Use case definition.
85
+ *
86
+ * Defines the full execution pipeline: guards → validation → before → handler → after.
87
+ * All fields except `name` and `handler` are optional.
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * const createOrder = await useCase<OrderOutput, OrderInput>({
92
+ * name: "create-order",
93
+ * guards: [authGuard, rateLimitGuard],
94
+ * schema: v.object({ productId: v.string().required(), quantity: v.number().min(1) }),
95
+ * before: [normalizeInput, enrichWithPricing],
96
+ * handler: async (data, ctx) => orderService.create(data, ctx.currentUser),
97
+ * after: [sendConfirmationEmail, invalidateCache],
98
+ * retries: { count: 3, delay: 1000 },
99
+ * benchmark: true,
100
+ * });
101
+ * ```
102
+ *
103
+ * @template Output - The shape of the handler's return value
104
+ * @template Input - The shape of the input data (before transformation)
105
+ */
106
+ export type UseCase<Output = any, Input = any> = {
107
+ /** Unique use case identifier, used for registration, logging, and cache keys */
108
+ name: string;
109
+ /** Core business logic handler. Receives validated + transformed data and context */
110
+ handler: (filteredData: Input, ctx: UseCaseContext) => Promise<Output>;
111
+ /** Optional schema validator (from @warlock.js/seal). Runs after guards */
112
+ schema?: ObjectValidator;
113
+ /** Guards to run before validation. Sequential, can enrich ctx, cannot mutate data */
114
+ guards?: UseCaseGuard<Input>[];
115
+ /** Before middleware to run after validation. Sequential, can transform data */
116
+ before?: UseCaseBeforeMiddleware<Input>[];
117
+ /** After middleware to run on success. Fire-and-forget, errors are logged not thrown */
118
+ after?: UseCaseAfterMiddleware<Output>[];
119
+ /** Lifecycle callback: fires when execution starts (before guards) */
120
+ onExecuting?: (ctx: UseCaseOnExecutingContext) => void;
121
+ /** Lifecycle callback: fires on successful completion with full result snapshot */
122
+ onCompleted?: (result: UseCaseResult<Output>) => void;
123
+ /** Lifecycle callback: fires on error with error details and execution context */
124
+ onError?: (ctx: UseCaseErrorResult) => void;
125
+ /**
126
+ * Retry configuration. When set, the handler is retried on failure
127
+ * up to `count` times with an optional `delay` between attempts.
128
+ */
129
+ retryOptions?: RetryOptions;
130
+ /**
131
+ * Benchmark configuration. Set to `true` for default thresholds,
132
+ * or provide an object to customize latency classification.
133
+ */
134
+ benchmarkOptions?: BenchmarkOptions | false;
135
+ };
136
+ /**
137
+ * A registered use case with call tracking metadata.
138
+ * Created internally when a use case is registered via `useCase()`.
139
+ */
140
+ export type RegisteredUseCase<Output = any, Input = any> = UseCase<Output, Input> & {
141
+ /** Execution call counters */
142
+ calls: {
143
+ /** Number of successful executions */
144
+ success: number;
145
+ /** Number of failed executions */
146
+ failed: number;
147
+ /** Total executions (success + failed) */
148
+ total: number;
149
+ };
150
+ };
151
+ /**
152
+ * Runtime options passed at invocation time (second argument to the executor).
153
+ * These override or supplement the use case definition for a single execution.
154
+ *
155
+ * @example
156
+ * ```ts
157
+ * await createOrder(orderData, {
158
+ * id: "order-123",
159
+ * ctx: { currentUser },
160
+ * onCompleted: (result) => console.log("Order created:", result.output),
161
+ * });
162
+ * ```
163
+ *
164
+ * @template Output - The shape of the use case output data
165
+ */
166
+ export type UseCaseRuntimeOptions<Output = any> = {
167
+ /** Override the auto-generated execution ID */
168
+ id?: string;
169
+ /** Provide a pre-populated context object */
170
+ ctx?: UseCaseContext;
171
+ /** Invocation-level lifecycle callback: fires first, before use case and global */
172
+ onExecuting?: (ctx: UseCaseOnExecutingContext) => void;
173
+ /** Invocation-level lifecycle callback: fires first on success */
174
+ onCompleted?: (result: UseCaseResult<Output>) => void;
175
+ /** Invocation-level lifecycle callback: fires first on error */
176
+ onError?: (ctx: UseCaseErrorResult) => void;
177
+ };
178
+ /**
179
+ * Error result snapshot, emitted via `onError` lifecycle callbacks.
180
+ * Contains all fields from `UseCaseResult` except `output`, plus the thrown error.
181
+ */
182
+ export type UseCaseErrorResult = Omit<UseCaseResult, "output"> & {
183
+ /** The error that caused the failure */
184
+ error: Error;
185
+ };
186
+ /**
187
+ * Success result snapshot, emitted via `onCompleted` lifecycle callbacks
188
+ * and stored in execution history cache.
189
+ *
190
+ * @template Output - The shape of the handler's return value
191
+ */
192
+ export type UseCaseResult<Output = any> = {
193
+ /** Handler return value (undefined if execution failed) */
194
+ output?: Output;
195
+ /** The pipeline context at time of completion */
196
+ ctx: UseCaseContext;
197
+ /** Timestamp when execution started */
198
+ startedAt: Date;
199
+ /** Timestamp when execution ended */
200
+ endedAt: Date;
201
+ /** Unique execution ID */
202
+ id: string;
203
+ /** Use case name */
204
+ name: string;
205
+ /** Number of successful calls at time of completion */
206
+ calls: number;
207
+ /** Retry state (present only if retries were configured) */
208
+ retries?: {
209
+ /** Total allowed retries */
210
+ count: number;
211
+ /** Actual attempt number that succeeded/failed (if tracked) */
212
+ currentRetry?: number;
213
+ /** Delay between retries in ms */
214
+ delay?: number;
215
+ };
216
+ /** Benchmark result (present only if benchmark was enabled) */
217
+ benchmarkResult?: {
218
+ /** Execution time in milliseconds */
219
+ latency: number;
220
+ /** Performance classification */
221
+ state: "poor" | "good" | "excellent";
222
+ };
223
+ };
224
+ /**
225
+ * Internal registry of global lifecycle event callback arrays.
226
+ * Used by `globalUseCasesEvents` to manage subscriptions.
227
+ */
228
+ export type UseCaseEventsCallbacksMap = {
229
+ onExecuting: ((ctx: UseCaseOnExecutingContext) => void)[];
230
+ onCompleted: ((result: UseCaseResult<any>) => void)[];
231
+ onError: ((ctx: UseCaseErrorResult) => void)[];
232
+ };
233
+ /**
234
+ * App-level configuration for use cases, resolved via `config.get("use-cases")`.
235
+ * Provides default values that can be overridden per use case.
236
+ *
237
+ * @example
238
+ * ```ts
239
+ * // In your app config file:
240
+ * export default {
241
+ * "use-cases": {
242
+ * benchmark: { enabled: true, latencyRange: { up: 100, down: 500 } },
243
+ * retries: { count: 3, delay: 1000 },
244
+ * history: { enabled: true, ttl: 7200 },
245
+ * },
246
+ * };
247
+ * ```
248
+ */
249
+ export type UseCaseConfigurations = {
250
+ /**
251
+ * Default benchmark settings for all use cases.
252
+ * For standalone benchmark usage, use `config.get("benchmark")` instead.
253
+ */
254
+ benchmarkOptions?: BenchmarkOptions | false;
255
+ /** Default retry settings for all use cases */
256
+ retryOptions?: RetryOptions;
257
+ /** Execution history cache settings */
258
+ history?: {
259
+ /** Enable/disable history storage (default: true) */
260
+ enabled?: boolean;
261
+ /** Cache TTL in seconds (default: 3600)
262
+ * Setting it to false will use default cache ttl value
263
+ */
264
+ ttl?: number | false;
265
+ };
266
+ };
267
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/use-cases/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { UseCaseErrorResult, UseCaseEventsCallbacksMap, UseCaseOnExecutingContext, UseCaseResult } from "./types";
2
+ /**
3
+ * Global event callbacks — shared across all use case instances.
4
+ */
5
+ export declare const globalEventsCallbacksMap: UseCaseEventsCallbacksMap;
6
+ /**
7
+ * Subscribe to lifecycle events fired by any use case.
8
+ *
9
+ * @example
10
+ * globalUseCasesEvents.onCompleted((result) => metrics.track(result.name, result.benchmarkResult));
11
+ * globalUseCasesEvents.onError((ctx) => logger.error(ctx.name, ctx.error));
12
+ */
13
+ export declare const globalUseCasesEvents: {
14
+ onExecuting(callback: (ctx: UseCaseOnExecutingContext) => void): {
15
+ unsubscribe: () => void;
16
+ };
17
+ onCompleted<Output>(callback: (result: UseCaseResult<Output>) => void): {
18
+ unsubscribe: () => void;
19
+ };
20
+ onError(callback: (ctx: UseCaseErrorResult) => void): {
21
+ unsubscribe: () => void;
22
+ };
23
+ };
24
+ /**
25
+ * Dispatches a lifecycle event to invocation → use-case → global observers, in that order.
26
+ * All observers are awaited sequentially.
27
+ */
28
+ export declare function fireLifecycleEvent<EventCtx>(ctx: EventCtx, observers: {
29
+ invocation?: ((ctx: EventCtx) => void | Promise<void>)[];
30
+ useCase?: ((ctx: EventCtx) => void | Promise<void>)[];
31
+ global?: ((ctx: EventCtx) => void | Promise<void>)[];
32
+ }): Promise<void>;
33
+ //# sourceMappingURL=use-case-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-case-events.d.ts","sourceRoot":"","sources":["../../src/use-cases/use-case-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EACzB,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,yBAItC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB;gCACH,yBAAyB,KAAK,IAAI;;;qEASG,IAAI;;;4BAS7C,kBAAkB,KAAK,IAAI;;;CASpD,CAAC;AAEF;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAC/C,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE;IACT,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACtD,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;CACtD,iBAaF"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Global event callbacks — shared across all use case instances.
3
+ */
4
+ const globalEventsCallbacksMap = {
5
+ onExecuting: [],
6
+ onCompleted: [],
7
+ onError: [],
8
+ };
9
+ /**
10
+ * Subscribe to lifecycle events fired by any use case.
11
+ *
12
+ * @example
13
+ * globalUseCasesEvents.onCompleted((result) => metrics.track(result.name, result.benchmarkResult));
14
+ * globalUseCasesEvents.onError((ctx) => logger.error(ctx.name, ctx.error));
15
+ */
16
+ const globalUseCasesEvents = {
17
+ onExecuting(callback) {
18
+ globalEventsCallbacksMap.onExecuting.push(callback);
19
+ return {
20
+ unsubscribe: () => {
21
+ const idx = globalEventsCallbacksMap.onExecuting.indexOf(callback);
22
+ if (idx !== -1)
23
+ globalEventsCallbacksMap.onExecuting.splice(idx, 1);
24
+ },
25
+ };
26
+ },
27
+ onCompleted(callback) {
28
+ globalEventsCallbacksMap.onCompleted.push(callback);
29
+ return {
30
+ unsubscribe: () => {
31
+ const idx = globalEventsCallbacksMap.onCompleted.indexOf(callback);
32
+ if (idx !== -1)
33
+ globalEventsCallbacksMap.onCompleted.splice(idx, 1);
34
+ },
35
+ };
36
+ },
37
+ onError(callback) {
38
+ globalEventsCallbacksMap.onError.push(callback);
39
+ return {
40
+ unsubscribe: () => {
41
+ const idx = globalEventsCallbacksMap.onError.indexOf(callback);
42
+ if (idx !== -1)
43
+ globalEventsCallbacksMap.onError.splice(idx, 1);
44
+ },
45
+ };
46
+ },
47
+ };
48
+ /**
49
+ * Dispatches a lifecycle event to invocation → use-case → global observers, in that order.
50
+ * All observers are awaited sequentially.
51
+ */
52
+ async function fireLifecycleEvent(ctx, observers) {
53
+ if (observers.invocation) {
54
+ for (const obs of observers.invocation)
55
+ await obs(ctx);
56
+ }
57
+ if (observers.useCase) {
58
+ for (const obs of observers.useCase)
59
+ await obs(ctx);
60
+ }
61
+ if (observers.global) {
62
+ for (const obs of observers.global)
63
+ await obs(ctx);
64
+ }
65
+ }export{fireLifecycleEvent,globalEventsCallbacksMap,globalUseCasesEvents};//# sourceMappingURL=use-case-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-case-events.js","sources":["../../src/use-cases/use-case-events.ts"],"sourcesContent":[null],"names":[],"mappings":"AAOA;;AAEG;AACU,MAAA,wBAAwB,GAA8B;AACjE,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,OAAO,EAAE,EAAE;EACX;AAEF;;;;;;AAMG;AACU,MAAA,oBAAoB,GAAG;AAClC,IAAA,WAAW,CAAC,QAAkD,EAAA;AAC5D,QAAA,wBAAwB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO;YACL,WAAW,EAAE,MAAK;gBAChB,MAAM,GAAG,GAAG,wBAAwB,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACnE,IAAI,GAAG,KAAK,CAAC,CAAC;oBAAE,wBAAwB,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACrE;SACF,CAAC;KACH;AACD,IAAA,WAAW,CAAS,QAAiD,EAAA;AACnE,QAAA,wBAAwB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO;YACL,WAAW,EAAE,MAAK;gBAChB,MAAM,GAAG,GAAG,wBAAwB,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACnE,IAAI,GAAG,KAAK,CAAC,CAAC;oBAAE,wBAAwB,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACrE;SACF,CAAC;KACH;AACD,IAAA,OAAO,CAAC,QAA2C,EAAA;AACjD,QAAA,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO;YACL,WAAW,EAAE,MAAK;gBAChB,MAAM,GAAG,GAAG,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC/D,IAAI,GAAG,KAAK,CAAC,CAAC;oBAAE,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACjE;SACF,CAAC;KACH;EACD;AAEF;;;AAGG;AACI,eAAe,kBAAkB,CACtC,GAAa,EACb,SAIC,EAAA;IAED,IAAI,SAAS,CAAC,UAAU,EAAE;AACxB,QAAA,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,UAAU;AAAE,YAAA,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACxD,KAAA;IAED,IAAI,SAAS,CAAC,OAAO,EAAE;AACrB,QAAA,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO;AAAE,YAAA,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,KAAA;IAED,IAAI,SAAS,CAAC,MAAM,EAAE;AACpB,QAAA,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM;AAAE,YAAA,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACpD,KAAA;AACH"}
@@ -0,0 +1,29 @@
1
+ import type { ObjectValidator } from "@warlock.js/seal";
2
+ import type { UseCaseBeforeMiddleware, UseCaseContext, UseCaseGuard, UseCaseOnExecutingContext } from "./types";
3
+ export type PipelineOptions<Input, Output> = {
4
+ name: string;
5
+ id: string;
6
+ data: Input;
7
+ ctx: UseCaseContext;
8
+ startedAt: Date;
9
+ schema?: ObjectValidator;
10
+ guards?: UseCaseGuard<Input>[];
11
+ before?: UseCaseBeforeMiddleware<Input>[];
12
+ handler: (data: Input, ctx: UseCaseContext) => Promise<Output>;
13
+ /** Invocation-level onExecuting override */
14
+ onExecuting?: (ctx: UseCaseOnExecutingContext) => void;
15
+ /** Use-case-level onExecuting */
16
+ ucOnExecuting?: (ctx: UseCaseOnExecutingContext) => void;
17
+ };
18
+ /**
19
+ * Runs the full use-case pipeline in order:
20
+ * onExecuting event → guards → validation → before middleware → handler
21
+ *
22
+ * Throws on guard failure, validation failure, or handler failure.
23
+ * Callers are responsible for retry and benchmarking wrapping.
24
+ *
25
+ * @example
26
+ * const output = await runPipeline({ name, id, data, ctx, schema, guards, before, handler, ... });
27
+ */
28
+ export declare function runPipeline<Input, Output>(opts: PipelineOptions<Input, Output>): Promise<Output>;
29
+ //# sourceMappingURL=use-case-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-case-pipeline.d.ts","sourceRoot":"","sources":["../../src/use-cases/use-case-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EACV,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AAIjB,MAAM,MAAM,eAAe,CAAC,KAAK,EAAE,MAAM,IAAI;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,cAAc,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,MAAM,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1C,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,4CAA4C;IAC5C,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACvD,iCAAiC;IACjC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,yBAAyB,KAAK,IAAI,CAAC;CAC1D,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAC7C,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,MAAM,CAAC,CA6CjB"}
@@ -0,0 +1,45 @@
1
+ import {v}from'@warlock.js/seal';import {fireLifecycleEvent,globalEventsCallbacksMap}from'./use-case-events.js';import {BadSchemaUseCaseError}from'./use-case.errors.js';/**
2
+ * Runs the full use-case pipeline in order:
3
+ * onExecuting event → guards → validation → before middleware → handler
4
+ *
5
+ * Throws on guard failure, validation failure, or handler failure.
6
+ * Callers are responsible for retry and benchmarking wrapping.
7
+ *
8
+ * @example
9
+ * const output = await runPipeline({ name, id, data, ctx, schema, guards, before, handler, ... });
10
+ */
11
+ async function runPipeline(opts) {
12
+ const { name, id, ctx, startedAt, schema, guards, before, handler, onExecuting, ucOnExecuting } = opts;
13
+ let data = opts.data;
14
+ // 1. Fire onExecuting lifecycle event
15
+ await fireLifecycleEvent({ name, id, data, schema: schema, ctx, startedAt }, {
16
+ invocation: onExecuting ? [onExecuting] : undefined,
17
+ useCase: ucOnExecuting ? [ucOnExecuting] : undefined,
18
+ global: globalEventsCallbacksMap.onExecuting.length
19
+ ? globalEventsCallbacksMap.onExecuting
20
+ : undefined,
21
+ });
22
+ // 2. Guards — authorization/precondition checks, run before validation
23
+ if (guards) {
24
+ for (const guard of guards) {
25
+ await guard(Object.freeze(data), ctx);
26
+ }
27
+ }
28
+ // 3. Schema validation
29
+ if (schema) {
30
+ const result = await v.validate(schema, data);
31
+ if (!result.isValid) {
32
+ throw new BadSchemaUseCaseError(result);
33
+ }
34
+ data = result.data;
35
+ }
36
+ // 4. Before middleware — sequential data transformation chain
37
+ let transformed = data;
38
+ if (before) {
39
+ for (const mw of before) {
40
+ transformed = await mw(transformed, ctx);
41
+ }
42
+ }
43
+ // 5. Core handler
44
+ return handler(transformed, ctx);
45
+ }export{runPipeline};//# sourceMappingURL=use-case-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-case-pipeline.js","sources":["../../src/use-cases/use-case-pipeline.ts"],"sourcesContent":[null],"names":[],"mappings":"yKA2BA;;;;;;;;;AASG;AACI,eAAe,WAAW,CAC/B,IAAoC,EAAA;IAEpC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,GAC7F,IAAI,CAAC;AACP,IAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;;AAGrB,IAAA,MAAM,kBAAkB,CACtB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EACnD;QACE,UAAU,EAAE,WAAW,GAAG,CAAC,WAAW,CAAC,GAAG,SAAS;QACnD,OAAO,EAAE,aAAa,GAAG,CAAC,aAAa,CAAC,GAAG,SAAS;AACpD,QAAA,MAAM,EAAE,wBAAwB,CAAC,WAAW,CAAC,MAAM;cAC/C,wBAAwB,CAAC,WAAW;AACtC,cAAE,SAAS;AACd,KAAA,CACF,CAAC;;AAGF,IAAA,IAAI,MAAM,EAAE;AACV,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAoB,EAAE,GAAG,CAAC,CAAC;AAC1D,SAAA;AACF,KAAA;;AAGD,IAAA,IAAI,MAAM,EAAE;QACV,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE9C,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACnB,YAAA,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACzC,SAAA;AAED,QAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACpB,KAAA;;IAGD,IAAI,WAAW,GAAG,IAAI,CAAC;AACvB,IAAA,IAAI,MAAM,EAAE;AACV,QAAA,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE;YACvB,WAAW,GAAG,MAAM,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC1C,SAAA;AACF,KAAA;;AAGD,IAAA,OAAO,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACnC"}
@@ -0,0 +1,27 @@
1
+ import type { UseCase, UseCaseRuntimeOptions } from "./types";
2
+ /**
3
+ * Defines and registers a use case.
4
+ *
5
+ * A use case is a named, observable, optionally benchmarked unit of business logic.
6
+ * The returned handler is a typed async function you call with the input data.
7
+ *
8
+ * Execution order: onExecuting → guards → validation → before → handler → after → onCompleted
9
+ *
10
+ * @example
11
+ * export const createOrderUseCase = useCase<OrderOutput, OrderInput>({
12
+ * name: "create_order",
13
+ * schema: createOrderSchema,
14
+ * guards: [authGuard],
15
+ * handler: async (data, ctx) => orderService.create(data),
16
+ * after: [sendConfirmationEmail],
17
+ * retries: { count: 2, delay: 500 },
18
+ * });
19
+ *
20
+ * // In a controller:
21
+ * const output = await createOrderUseCase({ ...validated, user_id: req.user.id });
22
+ */
23
+ export declare function useCase<Output, Input = any>(options: UseCase<Output, Input>): {
24
+ (data: Input, { ctx, id, onExecuting: invocationOnExecuting, onCompleted: invocationOnCompleted, onError: invocationOnError, }?: UseCaseRuntimeOptions): Promise<Output>;
25
+ $cleanup(): void;
26
+ };
27
+ //# sourceMappingURL=use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-case.d.ts","sourceRoot":"","sources":["../../src/use-cases/use-case.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,OAAO,EAIP,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAyBjB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;WAelE,KAAK,qHAOR,qBAAqB,GACvB,QAAQ,MAAM,CAAC;;EAgHnB"}
@@ -0,0 +1,6 @@
1
+ import type { ValidationResult } from "@warlock.js/seal";
2
+ import { HttpError } from "../http/errors/errors";
3
+ export declare class BadSchemaUseCaseError extends HttpError {
4
+ constructor(result: ValidationResult);
5
+ }
6
+ //# sourceMappingURL=use-case.errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-case.errors.d.ts","sourceRoot":"","sources":["../../src/use-cases/use-case.errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,qBAAa,qBAAsB,SAAQ,SAAS;gBAC/B,MAAM,EAAE,gBAAgB;CAM5C"}
@@ -0,0 +1,8 @@
1
+ import {HttpError}from'../http/errors/errors.js';class BadSchemaUseCaseError extends HttpError {
2
+ constructor(result) {
3
+ super(400, `Invalid input data`, {
4
+ code: "BAD_SCHEMA_USE_CASE",
5
+ errors: result.errors,
6
+ });
7
+ }
8
+ }export{BadSchemaUseCaseError};//# sourceMappingURL=use-case.errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-case.errors.js","sources":["../../src/use-cases/use-case.errors.ts"],"sourcesContent":[null],"names":[],"mappings":"iDAGM,MAAO,qBAAsB,SAAQ,SAAS,CAAA;AAClD,IAAA,WAAA,CAAmB,MAAwB,EAAA;AACzC,QAAA,KAAK,CAAC,GAAG,EAAE,CAAA,kBAAA,CAAoB,EAAE;AAC/B,YAAA,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;AACtB,SAAA,CAAC,CAAC;KACJ;AACF"}
@@ -0,0 +1,138 @@
1
+ import {except,Random}from'@mongez/reinforcements';import {measure}from'../benchmark/benchmark.js';import {config}from'../config/config-getter.js';import'../config/config-handlers.js';import {retry}from'../retry/retry.js';import {fireLifecycleEvent,globalEventsCallbacksMap}from'./use-case-events.js';import {runPipeline}from'./use-case-pipeline.js';import {$registerUseCase,$unregisterUseCase,increaseUseCaseSuccessCalls,increaseUseCaseFailedCalls,addUseCaseHistory}from'./use-cases-registry.js';const defaultUseCaseOptions = {
2
+ benchmarkOptions: {
3
+ enabled: true,
4
+ latencyRange: {
5
+ excellent: 100,
6
+ poor: 200,
7
+ },
8
+ },
9
+ retryOptions: {
10
+ count: 0,
11
+ delay: 0,
12
+ },
13
+ };
14
+ /**
15
+ * Defines and registers a use case.
16
+ *
17
+ * A use case is a named, observable, optionally benchmarked unit of business logic.
18
+ * The returned handler is a typed async function you call with the input data.
19
+ *
20
+ * Execution order: onExecuting → guards → validation → before → handler → after → onCompleted
21
+ *
22
+ * @example
23
+ * export const createOrderUseCase = useCase<OrderOutput, OrderInput>({
24
+ * name: "create_order",
25
+ * schema: createOrderSchema,
26
+ * guards: [authGuard],
27
+ * handler: async (data, ctx) => orderService.create(data),
28
+ * after: [sendConfirmationEmail],
29
+ * retries: { count: 2, delay: 500 },
30
+ * });
31
+ *
32
+ * // In a controller:
33
+ * const output = await createOrderUseCase({ ...validated, user_id: req.user.id });
34
+ */
35
+ function useCase(options) {
36
+ const { name, handler, schema, guards, before, after, onExecuting, onCompleted, onError } = options;
37
+ // Merge per-use-case options with global config defaults
38
+ const useCaseConfig = config.get("use-cases", defaultUseCaseOptions);
39
+ const benchmarkOptions = options.benchmarkOptions ?? useCaseConfig?.benchmarkOptions;
40
+ const retryOptions = options.retryOptions ?? useCaseConfig?.retryOptions;
41
+ $registerUseCase(name, {
42
+ ...options,
43
+ calls: { success: 0, failed: 0, total: 0 },
44
+ });
45
+ const useCaseHandler = async (data, { ctx = {}, id = `uc-${name}-` + Random.string(), onExecuting: invocationOnExecuting, onCompleted: invocationOnCompleted, onError: invocationOnError, } = {}) => {
46
+ ctx.schema = schema;
47
+ ctx.id = id;
48
+ const startedAt = new Date();
49
+ let output;
50
+ let error;
51
+ let benchmarkResult;
52
+ // The core pipeline — wrapped by retry and/or benchmark below
53
+ const execute = () => runPipeline({
54
+ name,
55
+ id,
56
+ data,
57
+ ctx,
58
+ startedAt,
59
+ schema,
60
+ guards,
61
+ before,
62
+ handler,
63
+ onExecuting: invocationOnExecuting,
64
+ ucOnExecuting: onExecuting,
65
+ });
66
+ // Apply retry if configured, otherwise execute once
67
+ const run = () => retryOptions?.count && retryOptions.count > 0 ? retry(execute, retryOptions) : execute();
68
+ try {
69
+ if (benchmarkOptions) {
70
+ // measure() catches errors internally and returns a result object.
71
+ // Re-throw on failure so the outer catch handles it uniformly.
72
+ const result = await measure(name, run, typeof benchmarkOptions === "boolean" ? undefined : benchmarkOptions);
73
+ if (result.success) {
74
+ output = result.value;
75
+ benchmarkResult = except(result, ["value", "success"]);
76
+ }
77
+ else {
78
+ benchmarkResult = except(result, ["error", "success"]);
79
+ throw result.error;
80
+ }
81
+ }
82
+ else {
83
+ output = await run();
84
+ }
85
+ }
86
+ catch (err) {
87
+ error = err;
88
+ }
89
+ const endedAt = new Date();
90
+ // After middleware — fire-and-forget side effects, only on success
91
+ if (!error && after && output !== undefined) {
92
+ for (const middleware of after) {
93
+ try {
94
+ await middleware(output, ctx);
95
+ }
96
+ catch (err) {
97
+ console.error(`[use-case] After middleware error in "${name}":`, err);
98
+ }
99
+ }
100
+ }
101
+ const snapshot = {
102
+ output,
103
+ ctx,
104
+ startedAt,
105
+ endedAt,
106
+ id,
107
+ name,
108
+ retries: retryOptions?.count
109
+ ? { count: retryOptions.count, delay: retryOptions.delay }
110
+ : undefined,
111
+ benchmarkResult,
112
+ calls: increaseUseCaseSuccessCalls(name),
113
+ };
114
+ if (error) {
115
+ await fireLifecycleEvent({ ...except(snapshot, ["output"]), error, calls: increaseUseCaseFailedCalls(name) }, {
116
+ invocation: invocationOnError ? [invocationOnError] : undefined,
117
+ useCase: onError ? [onError] : undefined,
118
+ global: globalEventsCallbacksMap.onError.length
119
+ ? globalEventsCallbacksMap.onError
120
+ : undefined,
121
+ });
122
+ throw error;
123
+ }
124
+ await addUseCaseHistory(name, snapshot);
125
+ await fireLifecycleEvent(snapshot, {
126
+ invocation: invocationOnCompleted ? [invocationOnCompleted] : undefined,
127
+ useCase: onCompleted ? [onCompleted] : undefined,
128
+ global: globalEventsCallbacksMap.onCompleted.length
129
+ ? globalEventsCallbacksMap.onCompleted
130
+ : undefined,
131
+ });
132
+ return output;
133
+ };
134
+ useCaseHandler.$cleanup = () => {
135
+ $unregisterUseCase(name);
136
+ };
137
+ return useCaseHandler;
138
+ }export{useCase};//# sourceMappingURL=use-case.js.map