@warlock.js/core 5.29.0 → 5.31.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 (1818) hide show
  1. package/CHANGELOG.md +168 -4
  2. package/README.md +28 -23
  3. package/bin/source-load-hook.mjs +63 -0
  4. package/bin/warlock.js +102 -42
  5. package/esm/application/app.d.mts +1 -1
  6. package/esm/application/app.d.mts.map +1 -1
  7. package/esm/application/app.mjs +1 -1
  8. package/esm/application/app.mjs.map +1 -1
  9. package/esm/application/application-config-types.d.mts +1 -1
  10. package/esm/application/application-config-types.d.mts.map +1 -1
  11. package/esm/application/application.d.mts +1 -1
  12. package/esm/application/application.d.mts.map +1 -1
  13. package/esm/application/application.mjs +1 -1
  14. package/esm/application/application.mjs.map +1 -1
  15. package/esm/application/boot-signal.d.mts +1 -1
  16. package/esm/application/boot-signal.d.mts.map +1 -1
  17. package/esm/application/boot-signal.mjs +1 -1
  18. package/esm/application/boot-signal.mjs.map +1 -1
  19. package/esm/application/public-url.d.mts +1 -1
  20. package/esm/application/public-url.d.mts.map +1 -1
  21. package/esm/application/public-url.mjs +1 -1
  22. package/esm/application/public-url.mjs.map +1 -1
  23. package/esm/application/roles.d.mts +1 -1
  24. package/esm/application/roles.d.mts.map +1 -1
  25. package/esm/application/roles.mjs +1 -1
  26. package/esm/application/roles.mjs.map +1 -1
  27. package/esm/benchmark/benchmark-snapshots.d.mts +1 -1
  28. package/esm/benchmark/benchmark-snapshots.d.mts.map +1 -1
  29. package/esm/benchmark/benchmark-snapshots.mjs +1 -1
  30. package/esm/benchmark/benchmark-snapshots.mjs.map +1 -1
  31. package/esm/benchmark/benchmark.d.mts +1 -1
  32. package/esm/benchmark/benchmark.d.mts.map +1 -1
  33. package/esm/benchmark/benchmark.mjs +1 -1
  34. package/esm/benchmark/benchmark.mjs.map +1 -1
  35. package/esm/benchmark/channels/console.channel.d.mts +1 -1
  36. package/esm/benchmark/channels/console.channel.d.mts.map +1 -1
  37. package/esm/benchmark/channels/console.channel.mjs +1 -1
  38. package/esm/benchmark/channels/console.channel.mjs.map +1 -1
  39. package/esm/benchmark/channels/noop.channel.d.mts +1 -1
  40. package/esm/benchmark/channels/noop.channel.d.mts.map +1 -1
  41. package/esm/benchmark/channels/noop.channel.mjs +1 -1
  42. package/esm/benchmark/channels/noop.channel.mjs.map +1 -1
  43. package/esm/benchmark/profiler.d.mts +1 -1
  44. package/esm/benchmark/profiler.d.mts.map +1 -1
  45. package/esm/benchmark/profiler.mjs +1 -1
  46. package/esm/benchmark/profiler.mjs.map +1 -1
  47. package/esm/benchmark/types.d.mts +1 -1
  48. package/esm/benchmark/types.d.mts.map +1 -1
  49. package/esm/bootstrap/setup.d.mts +1 -1
  50. package/esm/bootstrap/setup.d.mts.map +1 -1
  51. package/esm/bootstrap/setup.mjs +1 -1
  52. package/esm/bootstrap/setup.mjs.map +1 -1
  53. package/esm/bootstrap.d.mts +1 -1
  54. package/esm/bootstrap.d.mts.map +1 -1
  55. package/esm/bootstrap.mjs +1 -1
  56. package/esm/bootstrap.mjs.map +1 -1
  57. package/esm/cache/database-cache-driver.d.mts +1 -1
  58. package/esm/cache/database-cache-driver.d.mts.map +1 -1
  59. package/esm/cache/database-cache-driver.mjs +1 -1
  60. package/esm/cache/database-cache-driver.mjs.map +1 -1
  61. package/esm/cache/index.mjs +1 -1
  62. package/esm/cache/index.mjs.map +1 -1
  63. package/esm/cli/cli-commands.manager.mjs +1 -1
  64. package/esm/cli/cli-commands.manager.mjs.map +1 -1
  65. package/esm/cli/cli-commands.utils.mjs +1 -1
  66. package/esm/cli/cli-commands.utils.mjs.map +1 -1
  67. package/esm/cli/commands/add.command.mjs +5 -3
  68. package/esm/cli/commands/add.command.mjs.map +1 -1
  69. package/esm/cli/commands/agents-md/agents-md-command.action.mjs +69 -0
  70. package/esm/cli/commands/agents-md/agents-md-command.action.mjs.map +1 -0
  71. package/esm/cli/commands/agents-md.command.mjs +38 -0
  72. package/esm/cli/commands/agents-md.command.mjs.map +1 -0
  73. package/esm/cli/commands/board/board-command.action.mjs +279 -0
  74. package/esm/cli/commands/board/board-command.action.mjs.map +1 -0
  75. package/esm/cli/commands/board.command.mjs +78 -0
  76. package/esm/cli/commands/board.command.mjs.map +1 -0
  77. package/esm/cli/commands/build.command.mjs +7 -2
  78. package/esm/cli/commands/build.command.mjs.map +1 -1
  79. package/esm/cli/commands/check/check-command.action.mjs +57 -0
  80. package/esm/cli/commands/check/check-command.action.mjs.map +1 -0
  81. package/esm/cli/commands/check/child-typecheck.mjs +66 -0
  82. package/esm/cli/commands/check/child-typecheck.mjs.map +1 -0
  83. package/esm/cli/commands/check/format-problems.mjs +43 -0
  84. package/esm/cli/commands/check/format-problems.mjs.map +1 -0
  85. package/esm/cli/commands/check/typecheck-command.action.mjs +61 -0
  86. package/esm/cli/commands/check/typecheck-command.action.mjs.map +1 -0
  87. package/esm/cli/commands/check.command.mjs +50 -0
  88. package/esm/cli/commands/check.command.mjs.map +1 -0
  89. package/esm/cli/commands/create-database.command.mjs +1 -1
  90. package/esm/cli/commands/create-database.command.mjs.map +1 -1
  91. package/esm/cli/commands/dev-server.command.mjs +10 -2
  92. package/esm/cli/commands/dev-server.command.mjs.map +1 -1
  93. package/esm/cli/commands/doctor/boot-for-diagnostics.mjs +9 -4
  94. package/esm/cli/commands/doctor/boot-for-diagnostics.mjs.map +1 -1
  95. package/esm/cli/commands/doctor/check.types.d.mts +76 -0
  96. package/esm/cli/commands/doctor/check.types.d.mts.map +1 -0
  97. package/esm/cli/commands/doctor/checks/config.check.mjs +2 -1
  98. package/esm/cli/commands/doctor/checks/config.check.mjs.map +1 -1
  99. package/esm/cli/commands/doctor/checks/connectors.check.mjs +3 -1
  100. package/esm/cli/commands/doctor/checks/connectors.check.mjs.map +1 -1
  101. package/esm/cli/commands/doctor/checks/handler-signature.check.mjs +2 -1
  102. package/esm/cli/commands/doctor/checks/handler-signature.check.mjs.map +1 -1
  103. package/esm/cli/commands/doctor/checks/health.check.mjs +4 -1
  104. package/esm/cli/commands/doctor/checks/health.check.mjs.map +1 -1
  105. package/esm/cli/commands/doctor/checks/index.mjs +1 -1
  106. package/esm/cli/commands/doctor/checks/index.mjs.map +1 -1
  107. package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs +2 -1
  108. package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs.map +1 -1
  109. package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs +2 -1
  110. package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs.map +1 -1
  111. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs +2 -1
  112. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs.map +1 -1
  113. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs +5 -1
  114. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs.map +1 -1
  115. package/esm/cli/commands/doctor/checks/routes.check.mjs +4 -1
  116. package/esm/cli/commands/doctor/checks/routes.check.mjs.map +1 -1
  117. package/esm/cli/commands/doctor/doctor-command.action.mjs +15 -7
  118. package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -1
  119. package/esm/cli/commands/doctor/format-report.mjs +31 -3
  120. package/esm/cli/commands/doctor/format-report.mjs.map +1 -1
  121. package/esm/cli/commands/doctor/run-checks.mjs +1 -1
  122. package/esm/cli/commands/doctor/run-checks.mjs.map +1 -1
  123. package/esm/cli/commands/doctor.command.mjs +5 -1
  124. package/esm/cli/commands/doctor.command.mjs.map +1 -1
  125. package/esm/cli/commands/drop-tables.command.mjs +1 -1
  126. package/esm/cli/commands/drop-tables.command.mjs.map +1 -1
  127. package/esm/cli/commands/explain/explain-command.action.mjs +64 -0
  128. package/esm/cli/commands/explain/explain-command.action.mjs.map +1 -0
  129. package/esm/cli/commands/explain.command.mjs +23 -0
  130. package/esm/cli/commands/explain.command.mjs.map +1 -0
  131. package/esm/cli/commands/generate/generate.command.mjs +125 -125
  132. package/esm/cli/commands/generate/generate.command.mjs.map +1 -1
  133. package/esm/cli/commands/generate/generators/column-dsl-parser.mjs +1 -1
  134. package/esm/cli/commands/generate/generators/column-dsl-parser.mjs.map +1 -1
  135. package/esm/cli/commands/generate/generators/controller.generator.mjs +1 -1
  136. package/esm/cli/commands/generate/generators/controller.generator.mjs.map +1 -1
  137. package/esm/cli/commands/generate/generators/endpoint.generator.mjs +311 -0
  138. package/esm/cli/commands/generate/generators/endpoint.generator.mjs.map +1 -0
  139. package/esm/cli/commands/generate/generators/migration.generator.mjs +2 -2
  140. package/esm/cli/commands/generate/generators/migration.generator.mjs.map +1 -1
  141. package/esm/cli/commands/generate/generators/model.generator.mjs +2 -2
  142. package/esm/cli/commands/generate/generators/model.generator.mjs.map +1 -1
  143. package/esm/cli/commands/generate/generators/module.generator.mjs +1 -1
  144. package/esm/cli/commands/generate/generators/module.generator.mjs.map +1 -1
  145. package/esm/cli/commands/generate/generators/repository.generator.mjs +1 -1
  146. package/esm/cli/commands/generate/generators/repository.generator.mjs.map +1 -1
  147. package/esm/cli/commands/generate/generators/resource.generator.mjs +1 -1
  148. package/esm/cli/commands/generate/generators/resource.generator.mjs.map +1 -1
  149. package/esm/cli/commands/generate/generators/service.generator.mjs +1 -1
  150. package/esm/cli/commands/generate/generators/service.generator.mjs.map +1 -1
  151. package/esm/cli/commands/generate/generators/use-case.generator.mjs +1 -1
  152. package/esm/cli/commands/generate/generators/use-case.generator.mjs.map +1 -1
  153. package/esm/cli/commands/generate/templates/endpoint-stubs.mjs +341 -0
  154. package/esm/cli/commands/generate/templates/endpoint-stubs.mjs.map +1 -0
  155. package/esm/cli/commands/generate/templates/stubs.mjs +20 -7
  156. package/esm/cli/commands/generate/templates/stubs.mjs.map +1 -1
  157. package/esm/cli/commands/generate/utils/endpoint-schema.mjs +137 -0
  158. package/esm/cli/commands/generate/utils/endpoint-schema.mjs.map +1 -0
  159. package/esm/cli/commands/generate/utils/name-parser.mjs +2 -2
  160. package/esm/cli/commands/generate/utils/name-parser.mjs.map +1 -1
  161. package/esm/cli/commands/generate/utils/path-resolver.mjs +1 -1
  162. package/esm/cli/commands/generate/utils/path-resolver.mjs.map +1 -1
  163. package/esm/cli/commands/generate/utils/prompt.mjs +1 -1
  164. package/esm/cli/commands/generate/utils/prompt.mjs.map +1 -1
  165. package/esm/cli/commands/generate/utils/writer.mjs +39 -14
  166. package/esm/cli/commands/generate/utils/writer.mjs.map +1 -1
  167. package/esm/cli/commands/inspect/inspect-command.action.mjs +72 -0
  168. package/esm/cli/commands/inspect/inspect-command.action.mjs.map +1 -0
  169. package/esm/cli/commands/inspect.command.mjs +39 -0
  170. package/esm/cli/commands/inspect.command.mjs.map +1 -0
  171. package/esm/cli/commands/mcp/mcp-command.action.mjs +103 -0
  172. package/esm/cli/commands/mcp/mcp-command.action.mjs.map +1 -0
  173. package/esm/cli/commands/mcp.command.mjs +76 -0
  174. package/esm/cli/commands/mcp.command.mjs.map +1 -0
  175. package/esm/cli/commands/migrate.command.mjs +1 -1
  176. package/esm/cli/commands/migrate.command.mjs.map +1 -1
  177. package/esm/cli/commands/openapi-generator.action.mjs +1 -1
  178. package/esm/cli/commands/openapi-generator.action.mjs.map +1 -1
  179. package/esm/cli/commands/openapi-generator.command.mjs +1 -1
  180. package/esm/cli/commands/openapi-generator.command.mjs.map +1 -1
  181. package/esm/cli/commands/postman-generator.action.mjs +1 -1
  182. package/esm/cli/commands/postman-generator.action.mjs.map +1 -1
  183. package/esm/cli/commands/postman-generator.command.mjs +1 -1
  184. package/esm/cli/commands/postman-generator.command.mjs.map +1 -1
  185. package/esm/cli/commands/routes/diff-page-routes.mjs +1 -1
  186. package/esm/cli/commands/routes/diff-page-routes.mjs.map +1 -1
  187. package/esm/cli/commands/routes/format-routes-table.mjs +1 -1
  188. package/esm/cli/commands/routes/format-routes-table.mjs.map +1 -1
  189. package/esm/cli/commands/routes/route-row.mjs +1 -1
  190. package/esm/cli/commands/routes/route-row.mjs.map +1 -1
  191. package/esm/cli/commands/routes/routes-command.action.mjs +1 -1
  192. package/esm/cli/commands/routes/routes-command.action.mjs.map +1 -1
  193. package/esm/cli/commands/routes/routes-diff.action.mjs +2 -2
  194. package/esm/cli/commands/routes/routes-diff.action.mjs.map +1 -1
  195. package/esm/cli/commands/routes/with-console-on-stderr.mjs +1 -1
  196. package/esm/cli/commands/routes/with-console-on-stderr.mjs.map +1 -1
  197. package/esm/cli/commands/routes.command.mjs +1 -1
  198. package/esm/cli/commands/routes.command.mjs.map +1 -1
  199. package/esm/cli/commands/seed.command.mjs +1 -1
  200. package/esm/cli/commands/seed.command.mjs.map +1 -1
  201. package/esm/cli/commands/start-production.command.mjs +1 -1
  202. package/esm/cli/commands/start-production.command.mjs.map +1 -1
  203. package/esm/cli/commands/storage-put.action.mjs +1 -1
  204. package/esm/cli/commands/storage-put.action.mjs.map +1 -1
  205. package/esm/cli/commands/storage-put.command.mjs +1 -1
  206. package/esm/cli/commands/storage-put.command.mjs.map +1 -1
  207. package/esm/cli/commands/test.command.mjs +131 -0
  208. package/esm/cli/commands/test.command.mjs.map +1 -0
  209. package/esm/cli/commands/trace/trace-command.action.mjs +145 -0
  210. package/esm/cli/commands/trace/trace-command.action.mjs.map +1 -0
  211. package/esm/cli/commands/trace.command.mjs +60 -0
  212. package/esm/cli/commands/trace.command.mjs.map +1 -0
  213. package/esm/cli/commands/typecheck.command.mjs +40 -0
  214. package/esm/cli/commands/typecheck.command.mjs.map +1 -0
  215. package/esm/cli/commands/typings-generator.command.mjs +1 -1
  216. package/esm/cli/commands/typings-generator.command.mjs.map +1 -1
  217. package/esm/cli/commands/update.command.mjs +1 -1
  218. package/esm/cli/commands/update.command.mjs.map +1 -1
  219. package/esm/cli/commands/upgrade.command.mjs +46 -0
  220. package/esm/cli/commands/upgrade.command.mjs.map +1 -0
  221. package/esm/cli/commands-loader.mjs +1 -1
  222. package/esm/cli/commands-loader.mjs.map +1 -1
  223. package/esm/cli/flush-and-exit.mjs +34 -0
  224. package/esm/cli/flush-and-exit.mjs.map +1 -0
  225. package/esm/cli/framework-cli-commands.mjs +24 -2
  226. package/esm/cli/framework-cli-commands.mjs.map +1 -1
  227. package/esm/cli/parse-cli-args.mjs +2 -1
  228. package/esm/cli/parse-cli-args.mjs.map +1 -1
  229. package/esm/cli/start.mjs +1 -1
  230. package/esm/cli/start.mjs.map +1 -1
  231. package/esm/cli/string-similarity.mjs +1 -1
  232. package/esm/cli/string-similarity.mjs.map +1 -1
  233. package/esm/commands/cli-command.d.mts +1 -1
  234. package/esm/commands/cli-command.d.mts.map +1 -1
  235. package/esm/commands/cli-command.mjs +1 -1
  236. package/esm/commands/cli-command.mjs.map +1 -1
  237. package/esm/commands/types.d.mts +1 -1
  238. package/esm/commands/types.d.mts.map +1 -1
  239. package/esm/config/config-getter.d.mts +1 -1
  240. package/esm/config/config-getter.d.mts.map +1 -1
  241. package/esm/config/config-getter.mjs +1 -1
  242. package/esm/config/config-getter.mjs.map +1 -1
  243. package/esm/config/config-handlers.d.mts +1 -1
  244. package/esm/config/config-handlers.d.mts.map +1 -1
  245. package/esm/config/config-handlers.mjs +1 -1
  246. package/esm/config/config-handlers.mjs.map +1 -1
  247. package/esm/config/config-key-from-path.mjs +1 -1
  248. package/esm/config/config-key-from-path.mjs.map +1 -1
  249. package/esm/config/config-loader.d.mts +1 -1
  250. package/esm/config/config-loader.d.mts.map +1 -1
  251. package/esm/config/config-loader.mjs +35 -14
  252. package/esm/config/config-loader.mjs.map +1 -1
  253. package/esm/config/config-manager.mjs +1 -1
  254. package/esm/config/config-manager.mjs.map +1 -1
  255. package/esm/config/config-schema.d.mts +67 -0
  256. package/esm/config/config-schema.d.mts.map +1 -0
  257. package/esm/config/config-schema.mjs +77 -0
  258. package/esm/config/config-schema.mjs.map +1 -0
  259. package/esm/config/config-setter.d.mts +1 -1
  260. package/esm/config/config-setter.d.mts.map +1 -1
  261. package/esm/config/config-setter.mjs +1 -1
  262. package/esm/config/config-setter.mjs.map +1 -1
  263. package/esm/config/config-special-handlers.d.mts +1 -1
  264. package/esm/config/config-special-handlers.d.mts.map +1 -1
  265. package/esm/config/config-special-handlers.mjs +1 -1
  266. package/esm/config/config-special-handlers.mjs.map +1 -1
  267. package/esm/config/index.d.mts +6 -0
  268. package/esm/config/index.mjs +1 -0
  269. package/esm/config/load-config-files.mjs +1 -1
  270. package/esm/config/load-config-files.mjs.map +1 -1
  271. package/esm/config/locale-configuration.mjs +1 -1
  272. package/esm/config/locale-configuration.mjs.map +1 -1
  273. package/esm/config/types.d.mts +1 -1
  274. package/esm/config/types.d.mts.map +1 -1
  275. package/esm/connectors/access-connector.d.mts +1 -1
  276. package/esm/connectors/access-connector.d.mts.map +1 -1
  277. package/esm/connectors/access-connector.mjs +1 -1
  278. package/esm/connectors/access-connector.mjs.map +1 -1
  279. package/esm/connectors/ai-connector.d.mts +1 -1
  280. package/esm/connectors/ai-connector.d.mts.map +1 -1
  281. package/esm/connectors/ai-connector.mjs +1 -1
  282. package/esm/connectors/ai-connector.mjs.map +1 -1
  283. package/esm/connectors/assert-no-reserved-connector-names.d.mts +1 -1
  284. package/esm/connectors/assert-no-reserved-connector-names.d.mts.map +1 -1
  285. package/esm/connectors/assert-no-reserved-connector-names.mjs +3 -2
  286. package/esm/connectors/assert-no-reserved-connector-names.mjs.map +1 -1
  287. package/esm/connectors/assert-unique-connector-names.d.mts +1 -1
  288. package/esm/connectors/assert-unique-connector-names.d.mts.map +1 -1
  289. package/esm/connectors/assert-unique-connector-names.mjs +27 -3
  290. package/esm/connectors/assert-unique-connector-names.mjs.map +1 -1
  291. package/esm/connectors/base-connector.d.mts +1 -1
  292. package/esm/connectors/base-connector.d.mts.map +1 -1
  293. package/esm/connectors/base-connector.mjs +1 -1
  294. package/esm/connectors/base-connector.mjs.map +1 -1
  295. package/esm/connectors/cache-connector.d.mts +1 -1
  296. package/esm/connectors/cache-connector.d.mts.map +1 -1
  297. package/esm/connectors/cache-connector.mjs +1 -1
  298. package/esm/connectors/cache-connector.mjs.map +1 -1
  299. package/esm/connectors/connectors-manager.d.mts +1 -1
  300. package/esm/connectors/connectors-manager.d.mts.map +1 -1
  301. package/esm/connectors/connectors-manager.mjs +2 -2
  302. package/esm/connectors/connectors-manager.mjs.map +1 -1
  303. package/esm/connectors/database-connector.d.mts +1 -1
  304. package/esm/connectors/database-connector.d.mts.map +1 -1
  305. package/esm/connectors/database-connector.mjs +1 -1
  306. package/esm/connectors/database-connector.mjs.map +1 -1
  307. package/esm/connectors/describe-server-address.mjs +1 -1
  308. package/esm/connectors/describe-server-address.mjs.map +1 -1
  309. package/esm/connectors/herald-connector.d.mts +1 -1
  310. package/esm/connectors/herald-connector.d.mts.map +1 -1
  311. package/esm/connectors/herald-connector.mjs +1 -1
  312. package/esm/connectors/herald-connector.mjs.map +1 -1
  313. package/esm/connectors/http-connector.d.mts +1 -1
  314. package/esm/connectors/http-connector.d.mts.map +1 -1
  315. package/esm/connectors/http-connector.mjs +4 -3
  316. package/esm/connectors/http-connector.mjs.map +1 -1
  317. package/esm/connectors/logger-connector.d.mts +1 -1
  318. package/esm/connectors/logger-connector.d.mts.map +1 -1
  319. package/esm/connectors/logger-connector.mjs +1 -1
  320. package/esm/connectors/logger-connector.mjs.map +1 -1
  321. package/esm/connectors/mail-connector.d.mts +1 -1
  322. package/esm/connectors/mail-connector.d.mts.map +1 -1
  323. package/esm/connectors/mail-connector.mjs +1 -1
  324. package/esm/connectors/mail-connector.mjs.map +1 -1
  325. package/esm/connectors/notifications-connector.d.mts +1 -1
  326. package/esm/connectors/notifications-connector.d.mts.map +1 -1
  327. package/esm/connectors/notifications-connector.mjs +1 -1
  328. package/esm/connectors/notifications-connector.mjs.map +1 -1
  329. package/esm/connectors/read-bound-port.mjs +1 -1
  330. package/esm/connectors/read-bound-port.mjs.map +1 -1
  331. package/esm/connectors/register-configured-connectors.d.mts +1 -1
  332. package/esm/connectors/register-configured-connectors.d.mts.map +1 -1
  333. package/esm/connectors/register-configured-connectors.mjs +1 -1
  334. package/esm/connectors/register-configured-connectors.mjs.map +1 -1
  335. package/esm/connectors/single-server-warnings.mjs +1 -1
  336. package/esm/connectors/single-server-warnings.mjs.map +1 -1
  337. package/esm/connectors/socket-connector.d.mts +1 -1
  338. package/esm/connectors/socket-connector.d.mts.map +1 -1
  339. package/esm/connectors/socket-connector.mjs +1 -1
  340. package/esm/connectors/socket-connector.mjs.map +1 -1
  341. package/esm/connectors/storage.connector.d.mts +1 -1
  342. package/esm/connectors/storage.connector.d.mts.map +1 -1
  343. package/esm/connectors/storage.connector.mjs +1 -1
  344. package/esm/connectors/storage.connector.mjs.map +1 -1
  345. package/esm/connectors/types.d.mts +1 -1
  346. package/esm/connectors/types.d.mts.map +1 -1
  347. package/esm/connectors/types.mjs +1 -1
  348. package/esm/connectors/types.mjs.map +1 -1
  349. package/esm/container/container-instance-registry.mjs +1 -1
  350. package/esm/container/container-instance-registry.mjs.map +1 -1
  351. package/esm/container/development-app-modules.d.mts +1 -1
  352. package/esm/container/development-app-modules.d.mts.map +1 -1
  353. package/esm/container/development-model-modules.d.mts +1 -1
  354. package/esm/container/development-model-modules.d.mts.map +1 -1
  355. package/esm/container/index.d.mts +1 -1
  356. package/esm/container/index.d.mts.map +1 -1
  357. package/esm/container/index.mjs +1 -1
  358. package/esm/container/index.mjs.map +1 -1
  359. package/esm/database/create-database-action.mjs +1 -1
  360. package/esm/database/create-database-action.mjs.map +1 -1
  361. package/esm/database/drop-tables-action.mjs +1 -1
  362. package/esm/database/drop-tables-action.mjs.map +1 -1
  363. package/esm/database/migrate-action.mjs +1 -1
  364. package/esm/database/migrate-action.mjs.map +1 -1
  365. package/esm/database/models/database-log/database-log.d.mts +3 -39
  366. package/esm/database/models/database-log/database-log.d.mts.map +1 -1
  367. package/esm/database/models/database-log/database-log.mjs +1 -1
  368. package/esm/database/models/database-log/database-log.mjs.map +1 -1
  369. package/esm/database/pending-exit-code.mjs +1 -1
  370. package/esm/database/pending-exit-code.mjs.map +1 -1
  371. package/esm/database/resolve-pending-migrations.mjs +1 -1
  372. package/esm/database/resolve-pending-migrations.mjs.map +1 -1
  373. package/esm/database/seed-command-action.mjs +1 -1
  374. package/esm/database/seed-command-action.mjs.map +1 -1
  375. package/esm/database/seeds/seed-records-table-migration.mjs +1 -1
  376. package/esm/database/seeds/seed-records-table-migration.mjs.map +1 -1
  377. package/esm/database/seeds/seeder.d.mts +1 -1
  378. package/esm/database/seeds/seeder.d.mts.map +1 -1
  379. package/esm/database/seeds/seeder.errors.d.mts +5 -1
  380. package/esm/database/seeds/seeder.errors.d.mts.map +1 -1
  381. package/esm/database/seeds/seeder.errors.mjs +3 -1
  382. package/esm/database/seeds/seeder.errors.mjs.map +1 -1
  383. package/esm/database/seeds/seeder.mjs +1 -1
  384. package/esm/database/seeds/seeder.mjs.map +1 -1
  385. package/esm/database/seeds/seeders.manager.mjs +1 -1
  386. package/esm/database/seeds/seeders.manager.mjs.map +1 -1
  387. package/esm/database/seeds/seeds-table-migration.mjs +1 -1
  388. package/esm/database/seeds/seeds-table-migration.mjs.map +1 -1
  389. package/esm/database/seeds/types.d.mts +1 -1
  390. package/esm/database/seeds/types.d.mts.map +1 -1
  391. package/esm/database/seeds/utils.mjs +1 -1
  392. package/esm/database/seeds/utils.mjs.map +1 -1
  393. package/esm/database/utils.d.mts +1 -1
  394. package/esm/database/utils.d.mts.map +1 -1
  395. package/esm/database/utils.mjs +1 -1
  396. package/esm/database/utils.mjs.map +1 -1
  397. package/esm/dev-server/app-module-registry.mjs +1 -1
  398. package/esm/dev-server/app-module-registry.mjs.map +1 -1
  399. package/esm/dev-server/boot-precondition-error.mjs +2 -1
  400. package/esm/dev-server/boot-precondition-error.mjs.map +1 -1
  401. package/esm/dev-server/build-development-openapi-document.mjs +1 -1
  402. package/esm/dev-server/build-development-openapi-document.mjs.map +1 -1
  403. package/esm/dev-server/check-for-updates.mjs +1 -1
  404. package/esm/dev-server/check-for-updates.mjs.map +1 -1
  405. package/esm/dev-server/collect-development-api-routes.mjs +1 -1
  406. package/esm/dev-server/collect-development-api-routes.mjs.map +1 -1
  407. package/esm/dev-server/create-worker.mjs +16 -10
  408. package/esm/dev-server/create-worker.mjs.map +1 -1
  409. package/esm/dev-server/dependency-graph.d.mts +1 -1
  410. package/esm/dev-server/dependency-graph.d.mts.map +1 -1
  411. package/esm/dev-server/dependency-graph.mjs +1 -1
  412. package/esm/dev-server/dependency-graph.mjs.map +1 -1
  413. package/esm/dev-server/dev-agent-tooling.mjs +135 -0
  414. package/esm/dev-server/dev-agent-tooling.mjs.map +1 -0
  415. package/esm/dev-server/dev-logger.mjs +1 -1
  416. package/esm/dev-server/dev-logger.mjs.map +1 -1
  417. package/esm/dev-server/development-server.mjs +9 -1
  418. package/esm/dev-server/development-server.mjs.map +1 -1
  419. package/esm/dev-server/events.mjs +1 -1
  420. package/esm/dev-server/events.mjs.map +1 -1
  421. package/esm/dev-server/extract-translation-keys.mjs +1 -1
  422. package/esm/dev-server/extract-translation-keys.mjs.map +1 -1
  423. package/esm/dev-server/file-event-handler.mjs +1 -1
  424. package/esm/dev-server/file-event-handler.mjs.map +1 -1
  425. package/esm/dev-server/file-manager.d.mts +1 -1
  426. package/esm/dev-server/file-manager.d.mts.map +1 -1
  427. package/esm/dev-server/file-manager.mjs +1 -1
  428. package/esm/dev-server/file-manager.mjs.map +1 -1
  429. package/esm/dev-server/file-operations.d.mts +1 -1
  430. package/esm/dev-server/file-operations.d.mts.map +1 -1
  431. package/esm/dev-server/file-operations.mjs +1 -1
  432. package/esm/dev-server/file-operations.mjs.map +1 -1
  433. package/esm/dev-server/files-orchestrator.mjs +22 -20
  434. package/esm/dev-server/files-orchestrator.mjs.map +1 -1
  435. package/esm/dev-server/files-watcher.mjs +2 -2
  436. package/esm/dev-server/files-watcher.mjs.map +1 -1
  437. package/esm/dev-server/flags.mjs +1 -1
  438. package/esm/dev-server/flags.mjs.map +1 -1
  439. package/esm/dev-server/health-checker/checkers/base-health-checker.mjs +1 -1
  440. package/esm/dev-server/health-checker/checkers/base-health-checker.mjs.map +1 -1
  441. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs +3 -4
  442. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
  443. package/esm/dev-server/health-checker/checkers/oxlint-health-checker.mjs +33 -0
  444. package/esm/dev-server/health-checker/checkers/oxlint-health-checker.mjs.map +1 -0
  445. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs +1 -1
  446. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs.map +1 -1
  447. package/esm/dev-server/health-checker/default-health-checkers.mjs +31 -0
  448. package/esm/dev-server/health-checker/default-health-checkers.mjs.map +1 -0
  449. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts +10 -4
  450. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts.map +1 -1
  451. package/esm/dev-server/health-checker/file-health-result.d.mts +1 -1
  452. package/esm/dev-server/health-checker/file-health-result.d.mts.map +1 -1
  453. package/esm/dev-server/health-checker/file-health-result.mjs +1 -1
  454. package/esm/dev-server/health-checker/file-health-result.mjs.map +1 -1
  455. package/esm/dev-server/health-checker/files-healthcare.manager.mjs +16 -5
  456. package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
  457. package/esm/dev-server/health-checker/oxlint-runner.mjs +302 -0
  458. package/esm/dev-server/health-checker/oxlint-runner.mjs.map +1 -0
  459. package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs +1 -1
  460. package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs.map +1 -1
  461. package/esm/dev-server/health-checker/workers/oxlint-health.worker.d.mts +1 -0
  462. package/esm/dev-server/health-checker/workers/oxlint-health.worker.mjs +42 -0
  463. package/esm/dev-server/health-checker/workers/oxlint-health.worker.mjs.map +1 -0
  464. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs +1 -1
  465. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs.map +1 -1
  466. package/esm/dev-server/layer-executor.mjs +1 -1
  467. package/esm/dev-server/layer-executor.mjs.map +1 -1
  468. package/esm/dev-server/legacy-locales-warning.mjs +1 -1
  469. package/esm/dev-server/legacy-locales-warning.mjs.map +1 -1
  470. package/esm/dev-server/loader/build-transpile-init.mjs +1 -1
  471. package/esm/dev-server/loader/build-transpile-init.mjs.map +1 -1
  472. package/esm/dev-server/loader/hook-thread.d.mts +1 -1
  473. package/esm/dev-server/loader/hook-thread.d.mts.map +1 -1
  474. package/esm/dev-server/loader/hook-thread.mjs +1 -1
  475. package/esm/dev-server/loader/hook-thread.mjs.map +1 -1
  476. package/esm/dev-server/loader/load-hook.d.mts +1 -1
  477. package/esm/dev-server/loader/load-hook.d.mts.map +1 -1
  478. package/esm/dev-server/loader/load-hook.mjs +1 -1
  479. package/esm/dev-server/loader/load-hook.mjs.map +1 -1
  480. package/esm/dev-server/loader/loader-port-acks.mjs +34 -0
  481. package/esm/dev-server/loader/loader-port-acks.mjs.map +1 -0
  482. package/esm/dev-server/loader/own-resolver.mjs +1 -1
  483. package/esm/dev-server/loader/own-resolver.mjs.map +1 -1
  484. package/esm/dev-server/loader/register-loader.mjs +2 -2
  485. package/esm/dev-server/loader/register-loader.mjs.map +1 -1
  486. package/esm/dev-server/loader/resolve-capture.mjs +1 -1
  487. package/esm/dev-server/loader/resolve-capture.mjs.map +1 -1
  488. package/esm/dev-server/loader/resolve-hook.d.mts +1 -1
  489. package/esm/dev-server/loader/resolve-hook.d.mts.map +1 -1
  490. package/esm/dev-server/loader/resolve-hook.mjs +1 -1
  491. package/esm/dev-server/loader/resolve-hook.mjs.map +1 -1
  492. package/esm/dev-server/loader/source-slug.mjs +1 -1
  493. package/esm/dev-server/loader/source-slug.mjs.map +1 -1
  494. package/esm/dev-server/loader/transpile-cache.mjs +2 -2
  495. package/esm/dev-server/loader/transpile-cache.mjs.map +1 -1
  496. package/esm/dev-server/loader/version-registry.mjs +1 -1
  497. package/esm/dev-server/loader/version-registry.mjs.map +1 -1
  498. package/esm/dev-server/manifest-manager.d.mts +1 -1
  499. package/esm/dev-server/manifest-manager.d.mts.map +1 -1
  500. package/esm/dev-server/manifest-manager.mjs +1 -1
  501. package/esm/dev-server/manifest-manager.mjs.map +1 -1
  502. package/esm/dev-server/model-module-registry.mjs +1 -1
  503. package/esm/dev-server/model-module-registry.mjs.map +1 -1
  504. package/esm/dev-server/model-resource-typings.mjs +1 -1
  505. package/esm/dev-server/model-resource-typings.mjs.map +1 -1
  506. package/esm/dev-server/module-loader.mjs +2 -1
  507. package/esm/dev-server/module-loader.mjs.map +1 -1
  508. package/esm/dev-server/package-json-manager.mjs +1 -1
  509. package/esm/dev-server/package-json-manager.mjs.map +1 -1
  510. package/esm/dev-server/parse-imports.mjs +74 -7
  511. package/esm/dev-server/parse-imports.mjs.map +1 -1
  512. package/esm/dev-server/read-config-ast.mjs +1 -1
  513. package/esm/dev-server/read-config-ast.mjs.map +1 -1
  514. package/esm/dev-server/ready-block.mjs +1 -1
  515. package/esm/dev-server/ready-block.mjs.map +1 -1
  516. package/esm/dev-server/register-dev-shortcuts.mjs +1 -1
  517. package/esm/dev-server/register-dev-shortcuts.mjs.map +1 -1
  518. package/esm/dev-server/register-installed-devtools.mjs +1 -1
  519. package/esm/dev-server/register-installed-devtools.mjs.map +1 -1
  520. package/esm/dev-server/restart-dev-server.mjs +1 -1
  521. package/esm/dev-server/restart-dev-server.mjs.map +1 -1
  522. package/esm/dev-server/route-types-publisher.mjs +2 -2
  523. package/esm/dev-server/route-types-publisher.mjs.map +1 -1
  524. package/esm/dev-server/run-connector-typings.mjs +1 -1
  525. package/esm/dev-server/run-connector-typings.mjs.map +1 -1
  526. package/esm/dev-server/run-typings-generation.mjs +1 -1
  527. package/esm/dev-server/run-typings-generation.mjs.map +1 -1
  528. package/esm/dev-server/shortcuts.mjs +1 -1
  529. package/esm/dev-server/shortcuts.mjs.map +1 -1
  530. package/esm/dev-server/special-file-patterns.mjs +1 -1
  531. package/esm/dev-server/special-file-patterns.mjs.map +1 -1
  532. package/esm/dev-server/special-files-collector.d.mts +1 -1
  533. package/esm/dev-server/special-files-collector.d.mts.map +1 -1
  534. package/esm/dev-server/special-files-collector.mjs +1 -1
  535. package/esm/dev-server/special-files-collector.mjs.map +1 -1
  536. package/esm/dev-server/start-development-server.mjs +1 -1
  537. package/esm/dev-server/start-development-server.mjs.map +1 -1
  538. package/esm/dev-server/supervisor.mjs +1 -1
  539. package/esm/dev-server/supervisor.mjs.map +1 -1
  540. package/esm/dev-server/translation-keys-sources.mjs +2 -2
  541. package/esm/dev-server/translation-keys-sources.mjs.map +1 -1
  542. package/esm/dev-server/tsconfig-manager.mjs +1 -1
  543. package/esm/dev-server/tsconfig-manager.mjs.map +1 -1
  544. package/esm/dev-server/type-generator.mjs +33 -12
  545. package/esm/dev-server/type-generator.mjs.map +1 -1
  546. package/esm/dev-server/types.d.mts +1 -1
  547. package/esm/dev-server/types.d.mts.map +1 -1
  548. package/esm/dev-server/update-check-cache.mjs +1 -1
  549. package/esm/dev-server/update-check-cache.mjs.map +1 -1
  550. package/esm/dev-server/utils.mjs +1 -1
  551. package/esm/dev-server/utils.mjs.map +1 -1
  552. package/esm/encryption/encrypt.d.mts +1 -1
  553. package/esm/encryption/encrypt.d.mts.map +1 -1
  554. package/esm/encryption/encrypt.mjs +1 -1
  555. package/esm/encryption/encrypt.mjs.map +1 -1
  556. package/esm/encryption/hash.d.mts +1 -1
  557. package/esm/encryption/hash.d.mts.map +1 -1
  558. package/esm/encryption/hash.mjs +1 -1
  559. package/esm/encryption/hash.mjs.map +1 -1
  560. package/esm/encryption/password.d.mts +1 -1
  561. package/esm/encryption/password.d.mts.map +1 -1
  562. package/esm/encryption/password.mjs +1 -1
  563. package/esm/encryption/password.mjs.map +1 -1
  564. package/esm/encryption/types.d.mts +1 -1
  565. package/esm/encryption/types.d.mts.map +1 -1
  566. package/esm/errors/container-key-missing-error.mjs +2 -1
  567. package/esm/errors/container-key-missing-error.mjs.map +1 -1
  568. package/esm/errors/error-codes.d.mts +653 -0
  569. package/esm/errors/error-codes.d.mts.map +1 -0
  570. package/esm/errors/error-codes.mjs +634 -0
  571. package/esm/errors/error-codes.mjs.map +1 -0
  572. package/esm/errors/esbuild-binary-missing-error.mjs +2 -1
  573. package/esm/errors/esbuild-binary-missing-error.mjs.map +1 -1
  574. package/esm/errors/index.d.mts +4 -0
  575. package/esm/errors/index.mjs +5 -0
  576. package/esm/errors/unknown-locale-error.mjs +2 -1
  577. package/esm/errors/unknown-locale-error.mjs.map +1 -1
  578. package/esm/errors/warlock-error.d.mts +23 -0
  579. package/esm/errors/warlock-error.d.mts.map +1 -0
  580. package/esm/errors/warlock-error.mjs +22 -0
  581. package/esm/errors/warlock-error.mjs.map +1 -0
  582. package/esm/generations/add-command.action.mjs +48 -9
  583. package/esm/generations/add-command.action.mjs.map +1 -1
  584. package/esm/generations/features/access.feature.mjs +2 -2
  585. package/esm/generations/features/access.feature.mjs.map +1 -1
  586. package/esm/generations/features/ai-anthropic.feature.mjs +1 -1
  587. package/esm/generations/features/ai-anthropic.feature.mjs.map +1 -1
  588. package/esm/generations/features/ai-bedrock.feature.mjs +1 -1
  589. package/esm/generations/features/ai-bedrock.feature.mjs.map +1 -1
  590. package/esm/generations/features/ai-google.feature.mjs +1 -1
  591. package/esm/generations/features/ai-google.feature.mjs.map +1 -1
  592. package/esm/generations/features/ai-ollama.feature.mjs +1 -1
  593. package/esm/generations/features/ai-ollama.feature.mjs.map +1 -1
  594. package/esm/generations/features/ai-openai.feature.mjs +1 -1
  595. package/esm/generations/features/ai-openai.feature.mjs.map +1 -1
  596. package/esm/generations/features/ai-panoptic.feature.mjs +1 -1
  597. package/esm/generations/features/ai-panoptic.feature.mjs.map +1 -1
  598. package/esm/generations/features/ai-tools.feature.mjs +1 -1
  599. package/esm/generations/features/ai-tools.feature.mjs.map +1 -1
  600. package/esm/generations/features/ai-workspace.feature.mjs +1 -1
  601. package/esm/generations/features/ai-workspace.feature.mjs.map +1 -1
  602. package/esm/generations/features/ai.feature.mjs +1 -1
  603. package/esm/generations/features/ai.feature.mjs.map +1 -1
  604. package/esm/generations/features/auth-google.feature.mjs +1 -1
  605. package/esm/generations/features/auth-google.feature.mjs.map +1 -1
  606. package/esm/generations/features/auth-passkeys.feature.mjs +1 -1
  607. package/esm/generations/features/auth-passkeys.feature.mjs.map +1 -1
  608. package/esm/generations/features/bull-board.feature.mjs +2 -2
  609. package/esm/generations/features/bull-board.feature.mjs.map +1 -1
  610. package/esm/generations/features/devtools.feature.mjs +1 -1
  611. package/esm/generations/features/devtools.feature.mjs.map +1 -1
  612. package/esm/generations/features/herald.feature.mjs +1 -1
  613. package/esm/generations/features/herald.feature.mjs.map +1 -1
  614. package/esm/generations/features/image.feature.mjs +1 -1
  615. package/esm/generations/features/image.feature.mjs.map +1 -1
  616. package/esm/generations/features/index.mjs +1 -1
  617. package/esm/generations/features/index.mjs.map +1 -1
  618. package/esm/generations/features/mail.feature.mjs +1 -1
  619. package/esm/generations/features/mail.feature.mjs.map +1 -1
  620. package/esm/generations/features/mongodb.feature.mjs +1 -1
  621. package/esm/generations/features/mongodb.feature.mjs.map +1 -1
  622. package/esm/generations/features/mysql.feature.mjs +1 -1
  623. package/esm/generations/features/mysql.feature.mjs.map +1 -1
  624. package/esm/generations/features/notifications.feature.mjs +124 -17
  625. package/esm/generations/features/notifications.feature.mjs.map +1 -1
  626. package/esm/generations/features/postgres.feature.mjs +1 -1
  627. package/esm/generations/features/postgres.feature.mjs.map +1 -1
  628. package/esm/generations/features/queue.feature.mjs +2 -2
  629. package/esm/generations/features/queue.feature.mjs.map +1 -1
  630. package/esm/generations/features/react-email.feature.mjs +2 -2
  631. package/esm/generations/features/react-email.feature.mjs.map +1 -1
  632. package/esm/generations/features/react.feature.mjs +1 -1
  633. package/esm/generations/features/react.feature.mjs.map +1 -1
  634. package/esm/generations/features/redis.feature.mjs +1 -1
  635. package/esm/generations/features/redis.feature.mjs.map +1 -1
  636. package/esm/generations/features/s3.feature.mjs +1 -1
  637. package/esm/generations/features/s3.feature.mjs.map +1 -1
  638. package/esm/generations/features/scheduler.feature.mjs +1 -1
  639. package/esm/generations/features/scheduler.feature.mjs.map +1 -1
  640. package/esm/generations/features/ses.feature.mjs +1 -1
  641. package/esm/generations/features/ses.feature.mjs.map +1 -1
  642. package/esm/generations/features/shadcn.feature.mjs +2 -2
  643. package/esm/generations/features/shadcn.feature.mjs.map +1 -1
  644. package/esm/generations/features/shared/insert-connector-entry.mjs +1 -1
  645. package/esm/generations/features/shared/insert-connector-entry.mjs.map +1 -1
  646. package/esm/generations/features/shared/insert-queue-dashboard-block.mjs +1 -1
  647. package/esm/generations/features/shared/insert-queue-dashboard-block.mjs.map +1 -1
  648. package/esm/generations/features/shared/link-ai-package-import.mjs +2 -2
  649. package/esm/generations/features/shared/link-ai-package-import.mjs.map +1 -1
  650. package/esm/generations/features/shared/merge-web-sitemap-config.mjs +1 -1
  651. package/esm/generations/features/shared/merge-web-sitemap-config.mjs.map +1 -1
  652. package/esm/generations/features/shared/migration-timestamp.mjs +1 -1
  653. package/esm/generations/features/shared/migration-timestamp.mjs.map +1 -1
  654. package/esm/generations/features/shared/patch-tsconfig-include.mjs +2 -2
  655. package/esm/generations/features/shared/patch-tsconfig-include.mjs.map +1 -1
  656. package/esm/generations/features/shared/relocate-conflicting-home-route.mjs +2 -2
  657. package/esm/generations/features/shared/relocate-conflicting-home-route.mjs.map +1 -1
  658. package/esm/generations/features/shared/resolve-contact-scaffold.mjs +1 -1
  659. package/esm/generations/features/shared/resolve-contact-scaffold.mjs.map +1 -1
  660. package/esm/generations/features/sitemap.feature.mjs +2 -2
  661. package/esm/generations/features/sitemap.feature.mjs.map +1 -1
  662. package/esm/generations/features/socket.feature.mjs +1 -1
  663. package/esm/generations/features/socket.feature.mjs.map +1 -1
  664. package/esm/generations/features/tailwind.feature.mjs +2 -2
  665. package/esm/generations/features/tailwind.feature.mjs.map +1 -1
  666. package/esm/generations/features/test.feature.mjs +12 -7
  667. package/esm/generations/features/test.feature.mjs.map +1 -1
  668. package/esm/generations/features/types.mjs +1 -1
  669. package/esm/generations/features/types.mjs.map +1 -1
  670. package/esm/generations/features/web.feature.mjs +2 -2
  671. package/esm/generations/features/web.feature.mjs.map +1 -1
  672. package/esm/generations/generation-fs.mjs +73 -0
  673. package/esm/generations/generation-fs.mjs.map +1 -0
  674. package/esm/generations/generation-run.mjs +185 -0
  675. package/esm/generations/generation-run.mjs.map +1 -0
  676. package/esm/generations/pnpm-build-approvals.mjs +89 -3
  677. package/esm/generations/pnpm-build-approvals.mjs.map +1 -1
  678. package/esm/generations/stubs.mjs +327 -79
  679. package/esm/generations/stubs.mjs.map +1 -1
  680. package/esm/http/boot-port-preflight.d.mts +1 -1
  681. package/esm/http/boot-port-preflight.d.mts.map +1 -1
  682. package/esm/http/boot-port-preflight.mjs +1 -1
  683. package/esm/http/boot-port-preflight.mjs.map +1 -1
  684. package/esm/http/bounded-stream-queue.d.mts +10 -0
  685. package/esm/http/bounded-stream-queue.d.mts.map +1 -0
  686. package/esm/http/bounded-stream-queue.mjs +97 -0
  687. package/esm/http/bounded-stream-queue.mjs.map +1 -0
  688. package/esm/http/build-cors-options.mjs +1 -1
  689. package/esm/http/build-cors-options.mjs.map +1 -1
  690. package/esm/http/build-rate-limit-options.d.mts +35 -1
  691. package/esm/http/build-rate-limit-options.d.mts.map +1 -1
  692. package/esm/http/build-rate-limit-options.mjs +7 -1
  693. package/esm/http/build-rate-limit-options.mjs.map +1 -1
  694. package/esm/http/conditional-request.d.mts +86 -0
  695. package/esm/http/conditional-request.d.mts.map +1 -0
  696. package/esm/http/conditional-request.mjs +121 -0
  697. package/esm/http/conditional-request.mjs.map +1 -0
  698. package/esm/http/config.d.mts +1 -1
  699. package/esm/http/config.d.mts.map +1 -1
  700. package/esm/http/config.mjs +1 -1
  701. package/esm/http/config.mjs.map +1 -1
  702. package/esm/http/context/request-context.d.mts +1 -1
  703. package/esm/http/context/request-context.d.mts.map +1 -1
  704. package/esm/http/context/request-context.mjs +1 -1
  705. package/esm/http/context/request-context.mjs.map +1 -1
  706. package/esm/http/context/request-memo.d.mts +1 -1
  707. package/esm/http/context/request-memo.d.mts.map +1 -1
  708. package/esm/http/context/request-memo.mjs +1 -1
  709. package/esm/http/context/request-memo.mjs.map +1 -1
  710. package/esm/http/createHttpApplication.d.mts +1 -1
  711. package/esm/http/createHttpApplication.d.mts.map +1 -1
  712. package/esm/http/createHttpApplication.mjs +1 -1
  713. package/esm/http/createHttpApplication.mjs.map +1 -1
  714. package/esm/http/csp.d.mts +3 -1
  715. package/esm/http/csp.d.mts.map +1 -1
  716. package/esm/http/csp.mjs +2 -1
  717. package/esm/http/csp.mjs.map +1 -1
  718. package/esm/http/csrf-default-guard.d.mts +1 -1
  719. package/esm/http/csrf-default-guard.d.mts.map +1 -1
  720. package/esm/http/csrf-default-guard.mjs +1 -1
  721. package/esm/http/csrf-default-guard.mjs.map +1 -1
  722. package/esm/http/csrf-origin-policy.d.mts +1 -1
  723. package/esm/http/csrf-origin-policy.d.mts.map +1 -1
  724. package/esm/http/csrf-origin-policy.mjs +1 -1
  725. package/esm/http/csrf-origin-policy.mjs.map +1 -1
  726. package/esm/http/database/RequestLog.d.mts +27 -135
  727. package/esm/http/database/RequestLog.d.mts.map +1 -1
  728. package/esm/http/database/RequestLog.mjs +1 -1
  729. package/esm/http/database/RequestLog.mjs.map +1 -1
  730. package/esm/http/error-codes.d.mts +1 -1
  731. package/esm/http/error-codes.d.mts.map +1 -1
  732. package/esm/http/error-codes.mjs +1 -1
  733. package/esm/http/error-codes.mjs.map +1 -1
  734. package/esm/http/error-mapper.d.mts +48 -0
  735. package/esm/http/error-mapper.d.mts.map +1 -0
  736. package/esm/http/error-mapper.mjs +48 -0
  737. package/esm/http/error-mapper.mjs.map +1 -0
  738. package/esm/http/errors/errors.d.mts +3 -1
  739. package/esm/http/errors/errors.d.mts.map +1 -1
  740. package/esm/http/errors/errors.mjs +2 -1
  741. package/esm/http/errors/errors.mjs.map +1 -1
  742. package/esm/http/escape-header-value.d.mts +18 -0
  743. package/esm/http/escape-header-value.d.mts.map +1 -0
  744. package/esm/http/escape-header-value.mjs +27 -0
  745. package/esm/http/escape-header-value.mjs.map +1 -0
  746. package/esm/http/events.d.mts +1 -1
  747. package/esm/http/events.d.mts.map +1 -1
  748. package/esm/http/events.mjs +1 -1
  749. package/esm/http/events.mjs.map +1 -1
  750. package/esm/http/flush-pending-cookies.mjs +1 -1
  751. package/esm/http/flush-pending-cookies.mjs.map +1 -1
  752. package/esm/http/health.d.mts +1 -1
  753. package/esm/http/health.d.mts.map +1 -1
  754. package/esm/http/health.mjs +1 -1
  755. package/esm/http/health.mjs.map +1 -1
  756. package/esm/http/index.d.mts +13 -6
  757. package/esm/http/index.mjs +12 -6
  758. package/esm/http/lazy-static.mjs +194 -0
  759. package/esm/http/lazy-static.mjs.map +1 -0
  760. package/esm/http/middleware/cache-response-middleware.d.mts +1 -1
  761. package/esm/http/middleware/cache-response-middleware.d.mts.map +1 -1
  762. package/esm/http/middleware/cache-response-middleware.mjs +1 -1
  763. package/esm/http/middleware/cache-response-middleware.mjs.map +1 -1
  764. package/esm/http/middleware/concurrency-limit.middleware.d.mts +1 -1
  765. package/esm/http/middleware/concurrency-limit.middleware.d.mts.map +1 -1
  766. package/esm/http/middleware/concurrency-limit.middleware.mjs +1 -1
  767. package/esm/http/middleware/concurrency-limit.middleware.mjs.map +1 -1
  768. package/esm/http/middleware/idempotency.middleware.d.mts +1 -1
  769. package/esm/http/middleware/idempotency.middleware.d.mts.map +1 -1
  770. package/esm/http/middleware/idempotency.middleware.mjs +1 -1
  771. package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
  772. package/esm/http/middleware/inject-request-context.d.mts +1 -1
  773. package/esm/http/middleware/inject-request-context.d.mts.map +1 -1
  774. package/esm/http/middleware/inject-request-context.mjs +4 -2
  775. package/esm/http/middleware/inject-request-context.mjs.map +1 -1
  776. package/esm/http/middleware/ip-filter.middleware.d.mts +1 -1
  777. package/esm/http/middleware/ip-filter.middleware.d.mts.map +1 -1
  778. package/esm/http/middleware/ip-filter.middleware.mjs +1 -1
  779. package/esm/http/middleware/ip-filter.middleware.mjs.map +1 -1
  780. package/esm/http/middleware/maintenance.middleware.d.mts +1 -1
  781. package/esm/http/middleware/maintenance.middleware.d.mts.map +1 -1
  782. package/esm/http/middleware/maintenance.middleware.mjs +1 -1
  783. package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
  784. package/esm/http/middleware/max-body-size.middleware.d.mts +1 -1
  785. package/esm/http/middleware/max-body-size.middleware.d.mts.map +1 -1
  786. package/esm/http/middleware/max-body-size.middleware.mjs +1 -1
  787. package/esm/http/middleware/max-body-size.middleware.mjs.map +1 -1
  788. package/esm/http/middleware/middleware-list.d.mts +1 -1
  789. package/esm/http/middleware/middleware-list.d.mts.map +1 -1
  790. package/esm/http/middleware/middleware-list.mjs +1 -1
  791. package/esm/http/middleware/middleware-list.mjs.map +1 -1
  792. package/esm/http/middleware/rate-limit.middleware.d.mts +20 -5
  793. package/esm/http/middleware/rate-limit.middleware.d.mts.map +1 -1
  794. package/esm/http/middleware/rate-limit.middleware.mjs +34 -12
  795. package/esm/http/middleware/rate-limit.middleware.mjs.map +1 -1
  796. package/esm/http/middleware/utils/cidr-match.d.mts +1 -1
  797. package/esm/http/middleware/utils/cidr-match.d.mts.map +1 -1
  798. package/esm/http/middleware/utils/cidr-match.mjs +1 -1
  799. package/esm/http/middleware/utils/cidr-match.mjs.map +1 -1
  800. package/esm/http/middleware/utils/idempotency-key.d.mts +1 -1
  801. package/esm/http/middleware/utils/idempotency-key.d.mts.map +1 -1
  802. package/esm/http/middleware/utils/idempotency-key.mjs +1 -1
  803. package/esm/http/middleware/utils/idempotency-key.mjs.map +1 -1
  804. package/esm/http/middleware/utils/parse-size.d.mts +1 -1
  805. package/esm/http/middleware/utils/parse-size.d.mts.map +1 -1
  806. package/esm/http/middleware/utils/parse-size.mjs +1 -1
  807. package/esm/http/middleware/utils/parse-size.mjs.map +1 -1
  808. package/esm/http/parse-urlencoded-body.mjs +1 -1
  809. package/esm/http/parse-urlencoded-body.mjs.map +1 -1
  810. package/esm/http/plugins.d.mts +9 -2
  811. package/esm/http/plugins.d.mts.map +1 -1
  812. package/esm/http/plugins.mjs +23 -6
  813. package/esm/http/plugins.mjs.map +1 -1
  814. package/esm/http/port-preflight.d.mts +1 -1
  815. package/esm/http/port-preflight.d.mts.map +1 -1
  816. package/esm/http/port-preflight.mjs +1 -1
  817. package/esm/http/port-preflight.mjs.map +1 -1
  818. package/esm/http/rate-limit-cache-store.mjs +156 -0
  819. package/esm/http/rate-limit-cache-store.mjs.map +1 -0
  820. package/esm/http/ready-report.d.mts +1 -1
  821. package/esm/http/ready-report.d.mts.map +1 -1
  822. package/esm/http/ready-report.mjs +1 -1
  823. package/esm/http/ready-report.mjs.map +1 -1
  824. package/esm/http/request-controller.d.mts +1 -1
  825. package/esm/http/request-controller.d.mts.map +1 -1
  826. package/esm/http/request-controller.mjs +1 -1
  827. package/esm/http/request-controller.mjs.map +1 -1
  828. package/esm/http/request-log-snapshot.d.mts +130 -0
  829. package/esm/http/request-log-snapshot.d.mts.map +1 -0
  830. package/esm/http/request-log-snapshot.mjs +220 -0
  831. package/esm/http/request-log-snapshot.mjs.map +1 -0
  832. package/esm/http/request.d.mts +43 -4
  833. package/esm/http/request.d.mts.map +1 -1
  834. package/esm/http/request.mjs +70 -6
  835. package/esm/http/request.mjs.map +1 -1
  836. package/esm/http/resolve-bind-port.mjs +1 -1
  837. package/esm/http/resolve-bind-port.mjs.map +1 -1
  838. package/esm/http/response.d.mts +51 -9
  839. package/esm/http/response.d.mts.map +1 -1
  840. package/esm/http/response.mjs +301 -101
  841. package/esm/http/response.mjs.map +1 -1
  842. package/esm/http/safe-redirect.d.mts +51 -0
  843. package/esm/http/safe-redirect.d.mts.map +1 -0
  844. package/esm/http/safe-redirect.mjs +80 -0
  845. package/esm/http/safe-redirect.mjs.map +1 -0
  846. package/esm/http/serialized.d.mts +1 -1
  847. package/esm/http/serialized.d.mts.map +1 -1
  848. package/esm/http/server-rebuilt.d.mts +1 -1
  849. package/esm/http/server-rebuilt.d.mts.map +1 -1
  850. package/esm/http/server-rebuilt.mjs +1 -1
  851. package/esm/http/server-rebuilt.mjs.map +1 -1
  852. package/esm/http/server.d.mts +36 -6
  853. package/esm/http/server.d.mts.map +1 -1
  854. package/esm/http/server.mjs +80 -5
  855. package/esm/http/server.mjs.map +1 -1
  856. package/esm/http/stream-react-response.d.mts +1 -1
  857. package/esm/http/stream-react-response.d.mts.map +1 -1
  858. package/esm/http/stream-react-response.mjs +1 -1
  859. package/esm/http/stream-react-response.mjs.map +1 -1
  860. package/esm/http/stream-transport.mjs +77 -0
  861. package/esm/http/stream-transport.mjs.map +1 -0
  862. package/esm/http/tracing/trace-id.d.mts +1 -1
  863. package/esm/http/tracing/trace-id.d.mts.map +1 -1
  864. package/esm/http/tracing/trace-id.mjs +1 -1
  865. package/esm/http/tracing/trace-id.mjs.map +1 -1
  866. package/esm/http/tracing/tracing-dispatcher.d.mts +1 -1
  867. package/esm/http/tracing/tracing-dispatcher.d.mts.map +1 -1
  868. package/esm/http/tracing/tracing-dispatcher.mjs +1 -1
  869. package/esm/http/tracing/tracing-dispatcher.mjs.map +1 -1
  870. package/esm/http/tracing/tracing.type.d.mts +1 -1
  871. package/esm/http/tracing/tracing.type.d.mts.map +1 -1
  872. package/esm/http/types.d.mts +165 -7
  873. package/esm/http/types.d.mts.map +1 -1
  874. package/esm/http/uploaded-file.d.mts +2 -2
  875. package/esm/http/uploaded-file.d.mts.map +1 -1
  876. package/esm/http/uploaded-file.mjs +2 -2
  877. package/esm/http/uploaded-file.mjs.map +1 -1
  878. package/esm/http/uploads/detect-image-format.mjs +1 -1
  879. package/esm/http/uploads/detect-image-format.mjs.map +1 -1
  880. package/esm/http/uploads/generate-image-variant.mjs +2 -2
  881. package/esm/http/uploads/generate-image-variant.mjs.map +1 -1
  882. package/esm/http/uploads/generate-image-variants.d.mts +11 -8
  883. package/esm/http/uploads/generate-image-variants.d.mts.map +1 -1
  884. package/esm/http/uploads/generate-image-variants.mjs +75 -30
  885. package/esm/http/uploads/generate-image-variants.mjs.map +1 -1
  886. package/esm/http/uploads/image-variant-cache-entries.mjs +78 -0
  887. package/esm/http/uploads/image-variant-cache-entries.mjs.map +1 -0
  888. package/esm/http/uploads/image-variant-cache.mjs +185 -0
  889. package/esm/http/uploads/image-variant-cache.mjs.map +1 -0
  890. package/esm/http/uploads/image-variant-types.d.mts +3 -1
  891. package/esm/http/uploads/image-variant-types.d.mts.map +1 -1
  892. package/esm/http/uploads/image-variants-config-error.d.mts +4 -2
  893. package/esm/http/uploads/image-variants-config-error.d.mts.map +1 -1
  894. package/esm/http/uploads/image-variants-config-error.mjs +4 -3
  895. package/esm/http/uploads/image-variants-config-error.mjs.map +1 -1
  896. package/esm/http/uploads/index.d.mts +3 -1
  897. package/esm/http/uploads/index.mjs +3 -1
  898. package/esm/http/uploads/is-path-inside.mjs +1 -1
  899. package/esm/http/uploads/is-path-inside.mjs.map +1 -1
  900. package/esm/http/uploads/load-variant-source.mjs +2 -2
  901. package/esm/http/uploads/load-variant-source.mjs.map +1 -1
  902. package/esm/http/uploads/local-disk-root.mjs +24 -0
  903. package/esm/http/uploads/local-disk-root.mjs.map +1 -0
  904. package/esm/http/uploads/parse-uploaded-file-query.mjs +1 -1
  905. package/esm/http/uploads/parse-uploaded-file-query.mjs.map +1 -1
  906. package/esm/http/uploads/purge-image-variants.d.mts +37 -0
  907. package/esm/http/uploads/purge-image-variants.d.mts.map +1 -0
  908. package/esm/http/uploads/purge-image-variants.mjs +46 -0
  909. package/esm/http/uploads/purge-image-variants.mjs.map +1 -0
  910. package/esm/http/uploads/read-file-head.mjs +1 -1
  911. package/esm/http/uploads/read-file-head.mjs.map +1 -1
  912. package/esm/http/uploads/remote-variant-source.mjs +115 -0
  913. package/esm/http/uploads/remote-variant-source.mjs.map +1 -0
  914. package/esm/http/uploads/resolve-image-variant.d.mts +72 -0
  915. package/esm/http/uploads/resolve-image-variant.d.mts.map +1 -0
  916. package/esm/http/uploads/resolve-image-variant.mjs +99 -0
  917. package/esm/http/uploads/resolve-image-variant.mjs.map +1 -0
  918. package/esm/http/uploads/resolve-image-variants-config.mjs +6 -4
  919. package/esm/http/uploads/resolve-image-variants-config.mjs.map +1 -1
  920. package/esm/http/uploads/resolve-inline-image-content-type.mjs +1 -1
  921. package/esm/http/uploads/resolve-inline-image-content-type.mjs.map +1 -1
  922. package/esm/http/uploads/resolve-original-content-type.mjs +1 -1
  923. package/esm/http/uploads/resolve-original-content-type.mjs.map +1 -1
  924. package/esm/http/uploads/resolve-remote-image-variant.mjs +89 -0
  925. package/esm/http/uploads/resolve-remote-image-variant.mjs.map +1 -0
  926. package/esm/http/uploads/resolve-upload-path.mjs +3 -2
  927. package/esm/http/uploads/resolve-upload-path.mjs.map +1 -1
  928. package/esm/http/uploads/resolve-variant-candidate.mjs +1 -1
  929. package/esm/http/uploads/resolve-variant-candidate.mjs.map +1 -1
  930. package/esm/http/uploads/single-flight.mjs +1 -1
  931. package/esm/http/uploads/single-flight.mjs.map +1 -1
  932. package/esm/http/uploads/trim-image-variant-cache.mjs +193 -0
  933. package/esm/http/uploads/trim-image-variant-cache.mjs.map +1 -0
  934. package/esm/http/uploads/uploaded-file.controller.d.mts +27 -7
  935. package/esm/http/uploads/uploaded-file.controller.d.mts.map +1 -1
  936. package/esm/http/uploads/uploaded-file.controller.mjs +72 -92
  937. package/esm/http/uploads/uploaded-file.controller.mjs.map +1 -1
  938. package/esm/http/uploads/variant-cache-key.mjs +31 -6
  939. package/esm/http/uploads/variant-cache-key.mjs.map +1 -1
  940. package/esm/http/uploads/variant-generations.mjs +1 -1
  941. package/esm/http/uploads/variant-generations.mjs.map +1 -1
  942. package/esm/http/uploads-config.d.mts +1 -1
  943. package/esm/http/uploads-config.d.mts.map +1 -1
  944. package/esm/http/uploads-config.mjs +1 -1
  945. package/esm/http/uploads-config.mjs.map +1 -1
  946. package/esm/http/uploads-types.d.mts +7 -3
  947. package/esm/http/uploads-types.d.mts.map +1 -1
  948. package/esm/http/xmlable.d.mts +1 -1
  949. package/esm/http/xmlable.d.mts.map +1 -1
  950. package/esm/image/image.d.mts +1 -1
  951. package/esm/image/image.d.mts.map +1 -1
  952. package/esm/image/image.mjs +1 -1
  953. package/esm/image/image.mjs.map +1 -1
  954. package/esm/index.d.mts +27 -12
  955. package/esm/index.mjs +23 -9
  956. package/esm/loader/app-module-importer.d.mts +1 -1
  957. package/esm/loader/app-module-importer.d.mts.map +1 -1
  958. package/esm/loader/app-module-importer.mjs +1 -1
  959. package/esm/loader/app-module-importer.mjs.map +1 -1
  960. package/esm/localization/parse-locale-dictionary.d.mts +3 -1
  961. package/esm/localization/parse-locale-dictionary.d.mts.map +1 -1
  962. package/esm/localization/parse-locale-dictionary.mjs +2 -1
  963. package/esm/localization/parse-locale-dictionary.mjs.map +1 -1
  964. package/esm/localization/register-locale-dictionary.d.mts +1 -1
  965. package/esm/localization/register-locale-dictionary.d.mts.map +1 -1
  966. package/esm/localization/register-locale-dictionary.mjs +1 -1
  967. package/esm/localization/register-locale-dictionary.mjs.map +1 -1
  968. package/esm/logger/fatal-visibility.d.mts +1 -1
  969. package/esm/logger/fatal-visibility.d.mts.map +1 -1
  970. package/esm/logger/fatal-visibility.mjs +1 -1
  971. package/esm/logger/fatal-visibility.mjs.map +1 -1
  972. package/esm/logger/logger.d.mts +1 -1
  973. package/esm/logger/logger.d.mts.map +1 -1
  974. package/esm/logger/logger.mjs +1 -1
  975. package/esm/logger/logger.mjs.map +1 -1
  976. package/esm/logger/types.d.mts +1 -1
  977. package/esm/logger/types.d.mts.map +1 -1
  978. package/esm/mail/config.d.mts +13 -2
  979. package/esm/mail/config.d.mts.map +1 -1
  980. package/esm/mail/config.mjs +17 -2
  981. package/esm/mail/config.mjs.map +1 -1
  982. package/esm/mail/events.d.mts +1 -1
  983. package/esm/mail/events.d.mts.map +1 -1
  984. package/esm/mail/events.mjs +1 -1
  985. package/esm/mail/events.mjs.map +1 -1
  986. package/esm/mail/index.d.mts +1 -1
  987. package/esm/mail/index.mjs +1 -1
  988. package/esm/mail/mail.d.mts +1 -1
  989. package/esm/mail/mail.d.mts.map +1 -1
  990. package/esm/mail/mail.mjs +1 -1
  991. package/esm/mail/mail.mjs.map +1 -1
  992. package/esm/mail/mailer-pool.d.mts +1 -1
  993. package/esm/mail/mailer-pool.d.mts.map +1 -1
  994. package/esm/mail/mailer-pool.mjs +1 -1
  995. package/esm/mail/mailer-pool.mjs.map +1 -1
  996. package/esm/mail/react-mail.d.mts +1 -1
  997. package/esm/mail/react-mail.d.mts.map +1 -1
  998. package/esm/mail/react-mail.mjs +1 -1
  999. package/esm/mail/react-mail.mjs.map +1 -1
  1000. package/esm/mail/send-mail.d.mts +1 -1
  1001. package/esm/mail/send-mail.d.mts.map +1 -1
  1002. package/esm/mail/send-mail.mjs +7 -7
  1003. package/esm/mail/send-mail.mjs.map +1 -1
  1004. package/esm/mail/test-mailbox.d.mts +1 -1
  1005. package/esm/mail/test-mailbox.d.mts.map +1 -1
  1006. package/esm/mail/test-mailbox.mjs +1 -1
  1007. package/esm/mail/test-mailbox.mjs.map +1 -1
  1008. package/esm/mail/types.d.mts +1 -1
  1009. package/esm/mail/types.d.mts.map +1 -1
  1010. package/esm/mail/types.mjs +1 -1
  1011. package/esm/mail/types.mjs.map +1 -1
  1012. package/esm/manifest/manifest-manager.mjs +1 -1
  1013. package/esm/manifest/manifest-manager.mjs.map +1 -1
  1014. package/esm/net/index.d.mts +2 -0
  1015. package/esm/net/index.mjs +3 -0
  1016. package/esm/openapi/build-openapi-document.d.mts +1 -1
  1017. package/esm/openapi/build-openapi-document.d.mts.map +1 -1
  1018. package/esm/openapi/build-openapi-document.mjs +9 -6
  1019. package/esm/openapi/build-openapi-document.mjs.map +1 -1
  1020. package/esm/openapi/cast-schema.mjs +1 -1
  1021. package/esm/openapi/cast-schema.mjs.map +1 -1
  1022. package/esm/openapi/collect-openapi-document.mjs +1 -1
  1023. package/esm/openapi/collect-openapi-document.mjs.map +1 -1
  1024. package/esm/openapi/development-openapi-provider.d.mts +1 -1
  1025. package/esm/openapi/development-openapi-provider.d.mts.map +1 -1
  1026. package/esm/openapi/development-openapi-provider.mjs +1 -1
  1027. package/esm/openapi/development-openapi-provider.mjs.map +1 -1
  1028. package/esm/openapi/error-responses.mjs +29 -3
  1029. package/esm/openapi/error-responses.mjs.map +1 -1
  1030. package/esm/openapi/openapi-child-output.mjs +1 -1
  1031. package/esm/openapi/openapi-child-output.mjs.map +1 -1
  1032. package/esm/openapi/openapi-protocol.mjs +1 -1
  1033. package/esm/openapi/openapi-protocol.mjs.map +1 -1
  1034. package/esm/openapi/paths.mjs +1 -1
  1035. package/esm/openapi/paths.mjs.map +1 -1
  1036. package/esm/openapi/postman/build-request-body.mjs +1 -1
  1037. package/esm/openapi/postman/build-request-body.mjs.map +1 -1
  1038. package/esm/openapi/postman/build-request-url.mjs +1 -1
  1039. package/esm/openapi/postman/build-request-url.mjs.map +1 -1
  1040. package/esm/openapi/postman/build-saved-responses.mjs +1 -1
  1041. package/esm/openapi/postman/build-saved-responses.mjs.map +1 -1
  1042. package/esm/openapi/postman/example-from-schema.d.mts +1 -1
  1043. package/esm/openapi/postman/example-from-schema.d.mts.map +1 -1
  1044. package/esm/openapi/postman/example-from-schema.mjs +1 -1
  1045. package/esm/openapi/postman/example-from-schema.mjs.map +1 -1
  1046. package/esm/openapi/postman/http-status-text.mjs +1 -1
  1047. package/esm/openapi/postman/http-status-text.mjs.map +1 -1
  1048. package/esm/openapi/postman/openapi-to-postman-collection.d.mts +1 -1
  1049. package/esm/openapi/postman/openapi-to-postman-collection.d.mts.map +1 -1
  1050. package/esm/openapi/postman/openapi-to-postman-collection.mjs +1 -1
  1051. package/esm/openapi/postman/openapi-to-postman-collection.mjs.map +1 -1
  1052. package/esm/openapi/postman/postman-types.d.mts +1 -1
  1053. package/esm/openapi/postman/postman-types.d.mts.map +1 -1
  1054. package/esm/openapi/postman/resolve-operation-auth.mjs +1 -1
  1055. package/esm/openapi/postman/resolve-operation-auth.mjs.map +1 -1
  1056. package/esm/openapi/postman/schema-refs.d.mts +1 -1
  1057. package/esm/openapi/postman/schema-refs.d.mts.map +1 -1
  1058. package/esm/openapi/postman/schema-refs.mjs +1 -1
  1059. package/esm/openapi/postman/schema-refs.mjs.map +1 -1
  1060. package/esm/openapi/postman/uuid-v5.mjs +1 -1
  1061. package/esm/openapi/postman/uuid-v5.mjs.map +1 -1
  1062. package/esm/openapi/request-schemas.mjs +1 -1
  1063. package/esm/openapi/request-schemas.mjs.map +1 -1
  1064. package/esm/openapi/response-schemas.mjs +1 -1
  1065. package/esm/openapi/response-schemas.mjs.map +1 -1
  1066. package/esm/openapi/schema-registry.d.mts +1 -0
  1067. package/esm/openapi/schema-registry.mjs +1 -1
  1068. package/esm/openapi/schema-registry.mjs.map +1 -1
  1069. package/esm/openapi/security.mjs +1 -1
  1070. package/esm/openapi/security.mjs.map +1 -1
  1071. package/esm/openapi/types.d.mts +4 -3
  1072. package/esm/openapi/types.d.mts.map +1 -1
  1073. package/esm/production/assert-dist-ready-to-start.mjs +1 -1
  1074. package/esm/production/assert-dist-ready-to-start.mjs.map +1 -1
  1075. package/esm/production/assert-generated-imports.mjs +2 -1
  1076. package/esm/production/assert-generated-imports.mjs.map +1 -1
  1077. package/esm/production/build-app-production.mjs +1 -1
  1078. package/esm/production/build-app-production.mjs.map +1 -1
  1079. package/esm/production/build-contributions.mjs +1 -1
  1080. package/esm/production/build-contributions.mjs.map +1 -1
  1081. package/esm/production/bundle-framework-dependencies.mjs +1 -1
  1082. package/esm/production/bundle-framework-dependencies.mjs.map +1 -1
  1083. package/esm/production/dist-build-manifest.mjs +1 -1
  1084. package/esm/production/dist-build-manifest.mjs.map +1 -1
  1085. package/esm/production/esbuild-plugins.mjs +1 -1
  1086. package/esm/production/esbuild-plugins.mjs.map +1 -1
  1087. package/esm/production/esbuild-preflight.mjs +1 -1
  1088. package/esm/production/esbuild-preflight.mjs.map +1 -1
  1089. package/esm/production/production-builder.mjs +13 -5
  1090. package/esm/production/production-builder.mjs.map +1 -1
  1091. package/esm/production/production-supervisor.mjs +1 -1
  1092. package/esm/production/production-supervisor.mjs.map +1 -1
  1093. package/esm/production/promote-dist.mjs +1 -1
  1094. package/esm/production/promote-dist.mjs.map +1 -1
  1095. package/esm/production/registration-child-runner.mjs +1 -1
  1096. package/esm/production/registration-child-runner.mjs.map +1 -1
  1097. package/esm/production/resolve-build-config.d.mts +1 -1
  1098. package/esm/production/resolve-build-config.d.mts.map +1 -1
  1099. package/esm/production/resolve-build-config.mjs +2 -1
  1100. package/esm/production/resolve-build-config.mjs.map +1 -1
  1101. package/esm/production/route-registration-child.mjs +1 -1
  1102. package/esm/production/route-registration-child.mjs.map +1 -1
  1103. package/esm/production/route-registration-snapshot.mjs +1 -1
  1104. package/esm/production/route-registration-snapshot.mjs.map +1 -1
  1105. package/esm/production/tsconfig-path-aliases.mjs +1 -1
  1106. package/esm/production/tsconfig-path-aliases.mjs.map +1 -1
  1107. package/esm/react/index.d.mts +1 -1
  1108. package/esm/react/index.d.mts.map +1 -1
  1109. package/esm/react/index.mjs +1 -1
  1110. package/esm/react/index.mjs.map +1 -1
  1111. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts +1 -1
  1112. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts.map +1 -1
  1113. package/esm/repositories/adapters/cascade/cascade-adapter.mjs +1 -1
  1114. package/esm/repositories/adapters/cascade/cascade-adapter.mjs.map +1 -1
  1115. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +1 -1
  1116. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
  1117. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs +1 -1
  1118. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs.map +1 -1
  1119. package/esm/repositories/adapters/cascade/filter-applicator.mjs +1 -1
  1120. package/esm/repositories/adapters/cascade/filter-applicator.mjs.map +1 -1
  1121. package/esm/repositories/contracts/query-builder.contract.d.mts +1 -1
  1122. package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
  1123. package/esm/repositories/contracts/repository-adapter.contract.d.mts +1 -1
  1124. package/esm/repositories/contracts/repository-adapter.contract.d.mts.map +1 -1
  1125. package/esm/repositories/contracts/types.d.mts +1 -1
  1126. package/esm/repositories/contracts/types.d.mts.map +1 -1
  1127. package/esm/repositories/repository.manager.d.mts +1 -1
  1128. package/esm/repositories/repository.manager.d.mts.map +1 -1
  1129. package/esm/repositories/repository.manager.mjs +1 -1
  1130. package/esm/repositories/repository.manager.mjs.map +1 -1
  1131. package/esm/resource/define-resource.d.mts +1 -1
  1132. package/esm/resource/define-resource.d.mts.map +1 -1
  1133. package/esm/resource/define-resource.mjs +1 -1
  1134. package/esm/resource/define-resource.mjs.map +1 -1
  1135. package/esm/resource/nullable-resource.d.mts +1 -1
  1136. package/esm/resource/nullable-resource.d.mts.map +1 -1
  1137. package/esm/resource/nullable-resource.mjs +1 -1
  1138. package/esm/resource/nullable-resource.mjs.map +1 -1
  1139. package/esm/resource/register-resource.d.mts +1 -1
  1140. package/esm/resource/register-resource.d.mts.map +1 -1
  1141. package/esm/resource/register-resource.mjs +1 -1
  1142. package/esm/resource/register-resource.mjs.map +1 -1
  1143. package/esm/resource/resource-field-builder.d.mts +1 -1
  1144. package/esm/resource/resource-field-builder.d.mts.map +1 -1
  1145. package/esm/resource/resource-field-builder.mjs +1 -1
  1146. package/esm/resource/resource-field-builder.mjs.map +1 -1
  1147. package/esm/resource/resource.d.mts +1 -1
  1148. package/esm/resource/resource.d.mts.map +1 -1
  1149. package/esm/resource/resource.mjs +1 -1
  1150. package/esm/resource/resource.mjs.map +1 -1
  1151. package/esm/resource/types.d.mts +1 -1
  1152. package/esm/resource/types.d.mts.map +1 -1
  1153. package/esm/restful/restful.d.mts +6 -6
  1154. package/esm/restful/restful.d.mts.map +1 -1
  1155. package/esm/restful/restful.mjs +1 -1
  1156. package/esm/restful/restful.mjs.map +1 -1
  1157. package/esm/router/build-route-rate-limit.mjs +1 -1
  1158. package/esm/router/build-route-rate-limit.mjs.map +1 -1
  1159. package/esm/router/describe-route-for-log.mjs +1 -1
  1160. package/esm/router/describe-route-for-log.mjs.map +1 -1
  1161. package/esm/router/dev-dispatch.mjs +32 -13
  1162. package/esm/router/dev-dispatch.mjs.map +1 -1
  1163. package/esm/router/index.d.mts +4 -2
  1164. package/esm/router/index.mjs +2 -0
  1165. package/esm/router/log-request-lifecycle.mjs +1 -1
  1166. package/esm/router/log-request-lifecycle.mjs.map +1 -1
  1167. package/esm/router/named-api-routes-with-responses.mjs +1 -1
  1168. package/esm/router/named-api-routes-with-responses.mjs.map +1 -1
  1169. package/esm/router/normalize-request-path.d.mts +1 -1
  1170. package/esm/router/normalize-request-path.d.mts.map +1 -1
  1171. package/esm/router/normalize-request-path.mjs +1 -1
  1172. package/esm/router/normalize-request-path.mjs.map +1 -1
  1173. package/esm/router/normalize-route-path.d.mts +1 -1
  1174. package/esm/router/normalize-route-path.d.mts.map +1 -1
  1175. package/esm/router/normalize-route-path.mjs +1 -1
  1176. package/esm/router/normalize-route-path.mjs.map +1 -1
  1177. package/esm/router/positional-handler-diagnostics.d.mts +1 -1
  1178. package/esm/router/positional-handler-diagnostics.d.mts.map +1 -1
  1179. package/esm/router/positional-handler-diagnostics.mjs +1 -1
  1180. package/esm/router/positional-handler-diagnostics.mjs.map +1 -1
  1181. package/esm/router/resolve-route-rate-limit.mjs +47 -0
  1182. package/esm/router/resolve-route-rate-limit.mjs.map +1 -0
  1183. package/esm/router/resolve-route-validation.mjs +19 -0
  1184. package/esm/router/resolve-route-validation.mjs.map +1 -0
  1185. package/esm/router/response-schema-types.mjs +1 -1
  1186. package/esm/router/response-schema-types.mjs.map +1 -1
  1187. package/esm/router/route-builder.d.mts +1 -1
  1188. package/esm/router/route-builder.d.mts.map +1 -1
  1189. package/esm/router/route-builder.mjs +1 -1
  1190. package/esm/router/route-builder.mjs.map +1 -1
  1191. package/esm/router/route-guard-names.mjs +30 -0
  1192. package/esm/router/route-guard-names.mjs.map +1 -0
  1193. package/esm/router/route-name-method-suffix.d.mts +1 -1
  1194. package/esm/router/route-name-method-suffix.d.mts.map +1 -1
  1195. package/esm/router/route-name-method-suffix.mjs +1 -1
  1196. package/esm/router/route-name-method-suffix.mjs.map +1 -1
  1197. package/esm/router/route-name-taken-error.d.mts +14 -0
  1198. package/esm/router/route-name-taken-error.d.mts.map +1 -0
  1199. package/esm/router/route-name-taken-error.mjs +18 -0
  1200. package/esm/router/route-name-taken-error.mjs.map +1 -0
  1201. package/esm/router/route-registry.d.mts +1 -1
  1202. package/esm/router/route-registry.d.mts.map +1 -1
  1203. package/esm/router/route-registry.mjs +1 -1
  1204. package/esm/router/route-registry.mjs.map +1 -1
  1205. package/esm/router/router.d.mts +35 -9
  1206. package/esm/router/router.d.mts.map +1 -1
  1207. package/esm/router/router.mjs +78 -40
  1208. package/esm/router/router.mjs.map +1 -1
  1209. package/esm/router/types.d.mts +150 -18
  1210. package/esm/router/types.d.mts.map +1 -1
  1211. package/esm/router/unguarded-route-diagnostics.d.mts +40 -0
  1212. package/esm/router/unguarded-route-diagnostics.d.mts.map +1 -0
  1213. package/esm/router/unguarded-route-diagnostics.mjs +95 -0
  1214. package/esm/router/unguarded-route-diagnostics.mjs.map +1 -0
  1215. package/esm/socket/types.d.mts +1 -1
  1216. package/esm/socket/types.d.mts.map +1 -1
  1217. package/esm/socket/utils.d.mts +1 -1
  1218. package/esm/socket/utils.d.mts.map +1 -1
  1219. package/esm/socket/utils.mjs +1 -1
  1220. package/esm/socket/utils.mjs.map +1 -1
  1221. package/esm/storage/config.d.mts +1 -1
  1222. package/esm/storage/config.d.mts.map +1 -1
  1223. package/esm/storage/config.mjs +1 -1
  1224. package/esm/storage/config.mjs.map +1 -1
  1225. package/esm/storage/context/storage-driver-context.d.mts +1 -1
  1226. package/esm/storage/context/storage-driver-context.d.mts.map +1 -1
  1227. package/esm/storage/context/storage-driver-context.mjs +1 -1
  1228. package/esm/storage/context/storage-driver-context.mjs.map +1 -1
  1229. package/esm/storage/drivers/cloud-driver.d.mts +1 -1
  1230. package/esm/storage/drivers/cloud-driver.d.mts.map +1 -1
  1231. package/esm/storage/drivers/cloud-driver.mjs +1 -1
  1232. package/esm/storage/drivers/cloud-driver.mjs.map +1 -1
  1233. package/esm/storage/drivers/do-spaces-driver.d.mts +1 -1
  1234. package/esm/storage/drivers/do-spaces-driver.d.mts.map +1 -1
  1235. package/esm/storage/drivers/do-spaces-driver.mjs +1 -1
  1236. package/esm/storage/drivers/do-spaces-driver.mjs.map +1 -1
  1237. package/esm/storage/drivers/local-driver.d.mts +12 -1
  1238. package/esm/storage/drivers/local-driver.d.mts.map +1 -1
  1239. package/esm/storage/drivers/local-driver.mjs +33 -1
  1240. package/esm/storage/drivers/local-driver.mjs.map +1 -1
  1241. package/esm/storage/drivers/r2-driver.d.mts +1 -1
  1242. package/esm/storage/drivers/r2-driver.d.mts.map +1 -1
  1243. package/esm/storage/drivers/r2-driver.mjs +1 -1
  1244. package/esm/storage/drivers/r2-driver.mjs.map +1 -1
  1245. package/esm/storage/drivers/s3-driver.d.mts +1 -1
  1246. package/esm/storage/drivers/s3-driver.d.mts.map +1 -1
  1247. package/esm/storage/drivers/s3-driver.mjs +1 -1
  1248. package/esm/storage/drivers/s3-driver.mjs.map +1 -1
  1249. package/esm/storage/index.d.mts +1 -1
  1250. package/esm/storage/local-disk-roots.mjs +24 -0
  1251. package/esm/storage/local-disk-roots.mjs.map +1 -0
  1252. package/esm/storage/scoped-storage.d.mts +1 -1
  1253. package/esm/storage/scoped-storage.d.mts.map +1 -1
  1254. package/esm/storage/scoped-storage.mjs +1 -1
  1255. package/esm/storage/scoped-storage.mjs.map +1 -1
  1256. package/esm/storage/storage-file.d.mts +1 -1
  1257. package/esm/storage/storage-file.d.mts.map +1 -1
  1258. package/esm/storage/storage-file.mjs +1 -1
  1259. package/esm/storage/storage-file.mjs.map +1 -1
  1260. package/esm/storage/storage.d.mts +17 -3
  1261. package/esm/storage/storage.d.mts.map +1 -1
  1262. package/esm/storage/storage.mjs +23 -1
  1263. package/esm/storage/storage.mjs.map +1 -1
  1264. package/esm/storage/types.d.mts +3 -2
  1265. package/esm/storage/types.d.mts.map +1 -1
  1266. package/esm/storage/utils/classify-ip-address.d.mts +1 -1
  1267. package/esm/storage/utils/classify-ip-address.d.mts.map +1 -1
  1268. package/esm/storage/utils/classify-ip-address.mjs +1 -1
  1269. package/esm/storage/utils/classify-ip-address.mjs.map +1 -1
  1270. package/esm/storage/utils/contain-path.d.mts +1 -1
  1271. package/esm/storage/utils/contain-path.d.mts.map +1 -1
  1272. package/esm/storage/utils/contain-path.mjs +1 -1
  1273. package/esm/storage/utils/contain-path.mjs.map +1 -1
  1274. package/esm/storage/utils/mime.d.mts +1 -1
  1275. package/esm/storage/utils/mime.d.mts.map +1 -1
  1276. package/esm/storage/utils/mime.mjs +1 -1
  1277. package/esm/storage/utils/mime.mjs.map +1 -1
  1278. package/esm/storage/utils/safe-fetch.d.mts +1 -1
  1279. package/esm/storage/utils/safe-fetch.d.mts.map +1 -1
  1280. package/esm/storage/utils/safe-fetch.mjs +1 -1
  1281. package/esm/storage/utils/safe-fetch.mjs.map +1 -1
  1282. package/esm/storage/utils/storage-capability-error.d.mts +1 -1
  1283. package/esm/storage/utils/storage-capability-error.d.mts.map +1 -1
  1284. package/esm/storage/utils/storage-capability-error.mjs +1 -1
  1285. package/esm/storage/utils/storage-capability-error.mjs.map +1 -1
  1286. package/esm/storage/utils/storage-error.d.mts +1 -1
  1287. package/esm/storage/utils/storage-error.d.mts.map +1 -1
  1288. package/esm/storage/utils/storage-error.mjs +1 -1
  1289. package/esm/storage/utils/storage-error.mjs.map +1 -1
  1290. package/esm/storage/utils/storage-not-initialized-error.d.mts +3 -1
  1291. package/esm/storage/utils/storage-not-initialized-error.d.mts.map +1 -1
  1292. package/esm/storage/utils/storage-not-initialized-error.mjs +2 -1
  1293. package/esm/storage/utils/storage-not-initialized-error.mjs.map +1 -1
  1294. package/esm/tests/authenticated-test-client.d.mts +32 -0
  1295. package/esm/tests/authenticated-test-client.d.mts.map +1 -0
  1296. package/esm/tests/authenticated-test-client.mjs +40 -0
  1297. package/esm/tests/authenticated-test-client.mjs.map +1 -0
  1298. package/esm/tests/factories.d.mts +59 -0
  1299. package/esm/tests/factories.d.mts.map +1 -0
  1300. package/esm/tests/factories.mjs +105 -0
  1301. package/esm/tests/factories.mjs.map +1 -0
  1302. package/esm/tests/fakes/cache-fake.d.mts +29 -0
  1303. package/esm/tests/fakes/cache-fake.d.mts.map +1 -0
  1304. package/esm/tests/fakes/cache-fake.mjs +79 -0
  1305. package/esm/tests/fakes/cache-fake.mjs.map +1 -0
  1306. package/esm/tests/fakes/clock-fake.d.mts +32 -0
  1307. package/esm/tests/fakes/clock-fake.d.mts.map +1 -0
  1308. package/esm/tests/fakes/clock-fake.mjs +69 -0
  1309. package/esm/tests/fakes/clock-fake.mjs.map +1 -0
  1310. package/esm/tests/fakes/fake-assertion-error.d.mts +13 -0
  1311. package/esm/tests/fakes/fake-assertion-error.d.mts.map +1 -0
  1312. package/esm/tests/fakes/fake-assertion-error.mjs +20 -0
  1313. package/esm/tests/fakes/fake-assertion-error.mjs.map +1 -0
  1314. package/esm/tests/fakes/ids-fake.d.mts +22 -0
  1315. package/esm/tests/fakes/ids-fake.d.mts.map +1 -0
  1316. package/esm/tests/fakes/ids-fake.mjs +57 -0
  1317. package/esm/tests/fakes/ids-fake.mjs.map +1 -0
  1318. package/esm/tests/fakes/index.d.mts +8 -0
  1319. package/esm/tests/fakes/index.mjs +10 -0
  1320. package/esm/tests/fakes/mail-fake.d.mts +41 -0
  1321. package/esm/tests/fakes/mail-fake.d.mts.map +1 -0
  1322. package/esm/tests/fakes/mail-fake.mjs +111 -0
  1323. package/esm/tests/fakes/mail-fake.mjs.map +1 -0
  1324. package/esm/tests/fakes/queue-fake.d.mts +48 -0
  1325. package/esm/tests/fakes/queue-fake.d.mts.map +1 -0
  1326. package/esm/tests/fakes/queue-fake.mjs +134 -0
  1327. package/esm/tests/fakes/queue-fake.mjs.map +1 -0
  1328. package/esm/tests/fakes/storage-fake.d.mts +31 -0
  1329. package/esm/tests/fakes/storage-fake.d.mts.map +1 -0
  1330. package/esm/tests/fakes/storage-fake.mjs +122 -0
  1331. package/esm/tests/fakes/storage-fake.mjs.map +1 -0
  1332. package/esm/tests/fakes/test-fakes.d.mts +39 -0
  1333. package/esm/tests/fakes/test-fakes.d.mts.map +1 -0
  1334. package/esm/tests/fakes/test-fakes.mjs +90 -0
  1335. package/esm/tests/fakes/test-fakes.mjs.map +1 -0
  1336. package/esm/tests/index.d.mts +14 -2
  1337. package/esm/tests/index.mjs +15 -2
  1338. package/esm/tests/snapshot-response.d.mts +34 -0
  1339. package/esm/tests/snapshot-response.d.mts.map +1 -0
  1340. package/esm/tests/snapshot-response.mjs +42 -0
  1341. package/esm/tests/snapshot-response.mjs.map +1 -0
  1342. package/esm/tests/start-http-development-server.d.mts +23 -1
  1343. package/esm/tests/start-http-development-server.d.mts.map +1 -1
  1344. package/esm/tests/start-http-development-server.mjs +37 -4
  1345. package/esm/tests/start-http-development-server.mjs.map +1 -1
  1346. package/esm/tests/test-connectors-selection.d.mts +1 -1
  1347. package/esm/tests/test-connectors-selection.d.mts.map +1 -1
  1348. package/esm/tests/test-connectors-selection.mjs +1 -1
  1349. package/esm/tests/test-connectors-selection.mjs.map +1 -1
  1350. package/esm/tests/test-helpers.d.mts +21 -2
  1351. package/esm/tests/test-helpers.d.mts.map +1 -1
  1352. package/esm/tests/test-helpers.mjs +41 -28
  1353. package/esm/tests/test-helpers.mjs.map +1 -1
  1354. package/esm/tests/test-http-server.d.mts +62 -0
  1355. package/esm/tests/test-http-server.d.mts.map +1 -0
  1356. package/esm/tests/test-http-server.mjs +119 -0
  1357. package/esm/tests/test-http-server.mjs.map +1 -0
  1358. package/esm/tests/test-lifecycle-state.mjs +1 -1
  1359. package/esm/tests/test-lifecycle-state.mjs.map +1 -1
  1360. package/esm/tests/test-server-port-channel.mjs +1 -1
  1361. package/esm/tests/test-server-port-channel.mjs.map +1 -1
  1362. package/esm/tests/test-setup-timeout.mjs +1 -1
  1363. package/esm/tests/test-setup-timeout.mjs.map +1 -1
  1364. package/esm/tests/vitest-setup.d.mts +12 -1
  1365. package/esm/tests/vitest-setup.d.mts.map +1 -1
  1366. package/esm/tests/vitest-setup.mjs +13 -5
  1367. package/esm/tests/vitest-setup.mjs.map +1 -1
  1368. package/esm/tooling/agents-md/agents-md-markers.d.mts +27 -0
  1369. package/esm/tooling/agents-md/agents-md-markers.d.mts.map +1 -0
  1370. package/esm/tooling/agents-md/agents-md-markers.mjs +59 -0
  1371. package/esm/tooling/agents-md/agents-md-markers.mjs.map +1 -0
  1372. package/esm/tooling/agents-md/agents-md-refresher.d.mts +36 -0
  1373. package/esm/tooling/agents-md/agents-md-refresher.d.mts.map +1 -0
  1374. package/esm/tooling/agents-md/agents-md-refresher.mjs +72 -0
  1375. package/esm/tooling/agents-md/agents-md-refresher.mjs.map +1 -0
  1376. package/esm/tooling/agents-md/index.mjs +7 -0
  1377. package/esm/tooling/agents-md/installed-skills.d.mts +30 -0
  1378. package/esm/tooling/agents-md/installed-skills.d.mts.map +1 -0
  1379. package/esm/tooling/agents-md/installed-skills.mjs +74 -0
  1380. package/esm/tooling/agents-md/installed-skills.mjs.map +1 -0
  1381. package/esm/tooling/agents-md/render-agents-md.d.mts +33 -0
  1382. package/esm/tooling/agents-md/render-agents-md.d.mts.map +1 -0
  1383. package/esm/tooling/agents-md/render-agents-md.mjs +195 -0
  1384. package/esm/tooling/agents-md/render-agents-md.mjs.map +1 -0
  1385. package/esm/tooling/agents-md/write-agents-md.d.mts +33 -0
  1386. package/esm/tooling/agents-md/write-agents-md.d.mts.map +1 -0
  1387. package/esm/tooling/agents-md/write-agents-md.mjs +49 -0
  1388. package/esm/tooling/agents-md/write-agents-md.mjs.map +1 -0
  1389. package/esm/tooling/board/board-message.d.mts +31 -0
  1390. package/esm/tooling/board/board-message.d.mts.map +1 -0
  1391. package/esm/tooling/board/board-message.mjs +86 -0
  1392. package/esm/tooling/board/board-message.mjs.map +1 -0
  1393. package/esm/tooling/board/board.d.mts +109 -0
  1394. package/esm/tooling/board/board.d.mts.map +1 -0
  1395. package/esm/tooling/board/board.mjs +406 -0
  1396. package/esm/tooling/board/board.mjs.map +1 -0
  1397. package/esm/tooling/board/board.types.d.mts +72 -0
  1398. package/esm/tooling/board/board.types.d.mts.map +1 -0
  1399. package/esm/tooling/board/board.types.mjs +54 -0
  1400. package/esm/tooling/board/board.types.mjs.map +1 -0
  1401. package/esm/tooling/check/changed-files.d.mts +33 -0
  1402. package/esm/tooling/check/changed-files.d.mts.map +1 -0
  1403. package/esm/tooling/check/changed-files.mjs +73 -0
  1404. package/esm/tooling/check/changed-files.mjs.map +1 -0
  1405. package/esm/tooling/check/check-report.types.d.mts +62 -0
  1406. package/esm/tooling/check/check-report.types.d.mts.map +1 -0
  1407. package/esm/tooling/check/check-report.types.mjs +37 -0
  1408. package/esm/tooling/check/check-report.types.mjs.map +1 -0
  1409. package/esm/tooling/check/code-style-conventions.mjs +106 -0
  1410. package/esm/tooling/check/code-style-conventions.mjs.map +1 -0
  1411. package/esm/tooling/check/conventions-step.d.mts +34 -0
  1412. package/esm/tooling/check/conventions-step.d.mts.map +1 -0
  1413. package/esm/tooling/check/conventions-step.mjs +184 -0
  1414. package/esm/tooling/check/conventions-step.mjs.map +1 -0
  1415. package/esm/tooling/check/environment-step.d.mts +18 -0
  1416. package/esm/tooling/check/environment-step.d.mts.map +1 -0
  1417. package/esm/tooling/check/environment-step.mjs +78 -0
  1418. package/esm/tooling/check/environment-step.mjs.map +1 -0
  1419. package/esm/tooling/check/index.d.mts +8 -0
  1420. package/esm/tooling/check/index.mjs +10 -0
  1421. package/esm/tooling/check/lint-step.d.mts +19 -0
  1422. package/esm/tooling/check/lint-step.d.mts.map +1 -0
  1423. package/esm/tooling/check/lint-step.mjs +111 -0
  1424. package/esm/tooling/check/lint-step.mjs.map +1 -0
  1425. package/esm/tooling/check/request-input.mjs +132 -0
  1426. package/esm/tooling/check/request-input.mjs.map +1 -0
  1427. package/esm/tooling/check/run-check.d.mts +35 -0
  1428. package/esm/tooling/check/run-check.d.mts.map +1 -0
  1429. package/esm/tooling/check/run-check.mjs +192 -0
  1430. package/esm/tooling/check/run-check.mjs.map +1 -0
  1431. package/esm/tooling/check/run-tests.d.mts +48 -0
  1432. package/esm/tooling/check/run-tests.d.mts.map +1 -0
  1433. package/esm/tooling/check/run-tests.mjs +93 -0
  1434. package/esm/tooling/check/run-tests.mjs.map +1 -0
  1435. package/esm/tooling/check/security-conventions.mjs +648 -0
  1436. package/esm/tooling/check/security-conventions.mjs.map +1 -0
  1437. package/esm/tooling/check/source-ast.mjs +195 -0
  1438. package/esm/tooling/check/source-ast.mjs.map +1 -0
  1439. package/esm/tooling/check/source-files.mjs +27 -0
  1440. package/esm/tooling/check/source-files.mjs.map +1 -0
  1441. package/esm/tooling/check/tests-step.d.mts +34 -0
  1442. package/esm/tooling/check/tests-step.d.mts.map +1 -0
  1443. package/esm/tooling/check/tests-step.mjs +177 -0
  1444. package/esm/tooling/check/tests-step.mjs.map +1 -0
  1445. package/esm/tooling/dev-state/dev-server-state.d.mts +39 -0
  1446. package/esm/tooling/dev-state/dev-server-state.d.mts.map +1 -0
  1447. package/esm/tooling/dev-state/dev-server-state.mjs +67 -0
  1448. package/esm/tooling/dev-state/dev-server-state.mjs.map +1 -0
  1449. package/esm/tooling/devtools/devtools-client.d.mts +91 -0
  1450. package/esm/tooling/devtools/devtools-client.d.mts.map +1 -0
  1451. package/esm/tooling/devtools/devtools-client.mjs +155 -0
  1452. package/esm/tooling/devtools/devtools-client.mjs.map +1 -0
  1453. package/esm/tooling/generate/generation.d.mts +78 -0
  1454. package/esm/tooling/generate/generation.d.mts.map +1 -0
  1455. package/esm/tooling/generate/generation.mjs +123 -0
  1456. package/esm/tooling/generate/generation.mjs.map +1 -0
  1457. package/esm/tooling/generate/generator-spec.d.mts +57 -0
  1458. package/esm/tooling/generate/generator-spec.d.mts.map +1 -0
  1459. package/esm/tooling/generate/generator-spec.mjs +102 -0
  1460. package/esm/tooling/generate/generator-spec.mjs.map +1 -0
  1461. package/esm/tooling/generate/index.mjs +6 -0
  1462. package/esm/tooling/generate/project-files.mjs +121 -0
  1463. package/esm/tooling/generate/project-files.mjs.map +1 -0
  1464. package/esm/tooling/generate/run-cli.d.mts +40 -0
  1465. package/esm/tooling/generate/run-cli.d.mts.map +1 -0
  1466. package/esm/tooling/generate/run-cli.mjs +93 -0
  1467. package/esm/tooling/generate/run-cli.mjs.map +1 -0
  1468. package/esm/tooling/generate/unified-diff.d.mts +37 -0
  1469. package/esm/tooling/generate/unified-diff.d.mts.map +1 -0
  1470. package/esm/tooling/generate/unified-diff.mjs +161 -0
  1471. package/esm/tooling/generate/unified-diff.mjs.map +1 -0
  1472. package/esm/tooling/index.d.mts +41 -0
  1473. package/esm/tooling/index.mjs +45 -0
  1474. package/esm/tooling/inspect/boot-for-inspect.d.mts +23 -0
  1475. package/esm/tooling/inspect/boot-for-inspect.d.mts.map +1 -0
  1476. package/esm/tooling/inspect/boot-for-inspect.mjs +63 -0
  1477. package/esm/tooling/inspect/boot-for-inspect.mjs.map +1 -0
  1478. package/esm/tooling/inspect/collect-config.mjs +77 -0
  1479. package/esm/tooling/inspect/collect-config.mjs.map +1 -0
  1480. package/esm/tooling/inspect/collect-models.d.mts +9 -0
  1481. package/esm/tooling/inspect/collect-models.d.mts.map +1 -0
  1482. package/esm/tooling/inspect/collect-models.mjs +154 -0
  1483. package/esm/tooling/inspect/collect-models.mjs.map +1 -0
  1484. package/esm/tooling/inspect/collect-packages.d.mts +10 -0
  1485. package/esm/tooling/inspect/collect-packages.d.mts.map +1 -0
  1486. package/esm/tooling/inspect/collect-packages.mjs +157 -0
  1487. package/esm/tooling/inspect/collect-packages.mjs.map +1 -0
  1488. package/esm/tooling/inspect/collect-pages.mjs +108 -0
  1489. package/esm/tooling/inspect/collect-pages.mjs.map +1 -0
  1490. package/esm/tooling/inspect/collect-routes.mjs +168 -0
  1491. package/esm/tooling/inspect/collect-routes.mjs.map +1 -0
  1492. package/esm/tooling/inspect/event-recorder.d.mts +37 -0
  1493. package/esm/tooling/inspect/event-recorder.d.mts.map +1 -0
  1494. package/esm/tooling/inspect/event-recorder.mjs +91 -0
  1495. package/esm/tooling/inspect/event-recorder.mjs.map +1 -0
  1496. package/esm/tooling/inspect/index.d.mts +7 -0
  1497. package/esm/tooling/inspect/index.mjs +7 -0
  1498. package/esm/tooling/inspect/inspect-app.d.mts +53 -0
  1499. package/esm/tooling/inspect/inspect-app.d.mts.map +1 -0
  1500. package/esm/tooling/inspect/inspect-app.mjs +92 -0
  1501. package/esm/tooling/inspect/inspect-app.mjs.map +1 -0
  1502. package/esm/tooling/inspect/inspect-report.schema.d.mts +15 -0
  1503. package/esm/tooling/inspect/inspect-report.schema.d.mts.map +1 -0
  1504. package/esm/tooling/inspect/inspect-report.schema.mjs +463 -0
  1505. package/esm/tooling/inspect/inspect-report.schema.mjs.map +1 -0
  1506. package/esm/tooling/inspect/inspect-report.types.d.mts +196 -0
  1507. package/esm/tooling/inspect/inspect-report.types.d.mts.map +1 -0
  1508. package/esm/tooling/inspect/inspect-report.types.mjs +33 -0
  1509. package/esm/tooling/inspect/inspect-report.types.mjs.map +1 -0
  1510. package/esm/tooling/mcp/create-mcp-context.d.mts +26 -0
  1511. package/esm/tooling/mcp/create-mcp-context.d.mts.map +1 -0
  1512. package/esm/tooling/mcp/create-mcp-context.mjs +75 -0
  1513. package/esm/tooling/mcp/create-mcp-context.mjs.map +1 -0
  1514. package/esm/tooling/mcp/db-schema.d.mts +49 -0
  1515. package/esm/tooling/mcp/db-schema.d.mts.map +1 -0
  1516. package/esm/tooling/mcp/db-schema.mjs +56 -0
  1517. package/esm/tooling/mcp/db-schema.mjs.map +1 -0
  1518. package/esm/tooling/mcp/docs-search.d.mts +72 -0
  1519. package/esm/tooling/mcp/docs-search.d.mts.map +1 -0
  1520. package/esm/tooling/mcp/docs-search.mjs +178 -0
  1521. package/esm/tooling/mcp/docs-search.mjs.map +1 -0
  1522. package/esm/tooling/mcp/index.mjs +9 -0
  1523. package/esm/tooling/mcp/load-ai-tools.d.mts +62 -0
  1524. package/esm/tooling/mcp/load-ai-tools.d.mts.map +1 -0
  1525. package/esm/tooling/mcp/load-ai-tools.mjs +44 -0
  1526. package/esm/tooling/mcp/load-ai-tools.mjs.map +1 -0
  1527. package/esm/tooling/mcp/mcp-tools.d.mts +60 -0
  1528. package/esm/tooling/mcp/mcp-tools.d.mts.map +1 -0
  1529. package/esm/tooling/mcp/mcp-tools.mjs +513 -0
  1530. package/esm/tooling/mcp/mcp-tools.mjs.map +1 -0
  1531. package/esm/tooling/mcp/start-mcp-server.d.mts +56 -0
  1532. package/esm/tooling/mcp/start-mcp-server.d.mts.map +1 -0
  1533. package/esm/tooling/mcp/start-mcp-server.mjs +126 -0
  1534. package/esm/tooling/mcp/start-mcp-server.mjs.map +1 -0
  1535. package/esm/tooling/mcp/tool-input.d.mts +75 -0
  1536. package/esm/tooling/mcp/tool-input.d.mts.map +1 -0
  1537. package/esm/tooling/mcp/tool-input.mjs +72 -0
  1538. package/esm/tooling/mcp/tool-input.mjs.map +1 -0
  1539. package/esm/tooling/problem.d.mts +45 -0
  1540. package/esm/tooling/problem.d.mts.map +1 -0
  1541. package/esm/tooling/problem.mjs +28 -0
  1542. package/esm/tooling/problem.mjs.map +1 -0
  1543. package/esm/tooling/trace/trace-report.types.d.mts +71 -0
  1544. package/esm/tooling/trace/trace-report.types.d.mts.map +1 -0
  1545. package/esm/tooling/trace/trace-report.types.mjs +7 -0
  1546. package/esm/tooling/trace/trace-report.types.mjs.map +1 -0
  1547. package/esm/tooling/trace/trace-request.d.mts +83 -0
  1548. package/esm/tooling/trace/trace-request.d.mts.map +1 -0
  1549. package/esm/tooling/trace/trace-request.mjs +241 -0
  1550. package/esm/tooling/trace/trace-request.mjs.map +1 -0
  1551. package/esm/tooling/typecheck/index.d.mts +1 -0
  1552. package/esm/tooling/typecheck/index.mjs +3 -0
  1553. package/esm/tooling/typecheck/run-typecheck.d.mts +59 -0
  1554. package/esm/tooling/typecheck/run-typecheck.d.mts.map +1 -0
  1555. package/esm/tooling/typecheck/run-typecheck.mjs +153 -0
  1556. package/esm/tooling/typecheck/run-typecheck.mjs.map +1 -0
  1557. package/esm/updater/package-manager.mjs +1 -1
  1558. package/esm/updater/package-manager.mjs.map +1 -1
  1559. package/esm/updater/update-warlock-packages.mjs +1 -1
  1560. package/esm/updater/update-warlock-packages.mjs.map +1 -1
  1561. package/esm/upgrade/codemods/head-viewport.mjs +46 -0
  1562. package/esm/upgrade/codemods/head-viewport.mjs.map +1 -0
  1563. package/esm/upgrade/codemods/helpers.mjs +81 -0
  1564. package/esm/upgrade/codemods/helpers.mjs.map +1 -0
  1565. package/esm/upgrade/codemods/index.mjs +34 -0
  1566. package/esm/upgrade/codemods/index.mjs.map +1 -0
  1567. package/esm/upgrade/codemods/logger-sync-calls.mjs +57 -0
  1568. package/esm/upgrade/codemods/logger-sync-calls.mjs.map +1 -0
  1569. package/esm/upgrade/codemods/package-json.mjs +122 -0
  1570. package/esm/upgrade/codemods/package-json.mjs.map +1 -0
  1571. package/esm/upgrade/codemods/request-log-snapshot.mjs +82 -0
  1572. package/esm/upgrade/codemods/request-log-snapshot.mjs.map +1 -0
  1573. package/esm/upgrade/codemods/review-sites.mjs +262 -0
  1574. package/esm/upgrade/codemods/review-sites.mjs.map +1 -0
  1575. package/esm/upgrade/diff.mjs +119 -0
  1576. package/esm/upgrade/diff.mjs.map +1 -0
  1577. package/esm/upgrade/format-upgrade-report.mjs +32 -0
  1578. package/esm/upgrade/format-upgrade-report.mjs.map +1 -0
  1579. package/esm/upgrade/load-ts-morph.mjs +48 -0
  1580. package/esm/upgrade/load-ts-morph.mjs.map +1 -0
  1581. package/esm/upgrade/notes.mjs +16 -0
  1582. package/esm/upgrade/notes.mjs.map +1 -0
  1583. package/esm/upgrade/run-upgrade.mjs +246 -0
  1584. package/esm/upgrade/run-upgrade.mjs.map +1 -0
  1585. package/esm/upgrade/upgrade-command.action.mjs +37 -0
  1586. package/esm/upgrade/upgrade-command.action.mjs.map +1 -0
  1587. package/esm/upgrade/version.mjs +39 -0
  1588. package/esm/upgrade/version.mjs.map +1 -0
  1589. package/esm/use-cases/types.d.mts +1 -1
  1590. package/esm/use-cases/types.d.mts.map +1 -1
  1591. package/esm/use-cases/use-case-broadcast.d.mts +1 -1
  1592. package/esm/use-cases/use-case-broadcast.d.mts.map +1 -1
  1593. package/esm/use-cases/use-case-broadcast.mjs +1 -1
  1594. package/esm/use-cases/use-case-broadcast.mjs.map +1 -1
  1595. package/esm/use-cases/use-case-events.d.mts +1 -1
  1596. package/esm/use-cases/use-case-events.d.mts.map +1 -1
  1597. package/esm/use-cases/use-case-events.mjs +1 -1
  1598. package/esm/use-cases/use-case-events.mjs.map +1 -1
  1599. package/esm/use-cases/use-case-pipeline.d.mts +1 -1
  1600. package/esm/use-cases/use-case-pipeline.d.mts.map +1 -1
  1601. package/esm/use-cases/use-case-pipeline.mjs +1 -1
  1602. package/esm/use-cases/use-case-pipeline.mjs.map +1 -1
  1603. package/esm/use-cases/use-case.d.mts +1 -1
  1604. package/esm/use-cases/use-case.d.mts.map +1 -1
  1605. package/esm/use-cases/use-case.errors.d.mts +1 -1
  1606. package/esm/use-cases/use-case.errors.d.mts.map +1 -1
  1607. package/esm/use-cases/use-case.errors.mjs +1 -1
  1608. package/esm/use-cases/use-case.errors.mjs.map +1 -1
  1609. package/esm/use-cases/use-case.mjs +1 -1
  1610. package/esm/use-cases/use-case.mjs.map +1 -1
  1611. package/esm/use-cases/use-cases-registry.d.mts +1 -1
  1612. package/esm/use-cases/use-cases-registry.d.mts.map +1 -1
  1613. package/esm/use-cases/use-cases-registry.mjs +1 -1
  1614. package/esm/use-cases/use-cases-registry.mjs.map +1 -1
  1615. package/esm/utils/app-log.d.mts +6 -6
  1616. package/esm/utils/app-log.d.mts.map +1 -1
  1617. package/esm/utils/app-log.mjs +1 -1
  1618. package/esm/utils/app-log.mjs.map +1 -1
  1619. package/esm/utils/clock.d.mts +33 -0
  1620. package/esm/utils/clock.d.mts.map +1 -0
  1621. package/esm/utils/clock.mjs +27 -0
  1622. package/esm/utils/clock.mjs.map +1 -0
  1623. package/esm/utils/database-log.d.mts +1 -1
  1624. package/esm/utils/database-log.d.mts.map +1 -1
  1625. package/esm/utils/database-log.mjs +1 -1
  1626. package/esm/utils/database-log.mjs.map +1 -1
  1627. package/esm/utils/detect-environment-overrides.mjs +1 -1
  1628. package/esm/utils/detect-environment-overrides.mjs.map +1 -1
  1629. package/esm/utils/environment.d.mts +1 -1
  1630. package/esm/utils/environment.d.mts.map +1 -1
  1631. package/esm/utils/environment.mjs +1 -1
  1632. package/esm/utils/environment.mjs.map +1 -1
  1633. package/esm/utils/framework-vesion.mjs +2 -2
  1634. package/esm/utils/framework-vesion.mjs.map +1 -1
  1635. package/esm/utils/get-localized.d.mts +1 -1
  1636. package/esm/utils/get-localized.d.mts.map +1 -1
  1637. package/esm/utils/get-localized.mjs +1 -1
  1638. package/esm/utils/get-localized.mjs.map +1 -1
  1639. package/esm/utils/ids.d.mts +32 -0
  1640. package/esm/utils/ids.d.mts.map +1 -0
  1641. package/esm/utils/ids.mjs +33 -0
  1642. package/esm/utils/ids.mjs.map +1 -0
  1643. package/esm/utils/index.d.mts +3 -0
  1644. package/esm/utils/index.mjs +3 -0
  1645. package/esm/utils/is-test-file.mjs +1 -1
  1646. package/esm/utils/is-test-file.mjs.map +1 -1
  1647. package/esm/utils/load-environment.mjs +1 -1
  1648. package/esm/utils/load-environment.mjs.map +1 -1
  1649. package/esm/utils/normalized-path.d.mts +1 -1
  1650. package/esm/utils/normalized-path.d.mts.map +1 -1
  1651. package/esm/utils/normalized-path.mjs +1 -1
  1652. package/esm/utils/normalized-path.mjs.map +1 -1
  1653. package/esm/utils/npm-registry.d.mts +1 -1
  1654. package/esm/utils/npm-registry.d.mts.map +1 -1
  1655. package/esm/utils/npm-registry.mjs +1 -1
  1656. package/esm/utils/npm-registry.mjs.map +1 -1
  1657. package/esm/utils/paths.d.mts +1 -1
  1658. package/esm/utils/paths.d.mts.map +1 -1
  1659. package/esm/utils/paths.mjs +1 -1
  1660. package/esm/utils/paths.mjs.map +1 -1
  1661. package/esm/utils/promise-all-object.d.mts +1 -1
  1662. package/esm/utils/promise-all-object.d.mts.map +1 -1
  1663. package/esm/utils/promise-all-object.mjs +1 -1
  1664. package/esm/utils/promise-all-object.mjs.map +1 -1
  1665. package/esm/utils/queue.d.mts +1 -1
  1666. package/esm/utils/queue.d.mts.map +1 -1
  1667. package/esm/utils/queue.mjs +1 -1
  1668. package/esm/utils/queue.mjs.map +1 -1
  1669. package/esm/utils/recorded-environment-overrides.mjs +1 -1
  1670. package/esm/utils/recorded-environment-overrides.mjs.map +1 -1
  1671. package/esm/utils/report-environment-overrides.mjs +1 -1
  1672. package/esm/utils/report-environment-overrides.mjs.map +1 -1
  1673. package/esm/utils/runtime.d.mts +59 -0
  1674. package/esm/utils/runtime.d.mts.map +1 -0
  1675. package/esm/utils/runtime.mjs +85 -0
  1676. package/esm/utils/runtime.mjs.map +1 -0
  1677. package/esm/utils/sleep.d.mts +1 -1
  1678. package/esm/utils/sleep.d.mts.map +1 -1
  1679. package/esm/utils/sleep.mjs +1 -1
  1680. package/esm/utils/sleep.mjs.map +1 -1
  1681. package/esm/utils/sluggable.d.mts +1 -1
  1682. package/esm/utils/sluggable.d.mts.map +1 -1
  1683. package/esm/utils/sluggable.mjs +1 -1
  1684. package/esm/utils/sluggable.mjs.map +1 -1
  1685. package/esm/utils/to-json.d.mts +1 -1
  1686. package/esm/utils/to-json.d.mts.map +1 -1
  1687. package/esm/utils/to-json.mjs +1 -1
  1688. package/esm/utils/to-json.mjs.map +1 -1
  1689. package/esm/utils/types.d.mts +1 -1
  1690. package/esm/utils/types.d.mts.map +1 -1
  1691. package/esm/utils/urls.d.mts +1 -1
  1692. package/esm/utils/urls.d.mts.map +1 -1
  1693. package/esm/utils/urls.mjs +1 -1
  1694. package/esm/utils/urls.mjs.map +1 -1
  1695. package/esm/utils/version-compare.d.mts +1 -1
  1696. package/esm/utils/version-compare.d.mts.map +1 -1
  1697. package/esm/utils/version-compare.mjs +1 -1
  1698. package/esm/utils/version-compare.mjs.map +1 -1
  1699. package/esm/validation/database/exists-except-current-id.d.mts +1 -1
  1700. package/esm/validation/database/exists-except-current-id.d.mts.map +1 -1
  1701. package/esm/validation/database/exists-except-current-id.mjs +1 -1
  1702. package/esm/validation/database/exists-except-current-id.mjs.map +1 -1
  1703. package/esm/validation/database/exists-except-current-user.d.mts +1 -1
  1704. package/esm/validation/database/exists-except-current-user.d.mts.map +1 -1
  1705. package/esm/validation/database/exists-except-current-user.mjs +1 -1
  1706. package/esm/validation/database/exists-except-current-user.mjs.map +1 -1
  1707. package/esm/validation/database/types.d.mts +1 -1
  1708. package/esm/validation/database/types.d.mts.map +1 -1
  1709. package/esm/validation/database/unique-except-current-id.d.mts +1 -1
  1710. package/esm/validation/database/unique-except-current-id.d.mts.map +1 -1
  1711. package/esm/validation/database/unique-except-current-id.mjs +1 -1
  1712. package/esm/validation/database/unique-except-current-id.mjs.map +1 -1
  1713. package/esm/validation/database/unique-except-current-user.d.mts +1 -1
  1714. package/esm/validation/database/unique-except-current-user.d.mts.map +1 -1
  1715. package/esm/validation/database/unique-except-current-user.mjs +1 -1
  1716. package/esm/validation/database/unique-except-current-user.mjs.map +1 -1
  1717. package/esm/validation/file/file.d.mts +1 -1
  1718. package/esm/validation/file/file.d.mts.map +1 -1
  1719. package/esm/validation/file/file.mjs +1 -1
  1720. package/esm/validation/file/file.mjs.map +1 -1
  1721. package/esm/validation/index.d.mts +1 -1
  1722. package/esm/validation/init.mjs +1 -1
  1723. package/esm/validation/init.mjs.map +1 -1
  1724. package/esm/validation/plugins/database-plugin.mjs +1 -1
  1725. package/esm/validation/plugins/database-plugin.mjs.map +1 -1
  1726. package/esm/validation/plugins/file-plugin.mjs +1 -1
  1727. package/esm/validation/plugins/file-plugin.mjs.map +1 -1
  1728. package/esm/validation/plugins/localized-plugin.mjs +1 -1
  1729. package/esm/validation/plugins/localized-plugin.mjs.map +1 -1
  1730. package/esm/validation/types.d.mts +58 -3
  1731. package/esm/validation/types.d.mts.map +1 -1
  1732. package/esm/validation/validateAll.mjs +20 -3
  1733. package/esm/validation/validateAll.mjs.map +1 -1
  1734. package/esm/validation/validation-failure-status.mjs +15 -0
  1735. package/esm/validation/validation-failure-status.mjs.map +1 -0
  1736. package/esm/validation/validators/file-validator.d.mts +28 -41
  1737. package/esm/validation/validators/file-validator.d.mts.map +1 -1
  1738. package/esm/validation/validators/file-validator.mjs +4 -1
  1739. package/esm/validation/validators/file-validator.mjs.map +1 -1
  1740. package/esm/vite/lower-stage3-decorators.d.mts +1 -1
  1741. package/esm/vite/lower-stage3-decorators.d.mts.map +1 -1
  1742. package/esm/vite/lower-stage3-decorators.mjs +1 -1
  1743. package/esm/vite/lower-stage3-decorators.mjs.map +1 -1
  1744. package/esm/warlock-config/bundle-config.mjs +148 -0
  1745. package/esm/warlock-config/bundle-config.mjs.map +1 -0
  1746. package/esm/warlock-config/default-configurations.mjs +1 -1
  1747. package/esm/warlock-config/default-configurations.mjs.map +1 -1
  1748. package/esm/warlock-config/define-config.d.mts +1 -1
  1749. package/esm/warlock-config/define-config.d.mts.map +1 -1
  1750. package/esm/warlock-config/define-config.mjs +1 -1
  1751. package/esm/warlock-config/define-config.mjs.map +1 -1
  1752. package/esm/warlock-config/index.d.mts +1 -1
  1753. package/esm/warlock-config/index.mjs +1 -1
  1754. package/esm/warlock-config/normalize-build-config.mjs +1 -1
  1755. package/esm/warlock-config/normalize-build-config.mjs.map +1 -1
  1756. package/esm/warlock-config/types.d.mts +28 -4
  1757. package/esm/warlock-config/types.d.mts.map +1 -1
  1758. package/esm/warlock-config/warlock-config.manager.d.mts +32 -7
  1759. package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
  1760. package/esm/warlock-config/warlock-config.manager.mjs +94 -18
  1761. package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
  1762. package/esm/warlock-config/warn-deprecated-config.mjs +1 -1
  1763. package/esm/warlock-config/warn-deprecated-config.mjs.map +1 -1
  1764. package/llms-full.txt +3271 -784
  1765. package/llms.txt +16 -6
  1766. package/package.json +51 -14
  1767. package/schemas/inspect-report.schema.json +554 -0
  1768. package/skills/README.md +9 -0
  1769. package/skills/add-connector/SKILL.md +26 -38
  1770. package/skills/benchmark-code/SKILL.md +30 -24
  1771. package/skills/build-restful/SKILL.md +14 -14
  1772. package/skills/build-url/SKILL.md +18 -18
  1773. package/skills/configure-app/SKILL.md +129 -14
  1774. package/skills/create-controller/SKILL.md +29 -12
  1775. package/skills/create-module/SKILL.md +3 -3
  1776. package/skills/define-resource/SKILL.md +32 -29
  1777. package/skills/encrypt-data/SKILL.md +21 -19
  1778. package/skills/generate-openapi/SKILL.md +50 -24
  1779. package/skills/hash-password/SKILL.md +2 -2
  1780. package/skills/health-checks/SKILL.md +26 -7
  1781. package/skills/index.md +9 -4
  1782. package/skills/lower-stage3-decorators/SKILL.md +4 -4
  1783. package/skills/make-endpoint/SKILL.md +110 -0
  1784. package/skills/model-factories/SKILL.md +92 -0
  1785. package/skills/process-image/SKILL.md +32 -30
  1786. package/skills/register-route/SKILL.md +119 -10
  1787. package/skills/request-memo/SKILL.md +1 -1
  1788. package/skills/request-tracing/SKILL.md +4 -1
  1789. package/skills/resolve-path/SKILL.md +45 -44
  1790. package/skills/retry-operation/SKILL.md +20 -11
  1791. package/skills/run-app/SKILL.md +111 -20
  1792. package/skills/send-response/SKILL.md +189 -16
  1793. package/skills/store-file/SKILL.md +97 -53
  1794. package/skills/test-fakes/SKILL.md +123 -0
  1795. package/skills/test-http/SKILL.md +125 -21
  1796. package/skills/test-service/SKILL.md +41 -1
  1797. package/skills/update-packages/SKILL.md +29 -18
  1798. package/skills/upgrade-from-5-29/SKILL.md +413 -0
  1799. package/skills/upload-file/SKILL.md +31 -33
  1800. package/skills/use-app-context/SKILL.md +38 -31
  1801. package/skills/use-middleware/SKILL.md +46 -26
  1802. package/skills/use-model-transformers/SKILL.md +37 -28
  1803. package/skills/use-repository/SKILL.md +2 -2
  1804. package/skills/validate-input/SKILL.md +73 -29
  1805. package/skills/warlock-agents-md/SKILL.md +96 -0
  1806. package/skills/warlock-board/SKILL.md +123 -0
  1807. package/skills/warlock-check/SKILL.md +132 -0
  1808. package/skills/warlock-conventions/SKILL.md +115 -0
  1809. package/skills/warlock-doctor/SKILL.md +55 -22
  1810. package/skills/warlock-inspect/SKILL.md +134 -0
  1811. package/skills/warlock-mcp/SKILL.md +120 -0
  1812. package/skills/warlock-routes/SKILL.md +18 -11
  1813. package/skills/warlock-trace/SKILL.md +81 -0
  1814. package/skills/wire-socket/SKILL.md +8 -8
  1815. package/skills/write-seeder/SKILL.md +46 -32
  1816. package/skills/write-use-case/SKILL.md +40 -27
  1817. package/esm/http/uploads/matches-if-none-match.mjs +0 -13
  1818. package/esm/http/uploads/matches-if-none-match.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { container } from "../container/index.mjs";
