@warlock.js/core 5.28.0 → 5.30.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 (1396) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/esm/application/app.d.mts +1 -1
  3. package/esm/application/app.d.mts.map +1 -1
  4. package/esm/application/app.mjs +1 -1
  5. package/esm/application/app.mjs.map +1 -1
  6. package/esm/application/application-config-types.d.mts +1 -1
  7. package/esm/application/application-config-types.d.mts.map +1 -1
  8. package/esm/application/application.d.mts +1 -1
  9. package/esm/application/application.d.mts.map +1 -1
  10. package/esm/application/application.mjs +1 -1
  11. package/esm/application/application.mjs.map +1 -1
  12. package/esm/application/boot-signal.d.mts +1 -1
  13. package/esm/application/boot-signal.d.mts.map +1 -1
  14. package/esm/application/boot-signal.mjs +1 -1
  15. package/esm/application/boot-signal.mjs.map +1 -1
  16. package/esm/application/public-url.d.mts +1 -1
  17. package/esm/application/public-url.d.mts.map +1 -1
  18. package/esm/application/public-url.mjs +1 -1
  19. package/esm/application/public-url.mjs.map +1 -1
  20. package/esm/application/roles.d.mts +1 -1
  21. package/esm/application/roles.d.mts.map +1 -1
  22. package/esm/application/roles.mjs +1 -1
  23. package/esm/application/roles.mjs.map +1 -1
  24. package/esm/benchmark/benchmark-snapshots.d.mts +1 -1
  25. package/esm/benchmark/benchmark-snapshots.d.mts.map +1 -1
  26. package/esm/benchmark/benchmark-snapshots.mjs +1 -1
  27. package/esm/benchmark/benchmark-snapshots.mjs.map +1 -1
  28. package/esm/benchmark/benchmark.d.mts +1 -1
  29. package/esm/benchmark/benchmark.d.mts.map +1 -1
  30. package/esm/benchmark/benchmark.mjs +1 -1
  31. package/esm/benchmark/benchmark.mjs.map +1 -1
  32. package/esm/benchmark/channels/console.channel.d.mts +1 -1
  33. package/esm/benchmark/channels/console.channel.d.mts.map +1 -1
  34. package/esm/benchmark/channels/console.channel.mjs +1 -1
  35. package/esm/benchmark/channels/console.channel.mjs.map +1 -1
  36. package/esm/benchmark/channels/noop.channel.d.mts +1 -1
  37. package/esm/benchmark/channels/noop.channel.d.mts.map +1 -1
  38. package/esm/benchmark/channels/noop.channel.mjs +1 -1
  39. package/esm/benchmark/channels/noop.channel.mjs.map +1 -1
  40. package/esm/benchmark/profiler.d.mts +1 -1
  41. package/esm/benchmark/profiler.d.mts.map +1 -1
  42. package/esm/benchmark/profiler.mjs +1 -1
  43. package/esm/benchmark/profiler.mjs.map +1 -1
  44. package/esm/benchmark/types.d.mts +1 -1
  45. package/esm/benchmark/types.d.mts.map +1 -1
  46. package/esm/bootstrap/setup.d.mts +1 -1
  47. package/esm/bootstrap/setup.d.mts.map +1 -1
  48. package/esm/bootstrap/setup.mjs +1 -1
  49. package/esm/bootstrap/setup.mjs.map +1 -1
  50. package/esm/bootstrap.d.mts +1 -1
  51. package/esm/bootstrap.d.mts.map +1 -1
  52. package/esm/bootstrap.mjs +1 -1
  53. package/esm/bootstrap.mjs.map +1 -1
  54. package/esm/cache/database-cache-driver.d.mts +1 -1
  55. package/esm/cache/database-cache-driver.d.mts.map +1 -1
  56. package/esm/cache/database-cache-driver.mjs +1 -1
  57. package/esm/cache/database-cache-driver.mjs.map +1 -1
  58. package/esm/cache/index.mjs +1 -1
  59. package/esm/cache/index.mjs.map +1 -1
  60. package/esm/cli/cli-commands.manager.mjs +1 -1
  61. package/esm/cli/cli-commands.manager.mjs.map +1 -1
  62. package/esm/cli/cli-commands.utils.mjs +1 -1
  63. package/esm/cli/cli-commands.utils.mjs.map +1 -1
  64. package/esm/cli/commands/add.command.mjs +1 -1
  65. package/esm/cli/commands/add.command.mjs.map +1 -1
  66. package/esm/cli/commands/build.command.mjs +1 -1
  67. package/esm/cli/commands/build.command.mjs.map +1 -1
  68. package/esm/cli/commands/create-database.command.mjs +1 -1
  69. package/esm/cli/commands/create-database.command.mjs.map +1 -1
  70. package/esm/cli/commands/dev-server.command.mjs +1 -1
  71. package/esm/cli/commands/dev-server.command.mjs.map +1 -1
  72. package/esm/cli/commands/doctor/boot-for-diagnostics.mjs +1 -1
  73. package/esm/cli/commands/doctor/boot-for-diagnostics.mjs.map +1 -1
  74. package/esm/cli/commands/doctor/checks/config.check.mjs +1 -1
  75. package/esm/cli/commands/doctor/checks/config.check.mjs.map +1 -1
  76. package/esm/cli/commands/doctor/checks/connectors.check.mjs +1 -1
  77. package/esm/cli/commands/doctor/checks/connectors.check.mjs.map +1 -1
  78. package/esm/cli/commands/doctor/checks/handler-signature.check.mjs +1 -1
  79. package/esm/cli/commands/doctor/checks/handler-signature.check.mjs.map +1 -1
  80. package/esm/cli/commands/doctor/checks/health.check.mjs +1 -1
  81. package/esm/cli/commands/doctor/checks/health.check.mjs.map +1 -1
  82. package/esm/cli/commands/doctor/checks/index.mjs +1 -1
  83. package/esm/cli/commands/doctor/checks/index.mjs.map +1 -1
  84. package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs +1 -1
  85. package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs.map +1 -1
  86. package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs +1 -1
  87. package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs.map +1 -1
  88. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs +1 -1
  89. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs.map +1 -1
  90. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs +1 -1
  91. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs.map +1 -1
  92. package/esm/cli/commands/doctor/checks/routes.check.mjs +1 -1
  93. package/esm/cli/commands/doctor/checks/routes.check.mjs.map +1 -1
  94. package/esm/cli/commands/doctor/doctor-command.action.mjs +1 -1
  95. package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -1
  96. package/esm/cli/commands/doctor/format-report.mjs +1 -1
  97. package/esm/cli/commands/doctor/format-report.mjs.map +1 -1
  98. package/esm/cli/commands/doctor/run-checks.mjs +1 -1
  99. package/esm/cli/commands/doctor/run-checks.mjs.map +1 -1
  100. package/esm/cli/commands/doctor.command.mjs +1 -1
  101. package/esm/cli/commands/doctor.command.mjs.map +1 -1
  102. package/esm/cli/commands/drop-tables.command.mjs +1 -1
  103. package/esm/cli/commands/drop-tables.command.mjs.map +1 -1
  104. package/esm/cli/commands/generate/generate.command.mjs +1 -1
  105. package/esm/cli/commands/generate/generate.command.mjs.map +1 -1
  106. package/esm/cli/commands/generate/generators/column-dsl-parser.mjs +1 -1
  107. package/esm/cli/commands/generate/generators/column-dsl-parser.mjs.map +1 -1
  108. package/esm/cli/commands/generate/generators/controller.generator.mjs +1 -1
  109. package/esm/cli/commands/generate/generators/controller.generator.mjs.map +1 -1
  110. package/esm/cli/commands/generate/generators/migration.generator.mjs +1 -1
  111. package/esm/cli/commands/generate/generators/migration.generator.mjs.map +1 -1
  112. package/esm/cli/commands/generate/generators/model.generator.mjs +1 -1
  113. package/esm/cli/commands/generate/generators/model.generator.mjs.map +1 -1
  114. package/esm/cli/commands/generate/generators/module.generator.mjs +1 -1
  115. package/esm/cli/commands/generate/generators/module.generator.mjs.map +1 -1
  116. package/esm/cli/commands/generate/generators/repository.generator.mjs +1 -1
  117. package/esm/cli/commands/generate/generators/repository.generator.mjs.map +1 -1
  118. package/esm/cli/commands/generate/generators/resource.generator.mjs +1 -1
  119. package/esm/cli/commands/generate/generators/resource.generator.mjs.map +1 -1
  120. package/esm/cli/commands/generate/generators/service.generator.mjs +1 -1
  121. package/esm/cli/commands/generate/generators/service.generator.mjs.map +1 -1
  122. package/esm/cli/commands/generate/generators/use-case.generator.mjs +1 -1
  123. package/esm/cli/commands/generate/generators/use-case.generator.mjs.map +1 -1
  124. package/esm/cli/commands/generate/templates/stubs.mjs +1 -1
  125. package/esm/cli/commands/generate/templates/stubs.mjs.map +1 -1
  126. package/esm/cli/commands/generate/utils/name-parser.mjs +1 -1
  127. package/esm/cli/commands/generate/utils/name-parser.mjs.map +1 -1
  128. package/esm/cli/commands/generate/utils/path-resolver.mjs +1 -1
  129. package/esm/cli/commands/generate/utils/path-resolver.mjs.map +1 -1
  130. package/esm/cli/commands/generate/utils/prompt.mjs +1 -1
  131. package/esm/cli/commands/generate/utils/prompt.mjs.map +1 -1
  132. package/esm/cli/commands/generate/utils/writer.mjs +1 -1
  133. package/esm/cli/commands/generate/utils/writer.mjs.map +1 -1
  134. package/esm/cli/commands/migrate.command.mjs +1 -1
  135. package/esm/cli/commands/migrate.command.mjs.map +1 -1
  136. package/esm/cli/commands/openapi-generator.action.mjs +1 -1
  137. package/esm/cli/commands/openapi-generator.action.mjs.map +1 -1
  138. package/esm/cli/commands/openapi-generator.command.mjs +1 -1
  139. package/esm/cli/commands/openapi-generator.command.mjs.map +1 -1
  140. package/esm/cli/commands/postman-generator.action.mjs +1 -1
  141. package/esm/cli/commands/postman-generator.action.mjs.map +1 -1
  142. package/esm/cli/commands/postman-generator.command.mjs +1 -1
  143. package/esm/cli/commands/postman-generator.command.mjs.map +1 -1
  144. package/esm/cli/commands/routes/diff-page-routes.mjs +1 -1
  145. package/esm/cli/commands/routes/diff-page-routes.mjs.map +1 -1
  146. package/esm/cli/commands/routes/format-routes-table.mjs +1 -1
  147. package/esm/cli/commands/routes/format-routes-table.mjs.map +1 -1
  148. package/esm/cli/commands/routes/route-row.mjs +1 -1
  149. package/esm/cli/commands/routes/route-row.mjs.map +1 -1
  150. package/esm/cli/commands/routes/routes-command.action.mjs +1 -1
  151. package/esm/cli/commands/routes/routes-command.action.mjs.map +1 -1
  152. package/esm/cli/commands/routes/routes-diff.action.mjs +1 -1
  153. package/esm/cli/commands/routes/routes-diff.action.mjs.map +1 -1
  154. package/esm/cli/commands/routes/with-console-on-stderr.mjs +1 -1
  155. package/esm/cli/commands/routes/with-console-on-stderr.mjs.map +1 -1
  156. package/esm/cli/commands/routes.command.mjs +1 -1
  157. package/esm/cli/commands/routes.command.mjs.map +1 -1
  158. package/esm/cli/commands/seed.command.mjs +1 -1
  159. package/esm/cli/commands/seed.command.mjs.map +1 -1
  160. package/esm/cli/commands/start-production.command.mjs +1 -1
  161. package/esm/cli/commands/start-production.command.mjs.map +1 -1
  162. package/esm/cli/commands/storage-put.action.mjs +1 -1
  163. package/esm/cli/commands/storage-put.action.mjs.map +1 -1
  164. package/esm/cli/commands/storage-put.command.mjs +1 -1
  165. package/esm/cli/commands/storage-put.command.mjs.map +1 -1
  166. package/esm/cli/commands/typings-generator.command.mjs +1 -1
  167. package/esm/cli/commands/typings-generator.command.mjs.map +1 -1
  168. package/esm/cli/commands/update.command.mjs +1 -1
  169. package/esm/cli/commands/update.command.mjs.map +1 -1
  170. package/esm/cli/commands-loader.mjs +1 -1
  171. package/esm/cli/commands-loader.mjs.map +1 -1
  172. package/esm/cli/framework-cli-commands.mjs +1 -1
  173. package/esm/cli/framework-cli-commands.mjs.map +1 -1
  174. package/esm/cli/parse-cli-args.mjs +1 -1
  175. package/esm/cli/parse-cli-args.mjs.map +1 -1
  176. package/esm/cli/start.mjs +1 -1
  177. package/esm/cli/start.mjs.map +1 -1
  178. package/esm/cli/string-similarity.mjs +1 -1
  179. package/esm/cli/string-similarity.mjs.map +1 -1
  180. package/esm/commands/cli-command.d.mts +1 -1
  181. package/esm/commands/cli-command.d.mts.map +1 -1
  182. package/esm/commands/cli-command.mjs +1 -1
  183. package/esm/commands/cli-command.mjs.map +1 -1
  184. package/esm/commands/types.d.mts +1 -1
  185. package/esm/commands/types.d.mts.map +1 -1
  186. package/esm/config/config-getter.d.mts +1 -1
  187. package/esm/config/config-getter.d.mts.map +1 -1
  188. package/esm/config/config-getter.mjs +1 -1
  189. package/esm/config/config-getter.mjs.map +1 -1
  190. package/esm/config/config-handlers.d.mts +1 -1
  191. package/esm/config/config-handlers.d.mts.map +1 -1
  192. package/esm/config/config-handlers.mjs +1 -1
  193. package/esm/config/config-handlers.mjs.map +1 -1
  194. package/esm/config/config-key-from-path.mjs +1 -1
  195. package/esm/config/config-key-from-path.mjs.map +1 -1
  196. package/esm/config/config-loader.d.mts +1 -1
  197. package/esm/config/config-loader.d.mts.map +1 -1
  198. package/esm/config/config-loader.mjs +1 -1
  199. package/esm/config/config-loader.mjs.map +1 -1
  200. package/esm/config/config-manager.mjs +1 -1
  201. package/esm/config/config-manager.mjs.map +1 -1
  202. package/esm/config/config-setter.d.mts +1 -1
  203. package/esm/config/config-setter.d.mts.map +1 -1
  204. package/esm/config/config-setter.mjs +1 -1
  205. package/esm/config/config-setter.mjs.map +1 -1
  206. package/esm/config/config-special-handlers.d.mts +1 -1
  207. package/esm/config/config-special-handlers.d.mts.map +1 -1
  208. package/esm/config/config-special-handlers.mjs +1 -1
  209. package/esm/config/config-special-handlers.mjs.map +1 -1
  210. package/esm/config/load-config-files.mjs +1 -1
  211. package/esm/config/load-config-files.mjs.map +1 -1
  212. package/esm/config/locale-configuration.mjs +1 -1
  213. package/esm/config/locale-configuration.mjs.map +1 -1
  214. package/esm/config/types.d.mts +1 -1
  215. package/esm/config/types.d.mts.map +1 -1
  216. package/esm/connectors/access-connector.d.mts +1 -1
  217. package/esm/connectors/access-connector.d.mts.map +1 -1
  218. package/esm/connectors/access-connector.mjs +1 -1
  219. package/esm/connectors/access-connector.mjs.map +1 -1
  220. package/esm/connectors/ai-connector.d.mts +1 -1
  221. package/esm/connectors/ai-connector.d.mts.map +1 -1
  222. package/esm/connectors/ai-connector.mjs +1 -1
  223. package/esm/connectors/ai-connector.mjs.map +1 -1
  224. package/esm/connectors/assert-no-reserved-connector-names.d.mts +1 -1
  225. package/esm/connectors/assert-no-reserved-connector-names.d.mts.map +1 -1
  226. package/esm/connectors/assert-no-reserved-connector-names.mjs +1 -1
  227. package/esm/connectors/assert-no-reserved-connector-names.mjs.map +1 -1
  228. package/esm/connectors/assert-unique-connector-names.d.mts +1 -1
  229. package/esm/connectors/assert-unique-connector-names.d.mts.map +1 -1
  230. package/esm/connectors/assert-unique-connector-names.mjs +1 -1
  231. package/esm/connectors/assert-unique-connector-names.mjs.map +1 -1
  232. package/esm/connectors/base-connector.d.mts +1 -1
  233. package/esm/connectors/base-connector.d.mts.map +1 -1
  234. package/esm/connectors/base-connector.mjs +1 -1
  235. package/esm/connectors/base-connector.mjs.map +1 -1
  236. package/esm/connectors/cache-connector.d.mts +1 -1
  237. package/esm/connectors/cache-connector.d.mts.map +1 -1
  238. package/esm/connectors/cache-connector.mjs +1 -1
  239. package/esm/connectors/cache-connector.mjs.map +1 -1
  240. package/esm/connectors/connectors-manager.d.mts +1 -1
  241. package/esm/connectors/connectors-manager.d.mts.map +1 -1
  242. package/esm/connectors/connectors-manager.mjs +2 -2
  243. package/esm/connectors/connectors-manager.mjs.map +1 -1
  244. package/esm/connectors/database-connector.d.mts +1 -1
  245. package/esm/connectors/database-connector.d.mts.map +1 -1
  246. package/esm/connectors/database-connector.mjs +1 -1
  247. package/esm/connectors/database-connector.mjs.map +1 -1
  248. package/esm/connectors/describe-server-address.mjs +1 -1
  249. package/esm/connectors/describe-server-address.mjs.map +1 -1
  250. package/esm/connectors/herald-connector.d.mts +1 -1
  251. package/esm/connectors/herald-connector.d.mts.map +1 -1
  252. package/esm/connectors/herald-connector.mjs +1 -1
  253. package/esm/connectors/herald-connector.mjs.map +1 -1
  254. package/esm/connectors/http-connector.d.mts +1 -1
  255. package/esm/connectors/http-connector.d.mts.map +1 -1
  256. package/esm/connectors/http-connector.mjs +1 -1
  257. package/esm/connectors/http-connector.mjs.map +1 -1
  258. package/esm/connectors/logger-connector.d.mts +1 -1
  259. package/esm/connectors/logger-connector.d.mts.map +1 -1
  260. package/esm/connectors/logger-connector.mjs +1 -1
  261. package/esm/connectors/logger-connector.mjs.map +1 -1
  262. package/esm/connectors/mail-connector.d.mts +1 -1
  263. package/esm/connectors/mail-connector.d.mts.map +1 -1
  264. package/esm/connectors/mail-connector.mjs +1 -1
  265. package/esm/connectors/mail-connector.mjs.map +1 -1
  266. package/esm/connectors/notifications-connector.d.mts +1 -1
  267. package/esm/connectors/notifications-connector.d.mts.map +1 -1
  268. package/esm/connectors/notifications-connector.mjs +1 -1
  269. package/esm/connectors/notifications-connector.mjs.map +1 -1
  270. package/esm/connectors/read-bound-port.mjs +1 -1
  271. package/esm/connectors/read-bound-port.mjs.map +1 -1
  272. package/esm/connectors/register-configured-connectors.d.mts +1 -1
  273. package/esm/connectors/register-configured-connectors.d.mts.map +1 -1
  274. package/esm/connectors/register-configured-connectors.mjs +1 -1
  275. package/esm/connectors/register-configured-connectors.mjs.map +1 -1
  276. package/esm/connectors/single-server-warnings.mjs +1 -1
  277. package/esm/connectors/single-server-warnings.mjs.map +1 -1
  278. package/esm/connectors/socket-connector.d.mts +1 -1
  279. package/esm/connectors/socket-connector.d.mts.map +1 -1
  280. package/esm/connectors/socket-connector.mjs +1 -1
  281. package/esm/connectors/socket-connector.mjs.map +1 -1
  282. package/esm/connectors/storage.connector.d.mts +1 -1
  283. package/esm/connectors/storage.connector.d.mts.map +1 -1
  284. package/esm/connectors/storage.connector.mjs +1 -1
  285. package/esm/connectors/storage.connector.mjs.map +1 -1
  286. package/esm/connectors/types.d.mts +1 -1
  287. package/esm/connectors/types.d.mts.map +1 -1
  288. package/esm/connectors/types.mjs +1 -1
  289. package/esm/connectors/types.mjs.map +1 -1
  290. package/esm/container/container-instance-registry.mjs +1 -1
  291. package/esm/container/container-instance-registry.mjs.map +1 -1
  292. package/esm/container/development-app-modules.d.mts +31 -0
  293. package/esm/container/development-app-modules.d.mts.map +1 -0
  294. package/esm/container/development-model-modules.d.mts +1 -1
  295. package/esm/container/development-model-modules.d.mts.map +1 -1
  296. package/esm/container/index.d.mts +3 -1
  297. package/esm/container/index.d.mts.map +1 -1
  298. package/esm/container/index.mjs +1 -1
  299. package/esm/container/index.mjs.map +1 -1
  300. package/esm/database/create-database-action.mjs +1 -1
  301. package/esm/database/create-database-action.mjs.map +1 -1
  302. package/esm/database/drop-tables-action.mjs +1 -1
  303. package/esm/database/drop-tables-action.mjs.map +1 -1
  304. package/esm/database/migrate-action.mjs +1 -1
  305. package/esm/database/migrate-action.mjs.map +1 -1
  306. package/esm/database/models/database-log/database-log.d.mts +31 -39
  307. package/esm/database/models/database-log/database-log.d.mts.map +1 -1
  308. package/esm/database/models/database-log/database-log.mjs +1 -1
  309. package/esm/database/models/database-log/database-log.mjs.map +1 -1
  310. package/esm/database/pending-exit-code.mjs +1 -1
  311. package/esm/database/pending-exit-code.mjs.map +1 -1
  312. package/esm/database/resolve-pending-migrations.mjs +1 -1
  313. package/esm/database/resolve-pending-migrations.mjs.map +1 -1
  314. package/esm/database/seed-command-action.mjs +1 -1
  315. package/esm/database/seed-command-action.mjs.map +1 -1
  316. package/esm/database/seeds/seed-records-table-migration.mjs +1 -1
  317. package/esm/database/seeds/seed-records-table-migration.mjs.map +1 -1
  318. package/esm/database/seeds/seeder.d.mts +1 -1
  319. package/esm/database/seeds/seeder.d.mts.map +1 -1
  320. package/esm/database/seeds/seeder.errors.d.mts +1 -1
  321. package/esm/database/seeds/seeder.errors.d.mts.map +1 -1
  322. package/esm/database/seeds/seeder.errors.mjs +1 -1
  323. package/esm/database/seeds/seeder.errors.mjs.map +1 -1
  324. package/esm/database/seeds/seeder.mjs +1 -1
  325. package/esm/database/seeds/seeder.mjs.map +1 -1
  326. package/esm/database/seeds/seeders.manager.mjs +1 -1
  327. package/esm/database/seeds/seeders.manager.mjs.map +1 -1
  328. package/esm/database/seeds/seeds-table-migration.mjs +1 -1
  329. package/esm/database/seeds/seeds-table-migration.mjs.map +1 -1
  330. package/esm/database/seeds/types.d.mts +1 -1
  331. package/esm/database/seeds/types.d.mts.map +1 -1
  332. package/esm/database/seeds/utils.mjs +1 -1
  333. package/esm/database/seeds/utils.mjs.map +1 -1
  334. package/esm/database/utils.d.mts +1 -1
  335. package/esm/database/utils.d.mts.map +1 -1
  336. package/esm/database/utils.mjs +1 -1
  337. package/esm/database/utils.mjs.map +1 -1
  338. package/esm/dev-server/app-module-registry.mjs +52 -0
  339. package/esm/dev-server/app-module-registry.mjs.map +1 -0
  340. package/esm/dev-server/boot-precondition-error.mjs +1 -1
  341. package/esm/dev-server/boot-precondition-error.mjs.map +1 -1
  342. package/esm/dev-server/build-development-openapi-document.mjs +1 -1
  343. package/esm/dev-server/build-development-openapi-document.mjs.map +1 -1
  344. package/esm/dev-server/check-for-updates.mjs +1 -1
  345. package/esm/dev-server/check-for-updates.mjs.map +1 -1
  346. package/esm/dev-server/collect-development-api-routes.mjs +1 -1
  347. package/esm/dev-server/collect-development-api-routes.mjs.map +1 -1
  348. package/esm/dev-server/create-worker.mjs +1 -1
  349. package/esm/dev-server/create-worker.mjs.map +1 -1
  350. package/esm/dev-server/dependency-graph.d.mts +1 -1
  351. package/esm/dev-server/dependency-graph.d.mts.map +1 -1
  352. package/esm/dev-server/dependency-graph.mjs +1 -1
  353. package/esm/dev-server/dependency-graph.mjs.map +1 -1
  354. package/esm/dev-server/dev-logger.mjs +1 -1
  355. package/esm/dev-server/dev-logger.mjs.map +1 -1
  356. package/esm/dev-server/development-server.mjs +1 -1
  357. package/esm/dev-server/development-server.mjs.map +1 -1
  358. package/esm/dev-server/events.mjs +1 -1
  359. package/esm/dev-server/events.mjs.map +1 -1
  360. package/esm/dev-server/extract-translation-keys.mjs +1 -1
  361. package/esm/dev-server/extract-translation-keys.mjs.map +1 -1
  362. package/esm/dev-server/file-event-handler.mjs +1 -1
  363. package/esm/dev-server/file-event-handler.mjs.map +1 -1
  364. package/esm/dev-server/file-manager.d.mts +1 -1
  365. package/esm/dev-server/file-manager.d.mts.map +1 -1
  366. package/esm/dev-server/file-manager.mjs +1 -1
  367. package/esm/dev-server/file-manager.mjs.map +1 -1
  368. package/esm/dev-server/file-operations.d.mts +1 -1
  369. package/esm/dev-server/file-operations.d.mts.map +1 -1
  370. package/esm/dev-server/file-operations.mjs +1 -1
  371. package/esm/dev-server/file-operations.mjs.map +1 -1
  372. package/esm/dev-server/files-orchestrator.mjs +28 -14
  373. package/esm/dev-server/files-orchestrator.mjs.map +1 -1
  374. package/esm/dev-server/files-watcher.mjs +1 -1
  375. package/esm/dev-server/files-watcher.mjs.map +1 -1
  376. package/esm/dev-server/flags.mjs +1 -1
  377. package/esm/dev-server/flags.mjs.map +1 -1
  378. package/esm/dev-server/health-checker/checkers/base-health-checker.mjs +1 -1
  379. package/esm/dev-server/health-checker/checkers/base-health-checker.mjs.map +1 -1
  380. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs +1 -1
  381. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
  382. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs +1 -1
  383. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs.map +1 -1
  384. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts +1 -1
  385. package/esm/dev-server/health-checker/file-health-checker.contract.d.mts.map +1 -1
  386. package/esm/dev-server/health-checker/file-health-result.d.mts +1 -1
  387. package/esm/dev-server/health-checker/file-health-result.d.mts.map +1 -1
  388. package/esm/dev-server/health-checker/file-health-result.mjs +1 -1
  389. package/esm/dev-server/health-checker/file-health-result.mjs.map +1 -1
  390. package/esm/dev-server/health-checker/files-healthcare.manager.mjs +1 -1
  391. package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
  392. package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs +1 -1
  393. package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs.map +1 -1
  394. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs +1 -1
  395. package/esm/dev-server/health-checker/workers/ts-health.worker.mjs.map +1 -1
  396. package/esm/dev-server/layer-executor.mjs +1 -1
  397. package/esm/dev-server/layer-executor.mjs.map +1 -1
  398. package/esm/dev-server/legacy-locales-warning.mjs +1 -1
  399. package/esm/dev-server/legacy-locales-warning.mjs.map +1 -1
  400. package/esm/dev-server/loader/build-transpile-init.mjs +1 -1
  401. package/esm/dev-server/loader/build-transpile-init.mjs.map +1 -1
  402. package/esm/dev-server/loader/hook-thread.d.mts +1 -1
  403. package/esm/dev-server/loader/hook-thread.d.mts.map +1 -1
  404. package/esm/dev-server/loader/hook-thread.mjs +1 -1
  405. package/esm/dev-server/loader/hook-thread.mjs.map +1 -1
  406. package/esm/dev-server/loader/load-hook.d.mts +1 -1
  407. package/esm/dev-server/loader/load-hook.d.mts.map +1 -1
  408. package/esm/dev-server/loader/load-hook.mjs +1 -1
  409. package/esm/dev-server/loader/load-hook.mjs.map +1 -1
  410. package/esm/dev-server/loader/loader-port-acks.mjs +34 -0
  411. package/esm/dev-server/loader/loader-port-acks.mjs.map +1 -0
  412. package/esm/dev-server/loader/own-resolver.mjs +1 -1
  413. package/esm/dev-server/loader/own-resolver.mjs.map +1 -1
  414. package/esm/dev-server/loader/register-loader.mjs +1 -1
  415. package/esm/dev-server/loader/register-loader.mjs.map +1 -1
  416. package/esm/dev-server/loader/resolve-capture.mjs +1 -1
  417. package/esm/dev-server/loader/resolve-capture.mjs.map +1 -1
  418. package/esm/dev-server/loader/resolve-hook.d.mts +1 -1
  419. package/esm/dev-server/loader/resolve-hook.d.mts.map +1 -1
  420. package/esm/dev-server/loader/resolve-hook.mjs +2 -2
  421. package/esm/dev-server/loader/resolve-hook.mjs.map +1 -1
  422. package/esm/dev-server/loader/source-slug.mjs +1 -1
  423. package/esm/dev-server/loader/source-slug.mjs.map +1 -1
  424. package/esm/dev-server/loader/transpile-cache.mjs +1 -1
  425. package/esm/dev-server/loader/transpile-cache.mjs.map +1 -1
  426. package/esm/dev-server/loader/version-registry.mjs +1 -1
  427. package/esm/dev-server/loader/version-registry.mjs.map +1 -1
  428. package/esm/dev-server/manifest-manager.d.mts +1 -1
  429. package/esm/dev-server/manifest-manager.d.mts.map +1 -1
  430. package/esm/dev-server/manifest-manager.mjs +1 -1
  431. package/esm/dev-server/manifest-manager.mjs.map +1 -1
  432. package/esm/dev-server/model-module-registry.mjs +1 -1
  433. package/esm/dev-server/model-module-registry.mjs.map +1 -1
  434. package/esm/dev-server/model-resource-typings.mjs +1 -1
  435. package/esm/dev-server/model-resource-typings.mjs.map +1 -1
  436. package/esm/dev-server/module-loader.mjs +1 -1
  437. package/esm/dev-server/module-loader.mjs.map +1 -1
  438. package/esm/dev-server/package-json-manager.mjs +1 -1
  439. package/esm/dev-server/package-json-manager.mjs.map +1 -1
  440. package/esm/dev-server/parse-imports.mjs +73 -6
  441. package/esm/dev-server/parse-imports.mjs.map +1 -1
  442. package/esm/dev-server/read-config-ast.mjs +1 -1
  443. package/esm/dev-server/read-config-ast.mjs.map +1 -1
  444. package/esm/dev-server/ready-block.mjs +1 -1
  445. package/esm/dev-server/ready-block.mjs.map +1 -1
  446. package/esm/dev-server/register-dev-shortcuts.mjs +1 -1
  447. package/esm/dev-server/register-dev-shortcuts.mjs.map +1 -1
  448. package/esm/dev-server/register-installed-devtools.mjs +1 -1
  449. package/esm/dev-server/register-installed-devtools.mjs.map +1 -1
  450. package/esm/dev-server/restart-dev-server.mjs +1 -1
  451. package/esm/dev-server/restart-dev-server.mjs.map +1 -1
  452. package/esm/dev-server/route-types-publisher.mjs +1 -1
  453. package/esm/dev-server/route-types-publisher.mjs.map +1 -1
  454. package/esm/dev-server/run-connector-typings.mjs +1 -1
  455. package/esm/dev-server/run-connector-typings.mjs.map +1 -1
  456. package/esm/dev-server/run-typings-generation.mjs +1 -1
  457. package/esm/dev-server/run-typings-generation.mjs.map +1 -1
  458. package/esm/dev-server/shortcuts.mjs +1 -1
  459. package/esm/dev-server/shortcuts.mjs.map +1 -1
  460. package/esm/dev-server/special-file-patterns.mjs +1 -1
  461. package/esm/dev-server/special-file-patterns.mjs.map +1 -1
  462. package/esm/dev-server/special-files-collector.d.mts +1 -1
  463. package/esm/dev-server/special-files-collector.d.mts.map +1 -1
  464. package/esm/dev-server/special-files-collector.mjs +1 -1
  465. package/esm/dev-server/special-files-collector.mjs.map +1 -1
  466. package/esm/dev-server/start-development-server.mjs +1 -1
  467. package/esm/dev-server/start-development-server.mjs.map +1 -1
  468. package/esm/dev-server/supervisor.mjs +1 -1
  469. package/esm/dev-server/supervisor.mjs.map +1 -1
  470. package/esm/dev-server/translation-keys-sources.mjs +1 -1
  471. package/esm/dev-server/translation-keys-sources.mjs.map +1 -1
  472. package/esm/dev-server/tsconfig-manager.mjs +1 -1
  473. package/esm/dev-server/tsconfig-manager.mjs.map +1 -1
  474. package/esm/dev-server/type-generator.mjs +32 -11
  475. package/esm/dev-server/type-generator.mjs.map +1 -1
  476. package/esm/dev-server/types.d.mts +1 -1
  477. package/esm/dev-server/types.d.mts.map +1 -1
  478. package/esm/dev-server/update-check-cache.mjs +1 -1
  479. package/esm/dev-server/update-check-cache.mjs.map +1 -1
  480. package/esm/dev-server/utils.mjs +1 -1
  481. package/esm/dev-server/utils.mjs.map +1 -1
  482. package/esm/encryption/encrypt.d.mts +1 -1
  483. package/esm/encryption/encrypt.d.mts.map +1 -1
  484. package/esm/encryption/encrypt.mjs +1 -1
  485. package/esm/encryption/encrypt.mjs.map +1 -1
  486. package/esm/encryption/hash.d.mts +1 -1
  487. package/esm/encryption/hash.d.mts.map +1 -1
  488. package/esm/encryption/hash.mjs +1 -1
  489. package/esm/encryption/hash.mjs.map +1 -1
  490. package/esm/encryption/password.d.mts +1 -1
  491. package/esm/encryption/password.d.mts.map +1 -1
  492. package/esm/encryption/password.mjs +1 -1
  493. package/esm/encryption/password.mjs.map +1 -1
  494. package/esm/encryption/types.d.mts +1 -1
  495. package/esm/encryption/types.d.mts.map +1 -1
  496. package/esm/errors/container-key-missing-error.mjs +1 -1
  497. package/esm/errors/container-key-missing-error.mjs.map +1 -1
  498. package/esm/errors/esbuild-binary-missing-error.mjs +1 -1
  499. package/esm/errors/esbuild-binary-missing-error.mjs.map +1 -1
  500. package/esm/errors/index.d.mts +2 -0
  501. package/esm/errors/index.mjs +3 -0
  502. package/esm/errors/unknown-locale-error.mjs +1 -1
  503. package/esm/errors/unknown-locale-error.mjs.map +1 -1
  504. package/esm/generations/add-command.action.mjs +29 -6
  505. package/esm/generations/add-command.action.mjs.map +1 -1
  506. package/esm/generations/features/access.feature.mjs +1 -1
  507. package/esm/generations/features/access.feature.mjs.map +1 -1
  508. package/esm/generations/features/ai-anthropic.feature.mjs +1 -1
  509. package/esm/generations/features/ai-anthropic.feature.mjs.map +1 -1
  510. package/esm/generations/features/ai-bedrock.feature.mjs +1 -1
  511. package/esm/generations/features/ai-bedrock.feature.mjs.map +1 -1
  512. package/esm/generations/features/ai-google.feature.mjs +1 -1
  513. package/esm/generations/features/ai-google.feature.mjs.map +1 -1
  514. package/esm/generations/features/ai-ollama.feature.mjs +1 -1
  515. package/esm/generations/features/ai-ollama.feature.mjs.map +1 -1
  516. package/esm/generations/features/ai-openai.feature.mjs +1 -1
  517. package/esm/generations/features/ai-openai.feature.mjs.map +1 -1
  518. package/esm/generations/features/ai-panoptic.feature.mjs +1 -1
  519. package/esm/generations/features/ai-panoptic.feature.mjs.map +1 -1
  520. package/esm/generations/features/ai-tools.feature.mjs +1 -1
  521. package/esm/generations/features/ai-tools.feature.mjs.map +1 -1
  522. package/esm/generations/features/ai-workspace.feature.mjs +1 -1
  523. package/esm/generations/features/ai-workspace.feature.mjs.map +1 -1
  524. package/esm/generations/features/ai.feature.mjs +1 -1
  525. package/esm/generations/features/ai.feature.mjs.map +1 -1
  526. package/esm/generations/features/auth-google.feature.mjs +1 -1
  527. package/esm/generations/features/auth-google.feature.mjs.map +1 -1
  528. package/esm/generations/features/auth-passkeys.feature.mjs +1 -1
  529. package/esm/generations/features/auth-passkeys.feature.mjs.map +1 -1
  530. package/esm/generations/features/bull-board.feature.mjs +1 -1
  531. package/esm/generations/features/bull-board.feature.mjs.map +1 -1
  532. package/esm/generations/features/devtools.feature.mjs +1 -1
  533. package/esm/generations/features/devtools.feature.mjs.map +1 -1
  534. package/esm/generations/features/herald.feature.mjs +1 -1
  535. package/esm/generations/features/herald.feature.mjs.map +1 -1
  536. package/esm/generations/features/image.feature.mjs +1 -1
  537. package/esm/generations/features/image.feature.mjs.map +1 -1
  538. package/esm/generations/features/index.mjs +1 -1
  539. package/esm/generations/features/index.mjs.map +1 -1
  540. package/esm/generations/features/mail.feature.mjs +1 -1
  541. package/esm/generations/features/mail.feature.mjs.map +1 -1
  542. package/esm/generations/features/mongodb.feature.mjs +1 -1
  543. package/esm/generations/features/mongodb.feature.mjs.map +1 -1
  544. package/esm/generations/features/mysql.feature.mjs +1 -1
  545. package/esm/generations/features/mysql.feature.mjs.map +1 -1
  546. package/esm/generations/features/notifications.feature.mjs +121 -17
  547. package/esm/generations/features/notifications.feature.mjs.map +1 -1
  548. package/esm/generations/features/postgres.feature.mjs +1 -1
  549. package/esm/generations/features/postgres.feature.mjs.map +1 -1
  550. package/esm/generations/features/queue.feature.mjs +1 -1
  551. package/esm/generations/features/queue.feature.mjs.map +1 -1
  552. package/esm/generations/features/react-email.feature.mjs +1 -1
  553. package/esm/generations/features/react-email.feature.mjs.map +1 -1
  554. package/esm/generations/features/react.feature.mjs +1 -1
  555. package/esm/generations/features/react.feature.mjs.map +1 -1
  556. package/esm/generations/features/redis.feature.mjs +1 -1
  557. package/esm/generations/features/redis.feature.mjs.map +1 -1
  558. package/esm/generations/features/s3.feature.mjs +1 -1
  559. package/esm/generations/features/s3.feature.mjs.map +1 -1
  560. package/esm/generations/features/scheduler.feature.mjs +1 -1
  561. package/esm/generations/features/scheduler.feature.mjs.map +1 -1
  562. package/esm/generations/features/ses.feature.mjs +1 -1
  563. package/esm/generations/features/ses.feature.mjs.map +1 -1
  564. package/esm/generations/features/shadcn.feature.mjs +1 -1
  565. package/esm/generations/features/shadcn.feature.mjs.map +1 -1
  566. package/esm/generations/features/shared/insert-connector-entry.mjs +1 -1
  567. package/esm/generations/features/shared/insert-connector-entry.mjs.map +1 -1
  568. package/esm/generations/features/shared/insert-queue-dashboard-block.mjs +1 -1
  569. package/esm/generations/features/shared/insert-queue-dashboard-block.mjs.map +1 -1
  570. package/esm/generations/features/shared/link-ai-package-import.mjs +1 -1
  571. package/esm/generations/features/shared/link-ai-package-import.mjs.map +1 -1
  572. package/esm/generations/features/shared/merge-web-sitemap-config.mjs +1 -1
  573. package/esm/generations/features/shared/merge-web-sitemap-config.mjs.map +1 -1
  574. package/esm/generations/features/shared/migration-timestamp.mjs +1 -1
  575. package/esm/generations/features/shared/migration-timestamp.mjs.map +1 -1
  576. package/esm/generations/features/shared/patch-tsconfig-include.mjs +1 -1
  577. package/esm/generations/features/shared/patch-tsconfig-include.mjs.map +1 -1
  578. package/esm/generations/features/shared/relocate-conflicting-home-route.mjs +1 -1
  579. package/esm/generations/features/shared/relocate-conflicting-home-route.mjs.map +1 -1
  580. package/esm/generations/features/shared/resolve-contact-scaffold.mjs +1 -1
  581. package/esm/generations/features/shared/resolve-contact-scaffold.mjs.map +1 -1
  582. package/esm/generations/features/sitemap.feature.mjs +1 -1
  583. package/esm/generations/features/sitemap.feature.mjs.map +1 -1
  584. package/esm/generations/features/socket.feature.mjs +1 -1
  585. package/esm/generations/features/socket.feature.mjs.map +1 -1
  586. package/esm/generations/features/tailwind.feature.mjs +1 -1
  587. package/esm/generations/features/tailwind.feature.mjs.map +1 -1
  588. package/esm/generations/features/test.feature.mjs +1 -1
  589. package/esm/generations/features/test.feature.mjs.map +1 -1
  590. package/esm/generations/features/types.mjs +1 -1
  591. package/esm/generations/features/types.mjs.map +1 -1
  592. package/esm/generations/features/web.feature.mjs +1 -1
  593. package/esm/generations/features/web.feature.mjs.map +1 -1
  594. package/esm/generations/pnpm-build-approvals.mjs +89 -3
  595. package/esm/generations/pnpm-build-approvals.mjs.map +1 -1
  596. package/esm/generations/stubs.mjs +184 -78
  597. package/esm/generations/stubs.mjs.map +1 -1
  598. package/esm/http/boot-port-preflight.d.mts +1 -1
  599. package/esm/http/boot-port-preflight.d.mts.map +1 -1
  600. package/esm/http/boot-port-preflight.mjs +1 -1
  601. package/esm/http/boot-port-preflight.mjs.map +1 -1
  602. package/esm/http/build-cors-options.mjs +1 -1
  603. package/esm/http/build-cors-options.mjs.map +1 -1
  604. package/esm/http/build-rate-limit-options.d.mts +22 -1
  605. package/esm/http/build-rate-limit-options.d.mts.map +1 -1
  606. package/esm/http/build-rate-limit-options.mjs +7 -1
  607. package/esm/http/build-rate-limit-options.mjs.map +1 -1
  608. package/esm/http/config.d.mts +1 -1
  609. package/esm/http/config.d.mts.map +1 -1
  610. package/esm/http/config.mjs +1 -1
  611. package/esm/http/config.mjs.map +1 -1
  612. package/esm/http/context/request-context.d.mts +1 -1
  613. package/esm/http/context/request-context.d.mts.map +1 -1
  614. package/esm/http/context/request-context.mjs +1 -1
  615. package/esm/http/context/request-context.mjs.map +1 -1
  616. package/esm/http/context/request-memo.d.mts +1 -1
  617. package/esm/http/context/request-memo.d.mts.map +1 -1
  618. package/esm/http/context/request-memo.mjs +1 -1
  619. package/esm/http/context/request-memo.mjs.map +1 -1
  620. package/esm/http/createHttpApplication.d.mts +1 -1
  621. package/esm/http/createHttpApplication.d.mts.map +1 -1
  622. package/esm/http/createHttpApplication.mjs +1 -1
  623. package/esm/http/createHttpApplication.mjs.map +1 -1
  624. package/esm/http/csp.d.mts +1 -1
  625. package/esm/http/csp.d.mts.map +1 -1
  626. package/esm/http/csp.mjs +1 -1
  627. package/esm/http/csp.mjs.map +1 -1
  628. package/esm/http/csrf-default-guard.d.mts +1 -1
  629. package/esm/http/csrf-default-guard.d.mts.map +1 -1
  630. package/esm/http/csrf-default-guard.mjs +1 -1
  631. package/esm/http/csrf-default-guard.mjs.map +1 -1
  632. package/esm/http/csrf-origin-policy.d.mts +1 -1
  633. package/esm/http/csrf-origin-policy.d.mts.map +1 -1
  634. package/esm/http/csrf-origin-policy.mjs +1 -1
  635. package/esm/http/csrf-origin-policy.mjs.map +1 -1
  636. package/esm/http/database/RequestLog.d.mts +63 -111
  637. package/esm/http/database/RequestLog.d.mts.map +1 -1
  638. package/esm/http/database/RequestLog.mjs +1 -1
  639. package/esm/http/database/RequestLog.mjs.map +1 -1
  640. package/esm/http/error-codes.d.mts +1 -1
  641. package/esm/http/error-codes.d.mts.map +1 -1
  642. package/esm/http/error-codes.mjs +1 -1
  643. package/esm/http/error-codes.mjs.map +1 -1
  644. package/esm/http/error-mapper.d.mts +48 -0
  645. package/esm/http/error-mapper.d.mts.map +1 -0
  646. package/esm/http/error-mapper.mjs +48 -0
  647. package/esm/http/error-mapper.mjs.map +1 -0
  648. package/esm/http/errors/errors.d.mts +1 -1
  649. package/esm/http/errors/errors.d.mts.map +1 -1
  650. package/esm/http/errors/errors.mjs +1 -1
  651. package/esm/http/errors/errors.mjs.map +1 -1
  652. package/esm/http/events.d.mts +1 -1
  653. package/esm/http/events.d.mts.map +1 -1
  654. package/esm/http/events.mjs +1 -1
  655. package/esm/http/events.mjs.map +1 -1
  656. package/esm/http/flush-pending-cookies.mjs +1 -1
  657. package/esm/http/flush-pending-cookies.mjs.map +1 -1
  658. package/esm/http/health.d.mts +1 -1
  659. package/esm/http/health.d.mts.map +1 -1
  660. package/esm/http/health.mjs +1 -1
  661. package/esm/http/health.mjs.map +1 -1
  662. package/esm/http/index.d.mts +10 -6
  663. package/esm/http/index.mjs +8 -5
  664. package/esm/http/middleware/cache-response-middleware.d.mts +1 -1
  665. package/esm/http/middleware/cache-response-middleware.d.mts.map +1 -1
  666. package/esm/http/middleware/cache-response-middleware.mjs +1 -1
  667. package/esm/http/middleware/cache-response-middleware.mjs.map +1 -1
  668. package/esm/http/middleware/concurrency-limit.middleware.d.mts +1 -1
  669. package/esm/http/middleware/concurrency-limit.middleware.d.mts.map +1 -1
  670. package/esm/http/middleware/concurrency-limit.middleware.mjs +1 -1
  671. package/esm/http/middleware/concurrency-limit.middleware.mjs.map +1 -1
  672. package/esm/http/middleware/idempotency.middleware.d.mts +1 -1
  673. package/esm/http/middleware/idempotency.middleware.d.mts.map +1 -1
  674. package/esm/http/middleware/idempotency.middleware.mjs +1 -1
  675. package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
  676. package/esm/http/middleware/inject-request-context.d.mts +1 -1
  677. package/esm/http/middleware/inject-request-context.d.mts.map +1 -1
  678. package/esm/http/middleware/inject-request-context.mjs +4 -2
  679. package/esm/http/middleware/inject-request-context.mjs.map +1 -1
  680. package/esm/http/middleware/ip-filter.middleware.d.mts +1 -1
  681. package/esm/http/middleware/ip-filter.middleware.d.mts.map +1 -1
  682. package/esm/http/middleware/ip-filter.middleware.mjs +1 -1
  683. package/esm/http/middleware/ip-filter.middleware.mjs.map +1 -1
  684. package/esm/http/middleware/maintenance.middleware.d.mts +1 -1
  685. package/esm/http/middleware/maintenance.middleware.d.mts.map +1 -1
  686. package/esm/http/middleware/maintenance.middleware.mjs +1 -1
  687. package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
  688. package/esm/http/middleware/max-body-size.middleware.d.mts +1 -1
  689. package/esm/http/middleware/max-body-size.middleware.d.mts.map +1 -1
  690. package/esm/http/middleware/max-body-size.middleware.mjs +1 -1
  691. package/esm/http/middleware/max-body-size.middleware.mjs.map +1 -1
  692. package/esm/http/middleware/middleware-list.d.mts +1 -1
  693. package/esm/http/middleware/middleware-list.d.mts.map +1 -1
  694. package/esm/http/middleware/middleware-list.mjs +1 -1
  695. package/esm/http/middleware/middleware-list.mjs.map +1 -1
  696. package/esm/http/middleware/rate-limit.middleware.d.mts +20 -5
  697. package/esm/http/middleware/rate-limit.middleware.d.mts.map +1 -1
  698. package/esm/http/middleware/rate-limit.middleware.mjs +34 -12
  699. package/esm/http/middleware/rate-limit.middleware.mjs.map +1 -1
  700. package/esm/http/middleware/utils/cidr-match.d.mts +1 -1
  701. package/esm/http/middleware/utils/cidr-match.d.mts.map +1 -1
  702. package/esm/http/middleware/utils/cidr-match.mjs +1 -1
  703. package/esm/http/middleware/utils/cidr-match.mjs.map +1 -1
  704. package/esm/http/middleware/utils/idempotency-key.d.mts +1 -1
  705. package/esm/http/middleware/utils/idempotency-key.d.mts.map +1 -1
  706. package/esm/http/middleware/utils/idempotency-key.mjs +1 -1
  707. package/esm/http/middleware/utils/idempotency-key.mjs.map +1 -1
  708. package/esm/http/middleware/utils/parse-size.d.mts +1 -1
  709. package/esm/http/middleware/utils/parse-size.d.mts.map +1 -1
  710. package/esm/http/middleware/utils/parse-size.mjs +1 -1
  711. package/esm/http/middleware/utils/parse-size.mjs.map +1 -1
  712. package/esm/http/parse-urlencoded-body.mjs +1 -1
  713. package/esm/http/parse-urlencoded-body.mjs.map +1 -1
  714. package/esm/http/plugins.d.mts +9 -2
  715. package/esm/http/plugins.d.mts.map +1 -1
  716. package/esm/http/plugins.mjs +18 -4
  717. package/esm/http/plugins.mjs.map +1 -1
  718. package/esm/http/port-preflight.d.mts +1 -1
  719. package/esm/http/port-preflight.d.mts.map +1 -1
  720. package/esm/http/port-preflight.mjs +1 -1
  721. package/esm/http/port-preflight.mjs.map +1 -1
  722. package/esm/http/rate-limit-cache-store.mjs +155 -0
  723. package/esm/http/rate-limit-cache-store.mjs.map +1 -0
  724. package/esm/http/ready-report.d.mts +1 -1
  725. package/esm/http/ready-report.d.mts.map +1 -1
  726. package/esm/http/ready-report.mjs +1 -1
  727. package/esm/http/ready-report.mjs.map +1 -1
  728. package/esm/http/request-controller.d.mts +1 -1
  729. package/esm/http/request-controller.d.mts.map +1 -1
  730. package/esm/http/request-controller.mjs +1 -1
  731. package/esm/http/request-controller.mjs.map +1 -1
  732. package/esm/http/request-log-snapshot.d.mts +123 -0
  733. package/esm/http/request-log-snapshot.d.mts.map +1 -0
  734. package/esm/http/request-log-snapshot.mjs +141 -0
  735. package/esm/http/request-log-snapshot.mjs.map +1 -0
  736. package/esm/http/request.d.mts +41 -2
  737. package/esm/http/request.d.mts.map +1 -1
  738. package/esm/http/request.mjs +65 -2
  739. package/esm/http/request.mjs.map +1 -1
  740. package/esm/http/resolve-bind-port.mjs +1 -1
  741. package/esm/http/resolve-bind-port.mjs.map +1 -1
  742. package/esm/http/response.d.mts +40 -8
  743. package/esm/http/response.d.mts.map +1 -1
  744. package/esm/http/response.mjs +173 -61
  745. package/esm/http/response.mjs.map +1 -1
  746. package/esm/http/serialized.d.mts +1 -1
  747. package/esm/http/serialized.d.mts.map +1 -1
  748. package/esm/http/server-rebuilt.d.mts +1 -1
  749. package/esm/http/server-rebuilt.d.mts.map +1 -1
  750. package/esm/http/server-rebuilt.mjs +1 -1
  751. package/esm/http/server-rebuilt.mjs.map +1 -1
  752. package/esm/http/server.d.mts +34 -6
  753. package/esm/http/server.d.mts.map +1 -1
  754. package/esm/http/server.mjs +70 -5
  755. package/esm/http/server.mjs.map +1 -1
  756. package/esm/http/stream-react-response.d.mts +1 -1
  757. package/esm/http/stream-react-response.d.mts.map +1 -1
  758. package/esm/http/stream-react-response.mjs +1 -1
  759. package/esm/http/stream-react-response.mjs.map +1 -1
  760. package/esm/http/stream-transport.mjs +75 -0
  761. package/esm/http/stream-transport.mjs.map +1 -0
  762. package/esm/http/tracing/trace-id.d.mts +1 -1
  763. package/esm/http/tracing/trace-id.d.mts.map +1 -1
  764. package/esm/http/tracing/trace-id.mjs +1 -1
  765. package/esm/http/tracing/trace-id.mjs.map +1 -1
  766. package/esm/http/tracing/tracing-dispatcher.d.mts +1 -1
  767. package/esm/http/tracing/tracing-dispatcher.d.mts.map +1 -1
  768. package/esm/http/tracing/tracing-dispatcher.mjs +1 -1
  769. package/esm/http/tracing/tracing-dispatcher.mjs.map +1 -1
  770. package/esm/http/tracing/tracing.type.d.mts +1 -1
  771. package/esm/http/tracing/tracing.type.d.mts.map +1 -1
  772. package/esm/http/types.d.mts +131 -6
  773. package/esm/http/types.d.mts.map +1 -1
  774. package/esm/http/uploaded-file.d.mts +2 -2
  775. package/esm/http/uploaded-file.d.mts.map +1 -1
  776. package/esm/http/uploaded-file.mjs +2 -2
  777. package/esm/http/uploaded-file.mjs.map +1 -1
  778. package/esm/http/uploads/detect-image-format.mjs +1 -1
  779. package/esm/http/uploads/detect-image-format.mjs.map +1 -1
  780. package/esm/http/uploads/generate-image-variant.mjs +1 -1
  781. package/esm/http/uploads/generate-image-variant.mjs.map +1 -1
  782. package/esm/http/uploads/generate-image-variants.d.mts +1 -1
  783. package/esm/http/uploads/generate-image-variants.d.mts.map +1 -1
  784. package/esm/http/uploads/generate-image-variants.mjs +15 -7
  785. package/esm/http/uploads/generate-image-variants.mjs.map +1 -1
  786. package/esm/http/uploads/image-variant-cache.mjs +143 -0
  787. package/esm/http/uploads/image-variant-cache.mjs.map +1 -0
  788. package/esm/http/uploads/image-variant-types.d.mts +1 -1
  789. package/esm/http/uploads/image-variant-types.d.mts.map +1 -1
  790. package/esm/http/uploads/image-variants-config-error.d.mts +1 -1
  791. package/esm/http/uploads/image-variants-config-error.d.mts.map +1 -1
  792. package/esm/http/uploads/image-variants-config-error.mjs +1 -1
  793. package/esm/http/uploads/image-variants-config-error.mjs.map +1 -1
  794. package/esm/http/uploads/index.d.mts +3 -1
  795. package/esm/http/uploads/index.mjs +3 -1
  796. package/esm/http/uploads/is-path-inside.mjs +1 -1
  797. package/esm/http/uploads/is-path-inside.mjs.map +1 -1
  798. package/esm/http/uploads/load-variant-source.mjs +1 -1
  799. package/esm/http/uploads/load-variant-source.mjs.map +1 -1
  800. package/esm/http/uploads/local-disk-root.mjs +24 -0
  801. package/esm/http/uploads/local-disk-root.mjs.map +1 -0
  802. package/esm/http/uploads/matches-if-none-match.mjs +1 -1
  803. package/esm/http/uploads/matches-if-none-match.mjs.map +1 -1
  804. package/esm/http/uploads/parse-uploaded-file-query.mjs +1 -1
  805. package/esm/http/uploads/parse-uploaded-file-query.mjs.map +1 -1
  806. package/esm/http/uploads/purge-image-variants.d.mts +32 -0
  807. package/esm/http/uploads/purge-image-variants.d.mts.map +1 -0
  808. package/esm/http/uploads/purge-image-variants.mjs +46 -0
  809. package/esm/http/uploads/purge-image-variants.mjs.map +1 -0
  810. package/esm/http/uploads/read-file-head.mjs +1 -1
  811. package/esm/http/uploads/read-file-head.mjs.map +1 -1
  812. package/esm/http/uploads/resolve-image-variant.d.mts +73 -0
  813. package/esm/http/uploads/resolve-image-variant.d.mts.map +1 -0
  814. package/esm/http/uploads/resolve-image-variant.mjs +107 -0
  815. package/esm/http/uploads/resolve-image-variant.mjs.map +1 -0
  816. package/esm/http/uploads/resolve-image-variants-config.mjs +1 -1
  817. package/esm/http/uploads/resolve-image-variants-config.mjs.map +1 -1
  818. package/esm/http/uploads/resolve-inline-image-content-type.mjs +1 -1
  819. package/esm/http/uploads/resolve-inline-image-content-type.mjs.map +1 -1
  820. package/esm/http/uploads/resolve-original-content-type.mjs +1 -1
  821. package/esm/http/uploads/resolve-original-content-type.mjs.map +1 -1
  822. package/esm/http/uploads/resolve-upload-path.mjs +3 -2
  823. package/esm/http/uploads/resolve-upload-path.mjs.map +1 -1
  824. package/esm/http/uploads/resolve-variant-candidate.mjs +1 -1
  825. package/esm/http/uploads/resolve-variant-candidate.mjs.map +1 -1
  826. package/esm/http/uploads/single-flight.mjs +1 -1
  827. package/esm/http/uploads/single-flight.mjs.map +1 -1
  828. package/esm/http/uploads/uploaded-file.controller.d.mts +24 -6
  829. package/esm/http/uploads/uploaded-file.controller.d.mts.map +1 -1
  830. package/esm/http/uploads/uploaded-file.controller.mjs +63 -91
  831. package/esm/http/uploads/uploaded-file.controller.mjs.map +1 -1
  832. package/esm/http/uploads/variant-cache-key.mjs +30 -5
  833. package/esm/http/uploads/variant-cache-key.mjs.map +1 -1
  834. package/esm/http/uploads/variant-generations.mjs +1 -1
  835. package/esm/http/uploads/variant-generations.mjs.map +1 -1
  836. package/esm/http/uploads-config.d.mts +1 -1
  837. package/esm/http/uploads-config.d.mts.map +1 -1
  838. package/esm/http/uploads-config.mjs +1 -1
  839. package/esm/http/uploads-config.mjs.map +1 -1
  840. package/esm/http/uploads-types.d.mts +1 -1
  841. package/esm/http/uploads-types.d.mts.map +1 -1
  842. package/esm/http/xmlable.d.mts +1 -1
  843. package/esm/http/xmlable.d.mts.map +1 -1
  844. package/esm/image/image.d.mts +1 -1
  845. package/esm/image/image.d.mts.map +1 -1
  846. package/esm/image/image.mjs +1 -1
  847. package/esm/image/image.mjs.map +1 -1
  848. package/esm/index.d.mts +15 -9
  849. package/esm/index.mjs +11 -7
  850. package/esm/loader/app-module-importer.d.mts +1 -1
  851. package/esm/loader/app-module-importer.d.mts.map +1 -1
  852. package/esm/loader/app-module-importer.mjs +1 -1
  853. package/esm/loader/app-module-importer.mjs.map +1 -1
  854. package/esm/localization/parse-locale-dictionary.d.mts +7 -2
  855. package/esm/localization/parse-locale-dictionary.d.mts.map +1 -1
  856. package/esm/localization/parse-locale-dictionary.mjs +6 -2
  857. package/esm/localization/parse-locale-dictionary.mjs.map +1 -1
  858. package/esm/localization/register-locale-dictionary.d.mts +1 -1
  859. package/esm/localization/register-locale-dictionary.d.mts.map +1 -1
  860. package/esm/localization/register-locale-dictionary.mjs +1 -1
  861. package/esm/localization/register-locale-dictionary.mjs.map +1 -1
  862. package/esm/logger/fatal-visibility.d.mts +1 -1
  863. package/esm/logger/fatal-visibility.d.mts.map +1 -1
  864. package/esm/logger/fatal-visibility.mjs +1 -1
  865. package/esm/logger/fatal-visibility.mjs.map +1 -1
  866. package/esm/logger/logger.d.mts +1 -1
  867. package/esm/logger/logger.d.mts.map +1 -1
  868. package/esm/logger/logger.mjs +1 -1
  869. package/esm/logger/logger.mjs.map +1 -1
  870. package/esm/logger/types.d.mts +1 -1
  871. package/esm/logger/types.d.mts.map +1 -1
  872. package/esm/mail/config.d.mts +1 -1
  873. package/esm/mail/config.d.mts.map +1 -1
  874. package/esm/mail/config.mjs +1 -1
  875. package/esm/mail/config.mjs.map +1 -1
  876. package/esm/mail/events.d.mts +1 -1
  877. package/esm/mail/events.d.mts.map +1 -1
  878. package/esm/mail/events.mjs +1 -1
  879. package/esm/mail/events.mjs.map +1 -1
  880. package/esm/mail/mail.d.mts +1 -1
  881. package/esm/mail/mail.d.mts.map +1 -1
  882. package/esm/mail/mail.mjs +1 -1
  883. package/esm/mail/mail.mjs.map +1 -1
  884. package/esm/mail/mailer-pool.d.mts +1 -1
  885. package/esm/mail/mailer-pool.d.mts.map +1 -1
  886. package/esm/mail/mailer-pool.mjs +1 -1
  887. package/esm/mail/mailer-pool.mjs.map +1 -1
  888. package/esm/mail/react-mail.d.mts +1 -1
  889. package/esm/mail/react-mail.d.mts.map +1 -1
  890. package/esm/mail/react-mail.mjs +1 -1
  891. package/esm/mail/react-mail.mjs.map +1 -1
  892. package/esm/mail/send-mail.d.mts +1 -1
  893. package/esm/mail/send-mail.d.mts.map +1 -1
  894. package/esm/mail/send-mail.mjs +7 -7
  895. package/esm/mail/send-mail.mjs.map +1 -1
  896. package/esm/mail/test-mailbox.d.mts +1 -1
  897. package/esm/mail/test-mailbox.d.mts.map +1 -1
  898. package/esm/mail/test-mailbox.mjs +1 -1
  899. package/esm/mail/test-mailbox.mjs.map +1 -1
  900. package/esm/mail/types.d.mts +1 -1
  901. package/esm/mail/types.d.mts.map +1 -1
  902. package/esm/mail/types.mjs +1 -1
  903. package/esm/mail/types.mjs.map +1 -1
  904. package/esm/manifest/manifest-manager.mjs +1 -1
  905. package/esm/manifest/manifest-manager.mjs.map +1 -1
  906. package/esm/openapi/build-openapi-document.d.mts +1 -1
  907. package/esm/openapi/build-openapi-document.d.mts.map +1 -1
  908. package/esm/openapi/build-openapi-document.mjs +1 -1
  909. package/esm/openapi/build-openapi-document.mjs.map +1 -1
  910. package/esm/openapi/cast-schema.mjs +1 -1
  911. package/esm/openapi/cast-schema.mjs.map +1 -1
  912. package/esm/openapi/collect-openapi-document.mjs +1 -1
  913. package/esm/openapi/collect-openapi-document.mjs.map +1 -1
  914. package/esm/openapi/development-openapi-provider.d.mts +1 -1
  915. package/esm/openapi/development-openapi-provider.d.mts.map +1 -1
  916. package/esm/openapi/development-openapi-provider.mjs +1 -1
  917. package/esm/openapi/development-openapi-provider.mjs.map +1 -1
  918. package/esm/openapi/error-responses.mjs +1 -1
  919. package/esm/openapi/error-responses.mjs.map +1 -1
  920. package/esm/openapi/openapi-child-output.mjs +1 -1
  921. package/esm/openapi/openapi-child-output.mjs.map +1 -1
  922. package/esm/openapi/openapi-protocol.mjs +1 -1
  923. package/esm/openapi/openapi-protocol.mjs.map +1 -1
  924. package/esm/openapi/paths.mjs +1 -1
  925. package/esm/openapi/paths.mjs.map +1 -1
  926. package/esm/openapi/postman/build-request-body.mjs +1 -1
  927. package/esm/openapi/postman/build-request-body.mjs.map +1 -1
  928. package/esm/openapi/postman/build-request-url.mjs +1 -1
  929. package/esm/openapi/postman/build-request-url.mjs.map +1 -1
  930. package/esm/openapi/postman/build-saved-responses.mjs +1 -1
  931. package/esm/openapi/postman/build-saved-responses.mjs.map +1 -1
  932. package/esm/openapi/postman/example-from-schema.d.mts +1 -1
  933. package/esm/openapi/postman/example-from-schema.d.mts.map +1 -1
  934. package/esm/openapi/postman/example-from-schema.mjs +1 -1
  935. package/esm/openapi/postman/example-from-schema.mjs.map +1 -1
  936. package/esm/openapi/postman/http-status-text.mjs +1 -1
  937. package/esm/openapi/postman/http-status-text.mjs.map +1 -1
  938. package/esm/openapi/postman/openapi-to-postman-collection.d.mts +1 -1
  939. package/esm/openapi/postman/openapi-to-postman-collection.d.mts.map +1 -1
  940. package/esm/openapi/postman/openapi-to-postman-collection.mjs +1 -1
  941. package/esm/openapi/postman/openapi-to-postman-collection.mjs.map +1 -1
  942. package/esm/openapi/postman/postman-types.d.mts +1 -1
  943. package/esm/openapi/postman/postman-types.d.mts.map +1 -1
  944. package/esm/openapi/postman/resolve-operation-auth.mjs +1 -1
  945. package/esm/openapi/postman/resolve-operation-auth.mjs.map +1 -1
  946. package/esm/openapi/postman/schema-refs.d.mts +1 -1
  947. package/esm/openapi/postman/schema-refs.d.mts.map +1 -1
  948. package/esm/openapi/postman/schema-refs.mjs +1 -1
  949. package/esm/openapi/postman/schema-refs.mjs.map +1 -1
  950. package/esm/openapi/postman/uuid-v5.mjs +1 -1
  951. package/esm/openapi/postman/uuid-v5.mjs.map +1 -1
  952. package/esm/openapi/request-schemas.mjs +1 -1
  953. package/esm/openapi/request-schemas.mjs.map +1 -1
  954. package/esm/openapi/response-schemas.mjs +5 -2
  955. package/esm/openapi/response-schemas.mjs.map +1 -1
  956. package/esm/openapi/schema-registry.mjs +7 -1
  957. package/esm/openapi/schema-registry.mjs.map +1 -1
  958. package/esm/openapi/security.mjs +1 -1
  959. package/esm/openapi/security.mjs.map +1 -1
  960. package/esm/openapi/types.d.mts +1 -1
  961. package/esm/openapi/types.d.mts.map +1 -1
  962. package/esm/production/assert-dist-ready-to-start.mjs +1 -1
  963. package/esm/production/assert-dist-ready-to-start.mjs.map +1 -1
  964. package/esm/production/assert-generated-imports.mjs +1 -1
  965. package/esm/production/assert-generated-imports.mjs.map +1 -1
  966. package/esm/production/build-app-production.mjs +1 -1
  967. package/esm/production/build-app-production.mjs.map +1 -1
  968. package/esm/production/build-contributions.mjs +1 -1
  969. package/esm/production/build-contributions.mjs.map +1 -1
  970. package/esm/production/bundle-framework-dependencies.mjs +1 -1
  971. package/esm/production/bundle-framework-dependencies.mjs.map +1 -1
  972. package/esm/production/dist-build-manifest.mjs +1 -1
  973. package/esm/production/dist-build-manifest.mjs.map +1 -1
  974. package/esm/production/esbuild-plugins.mjs +1 -1
  975. package/esm/production/esbuild-plugins.mjs.map +1 -1
  976. package/esm/production/esbuild-preflight.mjs +1 -1
  977. package/esm/production/esbuild-preflight.mjs.map +1 -1
  978. package/esm/production/production-builder.mjs +1 -1
  979. package/esm/production/production-builder.mjs.map +1 -1
  980. package/esm/production/production-supervisor.mjs +1 -1
  981. package/esm/production/production-supervisor.mjs.map +1 -1
  982. package/esm/production/promote-dist.mjs +1 -1
  983. package/esm/production/promote-dist.mjs.map +1 -1
  984. package/esm/production/registration-child-runner.mjs +1 -1
  985. package/esm/production/registration-child-runner.mjs.map +1 -1
  986. package/esm/production/resolve-build-config.d.mts +1 -1
  987. package/esm/production/resolve-build-config.d.mts.map +1 -1
  988. package/esm/production/resolve-build-config.mjs +1 -1
  989. package/esm/production/resolve-build-config.mjs.map +1 -1
  990. package/esm/production/route-registration-child.mjs +1 -1
  991. package/esm/production/route-registration-child.mjs.map +1 -1
  992. package/esm/production/route-registration-snapshot.mjs +1 -1
  993. package/esm/production/route-registration-snapshot.mjs.map +1 -1
  994. package/esm/production/tsconfig-path-aliases.mjs +1 -1
  995. package/esm/production/tsconfig-path-aliases.mjs.map +1 -1
  996. package/esm/react/index.d.mts +1 -1
  997. package/esm/react/index.d.mts.map +1 -1
  998. package/esm/react/index.mjs +1 -1
  999. package/esm/react/index.mjs.map +1 -1
  1000. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts +1 -1
  1001. package/esm/repositories/adapters/cascade/cascade-adapter.d.mts.map +1 -1
  1002. package/esm/repositories/adapters/cascade/cascade-adapter.mjs +1 -1
  1003. package/esm/repositories/adapters/cascade/cascade-adapter.mjs.map +1 -1
  1004. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +1 -1
  1005. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
  1006. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs +1 -1
  1007. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs.map +1 -1
  1008. package/esm/repositories/adapters/cascade/filter-applicator.mjs +1 -1
  1009. package/esm/repositories/adapters/cascade/filter-applicator.mjs.map +1 -1
  1010. package/esm/repositories/contracts/query-builder.contract.d.mts +1 -1
  1011. package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
  1012. package/esm/repositories/contracts/repository-adapter.contract.d.mts +1 -1
  1013. package/esm/repositories/contracts/repository-adapter.contract.d.mts.map +1 -1
  1014. package/esm/repositories/contracts/types.d.mts +1 -1
  1015. package/esm/repositories/contracts/types.d.mts.map +1 -1
  1016. package/esm/repositories/repository.manager.d.mts +1 -1
  1017. package/esm/repositories/repository.manager.d.mts.map +1 -1
  1018. package/esm/repositories/repository.manager.mjs +1 -1
  1019. package/esm/repositories/repository.manager.mjs.map +1 -1
  1020. package/esm/resource/define-resource.d.mts +1 -1
  1021. package/esm/resource/define-resource.d.mts.map +1 -1
  1022. package/esm/resource/define-resource.mjs +1 -1
  1023. package/esm/resource/define-resource.mjs.map +1 -1
  1024. package/esm/resource/index.d.mts +1 -0
  1025. package/esm/resource/index.mjs +1 -0
  1026. package/esm/resource/nullable-resource.d.mts +44 -0
  1027. package/esm/resource/nullable-resource.d.mts.map +1 -0
  1028. package/esm/resource/nullable-resource.mjs +38 -0
  1029. package/esm/resource/nullable-resource.mjs.map +1 -0
  1030. package/esm/resource/register-resource.d.mts +1 -1
  1031. package/esm/resource/register-resource.d.mts.map +1 -1
  1032. package/esm/resource/register-resource.mjs +1 -1
  1033. package/esm/resource/register-resource.mjs.map +1 -1
  1034. package/esm/resource/resource-field-builder.d.mts +1 -1
  1035. package/esm/resource/resource-field-builder.d.mts.map +1 -1
  1036. package/esm/resource/resource-field-builder.mjs +1 -1
  1037. package/esm/resource/resource-field-builder.mjs.map +1 -1
  1038. package/esm/resource/resource.d.mts +1 -1
  1039. package/esm/resource/resource.d.mts.map +1 -1
  1040. package/esm/resource/resource.mjs +23 -4
  1041. package/esm/resource/resource.mjs.map +1 -1
  1042. package/esm/resource/types.d.mts +11 -6
  1043. package/esm/resource/types.d.mts.map +1 -1
  1044. package/esm/restful/restful.d.mts +1 -1
  1045. package/esm/restful/restful.d.mts.map +1 -1
  1046. package/esm/restful/restful.mjs +1 -1
  1047. package/esm/restful/restful.mjs.map +1 -1
  1048. package/esm/router/build-route-rate-limit.mjs +1 -1
  1049. package/esm/router/build-route-rate-limit.mjs.map +1 -1
  1050. package/esm/router/describe-route-for-log.mjs +1 -1
  1051. package/esm/router/describe-route-for-log.mjs.map +1 -1
  1052. package/esm/router/dev-dispatch.mjs +1 -1
  1053. package/esm/router/dev-dispatch.mjs.map +1 -1
  1054. package/esm/router/log-request-lifecycle.mjs +1 -1
  1055. package/esm/router/log-request-lifecycle.mjs.map +1 -1
  1056. package/esm/router/named-api-routes-with-responses.mjs +1 -1
  1057. package/esm/router/named-api-routes-with-responses.mjs.map +1 -1
  1058. package/esm/router/normalize-request-path.d.mts +1 -1
  1059. package/esm/router/normalize-request-path.d.mts.map +1 -1
  1060. package/esm/router/normalize-request-path.mjs +1 -1
  1061. package/esm/router/normalize-request-path.mjs.map +1 -1
  1062. package/esm/router/normalize-route-path.d.mts +1 -1
  1063. package/esm/router/normalize-route-path.d.mts.map +1 -1
  1064. package/esm/router/normalize-route-path.mjs +1 -1
  1065. package/esm/router/normalize-route-path.mjs.map +1 -1
  1066. package/esm/router/positional-handler-diagnostics.d.mts +1 -1
  1067. package/esm/router/positional-handler-diagnostics.d.mts.map +1 -1
  1068. package/esm/router/positional-handler-diagnostics.mjs +1 -1
  1069. package/esm/router/positional-handler-diagnostics.mjs.map +1 -1
  1070. package/esm/router/response-schema-types.mjs +3 -1
  1071. package/esm/router/response-schema-types.mjs.map +1 -1
  1072. package/esm/router/route-builder.d.mts +1 -1
  1073. package/esm/router/route-builder.d.mts.map +1 -1
  1074. package/esm/router/route-builder.mjs +1 -1
  1075. package/esm/router/route-builder.mjs.map +1 -1
  1076. package/esm/router/route-name-method-suffix.d.mts +1 -1
  1077. package/esm/router/route-name-method-suffix.d.mts.map +1 -1
  1078. package/esm/router/route-name-method-suffix.mjs +1 -1
  1079. package/esm/router/route-name-method-suffix.mjs.map +1 -1
  1080. package/esm/router/route-registry.d.mts +1 -1
  1081. package/esm/router/route-registry.d.mts.map +1 -1
  1082. package/esm/router/route-registry.mjs +1 -1
  1083. package/esm/router/route-registry.mjs.map +1 -1
  1084. package/esm/router/router.d.mts +8 -1
  1085. package/esm/router/router.d.mts.map +1 -1
  1086. package/esm/router/router.mjs +20 -15
  1087. package/esm/router/router.mjs.map +1 -1
  1088. package/esm/router/types.d.mts +13 -1
  1089. package/esm/router/types.d.mts.map +1 -1
  1090. package/esm/socket/types.d.mts +1 -1
  1091. package/esm/socket/types.d.mts.map +1 -1
  1092. package/esm/socket/utils.d.mts +1 -1
  1093. package/esm/socket/utils.d.mts.map +1 -1
  1094. package/esm/socket/utils.mjs +1 -1
  1095. package/esm/socket/utils.mjs.map +1 -1
  1096. package/esm/storage/config.d.mts +1 -1
  1097. package/esm/storage/config.d.mts.map +1 -1
  1098. package/esm/storage/config.mjs +1 -1
  1099. package/esm/storage/config.mjs.map +1 -1
  1100. package/esm/storage/context/storage-driver-context.d.mts +1 -1
  1101. package/esm/storage/context/storage-driver-context.d.mts.map +1 -1
  1102. package/esm/storage/context/storage-driver-context.mjs +1 -1
  1103. package/esm/storage/context/storage-driver-context.mjs.map +1 -1
  1104. package/esm/storage/drivers/cloud-driver.d.mts +1 -1
  1105. package/esm/storage/drivers/cloud-driver.d.mts.map +1 -1
  1106. package/esm/storage/drivers/cloud-driver.mjs +1 -1
  1107. package/esm/storage/drivers/cloud-driver.mjs.map +1 -1
  1108. package/esm/storage/drivers/do-spaces-driver.d.mts +1 -1
  1109. package/esm/storage/drivers/do-spaces-driver.d.mts.map +1 -1
  1110. package/esm/storage/drivers/do-spaces-driver.mjs +1 -1
  1111. package/esm/storage/drivers/do-spaces-driver.mjs.map +1 -1
  1112. package/esm/storage/drivers/local-driver.d.mts +12 -1
  1113. package/esm/storage/drivers/local-driver.d.mts.map +1 -1
  1114. package/esm/storage/drivers/local-driver.mjs +33 -1
  1115. package/esm/storage/drivers/local-driver.mjs.map +1 -1
  1116. package/esm/storage/drivers/r2-driver.d.mts +1 -1
  1117. package/esm/storage/drivers/r2-driver.d.mts.map +1 -1
  1118. package/esm/storage/drivers/r2-driver.mjs +1 -1
  1119. package/esm/storage/drivers/r2-driver.mjs.map +1 -1
  1120. package/esm/storage/drivers/s3-driver.d.mts +1 -1
  1121. package/esm/storage/drivers/s3-driver.d.mts.map +1 -1
  1122. package/esm/storage/drivers/s3-driver.mjs +1 -1
  1123. package/esm/storage/drivers/s3-driver.mjs.map +1 -1
  1124. package/esm/storage/index.d.mts +1 -1
  1125. package/esm/storage/scoped-storage.d.mts +1 -1
  1126. package/esm/storage/scoped-storage.d.mts.map +1 -1
  1127. package/esm/storage/scoped-storage.mjs +1 -1
  1128. package/esm/storage/scoped-storage.mjs.map +1 -1
  1129. package/esm/storage/storage-file.d.mts +1 -1
  1130. package/esm/storage/storage-file.d.mts.map +1 -1
  1131. package/esm/storage/storage-file.mjs +1 -1
  1132. package/esm/storage/storage-file.mjs.map +1 -1
  1133. package/esm/storage/storage.d.mts +3 -3
  1134. package/esm/storage/storage.d.mts.map +1 -1
  1135. package/esm/storage/storage.mjs +1 -1
  1136. package/esm/storage/storage.mjs.map +1 -1
  1137. package/esm/storage/types.d.mts +3 -2
  1138. package/esm/storage/types.d.mts.map +1 -1
  1139. package/esm/storage/utils/classify-ip-address.d.mts +1 -1
  1140. package/esm/storage/utils/classify-ip-address.d.mts.map +1 -1
  1141. package/esm/storage/utils/classify-ip-address.mjs +1 -1
  1142. package/esm/storage/utils/classify-ip-address.mjs.map +1 -1
  1143. package/esm/storage/utils/contain-path.d.mts +1 -1
  1144. package/esm/storage/utils/contain-path.d.mts.map +1 -1
  1145. package/esm/storage/utils/contain-path.mjs +1 -1
  1146. package/esm/storage/utils/contain-path.mjs.map +1 -1
  1147. package/esm/storage/utils/mime.d.mts +1 -1
  1148. package/esm/storage/utils/mime.d.mts.map +1 -1
  1149. package/esm/storage/utils/mime.mjs +1 -1
  1150. package/esm/storage/utils/mime.mjs.map +1 -1
  1151. package/esm/storage/utils/safe-fetch.d.mts +1 -1
  1152. package/esm/storage/utils/safe-fetch.d.mts.map +1 -1
  1153. package/esm/storage/utils/safe-fetch.mjs +1 -1
  1154. package/esm/storage/utils/safe-fetch.mjs.map +1 -1
  1155. package/esm/storage/utils/storage-capability-error.d.mts +1 -1
  1156. package/esm/storage/utils/storage-capability-error.d.mts.map +1 -1
  1157. package/esm/storage/utils/storage-capability-error.mjs +1 -1
  1158. package/esm/storage/utils/storage-capability-error.mjs.map +1 -1
  1159. package/esm/storage/utils/storage-error.d.mts +1 -1
  1160. package/esm/storage/utils/storage-error.d.mts.map +1 -1
  1161. package/esm/storage/utils/storage-error.mjs +1 -1
  1162. package/esm/storage/utils/storage-error.mjs.map +1 -1
  1163. package/esm/storage/utils/storage-not-initialized-error.d.mts +1 -1
  1164. package/esm/storage/utils/storage-not-initialized-error.d.mts.map +1 -1
  1165. package/esm/storage/utils/storage-not-initialized-error.mjs +1 -1
  1166. package/esm/storage/utils/storage-not-initialized-error.mjs.map +1 -1
  1167. package/esm/tests/start-http-development-server.d.mts +1 -1
  1168. package/esm/tests/start-http-development-server.d.mts.map +1 -1
  1169. package/esm/tests/start-http-development-server.mjs +1 -1
  1170. package/esm/tests/start-http-development-server.mjs.map +1 -1
  1171. package/esm/tests/test-connectors-selection.d.mts +1 -1
  1172. package/esm/tests/test-connectors-selection.d.mts.map +1 -1
  1173. package/esm/tests/test-connectors-selection.mjs +1 -1
  1174. package/esm/tests/test-connectors-selection.mjs.map +1 -1
  1175. package/esm/tests/test-helpers.d.mts +1 -1
  1176. package/esm/tests/test-helpers.d.mts.map +1 -1
  1177. package/esm/tests/test-helpers.mjs +1 -1
  1178. package/esm/tests/test-helpers.mjs.map +1 -1
  1179. package/esm/tests/test-lifecycle-state.mjs +1 -1
  1180. package/esm/tests/test-lifecycle-state.mjs.map +1 -1
  1181. package/esm/tests/test-server-port-channel.mjs +1 -1
  1182. package/esm/tests/test-server-port-channel.mjs.map +1 -1
  1183. package/esm/tests/test-setup-timeout.mjs +1 -1
  1184. package/esm/tests/test-setup-timeout.mjs.map +1 -1
  1185. package/esm/tests/vitest-setup.d.mts +1 -1
  1186. package/esm/tests/vitest-setup.d.mts.map +1 -1
  1187. package/esm/tests/vitest-setup.mjs +1 -1
  1188. package/esm/tests/vitest-setup.mjs.map +1 -1
  1189. package/esm/updater/package-manager.mjs +1 -1
  1190. package/esm/updater/package-manager.mjs.map +1 -1
  1191. package/esm/updater/update-warlock-packages.mjs +1 -1
  1192. package/esm/updater/update-warlock-packages.mjs.map +1 -1
  1193. package/esm/use-cases/types.d.mts +1 -1
  1194. package/esm/use-cases/types.d.mts.map +1 -1
  1195. package/esm/use-cases/use-case-broadcast.d.mts +1 -1
  1196. package/esm/use-cases/use-case-broadcast.d.mts.map +1 -1
  1197. package/esm/use-cases/use-case-broadcast.mjs +1 -1
  1198. package/esm/use-cases/use-case-broadcast.mjs.map +1 -1
  1199. package/esm/use-cases/use-case-events.d.mts +1 -1
  1200. package/esm/use-cases/use-case-events.d.mts.map +1 -1
  1201. package/esm/use-cases/use-case-events.mjs +1 -1
  1202. package/esm/use-cases/use-case-events.mjs.map +1 -1
  1203. package/esm/use-cases/use-case-pipeline.d.mts +1 -1
  1204. package/esm/use-cases/use-case-pipeline.d.mts.map +1 -1
  1205. package/esm/use-cases/use-case-pipeline.mjs +1 -1
  1206. package/esm/use-cases/use-case-pipeline.mjs.map +1 -1
  1207. package/esm/use-cases/use-case.d.mts +1 -1
  1208. package/esm/use-cases/use-case.d.mts.map +1 -1
  1209. package/esm/use-cases/use-case.errors.d.mts +1 -1
  1210. package/esm/use-cases/use-case.errors.d.mts.map +1 -1
  1211. package/esm/use-cases/use-case.errors.mjs +1 -1
  1212. package/esm/use-cases/use-case.errors.mjs.map +1 -1
  1213. package/esm/use-cases/use-case.mjs +1 -1
  1214. package/esm/use-cases/use-case.mjs.map +1 -1
  1215. package/esm/use-cases/use-cases-registry.d.mts +1 -1
  1216. package/esm/use-cases/use-cases-registry.d.mts.map +1 -1
  1217. package/esm/use-cases/use-cases-registry.mjs +1 -1
  1218. package/esm/use-cases/use-cases-registry.mjs.map +1 -1
  1219. package/esm/utils/app-log.d.mts +6 -6
  1220. package/esm/utils/app-log.d.mts.map +1 -1
  1221. package/esm/utils/app-log.mjs +1 -1
  1222. package/esm/utils/app-log.mjs.map +1 -1
  1223. package/esm/utils/database-log.d.mts +1 -1
  1224. package/esm/utils/database-log.d.mts.map +1 -1
  1225. package/esm/utils/database-log.mjs +1 -1
  1226. package/esm/utils/database-log.mjs.map +1 -1
  1227. package/esm/utils/detect-environment-overrides.mjs +1 -1
  1228. package/esm/utils/detect-environment-overrides.mjs.map +1 -1
  1229. package/esm/utils/environment.d.mts +1 -1
  1230. package/esm/utils/environment.d.mts.map +1 -1
  1231. package/esm/utils/environment.mjs +1 -1
  1232. package/esm/utils/environment.mjs.map +1 -1
  1233. package/esm/utils/framework-vesion.mjs +1 -1
  1234. package/esm/utils/framework-vesion.mjs.map +1 -1
  1235. package/esm/utils/get-localized.d.mts +1 -1
  1236. package/esm/utils/get-localized.d.mts.map +1 -1
  1237. package/esm/utils/get-localized.mjs +1 -1
  1238. package/esm/utils/get-localized.mjs.map +1 -1
  1239. package/esm/utils/is-test-file.mjs +1 -1
  1240. package/esm/utils/is-test-file.mjs.map +1 -1
  1241. package/esm/utils/load-environment.mjs +1 -1
  1242. package/esm/utils/load-environment.mjs.map +1 -1
  1243. package/esm/utils/normalized-path.d.mts +1 -1
  1244. package/esm/utils/normalized-path.d.mts.map +1 -1
  1245. package/esm/utils/normalized-path.mjs +1 -1
  1246. package/esm/utils/normalized-path.mjs.map +1 -1
  1247. package/esm/utils/npm-registry.d.mts +1 -1
  1248. package/esm/utils/npm-registry.d.mts.map +1 -1
  1249. package/esm/utils/npm-registry.mjs +1 -1
  1250. package/esm/utils/npm-registry.mjs.map +1 -1
  1251. package/esm/utils/paths.d.mts +1 -1
  1252. package/esm/utils/paths.d.mts.map +1 -1
  1253. package/esm/utils/paths.mjs +1 -1
  1254. package/esm/utils/paths.mjs.map +1 -1
  1255. package/esm/utils/promise-all-object.d.mts +1 -1
  1256. package/esm/utils/promise-all-object.d.mts.map +1 -1
  1257. package/esm/utils/promise-all-object.mjs +1 -1
  1258. package/esm/utils/promise-all-object.mjs.map +1 -1
  1259. package/esm/utils/queue.d.mts +1 -1
  1260. package/esm/utils/queue.d.mts.map +1 -1
  1261. package/esm/utils/queue.mjs +1 -1
  1262. package/esm/utils/queue.mjs.map +1 -1
  1263. package/esm/utils/recorded-environment-overrides.mjs +1 -1
  1264. package/esm/utils/recorded-environment-overrides.mjs.map +1 -1
  1265. package/esm/utils/report-environment-overrides.mjs +1 -1
  1266. package/esm/utils/report-environment-overrides.mjs.map +1 -1
  1267. package/esm/utils/sleep.d.mts +1 -1
  1268. package/esm/utils/sleep.d.mts.map +1 -1
  1269. package/esm/utils/sleep.mjs +1 -1
  1270. package/esm/utils/sleep.mjs.map +1 -1
  1271. package/esm/utils/sluggable.d.mts +1 -1
  1272. package/esm/utils/sluggable.d.mts.map +1 -1
  1273. package/esm/utils/sluggable.mjs +1 -1
  1274. package/esm/utils/sluggable.mjs.map +1 -1
  1275. package/esm/utils/to-json.d.mts +1 -1
  1276. package/esm/utils/to-json.d.mts.map +1 -1
  1277. package/esm/utils/to-json.mjs +1 -1
  1278. package/esm/utils/to-json.mjs.map +1 -1
  1279. package/esm/utils/types.d.mts +1 -1
  1280. package/esm/utils/types.d.mts.map +1 -1
  1281. package/esm/utils/urls.d.mts +1 -1
  1282. package/esm/utils/urls.d.mts.map +1 -1
  1283. package/esm/utils/urls.mjs +1 -1
  1284. package/esm/utils/urls.mjs.map +1 -1
  1285. package/esm/utils/version-compare.d.mts +1 -1
  1286. package/esm/utils/version-compare.d.mts.map +1 -1
  1287. package/esm/utils/version-compare.mjs +1 -1
  1288. package/esm/utils/version-compare.mjs.map +1 -1
  1289. package/esm/validation/database/exists-except-current-id.d.mts +1 -1
  1290. package/esm/validation/database/exists-except-current-id.d.mts.map +1 -1
  1291. package/esm/validation/database/exists-except-current-id.mjs +1 -1
  1292. package/esm/validation/database/exists-except-current-id.mjs.map +1 -1
  1293. package/esm/validation/database/exists-except-current-user.d.mts +1 -1
  1294. package/esm/validation/database/exists-except-current-user.d.mts.map +1 -1
  1295. package/esm/validation/database/exists-except-current-user.mjs +1 -1
  1296. package/esm/validation/database/exists-except-current-user.mjs.map +1 -1
  1297. package/esm/validation/database/types.d.mts +1 -1
  1298. package/esm/validation/database/types.d.mts.map +1 -1
  1299. package/esm/validation/database/unique-except-current-id.d.mts +1 -1
  1300. package/esm/validation/database/unique-except-current-id.d.mts.map +1 -1
  1301. package/esm/validation/database/unique-except-current-id.mjs +1 -1
  1302. package/esm/validation/database/unique-except-current-id.mjs.map +1 -1
  1303. package/esm/validation/database/unique-except-current-user.d.mts +1 -1
  1304. package/esm/validation/database/unique-except-current-user.d.mts.map +1 -1
  1305. package/esm/validation/database/unique-except-current-user.mjs +1 -1
  1306. package/esm/validation/database/unique-except-current-user.mjs.map +1 -1
  1307. package/esm/validation/file/file.d.mts +1 -1
  1308. package/esm/validation/file/file.d.mts.map +1 -1
  1309. package/esm/validation/file/file.mjs +1 -1
  1310. package/esm/validation/file/file.mjs.map +1 -1
  1311. package/esm/validation/init.mjs +1 -1
  1312. package/esm/validation/init.mjs.map +1 -1
  1313. package/esm/validation/plugins/database-plugin.mjs +1 -1
  1314. package/esm/validation/plugins/database-plugin.mjs.map +1 -1
  1315. package/esm/validation/plugins/file-plugin.mjs +1 -1
  1316. package/esm/validation/plugins/file-plugin.mjs.map +1 -1
  1317. package/esm/validation/plugins/localized-plugin.mjs +1 -1
  1318. package/esm/validation/plugins/localized-plugin.mjs.map +1 -1
  1319. package/esm/validation/types.d.mts +1 -1
  1320. package/esm/validation/types.d.mts.map +1 -1
  1321. package/esm/validation/validateAll.mjs +1 -1
  1322. package/esm/validation/validateAll.mjs.map +1 -1
  1323. package/esm/validation/validators/file-validator.d.mts +44 -41
  1324. package/esm/validation/validators/file-validator.d.mts.map +1 -1
  1325. package/esm/validation/validators/file-validator.mjs +4 -1
  1326. package/esm/validation/validators/file-validator.mjs.map +1 -1
  1327. package/esm/vite/lower-stage3-decorators.d.mts +1 -1
  1328. package/esm/vite/lower-stage3-decorators.d.mts.map +1 -1
  1329. package/esm/vite/lower-stage3-decorators.mjs +1 -1
  1330. package/esm/vite/lower-stage3-decorators.mjs.map +1 -1
  1331. package/esm/warlock-config/bundle-config.mjs +148 -0
  1332. package/esm/warlock-config/bundle-config.mjs.map +1 -0
  1333. package/esm/warlock-config/default-configurations.mjs +1 -1
  1334. package/esm/warlock-config/default-configurations.mjs.map +1 -1
  1335. package/esm/warlock-config/define-config.d.mts +1 -1
  1336. package/esm/warlock-config/define-config.d.mts.map +1 -1
  1337. package/esm/warlock-config/define-config.mjs +1 -1
  1338. package/esm/warlock-config/define-config.mjs.map +1 -1
  1339. package/esm/warlock-config/index.d.mts +1 -1
  1340. package/esm/warlock-config/index.mjs +1 -1
  1341. package/esm/warlock-config/normalize-build-config.mjs +1 -1
  1342. package/esm/warlock-config/normalize-build-config.mjs.map +1 -1
  1343. package/esm/warlock-config/types.d.mts +1 -1
  1344. package/esm/warlock-config/types.d.mts.map +1 -1
  1345. package/esm/warlock-config/warlock-config.manager.d.mts +32 -7
  1346. package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
  1347. package/esm/warlock-config/warlock-config.manager.mjs +94 -18
  1348. package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
  1349. package/esm/warlock-config/warn-deprecated-config.mjs +1 -1
  1350. package/esm/warlock-config/warn-deprecated-config.mjs.map +1 -1
  1351. package/llms-full.txt +306 -249
  1352. package/llms.txt +42 -42
  1353. package/package.json +20 -13
  1354. package/skills/README.md +39 -39
  1355. package/skills/add-connector/SKILL.md +4 -4
  1356. package/skills/benchmark-code/SKILL.md +3 -3
  1357. package/skills/build-restful/SKILL.md +5 -5
  1358. package/skills/build-url/SKILL.md +7 -7
  1359. package/skills/configure-app/SKILL.md +30 -8
  1360. package/skills/create-controller/SKILL.md +12 -8
  1361. package/skills/create-module/SKILL.md +9 -9
  1362. package/skills/define-resource/SKILL.md +4 -4
  1363. package/skills/encrypt-data/SKILL.md +7 -7
  1364. package/skills/generate-openapi/SKILL.md +5 -5
  1365. package/skills/hash-password/SKILL.md +8 -8
  1366. package/skills/health-checks/SKILL.md +8 -6
  1367. package/skills/lower-stage3-decorators/SKILL.md +4 -4
  1368. package/skills/process-image/SKILL.md +5 -5
  1369. package/skills/register-route/SKILL.md +16 -6
  1370. package/skills/request-memo/SKILL.md +4 -4
  1371. package/skills/request-tracing/SKILL.md +6 -6
  1372. package/skills/resolve-path/SKILL.md +6 -6
  1373. package/skills/retry-operation/SKILL.md +4 -4
  1374. package/skills/run-app/SKILL.md +20 -13
  1375. package/skills/send-mail/SKILL.md +3 -3
  1376. package/skills/send-response/SKILL.md +16 -8
  1377. package/skills/store-file/SKILL.md +9 -5
  1378. package/skills/test-http/SKILL.md +5 -5
  1379. package/skills/test-service/SKILL.md +5 -5
  1380. package/skills/update-packages/SKILL.md +6 -6
  1381. package/skills/upload-file/SKILL.md +7 -7
  1382. package/skills/use-app-context/SKILL.md +7 -7
  1383. package/skills/use-localization/SKILL.md +6 -6
  1384. package/skills/use-middleware/SKILL.md +8 -8
  1385. package/skills/use-model-transformers/SKILL.md +6 -6
  1386. package/skills/use-repository/SKILL.md +7 -7
  1387. package/skills/use-request-locals/SKILL.md +4 -4
  1388. package/skills/validate-input/SKILL.md +7 -7
  1389. package/skills/warlock-conventions/SKILL.md +6 -6
  1390. package/skills/warlock-doctor/SKILL.md +5 -5
  1391. package/skills/warlock-routes/SKILL.md +6 -6
  1392. package/skills/wire-socket/SKILL.md +4 -4
  1393. package/skills/write-cli-command/SKILL.md +6 -6
  1394. package/skills/write-middleware/SKILL.md +8 -8
  1395. package/skills/write-seeder/SKILL.md +5 -5
  1396. package/skills/write-use-case/SKILL.md +3 -3
