@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
@@ -1,10 +1,24 @@
1
+ import { StorageDriverName } from "../../storage/types.mjs";
1
2
  import { RequestHandler } from "../../router/types.mjs";
2
- //#region ../core/src/http/uploads/uploaded-file.controller.d.ts
3
+ //#region ../../packages/core/src/http/uploads/uploaded-file.controller.d.ts
4
+ /**
5
+ * Options for {@link createUploadedFileController}
6
+ */
7
+ type UploadedFileControllerOptions = {
8
+ /**
9
+ * Local disk to serve from; the default disk when omitted. A private disk
10
+ * should be served from a route that checks access first.
11
+ */
12
+ disk?: StorageDriverName;
13
+ };
3
14
  /**
4
15
  * Serves local uploads, and bounded on-demand variants of the images among them.
5
16
  *
6
17
  * ```ts
7
18
  * router.get("/uploads/*", uploadedFileController);
19
+ * router.get("/invoices/*", createUploadedFileController({ disk: "private" }), {
20
+ * middleware: [authMiddleware()],
21
+ * });
8
22
  * ```
9
23
  *
10
24
  * - `GET /uploads/<path>` sends the original file with a one-year cache.
@@ -12,13 +26,17 @@ import { RequestHandler } from "../../router/types.mjs";
12
26
  * rendered from a variant named in `uploads.images.variants`. No other query
13
27
  * key is accepted, so a client can never ask for an arbitrary size.
14
28
  *
15
- * The path must stay inside the storage root (after symlinks are resolved) and
29
+ * The path must stay inside the disk root (after symlinks are resolved) and
16
30
  * outside the variant cache; anything else is a 404, the same answer a missing
17
- * file gets. Derivatives are cached on disk under a sha256 of the source path,
18
- * size, mtime, variant and format, written atomically, generated once per key
19
- * even under concurrent requests, and sent with an immutable cache and an ETag.
31
+ * file gets. Derivatives are cached on disk under a directory per source
32
+ * (see `resolveImageVariant`), written atomically, generated once per key even
33
+ * under concurrent requests, and sent with an immutable cache and an ETag.
34
+ */
35
+ declare function createUploadedFileController(options?: UploadedFileControllerOptions): RequestHandler;
36
+ /**
37
+ * Serves the default disk's uploads; see {@link createUploadedFileController}
20
38
  */
21
39
  declare const uploadedFileController: RequestHandler;
22
40
  //#endregion
23
- export { uploadedFileController };
41
+ export { UploadedFileControllerOptions, createUploadedFileController, uploadedFileController };
24
42
  //# sourceMappingURL=uploaded-file.controller.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uploaded-file.controller.d.mts","names":[],"sources":["../../../../../../../../core/src/http/uploads/uploaded-file.controller.ts"],"mappings":";;;;;AA0HA;;;;AAsIC;;;;;;;;;;;cAtIY,sBAAA,EAAwB,cAsIpC"}
1
+ {"version":3,"file":"uploaded-file.controller.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/http/uploads/uploaded-file.controller.ts"],"mappings":";;;;;;KA6FY,6BAAA;EAA6B;;;AAKf;EAAxB,IAAA,GAAO,iBAAiB;AAAA;;;;;;;AA0BT;AA8GjB;;;;AAAoF;;;;;;;;;;iBAhHpE,4BAAA,CACd,OAAA,GAAS,6BAAA,GACR,cAAc;;;;cA8GJ,sBAAA,EAAwB,cAA+C"}
@@ -1,17 +1,11 @@
1
1
  import { HttpError } from "../errors/errors.mjs";
2
- import { storage } from "../../storage/storage.mjs";
3
- import "../../storage/index.mjs";
2
+ import { isMissingFileError, variantCacheDirectoryFor } from "./image-variant-cache.mjs";
4
3
  import { matchesIfNoneMatch } from "./matches-if-none-match.mjs";
5
- import { uploadsConfig } from "../uploads-config.mjs";
6
- import { generateImageVariant } from "./generate-image-variant.mjs";
7
4
  import { detectImageFormat, isVariantSourceFormat } from "./detect-image-format.mjs";
8
- import { loadVariantSource } from "./load-variant-source.mjs";
9
- import { resolveImageVariantsConfig } from "./resolve-image-variants-config.mjs";
10
5
  import { readFileHead } from "./read-file-head.mjs";
11
6
  import { resolveUploadPath } from "./resolve-upload-path.mjs";
12
- import { resolveVariantCandidate } from "./resolve-variant-candidate.mjs";
13
- import { variantCacheKey, variantCachePath } from "./variant-cache-key.mjs";
14
- import { variantGenerations } from "./variant-generations.mjs";
7
+ import { localDiskRoot } from "./local-disk-root.mjs";
8
+ import { resolveImageVariant } from "./resolve-image-variant.mjs";
15
9
  import { parseUploadedFileQuery } from "./parse-uploaded-file-query.mjs";
16
10
  import { resolveInlineImageContentType } from "./resolve-inline-image-content-type.mjs";
17
11
  import { resolveOriginalContentType } from "./resolve-original-content-type.mjs";
@@ -19,7 +13,7 @@ import { log } from "@warlock.js/logger";
19
13
  import path from "node:path";
20
14
  import fs from "node:fs/promises";
21
15
 
22
- //#region ../core/src/http/uploads/uploaded-file.controller.ts
16
+ //#region ../../packages/core/src/http/uploads/uploaded-file.controller.ts
23
17
  /**
24
18
  * One year, in seconds: originals and derivatives are both long-lived
25
19
  */
@@ -30,19 +24,11 @@ const CONTENT_TYPES = {
30
24
  webp: "image/webp",
31
25
  avif: "image/avif"
32
26
  };
33
- async function exists(target) {
34
- try {
35
- await fs.access(target);
36
- return true;
37
- } catch {
38
- return false;
39
- }
40
- }
41
27
  function notFound(response) {
42
28
  return response.notFound({ error: "File Not Found" });
43
29
  }