2
2
 
3
- //#region ../core/src/application/app.ts
3
+ //#region ../../packages/core/src/application/app.ts
4
4
  const app = {
5
5
  /**
6
6
  * Socket Io Instance
@@ -1 +1 @@
1
- {"version":3,"file":"app.mjs","names":[],"sources":["../../../../../../../core/src/application/app.ts"],"sourcesContent":["import { type DataSource } from \"@warlock.js/cascade\";\nimport { type FastifyInstance } from \"fastify\";\nimport { type Server } from \"socket.io\";\nimport { type Router } from \"../router\";\nimport { container } from \"./../container\";\n\ntype RuntimeApplication = {\n socket: Server | undefined;\n http: FastifyInstance | undefined;\n router: Router;\n database: DataSource | undefined;\n};\n\nexport const app: RuntimeApplication = {\n /**\n * Socket Io Instance\n * Available only if socket.io config file exists\n */\n get socket() {\n return container.tryGet(\"socket\");\n },\n /**\n * HTTP Server Instance\n * Available only if http config file exists\n */\n get http() {\n return container.tryGet(\"http.server\");\n },\n /**\n * Router Instance\n *\n * Unlike `socket`/`database`, the router is set unconditionally at\n * `router.ts` module load (there is no \"no router configured\" case), so a\n * miss here is never a legitimate absence — it means either a genuine bug\n * or a duplicate-instance dev-path read. `get` surfaces that instead of\n * silently returning `undefined`.\n */\n get router() {\n return container.get(\"router\");\n },\n /**\n * Database Instance\n * Available only if database config file exists\n */\n get database() {\n return container.tryGet(\"database.source\");\n },\n};\n"],"mappings":";;;AAaA,MAAa,MAA0B;;;;;CAKrC,IAAI,SAAS;EACX,OAAO,UAAU,OAAO,QAAQ;CAClC;;;;;CAKA,IAAI,OAAO;EACT,OAAO,UAAU,OAAO,aAAa;CACvC;;;;;;;;;;CAUA,IAAI,SAAS;EACX,OAAO,UAAU,IAAI,QAAQ;CAC/B;;;;;CAKA,IAAI,WAAW;EACb,OAAO,UAAU,OAAO,iBAAiB;CAC3C;AACF"}
1
+ {"version":3,"file":"app.mjs","names":[],"sources":["../../../../../../../../packages/core/src/application/app.ts"],"sourcesContent":["import { type DataSource } from \"@warlock.js/cascade\";\nimport { type FastifyInstance } from \"fastify\";\nimport { type Server } from \"socket.io\";\nimport { type Router } from \"../router\";\nimport { container } from \"./../container\";\n\ntype RuntimeApplication = {\n socket: Server | undefined;\n http: FastifyInstance | undefined;\n router: Router;\n database: DataSource | undefined;\n};\n\nexport const app: RuntimeApplication = {\n /**\n * Socket Io Instance\n * Available only if socket.io config file exists\n */\n get socket() {\n return container.tryGet(\"socket\");\n },\n /**\n * HTTP Server Instance\n * Available only if http config file exists\n */\n get http() {\n return container.tryGet(\"http.server\");\n },\n /**\n * Router Instance\n *\n * Unlike `socket`/`database`, the router is set unconditionally at\n * `router.ts` module load (there is no \"no router configured\" case), so a\n * miss here is never a legitimate absence — it means either a genuine bug\n * or a duplicate-instance dev-path read. `get` surfaces that instead of\n * silently returning `undefined`.\n */\n get router() {\n return container.get(\"router\");\n },\n /**\n * Database Instance\n * Available only if database config file exists\n */\n get database() {\n return container.tryGet(\"database.source\");\n },\n};\n"],"mappings":";;;AAaA,MAAa,MAA0B;;;;;CAKrC,IAAI,SAAS;EACX,OAAO,UAAU,OAAO,QAAQ;CAClC;;;;;CAKA,IAAI,OAAO;EACT,OAAO,UAAU,OAAO,aAAa;CACvC;;;;;;;;;;CAUA,IAAI,SAAS;EACX,OAAO,UAAU,IAAI,QAAQ;CAC/B;;;;;CAKA,IAAI,WAAW;EACb,OAAO,UAAU,OAAO,iBAAiB;CAC3C;AACF"}
@@ -1,4 +1,4 @@
1
- //#region ../core/src/application/application-config-types.d.ts
1
+ //#region ../../packages/core/src/application/application-config-types.d.ts
2
2
  type AppConfigurations = {
3
3
  /**
4
4
  * App name
@@ -1 +1 @@
1
- {"version":3,"file":"application-config-types.d.mts","names":[],"sources":["../../../../../../../core/src/application/application-config-types.ts"],"mappings":";KAAY,iBAAA;EAAA;;;EAIV,OAAA;EAAA;;;;;EAMA,UAAA;EAuBW;AAAA;;;;EAjBX,OAAA;;;;;;;;;EASA,SAAA;;;;EAIA,QAAA;;;;EAIA,WAAA;AAAA"}
1
+ {"version":3,"file":"application-config-types.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/application/application-config-types.ts"],"mappings":";KAAY,iBAAA;EAAA;;;EAIV,OAAA;EAAA;;;;;EAMA,UAAA;EAuBW;AAAA;;;;EAjBX,OAAA;;;;;;;;;EASA,SAAA;;;;EAIA,QAAA;;;;EAIA,WAAA;AAAA"}
@@ -1,7 +1,7 @@
1
1
  import { Environment, RuntimeStrategy } from "../utils/environment.mjs";
2
2
  import { AppRole } from "./roles.mjs";
3
3
 
4
- //#region ../core/src/application/application.d.ts
4
+ //#region ../../packages/core/src/application/application.d.ts
5
5
  /**
6
6
  * Snapshot of the global facts known the moment the application finished
7
7
  * booting: every connector (early + late) is active and all app files
@@ -1 +1 @@
1
- {"version":3,"file":"application.d.mts","names":[],"sources":["../../../../../../../core/src/application/application.ts"],"mappings":";;;;;;AAkBA;;;;KAAY,WAAA;EACV,WAAA,EAAa,WAAA;EACb,eAAA,EAAiB,eAAe;EAAf;;;AAKH;EAAd,cAAA;AAAA;;;;;;KAQU,YAAA,IAAgB,OAAA,EAAS,WAAA,YAAuB,OAAO;AAAA;AAYnE;;;;AAAgD;AAkBhD;;;;AA9BmE,KAYvD,aAAA,gBAA6B,OAAO;AAoBhD;;;;;AAAA,KAFY,gBAAA,gBAAgC,OAAO;AAAA,cAEtC,WAAA;EAwHyB;;;EAAA,gBApHb,SAAA,EAAS,IAAA;EA4OY;;;EAAA,OAvO9B,eAAA,EAAiB,eAAA;EAqVG;;;EAAA,eAhVnB,MAAA;EAkYa;;;EAAA,eA7Xb,WAAA;EAfiB;;;;EAAA,eAqBjB,aAAA;EAAA;;;;;EAAA,eAOA,SAAA;EA8BG;;;;EAAA,eAxBH,cAAA;EAiDD;;;;;;EAAA,eAzCC,UAAA;EA0EqB;;;;EAAA,eApErB,YAAA;EA8JD;;;EAAA,eAzJC,iBAAA;EAuL6B;;;EAAA,WAlL1B,OAAA;EAiOO;;;EAAA,OA1NX,kBAAA,CAAmB,QAAA,EAAU,eAAA;EA2QzB;;;;;EAAA,WAlQA,QAAA;EAuRA;;;;;EAAA,OA9QJ,aAAA,CAAc,IAAA;EA6SV;;;;;;;;;;;;AAsDU;;EAtDV,OA3RJ,UAAA,CAAW,QAAA,EAAU,YAAA;;;;;SAerB,UAAA,IAAc,OAAA,CAAQ,WAAA;;;;;;;;;;;;;;;SAwBtB,UAAA,CAAW,OAAA,EAAS,WAAA;;;;;iBAgCb,eAAA;;;;;;;;;;;;;;;;;;;;;;;;SAkCP,cAAA,CAAe,SAAA,EAAW,aAAA;;;;;;;;;;;;;;;;;;SA8BpB,oBAAA,IAAwB,OAAA;;;;;;aAgC1B,cAAA;;;;;;;;;;;;SAeJ,UAAA,CAAW,QAAA,EAAU,gBAAA;;;;;;;;;;SAmBf,gBAAA,IAAoB,OAAA;;;;;iBAmBnB,mBAAA;;;;aAWH,MAAA;;;;aAOA,WAAA,IAAe,WAAA;;;;SAOnB,cAAA,CAAe,GAAA,EAAK,WAAA;;;;aAOhB,YAAA;;;;aAOA,aAAA;;;;aAOA,MAAA;;;;;;aASA,KAAA,IAAS,WAAA,CAAY,OAAA;;;;;aAQrB,KAAA,IAAS,WAAA;;;;;;;;;SAYb,OAAA,CAAQ,IAAA,EAAM,OAAA;;;;aAOV,QAAA;;;;aAOA,OAAA;;;;aAOA,OAAA;;;;aAOA,WAAA;;;;aAOA,WAAA;;;;aAOA,UAAA;AAAA"}
1
+ {"version":3,"file":"application.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/application/application.ts"],"mappings":";;;;;;AAkBA;;;;KAAY,WAAA;EACV,WAAA,EAAa,WAAA;EACb,eAAA,EAAiB,eAAe;EAAf;;;AAKH;EAAd,cAAA;AAAA;;;;;;KAQU,YAAA,IAAgB,OAAA,EAAS,WAAA,YAAuB,OAAO;AAAA;AAYnE;;;;AAAgD;AAkBhD;;;;AA9BmE,KAYvD,aAAA,gBAA6B,OAAO;AAoBhD;;;;;AAAA,KAFY,gBAAA,gBAAgC,OAAO;AAAA,cAEtC,WAAA;EAwHyB;;;EAAA,gBApHb,SAAA,EAAS,IAAA;EA4OY;;;EAAA,OAvO9B,eAAA,EAAiB,eAAA;EAqVG;;;EAAA,eAhVnB,MAAA;EAkYa;;;EAAA,eA7Xb,WAAA;EAfiB;;;;EAAA,eAqBjB,aAAA;EAAA;;;;;EAAA,eAOA,SAAA;EA8BG;;;;EAAA,eAxBH,cAAA;EAiDD;;;;;;EAAA,eAzCC,UAAA;EA0EqB;;;;EAAA,eApErB,YAAA;EA8JD;;;EAAA,eAzJC,iBAAA;EAuL6B;;;EAAA,WAlL1B,OAAA;EAiOO;;;EAAA,OA1NX,kBAAA,CAAmB,QAAA,EAAU,eAAA;EA2QzB;;;;;EAAA,WAlQA,QAAA;EAuRA;;;;;EAAA,OA9QJ,aAAA,CAAc,IAAA;EA6SV;;;;;;;;;;;;AAsDU;;EAtDV,OA3RJ,UAAA,CAAW,QAAA,EAAU,YAAA;;;;;SAerB,UAAA,IAAc,OAAA,CAAQ,WAAA;;;;;;;;;;;;;;;SAwBtB,UAAA,CAAW,OAAA,EAAS,WAAA;;;;;iBAgCb,eAAA;;;;;;;;;;;;;;;;;;;;;;;;SAkCP,cAAA,CAAe,SAAA,EAAW,aAAA;;;;;;;;;;;;;;;;;;SA8BpB,oBAAA,IAAwB,OAAA;;;;;;aAgC1B,cAAA;;;;;;;;;;;;SAeJ,UAAA,CAAW,QAAA,EAAU,gBAAA;;;;;;;;;;SAmBf,gBAAA,IAAoB,OAAA;;;;;iBAmBnB,mBAAA;;;;aAWH,MAAA;;;;aAOA,WAAA,IAAe,WAAA;;;;SAOnB,cAAA,CAAe,GAAA,EAAK,WAAA;;;;aAOhB,YAAA;;;;aAOA,aAAA;;;;aAOA,MAAA;;;;;;aASA,KAAA,IAAS,WAAA,CAAY,OAAA;;;;;aAQrB,KAAA,IAAS,WAAA;;;;;;;;;SAYb,OAAA,CAAQ,IAAA,EAAM,OAAA;;;;aAOV,QAAA;;;;aAOA,OAAA;;;;aAOA,OAAA;;;;aAOA,WAAA;;;;aAOA,WAAA;;;;aAOA,UAAA;AAAA"}
@@ -5,7 +5,7 @@ import { getFrameworkVersion } from "../utils/framework-vesion.mjs";
5
5
  import { getRoles, getSites, hasRole } from "./roles.mjs";
6
6
  import { log } from "@warlock.js/logger";
7
7
 
8
- //#region ../core/src/application/application.ts
8
+ //#region ../../packages/core/src/application/application.ts
9
9
  const ErrorWithCause = Error;
10
10
  var Application = class {
11
11
  static {
@@ -1 +1 @@
1
- {"version":3,"file":"application.mjs","names":[],"sources":["../../../../../../../core/src/application/application.ts"],"sourcesContent":["import { log } from \"@warlock.js/logger\";\nimport { BOOT_SIGNAL_VERSION, sendBootSignal } from \"./boot-signal\";\nimport {\n environment,\n setEnvironment,\n type Environment,\n type RuntimeStrategy,\n} from \"../utils/environment\";\nimport { getFrameworkVersion } from \"../utils/framework-vesion\";\nimport { appPath, publicPath, rootPath, srcPath, storagePath, uploadsPath } from \"../utils/paths\";\nimport { getRoles, getSites, hasRole, type AppRole } from \"./roles\";\n\n/**\n * Snapshot of the global facts known the moment the application finished\n * booting: every connector (early + late) is active and all app files\n * (locales, events, main, routes) are loaded. Passed to every\n * `Application.onceBooted` listener and resolved from `Application.whenBooted`.\n */\nexport type BootContext = {\n environment: Environment;\n runtimeStrategy: RuntimeStrategy;\n /**\n * Wall-clock milliseconds the boot took. The dev server measures it; the\n * production entry omits it.\n */\n bootDurationMs?: number;\n};\n\n/**\n * A callback registered through `Application.onceBooted`. May be async — its\n * rejection is caught and logged so a single listener can never break boot or\n * the other listeners.\n */\nexport type BootListener = (context: BootContext) => void | Promise<void>;\n\n/**\n * A callback registered through `Application.onValidateBoot`. May be async —\n * unlike {@link BootListener}, its rejection is NOT caught: it aborts boot.\n *\n * Use this for configuration that makes the application WRONG rather than\n * degraded when missing (a signing secret, a required integration key) — the\n * kind of check that must fail closed. Use `onceBooted` for everything else;\n * that contract stays fire-and-forget on purpose (it is the right behaviour\n * for plugins reacting to boot, not for gating it).\n */\nexport type BootValidator = () => void | Promise<void>;\n\n/**\n * `new Error(message, { cause })` is ES2022, and this package still compiles\n * against the ES2020 lib, where `Error` is typed as taking a message only.\n * Node has supported the option since v16, so this is the type layer\n * catching up with the runtime, not a change in what the code does. Same\n * workaround as `image.ts` (see #16).\n */\ntype ErrorWithCauseConstructor = new (message: string, options: { cause: unknown }) => Error;\n\nconst ErrorWithCause = Error as ErrorWithCauseConstructor;\n\n/**\n * A callback registered through `Application.onShutdown`. Runs once, while the\n * connectors (db, cache, http) are still up, so it can release app-owned\n * resources cleanly. May be async — its rejection is caught and logged.\n */\nexport type ShutdownListener = () => void | Promise<void>;\n\nexport class Application {\n /**\n * Project start time regarding the process start time\n */\n public static readonly startedAt = new Date(Date.now() - process.uptime() * 1000);\n\n /**\n * Runtime strategy\n */\n public static runtimeStrategy: RuntimeStrategy;\n\n /**\n * Whether the application has finished booting. Flipped once by `markBooted`.\n */\n private static booted = false;\n\n /**\n * The boot context, set once booted so it can be replayed to late subscribers.\n */\n private static bootContext: BootContext | undefined;\n\n /**\n * Listeners queued before boot completed, drained in registration order by\n * `markBooted`.\n */\n private static bootListeners: BootListener[] = [];\n\n /**\n * Whether `runStartupValidators` has already run. Flipped once, so a\n * validator registered afterwards is refused instead of silently skipped\n * or run too late to matter.\n */\n private static validated = false;\n\n /**\n * Startup validators queued before `runStartupValidators` ran, drained in\n * registration order.\n */\n private static bootValidators: BootValidator[] = [];\n\n /**\n * The http port this process actually bound, once it has. Reported in the\n * readiness signal so a supervisor knows where to send its health check\n * instead of re-deriving it from config it may not be able to read.\n * Undefined for an app with no http connector — a queue worker still boots.\n */\n private static servedPort: number | undefined;\n\n /**\n * Whether the application has begun (or finished) shutting down. Flipped once\n * by `runShutdownHooks`.\n */\n private static shuttingDown = false;\n\n /**\n * Teardown callbacks, run once when shutdown begins.\n */\n private static shutdownListeners: ShutdownListener[] = [];\n\n /**\n * Get framework version\n */\n public static get version() {\n return getFrameworkVersion();\n }\n\n /**\n * Set the runtime strategy\n */\n public static setRuntimeStrategy(strategy: RuntimeStrategy) {\n this.runtimeStrategy = strategy;\n }\n\n /**\n * Whether the application has finished booting — every connector in both\n * the early and late phases is active and all app files (locales, events,\n * main, routes) have been loaded.\n */\n public static get isBooted(): boolean {\n return this.booted;\n }\n\n /**\n * Record the http port this process bound.\n *\n * @internal The http connector calls this after a successful `listen`.\n */\n public static setServedPort(port: number): void {\n this.servedPort = port;\n }\n\n /**\n * Run a callback once the application is fully booted.\n *\n * App files (`main` / `events` / `routes` / locales) are imported BEFORE the\n * late-phase connectors (http, socket) start, so a listener registered at\n * import time waits for the whole sequence to finish before it runs. If the\n * application is already booted, the callback runs on the next microtask —\n * so a late subscriber never silently misses the event.\n *\n * @example\n * Application.onceBooted(({ environment }) => {\n * log.info(\"app\", \"booted\", `ready in ${environment}`);\n * });\n */\n public static onceBooted(listener: BootListener): void {\n if (this.booted && this.bootContext) {\n const context = this.bootContext;\n void this.runBootListener(listener, context);\n\n return;\n }\n\n this.bootListeners.push(listener);\n }\n\n /**\n * Promise form of {@link onceBooted} — resolves with the boot context once\n * the application is booted, or immediately if it already is.\n */\n public static whenBooted(): Promise<BootContext> {\n if (this.booted && this.bootContext) {\n return Promise.resolve(this.bootContext);\n }\n\n return new Promise<BootContext>((resolve) => {\n this.onceBooted((context) => resolve(context));\n });\n }\n\n /**\n * Flip the boot latch and drain every queued listener. The dev server and\n * the production entry call this once, right after the late phase starts. It\n * is idempotent — a second call is a no-op, so a double-invoke can never\n * double-fire listeners.\n *\n * Also reports readiness to a supervising parent process — this is the one\n * moment in the lifecycle where \"the application is serving\" is true, so it\n * is the only honest source for `warlock start`'s success banner. Sent before\n * the listeners run: a slow or hanging `onceBooted` listener must not delay\n * the parent's view of a server that is already accepting requests.\n *\n * @internal Framework entry points call this; application code must not.\n */\n public static markBooted(context: BootContext): void {\n if (this.booted) {\n return;\n }\n\n this.booted = true;\n this.bootContext = context;\n\n sendBootSignal({\n type: \"warlock:ready\",\n version: BOOT_SIGNAL_VERSION,\n pid: process.pid,\n at: new Date().toISOString(),\n environment: context.environment,\n runtimeStrategy: context.runtimeStrategy,\n bootDurationMs: context.bootDurationMs,\n port: this.servedPort,\n roles: [...this.roles],\n });\n\n const listeners = this.bootListeners;\n this.bootListeners = [];\n\n for (const listener of listeners) {\n void this.runBootListener(listener, context);\n }\n }\n\n /**\n * Invoke a single boot listener, isolating its failure so neither boot nor\n * the remaining listeners are affected.\n */\n private static async runBootListener(\n listener: BootListener,\n context: BootContext,\n ): Promise<void> {\n try {\n await listener(context);\n } catch (error) {\n log.error(\"application\", \"booted-listener\", error as Error);\n }\n }\n\n /**\n * Register a startup validator — distinct from {@link onceBooted}. A\n * rejecting validator aborts boot instead of being caught and logged, so\n * this is where configuration that must fail closed belongs (a signing\n * secret, a required integration key), not `onceBooted`.\n *\n * Must be registered before the framework calls `runStartupValidators` —\n * typically at module scope in `src/app/main.ts`, the same place a\n * `BootListener` would be registered. Registering one after validation has\n * already run throws: by then a rejection could no longer stop the app\n * from serving, so running it late would silently defeat the guarantee\n * this hook exists to give.\n *\n * @example\n * Application.onValidateBoot(() => {\n * if (!env(\"JWT_SECRET\")) {\n * throw new Error(\n * \"JWT_SECRET is not set. Sessions cannot be signed without it. \" +\n * \"Generate one with `yarn jwt` and put it in .env.\",\n * );\n * }\n * });\n */\n public static onValidateBoot(validator: BootValidator): void {\n if (this.validated) {\n throw new Error(\n \"Application.onValidateBoot(): startup validators already ran — \" +\n \"this validator was registered too late to block boot. Register it \" +\n \"before the framework calls Application.runStartupValidators(), \" +\n \"typically at module scope in `src/app/main.ts`.\",\n );\n }\n\n this.bootValidators.push(validator);\n }\n\n /**\n * Run every registered startup validator, in registration order, and abort\n * on the first rejection. Idempotent — a second call is a no-op.\n *\n * Distinct from `runBootListener`: a listener's failure is isolated so it\n * can never break boot; a validator's failure IS the boot failing — that is\n * the entire point of registering one instead of the other. The thrown\n * error names the failing validator and the original cause, so whatever\n * catches it (the dev server's boot try/catch, the production entry's\n * top-level await) reports which check failed and why, not a bare\n * rejection.\n *\n * @internal Framework entry points call this once app code (main.ts et al)\n * has loaded and BEFORE late-phase connectors (http, socket) start, so a\n * failing validator runs before anything can bind a port or accept a\n * request. Application code must not call this directly.\n */\n public static async runStartupValidators(): Promise<void> {\n if (this.validated) {\n return;\n }\n\n this.validated = true;\n\n const validators = this.bootValidators;\n this.bootValidators = [];\n\n for (const validator of validators) {\n try {\n await validator();\n } catch (error) {\n const name = validator.name || \"<anonymous>\";\n const cause = error instanceof Error ? error.message : String(error);\n\n throw new ErrorWithCause(\n `Startup validator \"${name}\" rejected boot: ${cause}. ` +\n `Fix the condition it checks, or remove the validator if it no ` +\n `longer applies — boot cannot proceed while it fails.`,\n { cause: error },\n );\n }\n }\n }\n\n /**\n * Whether the application has begun shutting down. Once true, readiness\n * checks report not-ready so a load balancer drains this instance before the\n * HTTP server stops accepting requests.\n */\n public static get isShuttingDown(): boolean {\n return this.shuttingDown;\n }\n\n /**\n * Register a teardown callback, run once when the application shuts down —\n * before the connectors (db, cache, http) are torn down, so it can still use\n * them. The natural place to close an app-owned resource opened in\n * `onceBooted`. If shutdown has already begun, the callback runs immediately.\n *\n * @example\n * Application.onShutdown(async () => {\n * await myQueueConsumer.stop();\n * });\n */\n public static onShutdown(listener: ShutdownListener): void {\n if (this.shuttingDown) {\n void this.runShutdownListener(listener);\n\n return;\n }\n\n this.shutdownListeners.push(listener);\n }\n\n /**\n * Flip the shutdown latch and run every teardown callback. The connectors\n * manager calls this at the start of shutdown — before any connector is torn\n * down. Idempotent and error-isolated: each callback is awaited, a thrown one\n * is logged and does not stop the rest. Listeners run LIFO (reverse of\n * registration), mirroring resource-unwind order.\n *\n * @internal Framework entry points call this; application code must not.\n */\n public static async runShutdownHooks(): Promise<void> {\n if (this.shuttingDown) {\n return;\n }\n\n this.shuttingDown = true;\n\n const listeners = this.shutdownListeners.reverse();\n this.shutdownListeners = [];\n\n for (const listener of listeners) {\n await this.runShutdownListener(listener);\n }\n }\n\n /**\n * Invoke a single teardown callback, isolating its failure so the rest still\n * run and shutdown is never blocked by one bad hook.\n */\n private static async runShutdownListener(listener: ShutdownListener): Promise<void> {\n try {\n await listener();\n } catch (error) {\n log.error(\"application\", \"shutdown-listener\", error as Error);\n }\n }\n\n /**\n * Get project uptime in milliseconds\n */\n public static get uptime(): number {\n return process.uptime() * 1000;\n }\n\n /**\n * Get the current environment\n */\n public static get environment(): Environment {\n return environment();\n }\n\n /**\n * Set the current environment\n */\n public static setEnvironment(env: Environment) {\n setEnvironment(env);\n }\n\n /**\n * Check if the application is running in production environment\n */\n public static get isProduction(): boolean {\n return this.environment === \"production\";\n }\n\n /**\n * Check if the application is running in development environment\n */\n public static get isDevelopment(): boolean {\n return this.environment === \"development\";\n }\n\n /**\n * Check if the application is running in test environment\n */\n public static get isTest(): boolean {\n return this.environment === \"test\";\n }\n\n /**\n * The roles this process serves — `WARLOCK_ROLES`, resolved once at\n * bootstrap. Every role is on when the variable is absent (plain `warlock\n * start`, `warlock dev`, and tests).\n */\n public static get roles(): ReadonlySet<AppRole> {\n return getRoles();\n }\n\n /**\n * The site keys this process installs pages for — `WARLOCK_SITES`,\n * resolved once at bootstrap. `undefined` means every site.\n */\n public static get sites(): ReadonlySet<string> | undefined {\n return getSites();\n }\n\n /**\n * Whether this process serves the given role.\n *\n * @example\n * if (Application.hasRole(\"worker\")) {\n * scheduler.start();\n * }\n */\n public static hasRole(role: AppRole): boolean {\n return hasRole(role);\n }\n\n /**\n * Get the root path\n */\n public static get rootPath(): string {\n return rootPath();\n }\n\n /**\n * Get the src path\n */\n public static get srcPath(): string {\n return srcPath();\n }\n\n /**\n * Get the app path\n */\n public static get appPath(): string {\n return appPath();\n }\n\n /**\n * Get the storage path\n */\n public static get storagePath(): string {\n return storagePath();\n }\n\n /**\n * Get the uploads path\n */\n public static get uploadsPath(): string {\n return uploadsPath();\n }\n\n /**\n * Get the public path\n */\n public static get publicPath(): string {\n return publicPath();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"application.mjs","names":[],"sources":["../../../../../../../../packages/core/src/application/application.ts"],"sourcesContent":["import { log } from \"@warlock.js/logger\";\nimport { BOOT_SIGNAL_VERSION, sendBootSignal } from \"./boot-signal\";\nimport {\n environment,\n setEnvironment,\n type Environment,\n type RuntimeStrategy,\n} from \"../utils/environment\";\nimport { getFrameworkVersion } from \"../utils/framework-vesion\";\nimport { appPath, publicPath, rootPath, srcPath, storagePath, uploadsPath } from \"../utils/paths\";\nimport { getRoles, getSites, hasRole, type AppRole } from \"./roles\";\n\n/**\n * Snapshot of the global facts known the moment the application finished\n * booting: every connector (early + late) is active and all app files\n * (locales, events, main, routes) are loaded. Passed to every\n * `Application.onceBooted` listener and resolved from `Application.whenBooted`.\n */\nexport type BootContext = {\n environment: Environment;\n runtimeStrategy: RuntimeStrategy;\n /**\n * Wall-clock milliseconds the boot took. The dev server measures it; the\n * production entry omits it.\n */\n bootDurationMs?: number;\n};\n\n/**\n * A callback registered through `Application.onceBooted`. May be async — its\n * rejection is caught and logged so a single listener can never break boot or\n * the other listeners.\n */\nexport type BootListener = (context: BootContext) => void | Promise<void>;\n\n/**\n * A callback registered through `Application.onValidateBoot`. May be async —\n * unlike {@link BootListener}, its rejection is NOT caught: it aborts boot.\n *\n * Use this for configuration that makes the application WRONG rather than\n * degraded when missing (a signing secret, a required integration key) — the\n * kind of check that must fail closed. Use `onceBooted` for everything else;\n * that contract stays fire-and-forget on purpose (it is the right behaviour\n * for plugins reacting to boot, not for gating it).\n */\nexport type BootValidator = () => void | Promise<void>;\n\n/**\n * `new Error(message, { cause })` is ES2022, and this package still compiles\n * against the ES2020 lib, where `Error` is typed as taking a message only.\n * Node has supported the option since v16, so this is the type layer\n * catching up with the runtime, not a change in what the code does. Same\n * workaround as `image.ts` (see #16).\n */\ntype ErrorWithCauseConstructor = new (message: string, options: { cause: unknown }) => Error;\n\nconst ErrorWithCause = Error as ErrorWithCauseConstructor;\n\n/**\n * A callback registered through `Application.onShutdown`. Runs once, while the\n * connectors (db, cache, http) are still up, so it can release app-owned\n * resources cleanly. May be async — its rejection is caught and logged.\n */\nexport type ShutdownListener = () => void | Promise<void>;\n\nexport class Application {\n /**\n * Project start time regarding the process start time\n */\n public static readonly startedAt = new Date(Date.now() - process.uptime() * 1000);\n\n /**\n * Runtime strategy\n */\n public static runtimeStrategy: RuntimeStrategy;\n\n /**\n * Whether the application has finished booting. Flipped once by `markBooted`.\n */\n private static booted = false;\n\n /**\n * The boot context, set once booted so it can be replayed to late subscribers.\n */\n private static bootContext: BootContext | undefined;\n\n /**\n * Listeners queued before boot completed, drained in registration order by\n * `markBooted`.\n */\n private static bootListeners: BootListener[] = [];\n\n /**\n * Whether `runStartupValidators` has already run. Flipped once, so a\n * validator registered afterwards is refused instead of silently skipped\n * or run too late to matter.\n */\n private static validated = false;\n\n /**\n * Startup validators queued before `runStartupValidators` ran, drained in\n * registration order.\n */\n private static bootValidators: BootValidator[] = [];\n\n /**\n * The http port this process actually bound, once it has. Reported in the\n * readiness signal so a supervisor knows where to send its health check\n * instead of re-deriving it from config it may not be able to read.\n * Undefined for an app with no http connector — a queue worker still boots.\n */\n private static servedPort: number | undefined;\n\n /**\n * Whether the application has begun (or finished) shutting down. Flipped once\n * by `runShutdownHooks`.\n */\n private static shuttingDown = false;\n\n /**\n * Teardown callbacks, run once when shutdown begins.\n */\n private static shutdownListeners: ShutdownListener[] = [];\n\n /**\n * Get framework version\n */\n public static get version() {\n return getFrameworkVersion();\n }\n\n /**\n * Set the runtime strategy\n */\n public static setRuntimeStrategy(strategy: RuntimeStrategy) {\n this.runtimeStrategy = strategy;\n }\n\n /**\n * Whether the application has finished booting — every connector in both\n * the early and late phases is active and all app files (locales, events,\n * main, routes) have been loaded.\n */\n public static get isBooted(): boolean {\n return this.booted;\n }\n\n /**\n * Record the http port this process bound.\n *\n * @internal The http connector calls this after a successful `listen`.\n */\n public static setServedPort(port: number): void {\n this.servedPort = port;\n }\n\n /**\n * Run a callback once the application is fully booted.\n *\n * App files (`main` / `events` / `routes` / locales) are imported BEFORE the\n * late-phase connectors (http, socket) start, so a listener registered at\n * import time waits for the whole sequence to finish before it runs. If the\n * application is already booted, the callback runs on the next microtask —\n * so a late subscriber never silently misses the event.\n *\n * @example\n * Application.onceBooted(({ environment }) => {\n * log.info(\"app\", \"booted\", `ready in ${environment}`);\n * });\n */\n public static onceBooted(listener: BootListener): void {\n if (this.booted && this.bootContext) {\n const context = this.bootContext;\n void this.runBootListener(listener, context);\n\n return;\n }\n\n this.bootListeners.push(listener);\n }\n\n /**\n * Promise form of {@link onceBooted} — resolves with the boot context once\n * the application is booted, or immediately if it already is.\n */\n public static whenBooted(): Promise<BootContext> {\n if (this.booted && this.bootContext) {\n return Promise.resolve(this.bootContext);\n }\n\n return new Promise<BootContext>((resolve) => {\n this.onceBooted((context) => resolve(context));\n });\n }\n\n /**\n * Flip the boot latch and drain every queued listener. The dev server and\n * the production entry call this once, right after the late phase starts. It\n * is idempotent — a second call is a no-op, so a double-invoke can never\n * double-fire listeners.\n *\n * Also reports readiness to a supervising parent process — this is the one\n * moment in the lifecycle where \"the application is serving\" is true, so it\n * is the only honest source for `warlock start`'s success banner. Sent before\n * the listeners run: a slow or hanging `onceBooted` listener must not delay\n * the parent's view of a server that is already accepting requests.\n *\n * @internal Framework entry points call this; application code must not.\n */\n public static markBooted(context: BootContext): void {\n if (this.booted) {\n return;\n }\n\n this.booted = true;\n this.bootContext = context;\n\n sendBootSignal({\n type: \"warlock:ready\",\n version: BOOT_SIGNAL_VERSION,\n pid: process.pid,\n at: new Date().toISOString(),\n environment: context.environment,\n runtimeStrategy: context.runtimeStrategy,\n bootDurationMs: context.bootDurationMs,\n port: this.servedPort,\n roles: [...this.roles],\n });\n\n const listeners = this.bootListeners;\n this.bootListeners = [];\n\n for (const listener of listeners) {\n void this.runBootListener(listener, context);\n }\n }\n\n /**\n * Invoke a single boot listener, isolating its failure so neither boot nor\n * the remaining listeners are affected.\n */\n private static async runBootListener(\n listener: BootListener,\n context: BootContext,\n ): Promise<void> {\n try {\n await listener(context);\n } catch (error) {\n log.error(\"application\", \"booted-listener\", error as Error);\n }\n }\n\n /**\n * Register a startup validator — distinct from {@link onceBooted}. A\n * rejecting validator aborts boot instead of being caught and logged, so\n * this is where configuration that must fail closed belongs (a signing\n * secret, a required integration key), not `onceBooted`.\n *\n * Must be registered before the framework calls `runStartupValidators` —\n * typically at module scope in `src/app/main.ts`, the same place a\n * `BootListener` would be registered. Registering one after validation has\n * already run throws: by then a rejection could no longer stop the app\n * from serving, so running it late would silently defeat the guarantee\n * this hook exists to give.\n *\n * @example\n * Application.onValidateBoot(() => {\n * if (!env(\"JWT_SECRET\")) {\n * throw new Error(\n * \"JWT_SECRET is not set. Sessions cannot be signed without it. \" +\n * \"Generate one with `yarn jwt` and put it in .env.\",\n * );\n * }\n * });\n */\n public static onValidateBoot(validator: BootValidator): void {\n if (this.validated) {\n throw new Error(\n \"Application.onValidateBoot(): startup validators already ran — \" +\n \"this validator was registered too late to block boot. Register it \" +\n \"before the framework calls Application.runStartupValidators(), \" +\n \"typically at module scope in `src/app/main.ts`.\",\n );\n }\n\n this.bootValidators.push(validator);\n }\n\n /**\n * Run every registered startup validator, in registration order, and abort\n * on the first rejection. Idempotent — a second call is a no-op.\n *\n * Distinct from `runBootListener`: a listener's failure is isolated so it\n * can never break boot; a validator's failure IS the boot failing — that is\n * the entire point of registering one instead of the other. The thrown\n * error names the failing validator and the original cause, so whatever\n * catches it (the dev server's boot try/catch, the production entry's\n * top-level await) reports which check failed and why, not a bare\n * rejection.\n *\n * @internal Framework entry points call this once app code (main.ts et al)\n * has loaded and BEFORE late-phase connectors (http, socket) start, so a\n * failing validator runs before anything can bind a port or accept a\n * request. Application code must not call this directly.\n */\n public static async runStartupValidators(): Promise<void> {\n if (this.validated) {\n return;\n }\n\n this.validated = true;\n\n const validators = this.bootValidators;\n this.bootValidators = [];\n\n for (const validator of validators) {\n try {\n await validator();\n } catch (error) {\n const name = validator.name || \"<anonymous>\";\n const cause = error instanceof Error ? error.message : String(error);\n\n throw new ErrorWithCause(\n `Startup validator \"${name}\" rejected boot: ${cause}. ` +\n `Fix the condition it checks, or remove the validator if it no ` +\n `longer applies — boot cannot proceed while it fails.`,\n { cause: error },\n );\n }\n }\n }\n\n /**\n * Whether the application has begun shutting down. Once true, readiness\n * checks report not-ready so a load balancer drains this instance before the\n * HTTP server stops accepting requests.\n */\n public static get isShuttingDown(): boolean {\n return this.shuttingDown;\n }\n\n /**\n * Register a teardown callback, run once when the application shuts down —\n * before the connectors (db, cache, http) are torn down, so it can still use\n * them. The natural place to close an app-owned resource opened in\n * `onceBooted`. If shutdown has already begun, the callback runs immediately.\n *\n * @example\n * Application.onShutdown(async () => {\n * await myQueueConsumer.stop();\n * });\n */\n public static onShutdown(listener: ShutdownListener): void {\n if (this.shuttingDown) {\n void this.runShutdownListener(listener);\n\n return;\n }\n\n this.shutdownListeners.push(listener);\n }\n\n /**\n * Flip the shutdown latch and run every teardown callback. The connectors\n * manager calls this at the start of shutdown — before any connector is torn\n * down. Idempotent and error-isolated: each callback is awaited, a thrown one\n * is logged and does not stop the rest. Listeners run LIFO (reverse of\n * registration), mirroring resource-unwind order.\n *\n * @internal Framework entry points call this; application code must not.\n */\n public static async runShutdownHooks(): Promise<void> {\n if (this.shuttingDown) {\n return;\n }\n\n this.shuttingDown = true;\n\n const listeners = this.shutdownListeners.reverse();\n this.shutdownListeners = [];\n\n for (const listener of listeners) {\n await this.runShutdownListener(listener);\n }\n }\n\n /**\n * Invoke a single teardown callback, isolating its failure so the rest still\n * run and shutdown is never blocked by one bad hook.\n */\n private static async runShutdownListener(listener: ShutdownListener): Promise<void> {\n try {\n await listener();\n } catch (error) {\n log.error(\"application\", \"shutdown-listener\", error as Error);\n }\n }\n\n /**\n * Get project uptime in milliseconds\n */\n public static get uptime(): number {\n return process.uptime() * 1000;\n }\n\n /**\n * Get the current environment\n */\n public static get environment(): Environment {\n return environment();\n }\n\n /**\n * Set the current environment\n */\n public static setEnvironment(env: Environment) {\n setEnvironment(env);\n }\n\n /**\n * Check if the application is running in production environment\n */\n public static get isProduction(): boolean {\n return this.environment === \"production\";\n }\n\n /**\n * Check if the application is running in development environment\n */\n public static get isDevelopment(): boolean {\n return this.environment === \"development\";\n }\n\n /**\n * Check if the application is running in test environment\n */\n public static get isTest(): boolean {\n return this.environment === \"test\";\n }\n\n /**\n * The roles this process serves — `WARLOCK_ROLES`, resolved once at\n * bootstrap. Every role is on when the variable is absent (plain `warlock\n * start`, `warlock dev`, and tests).\n */\n public static get roles(): ReadonlySet<AppRole> {\n return getRoles();\n }\n\n /**\n * The site keys this process installs pages for — `WARLOCK_SITES`,\n * resolved once at bootstrap. `undefined` means every site.\n */\n public static get sites(): ReadonlySet<string> | undefined {\n return getSites();\n }\n\n /**\n * Whether this process serves the given role.\n *\n * @example\n * if (Application.hasRole(\"worker\")) {\n * scheduler.start();\n * }\n */\n public static hasRole(role: AppRole): boolean {\n return hasRole(role);\n }\n\n /**\n * Get the root path\n */\n public static get rootPath(): string {\n return rootPath();\n }\n\n /**\n * Get the src path\n */\n public static get srcPath(): string {\n return srcPath();\n }\n\n /**\n * Get the app path\n */\n public static get appPath(): string {\n return appPath();\n }\n\n /**\n * Get the storage path\n */\n public static get storagePath(): string {\n return storagePath();\n }\n\n /**\n * Get the uploads path\n */\n public static get uploadsPath(): string {\n return uploadsPath();\n }\n\n /**\n * Get the public path\n */\n public static get publicPath(): string {\n return publicPath();\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Environment, RuntimeStrategy } from "../utils/environment.mjs";
2
2
 
3
- //#region ../core/src/application/boot-signal.d.ts
3
+ //#region ../../packages/core/src/application/boot-signal.d.ts
4
4
  /**
5
5
  * The only message type the boot channel carries today. Named rather than
6
6
  * inlined because both the sender (`sendBootSignal`) and the receiver
@@ -1 +1 @@
1
- {"version":3,"file":"boot-signal.d.mts","names":[],"sources":["../../../../../../../core/src/application/boot-signal.ts"],"mappings":";;;;;AAOA;;;KAAY,cAAA;AAAc;AAS1B;;;;AAAgC;AAUhC;AAnB0B,cASb,mBAAA;;;;;;;;;KAUD,UAAA;EACV,IAAA,EAAM,cAAA;EACN,OAAA,UAKA;EAHA,GAAA,UAIA;EAFA,EAAA;EACA,WAAA,EAAa,WAAA;EACb,eAAA,EAAiB,eAAA;EACjB,cAAA,WAIK;EAFL,IAAA,WAcW;EAZX,KAAA;AAAA;;AAY8B;AAoBhC;;;;AAAiD;AA4BjD;;cAhDa,mBAAA;;;;;;AAgDwD;;;;;;;;;;;;;iBA5BrD,cAAA,CAAe,MAAkB,EAAV,UAAU;;;;;;;;;;iBA4BjC,YAAA,CAAa,OAAA,YAAmB,OAAA,IAAW,UAAU"}
1
+ {"version":3,"file":"boot-signal.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/application/boot-signal.ts"],"mappings":";;;;;AAOA;;;KAAY,cAAA;AAAc;AAS1B;;;;AAAgC;AAUhC;AAnB0B,cASb,mBAAA;;;;;;;;;KAUD,UAAA;EACV,IAAA,EAAM,cAAA;EACN,OAAA,UAKA;EAHA,GAAA,UAIA;EAFA,EAAA;EACA,WAAA,EAAa,WAAA;EACb,eAAA,EAAiB,eAAA;EACjB,cAAA,WAIK;EAFL,IAAA,WAcW;EAZX,KAAA;AAAA;;AAY8B;AAoBhC;;;;AAAiD;AA4BjD;;cAhDa,mBAAA;;;;;;AAgDwD;;;;;;;;;;;;;iBA5BrD,cAAA,CAAe,MAAkB,EAAV,UAAU;;;;;;;;;;iBA4BjC,YAAA,CAAa,OAAA,YAAmB,OAAA,IAAW,UAAU"}
@@ -1,4 +1,4 @@
1
- //#region ../core/src/application/boot-signal.ts
1
+ //#region ../../packages/core/src/application/boot-signal.ts
2
2
  /**
3
3
  * Schema version of {@link BootSignal}.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"boot-signal.mjs","names":[],"sources":["../../../../../../../core/src/application/boot-signal.ts"],"sourcesContent":["import type { Environment, RuntimeStrategy } from \"../utils/environment\";\n\n/**\n * The only message type the boot channel carries today. Named rather than\n * inlined because both the sender (`sendBootSignal`) and the receiver\n * (`warlock start`) must agree on the exact literal.\n */\nexport type BootSignalType = \"warlock:ready\";\n\n/**\n * Schema version of {@link BootSignal}.\n *\n * Present from the first release on purpose: a version field cannot be added to\n * a shipped wire format without a flag day, and this one has to be able to\n * evolve while older CLIs are still supervising newer bundles.\n */\nexport const BOOT_SIGNAL_VERSION = 1;\n\n/**\n * What a booted child process tells its supervising parent over the IPC\n * channel `warlock start` opens for it.\n *\n * This is a wire contract, not an internal detail: `warlock start` prints its\n * success banner **only** when this arrives, so anything watching that banner\n * (a CI gate, a process supervisor) transitively depends on it.\n */\nexport type BootSignal = {\n type: BootSignalType;\n version: number;\n /** The application process, so a supervisor can address it directly. */\n pid: number;\n /** When the boot completed, ISO-8601. */\n at: string;\n environment: Environment;\n runtimeStrategy: RuntimeStrategy;\n bootDurationMs?: number;\n /** The bound http port, absent for an app with no http connector. */\n port?: number;\n /** The roles this process serves — see `Application.roles`. */\n roles: string[];\n};\n\n/**\n * Environment flag `warlock start` sets on the process it supervises.\n *\n * An IPC channel alone is NOT proof that the parent speaks this protocol —\n * pm2, a vitest worker fork, and any custom supervisor all hand their child a\n * channel they use for their own messages. Writing to one of those, and then\n * closing it, corrupts someone else's protocol and can kill the process. The\n * flag is the handshake: only a parent that set it gets signalled.\n */\nexport const BOOT_SIGNAL_ENV_KEY = \"WARLOCK_BOOT_SIGNAL\";\n\n/**\n * Report a completed boot to the parent process, if one is supervising.\n *\n * Two conditions must both hold: the process was spawned with an `ipc` stdio\n * channel (`process.send` exists), and the parent identified itself with\n * {@link BOOT_SIGNAL_ENV_KEY}. A bundle run directly (`node app.mjs`, a Docker\n * `CMD`) or under a foreign supervisor is a no-op, so the signal never changes\n * how a standalone process behaves and never touches a channel we don't own.\n *\n * The channel is closed as soon as the message is flushed. An open IPC channel\n * holds a `ref` on the child's event loop, which would keep a finished or\n * wedged process alive and indistinguishable from a healthy server — the exact\n * confusion this signal exists to remove. One message, then disconnect.\n *\n * Failure to send is deliberately swallowed: the parent may have already\n * detached or died, and a supervisor going away must never take down a\n * healthy application.\n */\nexport function sendBootSignal(signal: BootSignal): void {\n if (typeof process.send !== \"function\" || process.env[BOOT_SIGNAL_ENV_KEY] !== \"1\") {\n return;\n }\n\n // Consumed here so it cannot be inherited by anything this app itself spawns\n // and make a grandchild report readiness on a channel meant for someone else.\n delete process.env[BOOT_SIGNAL_ENV_KEY];\n\n try {\n process.send(signal, undefined, undefined, () => {\n process.disconnect?.();\n });\n } catch {\n // The channel closed between the check and the write — the app is up\n // regardless, and there is no longer anyone to tell.\n }\n}\n\n/**\n * Narrow an arbitrary IPC payload to a {@link BootSignal}.\n *\n * The parent receives whatever the child chooses to send, so the message is\n * untrusted input and is validated before it is allowed to flip the parent's\n * \"the server is up\" state. A *newer* version than this CLI knows is still\n * accepted — readiness is readiness, and refusing it would make an old\n * supervisor report a healthy app as failed.\n */\nexport function isBootSignal(message: unknown): message is BootSignal {\n if (typeof message !== \"object\" || message === null) {\n return false;\n }\n\n const candidate = message as { type?: unknown; version?: unknown };\n\n return candidate.type === \"warlock:ready\" && typeof candidate.version === \"number\";\n}\n"],"mappings":";;;;;;;;AAgBA,MAAa,sBAAsB;;;;;;;;;;AAmCnC,MAAa,sBAAsB;;;;;;;;;;;;;;;;;;;AAoBnC,SAAgB,eAAe,QAA0B;CACvD,IAAI,OAAO,QAAQ,SAAS,cAAc,QAAQ,+BAA6B,KAC7E;CAKF,OAAO,QAAQ,IAAI;CAEnB,IAAI;EACF,QAAQ,KAAK,QAAQ,QAAW,cAAiB;GAC/C,QAAQ,aAAa;EACvB,CAAC;CACH,QAAQ,CAGR;AACF;;;;;;;;;;AAWA,SAAgB,aAAa,SAAyC;CACpE,IAAI,OAAO,YAAY,YAAY,YAAY,MAC7C,OAAO;CAGT,MAAM,YAAY;CAElB,OAAO,UAAU,SAAS,mBAAmB,OAAO,UAAU,YAAY;AAC5E"}
1
+ {"version":3,"file":"boot-signal.mjs","names":[],"sources":["../../../../../../../../packages/core/src/application/boot-signal.ts"],"sourcesContent":["import type { Environment, RuntimeStrategy } from \"../utils/environment\";\n\n/**\n * The only message type the boot channel carries today. Named rather than\n * inlined because both the sender (`sendBootSignal`) and the receiver\n * (`warlock start`) must agree on the exact literal.\n */\nexport type BootSignalType = \"warlock:ready\";\n\n/**\n * Schema version of {@link BootSignal}.\n *\n * Present from the first release on purpose: a version field cannot be added to\n * a shipped wire format without a flag day, and this one has to be able to\n * evolve while older CLIs are still supervising newer bundles.\n */\nexport const BOOT_SIGNAL_VERSION = 1;\n\n/**\n * What a booted child process tells its supervising parent over the IPC\n * channel `warlock start` opens for it.\n *\n * This is a wire contract, not an internal detail: `warlock start` prints its\n * success banner **only** when this arrives, so anything watching that banner\n * (a CI gate, a process supervisor) transitively depends on it.\n */\nexport type BootSignal = {\n type: BootSignalType;\n version: number;\n /** The application process, so a supervisor can address it directly. */\n pid: number;\n /** When the boot completed, ISO-8601. */\n at: string;\n environment: Environment;\n runtimeStrategy: RuntimeStrategy;\n bootDurationMs?: number;\n /** The bound http port, absent for an app with no http connector. */\n port?: number;\n /** The roles this process serves — see `Application.roles`. */\n roles: string[];\n};\n\n/**\n * Environment flag `warlock start` sets on the process it supervises.\n *\n * An IPC channel alone is NOT proof that the parent speaks this protocol —\n * pm2, a vitest worker fork, and any custom supervisor all hand their child a\n * channel they use for their own messages. Writing to one of those, and then\n * closing it, corrupts someone else's protocol and can kill the process. The\n * flag is the handshake: only a parent that set it gets signalled.\n */\nexport const BOOT_SIGNAL_ENV_KEY = \"WARLOCK_BOOT_SIGNAL\";\n\n/**\n * Report a completed boot to the parent process, if one is supervising.\n *\n * Two conditions must both hold: the process was spawned with an `ipc` stdio\n * channel (`process.send` exists), and the parent identified itself with\n * {@link BOOT_SIGNAL_ENV_KEY}. A bundle run directly (`node app.mjs`, a Docker\n * `CMD`) or under a foreign supervisor is a no-op, so the signal never changes\n * how a standalone process behaves and never touches a channel we don't own.\n *\n * The channel is closed as soon as the message is flushed. An open IPC channel\n * holds a `ref` on the child's event loop, which would keep a finished or\n * wedged process alive and indistinguishable from a healthy server — the exact\n * confusion this signal exists to remove. One message, then disconnect.\n *\n * Failure to send is deliberately swallowed: the parent may have already\n * detached or died, and a supervisor going away must never take down a\n * healthy application.\n */\nexport function sendBootSignal(signal: BootSignal): void {\n if (typeof process.send !== \"function\" || process.env[BOOT_SIGNAL_ENV_KEY] !== \"1\") {\n return;\n }\n\n // Consumed here so it cannot be inherited by anything this app itself spawns\n // and make a grandchild report readiness on a channel meant for someone else.\n delete process.env[BOOT_SIGNAL_ENV_KEY];\n\n try {\n process.send(signal, undefined, undefined, () => {\n process.disconnect?.();\n });\n } catch {\n // The channel closed between the check and the write — the app is up\n // regardless, and there is no longer anyone to tell.\n }\n}\n\n/**\n * Narrow an arbitrary IPC payload to a {@link BootSignal}.\n *\n * The parent receives whatever the child chooses to send, so the message is\n * untrusted input and is validated before it is allowed to flip the parent's\n * \"the server is up\" state. A *newer* version than this CLI knows is still\n * accepted — readiness is readiness, and refusing it would make an old\n * supervisor report a healthy app as failed.\n */\nexport function isBootSignal(message: unknown): message is BootSignal {\n if (typeof message !== \"object\" || message === null) {\n return false;\n }\n\n const candidate = message as { type?: unknown; version?: unknown };\n\n return candidate.type === \"warlock:ready\" && typeof candidate.version === \"number\";\n}\n"],"mappings":";;;;;;;;AAgBA,MAAa,sBAAsB;;;;;;;;;;AAmCnC,MAAa,sBAAsB;;;;;;;;;;;;;;;;;;;AAoBnC,SAAgB,eAAe,QAA0B;CACvD,IAAI,OAAO,QAAQ,SAAS,cAAc,QAAQ,+BAA6B,KAC7E;CAKF,OAAO,QAAQ,IAAI;CAEnB,IAAI;EACF,QAAQ,KAAK,QAAQ,QAAW,cAAiB;GAC/C,QAAQ,aAAa;EACvB,CAAC;CACH,QAAQ,CAGR;AACF;;;;;;;;;;AAWA,SAAgB,aAAa,SAAyC;CACpE,IAAI,OAAO,YAAY,YAAY,YAAY,MAC7C,OAAO;CAGT,MAAM,YAAY;CAElB,OAAO,UAAU,SAAS,mBAAmB,OAAO,UAAU,YAAY;AAC5E"}
@@ -1,4 +1,4 @@
1
- //#region ../core/src/application/public-url.d.ts
1
+ //#region ../../packages/core/src/application/public-url.d.ts
2
2
  /**
3
3
  * The application's public origin — the ONE absolute-URL source every
4
4
  * consumer that needs one (the sitemap route, canonical links, OG tags,
@@ -1 +1 @@
1
- {"version":3,"file":"public-url.d.mts","names":[],"sources":["../../../../../../../core/src/application/public-url.ts"],"mappings":";;AAiBA;;;;AAA4B;;;;;;;;;;iBAAZ,YAAA"}
1
+ {"version":3,"file":"public-url.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/application/public-url.ts"],"mappings":";;AAiBA;;;;AAA4B;;;;;;;;;;iBAAZ,YAAA"}
@@ -1,7 +1,7 @@
1
1
  import { config } from "../config/config-getter.mjs";
2
2
  import "../config/index.mjs";
3
3
 
4
- //#region ../core/src/application/public-url.ts
4
+ //#region ../../packages/core/src/application/public-url.ts
5
5
  /**
6
6
  * The application's public origin — the ONE absolute-URL source every
7
7
  * consumer that needs one (the sitemap route, canonical links, OG tags,
@@ -1 +1 @@
1
- {"version":3,"file":"public-url.mjs","names":[],"sources":["../../../../../../../core/src/application/public-url.ts"],"sourcesContent":["import { config } from \"../config\";\n\n/**\n * The application's public origin — the ONE absolute-URL source every\n * consumer that needs one (the sitemap route, canonical links, OG tags,\n * absolute URLs in mail) reads instead of each keeping its own copy.\n *\n * `app.publicUrl` wins over the `PUBLIC_APP_URL` env fallback. Deliberately\n * does not fall back further to a request-derived origin: a sitemap (or any\n * other absolute URL) served from the wrong host is worse than a boot that\n * refuses to start, because nothing downstream ever tells you it was wrong.\n *\n * Optional in general — most apps have no consumer that needs it yet.\n * Returns `undefined` rather than throwing; a consumer that requires the\n * value (e.g. the sitemap route, at boot) is responsible for failing loudly\n * itself, naming both `app.publicUrl` and `PUBLIC_APP_URL`.\n */\nexport function getPublicUrl(): string | undefined {\n return config.key<string | undefined>(\"app.publicUrl\") || process.env.PUBLIC_APP_URL || undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiBA,SAAgB,eAAmC;CACjD,OAAO,OAAO,IAAwB,eAAe,KAAK,QAAQ,IAAI,kBAAkB;AAC1F"}
1
+ {"version":3,"file":"public-url.mjs","names":[],"sources":["../../../../../../../../packages/core/src/application/public-url.ts"],"sourcesContent":["import { config } from \"../config\";\n\n/**\n * The application's public origin — the ONE absolute-URL source every\n * consumer that needs one (the sitemap route, canonical links, OG tags,\n * absolute URLs in mail) reads instead of each keeping its own copy.\n *\n * `app.publicUrl` wins over the `PUBLIC_APP_URL` env fallback. Deliberately\n * does not fall back further to a request-derived origin: a sitemap (or any\n * other absolute URL) served from the wrong host is worse than a boot that\n * refuses to start, because nothing downstream ever tells you it was wrong.\n *\n * Optional in general — most apps have no consumer that needs it yet.\n * Returns `undefined` rather than throwing; a consumer that requires the\n * value (e.g. the sitemap route, at boot) is responsible for failing loudly\n * itself, naming both `app.publicUrl` and `PUBLIC_APP_URL`.\n */\nexport function getPublicUrl(): string | undefined {\n return config.key<string | undefined>(\"app.publicUrl\") || process.env.PUBLIC_APP_URL || undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiBA,SAAgB,eAAmC;CACjD,OAAO,OAAO,IAAwB,eAAe,KAAK,QAAQ,IAAI,kBAAkB;AAC1F"}
@@ -1,4 +1,4 @@
1
- //#region ../core/src/application/roles.d.ts
1
+ //#region ../../packages/core/src/application/roles.d.ts
2
2
  /**
3
3
  * The three ways a process booted from the same build can serve traffic.
4
4
  * `api` and `web` both bind the http port (§`servesHttp`); `worker` never
@@ -1 +1 @@
1
- {"version":3,"file":"roles.d.mts","names":[],"sources":["../../../../../../../core/src/application/roles.ts"],"mappings":";;AAKA;;;;cAAa,SAAA;AAMb;;;;AAAA,KAAY,OAAA,WAAkB,SAAS;AAcvC;;;;;;;;AAA0E;AAiC1E;AAjCA,iBAAgB,UAAA,CAAW,KAAA,uBAA4B,WAAW,CAAC,OAAA;;;AAiCD;AAuBlE;;;;;;;iBAvBgB,UAAA,CAAW,KAAA,uBAA4B,WAAW;;;;;;;iBAuBlD,yBAAA,CACd,KAAA,EAAO,WAAA,CAAY,OAAA,GACnB,KAAA,EAAO,WAAA;AA0CT;;;AAAA,iBAAgB,QAAA,IAAY,WAAW,CAAC,OAAA;AAAO;AAQ/C;;;AAR+C,iBAQ/B,QAAA,IAAY,WAAW;AAAA;AAOvC;;AAPuC,iBAOvB,OAAA,CAAQ,IAAa,EAAP,OAAO;;AAAA;AAUrC;;;;iBAAgB,UAAA;AAahB;;;;AAAuC;;;AAAvC,iBAAgB,uBAAA"}
1
+ {"version":3,"file":"roles.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/application/roles.ts"],"mappings":";;AAKA;;;;cAAa,SAAA;AAMb;;;;AAAA,KAAY,OAAA,WAAkB,SAAS;AAcvC;;;;;;;;AAA0E;AAiC1E;AAjCA,iBAAgB,UAAA,CAAW,KAAA,uBAA4B,WAAW,CAAC,OAAA;;;AAiCD;AAuBlE;;;;;;;iBAvBgB,UAAA,CAAW,KAAA,uBAA4B,WAAW;;;;;;;iBAuBlD,yBAAA,CACd,KAAA,EAAO,WAAA,CAAY,OAAA,GACnB,KAAA,EAAO,WAAA;AA0CT;;;AAAA,iBAAgB,QAAA,IAAY,WAAW,CAAC,OAAA;AAAO;AAQ/C;;;AAR+C,iBAQ/B,QAAA,IAAY,WAAW;AAAA;AAOvC;;AAPuC,iBAOvB,OAAA,CAAQ,IAAa,EAAP,OAAO;;AAAA;AAUrC;;;;iBAAgB,UAAA;AAahB;;;;AAAuC;;;AAAvC,iBAAgB,uBAAA"}
@@ -1,4 +1,4 @@
1
- //#region ../core/src/application/roles.ts
1
+ //#region ../../packages/core/src/application/roles.ts
2
2
  /**
3
3
  * The three ways a process booted from the same build can serve traffic.
4
4
  * `api` and `web` both bind the http port (§`servesHttp`); `worker` never
@@ -1 +1 @@
1
- {"version":3,"file":"roles.mjs","names":[],"sources":["../../../../../../../core/src/application/roles.ts"],"sourcesContent":["/**\n * The three ways a process booted from the same build can serve traffic.\n * `api` and `web` both bind the http port (§`servesHttp`); `worker` never\n * does — it exists to run queue workers, the scheduler and `worker.ts`.\n */\nexport const APP_ROLES = [\"api\", \"web\", \"worker\"] as const;\n\n/**\n * One of {@link APP_ROLES}. What `Application.hasRole` checks and what\n * `warlock start --role` accepts, comma-separated.\n */\nexport type AppRole = (typeof APP_ROLES)[number];\n\nconst VALID_ROLES_LIST = APP_ROLES.join(\", \");\n\n/**\n * Parse a `--role` / `WARLOCK_ROLES` value into the set of roles a process\n * should serve.\n *\n * `undefined` (the flag/variable absent) means \"every role\" — the same\n * behaviour `warlock start` and `warlock dev` had before roles existed, so a\n * plain `start` or a test run is unaffected. An explicit but empty list, or\n * an entry that is not one of {@link APP_ROLES}, throws rather than silently\n * falling back to \"every role\", since that would mask a typo as full traffic.\n */\nexport function parseRoles(value: string | undefined): ReadonlySet<AppRole> {\n if (value === undefined) {\n return new Set(APP_ROLES);\n }\n\n const entries = value\n .split(\",\")\n .map((entry) => entry.trim().toLowerCase())\n .filter((entry) => entry.length > 0);\n\n if (entries.length === 0) {\n throw new Error(`--role received an empty list. Valid roles: ${VALID_ROLES_LIST}.`);\n }\n\n for (const entry of entries) {\n if (!(APP_ROLES as readonly string[]).includes(entry)) {\n throw new Error(`Unknown role \"${entry}\". Valid roles: ${VALID_ROLES_LIST}.`);\n }\n }\n\n return new Set(entries as AppRole[]);\n}\n\n/**\n * Parse a `--sites` / `WARLOCK_SITES` value into the set of site keys a\n * `web` process should install pages for.\n *\n * `undefined` means \"every site\" (the default, unfiltered behaviour). An\n * explicit but empty list throws rather than silently meaning \"every site\"\n * or \"no site\" — both would be surprising for a flag that was actually\n * passed. Cross-checking against the active roles and against `web.sites`\n * config happens where both are known, not here.\n */\nexport function parseSites(value: string | undefined): ReadonlySet<string> | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const entries = value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n\n if (entries.length === 0) {\n throw new Error(\"--sites received an empty list.\");\n }\n\n return new Set(entries);\n}\n\n/**\n * `--sites` only makes sense alongside the `web` role — an `api`- or\n * `worker`-only process never installs pages, so a sites filter on it could\n * never do anything, and staying silent about that would hide a\n * misconfigured deploy.\n */\nexport function assertSitesRequireWebRole(\n roles: ReadonlySet<AppRole>,\n sites: ReadonlySet<string> | undefined,\n): void {\n if (sites !== undefined && !roles.has(\"web\")) {\n throw new Error(\"--sites only applies to the web role\");\n }\n}\n\nlet cachedRoles: ReadonlySet<AppRole> | undefined;\nlet cachedSites: ReadonlySet<string> | undefined;\nlet sitesResolved = false;\n\n/**\n * The roles this process serves, resolved from `WARLOCK_ROLES` once and\n * cached for the life of the process — the env var is bootstrap input, not\n * something that can meaningfully change mid-run.\n */\nfunction resolveRoles(): ReadonlySet<AppRole> {\n if (!cachedRoles) {\n cachedRoles = parseRoles(process.env.WARLOCK_ROLES);\n }\n\n return cachedRoles;\n}\n\n/**\n * The sites this process installs pages for, resolved from `WARLOCK_SITES`\n * once and cached alongside {@link resolveRoles}. `undefined` means every\n * site.\n */\nfunction resolveSites(): ReadonlySet<string> | undefined {\n if (!sitesResolved) {\n cachedSites = parseSites(process.env.WARLOCK_SITES);\n assertSitesRequireWebRole(resolveRoles(), cachedSites);\n sitesResolved = true;\n }\n\n return cachedSites;\n}\n\n/**\n * The roles this process serves. See {@link resolveRoles}.\n */\nexport function getRoles(): ReadonlySet<AppRole> {\n return resolveRoles();\n}\n\n/**\n * The sites this process installs pages for, or `undefined` for every site.\n * See {@link resolveSites}.\n */\nexport function getSites(): ReadonlySet<string> | undefined {\n return resolveSites();\n}\n\n/**\n * Whether this process serves the given role.\n */\nexport function hasRole(role: AppRole): boolean {\n return resolveRoles().has(role);\n}\n\n/**\n * Whether this process should bind the http port — true when it serves\n * `api` or `web`, false for a `worker`-only process. Shared by the http\n * connector (skips `listen()`) and the production port preflight (skips the\n * probe), so both agree on the same condition.\n */\nexport function servesHttp(): boolean {\n const roles = resolveRoles();\n\n return roles.has(\"api\") || roles.has(\"web\");\n}\n\n/**\n * Drop the cached roles/sites so the next call to {@link getRoles} /\n * {@link getSites} re-reads `process.env`.\n *\n * @internal Test-only — production code resolves once per process on\n * purpose (see {@link resolveRoles}).\n */\nexport function resetRolesCacheForTests(): void {\n cachedRoles = undefined;\n cachedSites = undefined;\n sitesResolved = false;\n}\n"],"mappings":";;;;;;AAKA,MAAa,YAAY;CAAC;CAAO;CAAO;AAAQ;AAQhD,MAAM,mBAAmB,UAAU,KAAK,IAAI;;;;;;;;;;;AAY5C,SAAgB,WAAW,OAAiD;CAC1E,IAAI,UAAU,QACZ,OAAO,IAAI,IAAI,SAAS;CAG1B,MAAM,UAAU,MACb,MAAM,GAAG,CAAC,CACV,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAC1C,QAAQ,UAAU,MAAM,SAAS,CAAC;CAErC,IAAI,QAAQ,WAAW,GACrB,MAAM,IAAI,MAAM,+CAA+C,iBAAiB,EAAE;CAGpF,KAAK,MAAM,SAAS,SAClB,IAAI,CAAE,UAAgC,SAAS,KAAK,GAClD,MAAM,IAAI,MAAM,iBAAiB,MAAM,kBAAkB,iBAAiB,EAAE;CAIhF,OAAO,IAAI,IAAI,OAAoB;AACrC;;;;;;;;;;;AAYA,SAAgB,WAAW,OAA4D;CACrF,IAAI,UAAU,QACZ;CAGF,MAAM,UAAU,MACb,MAAM,GAAG,CAAC,CACV,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,CAC5B,QAAQ,UAAU,MAAM,SAAS,CAAC;CAErC,IAAI,QAAQ,WAAW,GACrB,MAAM,IAAI,MAAM,iCAAiC;CAGnD,OAAO,IAAI,IAAI,OAAO;AACxB;;;;;;;AAQA,SAAgB,0BACd,OACA,OACM;CACN,IAAI,UAAU,UAAa,CAAC,MAAM,IAAI,KAAK,GACzC,MAAM,IAAI,MAAM,sCAAsC;AAE1D;AAEA,IAAI;AACJ,IAAI;AACJ,IAAI,gBAAgB;;;;;;AAOpB,SAAS,eAAqC;CAC5C,IAAI,CAAC,aACH,cAAc,WAAW,QAAQ,IAAI,aAAa;CAGpD,OAAO;AACT;;;;;;AAOA,SAAS,eAAgD;CACvD,IAAI,CAAC,eAAe;EAClB,cAAc,WAAW,QAAQ,IAAI,aAAa;EAClD,0BAA0B,aAAa,GAAG,WAAW;EACrD,gBAAgB;CAClB;CAEA,OAAO;AACT;;;;AAKA,SAAgB,WAAiC;CAC/C,OAAO,aAAa;AACtB;;;;;AAMA,SAAgB,WAA4C;CAC1D,OAAO,aAAa;AACtB;;;;AAKA,SAAgB,QAAQ,MAAwB;CAC9C,OAAO,aAAa,CAAC,CAAC,IAAI,IAAI;AAChC;;;;;;;AAQA,SAAgB,aAAsB;CACpC,MAAM,QAAQ,aAAa;CAE3B,OAAO,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK;AAC5C;;;;;;;;AASA,SAAgB,0BAAgC;CAC9C,cAAc;CACd,cAAc;CACd,gBAAgB;AAClB"}
1
+ {"version":3,"file":"roles.mjs","names":[],"sources":["../../../../../../../../packages/core/src/application/roles.ts"],"sourcesContent":["/**\n * The three ways a process booted from the same build can serve traffic.\n * `api` and `web` both bind the http port (§`servesHttp`); `worker` never\n * does — it exists to run queue workers, the scheduler and `worker.ts`.\n */\nexport const APP_ROLES = [\"api\", \"web\", \"worker\"] as const;\n\n/**\n * One of {@link APP_ROLES}. What `Application.hasRole` checks and what\n * `warlock start --role` accepts, comma-separated.\n */\nexport type AppRole = (typeof APP_ROLES)[number];\n\nconst VALID_ROLES_LIST = APP_ROLES.join(\", \");\n\n/**\n * Parse a `--role` / `WARLOCK_ROLES` value into the set of roles a process\n * should serve.\n *\n * `undefined` (the flag/variable absent) means \"every role\" — the same\n * behaviour `warlock start` and `warlock dev` had before roles existed, so a\n * plain `start` or a test run is unaffected. An explicit but empty list, or\n * an entry that is not one of {@link APP_ROLES}, throws rather than silently\n * falling back to \"every role\", since that would mask a typo as full traffic.\n */\nexport function parseRoles(value: string | undefined): ReadonlySet<AppRole> {\n if (value === undefined) {\n return new Set(APP_ROLES);\n }\n\n const entries = value\n .split(\",\")\n .map((entry) => entry.trim().toLowerCase())\n .filter((entry) => entry.length > 0);\n\n if (entries.length === 0) {\n throw new Error(`--role received an empty list. Valid roles: ${VALID_ROLES_LIST}.`);\n }\n\n for (const entry of entries) {\n if (!(APP_ROLES as readonly string[]).includes(entry)) {\n throw new Error(`Unknown role \"${entry}\". Valid roles: ${VALID_ROLES_LIST}.`);\n }\n }\n\n return new Set(entries as AppRole[]);\n}\n\n/**\n * Parse a `--sites` / `WARLOCK_SITES` value into the set of site keys a\n * `web` process should install pages for.\n *\n * `undefined` means \"every site\" (the default, unfiltered behaviour). An\n * explicit but empty list throws rather than silently meaning \"every site\"\n * or \"no site\" — both would be surprising for a flag that was actually\n * passed. Cross-checking against the active roles and against `web.sites`\n * config happens where both are known, not here.\n */\nexport function parseSites(value: string | undefined): ReadonlySet<string> | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const entries = value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n\n if (entries.length === 0) {\n throw new Error(\"--sites received an empty list.\");\n }\n\n return new Set(entries);\n}\n\n/**\n * `--sites` only makes sense alongside the `web` role — an `api`- or\n * `worker`-only process never installs pages, so a sites filter on it could\n * never do anything, and staying silent about that would hide a\n * misconfigured deploy.\n */\nexport function assertSitesRequireWebRole(\n roles: ReadonlySet<AppRole>,\n sites: ReadonlySet<string> | undefined,\n): void {\n if (sites !== undefined && !roles.has(\"web\")) {\n throw new Error(\"--sites only applies to the web role\");\n }\n}\n\nlet cachedRoles: ReadonlySet<AppRole> | undefined;\nlet cachedSites: ReadonlySet<string> | undefined;\nlet sitesResolved = false;\n\n/**\n * The roles this process serves, resolved from `WARLOCK_ROLES` once and\n * cached for the life of the process — the env var is bootstrap input, not\n * something that can meaningfully change mid-run.\n */\nfunction resolveRoles(): ReadonlySet<AppRole> {\n if (!cachedRoles) {\n cachedRoles = parseRoles(process.env.WARLOCK_ROLES);\n }\n\n return cachedRoles;\n}\n\n/**\n * The sites this process installs pages for, resolved from `WARLOCK_SITES`\n * once and cached alongside {@link resolveRoles}. `undefined` means every\n * site.\n */\nfunction resolveSites(): ReadonlySet<string> | undefined {\n if (!sitesResolved) {\n cachedSites = parseSites(process.env.WARLOCK_SITES);\n assertSitesRequireWebRole(resolveRoles(), cachedSites);\n sitesResolved = true;\n }\n\n return cachedSites;\n}\n\n/**\n * The roles this process serves. See {@link resolveRoles}.\n */\nexport function getRoles(): ReadonlySet<AppRole> {\n return resolveRoles();\n}\n\n/**\n * The sites this process installs pages for, or `undefined` for every site.\n * See {@link resolveSites}.\n */\nexport function getSites(): ReadonlySet<string> | undefined {\n return resolveSites();\n}\n\n/**\n * Whether this process serves the given role.\n */\nexport function hasRole(role: AppRole): boolean {\n return resolveRoles().has(role);\n}\n\n/**\n * Whether this process should bind the http port — true when it serves\n * `api` or `web`, false for a `worker`-only process. Shared by the http\n * connector (skips `listen()`) and the production port preflight (skips the\n * probe), so both agree on the same condition.\n */\nexport function servesHttp(): boolean {\n const roles = resolveRoles();\n\n return roles.has(\"api\") || roles.has(\"web\");\n}\n\n/**\n * Drop the cached roles/sites so the next call to {@link getRoles} /\n * {@link getSites} re-reads `process.env`.\n *\n * @internal Test-only — production code resolves once per process on\n * purpose (see {@link resolveRoles}).\n */\nexport function resetRolesCacheForTests(): void {\n cachedRoles = undefined;\n cachedSites = undefined;\n sitesResolved = false;\n}\n"],"mappings":";;;;;;AAKA,MAAa,YAAY;CAAC;CAAO;CAAO;AAAQ;AAQhD,MAAM,mBAAmB,UAAU,KAAK,IAAI;;;;;;;;;;;AAY5C,SAAgB,WAAW,OAAiD;CAC1E,IAAI,UAAU,QACZ,OAAO,IAAI,IAAI,SAAS;CAG1B,MAAM,UAAU,MACb,MAAM,GAAG,CAAC,CACV,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAC1C,QAAQ,UAAU,MAAM,SAAS,CAAC;CAErC,IAAI,QAAQ,WAAW,GACrB,MAAM,IAAI,MAAM,+CAA+C,iBAAiB,EAAE;CAGpF,KAAK,MAAM,SAAS,SAClB,IAAI,CAAE,UAAgC,SAAS,KAAK,GAClD,MAAM,IAAI,MAAM,iBAAiB,MAAM,kBAAkB,iBAAiB,EAAE;CAIhF,OAAO,IAAI,IAAI,OAAoB;AACrC;;;;;;;;;;;AAYA,SAAgB,WAAW,OAA4D;CACrF,IAAI,UAAU,QACZ;CAGF,MAAM,UAAU,MACb,MAAM,GAAG,CAAC,CACV,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,CAC5B,QAAQ,UAAU,MAAM,SAAS,CAAC;CAErC,IAAI,QAAQ,WAAW,GACrB,MAAM,IAAI,MAAM,iCAAiC;CAGnD,OAAO,IAAI,IAAI,OAAO;AACxB;;;;;;;AAQA,SAAgB,0BACd,OACA,OACM;CACN,IAAI,UAAU,UAAa,CAAC,MAAM,IAAI,KAAK,GACzC,MAAM,IAAI,MAAM,sCAAsC;AAE1D;AAEA,IAAI;AACJ,IAAI;AACJ,IAAI,gBAAgB;;;;;;AAOpB,SAAS,eAAqC;CAC5C,IAAI,CAAC,aACH,cAAc,WAAW,QAAQ,IAAI,aAAa;CAGpD,OAAO;AACT;;;;;;AAOA,SAAS,eAAgD;CACvD,IAAI,CAAC,eAAe;EAClB,cAAc,WAAW,QAAQ,IAAI,aAAa;EAClD,0BAA0B,aAAa,GAAG,WAAW;EACrD,gBAAgB;CAClB;CAEA,OAAO;AACT;;;;AAKA,SAAgB,WAAiC;CAC/C,OAAO,aAAa;AACtB;;;;;AAMA,SAAgB,WAA4C;CAC1D,OAAO,aAAa;AACtB;;;;AAKA,SAAgB,QAAQ,MAAwB;CAC9C,OAAO,aAAa,CAAC,CAAC,IAAI,IAAI;AAChC;;;;;;;AAQA,SAAgB,aAAsB;CACpC,MAAM,QAAQ,aAAa;CAE3B,OAAO,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK;AAC5C;;;;;;;;AASA,SAAgB,0BAAgC;CAC9C,cAAc;CACd,cAAc;CACd,gBAAgB;AAClB"}
@@ -1,6 +1,6 @@
1
1
  import { BenchmarkErrorResult, BenchmarkSnapshotsOptions, BenchmarkSuccessResult } from "./types.mjs";
2
2
 
3
- //#region ../core/src/benchmark/benchmark-snapshots.d.ts
3
+ //#region ../../packages/core/src/benchmark/benchmark-snapshots.d.ts
4
4
  declare class BenchmarkSnapshots {
5
5
  private readonly maxSnapshots;
6
6
  private readonly capture;
@@ -1 +1 @@
1
- {"version":3,"file":"benchmark-snapshots.d.mts","names":[],"sources":["../../../../../../../core/src/benchmark/benchmark-snapshots.ts"],"mappings":";;;cAMa,kBAAA;EAAA,iBACM,YAAA;EAAA,iBACA,OAAA;EAAA,iBACA,SAAA;cAKE,OAAA,GAAU,yBAAA;EAAA;;;;;;;;;EActB,MAAA,CAAO,MAAA,EAAQ,sBAAA,YAAkC,oBAAA;EArBvC;;;;;;;;;EAgDV,YAAA,CAAa,IAAA,YAAgB,sBAAA,YAAkC,oBAAA;EAA/D;;;;;;;;EAYA,YAAA,IAAgB,MAAA,UAEpB,sBAAA,YAAkC,oBAAA;EAoBxB;;AAAa;;;;;;;EAAnB,KAAA,CAAM,IAAA;AAAA"}
1
+ {"version":3,"file":"benchmark-snapshots.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/benchmark/benchmark-snapshots.ts"],"mappings":";;;cAMa,kBAAA;EAAA,iBACM,YAAA;EAAA,iBACA,OAAA;EAAA,iBACA,SAAA;cAKE,OAAA,GAAU,yBAAA;EAAA;;;;;;;;;EActB,MAAA,CAAO,MAAA,EAAQ,sBAAA,YAAkC,oBAAA;EArBvC;;;;;;;;;EAgDV,YAAA,CAAa,IAAA,YAAgB,sBAAA,YAAkC,oBAAA;EAA/D;;;;;;;;EAYA,YAAA,IAAgB,MAAA,UAEpB,sBAAA,YAAkC,oBAAA;EAoBxB;;AAAa;;;;;;;EAAnB,KAAA,CAAM,IAAA;AAAA"}
@@ -1,4 +1,4 @@
1
- //#region ../core/src/benchmark/benchmark-snapshots.ts
1
+ //#region ../../packages/core/src/benchmark/benchmark-snapshots.ts
2
2
  var BenchmarkSnapshots = class {
3
3
  constructor(options) {
4
4
  this.snapshots = /* @__PURE__ */ new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"benchmark-snapshots.mjs","names":[],"sources":["../../../../../../../core/src/benchmark/benchmark-snapshots.ts"],"sourcesContent":["import type {\n BenchmarkErrorResult,\n BenchmarkSnapshotsOptions,\n BenchmarkSuccessResult,\n} from \"./types\";\n\nexport class BenchmarkSnapshots {\n private readonly maxSnapshots: number;\n private readonly capture: \"error\" | \"value\" | \"all\";\n private readonly snapshots = new Map<\n string,\n (BenchmarkSuccessResult<unknown> | BenchmarkErrorResult)[]\n >();\n\n public constructor(options?: BenchmarkSnapshotsOptions) {\n this.maxSnapshots = options?.maxSnapshots ?? 100;\n this.capture = options?.capture ?? \"error\";\n }\n\n /**\n * Record a raw result. Called automatically by measure() when a snapshotContainer is set.\n * Respects the `capture` setting — ignores results that don't match.\n *\n * @param result - The success or error result to record.\n *\n * @example\n * snapshots.record(result);\n */\n public record(result: BenchmarkSuccessResult<unknown> | BenchmarkErrorResult): void {\n if (this.capture === \"error\" && result.success) return;\n if (this.capture === \"value\" && !result.success) return;\n\n let list = this.snapshots.get(result.name);\n\n if (!list) {\n list = [];\n this.snapshots.set(result.name, list);\n }\n\n if (list.length >= this.maxSnapshots && this.maxSnapshots > 0) {\n list.shift(); // Evict oldest\n }\n\n list.push(result);\n }\n\n /**\n * Get all snapshots for one operation name.\n *\n * @param name - The operation name.\n * @returns Array of snapshots for the operation.\n *\n * @example\n * snapshots.getSnapshots(\"db-query\");\n */\n public getSnapshots(name: string): (BenchmarkSuccessResult<unknown> | BenchmarkErrorResult)[] {\n return this.snapshots.get(name) ?? [];\n }\n\n /**\n * Get all snapshots for all tracked operations.\n *\n * @returns A mapping of operation names to their snapshots array.\n *\n * @example\n * snapshots.allSnapshots();\n */\n public allSnapshots(): Record<\n string,\n (BenchmarkSuccessResult<unknown> | BenchmarkErrorResult)[]\n > {\n const all: Record<string, (BenchmarkSuccessResult<unknown> | BenchmarkErrorResult)[]> = {};\n\n for (const [name, list] of this.snapshots.entries()) {\n all[name] = [...list];\n }\n\n return all;\n }\n\n /**\n * Clear snapshots for one or all operations.\n *\n * @param name - Optional operation name. If omitted, clears all snapshots.\n *\n * @example\n * snapshots.reset(\"db-query\");\n * snapshots.reset();\n */\n public reset(name?: string): void {\n if (name) {\n this.snapshots.delete(name);\n } else {\n this.snapshots.clear();\n }\n }\n}\n"],"mappings":";AAMA,IAAa,qBAAb,MAAgC;CAQ9B,AAAO,YAAY,SAAqC;mCAL3B,IAAI,IAG/B;EAGA,KAAK,eAAe,SAAS,gBAAgB;EAC7C,KAAK,UAAU,SAAS,WAAW;CACrC;;;;;;;;;;CAWA,AAAO,OAAO,QAAsE;EAClF,IAAI,KAAK,YAAY,WAAW,OAAO,SAAS;EAChD,IAAI,KAAK,YAAY,WAAW,CAAC,OAAO,SAAS;EAEjD,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,IAAI;EAEzC,IAAI,CAAC,MAAM;GACT,OAAO,CAAC;GACR,KAAK,UAAU,IAAI,OAAO,MAAM,IAAI;EACtC;EAEA,IAAI,KAAK,UAAU,KAAK,gBAAgB,KAAK,eAAe,GAC1D,KAAK,MAAM;EAGb,KAAK,KAAK,MAAM;CAClB;;;;;;;;;;CAWA,AAAO,aAAa,MAA0E;EAC5F,OAAO,KAAK,UAAU,IAAI,IAAI,KAAK,CAAC;CACtC;;;;;;;;;CAUA,AAAO,eAGL;EACA,MAAM,MAAkF,CAAC;EAEzF,KAAK,MAAM,CAAC,MAAM,SAAS,KAAK,UAAU,QAAQ,GAChD,IAAI,QAAQ,CAAC,GAAG,IAAI;EAGtB,OAAO;CACT;;;;;;;;;;CAWA,AAAO,MAAM,MAAqB;EAChC,IAAI,MACF,KAAK,UAAU,OAAO,IAAI;OAE1B,KAAK,UAAU,MAAM;CAEzB;AACF"}
1
+ {"version":3,"file":"benchmark-snapshots.mjs","names":[],"sources":["../../../../../../../../packages/core/src/benchmark/benchmark-snapshots.ts"],"sourcesContent":["import type {\n BenchmarkErrorResult,\n BenchmarkSnapshotsOptions,\n BenchmarkSuccessResult,\n} from \"./types\";\n\nexport class BenchmarkSnapshots {\n private readonly maxSnapshots: number;\n private readonly capture: \"error\" | \"value\" | \"all\";\n private readonly snapshots = new Map<\n string,\n (BenchmarkSuccessResult<unknown> | BenchmarkErrorResult)[]\n >();\n\n public constructor(options?: BenchmarkSnapshotsOptions) {\n this.maxSnapshots = options?.maxSnapshots ?? 100;\n this.capture = options?.capture ?? \"error\";\n }\n\n /**\n * Record a raw result. Called automatically by measure() when a snapshotContainer is set.\n * Respects the `capture` setting — ignores results that don't match.\n *\n * @param result - The success or error result to record.\n *\n * @example\n * snapshots.record(result);\n */\n public record(result: BenchmarkSuccessResult<unknown> | BenchmarkErrorResult): void {\n if (this.capture === \"error\" && result.success) return;\n if (this.capture === \"value\" && !result.success) return;\n\n let list = this.snapshots.get(result.name);\n\n if (!list) {\n list = [];\n this.snapshots.set(result.name, list);\n }\n\n if (list.length >= this.maxSnapshots && this.maxSnapshots > 0) {\n list.shift(); // Evict oldest\n }\n\n list.push(result);\n }\n\n /**\n * Get all snapshots for one operation name.\n *\n * @param name - The operation name.\n * @returns Array of snapshots for the operation.\n *\n * @example\n * snapshots.getSnapshots(\"db-query\");\n */\n public getSnapshots(name: string): (BenchmarkSuccessResult<unknown> | BenchmarkErrorResult)[] {\n return this.snapshots.get(name) ?? [];\n }\n\n /**\n * Get all snapshots for all tracked operations.\n *\n * @returns A mapping of operation names to their snapshots array.\n *\n * @example\n * snapshots.allSnapshots();\n */\n public allSnapshots(): Record<\n string,\n (BenchmarkSuccessResult<unknown> | BenchmarkErrorResult)[]\n > {\n const all: Record<string, (BenchmarkSuccessResult<unknown> | BenchmarkErrorResult)[]> = {};\n\n for (const [name, list] of this.snapshots.entries()) {\n all[name] = [...list];\n }\n\n return all;\n }\n\n /**\n * Clear snapshots for one or all operations.\n *\n * @param name - Optional operation name. If omitted, clears all snapshots.\n *\n * @example\n * snapshots.reset(\"db-query\");\n * snapshots.reset();\n */\n public reset(name?: string): void {\n if (name) {\n this.snapshots.delete(name);\n } else {\n this.snapshots.clear();\n }\n }\n}\n"],"mappings":";AAMA,IAAa,qBAAb,MAAgC;CAQ9B,AAAO,YAAY,SAAqC;mCAL3B,IAAI,IAG/B;EAGA,KAAK,eAAe,SAAS,gBAAgB;EAC7C,KAAK,UAAU,SAAS,WAAW;CACrC;;;;;;;;;;CAWA,AAAO,OAAO,QAAsE;EAClF,IAAI,KAAK,YAAY,WAAW,OAAO,SAAS;EAChD,IAAI,KAAK,YAAY,WAAW,CAAC,OAAO,SAAS;EAEjD,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,IAAI;EAEzC,IAAI,CAAC,MAAM;GACT,OAAO,CAAC;GACR,KAAK,UAAU,IAAI,OAAO,MAAM,IAAI;EACtC;EAEA,IAAI,KAAK,UAAU,KAAK,gBAAgB,KAAK,eAAe,GAC1D,KAAK,MAAM;EAGb,KAAK,KAAK,MAAM;CAClB;;;;;;;;;;CAWA,AAAO,aAAa,MAA0E;EAC5F,OAAO,KAAK,UAAU,IAAI,IAAI,KAAK,CAAC;CACtC;;;;;;;;;CAUA,AAAO,eAGL;EACA,MAAM,MAAkF,CAAC;EAEzF,KAAK,MAAM,CAAC,MAAM,SAAS,KAAK,UAAU,QAAQ,GAChD,IAAI,QAAQ,CAAC,GAAG,IAAI;EAGtB,OAAO;CACT;;;;;;;;;;CAWA,AAAO,MAAM,MAAqB;EAChC,IAAI,MACF,KAAK,UAAU,OAAO,IAAI;OAE1B,KAAK,UAAU,MAAM;CAEzB;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { BenchmarkErrorResult, BenchmarkOptions, BenchmarkSuccessResult } from "./types.mjs";
2
2
 
3
- //#region ../core/src/benchmark/benchmark.d.ts
3
+ //#region ../../packages/core/src/benchmark/benchmark.d.ts
4
4
  /**
5
5
  * Measure the execution time of a function and classify its performance.
6
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"benchmark.d.mts","names":[],"sources":["../../../../../../../core/src/benchmark/benchmark.ts"],"mappings":";;;;;AA+CA;;;;;;;;;;;;;;;;;;;;iBAAsB,OAAA,IACpB,IAAA,UACA,EAAA,QAAU,CAAA,GAAI,OAAA,CAAQ,CAAA,GACtB,OAAA,GAAU,gBAAA,CAAiB,CAAA,IAC1B,OAAA,CAAQ,sBAAA,CAAuB,CAAA,IAAK,oBAAA"}
1
+ {"version":3,"file":"benchmark.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/benchmark/benchmark.ts"],"mappings":";;;;;AA+CA;;;;;;;;;;;;;;;;;;;;iBAAsB,OAAA,IACpB,IAAA,UACA,EAAA,QAAU,CAAA,GAAI,OAAA,CAAQ,CAAA,GACtB,OAAA,GAAU,gBAAA,CAAiB,CAAA,IAC1B,OAAA,CAAQ,sBAAA,CAAuB,CAAA,IAAK,oBAAA"}
@@ -1,7 +1,7 @@
1
1
  import { config } from "../config/config-getter.mjs";
2
2
  import "../config/index.mjs";
3
3
 
4
- //#region ../core/src/benchmark/benchmark.ts
4
+ //#region ../../packages/core/src/benchmark/benchmark.ts
5
5
  /**
6
6
  * Classifies latency into "excellent", "good", or "poor" based on thresholds.
7
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"benchmark.mjs","names":[],"sources":["../../../../../../../core/src/benchmark/benchmark.ts"],"sourcesContent":["import { config } from \"../config\";\nimport type {\n BenchmarkConfigurations,\n BenchmarkErrorResult,\n BenchmarkOptions,\n BenchmarkSuccessResult,\n} from \"./types\";\n\n/**\n * Classifies latency into \"excellent\", \"good\", or \"poor\" based on thresholds.\n *\n * @example\n * latencyState(80, { excellent: 100, poor: 500 }) // \"excellent\"\n * latencyState(300, { excellent: 100, poor: 500 }) // \"good\"\n * latencyState(600, { excellent: 100, poor: 500 }) // \"poor\"\n */\nfunction latencyState(\n latency: number,\n range: { excellent: number; poor: number },\n): \"excellent\" | \"good\" | \"poor\" {\n if (latency <= range.excellent) return \"excellent\";\n if (latency >= range.poor) return \"poor\";\n return \"good\";\n}\n\n/**\n * Measure the execution time of a function and classify its performance.\n *\n * When `enabled` is false, fn() is still called but no timing runs and no hooks fire.\n * A zeroed SuccessResult is returned to keep the return type stable for all callers.\n *\n * @example\n * ```ts\n * const result = await measure(\"db-query\", () => db.query(\"SELECT 1\"), {\n * latencyRange: { excellent: 100, poor: 500 },\n * onComplete: (r) => metrics.record(r.latency),\n * onError: (r) => logger.error(\"query failed\", r.error),\n * onFinish: (r) => logger.info(`${r.name} took ${r.latency}ms`),\n * });\n *\n * if (result.success) {\n * console.log(result.value);\n * } else {\n * console.error(result.error);\n * }\n * ```\n */\nexport async function measure<T>(\n name: string,\n fn: () => T | Promise<T>,\n options?: BenchmarkOptions<T>,\n): Promise<BenchmarkSuccessResult<T> | BenchmarkErrorResult> {\n const benchmarkConfig = config.get<BenchmarkConfigurations>(\"benchmark\");\n\n // Fast path: disabled (inline option wins over global config) — call fn() and\n // return a zeroed success wrapper. No timing, no hooks. Re-throws if fn() throws.\n if ((options?.enabled ?? benchmarkConfig?.enabled) === false) {\n const value = await fn();\n return {\n name,\n success: true,\n value,\n latency: 0,\n state: \"excellent\",\n tags: options?.tags,\n startedAt: new Date(),\n endedAt: new Date(),\n };\n }\n\n // Resolve latency range from inline options or global config\n const latencyRange = options?.latencyRange ?? benchmarkConfig?.latencyRange;\n\n const startedAt = new Date();\n const startTime = performance.now();\n const profiler = options?.profiler ?? benchmarkConfig?.profiler;\n const snapshotContainer = options?.snapshotContainer ?? benchmarkConfig?.snapshotContainer;\n\n // Observers must never turn a successful call into a reported failure\n // (callers such as use-case retry on failure), so each one is isolated.\n const isolate = (observer: () => void) => {\n try {\n observer();\n } catch (observerError) {\n console.error(`[benchmark] observer for \"${name}\" threw`, observerError);\n }\n };\n\n let value: T;\n\n try {\n value = await fn();\n } catch (thrown) {\n // Decide whether to benchmark this error or just re-throw immediately\n const shouldBenchmark = options?.shouldBenchmarkError\n ? options.shouldBenchmarkError(thrown)\n : true;\n\n if (!shouldBenchmark) {\n throw thrown;\n }\n\n // Capture timing even on failure — a 30s timeout is very different from a 2ms crash\n const endTime = performance.now();\n const latency = Math.round(endTime - startTime);\n const state = latencyRange ? latencyState(latency, latencyRange) : \"poor\";\n\n // Normalize thrown value to something consistent\n const error = thrown instanceof Error ? thrown : new Error(String(thrown));\n\n const result: BenchmarkErrorResult = {\n name,\n success: false,\n error,\n latency,\n state,\n tags: options?.tags,\n startedAt,\n endedAt: new Date(),\n };\n\n if (profiler) isolate(() => profiler.record(result));\n if (snapshotContainer) isolate(() => snapshotContainer.record(result));\n isolate(() => options?.onError?.(result));\n isolate(() => options?.onFinish?.(result));\n\n return result;\n }\n\n const endTime = performance.now();\n const latency = Math.round(endTime - startTime);\n const state = latencyRange ? latencyState(latency, latencyRange) : \"good\";\n\n const result: BenchmarkSuccessResult<T> = {\n name,\n success: true,\n value,\n latency,\n state,\n tags: options?.tags,\n startedAt,\n endedAt: new Date(),\n };\n\n if (profiler) isolate(() => profiler.record(result));\n if (snapshotContainer) isolate(() => snapshotContainer.record(result));\n isolate(() => options?.onComplete?.(result));\n isolate(() => options?.onFinish?.(result));\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;AAgBA,SAAS,aACP,SACA,OAC+B;CAC/B,IAAI,WAAW,MAAM,WAAW,OAAO;CACvC,IAAI,WAAW,MAAM,MAAM,OAAO;CAClC,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;AAwBA,eAAsB,QACpB,MACA,IACA,SAC2D;CAC3D,MAAM,kBAAkB,OAAO,IAA6B,WAAW;CAIvE,KAAK,SAAS,WAAW,iBAAiB,aAAa,OAErD,OAAO;EACL;EACA,SAAS;EACT,aAJkB,GAAG;EAKrB,SAAS;EACT,OAAO;EACP,MAAM,SAAS;EACf,2BAAW,IAAI,KAAK;EACpB,yBAAS,IAAI,KAAK;CACpB;CAIF,MAAM,eAAe,SAAS,gBAAgB,iBAAiB;CAE/D,MAAM,4BAAY,IAAI,KAAK;CAC3B,MAAM,YAAY,YAAY,IAAI;CAClC,MAAM,WAAW,SAAS,YAAY,iBAAiB;CACvD,MAAM,oBAAoB,SAAS,qBAAqB,iBAAiB;CAIzE,MAAM,WAAW,aAAyB;EACxC,IAAI;GACF,SAAS;EACX,SAAS,eAAe;GACtB,QAAQ,MAAM,6BAA6B,KAAK,UAAU,aAAa;EACzE;CACF;CAEA,IAAI;CAEJ,IAAI;EACF,QAAQ,MAAM,GAAG;CACnB,SAAS,QAAQ;EAMf,IAAI,EAJoB,SAAS,uBAC7B,QAAQ,qBAAqB,MAAM,IACnC,OAGF,MAAM;EAIR,MAAM,UAAU,YAAY,IAAI;EAChC,MAAM,UAAU,KAAK,MAAM,UAAU,SAAS;EAC9C,MAAM,QAAQ,eAAe,aAAa,SAAS,YAAY,IAAI;EAKnE,MAAM,SAA+B;GACnC;GACA,SAAS;GACT,OALY,kBAAkB,QAAQ,SAAS,IAAI,MAAM,OAAO,MAAM,CAAC;GAMvE;GACA;GACA,MAAM,SAAS;GACf;GACA,yBAAS,IAAI,KAAK;EACpB;EAEA,IAAI,UAAU,cAAc,SAAS,OAAO,MAAM,CAAC;EACnD,IAAI,mBAAmB,cAAc,kBAAkB,OAAO,MAAM,CAAC;EACrE,cAAc,SAAS,UAAU,MAAM,CAAC;EACxC,cAAc,SAAS,WAAW,MAAM,CAAC;EAEzC,OAAO;CACT;CAEA,MAAM,UAAU,YAAY,IAAI;CAChC,MAAM,UAAU,KAAK,MAAM,UAAU,SAAS;CAC9C,MAAM,QAAQ,eAAe,aAAa,SAAS,YAAY,IAAI;CAEnE,MAAM,SAAoC;EACxC;EACA,SAAS;EACT;EACA;EACA;EACA,MAAM,SAAS;EACf;EACA,yBAAS,IAAI,KAAK;CACpB;CAEA,IAAI,UAAU,cAAc,SAAS,OAAO,MAAM,CAAC;CACnD,IAAI,mBAAmB,cAAc,kBAAkB,OAAO,MAAM,CAAC;CACrE,cAAc,SAAS,aAAa,MAAM,CAAC;CAC3C,cAAc,SAAS,WAAW,MAAM,CAAC;CAEzC,OAAO;AACT"}
1
+ {"version":3,"file":"benchmark.mjs","names":[],"sources":["../../../../../../../../packages/core/src/benchmark/benchmark.ts"],"sourcesContent":["import { config } from \"../config\";\nimport type {\n BenchmarkConfigurations,\n BenchmarkErrorResult,\n BenchmarkOptions,\n BenchmarkSuccessResult,\n} from \"./types\";\n\n/**\n * Classifies latency into \"excellent\", \"good\", or \"poor\" based on thresholds.\n *\n * @example\n * latencyState(80, { excellent: 100, poor: 500 }) // \"excellent\"\n * latencyState(300, { excellent: 100, poor: 500 }) // \"good\"\n * latencyState(600, { excellent: 100, poor: 500 }) // \"poor\"\n */\nfunction latencyState(\n latency: number,\n range: { excellent: number; poor: number },\n): \"excellent\" | \"good\" | \"poor\" {\n if (latency <= range.excellent) return \"excellent\";\n if (latency >= range.poor) return \"poor\";\n return \"good\";\n}\n\n/**\n * Measure the execution time of a function and classify its performance.\n *\n * When `enabled` is false, fn() is still called but no timing runs and no hooks fire.\n * A zeroed SuccessResult is returned to keep the return type stable for all callers.\n *\n * @example\n * ```ts\n * const result = await measure(\"db-query\", () => db.query(\"SELECT 1\"), {\n * latencyRange: { excellent: 100, poor: 500 },\n * onComplete: (r) => metrics.record(r.latency),\n * onError: (r) => logger.error(\"query failed\", r.error),\n * onFinish: (r) => logger.info(`${r.name} took ${r.latency}ms`),\n * });\n *\n * if (result.success) {\n * console.log(result.value);\n * } else {\n * console.error(result.error);\n * }\n * ```\n */\nexport async function measure<T>(\n name: string,\n fn: () => T | Promise<T>,\n options?: BenchmarkOptions<T>,\n): Promise<BenchmarkSuccessResult<T> | BenchmarkErrorResult> {\n const benchmarkConfig = config.get<BenchmarkConfigurations>(\"benchmark\");\n\n // Fast path: disabled (inline option wins over global config) — call fn() and\n // return a zeroed success wrapper. No timing, no hooks. Re-throws if fn() throws.\n if ((options?.enabled ?? benchmarkConfig?.enabled) === false) {\n const value = await fn();\n return {\n name,\n success: true,\n value,\n latency: 0,\n state: \"excellent\",\n tags: options?.tags,\n startedAt: new Date(),\n endedAt: new Date(),\n };\n }\n\n // Resolve latency range from inline options or global config\n const latencyRange = options?.latencyRange ?? benchmarkConfig?.latencyRange;\n\n const startedAt = new Date();\n const startTime = performance.now();\n const profiler = options?.profiler ?? benchmarkConfig?.profiler;\n const snapshotContainer = options?.snapshotContainer ?? benchmarkConfig?.snapshotContainer;\n\n // Observers must never turn a successful call into a reported failure\n // (callers such as use-case retry on failure), so each one is isolated.\n const isolate = (observer: () => void) => {\n try {\n observer();\n } catch (observerError) {\n console.error(`[benchmark] observer for \"${name}\" threw`, observerError);\n }\n };\n\n let value: T;\n\n try {\n value = await fn();\n } catch (thrown) {\n // Decide whether to benchmark this error or just re-throw immediately\n const shouldBenchmark = options?.shouldBenchmarkError\n ? options.shouldBenchmarkError(thrown)\n : true;\n\n if (!shouldBenchmark) {\n throw thrown;\n }\n\n // Capture timing even on failure — a 30s timeout is very different from a 2ms crash\n const endTime = performance.now();\n const latency = Math.round(endTime - startTime);\n const state = latencyRange ? latencyState(latency, latencyRange) : \"poor\";\n\n // Normalize thrown value to something consistent\n const error = thrown instanceof Error ? thrown : new Error(String(thrown));\n\n const result: BenchmarkErrorResult = {\n name,\n success: false,\n error,\n latency,\n state,\n tags: options?.tags,\n startedAt,\n endedAt: new Date(),\n };\n\n if (profiler) isolate(() => profiler.record(result));\n if (snapshotContainer) isolate(() => snapshotContainer.record(result));\n isolate(() => options?.onError?.(result));\n isolate(() => options?.onFinish?.(result));\n\n return result;\n }\n\n const endTime = performance.now();\n const latency = Math.round(endTime - startTime);\n const state = latencyRange ? latencyState(latency, latencyRange) : \"good\";\n\n const result: BenchmarkSuccessResult<T> = {\n name,\n success: true,\n value,\n latency,\n state,\n tags: options?.tags,\n startedAt,\n endedAt: new Date(),\n };\n\n if (profiler) isolate(() => profiler.record(result));\n if (snapshotContainer) isolate(() => snapshotContainer.record(result));\n isolate(() => options?.onComplete?.(result));\n isolate(() => options?.onFinish?.(result));\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;AAgBA,SAAS,aACP,SACA,OAC+B;CAC/B,IAAI,WAAW,MAAM,WAAW,OAAO;CACvC,IAAI,WAAW,MAAM,MAAM,OAAO;CAClC,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;AAwBA,eAAsB,QACpB,MACA,IACA,SAC2D;CAC3D,MAAM,kBAAkB,OAAO,IAA6B,WAAW;CAIvE,KAAK,SAAS,WAAW,iBAAiB,aAAa,OAErD,OAAO;EACL;EACA,SAAS;EACT,aAJkB,GAAG;EAKrB,SAAS;EACT,OAAO;EACP,MAAM,SAAS;EACf,2BAAW,IAAI,KAAK;EACpB,yBAAS,IAAI,KAAK;CACpB;CAIF,MAAM,eAAe,SAAS,gBAAgB,iBAAiB;CAE/D,MAAM,4BAAY,IAAI,KAAK;CAC3B,MAAM,YAAY,YAAY,IAAI;CAClC,MAAM,WAAW,SAAS,YAAY,iBAAiB;CACvD,MAAM,oBAAoB,SAAS,qBAAqB,iBAAiB;CAIzE,MAAM,WAAW,aAAyB;EACxC,IAAI;GACF,SAAS;EACX,SAAS,eAAe;GACtB,QAAQ,MAAM,6BAA6B,KAAK,UAAU,aAAa;EACzE;CACF;CAEA,IAAI;CAEJ,IAAI;EACF,QAAQ,MAAM,GAAG;CACnB,SAAS,QAAQ;EAMf,IAAI,EAJoB,SAAS,uBAC7B,QAAQ,qBAAqB,MAAM,IACnC,OAGF,MAAM;EAIR,MAAM,UAAU,YAAY,IAAI;EAChC,MAAM,UAAU,KAAK,MAAM,UAAU,SAAS;EAC9C,MAAM,QAAQ,eAAe,aAAa,SAAS,YAAY,IAAI;EAKnE,MAAM,SAA+B;GACnC;GACA,SAAS;GACT,OALY,kBAAkB,QAAQ,SAAS,IAAI,MAAM,OAAO,MAAM,CAAC;GAMvE;GACA;GACA,MAAM,SAAS;GACf;GACA,yBAAS,IAAI,KAAK;EACpB;EAEA,IAAI,UAAU,cAAc,SAAS,OAAO,MAAM,CAAC;EACnD,IAAI,mBAAmB,cAAc,kBAAkB,OAAO,MAAM,CAAC;EACrE,cAAc,SAAS,UAAU,MAAM,CAAC;EACxC,cAAc,SAAS,WAAW,MAAM,CAAC;EAEzC,OAAO;CACT;CAEA,MAAM,UAAU,YAAY,IAAI;CAChC,MAAM,UAAU,KAAK,MAAM,UAAU,SAAS;CAC9C,MAAM,QAAQ,eAAe,aAAa,SAAS,YAAY,IAAI;CAEnE,MAAM,SAAoC;EACxC;EACA,SAAS;EACT;EACA;EACA;EACA,MAAM,SAAS;EACf;EACA,yBAAS,IAAI,KAAK;CACpB;CAEA,IAAI,UAAU,cAAc,SAAS,OAAO,MAAM,CAAC;CACnD,IAAI,mBAAmB,cAAc,kBAAkB,OAAO,MAAM,CAAC;CACrE,cAAc,SAAS,aAAa,MAAM,CAAC;CAC3C,cAAc,SAAS,WAAW,MAAM,CAAC;CAEzC,OAAO;AACT"}
@@ -1,6 +1,6 @@
1
1
  import { BenchmarkChannel, BenchmarkStats } from "../types.mjs";
2
2
 
3
- //#region ../core/src/benchmark/channels/console.channel.d.ts
3
+ //#region ../../packages/core/src/benchmark/channels/console.channel.d.ts
4
4
  declare class ConsoleChannel implements BenchmarkChannel {
5
5
  /**
6
6
  * Pretty-prints a stats table per operation on onFlush().
@@ -1 +1 @@
1
- {"version":3,"file":"console.channel.d.mts","names":[],"sources":["../../../../../../../../core/src/benchmark/channels/console.channel.ts"],"mappings":";;;cAEa,cAAA,YAA0B,gBAAA;;AAAvC;;;;;;;;EAUS,OAAA,CAAQ,KAAA,EAAO,MAAA,SAAe,cAAA;AAAA"}
1
+ {"version":3,"file":"console.channel.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/benchmark/channels/console.channel.ts"],"mappings":";;;cAEa,cAAA,YAA0B,gBAAA;;AAAvC;;;;;;;;EAUS,OAAA,CAAQ,KAAA,EAAO,MAAA,SAAe,cAAA;AAAA"}
@@ -1,4 +1,4 @@
1
- //#region ../core/src/benchmark/channels/console.channel.ts
1
+ //#region ../../packages/core/src/benchmark/channels/console.channel.ts
2
2
  var ConsoleChannel = class {
3
3
  /**
4
4
  * Pretty-prints a stats table per operation on onFlush().
@@ -1 +1 @@
1
- {"version":3,"file":"console.channel.mjs","names":[],"sources":["../../../../../../../../core/src/benchmark/channels/console.channel.ts"],"sourcesContent":["import type { BenchmarkChannel, BenchmarkStats } from \"../types\";\n\nexport class ConsoleChannel implements BenchmarkChannel {\n /**\n * Pretty-prints a stats table per operation on onFlush().\n *\n * @param stats - Aggregated stats for all tracked operations.\n *\n * @example\n * const channel = new ConsoleChannel();\n * channel.onFlush({ \"db-query\": { p50: 10, count: 100, ... } });\n */\n public onFlush(stats: Record<string, BenchmarkStats>): void {\n const tableData: Record<string, any> = {};\n\n for (const [name, operationStats] of Object.entries(stats)) {\n tableData[name] = {\n \"p50 (ms)\": operationStats.p50,\n \"p90 (ms)\": operationStats.p90,\n \"p95 (ms)\": operationStats.p95,\n \"p99 (ms)\": operationStats.p99,\n \"Avg (ms)\": operationStats.avg,\n \"Min (ms)\": operationStats.min,\n \"Max (ms)\": operationStats.max,\n \"Error Rate\": `${(operationStats.errorRate * 100).toFixed(2)}%`,\n Errors: operationStats.errors,\n Count: operationStats.count,\n };\n }\n\n console.table(tableData);\n }\n}\n"],"mappings":";AAEA,IAAa,iBAAb,MAAwD;;;;;;;;;;CAUtD,AAAO,QAAQ,OAA6C;EAC1D,MAAM,YAAiC,CAAC;EAExC,KAAK,MAAM,CAAC,MAAM,mBAAmB,OAAO,QAAQ,KAAK,GACvD,UAAU,QAAQ;GAChB,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,cAAc,IAAI,eAAe,YAAY,IAAG,CAAE,QAAQ,CAAC,EAAE;GAC7D,QAAQ,eAAe;GACvB,OAAO,eAAe;EACxB;EAGF,QAAQ,MAAM,SAAS;CACzB;AACF"}
1
+ {"version":3,"file":"console.channel.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/benchmark/channels/console.channel.ts"],"sourcesContent":["import type { BenchmarkChannel, BenchmarkStats } from \"../types\";\n\nexport class ConsoleChannel implements BenchmarkChannel {\n /**\n * Pretty-prints a stats table per operation on onFlush().\n *\n * @param stats - Aggregated stats for all tracked operations.\n *\n * @example\n * const channel = new ConsoleChannel();\n * channel.onFlush({ \"db-query\": { p50: 10, count: 100, ... } });\n */\n public onFlush(stats: Record<string, BenchmarkStats>): void {\n const tableData: Record<string, any> = {};\n\n for (const [name, operationStats] of Object.entries(stats)) {\n tableData[name] = {\n \"p50 (ms)\": operationStats.p50,\n \"p90 (ms)\": operationStats.p90,\n \"p95 (ms)\": operationStats.p95,\n \"p99 (ms)\": operationStats.p99,\n \"Avg (ms)\": operationStats.avg,\n \"Min (ms)\": operationStats.min,\n \"Max (ms)\": operationStats.max,\n \"Error Rate\": `${(operationStats.errorRate * 100).toFixed(2)}%`,\n Errors: operationStats.errors,\n Count: operationStats.count,\n };\n }\n\n console.table(tableData);\n }\n}\n"],"mappings":";AAEA,IAAa,iBAAb,MAAwD;;;;;;;;;;CAUtD,AAAO,QAAQ,OAA6C;EAC1D,MAAM,YAAiC,CAAC;EAExC,KAAK,MAAM,CAAC,MAAM,mBAAmB,OAAO,QAAQ,KAAK,GACvD,UAAU,QAAQ;GAChB,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,YAAY,eAAe;GAC3B,cAAc,IAAI,eAAe,YAAY,IAAG,CAAE,QAAQ,CAAC,EAAE;GAC7D,QAAQ,eAAe;GACvB,OAAO,eAAe;EACxB;EAGF,QAAQ,MAAM,SAAS;CACzB;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { BenchmarkChannel } from "../types.mjs";
2
2
 
3
- //#region ../core/src/benchmark/channels/noop.channel.d.ts
3
+ //#region ../../packages/core/src/benchmark/channels/noop.channel.d.ts
4
4
  declare class NoopChannel implements BenchmarkChannel {
5
5
  onFlush(): void;
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"noop.channel.d.mts","names":[],"sources":["../../../../../../../../core/src/benchmark/channels/noop.channel.ts"],"mappings":";;;cAEa,WAAA,YAAuB,gBAAgB;EAC3C,OAAO;AAAA"}
1
+ {"version":3,"file":"noop.channel.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/benchmark/channels/noop.channel.ts"],"mappings":";;;cAEa,WAAA,YAAuB,gBAAgB;EAC3C,OAAO;AAAA"}
@@ -1,4 +1,4 @@
1
- //#region ../core/src/benchmark/channels/noop.channel.ts
1
+ //#region ../../packages/core/src/benchmark/channels/noop.channel.ts
2
2
  var NoopChannel = class {
3
3
  onFlush() {}
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"noop.channel.mjs","names":[],"sources":["../../../../../../../../core/src/benchmark/channels/noop.channel.ts"],"sourcesContent":["import type { BenchmarkChannel } from \"../types\";\n\nexport class NoopChannel implements BenchmarkChannel {\n public onFlush(): void {}\n}\n"],"mappings":";AAEA,IAAa,cAAb,MAAqD;CACnD,AAAO,UAAgB,CAAC;AAC1B"}
1
+ {"version":3,"file":"noop.channel.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/benchmark/channels/noop.channel.ts"],"sourcesContent":["import type { BenchmarkChannel } from \"../types\";\n\nexport class NoopChannel implements BenchmarkChannel {\n public onFlush(): void {}\n}\n"],"mappings":";AAEA,IAAa,cAAb,MAAqD;CACnD,AAAO,UAAgB,CAAC;AAC1B"}
@@ -1,6 +1,6 @@
1
1
  import { BenchmarkErrorResult, BenchmarkProfilerOptions, BenchmarkStats, BenchmarkSuccessResult } from "./types.mjs";
2
2
 
3
- //#region ../core/src/benchmark/profiler.d.ts
3
+ //#region ../../packages/core/src/benchmark/profiler.d.ts
4
4
  declare class BenchmarkProfiler {
5
5
  private readonly maxSamples;
6
6
  private readonly channels;
@@ -1 +1 @@
1
- {"version":3,"file":"profiler.d.mts","names":[],"sources":["../../../../../../../core/src/benchmark/profiler.ts"],"mappings":";;;cAkBa,iBAAA;EAAA,iBACM,UAAA;EAAA,iBACA,QAAA;EAAA,iBACA,OAAA;EAAA,QACT,QAAA;cAEW,OAAA,GAAU,wBAAA;EAyBP;;;;;;;;EAAf,MAAA,CAAO,MAAA,EAAQ,sBAAA,YAAkC,oBAAA;EA7BvC;;;;;;;;;;EA0EV,KAAA,CAAM,IAAA,WAAe,cAAA;EAAf;;;;;;;;EAsCN,QAAA,IAAY,MAAA,SAAe,cAAA;EAyD3B;;AAAO;;;;EAxCD,KAAA,IAAS,OAAA;;;;;;;;;;;EAmBf,KAAA,CAAM,IAAA;;;;;;;EAqBN,OAAA;AAAA"}
1
+ {"version":3,"file":"profiler.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/benchmark/profiler.ts"],"mappings":";;;cAkBa,iBAAA;EAAA,iBACM,UAAA;EAAA,iBACA,QAAA;EAAA,iBACA,OAAA;EAAA,QACT,QAAA;cAEW,OAAA,GAAU,wBAAA;EAyBP;;;;;;;;EAAf,MAAA,CAAO,MAAA,EAAQ,sBAAA,YAAkC,oBAAA;EA7BvC;;;;;;;;;;EA0EV,KAAA,CAAM,IAAA,WAAe,cAAA;EAAf;;;;;;;;EAsCN,QAAA,IAAY,MAAA,SAAe,cAAA;EAyD3B;;AAAO;;;;EAxCD,KAAA,IAAS,OAAA;;;;;;;;;;;EAmBf,KAAA,CAAM,IAAA;;;;;;;EAqBN,OAAA;AAAA"}
@@ -1,6 +1,6 @@
1
1
  import { NoopChannel } from "./channels/noop.channel.mjs";
2
2
 
3
- //#region ../core/src/benchmark/profiler.ts
3
+ //#region ../../packages/core/src/benchmark/profiler.ts
4
4
  var BenchmarkProfiler = class {
5
5
  constructor(options) {
6
6
  this.entries = /* @__PURE__ */ new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"profiler.mjs","names":[],"sources":["../../../../../../../core/src/benchmark/profiler.ts"],"sourcesContent":["import { NoopChannel } from \"./channels/noop.channel\";\nimport type {\n BenchmarkChannel,\n BenchmarkErrorResult,\n BenchmarkProfilerOptions,\n BenchmarkStats,\n BenchmarkSuccessResult,\n} from \"./types\";\n\ntype BenchmarkEntry = {\n latencies: number[];\n sum: number;\n total: number;\n errors: number;\n firstSeenAt: Date;\n lastSeenAt: Date;\n};\n\nexport class BenchmarkProfiler {\n private readonly maxSamples: number;\n private readonly channels: BenchmarkChannel[];\n private readonly entries = new Map<string, BenchmarkEntry>();\n private interval?: ReturnType<typeof setInterval>;\n\n public constructor(options?: BenchmarkProfilerOptions) {\n this.maxSamples = options?.maxSamples ?? 1000;\n this.channels = options?.channels ?? [new NoopChannel()];\n\n if (options?.flushEvery) {\n this.interval = setInterval(() => {\n // Background interval: a failing channel must not become an unhandled rejection\n this.flush().catch((error) => {\n console.error(\"[benchmark] profiler flush failed\", error);\n });\n }, options.flushEvery);\n\n // Don't keep CLI / test processes alive just for the flush timer\n this.interval.unref?.();\n }\n }\n\n /**\n * Record one measurement result. Called automatically by measure() when a profiler is set.\n *\n * @param result - The success or error result from measure()\n *\n * @example\n * profiler.record(result);\n */\n public record(result: BenchmarkSuccessResult<unknown> | BenchmarkErrorResult): void {\n let entry = this.entries.get(result.name);\n\n if (!entry) {\n entry = {\n latencies: [],\n sum: 0,\n total: 0,\n errors: 0,\n firstSeenAt: result.startedAt,\n lastSeenAt: result.endedAt,\n };\n\n this.entries.set(result.name, entry);\n }\n\n entry.latencies.push(result.latency);\n entry.sum += result.latency;\n\n if (entry.latencies.length > this.maxSamples) {\n const removed = entry.latencies.shift();\n if (removed !== undefined) {\n entry.sum -= removed;\n }\n }\n\n entry.total += 1;\n\n if (!result.success) {\n entry.errors += 1;\n }\n\n entry.lastSeenAt = result.endedAt;\n }\n\n /**\n * Get aggregated stats for one operation name.\n * Computes p50/p95/p99 by sorting the ring buffer on demand.\n *\n * @param name - The operation name to get stats for.\n * @returns Stats object or undefined if no data yet.\n *\n * @example\n * const stats = profiler.stats(\"db-query\");\n */\n public stats(name: string): BenchmarkStats | undefined {\n const entry = this.entries.get(name);\n if (!entry || entry.latencies.length === 0) return undefined;\n\n const latencies = [...entry.latencies].sort((a, b) => a - b);\n const count = latencies.length;\n\n if (count === 0) return undefined;\n\n const getP = (percentile: number) => {\n const index = Math.min(count - 1, Math.floor(count * percentile));\n return latencies[index] ?? 0;\n };\n\n return {\n p50: getP(0.5),\n p90: getP(0.9),\n p95: getP(0.95),\n p99: getP(0.99),\n avg: Math.round((entry.sum / count) * 100) / 100,\n min: latencies[0] ?? 0,\n max: latencies[count - 1] ?? 0,\n count: entry.total,\n errors: entry.errors,\n errorRate: Math.round((entry.errors / entry.total) * 100) / 100,\n firstSeenAt: entry.firstSeenAt,\n lastSeenAt: entry.lastSeenAt,\n };\n }\n\n /**\n * Get stats for all tracked operations.\n *\n * @returns A record mapping operation names to their stats.\n *\n * @example\n * const all = profiler.allStats();\n */\n public allStats(): Record<string, BenchmarkStats> {\n const all: Record<string, BenchmarkStats> = {};\n for (const name of this.entries.keys()) {\n const operationStats = this.stats(name);\n if (operationStats) {\n all[name] = operationStats;\n }\n }\n return all;\n }\n\n /**\n * Send allStats() to all registered channels.\n *\n * @example\n * await profiler.flush();\n */\n public async flush(): Promise<void> {\n const stats = this.allStats();\n if (Object.keys(stats).length === 0) return;\n\n for (const channel of this.channels) {\n await channel.onFlush(stats);\n }\n }\n\n /**\n * Clear ring buffer for one or all operations.\n * Does NOT reset unbounded total/error counters.\n *\n * @param name - Optional operation name. If omitted, clears all ring buffers.\n *\n * @example\n * profiler.reset(\"db-query\");\n * profiler.reset();\n */\n public reset(name?: string): void {\n if (name) {\n const entry = this.entries.get(name);\n if (entry) {\n entry.latencies = [];\n entry.sum = 0;\n }\n } else {\n for (const entry of this.entries.values()) {\n entry.latencies = [];\n entry.sum = 0;\n }\n }\n }\n\n /**\n * Dispose the profiler, clearing its auto-flush interval.\n *\n * @example\n * profiler.dispose();\n */\n public dispose(): void {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = undefined;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"profiler.mjs","names":[],"sources":["../../../../../../../../packages/core/src/benchmark/profiler.ts"],"sourcesContent":["import { NoopChannel } from \"./channels/noop.channel\";\nimport type {\n BenchmarkChannel,\n BenchmarkErrorResult,\n BenchmarkProfilerOptions,\n BenchmarkStats,\n BenchmarkSuccessResult,\n} from \"./types\";\n\ntype BenchmarkEntry = {\n latencies: number[];\n sum: number;\n total: number;\n errors: number;\n firstSeenAt: Date;\n lastSeenAt: Date;\n};\n\nexport class BenchmarkProfiler {\n private readonly maxSamples: number;\n private readonly channels: BenchmarkChannel[];\n private readonly entries = new Map<string, BenchmarkEntry>();\n private interval?: ReturnType<typeof setInterval>;\n\n public constructor(options?: BenchmarkProfilerOptions) {\n this.maxSamples = options?.maxSamples ?? 1000;\n this.channels = options?.channels ?? [new NoopChannel()];\n\n if (options?.flushEvery) {\n this.interval = setInterval(() => {\n // Background interval: a failing channel must not become an unhandled rejection\n this.flush().catch((error) => {\n console.error(\"[benchmark] profiler flush failed\", error);\n });\n }, options.flushEvery);\n\n // Don't keep CLI / test processes alive just for the flush timer\n this.interval.unref?.();\n }\n }\n\n /**\n * Record one measurement result. Called automatically by measure() when a profiler is set.\n *\n * @param result - The success or error result from measure()\n *\n * @example\n * profiler.record(result);\n */\n public record(result: BenchmarkSuccessResult<unknown> | BenchmarkErrorResult): void {\n let entry = this.entries.get(result.name);\n\n if (!entry) {\n entry = {\n latencies: [],\n sum: 0,\n total: 0,\n errors: 0,\n firstSeenAt: result.startedAt,\n lastSeenAt: result.endedAt,\n };\n\n this.entries.set(result.name, entry);\n }\n\n entry.latencies.push(result.latency);\n entry.sum += result.latency;\n\n if (entry.latencies.length > this.maxSamples) {\n const removed = entry.latencies.shift();\n if (removed !== undefined) {\n entry.sum -= removed;\n }\n }\n\n entry.total += 1;\n\n if (!result.success) {\n entry.errors += 1;\n }\n\n entry.lastSeenAt = result.endedAt;\n }\n\n /**\n * Get aggregated stats for one operation name.\n * Computes p50/p95/p99 by sorting the ring buffer on demand.\n *\n * @param name - The operation name to get stats for.\n * @returns Stats object or undefined if no data yet.\n *\n * @example\n * const stats = profiler.stats(\"db-query\");\n */\n public stats(name: string): BenchmarkStats | undefined {\n const entry = this.entries.get(name);\n if (!entry || entry.latencies.length === 0) return undefined;\n\n const latencies = [...entry.latencies].sort((a, b) => a - b);\n const count = latencies.length;\n\n if (count === 0) return undefined;\n\n const getP = (percentile: number) => {\n const index = Math.min(count - 1, Math.floor(count * percentile));\n return latencies[index] ?? 0;\n };\n\n return {\n p50: getP(0.5),\n p90: getP(0.9),\n p95: getP(0.95),\n p99: getP(0.99),\n avg: Math.round((entry.sum / count) * 100) / 100,\n min: latencies[0] ?? 0,\n max: latencies[count - 1] ?? 0,\n count: entry.total,\n errors: entry.errors,\n errorRate: Math.round((entry.errors / entry.total) * 100) / 100,\n firstSeenAt: entry.firstSeenAt,\n lastSeenAt: entry.lastSeenAt,\n };\n }\n\n /**\n * Get stats for all tracked operations.\n *\n * @returns A record mapping operation names to their stats.\n *\n * @example\n * const all = profiler.allStats();\n */\n public allStats(): Record<string, BenchmarkStats> {\n const all: Record<string, BenchmarkStats> = {};\n for (const name of this.entries.keys()) {\n const operationStats = this.stats(name);\n if (operationStats) {\n all[name] = operationStats;\n }\n }\n return all;\n }\n\n /**\n * Send allStats() to all registered channels.\n *\n * @example\n * await profiler.flush();\n */\n public async flush(): Promise<void> {\n const stats = this.allStats();\n if (Object.keys(stats).length === 0) return;\n\n for (const channel of this.channels) {\n await channel.onFlush(stats);\n }\n }\n\n /**\n * Clear ring buffer for one or all operations.\n * Does NOT reset unbounded total/error counters.\n *\n * @param name - Optional operation name. If omitted, clears all ring buffers.\n *\n * @example\n * profiler.reset(\"db-query\");\n * profiler.reset();\n */\n public reset(name?: string): void {\n if (name) {\n const entry = this.entries.get(name);\n if (entry) {\n entry.latencies = [];\n entry.sum = 0;\n }\n } else {\n for (const entry of this.entries.values()) {\n entry.latencies = [];\n entry.sum = 0;\n }\n }\n }\n\n /**\n * Dispose the profiler, clearing its auto-flush interval.\n *\n * @example\n * profiler.dispose();\n */\n public dispose(): void {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = undefined;\n }\n }\n}\n"],"mappings":";;;AAkBA,IAAa,oBAAb,MAA+B;CAM7B,AAAO,YAAY,SAAoC;iCAH5B,IAAI,IAA4B;EAIzD,KAAK,aAAa,SAAS,cAAc;EACzC,KAAK,WAAW,SAAS,YAAY,CAAC,IAAI,YAAY,CAAC;EAEvD,IAAI,SAAS,YAAY;GACvB,KAAK,WAAW,kBAAkB;IAEhC,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU;KAC5B,QAAQ,MAAM,qCAAqC,KAAK;IAC1D,CAAC;GACH,GAAG,QAAQ,UAAU;GAGrB,KAAK,SAAS,QAAQ;EACxB;CACF;;;;;;;;;CAUA,AAAO,OAAO,QAAsE;EAClF,IAAI,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAI;EAExC,IAAI,CAAC,OAAO;GACV,QAAQ;IACN,WAAW,CAAC;IACZ,KAAK;IACL,OAAO;IACP,QAAQ;IACR,aAAa,OAAO;IACpB,YAAY,OAAO;GACrB;GAEA,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK;EACrC;EAEA,MAAM,UAAU,KAAK,OAAO,OAAO;EACnC,MAAM,OAAO,OAAO;EAEpB,IAAI,MAAM,UAAU,SAAS,KAAK,YAAY;GAC5C,MAAM,UAAU,MAAM,UAAU,MAAM;GACtC,IAAI,YAAY,QACd,MAAM,OAAO;EAEjB;EAEA,MAAM,SAAS;EAEf,IAAI,CAAC,OAAO,SACV,MAAM,UAAU;EAGlB,MAAM,aAAa,OAAO;CAC5B;;;;;;;;;;;CAYA,AAAO,MAAM,MAA0C;EACrD,MAAM,QAAQ,KAAK,QAAQ,IAAI,IAAI;EACnC,IAAI,CAAC,SAAS,MAAM,UAAU,WAAW,GAAG,OAAO;EAEnD,MAAM,YAAY,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC;EAC3D,MAAM,QAAQ,UAAU;EAExB,IAAI,UAAU,GAAG,OAAO;EAExB,MAAM,QAAQ,eAAuB;GAEnC,OAAO,UADO,KAAK,IAAI,QAAQ,GAAG,KAAK,MAAM,QAAQ,UAAU,CAC1C,MAAM;EAC7B;EAEA,OAAO;GACL,KAAK,KAAK,EAAG;GACb,KAAK,KAAK,EAAG;GACb,KAAK,KAAK,GAAI;GACd,KAAK,KAAK,GAAI;GACd,KAAK,KAAK,MAAO,MAAM,MAAM,QAAS,GAAG,IAAI;GAC7C,KAAK,UAAU,MAAM;GACrB,KAAK,UAAU,QAAQ,MAAM;GAC7B,OAAO,MAAM;GACb,QAAQ,MAAM;GACd,WAAW,KAAK,MAAO,MAAM,SAAS,MAAM,QAAS,GAAG,IAAI;GAC5D,aAAa,MAAM;GACnB,YAAY,MAAM;EACpB;CACF;;;;;;;;;CAUA,AAAO,WAA2C;EAChD,MAAM,MAAsC,CAAC;EAC7C,KAAK,MAAM,QAAQ,KAAK,QAAQ,KAAK,GAAG;GACtC,MAAM,iBAAiB,KAAK,MAAM,IAAI;GACtC,IAAI,gBACF,IAAI,QAAQ;EAEhB;EACA,OAAO;CACT;;;;;;;CAQA,MAAa,QAAuB;EAClC,MAAM,QAAQ,KAAK,SAAS;EAC5B,IAAI,OAAO,KAAK,KAAK,CAAC,CAAC,WAAW,GAAG;EAErC,KAAK,MAAM,WAAW,KAAK,UACzB,MAAM,QAAQ,QAAQ,KAAK;CAE/B;;;;;;;;;;;CAYA,AAAO,MAAM,MAAqB;EAChC,IAAI,MAAM;GACR,MAAM,QAAQ,KAAK,QAAQ,IAAI,IAAI;GACnC,IAAI,OAAO;IACT,MAAM,YAAY,CAAC;IACnB,MAAM,MAAM;GACd;EACF,OACE,KAAK,MAAM,SAAS,KAAK,QAAQ,OAAO,GAAG;GACzC,MAAM,YAAY,CAAC;GACnB,MAAM,MAAM;EACd;CAEJ;;;;;;;CAQA,AAAO,UAAgB;EACrB,IAAI,KAAK,UAAU;GACjB,cAAc,KAAK,QAAQ;GAC3B,KAAK,WAAW;EAClB;CACF;AACF"}
@@ -1,7 +1,7 @@
1
1
  import { BenchmarkSnapshots } from "./benchmark-snapshots.mjs";
2
2
  import { BenchmarkProfiler } from "./profiler.mjs";
3
3
 
4
- //#region ../core/src/benchmark/types.d.ts
4
+ //#region ../../packages/core/src/benchmark/types.d.ts
5
5
  /**
6
6
  * Global benchmark configuration (set via config.get("benchmark"))
7
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../../../../../../core/src/benchmark/types.ts"],"mappings":";;;;;;AAMA;KAAY,uBAAA;EACV,OAAA;EACA,YAAA;IAAiB,SAAA;IAAmB,IAAA;EAAA;EACpC,QAAA,GAAW,iBAAA;EACX,iBAAA,GAAoB,kBAAkB;AAAA;AAAA,KAG5B,gBAAA;EAHU;;AAAkB;AAGxC;EAKE,OAAA;EAL0B;;;;;;;;;EAe1B,YAAA;IAkDsC;;;IA9CpC,SAAA;IAJF;;;IAQE,IAAA;EAAA;EAK2C;;;EAA7C,UAAA,IAAc,MAAA,EAAQ,sBAAA,CAAuB,CAAA;EAIlC;;;EAAX,OAAA,IAAW,MAAA,EAAQ,oBAAA;EAK6B;;;;EAAhD,QAAA,IAAY,MAAA,EAAQ,sBAAA,CAAuB,CAAA,IAAK,oBAAA;EAcxB;;;;;EARxB,IAAA,GAAO,MAAA;EAsB+B;AAGxC;;;;;;EAjBE,oBAAA,IAAwB,KAAA;EAyCX;;;;;;EAlCb,QAAA,GAAW,iBAAA;EA8BA;;;;AAIE;AAMf;EAjCE,iBAAA,GAAoB,kBAAA;AAAA;AAAA,KAGV,eAAA;EA8BuB;;;EA1BjC,IAAA;EA4BO;;AAAC;EAxBR,OAAA;EA8B8B;;;EA1B9B,KAAA;EA2BA;;;EAvBA,IAAA,GAAO,MAAA;EA2BQ;;;EAvBf,SAAA,EAAW,IAAA;EA2BI;;;EAvBf,OAAA,EAAS,IAAA;AAAA;;;;KAMC,sBAAA,MAA4B,eAAA;EACtC,OAAA;EACA,KAAA,EAAO,CAAC;AAAA;;;;KAME,oBAAA,GAAuB,eAAe;EAChD,OAAA;EACA,KAAA;AAAA;AAAA,UAGe,gBAAA;EAaf;;;EATA,OAAA,CAAQ,KAAA,EAAO,MAAA,SAAe,cAAA,WAAyB,OAAA;AAAA;AAAA,KAG7C,cAAA;EACV,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EAEA,KAAA,UAWA;EATA,MAAA,UAWW;EATX,SAAA;EACA,WAAA,EAAa,IAAA;EACb,UAAA,EAAY,IAAI;AAAA;AAAA,KAGN,wBAAA;sEAEV,UAAA,WAmBO;EAjBP,QAAA,GAAW,gBAAgB;EAE3B,UAAA;AAAA;AAAA,KAGU,yBAAA;+DAEV,YAAA;;;;;;;;;;EAUA,OAAO;AAAA"}
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/benchmark/types.ts"],"mappings":";;;;;;AAMA;KAAY,uBAAA;EACV,OAAA;EACA,YAAA;IAAiB,SAAA;IAAmB,IAAA;EAAA;EACpC,QAAA,GAAW,iBAAA;EACX,iBAAA,GAAoB,kBAAkB;AAAA;AAAA,KAG5B,gBAAA;EAHU;;AAAkB;AAGxC;EAKE,OAAA;EAL0B;;;;;;;;;EAe1B,YAAA;IAkDsC;;;IA9CpC,SAAA;IAJF;;;IAQE,IAAA;EAAA;EAK2C;;;EAA7C,UAAA,IAAc,MAAA,EAAQ,sBAAA,CAAuB,CAAA;EAIlC;;;EAAX,OAAA,IAAW,MAAA,EAAQ,oBAAA;EAK6B;;;;EAAhD,QAAA,IAAY,MAAA,EAAQ,sBAAA,CAAuB,CAAA,IAAK,oBAAA;EAcxB;;;;;EARxB,IAAA,GAAO,MAAA;EAsB+B;AAGxC;;;;;;EAjBE,oBAAA,IAAwB,KAAA;EAyCX;;;;;;EAlCb,QAAA,GAAW,iBAAA;EA8BA;;;;AAIE;AAMf;EAjCE,iBAAA,GAAoB,kBAAA;AAAA;AAAA,KAGV,eAAA;EA8BuB;;;EA1BjC,IAAA;EA4BO;;AAAC;EAxBR,OAAA;EA8B8B;;;EA1B9B,KAAA;EA2BA;;;EAvBA,IAAA,GAAO,MAAA;EA2BQ;;;EAvBf,SAAA,EAAW,IAAA;EA2BI;;;EAvBf,OAAA,EAAS,IAAA;AAAA;;;;KAMC,sBAAA,MAA4B,eAAA;EACtC,OAAA;EACA,KAAA,EAAO,CAAC;AAAA;;;;KAME,oBAAA,GAAuB,eAAe;EAChD,OAAA;EACA,KAAA;AAAA;AAAA,UAGe,gBAAA;EAaf;;;EATA,OAAA,CAAQ,KAAA,EAAO,MAAA,SAAe,cAAA,WAAyB,OAAA;AAAA;AAAA,KAG7C,cAAA;EACV,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EAEA,KAAA,UAWA;EATA,MAAA,UAWW;EATX,SAAA;EACA,WAAA,EAAa,IAAA;EACb,UAAA,EAAY,IAAI;AAAA;AAAA,KAGN,wBAAA;sEAEV,UAAA,WAmBO;EAjBP,QAAA,GAAW,gBAAgB;EAE3B,UAAA;AAAA;AAAA,KAGU,yBAAA;+DAEV,YAAA;;;;;;;;;;EAUA,OAAO;AAAA"}
@@ -1,4 +1,4 @@
1
- //#region ../core/src/bootstrap/setup.d.ts
1
+ //#region ../../packages/core/src/bootstrap/setup.d.ts
2
2
  declare function displayEnvironmentMode(): void;
3
3
  //#endregion
4
4
  export { displayEnvironmentMode };
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.mts","names":[],"sources":["../../../../../../../core/src/bootstrap/setup.ts"],"mappings":";iBAGgB,sBAAA"}
1
+ {"version":3,"file":"setup.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/bootstrap/setup.ts"],"mappings":";iBAGgB,sBAAA"}
@@ -2,7 +2,7 @@ import { environment } from "../utils/environment.mjs";
2
2
  import "../utils/index.mjs";
3
3
  import { colors } from "@mongez/copper";
4
4
 
5
- //#region ../core/src/bootstrap/setup.ts
5
+ //#region ../../packages/core/src/bootstrap/setup.ts
6
6
  function displayEnvironmentMode() {
7
7
  const env = environment();
8
8
  const envColor = (env) => {