package/CHANGELOG.md CHANGED
@@ -6,6 +6,77 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  > ⚠ **Versioning: `@warlock.js/*` does not follow SemVer strictly — breaking changes may ship in a minor.** This is a deliberate decision, not an oversight: the framework is pre-adoption and the cost of a major per behaviour fix currently outweighs the benefit. **Pin an exact version or a tilde range (`~4.13.0`) if you need to opt into changes rather than receive them.** Every breaking change is marked **BREAKING** in its entry and summarised in an _Upgrading_ section at the top of the release. **This policy will change once the framework has consumers beyond its author.**
8
8
 
9
+ ## 5.30.0 - 2026-10-16
10
+
11
+ ### Upgrading
12
+
13
+ - **BREAKING (only for a custom log channel that reads `context.request` or `context.response`):** request log entries now carry a plain `RequestLogSnapshot` instead of the `Request`/`Response` instances. Read the fields you need from the snapshot, or call `request.toLogSnapshot()` in your own log calls.
14
+ - **The image-variant cache moves to a new layout (FW-10):** derivatives cached by 5.29 under `<cacheDirectory>/<2 hex>/<hash>.<ext>` are no longer read; each is re-rendered on its next request. Delete those old two-level files once (or call `purgeImageVariants()`) to reclaim the space.
15
+
16
+ ### Added
17
+
18
+ - **`request.signal`**: an `AbortSignal` that aborts when the client disconnects before the response finishes (not when the request body finishes reading, never on normal completion); its listener is attached on first access and removed when the response closes (WR-012).
19
+ - **Stream backpressure**: `response.stream()`'s controller gains `write(data)` (sends, then waits until the client can take more; `false` once it is gone), `drain()`, `backpressured`, `signal` (aborted on client disconnect, not on `end()`) and `onDisconnect(fn)`, matching `response.sse()` (WR-006).
20
+ - **SSE backpressure**: `sse.write(event, data, id?)` sends and waits until the client can take more (`false` once it is gone), plus `sse.drain()`, `sse.backpressured` and `sse.signal` (aborted on disconnect) (WR-006).
21
+ - **`http.serverOptions` is typed** (`HttpServerOptions`), including Node's native `http` options such as `serverOptions.http.maxHeaderSize`; it was already forwarded to Fastify but the config type could not express it (WR-005).
22
+ - **`@warlock.js/core/errors`**: a side-effect-free subpath with `HttpError` and its subclasses (`BadRequestError`, `ResourceNotFoundError`, …). A standalone helper or worker can import it without bundling Cascade, Cache or the MongoDB driver; the classes are the same ones the root exports, so `instanceof` holds across both (WR-017).
23
+ - **`http.errorMapper`**: map errors that are not an `HttpError` to `{ status, message?, payload? }` (or an `HttpError`), so domain errors shared with non-HTTP processes need not extend Core. A mapped 5xx stays opaque unless the mapper sets a message; a mapper that throws is logged and ignored (WR-018).
24
+ - **Per-route request logging policy**: `logging: { body?: boolean, query?: boolean }` on a route, with app-wide defaults under `http.logging` (plus `redactQueryParams`). It is applied before any log entry is built, so a schema- or middleware-rejected body never reaches a log channel (WR-003).
25
+ - **`request.toLogSnapshot()`**, `buildRequestLogSnapshot()` and `redactUrlCredentials()`: the bounded, plain-data view of a request that log entries now carry (WR-003).
26
+ - **`purgeImageVariants(path?, { disk? })`** removes one file's cached image derivatives, or a disk's whole derivative cache (FW-10).
27
+ - **`createUploadedFileController({ disk })`** serves the originals and variants of any local disk, and **`resolveImageVariant({ disk?, path, variant, format? })`** resolves (and renders on a miss) one variant for an app's own route, e.g. a private disk behind auth. `uploadedFileController` is `createUploadedFileController()` (FW-11).
28
+ - **Shared rate limits:** `http.rateLimit.store: "cache"` counts in `@warlock.js/cache`, so every process on a shared driver (Redis, Postgres) shares the limit; `middleware.rateLimit()` follows it or takes its own `store` and a stable `name`. A `@fastify/rate-limit` store class can be passed as `store` too. Windows are fixed and clock-aligned. Each route with its own `rateLimit` counts separately (namespaced by method and URL from the plugin's `routeInfo`, hashed so `/users/:id` and `/users/id` never merge). A cache outage fails open on both limiters (`skipOnError` defaults to `true` for this store) and is logged at most once a minute. The `null` and `file` cache drivers are refused with `UnsupportedRateLimitDriverError` (one stores nothing, the other never sweeps expired windows and does not share increments between processes) (FW-14).
29
+
30
+ ### Changed
31
+
32
+ - **`response.stream()` no longer keeps rendered chunks.** `response.body` after `end()` holds the last `retainChunks` chunks written by `send()`, `write()` or `render()` (`response.stream(type, { retainChunks })`, default 0); it used to hold every `render()` chunk (WR-006).
33
+ - `response.stream()`: after the client disconnects, `send()`/`render()` are silent no-ops and `ended` is `true` (they used to write to the closed socket); `send()` after `end()` still throws.
34
+ - **`@fastify/static` is only loaded when there is something to serve** — at least one `router.directory()`, or an existing public folder (`storage.publicRoot`, which now also accepts `false` to turn it off). Its directory-listing module calls `os.cpus()` at load, which cost a measured ~0.4–0.5 s of cold start in an app that served neither (WR-027). With no public folder, `reply.sendFile` is no longer decorated by that plugin; `response.sendFile()` is unaffected.
35
+ - `@warlock.js/core/errors` also resolves inside the framework repository (a root `errors/index.ts` re-export, not published), so workspace packages and tests can import it by its package name (WR-017).
36
+ - **`response.sse()` no longer keeps every sent event.** `response.body` after `end()` holds the last `retainEvents` events (`response.sse({ retainEvents })`, default 0), so long-lived streams no longer grow with their history (WR-006).
37
+ - **BREAKING (only for a custom log channel that reads `context.request`/`context.response`):** **request log entries carry a `RequestLogSnapshot`, not the `Request`/`Response` instances** (`context.request` is `{ id, method, url, route, name, ip, userAgent, query?, body? }`; `response.log` adds `{ statusCode }`). Native request/reply graphs no longer reach log channels, and credential-bearing query values (`secret`, `token`, `apiKey`, `signature`, `code`, `X-Amz-*`, …) are masked in the logged URL (WR-003).
38
+ - **`warlock add notifications` writes a smaller, convention-following module** (FW-09): `models/notification/` (model with a `NotificationResource`, migration), `resources/`, a validated `schema/list-notifications.schema.ts` (`limit` capped at 50, no `request.all()`), a guarded `types/notifications-request.type.ts`, `services/`, `utils/locales.json`, one controller per file for list / unread-count / mark-read / mark-all-read registered through `router.route()`, a commented `gate()` permission hook, and a 401 spec per controller when the app has the test feature. The clear-all and delete endpoints are no longer generated. Apps that already have a notification model (5.29 layout included) are skipped, and a freshly ejected `config/notifications.ts` then imports the 5.29 model path. In an app that already has `src/app/notifications`, no second model or migration is added, existing files are kept (and listed), and `notFound` is merged into an existing `utils/locales.json`. The mark-read controller turns a numeric `:id` into a number (integer ids on the default MongoDB stack) and keeps other ids as strings; the list query drops unknown keys such as a cache-busting `_` instead of rejecting them.
39
+ - Image derivatives are cached per source (`<cacheDirectory>/<2 hex>/<sourceKey>/<size-mtime>/<hash>.<ext>`). Deleting or moving a file through a local disk (`delete`, `deleteMany`, `move`, and `deleteDirectory` for every file under it) removes its derivatives, and a rewritten source's old derivatives are pruned once a new one is written, so the cache no longer grows forever. Pruning re-checks the source first, so a request that read an older version never deletes the newer version's derivatives, and a derivative pruned mid-request is rendered again instead of answering 500 (FW-10).
40
+ - Concurrent variant requests for the same file on two disks (a mirror copied with its mtime) no longer share one generation, which left the second target unwritten and answered 500 (FW-11).
41
+ - A warning is logged once when the image-variant cache sits inside the public folder: a configured `uploads.images.cacheDirectory` is shared by every local disk, so private derivatives there would be publicly served.
42
+ - `storage.use(name)` (and `StorageManagerContract.use`) is typed as `ScopedStorage`, the class it returns, so `deleteDirectory`, `copyDirectory`, `moveDirectory`, `emptyDirectory`, `putFromUrl`, `prepend` and `append` type-check without a cast (FW-12).
43
+ - `middleware.rateLimit()` returns an async middleware (its in-memory path still completes synchronously).
44
+ - The `run-app` skill lists where each pnpm version reads build approvals (`allowBuilds` on 10.26+, workspace `onlyBuiltDependencies` on 10.5–10.25, `package.json` before 10.5); it used to say only `allowBuilds` works.
45
+
46
+ ### Fixed
47
+
48
+ - Graceful shutdown no longer waits out its timeout on keep-alive connections whose request finished during the drain: in-flight responses answer `Connection: close` and connections are closed as they go idle (default `forceCloseConnections: "idle"`), so later connectors still shut down. Active responses are never cut short (WR-014).
49
+ - A `response.sse()` or `response.stream()` started after graceful shutdown began keeps the drain's `Connection: close`; its own `Connection: keep-alive` used to override it and hold `close()` until the shutdown timeout.
50
+ - `response.sse()` removes line breaks and NUL from event names and ids, and writes a multi-line `comment()` as one comment line per line, so values built from user input cannot inject SSE fields or events.
51
+ - An `onDisconnect` handler on `response.sse()` or `response.stream()` that throws is logged and no longer crashes the process or skips the handlers after it.
52
+ - `warlock.config.ts` loads when it imports local TypeScript without an extension (`./src/connectors/local`) or through a tsconfig `paths` alias, on Node without native TypeScript and with native type stripping alike. The fallback bundles the config's local graph with esbuild, keeps packages external (one `BaseConnector`/container identity), runs the config once, rethrows its own errors unchanged, keeps each inlined module's `import.meta.url`, and removes its temp file (WR-004).
53
+ - `v.file()` rule methods (`maxSize`, `image`, `accept`, `mimeType`, …) return `this`, so the `UploadedFile` output type survives the chain; `saveTo()` is typed as a `string` output (WR-020).
54
+ - The dev server and the HTTP test server register module `src/app/<module>/utils/locales.json` dictionaries at boot; they were left out of the boot file set, so `t()` printed raw keys until the file was edited (FW-02).
55
+ - The HTTP test server no longer keeps Vitest's main process alive after teardown: the loader-hook `MessagePort` is unreferenced except while a version-bump flush waits for its acknowledgement (FW-05).
56
+ - A quoted config key (`"machine-thumb"`, `'single-quoted'`) is written to `.warlock/typings/config.d.ts` without its quotes, so the generated file stays valid TypeScript; computed keys are skipped, and a quoted storage driver name is no longer quoted twice (FW-06). The typings manifest now records its generator version, and a manifest written by an older version is discarded, so a `config.d.ts` broken by 5.29 is regenerated on the first boot after upgrading instead of only when a config file changes.
57
+ - The circular-dependency check no longer reports a file as importing itself because a comment mentions `import("./same-file")`: the regex fallback ignores comments and self imports are not dependency edges (FW-13). Comments are found with the TypeScript parser, so a regex literal such as `/\/*$/` or `//` inside JSX text is never mistaken for one and the imports after it are kept. A pure `export type { X } from` re-export adds no dependency edge on either parsing path.
58
+ - `warlock add web`'s `src/web/root.tsx` stub notes that `<Head />` renders the viewport tag (`metadata.viewport` changes or disables it) and does not hand-write a second one (FW-03).
59
+ - Mail logs no longer print recipient addresses: send, development, test-mode, partial-rejection and error lines show `m***@example.com` (FW-04). `MailResult` and a thrown `MailError` still carry the real addresses.
60
+ - `http.rateLimit` had no way to share counts between processes except an ioredis client, which the node-redis connection of `@warlock.js/cache` cannot provide (FW-14).
61
+ - Request log snapshots mask credential query parameters (`code`, `signature`, `sig`, `X-Amz-*`, `X-Goog-*`, the logger's secret keys and `http.logging.redactQueryParams`) in the parsed `query` too, not only in `url`; OAuth authorization codes no longer reach log lines. New `redactQueryCredentials()`.
62
+ - `warlock.config.ts` fallback: a catch-all tsconfig `paths` pattern (`"*": ["./types/*"]`) no longer inlines packages into the config bundle; an alias is inlined only when it resolves outside `node_modules`.
63
+ - `warlock.config.ts` fallback: `import.meta.url`/`dirname`/`filename` are replaced only where they are real expressions, so the same words inside a string or comment no longer break or alter the bundled config.
64
+ - `warlock.config.ts` fallback runs only for the config's own unresolved relative or aliased imports (not for a package that is not installed, or a module missing inside `node_modules`), and also when native type stripping refuses the TypeScript (`ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`, `ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING`). A loading error in the bundled config names `warlock.config.ts` instead of the temporary module.
65
+ - `warlock add image` on pnpm 9 and 10.0–10.4 no longer creates a settings-only `pnpm-workspace.yaml` (`packages field missing or empty`): the sharp approval goes where the installed pnpm reads it (`package.json` `pnpm.onlyBuiltDependencies` before 10.5, the workspace's `onlyBuiltDependencies` on 10.5–10.25, `allowBuilds` from 10.26). Inside a parent pnpm workspace no per-app file is written.
66
+
67
+ ## 5.29.0 - 2026-10-01
68
+
69
+ ### Added
70
+
71
+ - **`nullable(Resource)`**: a resource that may be `null`, accepted as a `defineResource` field and in `responseSchema` bodies. A field outputs `null` (not omitted) for null/undefined input; `ResourceOutput`/`ResponseBodyOutput` type it as `Output | null`; OpenAPI documents it as `oneOf [resource, null]`; route types emit `… | null` (FORMAI).
72
+ - **`[Resource]` list fields in `defineResource`**: each item is mapped through the resource, `[]` stays `[]`, and the output type is an array (the same syntax `responseSchema` already accepts). Plain `Resource` fields behave as before (FORMAI).
73
+
74
+ ### Fixed
75
+
76
+ - Cast strings inside an `arrayOf({...})` item schema (`"number"`, `"string?"`, `"date"`, `"string[]"`) were silently dropped from the resource output; they are now cast like top-level fields, matching the output type.
77
+ - `parseLocaleDictionary()` accepts `defaultNamespace` as a function, called only when the file declares no `$group`, so a folder that cannot name a namespace never fails a file with an explicit `$group`.
78
+ - `warlock dev` publishes each `src/app` file it reloads (`{ url, generation }`, after the loader hook confirms the bump) through the `development.appModules` container key, so `@warlock.js/web` can load the same module instance in page loaders.
79
+
9
80
  ## 5.28.0 - 2026-10-01
10
81
 
11
82
  ### Added
@@ -3,7 +3,7 @@ import { DataSource } from "@warlock.js/cascade";
3
3
  import { FastifyInstance } from "fastify";
4
4
  import { Server } from "socket.io";
5
5
 
6
- //#region ../core/src/application/app.d.ts
6
+ //#region ../../packages/core/src/application/app.d.ts
7
7
  type RuntimeApplication = {
8
8
  socket: Server | undefined;
9
9
  http: FastifyInstance | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.mts","names":[],"sources":["../../../../../../../core/src/application/app.ts"],"mappings":";;;;;;KAMK,kBAAA;EACH,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,eAAA;EACN,MAAA,EAAQ,MAAA;EACR,QAAA,EAAU,UAAA;AAAA;AAAA,cAGC,GAAA,EAAK,kBAkCjB"}
1
+ {"version":3,"file":"app.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/application/app.ts"],"mappings":";;;;;;KAMK,kBAAA;EACH,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,eAAA;EACN,MAAA,EAAQ,MAAA;EACR,QAAA,EAAU,UAAA;AAAA;AAAA,cAGC,GAAA,EAAK,kBAkCjB"}
@@ -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":";;;;;;;;AAwDA,MAAM,iBAAiB;AASvB,IAAa,cAAb,MAAyB;;mCAIY,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,OAAO,IAAI,GAAI;;;gBAUxD;;;uBAWuB,CAAC;;;mBAOrB;;;wBAMsB,CAAC;;;sBAcpB;;;2BAKyB,CAAC;;;;;CAKxD,WAAkB,UAAU;EAC1B,OAAO,oBAAoB;CAC7B;;;;CAKA,OAAc,mBAAmB,UAA2B;EAC1D,KAAK,kBAAkB;CACzB;;;;;;CAOA,WAAkB,WAAoB;EACpC,OAAO,KAAK;CACd;;;;;;CAOA,OAAc,cAAc,MAAoB;EAC9C,KAAK,aAAa;CACpB;;;;;;;;;;;;;;;CAgBA,OAAc,WAAW,UAA8B;EACrD,IAAI,KAAK,UAAU,KAAK,aAAa;GACnC,MAAM,UAAU,KAAK;GACrB,AAAK,KAAK,gBAAgB,UAAU,OAAO;GAE3C;EACF;EAEA,KAAK,cAAc,KAAK,QAAQ;CAClC;;;;;CAMA,OAAc,aAAmC;EAC/C,IAAI,KAAK,UAAU,KAAK,aACtB,OAAO,QAAQ,QAAQ,KAAK,WAAW;EAGzC,OAAO,IAAI,SAAsB,YAAY;GAC3C,KAAK,YAAY,YAAY,QAAQ,OAAO,CAAC;EAC/C,CAAC;CACH;;;;;;;;;;;;;;;CAgBA,OAAc,WAAW,SAA4B;EACnD,IAAI,KAAK,QACP;EAGF,KAAK,SAAS;EACd,KAAK,cAAc;EAEnB,eAAe;GACb,MAAM;GACN;GACA,KAAK,QAAQ;GACb,qBAAI,IAAI,KAAK,EAAC,CAAC,YAAY;GAC3B,aAAa,QAAQ;GACrB,iBAAiB,QAAQ;GACzB,gBAAgB,QAAQ;GACxB,MAAM,KAAK;GACX,OAAO,CAAC,GAAG,KAAK,KAAK;EACvB,CAAC;EAED,MAAM,YAAY,KAAK;EACvB,KAAK,gBAAgB,CAAC;EAEtB,KAAK,MAAM,YAAY,WACrB,AAAK,KAAK,gBAAgB,UAAU,OAAO;CAE/C;;;;;CAMA,aAAqB,gBACnB,UACA,SACe;EACf,IAAI;GACF,MAAM,SAAS,OAAO;EACxB,SAAS,OAAO;GACd,IAAI,MAAM,eAAe,mBAAmB,KAAc;EAC5D;CACF;;;;;;;;;;;;;;;;;;;;;;;;CAyBA,OAAc,eAAe,WAAgC;EAC3D,IAAI,KAAK,WACP,MAAM,IAAI,MACR,iPAIF;EAGF,KAAK,eAAe,KAAK,SAAS;CACpC;;;;;;;;;;;;;;;;;;CAmBA,aAAoB,uBAAsC;EACxD,IAAI,KAAK,WACP;EAGF,KAAK,YAAY;EAEjB,MAAM,aAAa,KAAK;EACxB,KAAK,iBAAiB,CAAC;EAEvB,KAAK,MAAM,aAAa,YACtB,IAAI;GACF,MAAM,UAAU;EAClB,SAAS,OAAO;GAId,MAAM,IAAI,eACR,sBAJW,UAAU,QAAQ,cAIF,mBAHf,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAGb,uHAGpD,EAAE,OAAO,MAAM,CACjB;EACF;CAEJ;;;;;;CAOA,WAAkB,iBAA0B;EAC1C,OAAO,KAAK;CACd;;;;;;;;;;;;CAaA,OAAc,WAAW,UAAkC;EACzD,IAAI,KAAK,cAAc;GACrB,AAAK,KAAK,oBAAoB,QAAQ;GAEtC;EACF;EAEA,KAAK,kBAAkB,KAAK,QAAQ;CACtC;;;;;;;;;;CAWA,aAAoB,mBAAkC;EACpD,IAAI,KAAK,cACP;EAGF,KAAK,eAAe;EAEpB,MAAM,YAAY,KAAK,kBAAkB,QAAQ;EACjD,KAAK,oBAAoB,CAAC;EAE1B,KAAK,MAAM,YAAY,WACrB,MAAM,KAAK,oBAAoB,QAAQ;CAE3C;;;;;CAMA,aAAqB,oBAAoB,UAA2C;EAClF,IAAI;GACF,MAAM,SAAS;EACjB,SAAS,OAAO;GACd,IAAI,MAAM,eAAe,qBAAqB,KAAc;EAC9D;CACF;;;;CAKA,WAAkB,SAAiB;EACjC,OAAO,QAAQ,OAAO,IAAI;CAC5B;;;;CAKA,WAAkB,cAA2B;EAC3C,OAAO,YAAY;CACrB;;;;CAKA,OAAc,eAAe,KAAkB;EAC7C,eAAe,GAAG;CACpB;;;;CAKA,WAAkB,eAAwB;EACxC,OAAO,KAAK,gBAAgB;CAC9B;;;;CAKA,WAAkB,gBAAyB;EACzC,OAAO,KAAK,gBAAgB;CAC9B;;;;CAKA,WAAkB,SAAkB;EAClC,OAAO,KAAK,gBAAgB;CAC9B;;;;;;CAOA,WAAkB,QAA8B;EAC9C,OAAO,SAAS;CAClB;;;;;CAMA,WAAkB,QAAyC;EACzD,OAAO,SAAS;CAClB;;;;;;;;;CAUA,OAAc,QAAQ,MAAwB;EAC5C,OAAO,QAAQ,IAAI;CACrB;;;;CAKA,WAAkB,WAAmB;EACnC,OAAO,SAAS;CAClB;;;;CAKA,WAAkB,UAAkB;EAClC,OAAO,QAAQ;CACjB;;;;CAKA,WAAkB,UAAkB;EAClC,OAAO,QAAQ;CACjB;;;;CAKA,WAAkB,cAAsB;EACtC,OAAO,YAAY;CACrB;;;;CAKA,WAAkB,cAAsB;EACtC,OAAO,YAAY;CACrB;;;;CAKA,WAAkB,aAAqB;EACrC,OAAO,WAAW;CACpB;AACF"}
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":";;;;;;;;AAwDA,MAAM,iBAAiB;AASvB,IAAa,cAAb,MAAyB;;mCAIY,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,OAAO,IAAI,GAAI;;;gBAUxD;;;uBAWuB,CAAC;;;mBAOrB;;;wBAMsB,CAAC;;;sBAcpB;;;2BAKyB,CAAC;;;;;CAKxD,WAAkB,UAAU;EAC1B,OAAO,oBAAoB;CAC7B;;;;CAKA,OAAc,mBAAmB,UAA2B;EAC1D,KAAK,kBAAkB;CACzB;;;;;;CAOA,WAAkB,WAAoB;EACpC,OAAO,KAAK;CACd;;;;;;CAOA,OAAc,cAAc,MAAoB;EAC9C,KAAK,aAAa;CACpB;;;;;;;;;;;;;;;CAgBA,OAAc,WAAW,UAA8B;EACrD,IAAI,KAAK,UAAU,KAAK,aAAa;GACnC,MAAM,UAAU,KAAK;GACrB,AAAK,KAAK,gBAAgB,UAAU,OAAO;GAE3C;EACF;EAEA,KAAK,cAAc,KAAK,QAAQ;CAClC;;;;;CAMA,OAAc,aAAmC;EAC/C,IAAI,KAAK,UAAU,KAAK,aACtB,OAAO,QAAQ,QAAQ,KAAK,WAAW;EAGzC,OAAO,IAAI,SAAsB,YAAY;GAC3C,KAAK,YAAY,YAAY,QAAQ,OAAO,CAAC;EAC/C,CAAC;CACH;;;;;;;;;;;;;;;CAgBA,OAAc,WAAW,SAA4B;EACnD,IAAI,KAAK,QACP;EAGF,KAAK,SAAS;EACd,KAAK,cAAc;EAEnB,eAAe;GACb,MAAM;GACN;GACA,KAAK,QAAQ;GACb,qBAAI,IAAI,KAAK,EAAC,CAAC,YAAY;GAC3B,aAAa,QAAQ;GACrB,iBAAiB,QAAQ;GACzB,gBAAgB,QAAQ;GACxB,MAAM,KAAK;GACX,OAAO,CAAC,GAAG,KAAK,KAAK;EACvB,CAAC;EAED,MAAM,YAAY,KAAK;EACvB,KAAK,gBAAgB,CAAC;EAEtB,KAAK,MAAM,YAAY,WACrB,AAAK,KAAK,gBAAgB,UAAU,OAAO;CAE/C;;;;;CAMA,aAAqB,gBACnB,UACA,SACe;EACf,IAAI;GACF,MAAM,SAAS,OAAO;EACxB,SAAS,OAAO;GACd,IAAI,MAAM,eAAe,mBAAmB,KAAc;EAC5D;CACF;;;;;;;;;;;;;;;;;;;;;;;;CAyBA,OAAc,eAAe,WAAgC;EAC3D,IAAI,KAAK,WACP,MAAM,IAAI,MACR,iPAIF;EAGF,KAAK,eAAe,KAAK,SAAS;CACpC;;;;;;;;;;;;;;;;;;CAmBA,aAAoB,uBAAsC;EACxD,IAAI,KAAK,WACP;EAGF,KAAK,YAAY;EAEjB,MAAM,aAAa,KAAK;EACxB,KAAK,iBAAiB,CAAC;EAEvB,KAAK,MAAM,aAAa,YACtB,IAAI;GACF,MAAM,UAAU;EAClB,SAAS,OAAO;GAId,MAAM,IAAI,eACR,sBAJW,UAAU,QAAQ,cAIF,mBAHf,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAGb,uHAGpD,EAAE,OAAO,MAAM,CACjB;EACF;CAEJ;;;;;;CAOA,WAAkB,iBAA0B;EAC1C,OAAO,KAAK;CACd;;;;;;;;;;;;CAaA,OAAc,WAAW,UAAkC;EACzD,IAAI,KAAK,cAAc;GACrB,AAAK,KAAK,oBAAoB,QAAQ;GAEtC;EACF;EAEA,KAAK,kBAAkB,KAAK,QAAQ;CACtC;;;;;;;;;;CAWA,aAAoB,mBAAkC;EACpD,IAAI,KAAK,cACP;EAGF,KAAK,eAAe;EAEpB,MAAM,YAAY,KAAK,kBAAkB,QAAQ;EACjD,KAAK,oBAAoB,CAAC;EAE1B,KAAK,MAAM,YAAY,WACrB,MAAM,KAAK,oBAAoB,QAAQ;CAE3C;;;;;CAMA,aAAqB,oBAAoB,UAA2C;EAClF,IAAI;GACF,MAAM,SAAS;EACjB,SAAS,OAAO;GACd,IAAI,MAAM,eAAe,qBAAqB,KAAc;EAC9D;CACF;;;;CAKA,WAAkB,SAAiB;EACjC,OAAO,QAAQ,OAAO,IAAI;CAC5B;;;;CAKA,WAAkB,cAA2B;EAC3C,OAAO,YAAY;CACrB;;;;CAKA,OAAc,eAAe,KAAkB;EAC7C,eAAe,GAAG;CACpB;;;;CAKA,WAAkB,eAAwB;EACxC,OAAO,KAAK,gBAAgB;CAC9B;;;;CAKA,WAAkB,gBAAyB;EACzC,OAAO,KAAK,gBAAgB;CAC9B;;;;CAKA,WAAkB,SAAkB;EAClC,OAAO,KAAK,gBAAgB;CAC9B;;;;;;CAOA,WAAkB,QAA8B;EAC9C,OAAO,SAAS;CAClB;;;;;CAMA,WAAkB,QAAyC;EACzD,OAAO,SAAS;CAClB;;;;;;;;;CAUA,OAAc,QAAQ,MAAwB;EAC5C,OAAO,QAAQ,IAAI;CACrB;;;;CAKA,WAAkB,WAAmB;EACnC,OAAO,SAAS;CAClB;;;;CAKA,WAAkB,UAAkB;EAClC,OAAO,QAAQ;CACjB;;;;CAKA,WAAkB,UAAkB;EAClC,OAAO,QAAQ;CACjB;;;;CAKA,WAAkB,cAAsB;EACtC,OAAO,YAAY;CACrB;;;;CAKA,WAAkB,cAAsB;EACtC,OAAO,YAAY;CACrB;;;;CAKA,WAAkB,aAAqB;EACrC,OAAO,WAAW;CACpB;AACF"}
@@ -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"}