44
- async function sendVariant(response, target, hash, format) {
45
- return response.sendBuffer(await fs.readFile(target), {
30
+ async function sendVariant(response, body, hash, format) {
31
+ return response.sendBuffer(body, {
46
32
  contentType: CONTENT_TYPES[format],
47
33
  cacheTime: ONE_YEAR,
48
34
  immutable: true,
@@ -88,6 +74,9 @@ async function sendOriginalInline(response, absolutePath, contentType) {
88
74
  *
89
75
  * ```ts
90
76
  * router.get("/uploads/*", uploadedFileController);
77
+ * router.get("/invoices/*", createUploadedFileController({ disk: "private" }), {
78
+ * middleware: [authMiddleware()],
79
+ * });
91
80
  * ```
92
81
  *
93
82
  * - `GET /uploads/<path>` sends the original file with a one-year cache.
@@ -95,80 +84,63 @@ async function sendOriginalInline(response, absolutePath, contentType) {
95
84
  * rendered from a variant named in `uploads.images.variants`. No other query
96
85
  * key is accepted, so a client can never ask for an arbitrary size.
97
86
  *
98
- * The path must stay inside the storage root (after symlinks are resolved) and
87
+ * The path must stay inside the disk root (after symlinks are resolved) and
99
88
  * outside the variant cache; anything else is a 404, the same answer a missing
100
- * file gets. Derivatives are cached on disk under a sha256 of the source path,
101
- * size, mtime, variant and format, written atomically, generated once per key
102
- * even under concurrent requests, and sent with an immutable cache and an ETag.
89
+ * file gets. Derivatives are cached on disk under a directory per source
90
+ * (see `resolveImageVariant`), written atomically, generated once per key even
91
+ * under concurrent requests, and sent with an immutable cache and an ETag.
103
92
  */
104
- const uploadedFileController = async ({ request, response }) => {
105
- const storageRoot = storage.root();
106
- if (!storageRoot || storageRoot === ".") {
107
- log.error("uploads", "serve", "uploadedFileController needs a local storage driver with a root.");
108
- return notFound(response);
109
- }
110
- const query = parseUploadedFileQuery(request.url);
111
- if (query.type === "invalid") return response.badRequest({ error: query.reason });
112
- response.header("X-Content-Type-Options", "nosniff");
113
- if (query.type === "original") {
114
- const images = uploadsConfig("images");
115
- const cacheDirectory = images?.cacheDirectory ? [images.cacheDirectory] : [];
116
- const source = await resolveUploadPath(request.params["*"], storageRoot, [storage.root(".cache/image-variants"), ...cacheDirectory]);
117
- if (!source) return notFound(response);
118
- const sniffedFormat = detectImageFormat(await readFileHead(source.absolutePath, 512));
119
- if (!isVariantSourceFormat(sniffedFormat)) return sendOriginalAsAttachment(response, source.absolutePath);
120
- const inlineContentType = resolveInlineImageContentType(source.absolutePath, sniffedFormat);
121
- if (!inlineContentType) return sendOriginalAsAttachment(response, source.absolutePath);
122
- return sendOriginalInline(response, source.absolutePath, inlineContentType);
123
- }
124
- const images = resolveImageVariantsConfig(uploadsConfig("images"), storageRoot);
125
- if (!images) return response.badRequest({ error: "Image variants are not configured." });
126
- if (!Object.prototype.hasOwnProperty.call(images.variants, query.variant)) return response.badRequest({ error: `Unknown variant "${query.variant}".` });
127
- const requestedFormat = query.format;
128
- if (requestedFormat !== void 0 && !images.formats.includes(requestedFormat)) return response.badRequest({ error: `Format "${query.format}" is not allowed.` });
129
- const variant = images.variants[query.variant];
130
- if (variant === void 0) return response.badRequest({ error: `Unknown variant "${query.variant}".` });
131
- let source;
132
- try {
133
- const candidate = await resolveVariantCandidate(request.params["*"], storageRoot, images);
134
- if (!candidate) return notFound(response);
135
- const resolvedSource = candidate.source;
136
- source = resolvedSource;
137
- const { stats, sourceFormat } = candidate;
138
- const format = requestedFormat ?? sourceFormat;
139
- const hash = variantCacheKey({
140
- relativePath: resolvedSource.relativePath,
141
- sourceSize: stats.size,
142
- sourceMtimeMs: stats.mtimeMs,
143
- variant,
144
- format
145
- });
146
- const target = variantCachePath(images.cacheDirectory, hash, format);
147
- if (await exists(target)) {
148
- if (matchesIfNoneMatch(request.header("if-none-match"), `"${hash}"`)) return response.baseResponse.status(304).send();
149
- return sendVariant(response, target, hash, format);
93
+ function createUploadedFileController(options = {}) {
94
+ return async ({ request, response }) => {
95
+ const diskRoot = localDiskRoot(options.disk);
96
+ if (!diskRoot) {
97
+ log.error("uploads", "serve", options.disk === void 0 ? "uploadedFileController needs a local storage driver with a root." : `uploadedFileController needs a local disk; "${options.disk}" is not one.`);
98
+ return notFound(response);
150
99
  }
151
- await variantGenerations.run(hash, async () => {
152
- if (await exists(target)) return;
153
- await generateImageVariant({
154
- image: await loadVariantSource(resolvedSource.absolutePath, {
155
- maxSourceBytes: images.maxSourceBytes,
156
- maxSourcePixels: images.maxSourcePixels,
157
- expectedFormat: sourceFormat
158
- }),
159
- variant,
160
- format,
161
- targetPath: target
162
- });
163
- });
164
- return sendVariant(response, target, hash, format);
165
- } catch (error) {
166
- if (error instanceof HttpError) return response.send({ error: error.message }, error.status);
167
- log.error("uploads", "variant", `Could not generate variant "${query.variant}" of ${source?.relativePath ?? request.params["*"]}: ${error instanceof Error ? error.message : String(error)}`);
168
- return response.serverError({ error: "Could not generate the image variant." });
169
- }
170
- };
100
+ const query = parseUploadedFileQuery(request.url);
101
+ if (query.type === "invalid") return response.badRequest({ error: query.reason });
102
+ response.header("X-Content-Type-Options", "nosniff");
103
+ if (query.type === "original") {
104
+ const source = await resolveUploadPath(request.params["*"], diskRoot, [path.join(diskRoot, ".cache", "image-variants"), variantCacheDirectoryFor(diskRoot)]);
105
+ if (!source) return notFound(response);
106
+ const sniffedFormat = detectImageFormat(await readFileHead(source.absolutePath, 512));
107
+ if (!isVariantSourceFormat(sniffedFormat)) return sendOriginalAsAttachment(response, source.absolutePath);
108
+ const inlineContentType = resolveInlineImageContentType(source.absolutePath, sniffedFormat);
109
+ if (!inlineContentType) return sendOriginalAsAttachment(response, source.absolutePath);
110
+ return sendOriginalInline(response, source.absolutePath, inlineContentType);
111
+ }
112
+ try {
113
+ const variantInput = {
114
+ path: request.params["*"],
115
+ variant: query.variant,
116
+ ...query.format !== void 0 ? { format: query.format } : {},
117
+ ...options.disk !== void 0 ? { disk: options.disk } : {}
118
+ };
119
+ let variant = await resolveImageVariant(variantInput);
120
+ if (!variant) return notFound(response);
121
+ if (matchesIfNoneMatch(request.header("if-none-match"), `"${variant.hash}"`)) return response.baseResponse.status(304).send();
122
+ let body;
123
+ try {
124
+ body = await fs.readFile(variant.absolutePath);
125
+ } catch (readError) {
126
+ if (!isMissingFileError(readError)) throw readError;
127
+ variant = await resolveImageVariant(variantInput);
128
+ if (!variant) return notFound(response);
129
+ body = await fs.readFile(variant.absolutePath);
130
+ }
131
+ return sendVariant(response, body, variant.hash, variant.format);
132
+ } catch (error) {
133
+ if (error instanceof HttpError) return response.send({ error: error.message }, error.status);
134
+ log.error("uploads", "variant", `Could not generate variant "${query.variant}" of ${String(request.params["*"])}: ${error instanceof Error ? error.message : String(error)}`);
135
+ return response.serverError({ error: "Could not generate the image variant." });
136
+ }
137
+ };
138
+ }
139
+ /**
140
+ * Serves the default disk's uploads; see {@link createUploadedFileController}
141
+ */
142
+ const uploadedFileController = createUploadedFileController();
171
143
 
172
144
  //#endregion
173
- export { uploadedFileController };
145
+ export { createUploadedFileController, uploadedFileController };
174
146
  //# sourceMappingURL=uploaded-file.controller.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"uploaded-file.controller.mjs","names":[],"sources":["../../../../../../../../core/src/http/uploads/uploaded-file.controller.ts"],"sourcesContent":["import { log } from \"@warlock.js/logger\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { RequestHandler } from \"../../router\";\nimport { storage } from \"../../storage\";\nimport { HttpError } from \"../errors\";\nimport type { Response } from \"../response\";\nimport { uploadsConfig } from \"../uploads-config\";\nimport {\n detectImageFormat,\n IMAGE_SIGNATURE_BYTES,\n isVariantSourceFormat,\n} from \"./detect-image-format\";\nimport { generateImageVariant } from \"./generate-image-variant\";\nimport type { VariantOutputFormat } from \"./image-variant-types\";\nimport { loadVariantSource } from \"./load-variant-source\";\nimport { matchesIfNoneMatch } from \"./matches-if-none-match\";\nimport { parseUploadedFileQuery } from \"./parse-uploaded-file-query\";\nimport { readFileHead } from \"./read-file-head\";\nimport { resolveImageVariantsConfig } from \"./resolve-image-variants-config\";\nimport { resolveInlineImageContentType } from \"./resolve-inline-image-content-type\";\nimport { resolveOriginalContentType } from \"./resolve-original-content-type\";\nimport { resolveUploadPath, type ResolvedUploadPath } from \"./resolve-upload-path\";\nimport { resolveVariantCandidate } from \"./resolve-variant-candidate\";\nimport { variantCacheKey, variantCachePath } from \"./variant-cache-key\";\nimport { variantGenerations } from \"./variant-generations\";\n\n/**\n * One year, in seconds: originals and derivatives are both long-lived\n */\nconst ONE_YEAR = 31_536_000;\n\nconst CONTENT_TYPES: Record<VariantOutputFormat, string> = {\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n webp: \"image/webp\",\n avif: \"image/avif\",\n};\n\nasync function exists(target: string): Promise<boolean> {\n try {\n await fs.access(target);\n\n return true;\n } catch {\n return false;\n }\n}\n\nfunction notFound(response: Response) {\n return response.notFound({ error: \"File Not Found\" });\n}\n\nasync function sendVariant(\n response: Response,\n target: string,\n hash: string,\n format: VariantOutputFormat,\n) {\n return response.sendBuffer(await fs.readFile(target), {\n contentType: CONTENT_TYPES[format],\n cacheTime: ONE_YEAR,\n immutable: true,\n etag: `\"${hash}\"`,\n });\n}\n\n/**\n * Serve an upload original that isn't safe to render inline: a non-raster\n * format (html, xml, the svg family, anything unrecognised) is markup a\n * browser will parse and execute, and a raster-sniffed file whose extension\n * doesn't back that format up (see `resolveInlineImageContentType`) is a\n * polyglot — so both go out as a download instead of a rendered response.\n * `Content-Type` stays extension-derived, except the svg/html/xml family,\n * which is downgraded to `application/octet-stream` so the browser never\n * renders it even if it ignores the disposition.\n */\nasync function sendOriginalAsAttachment(response: Response, absolutePath: string) {\n response.header(\"Content-Security-Policy\", \"sandbox\");\n\n return response.sendBuffer(await fs.readFile(absolutePath), {\n contentType: resolveOriginalContentType(absolutePath),\n cacheTime: ONE_YEAR,\n immutable: true,\n inline: false,\n filename: path.basename(absolutePath),\n });\n}\n\n/**\n * Serve an upload original inline, once the sniffed raster format and the\n * extension-derived format have been confirmed to agree. The content type is\n * always the SNIFFED image type, passed explicitly — never `sendFile`'s\n * extension-derived guess, which is exactly what let a JPEG named `.html`\n * out as `text/html` before this existed.\n */\nasync function sendOriginalInline(response: Response, absolutePath: string, contentType: string) {\n return response.sendBuffer(await fs.readFile(absolutePath), {\n contentType,\n cacheTime: ONE_YEAR,\n immutable: true,\n });\n}\n\n/**\n * Serves local uploads, and bounded on-demand variants of the images among them.\n *\n * ```ts\n * router.get(\"/uploads/*\", uploadedFileController);\n * ```\n *\n * - `GET /uploads/<path>` sends the original file with a one-year cache.\n * - `GET /uploads/<path>?variant=<name>[&format=webp|avif]` sends a derivative\n * rendered from a variant named in `uploads.images.variants`. No other query\n * key is accepted, so a client can never ask for an arbitrary size.\n *\n * The path must stay inside the storage root (after symlinks are resolved) and\n * outside the variant cache; anything else is a 404, the same answer a missing\n * file gets. Derivatives are cached on disk under a sha256 of the source path,\n * size, mtime, variant and format, written atomically, generated once per key\n * even under concurrent requests, and sent with an immutable cache and an ETag.\n */\nexport const uploadedFileController: RequestHandler = async ({ request, response }) => {\n const storageRoot = storage.root();\n\n if (!storageRoot || storageRoot === \".\") {\n log.error(\n \"uploads\",\n \"serve\",\n \"uploadedFileController needs a local storage driver with a root.\",\n );\n\n return notFound(response);\n }\n\n const query = parseUploadedFileQuery(request.url);\n\n if (query.type === \"invalid\") {\n return response.badRequest({ error: query.reason });\n }\n\n // Every uploads response — originals and variants — tells the browser not\n // to guess a content type from the bytes, so a mislabeled body can never be\n // sniffed into something executable.\n response.header(\"X-Content-Type-Options\", \"nosniff\");\n\n if (query.type === \"original\") {\n const images = uploadsConfig(\"images\");\n const cacheDirectory = images?.cacheDirectory ? [images.cacheDirectory] : [];\n const source = await resolveUploadPath(request.params[\"*\"], storageRoot, [\n storage.root(\".cache/image-variants\"),\n ...cacheDirectory,\n ]);\n\n if (!source) return notFound(response);\n\n // Inline is decided by SNIFFED bytes, never by extension: an svg (or any\n // other non-raster file) named `.png` must still download, not render.\n const head = await readFileHead(source.absolutePath, IMAGE_SIGNATURE_BYTES);\n const sniffedFormat = detectImageFormat(head);\n\n if (!isVariantSourceFormat(sniffedFormat)) {\n return sendOriginalAsAttachment(response, source.absolutePath);\n }\n\n // Inline is only safe when the extension-derived type agrees with the\n // sniffed bytes too — otherwise `sendFile` would advertise the\n // extension's type (e.g. text/html for JPEG bytes named `.html`).\n const inlineContentType = resolveInlineImageContentType(source.absolutePath, sniffedFormat);\n\n if (!inlineContentType) {\n return sendOriginalAsAttachment(response, source.absolutePath);\n }\n\n return sendOriginalInline(response, source.absolutePath, inlineContentType);\n }\n\n const images = resolveImageVariantsConfig(uploadsConfig(\"images\"), storageRoot);\n\n if (!images) {\n return response.badRequest({ error: \"Image variants are not configured.\" });\n }\n\n if (!Object.prototype.hasOwnProperty.call(images.variants, query.variant)) {\n return response.badRequest({ error: `Unknown variant \"${query.variant}\".` });\n }\n\n const requestedFormat = query.format as VariantOutputFormat | undefined;\n\n if (requestedFormat !== undefined && !images.formats.includes(requestedFormat as never)) {\n return response.badRequest({ error: `Format \"${query.format}\" is not allowed.` });\n }\n\n const variant = images.variants[query.variant];\n if (variant === undefined) {\n return response.badRequest({ error: `Unknown variant \"${query.variant}\".` });\n }\n\n let source: ResolvedUploadPath | undefined;\n\n try {\n const candidate = await resolveVariantCandidate(request.params[\"*\"], storageRoot, images);\n\n if (!candidate) return notFound(response);\n\n const resolvedSource = candidate.source;\n\n source = resolvedSource;\n\n const { stats, sourceFormat } = candidate;\n const format: VariantOutputFormat = requestedFormat ?? sourceFormat;\n const hash = variantCacheKey({\n relativePath: resolvedSource.relativePath,\n sourceSize: stats.size,\n sourceMtimeMs: stats.mtimeMs,\n variant,\n format,\n });\n const target = variantCachePath(images.cacheDirectory, hash, format);\n\n if (await exists(target)) {\n if (matchesIfNoneMatch(request.header(\"if-none-match\"), `\"${hash}\"`)) {\n return response.baseResponse.status(304).send();\n }\n\n return sendVariant(response, target, hash, format);\n }\n\n await variantGenerations.run(hash, async () => {\n if (await exists(target)) return;\n\n const image = await loadVariantSource(resolvedSource.absolutePath, {\n maxSourceBytes: images.maxSourceBytes,\n maxSourcePixels: images.maxSourcePixels,\n expectedFormat: sourceFormat,\n });\n\n await generateImageVariant({ image, variant, format, targetPath: target });\n });\n\n return sendVariant(response, target, hash, format);\n } catch (error) {\n if (error instanceof HttpError) {\n return response.send({ error: error.message }, error.status);\n }\n\n log.error(\n \"uploads\",\n \"variant\",\n `Could not generate variant \"${query.variant}\" of ${source?.relativePath ?? request.params[\"*\"]}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n\n return response.serverError({ error: \"Could not generate the image variant.\" });\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"uploaded-file.controller.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/http/uploads/uploaded-file.controller.ts"],"sourcesContent":["import { log } from \"@warlock.js/logger\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { RequestHandler } from \"../../router\";\nimport type { StorageDriverName } from \"../../storage/types\";\nimport { HttpError } from \"../errors\";\nimport type { Response } from \"../response\";\nimport {\n detectImageFormat,\n IMAGE_SIGNATURE_BYTES,\n isVariantSourceFormat,\n} from \"./detect-image-format\";\nimport { isMissingFileError, variantCacheDirectoryFor } from \"./image-variant-cache\";\nimport type { VariantOutputFormat } from \"./image-variant-types\";\nimport { localDiskRoot } from \"./local-disk-root\";\nimport { matchesIfNoneMatch } from \"./matches-if-none-match\";\nimport { parseUploadedFileQuery } from \"./parse-uploaded-file-query\";\nimport { readFileHead } from \"./read-file-head\";\nimport { resolveImageVariant } from \"./resolve-image-variant\";\nimport { resolveInlineImageContentType } from \"./resolve-inline-image-content-type\";\nimport { resolveOriginalContentType } from \"./resolve-original-content-type\";\nimport { resolveUploadPath } from \"./resolve-upload-path\";\n\n/**\n * One year, in seconds: originals and derivatives are both long-lived\n */\nconst ONE_YEAR = 31_536_000;\n\nconst CONTENT_TYPES: Record<VariantOutputFormat, string> = {\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n webp: \"image/webp\",\n avif: \"image/avif\",\n};\n\nfunction notFound(response: Response) {\n return response.notFound({ error: \"File Not Found\" });\n}\n\nasync function sendVariant(\n response: Response,\n body: Buffer,\n hash: string,\n format: VariantOutputFormat,\n) {\n return response.sendBuffer(body, {\n contentType: CONTENT_TYPES[format],\n cacheTime: ONE_YEAR,\n immutable: true,\n etag: `\"${hash}\"`,\n });\n}\n\n/**\n * Serve an upload original that isn't safe to render inline: a non-raster\n * format (html, xml, the svg family, anything unrecognised) is markup a\n * browser will parse and execute, and a raster-sniffed file whose extension\n * doesn't back that format up (see `resolveInlineImageContentType`) is a\n * polyglot — so both go out as a download instead of a rendered response.\n * `Content-Type` stays extension-derived, except the svg/html/xml family,\n * which is downgraded to `application/octet-stream` so the browser never\n * renders it even if it ignores the disposition.\n */\nasync function sendOriginalAsAttachment(response: Response, absolutePath: string) {\n response.header(\"Content-Security-Policy\", \"sandbox\");\n\n return response.sendBuffer(await fs.readFile(absolutePath), {\n contentType: resolveOriginalContentType(absolutePath),\n cacheTime: ONE_YEAR,\n immutable: true,\n inline: false,\n filename: path.basename(absolutePath),\n });\n}\n\n/**\n * Serve an upload original inline, once the sniffed raster format and the\n * extension-derived format have been confirmed to agree. The content type is\n * always the SNIFFED image type, passed explicitly — never `sendFile`'s\n * extension-derived guess, which is exactly what let a JPEG named `.html`\n * out as `text/html` before this existed.\n */\nasync function sendOriginalInline(response: Response, absolutePath: string, contentType: string) {\n return response.sendBuffer(await fs.readFile(absolutePath), {\n contentType,\n cacheTime: ONE_YEAR,\n immutable: true,\n });\n}\n\n/**\n * Options for {@link createUploadedFileController}\n */\nexport type UploadedFileControllerOptions = {\n /**\n * Local disk to serve from; the default disk when omitted. A private disk\n * should be served from a route that checks access first.\n */\n disk?: StorageDriverName;\n};\n\n/**\n * Serves local uploads, and bounded on-demand variants of the images among them.\n *\n * ```ts\n * router.get(\"/uploads/*\", uploadedFileController);\n * router.get(\"/invoices/*\", createUploadedFileController({ disk: \"private\" }), {\n * middleware: [authMiddleware()],\n * });\n * ```\n *\n * - `GET /uploads/<path>` sends the original file with a one-year cache.\n * - `GET /uploads/<path>?variant=<name>[&format=webp|avif]` sends a derivative\n * rendered from a variant named in `uploads.images.variants`. No other query\n * key is accepted, so a client can never ask for an arbitrary size.\n *\n * The path must stay inside the disk root (after symlinks are resolved) and\n * outside the variant cache; anything else is a 404, the same answer a missing\n * file gets. Derivatives are cached on disk under a directory per source\n * (see `resolveImageVariant`), written atomically, generated once per key even\n * under concurrent requests, and sent with an immutable cache and an ETag.\n */\nexport function createUploadedFileController(\n options: UploadedFileControllerOptions = {},\n): RequestHandler {\n return async ({ request, response }) => {\n const diskRoot = localDiskRoot(options.disk);\n\n if (!diskRoot) {\n log.error(\n \"uploads\",\n \"serve\",\n options.disk === undefined\n ? \"uploadedFileController needs a local storage driver with a root.\"\n : `uploadedFileController needs a local disk; \"${options.disk}\" is not one.`,\n );\n\n return notFound(response);\n }\n\n const query = parseUploadedFileQuery(request.url);\n\n if (query.type === \"invalid\") {\n return response.badRequest({ error: query.reason });\n }\n\n // Every uploads response — originals and variants — tells the browser not\n // to guess a content type from the bytes, so a mislabeled body can never be\n // sniffed into something executable.\n response.header(\"X-Content-Type-Options\", \"nosniff\");\n\n if (query.type === \"original\") {\n const source = await resolveUploadPath(request.params[\"*\"], diskRoot, [\n path.join(diskRoot, \".cache\", \"image-variants\"),\n variantCacheDirectoryFor(diskRoot),\n ]);\n\n if (!source) return notFound(response);\n\n // Inline is decided by SNIFFED bytes, never by extension: an svg (or any\n // other non-raster file) named `.png` must still download, not render.\n const head = await readFileHead(source.absolutePath, IMAGE_SIGNATURE_BYTES);\n const sniffedFormat = detectImageFormat(head);\n\n if (!isVariantSourceFormat(sniffedFormat)) {\n return sendOriginalAsAttachment(response, source.absolutePath);\n }\n\n // Inline is only safe when the extension-derived type agrees with the\n // sniffed bytes too — otherwise `sendFile` would advertise the\n // extension's type (e.g. text/html for JPEG bytes named `.html`).\n const inlineContentType = resolveInlineImageContentType(source.absolutePath, sniffedFormat);\n\n if (!inlineContentType) {\n return sendOriginalAsAttachment(response, source.absolutePath);\n }\n\n return sendOriginalInline(response, source.absolutePath, inlineContentType);\n }\n\n try {\n const variantInput = {\n path: request.params[\"*\"] as string,\n variant: query.variant,\n ...(query.format !== undefined ? { format: query.format as VariantOutputFormat } : {}),\n ...(options.disk !== undefined ? { disk: options.disk } : {}),\n };\n let variant = await resolveImageVariant(variantInput);\n\n if (!variant) return notFound(response);\n\n if (matchesIfNoneMatch(request.header(\"if-none-match\"), `\"${variant.hash}\"`)) {\n return response.baseResponse.status(304).send();\n }\n\n let body: Buffer;\n\n try {\n body = await fs.readFile(variant.absolutePath);\n } catch (readError) {\n if (!isMissingFileError(readError)) throw readError;\n\n // Pruned between the existence check and the read: the source was\n // rewritten in place and a request for the new version cleared the\n // old generation. Resolve (and render) once more.\n variant = await resolveImageVariant(variantInput);\n\n if (!variant) return notFound(response);\n\n body = await fs.readFile(variant.absolutePath);\n }\n\n return sendVariant(response, body, variant.hash, variant.format);\n } catch (error) {\n if (error instanceof HttpError) {\n return response.send({ error: error.message }, error.status);\n }\n\n log.error(\n \"uploads\",\n \"variant\",\n `Could not generate variant \"${query.variant}\" of ${String(request.params[\"*\"])}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n\n return response.serverError({ error: \"Could not generate the image variant.\" });\n }\n };\n}\n\n/**\n * Serves the default disk's uploads; see {@link createUploadedFileController}\n */\nexport const uploadedFileController: RequestHandler = createUploadedFileController();\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { createHash } from "node:crypto";
3
3
 
4
- //#region ../core/src/http/uploads/variant-cache-key.ts
4
+ //#region ../../packages/core/src/http/uploads/variant-cache-key.ts
5
5
  /**
6
6
  * JSON of the variant with its keys sorted, so key order in the app config
7
7
  * never changes the hash
@@ -34,12 +34,37 @@ function variantExtension(format) {
34
34
  return format === "jpeg" ? "jpg" : format;
35
35
  }
36
36
  /**
37
- * Where a derivative lives: `<cacheDirectory>/<first 2 hex>/<hash>.<ext>`
37
+ * The sha256 of the source a derivative belongs to: the real (symlink-free)
38
+ * disk root and the `/`-separated path relative to it. Every derivative of
39
+ * one source lives under the directory this names, so deleting the source
40
+ * can remove them all at once, whichever cache directory several disks share.
38
41
  */
39
- function variantCachePath(cacheDirectory, hash, format) {
40
- return path.join(cacheDirectory, hash.slice(0, 2), `${hash}.${variantExtension(format)}`);
42
+ function variantSourceKey(realRoot, relativePath) {
43
+ return createHash("sha256").update(JSON.stringify([realRoot, relativePath])).digest("hex");
44
+ }
45
+ /**
46
+ * The directory holding every derivative of one source:
47
+ * `<cacheDirectory>/<first 2 hex>/<sourceKey>`
48
+ */
49
+ function variantSourceDirectory(cacheDirectory, sourceKey) {
50
+ return path.join(cacheDirectory, sourceKey.slice(0, 2), sourceKey);
51
+ }
52
+ /**
53
+ * Names one version of a source (its size and whole-millisecond mtime).
54
+ * Derivatives of an older version sit in a sibling directory, which is
55
+ * pruned once a derivative of the current version has been written.
56
+ */
57
+ function variantGenerationTag(sourceSize, sourceMtimeMs) {
58
+ return `${sourceSize}-${Math.trunc(sourceMtimeMs)}`;
59
+ }
60
+ /**
61
+ * Where a derivative lives:
62
+ * `<cacheDirectory>/<first 2 hex>/<sourceKey>/<generation>/<hash>.<ext>`
63
+ */
64
+ function variantCachePath(cacheDirectory, source, hash, format) {
65
+ return path.join(variantSourceDirectory(cacheDirectory, source.sourceKey), source.generation, `${hash}.${variantExtension(format)}`);
41
66
  }
42
67
 
43
68
  //#endregion
44
- export { variantCacheKey, variantCachePath };
69
+ export { variantCacheKey, variantCachePath, variantGenerationTag, variantSourceDirectory, variantSourceKey };
45
70
  //# sourceMappingURL=variant-cache-key.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"variant-cache-key.mjs","names":[],"sources":["../../../../../../../../core/src/http/uploads/variant-cache-key.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport path from \"node:path\";\nimport type { ImageVariantDefinition } from \"../uploads-types\";\nimport type { VariantOutputFormat } from \"./image-variant-types\";\n\n/**\n * Everything a derivative depends on\n */\nexport type VariantCacheKeyInput = {\n relativePath: string;\n sourceSize: number;\n sourceMtimeMs: number;\n variant: ImageVariantDefinition;\n format: VariantOutputFormat;\n};\n\n/**\n * JSON of the variant with its keys sorted, so key order in the app config\n * never changes the hash\n */\nfunction normalizedVariantJson(variant: ImageVariantDefinition): string {\n const sorted = Object.fromEntries(\n Object.entries(variant)\n .filter(([, value]) => value !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)),\n );\n\n return JSON.stringify(sorted);\n}\n\n/**\n * The sha256 cache key of a derivative.\n *\n * The source size and mtime are part of the key, so rewriting the source moves\n * every request to a new key and a fresh derivative. The parts are hashed as a\n * JSON array, so no two different inputs can concatenate to the same string.\n */\nexport function variantCacheKey(input: VariantCacheKeyInput): string {\n const material = JSON.stringify([\n input.relativePath,\n input.sourceSize,\n input.sourceMtimeMs,\n normalizedVariantJson(input.variant),\n input.format,\n ]);\n\n return createHash(\"sha256\").update(material).digest(\"hex\");\n}\n\n/**\n * File extension of a derivative\n */\nexport function variantExtension(format: VariantOutputFormat): string {\n return format === \"jpeg\" ? \"jpg\" : format;\n}\n\n/**\n * Where a derivative lives: `<cacheDirectory>/<first 2 hex>/<hash>.<ext>`\n */\nexport function variantCachePath(\n cacheDirectory: string,\n hash: string,\n format: VariantOutputFormat,\n): string {\n return path.join(cacheDirectory, hash.slice(0, 2), `${hash}.${variantExtension(format)}`);\n}\n"],"mappings":";;;;;;;;AAoBA,SAAS,sBAAsB,SAAyC;CACtE,MAAM,SAAS,OAAO,YACpB,OAAO,QAAQ,OAAO,CAAC,CACpB,QAAQ,GAAG,WAAW,UAAU,MAAS,CAAC,CAC1C,MAAM,CAAC,IAAI,CAAC,OAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAE,CACpD;CAEA,OAAO,KAAK,UAAU,MAAM;AAC9B;;;;;;;;AASA,SAAgB,gBAAgB,OAAqC;CACnE,MAAM,WAAW,KAAK,UAAU;EAC9B,MAAM;EACN,MAAM;EACN,MAAM;EACN,sBAAsB,MAAM,OAAO;EACnC,MAAM;CACR,CAAC;CAED,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,OAAO,KAAK;AAC3D;;;;AAKA,SAAgB,iBAAiB,QAAqC;CACpE,OAAO,WAAW,SAAS,QAAQ;AACrC;;;;AAKA,SAAgB,iBACd,gBACA,MACA,QACQ;CACR,OAAO,KAAK,KAAK,gBAAgB,KAAK,MAAM,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,iBAAiB,MAAM,GAAG;AAC1F"}
1
+ {"version":3,"file":"variant-cache-key.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/http/uploads/variant-cache-key.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport path from \"node:path\";\nimport type { ImageVariantDefinition } from \"../uploads-types\";\nimport type { VariantOutputFormat } from \"./image-variant-types\";\n\n/**\n * Everything a derivative depends on\n */\nexport type VariantCacheKeyInput = {\n relativePath: string;\n sourceSize: number;\n sourceMtimeMs: number;\n variant: ImageVariantDefinition;\n format: VariantOutputFormat;\n};\n\n/**\n * JSON of the variant with its keys sorted, so key order in the app config\n * never changes the hash\n */\nfunction normalizedVariantJson(variant: ImageVariantDefinition): string {\n const sorted = Object.fromEntries(\n Object.entries(variant)\n .filter(([, value]) => value !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)),\n );\n\n return JSON.stringify(sorted);\n}\n\n/**\n * The sha256 cache key of a derivative.\n *\n * The source size and mtime are part of the key, so rewriting the source moves\n * every request to a new key and a fresh derivative. The parts are hashed as a\n * JSON array, so no two different inputs can concatenate to the same string.\n */\nexport function variantCacheKey(input: VariantCacheKeyInput): string {\n const material = JSON.stringify([\n input.relativePath,\n input.sourceSize,\n input.sourceMtimeMs,\n normalizedVariantJson(input.variant),\n input.format,\n ]);\n\n return createHash(\"sha256\").update(material).digest(\"hex\");\n}\n\n/**\n * File extension of a derivative\n */\nexport function variantExtension(format: VariantOutputFormat): string {\n return format === \"jpeg\" ? \"jpg\" : format;\n}\n\n/**\n * The sha256 of the source a derivative belongs to: the real (symlink-free)\n * disk root and the `/`-separated path relative to it. Every derivative of\n * one source lives under the directory this names, so deleting the source\n * can remove them all at once, whichever cache directory several disks share.\n */\nexport function variantSourceKey(realRoot: string, relativePath: string): string {\n return createHash(\"sha256\")\n .update(JSON.stringify([realRoot, relativePath]))\n .digest(\"hex\");\n}\n\n/**\n * The directory holding every derivative of one source:\n * `<cacheDirectory>/<first 2 hex>/<sourceKey>`\n */\nexport function variantSourceDirectory(cacheDirectory: string, sourceKey: string): string {\n return path.join(cacheDirectory, sourceKey.slice(0, 2), sourceKey);\n}\n\n/**\n * Names one version of a source (its size and whole-millisecond mtime).\n * Derivatives of an older version sit in a sibling directory, which is\n * pruned once a derivative of the current version has been written.\n */\nexport function variantGenerationTag(sourceSize: number, sourceMtimeMs: number): string {\n return `${sourceSize}-${Math.trunc(sourceMtimeMs)}`;\n}\n\n/**\n * Where a derivative lives:\n * `<cacheDirectory>/<first 2 hex>/<sourceKey>/<generation>/<hash>.<ext>`\n */\nexport function variantCachePath(\n cacheDirectory: string,\n source: { sourceKey: string; generation: string },\n hash: string,\n format: VariantOutputFormat,\n): string {\n return path.join(\n variantSourceDirectory(cacheDirectory, source.sourceKey),\n source.generation,\n `${hash}.${variantExtension(format)}`,\n );\n}\n"],"mappings":";;;;;;;;AAoBA,SAAS,sBAAsB,SAAyC;CACtE,MAAM,SAAS,OAAO,YACpB,OAAO,QAAQ,OAAO,CAAC,CACpB,QAAQ,GAAG,WAAW,UAAU,MAAS,CAAC,CAC1C,MAAM,CAAC,IAAI,CAAC,OAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAE,CACpD;CAEA,OAAO,KAAK,UAAU,MAAM;AAC9B;;;;;;;;AASA,SAAgB,gBAAgB,OAAqC;CACnE,MAAM,WAAW,KAAK,UAAU;EAC9B,MAAM;EACN,MAAM;EACN,MAAM;EACN,sBAAsB,MAAM,OAAO;EACnC,MAAM;CACR,CAAC;CAED,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,OAAO,KAAK;AAC3D;;;;AAKA,SAAgB,iBAAiB,QAAqC;CACpE,OAAO,WAAW,SAAS,QAAQ;AACrC;;;;;;;AAQA,SAAgB,iBAAiB,UAAkB,cAA8B;CAC/E,OAAO,WAAW,QAAQ,CAAC,CACxB,OAAO,KAAK,UAAU,CAAC,UAAU,YAAY,CAAC,CAAC,CAAC,CAChD,OAAO,KAAK;AACjB;;;;;AAMA,SAAgB,uBAAuB,gBAAwB,WAA2B;CACxF,OAAO,KAAK,KAAK,gBAAgB,UAAU,MAAM,GAAG,CAAC,GAAG,SAAS;AACnE;;;;;;AAOA,SAAgB,qBAAqB,YAAoB,eAA+B;CACtF,OAAO,GAAG,WAAW,GAAG,KAAK,MAAM,aAAa;AAClD;;;;;AAMA,SAAgB,iBACd,gBACA,QACA,MACA,QACQ;CACR,OAAO,KAAK,KACV,uBAAuB,gBAAgB,OAAO,SAAS,GACvD,OAAO,YACP,GAAG,KAAK,GAAG,iBAAiB,MAAM,GACpC;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { SingleFlight } from "./single-flight.mjs";
2
2
 
3
- //#region ../core/src/http/uploads/variant-generations.ts
3
+ //#region ../../packages/core/src/http/uploads/variant-generations.ts
4
4
  /**
5
5
  * Shared in-process single-flight for derivative generation.
6
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"variant-generations.mjs","names":[],"sources":["../../../../../../../../core/src/http/uploads/variant-generations.ts"],"sourcesContent":["import { SingleFlight } from \"./single-flight\";\n\n/**\n * Shared in-process single-flight for derivative generation.\n *\n * Both `uploadedFileController` and `generateImageVariants` run generations\n * through this one instance, so concurrent misses for the same cache key —\n * whether they arrive from the on-demand route or from an ingest call —\n * render the derivative once.\n */\nexport const variantGenerations = new SingleFlight<void>();\n"],"mappings":";;;;;;;;;;;AAUA,MAAa,qBAAqB,IAAI,aAAmB"}
1
+ {"version":3,"file":"variant-generations.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/http/uploads/variant-generations.ts"],"sourcesContent":["import { SingleFlight } from \"./single-flight\";\n\n/**\n * Shared in-process single-flight for derivative generation.\n *\n * Both `uploadedFileController` and `generateImageVariants` run generations\n * through this one instance, so concurrent misses for the same cache key —\n * whether they arrive from the on-demand route or from an ingest call —\n * render the derivative once.\n */\nexport const variantGenerations = new SingleFlight<void>();\n"],"mappings":";;;;;;;;;;;AAUA,MAAa,qBAAqB,IAAI,aAAmB"}
@@ -1,6 +1,6 @@
1
1
  import { UploadsConfigurations } from "./uploads-types.mjs";
2
2
 
3
- //#region ../core/src/http/uploads-config.d.ts
3
+ //#region ../../packages/core/src/http/uploads-config.d.ts
4
4
  /**
5
5
  * Default uploads configuration values
6
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"uploads-config.d.mts","names":[],"sources":["../../../../../../../core/src/http/uploads-config.ts"],"mappings":";;;;;AASA;;;;cAAa,gBAAA,EAAkB,qBAQ9B;AAkBD;;;;;;;;;;;;;;;;AAAA,iBAAgB,aAAA,iBAA8B,qBAAA,EAC5C,GAAA,EAAK,CAAA,EACL,YAAA,GAAe,qBAAA,CAAsB,CAAA,IACpC,qBAAA,CAAsB,CAAA"}
1
+ {"version":3,"file":"uploads-config.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/http/uploads-config.ts"],"mappings":";;;;;AASA;;;;cAAa,gBAAA,EAAkB,qBAQ9B;AAkBD;;;;;;;;;;;;;;;;AAAA,iBAAgB,aAAA,iBAA8B,qBAAA,EAC5C,GAAA,EAAK,CAAA,EACL,YAAA,GAAe,qBAAA,CAAsB,CAAA,IACpC,qBAAA,CAAsB,CAAA"}
@@ -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/http/uploads-config.ts
4
+ //#region ../../packages/core/src/http/uploads-config.ts
5
5
  /**
6
6
  * Default uploads configuration values
7
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"uploads-config.mjs","names":[],"sources":["../../../../../../../core/src/http/uploads-config.ts"],"sourcesContent":["import { config } from \"../config\";\nimport type { UploadsConfigurations } from \"./uploads-types\";\n\n/**\n * Default uploads configuration values\n *\n * These defaults are used when no configuration is provided\n * or when specific keys are missing from the app config.\n */\nexport const UPLOADS_DEFAULTS: UploadsConfigurations = {\n name: \"random\",\n randomLength: 32,\n prefix: {\n as: \"directory\",\n format: \"DD-MM-YYYY\",\n },\n defaultPrefixFormat: \"DD-MM-YYYY-HH-mm-ss\",\n};\n\n/**\n * Get uploads configuration value\n *\n * Retrieves a configuration value from the `uploads` section of app config,\n * falling back to the provided default or the built-in default.\n *\n * @param key - Configuration key to retrieve\n * @param defaultValue - Optional default value if not found\n * @returns The configuration value\n *\n * @example\n * ```typescript\n * const naming = uploadsConfig(\"name\"); // \"random\" or \"original\"\n * const length = uploadsConfig(\"randomLength\", 32);\n * ```\n */\nexport function uploadsConfig<K extends keyof UploadsConfigurations>(\n key: K,\n defaultValue?: UploadsConfigurations[K],\n): UploadsConfigurations[K] {\n const fallback = defaultValue ?? UPLOADS_DEFAULTS[key];\n return config.key(`uploads.${key}`, fallback);\n}\n"],"mappings":";;;;;;;;;;AASA,MAAa,mBAA0C;CACrD,MAAM;CACN,cAAc;CACd,QAAQ;EACN,IAAI;EACJ,QAAQ;CACV;CACA,qBAAqB;AACvB;;;;;;;;;;;;;;;;;AAkBA,SAAgB,cACd,KACA,cAC0B;CAC1B,MAAM,WAAW,gBAAgB,iBAAiB;CAClD,OAAO,OAAO,IAAI,WAAW,OAAO,QAAQ;AAC9C"}
1
+ {"version":3,"file":"uploads-config.mjs","names":[],"sources":["../../../../../../../../packages/core/src/http/uploads-config.ts"],"sourcesContent":["import { config } from \"../config\";\nimport type { UploadsConfigurations } from \"./uploads-types\";\n\n/**\n * Default uploads configuration values\n *\n * These defaults are used when no configuration is provided\n * or when specific keys are missing from the app config.\n */\nexport const UPLOADS_DEFAULTS: UploadsConfigurations = {\n name: \"random\",\n randomLength: 32,\n prefix: {\n as: \"directory\",\n format: \"DD-MM-YYYY\",\n },\n defaultPrefixFormat: \"DD-MM-YYYY-HH-mm-ss\",\n};\n\n/**\n * Get uploads configuration value\n *\n * Retrieves a configuration value from the `uploads` section of app config,\n * falling back to the provided default or the built-in default.\n *\n * @param key - Configuration key to retrieve\n * @param defaultValue - Optional default value if not found\n * @returns The configuration value\n *\n * @example\n * ```typescript\n * const naming = uploadsConfig(\"name\"); // \"random\" or \"original\"\n * const length = uploadsConfig(\"randomLength\", 32);\n * ```\n */\nexport function uploadsConfig<K extends keyof UploadsConfigurations>(\n key: K,\n defaultValue?: UploadsConfigurations[K],\n): UploadsConfigurations[K] {\n const fallback = defaultValue ?? UPLOADS_DEFAULTS[key];\n return config.key(`uploads.${key}`, fallback);\n}\n"],"mappings":";;;;;;;;;;AASA,MAAa,mBAA0C;CACrD,MAAM;CACN,cAAc;CACd,QAAQ;EACN,IAAI;EACJ,QAAQ;CACV;CACA,qBAAqB;AACvB;;;;;;;;;;;;;;;;;AAkBA,SAAgB,cACd,KACA,cAC0B;CAC1B,MAAM,WAAW,gBAAgB,iBAAiB;CAClD,OAAO,OAAO,IAAI,WAAW,OAAO,QAAQ;AAC9C"}
@@ -2,7 +2,7 @@ import { StorageDriverName } from "../storage/types.mjs";
2
2
  import { Image, ImageFormat, ImageTransformOptions } from "../image/image.mjs";
3
3
  import { FileValidationOptions } from "./uploaded-file.mjs";
4
4
 
5
- //#region ../core/src/http/uploads-types.d.ts
5
+ //#region ../../packages/core/src/http/uploads-types.d.ts
6
6
  /**
7
7
  * Prefix options for file path generation
8
8
  *
@@ -1 +1 @@
1
- {"version":3,"file":"uploads-types.d.mts","names":[],"sources":["../../../../../../../core/src/http/uploads-types.ts"],"mappings":";;;;;;;;;AAyBA;;;;;;;;AAiCI;AAWJ;;;;AAA2D;AAS3D;;;KArDY,aAAA;EAqDkB;AAoB9B;;;;;;;;;;;;EA3DE,MAAA;EAyFA;;;;;AAOgC;AAQlC;;EA9FE,YAAA;EA8F0B;AAAgB;AAiB5C;;;;;EAtGE,EAAA;AAAA;;AAsGwD;AAS1D;;;;AAAiF;AAgBjF;KApHY,YAAA,sBAAkC,aAAa;;;;;;;;KAS/C,kBAAA;;;AAsJ0B;AAMtC;;;;AAAoC;AAKpC;;;;AAA2B;AAU3B;;;;;KAvJY,WAAA;EAuKV;;;;;AAcO;AAkBT;;;EA7LE,IAAA,GAAO,kBAAA;EAiMY;;;;;;;;;EAtLnB,MAAA,GAAS,YAAA;EA6LU;;;;;AAqBL;AAQhB;EAjNE,MAAA,GAAS,iBAAA;;;;;;EAOT,QAAA,GAAW,qBAAA;AAAA;;;;;;KAQD,aAAA,GAAgB,IAAI,CAAC,WAAA;;;;;;;;;;;;;;;;KAiBrB,sBAAA,IAA0B,GAAA,EAAK,KAAA,KAAU,KAAK;;;;;;;;KAS9C,oBAAA,GAAuB,qBAAA,GAAwB,sBAAsB;;;;;;;;;;;;;;;KAgBrE,qBAAA;;;;;;EAMV,IAAA;;;;;;EAOA,YAAA;;;;;;;;;EAUA,MAAA,GAAS,YAAA;;;;;;EAOT,mBAAA;;;;;;;;;;;;EAaA,MAAA,GAAS,2BAA2B;AAAA;;;;KAM1B,wBAAA;;;;KAKA,eAAA;;;;;;;;;KAUA,sBAAA;;;;EAIV,KAAA;;;;EAKA,MAAA;;;;;;EAOA,GAAA,GAAM,eAAe;;;;EAKrB,OAAA;;;;;;;;EASA,OAAA;AAAA;;;;;;;;;;;;;;;;KAkBU,2BAAA;;;;EAIV,QAAA,EAAU,QAAA,CAAS,MAAA,SAAe,sBAAA;;;;;;EAOlC,OAAA,YAAmB,wBAAA;;;;;;EAOnB,cAAA;;;;;;EAOA,eAAA;;;;;;EAOA,cAAA;AAAA;;;;;;KAQU,wBAAA;;;;EAIV,MAAA;IAAW,KAAA;IAAe,MAAA;EAAA;;;;EAK1B,OAAA;;;;EAKA,MAAA,GAAS,WAAW;;;;EAKpB,MAAA;;;;EAKA,IAAA;;;;EAKA,SAAA;AAAA"}
1
+ {"version":3,"file":"uploads-types.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/http/uploads-types.ts"],"mappings":";;;;;;;;;AAyBA;;;;;;;;AAiCI;AAWJ;;;;AAA2D;AAS3D;;;KArDY,aAAA;EAqDkB;AAoB9B;;;;;;;;;;;;EA3DE,MAAA;EAyFA;;;;;AAOgC;AAQlC;;EA9FE,YAAA;EA8F0B;AAAgB;AAiB5C;;;;;EAtGE,EAAA;AAAA;;AAsGwD;AAS1D;;;;AAAiF;AAgBjF;KApHY,YAAA,sBAAkC,aAAa;;;;;;;;KAS/C,kBAAA;;;AAsJ0B;AAMtC;;;;AAAoC;AAKpC;;;;AAA2B;AAU3B;;;;;KAvJY,WAAA;EAuKV;;;;;AAcO;AAkBT;;;EA7LE,IAAA,GAAO,kBAAA;EAiMY;;;;;;;;;EAtLnB,MAAA,GAAS,YAAA;EA6LU;;;;;AAqBL;AAQhB;EAjNE,MAAA,GAAS,iBAAA;;;;;;EAOT,QAAA,GAAW,qBAAA;AAAA;;;;;;KAQD,aAAA,GAAgB,IAAI,CAAC,WAAA;;;;;;;;;;;;;;;;KAiBrB,sBAAA,IAA0B,GAAA,EAAK,KAAA,KAAU,KAAK;;;;;;;;KAS9C,oBAAA,GAAuB,qBAAA,GAAwB,sBAAsB;;;;;;;;;;;;;;;KAgBrE,qBAAA;;;;;;EAMV,IAAA;;;;;;EAOA,YAAA;;;;;;;;;EAUA,MAAA,GAAS,YAAA;;;;;;EAOT,mBAAA;;;;;;;;;;;;EAaA,MAAA,GAAS,2BAA2B;AAAA;;;;KAM1B,wBAAA;;;;KAKA,eAAA;;;;;;;;;KAUA,sBAAA;;;;EAIV,KAAA;;;;EAKA,MAAA;;;;;;EAOA,GAAA,GAAM,eAAe;;;;EAKrB,OAAA;;;;;;;;EASA,OAAA;AAAA;;;;;;;;;;;;;;;;KAkBU,2BAAA;;;;EAIV,QAAA,EAAU,QAAA,CAAS,MAAA,SAAe,sBAAA;;;;;;EAOlC,OAAA,YAAmB,wBAAA;;;;;;EAOnB,cAAA;;;;;;EAOA,eAAA;;;;;;EAOA,cAAA;AAAA;;;;;;KAQU,wBAAA;;;;EAIV,MAAA;IAAW,KAAA;IAAe,MAAA;EAAA;;;;EAK1B,OAAA;;;;EAKA,MAAA,GAAS,WAAW;;;;EAKpB,MAAA;;;;EAKA,IAAA;;;;EAKA,SAAA;AAAA"}
@@ -1,4 +1,4 @@
1
- //#region ../core/src/http/xmlable.d.ts
1
+ //#region ../../packages/core/src/http/xmlable.d.ts
2
2
  /**
3
3
  * A class contract for anything `response.xml()` can serialize.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"xmlable.d.mts","names":[],"sources":["../../../../../../../core/src/http/xmlable.ts"],"mappings":";;AAOA;;;;AACO;;UADU,OAAA;EACf,KAAK;AAAA"}
1
+ {"version":3,"file":"xmlable.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/http/xmlable.ts"],"mappings":";;AAOA;;;;AACO;;UADU,OAAA;EACf,KAAK;AAAA"}
@@ -1,6 +1,6 @@
1
1
  import sharp, { FormatEnum } from "sharp";
2
2
 
3
- //#region ../core/src/image/image.d.ts
3
+ //#region ../../packages/core/src/image/image.d.ts
4
4
  type ImageFormat = keyof FormatEnum;
5
5
  type ImageInput = string | Buffer | Uint8Array | ArrayBuffer;
6
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"image.d.mts","names":[],"sources":["../../../../../../../core/src/image/image.ts"],"mappings":"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"}
1
+ {"version":3,"file":"image.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/image/image.ts"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { safeFetchToBuffer } from "../storage/utils/safe-fetch.mjs";
2
2
  import { createRequire } from "node:module";
3
3
 
4
- //#region ../core/src/image/image.ts
4
+ //#region ../../packages/core/src/image/image.ts
5
5
  /**
6
6
  * Installation instructions for sharp
7
7
  */