@warlock.js/core 5.29.0 → 5.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +168 -4
- package/README.md +28 -23
- package/bin/source-load-hook.mjs +63 -0
- package/bin/warlock.js +102 -42
- package/esm/application/app.d.mts +1 -1
- package/esm/application/app.d.mts.map +1 -1
- package/esm/application/app.mjs +1 -1
- package/esm/application/app.mjs.map +1 -1
- package/esm/application/application-config-types.d.mts +1 -1
- package/esm/application/application-config-types.d.mts.map +1 -1
- package/esm/application/application.d.mts +1 -1
- package/esm/application/application.d.mts.map +1 -1
- package/esm/application/application.mjs +1 -1
- package/esm/application/application.mjs.map +1 -1
- package/esm/application/boot-signal.d.mts +1 -1
- package/esm/application/boot-signal.d.mts.map +1 -1
- package/esm/application/boot-signal.mjs +1 -1
- package/esm/application/boot-signal.mjs.map +1 -1
- package/esm/application/public-url.d.mts +1 -1
- package/esm/application/public-url.d.mts.map +1 -1
- package/esm/application/public-url.mjs +1 -1
- package/esm/application/public-url.mjs.map +1 -1
- package/esm/application/roles.d.mts +1 -1
- package/esm/application/roles.d.mts.map +1 -1
- package/esm/application/roles.mjs +1 -1
- package/esm/application/roles.mjs.map +1 -1
- package/esm/benchmark/benchmark-snapshots.d.mts +1 -1
- package/esm/benchmark/benchmark-snapshots.d.mts.map +1 -1
- package/esm/benchmark/benchmark-snapshots.mjs +1 -1
- package/esm/benchmark/benchmark-snapshots.mjs.map +1 -1
- package/esm/benchmark/benchmark.d.mts +1 -1
- package/esm/benchmark/benchmark.d.mts.map +1 -1
- package/esm/benchmark/benchmark.mjs +1 -1
- package/esm/benchmark/benchmark.mjs.map +1 -1
- package/esm/benchmark/channels/console.channel.d.mts +1 -1
- package/esm/benchmark/channels/console.channel.d.mts.map +1 -1
- package/esm/benchmark/channels/console.channel.mjs +1 -1
- package/esm/benchmark/channels/console.channel.mjs.map +1 -1
- package/esm/benchmark/channels/noop.channel.d.mts +1 -1
- package/esm/benchmark/channels/noop.channel.d.mts.map +1 -1
- package/esm/benchmark/channels/noop.channel.mjs +1 -1
- package/esm/benchmark/channels/noop.channel.mjs.map +1 -1
- package/esm/benchmark/profiler.d.mts +1 -1
- package/esm/benchmark/profiler.d.mts.map +1 -1
- package/esm/benchmark/profiler.mjs +1 -1
- package/esm/benchmark/profiler.mjs.map +1 -1
- package/esm/benchmark/types.d.mts +1 -1
- package/esm/benchmark/types.d.mts.map +1 -1
- package/esm/bootstrap/setup.d.mts +1 -1
- package/esm/bootstrap/setup.d.mts.map +1 -1
- package/esm/bootstrap/setup.mjs +1 -1
- package/esm/bootstrap/setup.mjs.map +1 -1
- package/esm/bootstrap.d.mts +1 -1
- package/esm/bootstrap.d.mts.map +1 -1
- package/esm/bootstrap.mjs +1 -1
- package/esm/bootstrap.mjs.map +1 -1
- package/esm/cache/database-cache-driver.d.mts +1 -1
- package/esm/cache/database-cache-driver.d.mts.map +1 -1
- package/esm/cache/database-cache-driver.mjs +1 -1
- package/esm/cache/database-cache-driver.mjs.map +1 -1
- package/esm/cache/index.mjs +1 -1
- package/esm/cache/index.mjs.map +1 -1
- package/esm/cli/cli-commands.manager.mjs +1 -1
- package/esm/cli/cli-commands.manager.mjs.map +1 -1
- package/esm/cli/cli-commands.utils.mjs +1 -1
- package/esm/cli/cli-commands.utils.mjs.map +1 -1
- package/esm/cli/commands/add.command.mjs +5 -3
- package/esm/cli/commands/add.command.mjs.map +1 -1
- package/esm/cli/commands/agents-md/agents-md-command.action.mjs +69 -0
- package/esm/cli/commands/agents-md/agents-md-command.action.mjs.map +1 -0
- package/esm/cli/commands/agents-md.command.mjs +38 -0
- package/esm/cli/commands/agents-md.command.mjs.map +1 -0
- package/esm/cli/commands/board/board-command.action.mjs +279 -0
- package/esm/cli/commands/board/board-command.action.mjs.map +1 -0
- package/esm/cli/commands/board.command.mjs +78 -0
- package/esm/cli/commands/board.command.mjs.map +1 -0
- package/esm/cli/commands/build.command.mjs +7 -2
- package/esm/cli/commands/build.command.mjs.map +1 -1
- package/esm/cli/commands/check/check-command.action.mjs +57 -0
- package/esm/cli/commands/check/check-command.action.mjs.map +1 -0
- package/esm/cli/commands/check/child-typecheck.mjs +66 -0
- package/esm/cli/commands/check/child-typecheck.mjs.map +1 -0
- package/esm/cli/commands/check/format-problems.mjs +43 -0
- package/esm/cli/commands/check/format-problems.mjs.map +1 -0
- package/esm/cli/commands/check/typecheck-command.action.mjs +61 -0
- package/esm/cli/commands/check/typecheck-command.action.mjs.map +1 -0
- package/esm/cli/commands/check.command.mjs +50 -0
- package/esm/cli/commands/check.command.mjs.map +1 -0
- package/esm/cli/commands/create-database.command.mjs +1 -1
- package/esm/cli/commands/create-database.command.mjs.map +1 -1
- package/esm/cli/commands/dev-server.command.mjs +10 -2
- package/esm/cli/commands/dev-server.command.mjs.map +1 -1
- package/esm/cli/commands/doctor/boot-for-diagnostics.mjs +9 -4
- package/esm/cli/commands/doctor/boot-for-diagnostics.mjs.map +1 -1
- package/esm/cli/commands/doctor/check.types.d.mts +76 -0
- package/esm/cli/commands/doctor/check.types.d.mts.map +1 -0
- package/esm/cli/commands/doctor/checks/config.check.mjs +2 -1
- package/esm/cli/commands/doctor/checks/config.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/connectors.check.mjs +3 -1
- package/esm/cli/commands/doctor/checks/connectors.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/handler-signature.check.mjs +2 -1
- package/esm/cli/commands/doctor/checks/handler-signature.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/health.check.mjs +4 -1
- package/esm/cli/commands/doctor/checks/health.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/index.mjs +1 -1
- package/esm/cli/commands/doctor/checks/index.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs +2 -1
- package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs +2 -1
- package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/optional-peers.check.mjs +2 -1
- package/esm/cli/commands/doctor/checks/optional-peers.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs +5 -1
- package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/routes.check.mjs +4 -1
- package/esm/cli/commands/doctor/checks/routes.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/doctor-command.action.mjs +15 -7
- package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -1
- package/esm/cli/commands/doctor/format-report.mjs +31 -3
- package/esm/cli/commands/doctor/format-report.mjs.map +1 -1
- package/esm/cli/commands/doctor/run-checks.mjs +1 -1
- package/esm/cli/commands/doctor/run-checks.mjs.map +1 -1
- package/esm/cli/commands/doctor.command.mjs +5 -1
- package/esm/cli/commands/doctor.command.mjs.map +1 -1
- package/esm/cli/commands/drop-tables.command.mjs +1 -1
- package/esm/cli/commands/drop-tables.command.mjs.map +1 -1
- package/esm/cli/commands/explain/explain-command.action.mjs +64 -0
- package/esm/cli/commands/explain/explain-command.action.mjs.map +1 -0
- package/esm/cli/commands/explain.command.mjs +23 -0
- package/esm/cli/commands/explain.command.mjs.map +1 -0
- package/esm/cli/commands/generate/generate.command.mjs +125 -125
- package/esm/cli/commands/generate/generate.command.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/column-dsl-parser.mjs +1 -1
- package/esm/cli/commands/generate/generators/column-dsl-parser.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/controller.generator.mjs +1 -1
- package/esm/cli/commands/generate/generators/controller.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/endpoint.generator.mjs +311 -0
- package/esm/cli/commands/generate/generators/endpoint.generator.mjs.map +1 -0
- package/esm/cli/commands/generate/generators/migration.generator.mjs +2 -2
- package/esm/cli/commands/generate/generators/migration.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/model.generator.mjs +2 -2
- package/esm/cli/commands/generate/generators/model.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/module.generator.mjs +1 -1
- package/esm/cli/commands/generate/generators/module.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/repository.generator.mjs +1 -1
- package/esm/cli/commands/generate/generators/repository.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/resource.generator.mjs +1 -1
- package/esm/cli/commands/generate/generators/resource.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/service.generator.mjs +1 -1
- package/esm/cli/commands/generate/generators/service.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/use-case.generator.mjs +1 -1
- package/esm/cli/commands/generate/generators/use-case.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/templates/endpoint-stubs.mjs +341 -0
- package/esm/cli/commands/generate/templates/endpoint-stubs.mjs.map +1 -0
- package/esm/cli/commands/generate/templates/stubs.mjs +20 -7
- package/esm/cli/commands/generate/templates/stubs.mjs.map +1 -1
- package/esm/cli/commands/generate/utils/endpoint-schema.mjs +137 -0
- package/esm/cli/commands/generate/utils/endpoint-schema.mjs.map +1 -0
- package/esm/cli/commands/generate/utils/name-parser.mjs +2 -2
- package/esm/cli/commands/generate/utils/name-parser.mjs.map +1 -1
- package/esm/cli/commands/generate/utils/path-resolver.mjs +1 -1
- package/esm/cli/commands/generate/utils/path-resolver.mjs.map +1 -1
- package/esm/cli/commands/generate/utils/prompt.mjs +1 -1
- package/esm/cli/commands/generate/utils/prompt.mjs.map +1 -1
- package/esm/cli/commands/generate/utils/writer.mjs +39 -14
- package/esm/cli/commands/generate/utils/writer.mjs.map +1 -1
- package/esm/cli/commands/inspect/inspect-command.action.mjs +72 -0
- package/esm/cli/commands/inspect/inspect-command.action.mjs.map +1 -0
- package/esm/cli/commands/inspect.command.mjs +39 -0
- package/esm/cli/commands/inspect.command.mjs.map +1 -0
- package/esm/cli/commands/mcp/mcp-command.action.mjs +103 -0
- package/esm/cli/commands/mcp/mcp-command.action.mjs.map +1 -0
- package/esm/cli/commands/mcp.command.mjs +76 -0
- package/esm/cli/commands/mcp.command.mjs.map +1 -0
- package/esm/cli/commands/migrate.command.mjs +1 -1
- package/esm/cli/commands/migrate.command.mjs.map +1 -1
- package/esm/cli/commands/openapi-generator.action.mjs +1 -1
- package/esm/cli/commands/openapi-generator.action.mjs.map +1 -1
- package/esm/cli/commands/openapi-generator.command.mjs +1 -1
- package/esm/cli/commands/openapi-generator.command.mjs.map +1 -1
- package/esm/cli/commands/postman-generator.action.mjs +1 -1
- package/esm/cli/commands/postman-generator.action.mjs.map +1 -1
- package/esm/cli/commands/postman-generator.command.mjs +1 -1
- package/esm/cli/commands/postman-generator.command.mjs.map +1 -1
- package/esm/cli/commands/routes/diff-page-routes.mjs +1 -1
- package/esm/cli/commands/routes/diff-page-routes.mjs.map +1 -1
- package/esm/cli/commands/routes/format-routes-table.mjs +1 -1
- package/esm/cli/commands/routes/format-routes-table.mjs.map +1 -1
- package/esm/cli/commands/routes/route-row.mjs +1 -1
- package/esm/cli/commands/routes/route-row.mjs.map +1 -1
- package/esm/cli/commands/routes/routes-command.action.mjs +1 -1
- package/esm/cli/commands/routes/routes-command.action.mjs.map +1 -1
- package/esm/cli/commands/routes/routes-diff.action.mjs +2 -2
- package/esm/cli/commands/routes/routes-diff.action.mjs.map +1 -1
- package/esm/cli/commands/routes/with-console-on-stderr.mjs +1 -1
- package/esm/cli/commands/routes/with-console-on-stderr.mjs.map +1 -1
- package/esm/cli/commands/routes.command.mjs +1 -1
- package/esm/cli/commands/routes.command.mjs.map +1 -1
- package/esm/cli/commands/seed.command.mjs +1 -1
- package/esm/cli/commands/seed.command.mjs.map +1 -1
- package/esm/cli/commands/start-production.command.mjs +1 -1
- package/esm/cli/commands/start-production.command.mjs.map +1 -1
- package/esm/cli/commands/storage-put.action.mjs +1 -1
- package/esm/cli/commands/storage-put.action.mjs.map +1 -1
- package/esm/cli/commands/storage-put.command.mjs +1 -1
- package/esm/cli/commands/storage-put.command.mjs.map +1 -1
- package/esm/cli/commands/test.command.mjs +131 -0
- package/esm/cli/commands/test.command.mjs.map +1 -0
- package/esm/cli/commands/trace/trace-command.action.mjs +145 -0
- package/esm/cli/commands/trace/trace-command.action.mjs.map +1 -0
- package/esm/cli/commands/trace.command.mjs +60 -0
- package/esm/cli/commands/trace.command.mjs.map +1 -0
- package/esm/cli/commands/typecheck.command.mjs +40 -0
- package/esm/cli/commands/typecheck.command.mjs.map +1 -0
- package/esm/cli/commands/typings-generator.command.mjs +1 -1
- package/esm/cli/commands/typings-generator.command.mjs.map +1 -1
- package/esm/cli/commands/update.command.mjs +1 -1
- package/esm/cli/commands/update.command.mjs.map +1 -1
- package/esm/cli/commands/upgrade.command.mjs +46 -0
- package/esm/cli/commands/upgrade.command.mjs.map +1 -0
- package/esm/cli/commands-loader.mjs +1 -1
- package/esm/cli/commands-loader.mjs.map +1 -1
- package/esm/cli/flush-and-exit.mjs +34 -0
- package/esm/cli/flush-and-exit.mjs.map +1 -0
- package/esm/cli/framework-cli-commands.mjs +24 -2
- package/esm/cli/framework-cli-commands.mjs.map +1 -1
- package/esm/cli/parse-cli-args.mjs +2 -1
- package/esm/cli/parse-cli-args.mjs.map +1 -1
- package/esm/cli/start.mjs +1 -1
- package/esm/cli/start.mjs.map +1 -1
- package/esm/cli/string-similarity.mjs +1 -1
- package/esm/cli/string-similarity.mjs.map +1 -1
- package/esm/commands/cli-command.d.mts +1 -1
- package/esm/commands/cli-command.d.mts.map +1 -1
- package/esm/commands/cli-command.mjs +1 -1
- package/esm/commands/cli-command.mjs.map +1 -1
- package/esm/commands/types.d.mts +1 -1
- package/esm/commands/types.d.mts.map +1 -1
- package/esm/config/config-getter.d.mts +1 -1
- package/esm/config/config-getter.d.mts.map +1 -1
- package/esm/config/config-getter.mjs +1 -1
- package/esm/config/config-getter.mjs.map +1 -1
- package/esm/config/config-handlers.d.mts +1 -1
- package/esm/config/config-handlers.d.mts.map +1 -1
- package/esm/config/config-handlers.mjs +1 -1
- package/esm/config/config-handlers.mjs.map +1 -1
- package/esm/config/config-key-from-path.mjs +1 -1
- package/esm/config/config-key-from-path.mjs.map +1 -1
- package/esm/config/config-loader.d.mts +1 -1
- package/esm/config/config-loader.d.mts.map +1 -1
- package/esm/config/config-loader.mjs +35 -14
- package/esm/config/config-loader.mjs.map +1 -1
- package/esm/config/config-manager.mjs +1 -1
- package/esm/config/config-manager.mjs.map +1 -1
- package/esm/config/config-schema.d.mts +67 -0
- package/esm/config/config-schema.d.mts.map +1 -0
- package/esm/config/config-schema.mjs +77 -0
- package/esm/config/config-schema.mjs.map +1 -0
- package/esm/config/config-setter.d.mts +1 -1
- package/esm/config/config-setter.d.mts.map +1 -1
- package/esm/config/config-setter.mjs +1 -1
- package/esm/config/config-setter.mjs.map +1 -1
- package/esm/config/config-special-handlers.d.mts +1 -1
- package/esm/config/config-special-handlers.d.mts.map +1 -1
- package/esm/config/config-special-handlers.mjs +1 -1
- package/esm/config/config-special-handlers.mjs.map +1 -1
- package/esm/config/index.d.mts +6 -0
- package/esm/config/index.mjs +1 -0
- package/esm/config/load-config-files.mjs +1 -1
- package/esm/config/load-config-files.mjs.map +1 -1
- package/esm/config/locale-configuration.mjs +1 -1
- package/esm/config/locale-configuration.mjs.map +1 -1
- package/esm/config/types.d.mts +1 -1
- package/esm/config/types.d.mts.map +1 -1
- package/esm/connectors/access-connector.d.mts +1 -1
- package/esm/connectors/access-connector.d.mts.map +1 -1
- package/esm/connectors/access-connector.mjs +1 -1
- package/esm/connectors/access-connector.mjs.map +1 -1
- package/esm/connectors/ai-connector.d.mts +1 -1
- package/esm/connectors/ai-connector.d.mts.map +1 -1
- package/esm/connectors/ai-connector.mjs +1 -1
- package/esm/connectors/ai-connector.mjs.map +1 -1
- package/esm/connectors/assert-no-reserved-connector-names.d.mts +1 -1
- package/esm/connectors/assert-no-reserved-connector-names.d.mts.map +1 -1
- package/esm/connectors/assert-no-reserved-connector-names.mjs +3 -2
- package/esm/connectors/assert-no-reserved-connector-names.mjs.map +1 -1
- package/esm/connectors/assert-unique-connector-names.d.mts +1 -1
- package/esm/connectors/assert-unique-connector-names.d.mts.map +1 -1
- package/esm/connectors/assert-unique-connector-names.mjs +27 -3
- package/esm/connectors/assert-unique-connector-names.mjs.map +1 -1
- package/esm/connectors/base-connector.d.mts +1 -1
- package/esm/connectors/base-connector.d.mts.map +1 -1
- package/esm/connectors/base-connector.mjs +1 -1
- package/esm/connectors/base-connector.mjs.map +1 -1
- package/esm/connectors/cache-connector.d.mts +1 -1
- package/esm/connectors/cache-connector.d.mts.map +1 -1
- package/esm/connectors/cache-connector.mjs +1 -1
- package/esm/connectors/cache-connector.mjs.map +1 -1
- package/esm/connectors/connectors-manager.d.mts +1 -1
- package/esm/connectors/connectors-manager.d.mts.map +1 -1
- package/esm/connectors/connectors-manager.mjs +2 -2
- package/esm/connectors/connectors-manager.mjs.map +1 -1
- package/esm/connectors/database-connector.d.mts +1 -1
- package/esm/connectors/database-connector.d.mts.map +1 -1
- package/esm/connectors/database-connector.mjs +1 -1
- package/esm/connectors/database-connector.mjs.map +1 -1
- package/esm/connectors/describe-server-address.mjs +1 -1
- package/esm/connectors/describe-server-address.mjs.map +1 -1
- package/esm/connectors/herald-connector.d.mts +1 -1
- package/esm/connectors/herald-connector.d.mts.map +1 -1
- package/esm/connectors/herald-connector.mjs +1 -1
- package/esm/connectors/herald-connector.mjs.map +1 -1
- package/esm/connectors/http-connector.d.mts +1 -1
- package/esm/connectors/http-connector.d.mts.map +1 -1
- package/esm/connectors/http-connector.mjs +4 -3
- package/esm/connectors/http-connector.mjs.map +1 -1
- package/esm/connectors/logger-connector.d.mts +1 -1
- package/esm/connectors/logger-connector.d.mts.map +1 -1
- package/esm/connectors/logger-connector.mjs +1 -1
- package/esm/connectors/logger-connector.mjs.map +1 -1
- package/esm/connectors/mail-connector.d.mts +1 -1
- package/esm/connectors/mail-connector.d.mts.map +1 -1
- package/esm/connectors/mail-connector.mjs +1 -1
- package/esm/connectors/mail-connector.mjs.map +1 -1
- package/esm/connectors/notifications-connector.d.mts +1 -1
- package/esm/connectors/notifications-connector.d.mts.map +1 -1
- package/esm/connectors/notifications-connector.mjs +1 -1
- package/esm/connectors/notifications-connector.mjs.map +1 -1
- package/esm/connectors/read-bound-port.mjs +1 -1
- package/esm/connectors/read-bound-port.mjs.map +1 -1
- package/esm/connectors/register-configured-connectors.d.mts +1 -1
- package/esm/connectors/register-configured-connectors.d.mts.map +1 -1
- package/esm/connectors/register-configured-connectors.mjs +1 -1
- package/esm/connectors/register-configured-connectors.mjs.map +1 -1
- package/esm/connectors/single-server-warnings.mjs +1 -1
- package/esm/connectors/single-server-warnings.mjs.map +1 -1
- package/esm/connectors/socket-connector.d.mts +1 -1
- package/esm/connectors/socket-connector.d.mts.map +1 -1
- package/esm/connectors/socket-connector.mjs +1 -1
- package/esm/connectors/socket-connector.mjs.map +1 -1
- package/esm/connectors/storage.connector.d.mts +1 -1
- package/esm/connectors/storage.connector.d.mts.map +1 -1
- package/esm/connectors/storage.connector.mjs +1 -1
- package/esm/connectors/storage.connector.mjs.map +1 -1
- package/esm/connectors/types.d.mts +1 -1
- package/esm/connectors/types.d.mts.map +1 -1
- package/esm/connectors/types.mjs +1 -1
- package/esm/connectors/types.mjs.map +1 -1
- package/esm/container/container-instance-registry.mjs +1 -1
- package/esm/container/container-instance-registry.mjs.map +1 -1
- package/esm/container/development-app-modules.d.mts +1 -1
- package/esm/container/development-app-modules.d.mts.map +1 -1
- package/esm/container/development-model-modules.d.mts +1 -1
- package/esm/container/development-model-modules.d.mts.map +1 -1
- package/esm/container/index.d.mts +1 -1
- package/esm/container/index.d.mts.map +1 -1
- package/esm/container/index.mjs +1 -1
- package/esm/container/index.mjs.map +1 -1
- package/esm/database/create-database-action.mjs +1 -1
- package/esm/database/create-database-action.mjs.map +1 -1
- package/esm/database/drop-tables-action.mjs +1 -1
- package/esm/database/drop-tables-action.mjs.map +1 -1
- package/esm/database/migrate-action.mjs +1 -1
- package/esm/database/migrate-action.mjs.map +1 -1
- package/esm/database/models/database-log/database-log.d.mts +3 -39
- package/esm/database/models/database-log/database-log.d.mts.map +1 -1
- package/esm/database/models/database-log/database-log.mjs +1 -1
- package/esm/database/models/database-log/database-log.mjs.map +1 -1
- package/esm/database/pending-exit-code.mjs +1 -1
- package/esm/database/pending-exit-code.mjs.map +1 -1
- package/esm/database/resolve-pending-migrations.mjs +1 -1
- package/esm/database/resolve-pending-migrations.mjs.map +1 -1
- package/esm/database/seed-command-action.mjs +1 -1
- package/esm/database/seed-command-action.mjs.map +1 -1
- package/esm/database/seeds/seed-records-table-migration.mjs +1 -1
- package/esm/database/seeds/seed-records-table-migration.mjs.map +1 -1
- package/esm/database/seeds/seeder.d.mts +1 -1
- package/esm/database/seeds/seeder.d.mts.map +1 -1
- package/esm/database/seeds/seeder.errors.d.mts +5 -1
- package/esm/database/seeds/seeder.errors.d.mts.map +1 -1
- package/esm/database/seeds/seeder.errors.mjs +3 -1
- package/esm/database/seeds/seeder.errors.mjs.map +1 -1
- package/esm/database/seeds/seeder.mjs +1 -1
- package/esm/database/seeds/seeder.mjs.map +1 -1
- package/esm/database/seeds/seeders.manager.mjs +1 -1
- package/esm/database/seeds/seeders.manager.mjs.map +1 -1
- package/esm/database/seeds/seeds-table-migration.mjs +1 -1
- package/esm/database/seeds/seeds-table-migration.mjs.map +1 -1
- package/esm/database/seeds/types.d.mts +1 -1
- package/esm/database/seeds/types.d.mts.map +1 -1
- package/esm/database/seeds/utils.mjs +1 -1
- package/esm/database/seeds/utils.mjs.map +1 -1
- package/esm/database/utils.d.mts +1 -1
- package/esm/database/utils.d.mts.map +1 -1
- package/esm/database/utils.mjs +1 -1
- package/esm/database/utils.mjs.map +1 -1
- package/esm/dev-server/app-module-registry.mjs +1 -1
- package/esm/dev-server/app-module-registry.mjs.map +1 -1
- package/esm/dev-server/boot-precondition-error.mjs +2 -1
- package/esm/dev-server/boot-precondition-error.mjs.map +1 -1
- package/esm/dev-server/build-development-openapi-document.mjs +1 -1
- package/esm/dev-server/build-development-openapi-document.mjs.map +1 -1
- package/esm/dev-server/check-for-updates.mjs +1 -1
- package/esm/dev-server/check-for-updates.mjs.map +1 -1
- package/esm/dev-server/collect-development-api-routes.mjs +1 -1
- package/esm/dev-server/collect-development-api-routes.mjs.map +1 -1
- package/esm/dev-server/create-worker.mjs +16 -10
- package/esm/dev-server/create-worker.mjs.map +1 -1
- package/esm/dev-server/dependency-graph.d.mts +1 -1
- package/esm/dev-server/dependency-graph.d.mts.map +1 -1
- package/esm/dev-server/dependency-graph.mjs +1 -1
- package/esm/dev-server/dependency-graph.mjs.map +1 -1
- package/esm/dev-server/dev-agent-tooling.mjs +135 -0
- package/esm/dev-server/dev-agent-tooling.mjs.map +1 -0
- package/esm/dev-server/dev-logger.mjs +1 -1
- package/esm/dev-server/dev-logger.mjs.map +1 -1
- package/esm/dev-server/development-server.mjs +9 -1
- package/esm/dev-server/development-server.mjs.map +1 -1
- package/esm/dev-server/events.mjs +1 -1
- package/esm/dev-server/events.mjs.map +1 -1
- package/esm/dev-server/extract-translation-keys.mjs +1 -1
- package/esm/dev-server/extract-translation-keys.mjs.map +1 -1
- package/esm/dev-server/file-event-handler.mjs +1 -1
- package/esm/dev-server/file-event-handler.mjs.map +1 -1
- package/esm/dev-server/file-manager.d.mts +1 -1
- package/esm/dev-server/file-manager.d.mts.map +1 -1
- package/esm/dev-server/file-manager.mjs +1 -1
- package/esm/dev-server/file-manager.mjs.map +1 -1
- package/esm/dev-server/file-operations.d.mts +1 -1
- package/esm/dev-server/file-operations.d.mts.map +1 -1
- package/esm/dev-server/file-operations.mjs +1 -1
- package/esm/dev-server/file-operations.mjs.map +1 -1
- package/esm/dev-server/files-orchestrator.mjs +22 -20
- package/esm/dev-server/files-orchestrator.mjs.map +1 -1
- package/esm/dev-server/files-watcher.mjs +2 -2
- package/esm/dev-server/files-watcher.mjs.map +1 -1
- package/esm/dev-server/flags.mjs +1 -1
- package/esm/dev-server/flags.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/base-health-checker.mjs +1 -1
- package/esm/dev-server/health-checker/checkers/base-health-checker.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs +3 -4
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/oxlint-health-checker.mjs +33 -0
- package/esm/dev-server/health-checker/checkers/oxlint-health-checker.mjs.map +1 -0
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs +1 -1
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs.map +1 -1
- package/esm/dev-server/health-checker/default-health-checkers.mjs +31 -0
- package/esm/dev-server/health-checker/default-health-checkers.mjs.map +1 -0
- package/esm/dev-server/health-checker/file-health-checker.contract.d.mts +10 -4
- package/esm/dev-server/health-checker/file-health-checker.contract.d.mts.map +1 -1
- package/esm/dev-server/health-checker/file-health-result.d.mts +1 -1
- package/esm/dev-server/health-checker/file-health-result.d.mts.map +1 -1
- package/esm/dev-server/health-checker/file-health-result.mjs +1 -1
- package/esm/dev-server/health-checker/file-health-result.mjs.map +1 -1
- package/esm/dev-server/health-checker/files-healthcare.manager.mjs +16 -5
- package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
- package/esm/dev-server/health-checker/oxlint-runner.mjs +302 -0
- package/esm/dev-server/health-checker/oxlint-runner.mjs.map +1 -0
- package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs +1 -1
- package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs.map +1 -1
- package/esm/dev-server/health-checker/workers/oxlint-health.worker.d.mts +1 -0
- package/esm/dev-server/health-checker/workers/oxlint-health.worker.mjs +42 -0
- package/esm/dev-server/health-checker/workers/oxlint-health.worker.mjs.map +1 -0
- package/esm/dev-server/health-checker/workers/ts-health.worker.mjs +1 -1
- package/esm/dev-server/health-checker/workers/ts-health.worker.mjs.map +1 -1
- package/esm/dev-server/layer-executor.mjs +1 -1
- package/esm/dev-server/layer-executor.mjs.map +1 -1
- package/esm/dev-server/legacy-locales-warning.mjs +1 -1
- package/esm/dev-server/legacy-locales-warning.mjs.map +1 -1
- package/esm/dev-server/loader/build-transpile-init.mjs +1 -1
- package/esm/dev-server/loader/build-transpile-init.mjs.map +1 -1
- package/esm/dev-server/loader/hook-thread.d.mts +1 -1
- package/esm/dev-server/loader/hook-thread.d.mts.map +1 -1
- package/esm/dev-server/loader/hook-thread.mjs +1 -1
- package/esm/dev-server/loader/hook-thread.mjs.map +1 -1
- package/esm/dev-server/loader/load-hook.d.mts +1 -1
- package/esm/dev-server/loader/load-hook.d.mts.map +1 -1
- package/esm/dev-server/loader/load-hook.mjs +1 -1
- package/esm/dev-server/loader/load-hook.mjs.map +1 -1
- package/esm/dev-server/loader/loader-port-acks.mjs +34 -0
- package/esm/dev-server/loader/loader-port-acks.mjs.map +1 -0
- package/esm/dev-server/loader/own-resolver.mjs +1 -1
- package/esm/dev-server/loader/own-resolver.mjs.map +1 -1
- package/esm/dev-server/loader/register-loader.mjs +2 -2
- package/esm/dev-server/loader/register-loader.mjs.map +1 -1
- package/esm/dev-server/loader/resolve-capture.mjs +1 -1
- package/esm/dev-server/loader/resolve-capture.mjs.map +1 -1
- package/esm/dev-server/loader/resolve-hook.d.mts +1 -1
- package/esm/dev-server/loader/resolve-hook.d.mts.map +1 -1
- package/esm/dev-server/loader/resolve-hook.mjs +1 -1
- package/esm/dev-server/loader/resolve-hook.mjs.map +1 -1
- package/esm/dev-server/loader/source-slug.mjs +1 -1
- package/esm/dev-server/loader/source-slug.mjs.map +1 -1
- package/esm/dev-server/loader/transpile-cache.mjs +2 -2
- package/esm/dev-server/loader/transpile-cache.mjs.map +1 -1
- package/esm/dev-server/loader/version-registry.mjs +1 -1
- package/esm/dev-server/loader/version-registry.mjs.map +1 -1
- package/esm/dev-server/manifest-manager.d.mts +1 -1
- package/esm/dev-server/manifest-manager.d.mts.map +1 -1
- package/esm/dev-server/manifest-manager.mjs +1 -1
- package/esm/dev-server/manifest-manager.mjs.map +1 -1
- package/esm/dev-server/model-module-registry.mjs +1 -1
- package/esm/dev-server/model-module-registry.mjs.map +1 -1
- package/esm/dev-server/model-resource-typings.mjs +1 -1
- package/esm/dev-server/model-resource-typings.mjs.map +1 -1
- package/esm/dev-server/module-loader.mjs +2 -1
- package/esm/dev-server/module-loader.mjs.map +1 -1
- package/esm/dev-server/package-json-manager.mjs +1 -1
- package/esm/dev-server/package-json-manager.mjs.map +1 -1
- package/esm/dev-server/parse-imports.mjs +74 -7
- package/esm/dev-server/parse-imports.mjs.map +1 -1
- package/esm/dev-server/read-config-ast.mjs +1 -1
- package/esm/dev-server/read-config-ast.mjs.map +1 -1
- package/esm/dev-server/ready-block.mjs +1 -1
- package/esm/dev-server/ready-block.mjs.map +1 -1
- package/esm/dev-server/register-dev-shortcuts.mjs +1 -1
- package/esm/dev-server/register-dev-shortcuts.mjs.map +1 -1
- package/esm/dev-server/register-installed-devtools.mjs +1 -1
- package/esm/dev-server/register-installed-devtools.mjs.map +1 -1
- package/esm/dev-server/restart-dev-server.mjs +1 -1
- package/esm/dev-server/restart-dev-server.mjs.map +1 -1
- package/esm/dev-server/route-types-publisher.mjs +2 -2
- package/esm/dev-server/route-types-publisher.mjs.map +1 -1
- package/esm/dev-server/run-connector-typings.mjs +1 -1
- package/esm/dev-server/run-connector-typings.mjs.map +1 -1
- package/esm/dev-server/run-typings-generation.mjs +1 -1
- package/esm/dev-server/run-typings-generation.mjs.map +1 -1
- package/esm/dev-server/shortcuts.mjs +1 -1
- package/esm/dev-server/shortcuts.mjs.map +1 -1
- package/esm/dev-server/special-file-patterns.mjs +1 -1
- package/esm/dev-server/special-file-patterns.mjs.map +1 -1
- package/esm/dev-server/special-files-collector.d.mts +1 -1
- package/esm/dev-server/special-files-collector.d.mts.map +1 -1
- package/esm/dev-server/special-files-collector.mjs +1 -1
- package/esm/dev-server/special-files-collector.mjs.map +1 -1
- package/esm/dev-server/start-development-server.mjs +1 -1
- package/esm/dev-server/start-development-server.mjs.map +1 -1
- package/esm/dev-server/supervisor.mjs +1 -1
- package/esm/dev-server/supervisor.mjs.map +1 -1
- package/esm/dev-server/translation-keys-sources.mjs +2 -2
- package/esm/dev-server/translation-keys-sources.mjs.map +1 -1
- package/esm/dev-server/tsconfig-manager.mjs +1 -1
- package/esm/dev-server/tsconfig-manager.mjs.map +1 -1
- package/esm/dev-server/type-generator.mjs +33 -12
- package/esm/dev-server/type-generator.mjs.map +1 -1
- package/esm/dev-server/types.d.mts +1 -1
- package/esm/dev-server/types.d.mts.map +1 -1
- package/esm/dev-server/update-check-cache.mjs +1 -1
- package/esm/dev-server/update-check-cache.mjs.map +1 -1
- package/esm/dev-server/utils.mjs +1 -1
- package/esm/dev-server/utils.mjs.map +1 -1
- package/esm/encryption/encrypt.d.mts +1 -1
- package/esm/encryption/encrypt.d.mts.map +1 -1
- package/esm/encryption/encrypt.mjs +1 -1
- package/esm/encryption/encrypt.mjs.map +1 -1
- package/esm/encryption/hash.d.mts +1 -1
- package/esm/encryption/hash.d.mts.map +1 -1
- package/esm/encryption/hash.mjs +1 -1
- package/esm/encryption/hash.mjs.map +1 -1
- package/esm/encryption/password.d.mts +1 -1
- package/esm/encryption/password.d.mts.map +1 -1
- package/esm/encryption/password.mjs +1 -1
- package/esm/encryption/password.mjs.map +1 -1
- package/esm/encryption/types.d.mts +1 -1
- package/esm/encryption/types.d.mts.map +1 -1
- package/esm/errors/container-key-missing-error.mjs +2 -1
- package/esm/errors/container-key-missing-error.mjs.map +1 -1
- package/esm/errors/error-codes.d.mts +653 -0
- package/esm/errors/error-codes.d.mts.map +1 -0
- package/esm/errors/error-codes.mjs +634 -0
- package/esm/errors/error-codes.mjs.map +1 -0
- package/esm/errors/esbuild-binary-missing-error.mjs +2 -1
- package/esm/errors/esbuild-binary-missing-error.mjs.map +1 -1
- package/esm/errors/index.d.mts +4 -0
- package/esm/errors/index.mjs +5 -0
- package/esm/errors/unknown-locale-error.mjs +2 -1
- package/esm/errors/unknown-locale-error.mjs.map +1 -1
- package/esm/errors/warlock-error.d.mts +23 -0
- package/esm/errors/warlock-error.d.mts.map +1 -0
- package/esm/errors/warlock-error.mjs +22 -0
- package/esm/errors/warlock-error.mjs.map +1 -0
- package/esm/generations/add-command.action.mjs +48 -9
- package/esm/generations/add-command.action.mjs.map +1 -1
- package/esm/generations/features/access.feature.mjs +2 -2
- package/esm/generations/features/access.feature.mjs.map +1 -1
- package/esm/generations/features/ai-anthropic.feature.mjs +1 -1
- package/esm/generations/features/ai-anthropic.feature.mjs.map +1 -1
- package/esm/generations/features/ai-bedrock.feature.mjs +1 -1
- package/esm/generations/features/ai-bedrock.feature.mjs.map +1 -1
- package/esm/generations/features/ai-google.feature.mjs +1 -1
- package/esm/generations/features/ai-google.feature.mjs.map +1 -1
- package/esm/generations/features/ai-ollama.feature.mjs +1 -1
- package/esm/generations/features/ai-ollama.feature.mjs.map +1 -1
- package/esm/generations/features/ai-openai.feature.mjs +1 -1
- package/esm/generations/features/ai-openai.feature.mjs.map +1 -1
- package/esm/generations/features/ai-panoptic.feature.mjs +1 -1
- package/esm/generations/features/ai-panoptic.feature.mjs.map +1 -1
- package/esm/generations/features/ai-tools.feature.mjs +1 -1
- package/esm/generations/features/ai-tools.feature.mjs.map +1 -1
- package/esm/generations/features/ai-workspace.feature.mjs +1 -1
- package/esm/generations/features/ai-workspace.feature.mjs.map +1 -1
- package/esm/generations/features/ai.feature.mjs +1 -1
- package/esm/generations/features/ai.feature.mjs.map +1 -1
- package/esm/generations/features/auth-google.feature.mjs +1 -1
- package/esm/generations/features/auth-google.feature.mjs.map +1 -1
- package/esm/generations/features/auth-passkeys.feature.mjs +1 -1
- package/esm/generations/features/auth-passkeys.feature.mjs.map +1 -1
- package/esm/generations/features/bull-board.feature.mjs +2 -2
- package/esm/generations/features/bull-board.feature.mjs.map +1 -1
- package/esm/generations/features/devtools.feature.mjs +1 -1
- package/esm/generations/features/devtools.feature.mjs.map +1 -1
- package/esm/generations/features/herald.feature.mjs +1 -1
- package/esm/generations/features/herald.feature.mjs.map +1 -1
- package/esm/generations/features/image.feature.mjs +1 -1
- package/esm/generations/features/image.feature.mjs.map +1 -1
- package/esm/generations/features/index.mjs +1 -1
- package/esm/generations/features/index.mjs.map +1 -1
- package/esm/generations/features/mail.feature.mjs +1 -1
- package/esm/generations/features/mail.feature.mjs.map +1 -1
- package/esm/generations/features/mongodb.feature.mjs +1 -1
- package/esm/generations/features/mongodb.feature.mjs.map +1 -1
- package/esm/generations/features/mysql.feature.mjs +1 -1
- package/esm/generations/features/mysql.feature.mjs.map +1 -1
- package/esm/generations/features/notifications.feature.mjs +124 -17
- package/esm/generations/features/notifications.feature.mjs.map +1 -1
- package/esm/generations/features/postgres.feature.mjs +1 -1
- package/esm/generations/features/postgres.feature.mjs.map +1 -1
- package/esm/generations/features/queue.feature.mjs +2 -2
- package/esm/generations/features/queue.feature.mjs.map +1 -1
- package/esm/generations/features/react-email.feature.mjs +2 -2
- package/esm/generations/features/react-email.feature.mjs.map +1 -1
- package/esm/generations/features/react.feature.mjs +1 -1
- package/esm/generations/features/react.feature.mjs.map +1 -1
- package/esm/generations/features/redis.feature.mjs +1 -1
- package/esm/generations/features/redis.feature.mjs.map +1 -1
- package/esm/generations/features/s3.feature.mjs +1 -1
- package/esm/generations/features/s3.feature.mjs.map +1 -1
- package/esm/generations/features/scheduler.feature.mjs +1 -1
- package/esm/generations/features/scheduler.feature.mjs.map +1 -1
- package/esm/generations/features/ses.feature.mjs +1 -1
- package/esm/generations/features/ses.feature.mjs.map +1 -1
- package/esm/generations/features/shadcn.feature.mjs +2 -2
- package/esm/generations/features/shadcn.feature.mjs.map +1 -1
- package/esm/generations/features/shared/insert-connector-entry.mjs +1 -1
- package/esm/generations/features/shared/insert-connector-entry.mjs.map +1 -1
- package/esm/generations/features/shared/insert-queue-dashboard-block.mjs +1 -1
- package/esm/generations/features/shared/insert-queue-dashboard-block.mjs.map +1 -1
- package/esm/generations/features/shared/link-ai-package-import.mjs +2 -2
- package/esm/generations/features/shared/link-ai-package-import.mjs.map +1 -1
- package/esm/generations/features/shared/merge-web-sitemap-config.mjs +1 -1
- package/esm/generations/features/shared/merge-web-sitemap-config.mjs.map +1 -1
- package/esm/generations/features/shared/migration-timestamp.mjs +1 -1
- package/esm/generations/features/shared/migration-timestamp.mjs.map +1 -1
- package/esm/generations/features/shared/patch-tsconfig-include.mjs +2 -2
- package/esm/generations/features/shared/patch-tsconfig-include.mjs.map +1 -1
- package/esm/generations/features/shared/relocate-conflicting-home-route.mjs +2 -2
- package/esm/generations/features/shared/relocate-conflicting-home-route.mjs.map +1 -1
- package/esm/generations/features/shared/resolve-contact-scaffold.mjs +1 -1
- package/esm/generations/features/shared/resolve-contact-scaffold.mjs.map +1 -1
- package/esm/generations/features/sitemap.feature.mjs +2 -2
- package/esm/generations/features/sitemap.feature.mjs.map +1 -1
- package/esm/generations/features/socket.feature.mjs +1 -1
- package/esm/generations/features/socket.feature.mjs.map +1 -1
- package/esm/generations/features/tailwind.feature.mjs +2 -2
- package/esm/generations/features/tailwind.feature.mjs.map +1 -1
- package/esm/generations/features/test.feature.mjs +12 -7
- package/esm/generations/features/test.feature.mjs.map +1 -1
- package/esm/generations/features/types.mjs +1 -1
- package/esm/generations/features/types.mjs.map +1 -1
- package/esm/generations/features/web.feature.mjs +2 -2
- package/esm/generations/features/web.feature.mjs.map +1 -1
- package/esm/generations/generation-fs.mjs +73 -0
- package/esm/generations/generation-fs.mjs.map +1 -0
- package/esm/generations/generation-run.mjs +185 -0
- package/esm/generations/generation-run.mjs.map +1 -0
- package/esm/generations/pnpm-build-approvals.mjs +89 -3
- package/esm/generations/pnpm-build-approvals.mjs.map +1 -1
- package/esm/generations/stubs.mjs +327 -79
- package/esm/generations/stubs.mjs.map +1 -1
- package/esm/http/boot-port-preflight.d.mts +1 -1
- package/esm/http/boot-port-preflight.d.mts.map +1 -1
- package/esm/http/boot-port-preflight.mjs +1 -1
- package/esm/http/boot-port-preflight.mjs.map +1 -1
- package/esm/http/bounded-stream-queue.d.mts +10 -0
- package/esm/http/bounded-stream-queue.d.mts.map +1 -0
- package/esm/http/bounded-stream-queue.mjs +97 -0
- package/esm/http/bounded-stream-queue.mjs.map +1 -0
- package/esm/http/build-cors-options.mjs +1 -1
- package/esm/http/build-cors-options.mjs.map +1 -1
- package/esm/http/build-rate-limit-options.d.mts +35 -1
- package/esm/http/build-rate-limit-options.d.mts.map +1 -1
- package/esm/http/build-rate-limit-options.mjs +7 -1
- package/esm/http/build-rate-limit-options.mjs.map +1 -1
- package/esm/http/conditional-request.d.mts +86 -0
- package/esm/http/conditional-request.d.mts.map +1 -0
- package/esm/http/conditional-request.mjs +121 -0
- package/esm/http/conditional-request.mjs.map +1 -0
- package/esm/http/config.d.mts +1 -1
- package/esm/http/config.d.mts.map +1 -1
- package/esm/http/config.mjs +1 -1
- package/esm/http/config.mjs.map +1 -1
- package/esm/http/context/request-context.d.mts +1 -1
- package/esm/http/context/request-context.d.mts.map +1 -1
- package/esm/http/context/request-context.mjs +1 -1
- package/esm/http/context/request-context.mjs.map +1 -1
- package/esm/http/context/request-memo.d.mts +1 -1
- package/esm/http/context/request-memo.d.mts.map +1 -1
- package/esm/http/context/request-memo.mjs +1 -1
- package/esm/http/context/request-memo.mjs.map +1 -1
- package/esm/http/createHttpApplication.d.mts +1 -1
- package/esm/http/createHttpApplication.d.mts.map +1 -1
- package/esm/http/createHttpApplication.mjs +1 -1
- package/esm/http/createHttpApplication.mjs.map +1 -1
- package/esm/http/csp.d.mts +3 -1
- package/esm/http/csp.d.mts.map +1 -1
- package/esm/http/csp.mjs +2 -1
- package/esm/http/csp.mjs.map +1 -1
- package/esm/http/csrf-default-guard.d.mts +1 -1
- package/esm/http/csrf-default-guard.d.mts.map +1 -1
- package/esm/http/csrf-default-guard.mjs +1 -1
- package/esm/http/csrf-default-guard.mjs.map +1 -1
- package/esm/http/csrf-origin-policy.d.mts +1 -1
- package/esm/http/csrf-origin-policy.d.mts.map +1 -1
- package/esm/http/csrf-origin-policy.mjs +1 -1
- package/esm/http/csrf-origin-policy.mjs.map +1 -1
- package/esm/http/database/RequestLog.d.mts +27 -135
- package/esm/http/database/RequestLog.d.mts.map +1 -1
- package/esm/http/database/RequestLog.mjs +1 -1
- package/esm/http/database/RequestLog.mjs.map +1 -1
- package/esm/http/error-codes.d.mts +1 -1
- package/esm/http/error-codes.d.mts.map +1 -1
- package/esm/http/error-codes.mjs +1 -1
- package/esm/http/error-codes.mjs.map +1 -1
- package/esm/http/error-mapper.d.mts +48 -0
- package/esm/http/error-mapper.d.mts.map +1 -0
- package/esm/http/error-mapper.mjs +48 -0
- package/esm/http/error-mapper.mjs.map +1 -0
- package/esm/http/errors/errors.d.mts +3 -1
- package/esm/http/errors/errors.d.mts.map +1 -1
- package/esm/http/errors/errors.mjs +2 -1
- package/esm/http/errors/errors.mjs.map +1 -1
- package/esm/http/escape-header-value.d.mts +18 -0
- package/esm/http/escape-header-value.d.mts.map +1 -0
- package/esm/http/escape-header-value.mjs +27 -0
- package/esm/http/escape-header-value.mjs.map +1 -0
- package/esm/http/events.d.mts +1 -1
- package/esm/http/events.d.mts.map +1 -1
- package/esm/http/events.mjs +1 -1
- package/esm/http/events.mjs.map +1 -1
- package/esm/http/flush-pending-cookies.mjs +1 -1
- package/esm/http/flush-pending-cookies.mjs.map +1 -1
- package/esm/http/health.d.mts +1 -1
- package/esm/http/health.d.mts.map +1 -1
- package/esm/http/health.mjs +1 -1
- package/esm/http/health.mjs.map +1 -1
- package/esm/http/index.d.mts +13 -6
- package/esm/http/index.mjs +12 -6
- package/esm/http/lazy-static.mjs +194 -0
- package/esm/http/lazy-static.mjs.map +1 -0
- package/esm/http/middleware/cache-response-middleware.d.mts +1 -1
- package/esm/http/middleware/cache-response-middleware.d.mts.map +1 -1
- package/esm/http/middleware/cache-response-middleware.mjs +1 -1
- package/esm/http/middleware/cache-response-middleware.mjs.map +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.d.mts +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.d.mts.map +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.mjs +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.mjs.map +1 -1
- package/esm/http/middleware/idempotency.middleware.d.mts +1 -1
- package/esm/http/middleware/idempotency.middleware.d.mts.map +1 -1
- package/esm/http/middleware/idempotency.middleware.mjs +1 -1
- package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
- package/esm/http/middleware/inject-request-context.d.mts +1 -1
- package/esm/http/middleware/inject-request-context.d.mts.map +1 -1
- package/esm/http/middleware/inject-request-context.mjs +4 -2
- package/esm/http/middleware/inject-request-context.mjs.map +1 -1
- package/esm/http/middleware/ip-filter.middleware.d.mts +1 -1
- package/esm/http/middleware/ip-filter.middleware.d.mts.map +1 -1
- package/esm/http/middleware/ip-filter.middleware.mjs +1 -1
- package/esm/http/middleware/ip-filter.middleware.mjs.map +1 -1
- package/esm/http/middleware/maintenance.middleware.d.mts +1 -1
- package/esm/http/middleware/maintenance.middleware.d.mts.map +1 -1
- package/esm/http/middleware/maintenance.middleware.mjs +1 -1
- package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
- package/esm/http/middleware/max-body-size.middleware.d.mts +1 -1
- package/esm/http/middleware/max-body-size.middleware.d.mts.map +1 -1
- package/esm/http/middleware/max-body-size.middleware.mjs +1 -1
- package/esm/http/middleware/max-body-size.middleware.mjs.map +1 -1
- package/esm/http/middleware/middleware-list.d.mts +1 -1
- package/esm/http/middleware/middleware-list.d.mts.map +1 -1
- package/esm/http/middleware/middleware-list.mjs +1 -1
- package/esm/http/middleware/middleware-list.mjs.map +1 -1
- package/esm/http/middleware/rate-limit.middleware.d.mts +20 -5
- package/esm/http/middleware/rate-limit.middleware.d.mts.map +1 -1
- package/esm/http/middleware/rate-limit.middleware.mjs +34 -12
- package/esm/http/middleware/rate-limit.middleware.mjs.map +1 -1
- package/esm/http/middleware/utils/cidr-match.d.mts +1 -1
- package/esm/http/middleware/utils/cidr-match.d.mts.map +1 -1
- package/esm/http/middleware/utils/cidr-match.mjs +1 -1
- package/esm/http/middleware/utils/cidr-match.mjs.map +1 -1
- package/esm/http/middleware/utils/idempotency-key.d.mts +1 -1
- package/esm/http/middleware/utils/idempotency-key.d.mts.map +1 -1
- package/esm/http/middleware/utils/idempotency-key.mjs +1 -1
- package/esm/http/middleware/utils/idempotency-key.mjs.map +1 -1
- package/esm/http/middleware/utils/parse-size.d.mts +1 -1
- package/esm/http/middleware/utils/parse-size.d.mts.map +1 -1
- package/esm/http/middleware/utils/parse-size.mjs +1 -1
- package/esm/http/middleware/utils/parse-size.mjs.map +1 -1
- package/esm/http/parse-urlencoded-body.mjs +1 -1
- package/esm/http/parse-urlencoded-body.mjs.map +1 -1
- package/esm/http/plugins.d.mts +9 -2
- package/esm/http/plugins.d.mts.map +1 -1
- package/esm/http/plugins.mjs +23 -6
- package/esm/http/plugins.mjs.map +1 -1
- package/esm/http/port-preflight.d.mts +1 -1
- package/esm/http/port-preflight.d.mts.map +1 -1
- package/esm/http/port-preflight.mjs +1 -1
- package/esm/http/port-preflight.mjs.map +1 -1
- package/esm/http/rate-limit-cache-store.mjs +156 -0
- package/esm/http/rate-limit-cache-store.mjs.map +1 -0
- package/esm/http/ready-report.d.mts +1 -1
- package/esm/http/ready-report.d.mts.map +1 -1
- package/esm/http/ready-report.mjs +1 -1
- package/esm/http/ready-report.mjs.map +1 -1
- package/esm/http/request-controller.d.mts +1 -1
- package/esm/http/request-controller.d.mts.map +1 -1
- package/esm/http/request-controller.mjs +1 -1
- package/esm/http/request-controller.mjs.map +1 -1
- package/esm/http/request-log-snapshot.d.mts +130 -0
- package/esm/http/request-log-snapshot.d.mts.map +1 -0
- package/esm/http/request-log-snapshot.mjs +220 -0
- package/esm/http/request-log-snapshot.mjs.map +1 -0
- package/esm/http/request.d.mts +43 -4
- package/esm/http/request.d.mts.map +1 -1
- package/esm/http/request.mjs +70 -6
- package/esm/http/request.mjs.map +1 -1
- package/esm/http/resolve-bind-port.mjs +1 -1
- package/esm/http/resolve-bind-port.mjs.map +1 -1
- package/esm/http/response.d.mts +51 -9
- package/esm/http/response.d.mts.map +1 -1
- package/esm/http/response.mjs +301 -101
- package/esm/http/response.mjs.map +1 -1
- package/esm/http/safe-redirect.d.mts +51 -0
- package/esm/http/safe-redirect.d.mts.map +1 -0
- package/esm/http/safe-redirect.mjs +80 -0
- package/esm/http/safe-redirect.mjs.map +1 -0
- package/esm/http/serialized.d.mts +1 -1
- package/esm/http/serialized.d.mts.map +1 -1
- package/esm/http/server-rebuilt.d.mts +1 -1
- package/esm/http/server-rebuilt.d.mts.map +1 -1
- package/esm/http/server-rebuilt.mjs +1 -1
- package/esm/http/server-rebuilt.mjs.map +1 -1
- package/esm/http/server.d.mts +36 -6
- package/esm/http/server.d.mts.map +1 -1
- package/esm/http/server.mjs +80 -5
- package/esm/http/server.mjs.map +1 -1
- package/esm/http/stream-react-response.d.mts +1 -1
- package/esm/http/stream-react-response.d.mts.map +1 -1
- package/esm/http/stream-react-response.mjs +1 -1
- package/esm/http/stream-react-response.mjs.map +1 -1
- package/esm/http/stream-transport.mjs +77 -0
- package/esm/http/stream-transport.mjs.map +1 -0
- package/esm/http/tracing/trace-id.d.mts +1 -1
- package/esm/http/tracing/trace-id.d.mts.map +1 -1
- package/esm/http/tracing/trace-id.mjs +1 -1
- package/esm/http/tracing/trace-id.mjs.map +1 -1
- package/esm/http/tracing/tracing-dispatcher.d.mts +1 -1
- package/esm/http/tracing/tracing-dispatcher.d.mts.map +1 -1
- package/esm/http/tracing/tracing-dispatcher.mjs +1 -1
- package/esm/http/tracing/tracing-dispatcher.mjs.map +1 -1
- package/esm/http/tracing/tracing.type.d.mts +1 -1
- package/esm/http/tracing/tracing.type.d.mts.map +1 -1
- package/esm/http/types.d.mts +165 -7
- package/esm/http/types.d.mts.map +1 -1
- package/esm/http/uploaded-file.d.mts +2 -2
- package/esm/http/uploaded-file.d.mts.map +1 -1
- package/esm/http/uploaded-file.mjs +2 -2
- package/esm/http/uploaded-file.mjs.map +1 -1
- package/esm/http/uploads/detect-image-format.mjs +1 -1
- package/esm/http/uploads/detect-image-format.mjs.map +1 -1
- package/esm/http/uploads/generate-image-variant.mjs +2 -2
- package/esm/http/uploads/generate-image-variant.mjs.map +1 -1
- package/esm/http/uploads/generate-image-variants.d.mts +11 -8
- package/esm/http/uploads/generate-image-variants.d.mts.map +1 -1
- package/esm/http/uploads/generate-image-variants.mjs +75 -30
- package/esm/http/uploads/generate-image-variants.mjs.map +1 -1
- package/esm/http/uploads/image-variant-cache-entries.mjs +78 -0
- package/esm/http/uploads/image-variant-cache-entries.mjs.map +1 -0
- package/esm/http/uploads/image-variant-cache.mjs +185 -0
- package/esm/http/uploads/image-variant-cache.mjs.map +1 -0
- package/esm/http/uploads/image-variant-types.d.mts +3 -1
- package/esm/http/uploads/image-variant-types.d.mts.map +1 -1
- package/esm/http/uploads/image-variants-config-error.d.mts +4 -2
- package/esm/http/uploads/image-variants-config-error.d.mts.map +1 -1
- package/esm/http/uploads/image-variants-config-error.mjs +4 -3
- package/esm/http/uploads/image-variants-config-error.mjs.map +1 -1
- package/esm/http/uploads/index.d.mts +3 -1
- package/esm/http/uploads/index.mjs +3 -1
- package/esm/http/uploads/is-path-inside.mjs +1 -1
- package/esm/http/uploads/is-path-inside.mjs.map +1 -1
- package/esm/http/uploads/load-variant-source.mjs +2 -2
- package/esm/http/uploads/load-variant-source.mjs.map +1 -1
- package/esm/http/uploads/local-disk-root.mjs +24 -0
- package/esm/http/uploads/local-disk-root.mjs.map +1 -0
- package/esm/http/uploads/parse-uploaded-file-query.mjs +1 -1
- package/esm/http/uploads/parse-uploaded-file-query.mjs.map +1 -1
- package/esm/http/uploads/purge-image-variants.d.mts +37 -0
- package/esm/http/uploads/purge-image-variants.d.mts.map +1 -0
- package/esm/http/uploads/purge-image-variants.mjs +46 -0
- package/esm/http/uploads/purge-image-variants.mjs.map +1 -0
- package/esm/http/uploads/read-file-head.mjs +1 -1
- package/esm/http/uploads/read-file-head.mjs.map +1 -1
- package/esm/http/uploads/remote-variant-source.mjs +115 -0
- package/esm/http/uploads/remote-variant-source.mjs.map +1 -0
- package/esm/http/uploads/resolve-image-variant.d.mts +72 -0
- package/esm/http/uploads/resolve-image-variant.d.mts.map +1 -0
- package/esm/http/uploads/resolve-image-variant.mjs +99 -0
- package/esm/http/uploads/resolve-image-variant.mjs.map +1 -0
- package/esm/http/uploads/resolve-image-variants-config.mjs +6 -4
- package/esm/http/uploads/resolve-image-variants-config.mjs.map +1 -1
- package/esm/http/uploads/resolve-inline-image-content-type.mjs +1 -1
- package/esm/http/uploads/resolve-inline-image-content-type.mjs.map +1 -1
- package/esm/http/uploads/resolve-original-content-type.mjs +1 -1
- package/esm/http/uploads/resolve-original-content-type.mjs.map +1 -1
- package/esm/http/uploads/resolve-remote-image-variant.mjs +89 -0
- package/esm/http/uploads/resolve-remote-image-variant.mjs.map +1 -0
- package/esm/http/uploads/resolve-upload-path.mjs +3 -2
- package/esm/http/uploads/resolve-upload-path.mjs.map +1 -1
- package/esm/http/uploads/resolve-variant-candidate.mjs +1 -1
- package/esm/http/uploads/resolve-variant-candidate.mjs.map +1 -1
- package/esm/http/uploads/single-flight.mjs +1 -1
- package/esm/http/uploads/single-flight.mjs.map +1 -1
- package/esm/http/uploads/trim-image-variant-cache.mjs +193 -0
- package/esm/http/uploads/trim-image-variant-cache.mjs.map +1 -0
- package/esm/http/uploads/uploaded-file.controller.d.mts +27 -7
- package/esm/http/uploads/uploaded-file.controller.d.mts.map +1 -1
- package/esm/http/uploads/uploaded-file.controller.mjs +72 -92
- package/esm/http/uploads/uploaded-file.controller.mjs.map +1 -1
- package/esm/http/uploads/variant-cache-key.mjs +31 -6
- package/esm/http/uploads/variant-cache-key.mjs.map +1 -1
- package/esm/http/uploads/variant-generations.mjs +1 -1
- package/esm/http/uploads/variant-generations.mjs.map +1 -1
- package/esm/http/uploads-config.d.mts +1 -1
- package/esm/http/uploads-config.d.mts.map +1 -1
- package/esm/http/uploads-config.mjs +1 -1
- package/esm/http/uploads-config.mjs.map +1 -1
- package/esm/http/uploads-types.d.mts +7 -3
- package/esm/http/uploads-types.d.mts.map +1 -1
- package/esm/http/xmlable.d.mts +1 -1
- package/esm/http/xmlable.d.mts.map +1 -1
- package/esm/image/image.d.mts +1 -1
- package/esm/image/image.d.mts.map +1 -1
- package/esm/image/image.mjs +1 -1
- package/esm/image/image.mjs.map +1 -1
- package/esm/index.d.mts +27 -12
- package/esm/index.mjs +23 -9
- package/esm/loader/app-module-importer.d.mts +1 -1
- package/esm/loader/app-module-importer.d.mts.map +1 -1
- package/esm/loader/app-module-importer.mjs +1 -1
- package/esm/loader/app-module-importer.mjs.map +1 -1
- package/esm/localization/parse-locale-dictionary.d.mts +3 -1
- package/esm/localization/parse-locale-dictionary.d.mts.map +1 -1
- package/esm/localization/parse-locale-dictionary.mjs +2 -1
- package/esm/localization/parse-locale-dictionary.mjs.map +1 -1
- package/esm/localization/register-locale-dictionary.d.mts +1 -1
- package/esm/localization/register-locale-dictionary.d.mts.map +1 -1
- package/esm/localization/register-locale-dictionary.mjs +1 -1
- package/esm/localization/register-locale-dictionary.mjs.map +1 -1
- package/esm/logger/fatal-visibility.d.mts +1 -1
- package/esm/logger/fatal-visibility.d.mts.map +1 -1
- package/esm/logger/fatal-visibility.mjs +1 -1
- package/esm/logger/fatal-visibility.mjs.map +1 -1
- package/esm/logger/logger.d.mts +1 -1
- package/esm/logger/logger.d.mts.map +1 -1
- package/esm/logger/logger.mjs +1 -1
- package/esm/logger/logger.mjs.map +1 -1
- package/esm/logger/types.d.mts +1 -1
- package/esm/logger/types.d.mts.map +1 -1
- package/esm/mail/config.d.mts +13 -2
- package/esm/mail/config.d.mts.map +1 -1
- package/esm/mail/config.mjs +17 -2
- package/esm/mail/config.mjs.map +1 -1
- package/esm/mail/events.d.mts +1 -1
- package/esm/mail/events.d.mts.map +1 -1
- package/esm/mail/events.mjs +1 -1
- package/esm/mail/events.mjs.map +1 -1
- package/esm/mail/index.d.mts +1 -1
- package/esm/mail/index.mjs +1 -1
- package/esm/mail/mail.d.mts +1 -1
- package/esm/mail/mail.d.mts.map +1 -1
- package/esm/mail/mail.mjs +1 -1
- package/esm/mail/mail.mjs.map +1 -1
- package/esm/mail/mailer-pool.d.mts +1 -1
- package/esm/mail/mailer-pool.d.mts.map +1 -1
- package/esm/mail/mailer-pool.mjs +1 -1
- package/esm/mail/mailer-pool.mjs.map +1 -1
- package/esm/mail/react-mail.d.mts +1 -1
- package/esm/mail/react-mail.d.mts.map +1 -1
- package/esm/mail/react-mail.mjs +1 -1
- package/esm/mail/react-mail.mjs.map +1 -1
- package/esm/mail/send-mail.d.mts +1 -1
- package/esm/mail/send-mail.d.mts.map +1 -1
- package/esm/mail/send-mail.mjs +7 -7
- package/esm/mail/send-mail.mjs.map +1 -1
- package/esm/mail/test-mailbox.d.mts +1 -1
- package/esm/mail/test-mailbox.d.mts.map +1 -1
- package/esm/mail/test-mailbox.mjs +1 -1
- package/esm/mail/test-mailbox.mjs.map +1 -1
- package/esm/mail/types.d.mts +1 -1
- package/esm/mail/types.d.mts.map +1 -1
- package/esm/mail/types.mjs +1 -1
- package/esm/mail/types.mjs.map +1 -1
- package/esm/manifest/manifest-manager.mjs +1 -1
- package/esm/manifest/manifest-manager.mjs.map +1 -1
- package/esm/net/index.d.mts +2 -0
- package/esm/net/index.mjs +3 -0
- package/esm/openapi/build-openapi-document.d.mts +1 -1
- package/esm/openapi/build-openapi-document.d.mts.map +1 -1
- package/esm/openapi/build-openapi-document.mjs +9 -6
- package/esm/openapi/build-openapi-document.mjs.map +1 -1
- package/esm/openapi/cast-schema.mjs +1 -1
- package/esm/openapi/cast-schema.mjs.map +1 -1
- package/esm/openapi/collect-openapi-document.mjs +1 -1
- package/esm/openapi/collect-openapi-document.mjs.map +1 -1
- package/esm/openapi/development-openapi-provider.d.mts +1 -1
- package/esm/openapi/development-openapi-provider.d.mts.map +1 -1
- package/esm/openapi/development-openapi-provider.mjs +1 -1
- package/esm/openapi/development-openapi-provider.mjs.map +1 -1
- package/esm/openapi/error-responses.mjs +29 -3
- package/esm/openapi/error-responses.mjs.map +1 -1
- package/esm/openapi/openapi-child-output.mjs +1 -1
- package/esm/openapi/openapi-child-output.mjs.map +1 -1
- package/esm/openapi/openapi-protocol.mjs +1 -1
- package/esm/openapi/openapi-protocol.mjs.map +1 -1
- package/esm/openapi/paths.mjs +1 -1
- package/esm/openapi/paths.mjs.map +1 -1
- package/esm/openapi/postman/build-request-body.mjs +1 -1
- package/esm/openapi/postman/build-request-body.mjs.map +1 -1
- package/esm/openapi/postman/build-request-url.mjs +1 -1
- package/esm/openapi/postman/build-request-url.mjs.map +1 -1
- package/esm/openapi/postman/build-saved-responses.mjs +1 -1
- package/esm/openapi/postman/build-saved-responses.mjs.map +1 -1
- package/esm/openapi/postman/example-from-schema.d.mts +1 -1
- package/esm/openapi/postman/example-from-schema.d.mts.map +1 -1
- package/esm/openapi/postman/example-from-schema.mjs +1 -1
- package/esm/openapi/postman/example-from-schema.mjs.map +1 -1
- package/esm/openapi/postman/http-status-text.mjs +1 -1
- package/esm/openapi/postman/http-status-text.mjs.map +1 -1
- package/esm/openapi/postman/openapi-to-postman-collection.d.mts +1 -1
- package/esm/openapi/postman/openapi-to-postman-collection.d.mts.map +1 -1
- package/esm/openapi/postman/openapi-to-postman-collection.mjs +1 -1
- package/esm/openapi/postman/openapi-to-postman-collection.mjs.map +1 -1
- package/esm/openapi/postman/postman-types.d.mts +1 -1
- package/esm/openapi/postman/postman-types.d.mts.map +1 -1
- package/esm/openapi/postman/resolve-operation-auth.mjs +1 -1
- package/esm/openapi/postman/resolve-operation-auth.mjs.map +1 -1
- package/esm/openapi/postman/schema-refs.d.mts +1 -1
- package/esm/openapi/postman/schema-refs.d.mts.map +1 -1
- package/esm/openapi/postman/schema-refs.mjs +1 -1
- package/esm/openapi/postman/schema-refs.mjs.map +1 -1
- package/esm/openapi/postman/uuid-v5.mjs +1 -1
- package/esm/openapi/postman/uuid-v5.mjs.map +1 -1
- package/esm/openapi/request-schemas.mjs +1 -1
- package/esm/openapi/request-schemas.mjs.map +1 -1
- package/esm/openapi/response-schemas.mjs +1 -1
- package/esm/openapi/response-schemas.mjs.map +1 -1
- package/esm/openapi/schema-registry.d.mts +1 -0
- package/esm/openapi/schema-registry.mjs +1 -1
- package/esm/openapi/schema-registry.mjs.map +1 -1
- package/esm/openapi/security.mjs +1 -1
- package/esm/openapi/security.mjs.map +1 -1
- package/esm/openapi/types.d.mts +4 -3
- package/esm/openapi/types.d.mts.map +1 -1
- package/esm/production/assert-dist-ready-to-start.mjs +1 -1
- package/esm/production/assert-dist-ready-to-start.mjs.map +1 -1
- package/esm/production/assert-generated-imports.mjs +2 -1
- package/esm/production/assert-generated-imports.mjs.map +1 -1
- package/esm/production/build-app-production.mjs +1 -1
- package/esm/production/build-app-production.mjs.map +1 -1
- package/esm/production/build-contributions.mjs +1 -1
- package/esm/production/build-contributions.mjs.map +1 -1
- package/esm/production/bundle-framework-dependencies.mjs +1 -1
- package/esm/production/bundle-framework-dependencies.mjs.map +1 -1
- package/esm/production/dist-build-manifest.mjs +1 -1
- package/esm/production/dist-build-manifest.mjs.map +1 -1
- package/esm/production/esbuild-plugins.mjs +1 -1
- package/esm/production/esbuild-plugins.mjs.map +1 -1
- package/esm/production/esbuild-preflight.mjs +1 -1
- package/esm/production/esbuild-preflight.mjs.map +1 -1
- package/esm/production/production-builder.mjs +13 -5
- package/esm/production/production-builder.mjs.map +1 -1
- package/esm/production/production-supervisor.mjs +1 -1
- package/esm/production/production-supervisor.mjs.map +1 -1
- package/esm/production/promote-dist.mjs +1 -1
- package/esm/production/promote-dist.mjs.map +1 -1
- package/esm/production/registration-child-runner.mjs +1 -1
- package/esm/production/registration-child-runner.mjs.map +1 -1
- package/esm/production/resolve-build-config.d.mts +1 -1
- package/esm/production/resolve-build-config.d.mts.map +1 -1
- package/esm/production/resolve-build-config.mjs +2 -1
- package/esm/production/resolve-build-config.mjs.map +1 -1
- package/esm/production/route-registration-child.mjs +1 -1
- package/esm/production/route-registration-child.mjs.map +1 -1
- package/esm/production/route-registration-snapshot.mjs +1 -1
- package/esm/production/route-registration-snapshot.mjs.map +1 -1
- package/esm/production/tsconfig-path-aliases.mjs +1 -1
- package/esm/production/tsconfig-path-aliases.mjs.map +1 -1
- package/esm/react/index.d.mts +1 -1
- package/esm/react/index.d.mts.map +1 -1
- package/esm/react/index.mjs +1 -1
- package/esm/react/index.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.d.mts +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.d.mts.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.mjs +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.mjs +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/filter-applicator.mjs +1 -1
- package/esm/repositories/adapters/cascade/filter-applicator.mjs.map +1 -1
- package/esm/repositories/contracts/query-builder.contract.d.mts +1 -1
- package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
- package/esm/repositories/contracts/repository-adapter.contract.d.mts +1 -1
- package/esm/repositories/contracts/repository-adapter.contract.d.mts.map +1 -1
- package/esm/repositories/contracts/types.d.mts +1 -1
- package/esm/repositories/contracts/types.d.mts.map +1 -1
- package/esm/repositories/repository.manager.d.mts +1 -1
- package/esm/repositories/repository.manager.d.mts.map +1 -1
- package/esm/repositories/repository.manager.mjs +1 -1
- package/esm/repositories/repository.manager.mjs.map +1 -1
- package/esm/resource/define-resource.d.mts +1 -1
- package/esm/resource/define-resource.d.mts.map +1 -1
- package/esm/resource/define-resource.mjs +1 -1
- package/esm/resource/define-resource.mjs.map +1 -1
- package/esm/resource/nullable-resource.d.mts +1 -1
- package/esm/resource/nullable-resource.d.mts.map +1 -1
- package/esm/resource/nullable-resource.mjs +1 -1
- package/esm/resource/nullable-resource.mjs.map +1 -1
- package/esm/resource/register-resource.d.mts +1 -1
- package/esm/resource/register-resource.d.mts.map +1 -1
- package/esm/resource/register-resource.mjs +1 -1
- package/esm/resource/register-resource.mjs.map +1 -1
- package/esm/resource/resource-field-builder.d.mts +1 -1
- package/esm/resource/resource-field-builder.d.mts.map +1 -1
- package/esm/resource/resource-field-builder.mjs +1 -1
- package/esm/resource/resource-field-builder.mjs.map +1 -1
- package/esm/resource/resource.d.mts +1 -1
- package/esm/resource/resource.d.mts.map +1 -1
- package/esm/resource/resource.mjs +1 -1
- package/esm/resource/resource.mjs.map +1 -1
- package/esm/resource/types.d.mts +1 -1
- package/esm/resource/types.d.mts.map +1 -1
- package/esm/restful/restful.d.mts +6 -6
- package/esm/restful/restful.d.mts.map +1 -1
- package/esm/restful/restful.mjs +1 -1
- package/esm/restful/restful.mjs.map +1 -1
- package/esm/router/build-route-rate-limit.mjs +1 -1
- package/esm/router/build-route-rate-limit.mjs.map +1 -1
- package/esm/router/describe-route-for-log.mjs +1 -1
- package/esm/router/describe-route-for-log.mjs.map +1 -1
- package/esm/router/dev-dispatch.mjs +32 -13
- package/esm/router/dev-dispatch.mjs.map +1 -1
- package/esm/router/index.d.mts +4 -2
- package/esm/router/index.mjs +2 -0
- package/esm/router/log-request-lifecycle.mjs +1 -1
- package/esm/router/log-request-lifecycle.mjs.map +1 -1
- package/esm/router/named-api-routes-with-responses.mjs +1 -1
- package/esm/router/named-api-routes-with-responses.mjs.map +1 -1
- package/esm/router/normalize-request-path.d.mts +1 -1
- package/esm/router/normalize-request-path.d.mts.map +1 -1
- package/esm/router/normalize-request-path.mjs +1 -1
- package/esm/router/normalize-request-path.mjs.map +1 -1
- package/esm/router/normalize-route-path.d.mts +1 -1
- package/esm/router/normalize-route-path.d.mts.map +1 -1
- package/esm/router/normalize-route-path.mjs +1 -1
- package/esm/router/normalize-route-path.mjs.map +1 -1
- package/esm/router/positional-handler-diagnostics.d.mts +1 -1
- package/esm/router/positional-handler-diagnostics.d.mts.map +1 -1
- package/esm/router/positional-handler-diagnostics.mjs +1 -1
- package/esm/router/positional-handler-diagnostics.mjs.map +1 -1
- package/esm/router/resolve-route-rate-limit.mjs +47 -0
- package/esm/router/resolve-route-rate-limit.mjs.map +1 -0
- package/esm/router/resolve-route-validation.mjs +19 -0
- package/esm/router/resolve-route-validation.mjs.map +1 -0
- package/esm/router/response-schema-types.mjs +1 -1
- package/esm/router/response-schema-types.mjs.map +1 -1
- package/esm/router/route-builder.d.mts +1 -1
- package/esm/router/route-builder.d.mts.map +1 -1
- package/esm/router/route-builder.mjs +1 -1
- package/esm/router/route-builder.mjs.map +1 -1
- package/esm/router/route-guard-names.mjs +30 -0
- package/esm/router/route-guard-names.mjs.map +1 -0
- package/esm/router/route-name-method-suffix.d.mts +1 -1
- package/esm/router/route-name-method-suffix.d.mts.map +1 -1
- package/esm/router/route-name-method-suffix.mjs +1 -1
- package/esm/router/route-name-method-suffix.mjs.map +1 -1
- package/esm/router/route-name-taken-error.d.mts +14 -0
- package/esm/router/route-name-taken-error.d.mts.map +1 -0
- package/esm/router/route-name-taken-error.mjs +18 -0
- package/esm/router/route-name-taken-error.mjs.map +1 -0
- package/esm/router/route-registry.d.mts +1 -1
- package/esm/router/route-registry.d.mts.map +1 -1
- package/esm/router/route-registry.mjs +1 -1
- package/esm/router/route-registry.mjs.map +1 -1
- package/esm/router/router.d.mts +35 -9
- package/esm/router/router.d.mts.map +1 -1
- package/esm/router/router.mjs +78 -40
- package/esm/router/router.mjs.map +1 -1
- package/esm/router/types.d.mts +150 -18
- package/esm/router/types.d.mts.map +1 -1
- package/esm/router/unguarded-route-diagnostics.d.mts +40 -0
- package/esm/router/unguarded-route-diagnostics.d.mts.map +1 -0
- package/esm/router/unguarded-route-diagnostics.mjs +95 -0
- package/esm/router/unguarded-route-diagnostics.mjs.map +1 -0
- package/esm/socket/types.d.mts +1 -1
- package/esm/socket/types.d.mts.map +1 -1
- package/esm/socket/utils.d.mts +1 -1
- package/esm/socket/utils.d.mts.map +1 -1
- package/esm/socket/utils.mjs +1 -1
- package/esm/socket/utils.mjs.map +1 -1
- package/esm/storage/config.d.mts +1 -1
- package/esm/storage/config.d.mts.map +1 -1
- package/esm/storage/config.mjs +1 -1
- package/esm/storage/config.mjs.map +1 -1
- package/esm/storage/context/storage-driver-context.d.mts +1 -1
- package/esm/storage/context/storage-driver-context.d.mts.map +1 -1
- package/esm/storage/context/storage-driver-context.mjs +1 -1
- package/esm/storage/context/storage-driver-context.mjs.map +1 -1
- package/esm/storage/drivers/cloud-driver.d.mts +1 -1
- package/esm/storage/drivers/cloud-driver.d.mts.map +1 -1
- package/esm/storage/drivers/cloud-driver.mjs +1 -1
- package/esm/storage/drivers/cloud-driver.mjs.map +1 -1
- package/esm/storage/drivers/do-spaces-driver.d.mts +1 -1
- package/esm/storage/drivers/do-spaces-driver.d.mts.map +1 -1
- package/esm/storage/drivers/do-spaces-driver.mjs +1 -1
- package/esm/storage/drivers/do-spaces-driver.mjs.map +1 -1
- package/esm/storage/drivers/local-driver.d.mts +12 -1
- package/esm/storage/drivers/local-driver.d.mts.map +1 -1
- package/esm/storage/drivers/local-driver.mjs +33 -1
- package/esm/storage/drivers/local-driver.mjs.map +1 -1
- package/esm/storage/drivers/r2-driver.d.mts +1 -1
- package/esm/storage/drivers/r2-driver.d.mts.map +1 -1
- package/esm/storage/drivers/r2-driver.mjs +1 -1
- package/esm/storage/drivers/r2-driver.mjs.map +1 -1
- package/esm/storage/drivers/s3-driver.d.mts +1 -1
- package/esm/storage/drivers/s3-driver.d.mts.map +1 -1
- package/esm/storage/drivers/s3-driver.mjs +1 -1
- package/esm/storage/drivers/s3-driver.mjs.map +1 -1
- package/esm/storage/index.d.mts +1 -1
- package/esm/storage/local-disk-roots.mjs +24 -0
- package/esm/storage/local-disk-roots.mjs.map +1 -0
- package/esm/storage/scoped-storage.d.mts +1 -1
- package/esm/storage/scoped-storage.d.mts.map +1 -1
- package/esm/storage/scoped-storage.mjs +1 -1
- package/esm/storage/scoped-storage.mjs.map +1 -1
- package/esm/storage/storage-file.d.mts +1 -1
- package/esm/storage/storage-file.d.mts.map +1 -1
- package/esm/storage/storage-file.mjs +1 -1
- package/esm/storage/storage-file.mjs.map +1 -1
- package/esm/storage/storage.d.mts +17 -3
- package/esm/storage/storage.d.mts.map +1 -1
- package/esm/storage/storage.mjs +23 -1
- package/esm/storage/storage.mjs.map +1 -1
- package/esm/storage/types.d.mts +3 -2
- package/esm/storage/types.d.mts.map +1 -1
- package/esm/storage/utils/classify-ip-address.d.mts +1 -1
- package/esm/storage/utils/classify-ip-address.d.mts.map +1 -1
- package/esm/storage/utils/classify-ip-address.mjs +1 -1
- package/esm/storage/utils/classify-ip-address.mjs.map +1 -1
- package/esm/storage/utils/contain-path.d.mts +1 -1
- package/esm/storage/utils/contain-path.d.mts.map +1 -1
- package/esm/storage/utils/contain-path.mjs +1 -1
- package/esm/storage/utils/contain-path.mjs.map +1 -1
- package/esm/storage/utils/mime.d.mts +1 -1
- package/esm/storage/utils/mime.d.mts.map +1 -1
- package/esm/storage/utils/mime.mjs +1 -1
- package/esm/storage/utils/mime.mjs.map +1 -1
- package/esm/storage/utils/safe-fetch.d.mts +1 -1
- package/esm/storage/utils/safe-fetch.d.mts.map +1 -1
- package/esm/storage/utils/safe-fetch.mjs +1 -1
- package/esm/storage/utils/safe-fetch.mjs.map +1 -1
- package/esm/storage/utils/storage-capability-error.d.mts +1 -1
- package/esm/storage/utils/storage-capability-error.d.mts.map +1 -1
- package/esm/storage/utils/storage-capability-error.mjs +1 -1
- package/esm/storage/utils/storage-capability-error.mjs.map +1 -1
- package/esm/storage/utils/storage-error.d.mts +1 -1
- package/esm/storage/utils/storage-error.d.mts.map +1 -1
- package/esm/storage/utils/storage-error.mjs +1 -1
- package/esm/storage/utils/storage-error.mjs.map +1 -1
- package/esm/storage/utils/storage-not-initialized-error.d.mts +3 -1
- package/esm/storage/utils/storage-not-initialized-error.d.mts.map +1 -1
- package/esm/storage/utils/storage-not-initialized-error.mjs +2 -1
- package/esm/storage/utils/storage-not-initialized-error.mjs.map +1 -1
- package/esm/tests/authenticated-test-client.d.mts +32 -0
- package/esm/tests/authenticated-test-client.d.mts.map +1 -0
- package/esm/tests/authenticated-test-client.mjs +40 -0
- package/esm/tests/authenticated-test-client.mjs.map +1 -0
- package/esm/tests/factories.d.mts +59 -0
- package/esm/tests/factories.d.mts.map +1 -0
- package/esm/tests/factories.mjs +105 -0
- package/esm/tests/factories.mjs.map +1 -0
- package/esm/tests/fakes/cache-fake.d.mts +29 -0
- package/esm/tests/fakes/cache-fake.d.mts.map +1 -0
- package/esm/tests/fakes/cache-fake.mjs +79 -0
- package/esm/tests/fakes/cache-fake.mjs.map +1 -0
- package/esm/tests/fakes/clock-fake.d.mts +32 -0
- package/esm/tests/fakes/clock-fake.d.mts.map +1 -0
- package/esm/tests/fakes/clock-fake.mjs +69 -0
- package/esm/tests/fakes/clock-fake.mjs.map +1 -0
- package/esm/tests/fakes/fake-assertion-error.d.mts +13 -0
- package/esm/tests/fakes/fake-assertion-error.d.mts.map +1 -0
- package/esm/tests/fakes/fake-assertion-error.mjs +20 -0
- package/esm/tests/fakes/fake-assertion-error.mjs.map +1 -0
- package/esm/tests/fakes/ids-fake.d.mts +22 -0
- package/esm/tests/fakes/ids-fake.d.mts.map +1 -0
- package/esm/tests/fakes/ids-fake.mjs +57 -0
- package/esm/tests/fakes/ids-fake.mjs.map +1 -0
- package/esm/tests/fakes/index.d.mts +8 -0
- package/esm/tests/fakes/index.mjs +10 -0
- package/esm/tests/fakes/mail-fake.d.mts +41 -0
- package/esm/tests/fakes/mail-fake.d.mts.map +1 -0
- package/esm/tests/fakes/mail-fake.mjs +111 -0
- package/esm/tests/fakes/mail-fake.mjs.map +1 -0
- package/esm/tests/fakes/queue-fake.d.mts +48 -0
- package/esm/tests/fakes/queue-fake.d.mts.map +1 -0
- package/esm/tests/fakes/queue-fake.mjs +134 -0
- package/esm/tests/fakes/queue-fake.mjs.map +1 -0
- package/esm/tests/fakes/storage-fake.d.mts +31 -0
- package/esm/tests/fakes/storage-fake.d.mts.map +1 -0
- package/esm/tests/fakes/storage-fake.mjs +122 -0
- package/esm/tests/fakes/storage-fake.mjs.map +1 -0
- package/esm/tests/fakes/test-fakes.d.mts +39 -0
- package/esm/tests/fakes/test-fakes.d.mts.map +1 -0
- package/esm/tests/fakes/test-fakes.mjs +90 -0
- package/esm/tests/fakes/test-fakes.mjs.map +1 -0
- package/esm/tests/index.d.mts +14 -2
- package/esm/tests/index.mjs +15 -2
- package/esm/tests/snapshot-response.d.mts +34 -0
- package/esm/tests/snapshot-response.d.mts.map +1 -0
- package/esm/tests/snapshot-response.mjs +42 -0
- package/esm/tests/snapshot-response.mjs.map +1 -0
- package/esm/tests/start-http-development-server.d.mts +23 -1
- package/esm/tests/start-http-development-server.d.mts.map +1 -1
- package/esm/tests/start-http-development-server.mjs +37 -4
- package/esm/tests/start-http-development-server.mjs.map +1 -1
- package/esm/tests/test-connectors-selection.d.mts +1 -1
- package/esm/tests/test-connectors-selection.d.mts.map +1 -1
- package/esm/tests/test-connectors-selection.mjs +1 -1
- package/esm/tests/test-connectors-selection.mjs.map +1 -1
- package/esm/tests/test-helpers.d.mts +21 -2
- package/esm/tests/test-helpers.d.mts.map +1 -1
- package/esm/tests/test-helpers.mjs +41 -28
- package/esm/tests/test-helpers.mjs.map +1 -1
- package/esm/tests/test-http-server.d.mts +62 -0
- package/esm/tests/test-http-server.d.mts.map +1 -0
- package/esm/tests/test-http-server.mjs +119 -0
- package/esm/tests/test-http-server.mjs.map +1 -0
- package/esm/tests/test-lifecycle-state.mjs +1 -1
- package/esm/tests/test-lifecycle-state.mjs.map +1 -1
- package/esm/tests/test-server-port-channel.mjs +1 -1
- package/esm/tests/test-server-port-channel.mjs.map +1 -1
- package/esm/tests/test-setup-timeout.mjs +1 -1
- package/esm/tests/test-setup-timeout.mjs.map +1 -1
- package/esm/tests/vitest-setup.d.mts +12 -1
- package/esm/tests/vitest-setup.d.mts.map +1 -1
- package/esm/tests/vitest-setup.mjs +13 -5
- package/esm/tests/vitest-setup.mjs.map +1 -1
- package/esm/tooling/agents-md/agents-md-markers.d.mts +27 -0
- package/esm/tooling/agents-md/agents-md-markers.d.mts.map +1 -0
- package/esm/tooling/agents-md/agents-md-markers.mjs +59 -0
- package/esm/tooling/agents-md/agents-md-markers.mjs.map +1 -0
- package/esm/tooling/agents-md/agents-md-refresher.d.mts +36 -0
- package/esm/tooling/agents-md/agents-md-refresher.d.mts.map +1 -0
- package/esm/tooling/agents-md/agents-md-refresher.mjs +72 -0
- package/esm/tooling/agents-md/agents-md-refresher.mjs.map +1 -0
- package/esm/tooling/agents-md/index.mjs +7 -0
- package/esm/tooling/agents-md/installed-skills.d.mts +30 -0
- package/esm/tooling/agents-md/installed-skills.d.mts.map +1 -0
- package/esm/tooling/agents-md/installed-skills.mjs +74 -0
- package/esm/tooling/agents-md/installed-skills.mjs.map +1 -0
- package/esm/tooling/agents-md/render-agents-md.d.mts +33 -0
- package/esm/tooling/agents-md/render-agents-md.d.mts.map +1 -0
- package/esm/tooling/agents-md/render-agents-md.mjs +195 -0
- package/esm/tooling/agents-md/render-agents-md.mjs.map +1 -0
- package/esm/tooling/agents-md/write-agents-md.d.mts +33 -0
- package/esm/tooling/agents-md/write-agents-md.d.mts.map +1 -0
- package/esm/tooling/agents-md/write-agents-md.mjs +49 -0
- package/esm/tooling/agents-md/write-agents-md.mjs.map +1 -0
- package/esm/tooling/board/board-message.d.mts +31 -0
- package/esm/tooling/board/board-message.d.mts.map +1 -0
- package/esm/tooling/board/board-message.mjs +86 -0
- package/esm/tooling/board/board-message.mjs.map +1 -0
- package/esm/tooling/board/board.d.mts +109 -0
- package/esm/tooling/board/board.d.mts.map +1 -0
- package/esm/tooling/board/board.mjs +406 -0
- package/esm/tooling/board/board.mjs.map +1 -0
- package/esm/tooling/board/board.types.d.mts +72 -0
- package/esm/tooling/board/board.types.d.mts.map +1 -0
- package/esm/tooling/board/board.types.mjs +54 -0
- package/esm/tooling/board/board.types.mjs.map +1 -0
- package/esm/tooling/check/changed-files.d.mts +33 -0
- package/esm/tooling/check/changed-files.d.mts.map +1 -0
- package/esm/tooling/check/changed-files.mjs +73 -0
- package/esm/tooling/check/changed-files.mjs.map +1 -0
- package/esm/tooling/check/check-report.types.d.mts +62 -0
- package/esm/tooling/check/check-report.types.d.mts.map +1 -0
- package/esm/tooling/check/check-report.types.mjs +37 -0
- package/esm/tooling/check/check-report.types.mjs.map +1 -0
- package/esm/tooling/check/code-style-conventions.mjs +106 -0
- package/esm/tooling/check/code-style-conventions.mjs.map +1 -0
- package/esm/tooling/check/conventions-step.d.mts +34 -0
- package/esm/tooling/check/conventions-step.d.mts.map +1 -0
- package/esm/tooling/check/conventions-step.mjs +184 -0
- package/esm/tooling/check/conventions-step.mjs.map +1 -0
- package/esm/tooling/check/environment-step.d.mts +18 -0
- package/esm/tooling/check/environment-step.d.mts.map +1 -0
- package/esm/tooling/check/environment-step.mjs +78 -0
- package/esm/tooling/check/environment-step.mjs.map +1 -0
- package/esm/tooling/check/index.d.mts +8 -0
- package/esm/tooling/check/index.mjs +10 -0
- package/esm/tooling/check/lint-step.d.mts +19 -0
- package/esm/tooling/check/lint-step.d.mts.map +1 -0
- package/esm/tooling/check/lint-step.mjs +111 -0
- package/esm/tooling/check/lint-step.mjs.map +1 -0
- package/esm/tooling/check/request-input.mjs +132 -0
- package/esm/tooling/check/request-input.mjs.map +1 -0
- package/esm/tooling/check/run-check.d.mts +35 -0
- package/esm/tooling/check/run-check.d.mts.map +1 -0
- package/esm/tooling/check/run-check.mjs +192 -0
- package/esm/tooling/check/run-check.mjs.map +1 -0
- package/esm/tooling/check/run-tests.d.mts +48 -0
- package/esm/tooling/check/run-tests.d.mts.map +1 -0
- package/esm/tooling/check/run-tests.mjs +93 -0
- package/esm/tooling/check/run-tests.mjs.map +1 -0
- package/esm/tooling/check/security-conventions.mjs +648 -0
- package/esm/tooling/check/security-conventions.mjs.map +1 -0
- package/esm/tooling/check/source-ast.mjs +195 -0
- package/esm/tooling/check/source-ast.mjs.map +1 -0
- package/esm/tooling/check/source-files.mjs +27 -0
- package/esm/tooling/check/source-files.mjs.map +1 -0
- package/esm/tooling/check/tests-step.d.mts +34 -0
- package/esm/tooling/check/tests-step.d.mts.map +1 -0
- package/esm/tooling/check/tests-step.mjs +177 -0
- package/esm/tooling/check/tests-step.mjs.map +1 -0
- package/esm/tooling/dev-state/dev-server-state.d.mts +39 -0
- package/esm/tooling/dev-state/dev-server-state.d.mts.map +1 -0
- package/esm/tooling/dev-state/dev-server-state.mjs +67 -0
- package/esm/tooling/dev-state/dev-server-state.mjs.map +1 -0
- package/esm/tooling/devtools/devtools-client.d.mts +91 -0
- package/esm/tooling/devtools/devtools-client.d.mts.map +1 -0
- package/esm/tooling/devtools/devtools-client.mjs +155 -0
- package/esm/tooling/devtools/devtools-client.mjs.map +1 -0
- package/esm/tooling/generate/generation.d.mts +78 -0
- package/esm/tooling/generate/generation.d.mts.map +1 -0
- package/esm/tooling/generate/generation.mjs +123 -0
- package/esm/tooling/generate/generation.mjs.map +1 -0
- package/esm/tooling/generate/generator-spec.d.mts +57 -0
- package/esm/tooling/generate/generator-spec.d.mts.map +1 -0
- package/esm/tooling/generate/generator-spec.mjs +102 -0
- package/esm/tooling/generate/generator-spec.mjs.map +1 -0
- package/esm/tooling/generate/index.mjs +6 -0
- package/esm/tooling/generate/project-files.mjs +121 -0
- package/esm/tooling/generate/project-files.mjs.map +1 -0
- package/esm/tooling/generate/run-cli.d.mts +40 -0
- package/esm/tooling/generate/run-cli.d.mts.map +1 -0
- package/esm/tooling/generate/run-cli.mjs +93 -0
- package/esm/tooling/generate/run-cli.mjs.map +1 -0
- package/esm/tooling/generate/unified-diff.d.mts +37 -0
- package/esm/tooling/generate/unified-diff.d.mts.map +1 -0
- package/esm/tooling/generate/unified-diff.mjs +161 -0
- package/esm/tooling/generate/unified-diff.mjs.map +1 -0
- package/esm/tooling/index.d.mts +41 -0
- package/esm/tooling/index.mjs +45 -0
- package/esm/tooling/inspect/boot-for-inspect.d.mts +23 -0
- package/esm/tooling/inspect/boot-for-inspect.d.mts.map +1 -0
- package/esm/tooling/inspect/boot-for-inspect.mjs +63 -0
- package/esm/tooling/inspect/boot-for-inspect.mjs.map +1 -0
- package/esm/tooling/inspect/collect-config.mjs +77 -0
- package/esm/tooling/inspect/collect-config.mjs.map +1 -0
- package/esm/tooling/inspect/collect-models.d.mts +9 -0
- package/esm/tooling/inspect/collect-models.d.mts.map +1 -0
- package/esm/tooling/inspect/collect-models.mjs +154 -0
- package/esm/tooling/inspect/collect-models.mjs.map +1 -0
- package/esm/tooling/inspect/collect-packages.d.mts +10 -0
- package/esm/tooling/inspect/collect-packages.d.mts.map +1 -0
- package/esm/tooling/inspect/collect-packages.mjs +157 -0
- package/esm/tooling/inspect/collect-packages.mjs.map +1 -0
- package/esm/tooling/inspect/collect-pages.mjs +108 -0
- package/esm/tooling/inspect/collect-pages.mjs.map +1 -0
- package/esm/tooling/inspect/collect-routes.mjs +168 -0
- package/esm/tooling/inspect/collect-routes.mjs.map +1 -0
- package/esm/tooling/inspect/event-recorder.d.mts +37 -0
- package/esm/tooling/inspect/event-recorder.d.mts.map +1 -0
- package/esm/tooling/inspect/event-recorder.mjs +91 -0
- package/esm/tooling/inspect/event-recorder.mjs.map +1 -0
- package/esm/tooling/inspect/index.d.mts +7 -0
- package/esm/tooling/inspect/index.mjs +7 -0
- package/esm/tooling/inspect/inspect-app.d.mts +53 -0
- package/esm/tooling/inspect/inspect-app.d.mts.map +1 -0
- package/esm/tooling/inspect/inspect-app.mjs +92 -0
- package/esm/tooling/inspect/inspect-app.mjs.map +1 -0
- package/esm/tooling/inspect/inspect-report.schema.d.mts +15 -0
- package/esm/tooling/inspect/inspect-report.schema.d.mts.map +1 -0
- package/esm/tooling/inspect/inspect-report.schema.mjs +463 -0
- package/esm/tooling/inspect/inspect-report.schema.mjs.map +1 -0
- package/esm/tooling/inspect/inspect-report.types.d.mts +196 -0
- package/esm/tooling/inspect/inspect-report.types.d.mts.map +1 -0
- package/esm/tooling/inspect/inspect-report.types.mjs +33 -0
- package/esm/tooling/inspect/inspect-report.types.mjs.map +1 -0
- package/esm/tooling/mcp/create-mcp-context.d.mts +26 -0
- package/esm/tooling/mcp/create-mcp-context.d.mts.map +1 -0
- package/esm/tooling/mcp/create-mcp-context.mjs +75 -0
- package/esm/tooling/mcp/create-mcp-context.mjs.map +1 -0
- package/esm/tooling/mcp/db-schema.d.mts +49 -0
- package/esm/tooling/mcp/db-schema.d.mts.map +1 -0
- package/esm/tooling/mcp/db-schema.mjs +56 -0
- package/esm/tooling/mcp/db-schema.mjs.map +1 -0
- package/esm/tooling/mcp/docs-search.d.mts +72 -0
- package/esm/tooling/mcp/docs-search.d.mts.map +1 -0
- package/esm/tooling/mcp/docs-search.mjs +178 -0
- package/esm/tooling/mcp/docs-search.mjs.map +1 -0
- package/esm/tooling/mcp/index.mjs +9 -0
- package/esm/tooling/mcp/load-ai-tools.d.mts +62 -0
- package/esm/tooling/mcp/load-ai-tools.d.mts.map +1 -0
- package/esm/tooling/mcp/load-ai-tools.mjs +44 -0
- package/esm/tooling/mcp/load-ai-tools.mjs.map +1 -0
- package/esm/tooling/mcp/mcp-tools.d.mts +60 -0
- package/esm/tooling/mcp/mcp-tools.d.mts.map +1 -0
- package/esm/tooling/mcp/mcp-tools.mjs +513 -0
- package/esm/tooling/mcp/mcp-tools.mjs.map +1 -0
- package/esm/tooling/mcp/start-mcp-server.d.mts +56 -0
- package/esm/tooling/mcp/start-mcp-server.d.mts.map +1 -0
- package/esm/tooling/mcp/start-mcp-server.mjs +126 -0
- package/esm/tooling/mcp/start-mcp-server.mjs.map +1 -0
- package/esm/tooling/mcp/tool-input.d.mts +75 -0
- package/esm/tooling/mcp/tool-input.d.mts.map +1 -0
- package/esm/tooling/mcp/tool-input.mjs +72 -0
- package/esm/tooling/mcp/tool-input.mjs.map +1 -0
- package/esm/tooling/problem.d.mts +45 -0
- package/esm/tooling/problem.d.mts.map +1 -0
- package/esm/tooling/problem.mjs +28 -0
- package/esm/tooling/problem.mjs.map +1 -0
- package/esm/tooling/trace/trace-report.types.d.mts +71 -0
- package/esm/tooling/trace/trace-report.types.d.mts.map +1 -0
- package/esm/tooling/trace/trace-report.types.mjs +7 -0
- package/esm/tooling/trace/trace-report.types.mjs.map +1 -0
- package/esm/tooling/trace/trace-request.d.mts +83 -0
- package/esm/tooling/trace/trace-request.d.mts.map +1 -0
- package/esm/tooling/trace/trace-request.mjs +241 -0
- package/esm/tooling/trace/trace-request.mjs.map +1 -0
- package/esm/tooling/typecheck/index.d.mts +1 -0
- package/esm/tooling/typecheck/index.mjs +3 -0
- package/esm/tooling/typecheck/run-typecheck.d.mts +59 -0
- package/esm/tooling/typecheck/run-typecheck.d.mts.map +1 -0
- package/esm/tooling/typecheck/run-typecheck.mjs +153 -0
- package/esm/tooling/typecheck/run-typecheck.mjs.map +1 -0
- package/esm/updater/package-manager.mjs +1 -1
- package/esm/updater/package-manager.mjs.map +1 -1
- package/esm/updater/update-warlock-packages.mjs +1 -1
- package/esm/updater/update-warlock-packages.mjs.map +1 -1
- package/esm/upgrade/codemods/head-viewport.mjs +46 -0
- package/esm/upgrade/codemods/head-viewport.mjs.map +1 -0
- package/esm/upgrade/codemods/helpers.mjs +81 -0
- package/esm/upgrade/codemods/helpers.mjs.map +1 -0
- package/esm/upgrade/codemods/index.mjs +34 -0
- package/esm/upgrade/codemods/index.mjs.map +1 -0
- package/esm/upgrade/codemods/logger-sync-calls.mjs +57 -0
- package/esm/upgrade/codemods/logger-sync-calls.mjs.map +1 -0
- package/esm/upgrade/codemods/package-json.mjs +122 -0
- package/esm/upgrade/codemods/package-json.mjs.map +1 -0
- package/esm/upgrade/codemods/request-log-snapshot.mjs +82 -0
- package/esm/upgrade/codemods/request-log-snapshot.mjs.map +1 -0
- package/esm/upgrade/codemods/review-sites.mjs +262 -0
- package/esm/upgrade/codemods/review-sites.mjs.map +1 -0
- package/esm/upgrade/diff.mjs +119 -0
- package/esm/upgrade/diff.mjs.map +1 -0
- package/esm/upgrade/format-upgrade-report.mjs +32 -0
- package/esm/upgrade/format-upgrade-report.mjs.map +1 -0
- package/esm/upgrade/load-ts-morph.mjs +48 -0
- package/esm/upgrade/load-ts-morph.mjs.map +1 -0
- package/esm/upgrade/notes.mjs +16 -0
- package/esm/upgrade/notes.mjs.map +1 -0
- package/esm/upgrade/run-upgrade.mjs +246 -0
- package/esm/upgrade/run-upgrade.mjs.map +1 -0
- package/esm/upgrade/upgrade-command.action.mjs +37 -0
- package/esm/upgrade/upgrade-command.action.mjs.map +1 -0
- package/esm/upgrade/version.mjs +39 -0
- package/esm/upgrade/version.mjs.map +1 -0
- package/esm/use-cases/types.d.mts +1 -1
- package/esm/use-cases/types.d.mts.map +1 -1
- package/esm/use-cases/use-case-broadcast.d.mts +1 -1
- package/esm/use-cases/use-case-broadcast.d.mts.map +1 -1
- package/esm/use-cases/use-case-broadcast.mjs +1 -1
- package/esm/use-cases/use-case-broadcast.mjs.map +1 -1
- package/esm/use-cases/use-case-events.d.mts +1 -1
- package/esm/use-cases/use-case-events.d.mts.map +1 -1
- package/esm/use-cases/use-case-events.mjs +1 -1
- package/esm/use-cases/use-case-events.mjs.map +1 -1
- package/esm/use-cases/use-case-pipeline.d.mts +1 -1
- package/esm/use-cases/use-case-pipeline.d.mts.map +1 -1
- package/esm/use-cases/use-case-pipeline.mjs +1 -1
- package/esm/use-cases/use-case-pipeline.mjs.map +1 -1
- package/esm/use-cases/use-case.d.mts +1 -1
- package/esm/use-cases/use-case.d.mts.map +1 -1
- package/esm/use-cases/use-case.errors.d.mts +1 -1
- package/esm/use-cases/use-case.errors.d.mts.map +1 -1
- package/esm/use-cases/use-case.errors.mjs +1 -1
- package/esm/use-cases/use-case.errors.mjs.map +1 -1
- package/esm/use-cases/use-case.mjs +1 -1
- package/esm/use-cases/use-case.mjs.map +1 -1
- package/esm/use-cases/use-cases-registry.d.mts +1 -1
- package/esm/use-cases/use-cases-registry.d.mts.map +1 -1
- package/esm/use-cases/use-cases-registry.mjs +1 -1
- package/esm/use-cases/use-cases-registry.mjs.map +1 -1
- package/esm/utils/app-log.d.mts +6 -6
- package/esm/utils/app-log.d.mts.map +1 -1
- package/esm/utils/app-log.mjs +1 -1
- package/esm/utils/app-log.mjs.map +1 -1
- package/esm/utils/clock.d.mts +33 -0
- package/esm/utils/clock.d.mts.map +1 -0
- package/esm/utils/clock.mjs +27 -0
- package/esm/utils/clock.mjs.map +1 -0
- package/esm/utils/database-log.d.mts +1 -1
- package/esm/utils/database-log.d.mts.map +1 -1
- package/esm/utils/database-log.mjs +1 -1
- package/esm/utils/database-log.mjs.map +1 -1
- package/esm/utils/detect-environment-overrides.mjs +1 -1
- package/esm/utils/detect-environment-overrides.mjs.map +1 -1
- package/esm/utils/environment.d.mts +1 -1
- package/esm/utils/environment.d.mts.map +1 -1
- package/esm/utils/environment.mjs +1 -1
- package/esm/utils/environment.mjs.map +1 -1
- package/esm/utils/framework-vesion.mjs +2 -2
- package/esm/utils/framework-vesion.mjs.map +1 -1
- package/esm/utils/get-localized.d.mts +1 -1
- package/esm/utils/get-localized.d.mts.map +1 -1
- package/esm/utils/get-localized.mjs +1 -1
- package/esm/utils/get-localized.mjs.map +1 -1
- package/esm/utils/ids.d.mts +32 -0
- package/esm/utils/ids.d.mts.map +1 -0
- package/esm/utils/ids.mjs +33 -0
- package/esm/utils/ids.mjs.map +1 -0
- package/esm/utils/index.d.mts +3 -0
- package/esm/utils/index.mjs +3 -0
- package/esm/utils/is-test-file.mjs +1 -1
- package/esm/utils/is-test-file.mjs.map +1 -1
- package/esm/utils/load-environment.mjs +1 -1
- package/esm/utils/load-environment.mjs.map +1 -1
- package/esm/utils/normalized-path.d.mts +1 -1
- package/esm/utils/normalized-path.d.mts.map +1 -1
- package/esm/utils/normalized-path.mjs +1 -1
- package/esm/utils/normalized-path.mjs.map +1 -1
- package/esm/utils/npm-registry.d.mts +1 -1
- package/esm/utils/npm-registry.d.mts.map +1 -1
- package/esm/utils/npm-registry.mjs +1 -1
- package/esm/utils/npm-registry.mjs.map +1 -1
- package/esm/utils/paths.d.mts +1 -1
- package/esm/utils/paths.d.mts.map +1 -1
- package/esm/utils/paths.mjs +1 -1
- package/esm/utils/paths.mjs.map +1 -1
- package/esm/utils/promise-all-object.d.mts +1 -1
- package/esm/utils/promise-all-object.d.mts.map +1 -1
- package/esm/utils/promise-all-object.mjs +1 -1
- package/esm/utils/promise-all-object.mjs.map +1 -1
- package/esm/utils/queue.d.mts +1 -1
- package/esm/utils/queue.d.mts.map +1 -1
- package/esm/utils/queue.mjs +1 -1
- package/esm/utils/queue.mjs.map +1 -1
- package/esm/utils/recorded-environment-overrides.mjs +1 -1
- package/esm/utils/recorded-environment-overrides.mjs.map +1 -1
- package/esm/utils/report-environment-overrides.mjs +1 -1
- package/esm/utils/report-environment-overrides.mjs.map +1 -1
- package/esm/utils/runtime.d.mts +59 -0
- package/esm/utils/runtime.d.mts.map +1 -0
- package/esm/utils/runtime.mjs +85 -0
- package/esm/utils/runtime.mjs.map +1 -0
- package/esm/utils/sleep.d.mts +1 -1
- package/esm/utils/sleep.d.mts.map +1 -1
- package/esm/utils/sleep.mjs +1 -1
- package/esm/utils/sleep.mjs.map +1 -1
- package/esm/utils/sluggable.d.mts +1 -1
- package/esm/utils/sluggable.d.mts.map +1 -1
- package/esm/utils/sluggable.mjs +1 -1
- package/esm/utils/sluggable.mjs.map +1 -1
- package/esm/utils/to-json.d.mts +1 -1
- package/esm/utils/to-json.d.mts.map +1 -1
- package/esm/utils/to-json.mjs +1 -1
- package/esm/utils/to-json.mjs.map +1 -1
- package/esm/utils/types.d.mts +1 -1
- package/esm/utils/types.d.mts.map +1 -1
- package/esm/utils/urls.d.mts +1 -1
- package/esm/utils/urls.d.mts.map +1 -1
- package/esm/utils/urls.mjs +1 -1
- package/esm/utils/urls.mjs.map +1 -1
- package/esm/utils/version-compare.d.mts +1 -1
- package/esm/utils/version-compare.d.mts.map +1 -1
- package/esm/utils/version-compare.mjs +1 -1
- package/esm/utils/version-compare.mjs.map +1 -1
- package/esm/validation/database/exists-except-current-id.d.mts +1 -1
- package/esm/validation/database/exists-except-current-id.d.mts.map +1 -1
- package/esm/validation/database/exists-except-current-id.mjs +1 -1
- package/esm/validation/database/exists-except-current-id.mjs.map +1 -1
- package/esm/validation/database/exists-except-current-user.d.mts +1 -1
- package/esm/validation/database/exists-except-current-user.d.mts.map +1 -1
- package/esm/validation/database/exists-except-current-user.mjs +1 -1
- package/esm/validation/database/exists-except-current-user.mjs.map +1 -1
- package/esm/validation/database/types.d.mts +1 -1
- package/esm/validation/database/types.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-id.d.mts +1 -1
- package/esm/validation/database/unique-except-current-id.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-id.mjs +1 -1
- package/esm/validation/database/unique-except-current-id.mjs.map +1 -1
- package/esm/validation/database/unique-except-current-user.d.mts +1 -1
- package/esm/validation/database/unique-except-current-user.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-user.mjs +1 -1
- package/esm/validation/database/unique-except-current-user.mjs.map +1 -1
- package/esm/validation/file/file.d.mts +1 -1
- package/esm/validation/file/file.d.mts.map +1 -1
- package/esm/validation/file/file.mjs +1 -1
- package/esm/validation/file/file.mjs.map +1 -1
- package/esm/validation/index.d.mts +1 -1
- package/esm/validation/init.mjs +1 -1
- package/esm/validation/init.mjs.map +1 -1
- package/esm/validation/plugins/database-plugin.mjs +1 -1
- package/esm/validation/plugins/database-plugin.mjs.map +1 -1
- package/esm/validation/plugins/file-plugin.mjs +1 -1
- package/esm/validation/plugins/file-plugin.mjs.map +1 -1
- package/esm/validation/plugins/localized-plugin.mjs +1 -1
- package/esm/validation/plugins/localized-plugin.mjs.map +1 -1
- package/esm/validation/types.d.mts +58 -3
- package/esm/validation/types.d.mts.map +1 -1
- package/esm/validation/validateAll.mjs +20 -3
- package/esm/validation/validateAll.mjs.map +1 -1
- package/esm/validation/validation-failure-status.mjs +15 -0
- package/esm/validation/validation-failure-status.mjs.map +1 -0
- package/esm/validation/validators/file-validator.d.mts +28 -41
- package/esm/validation/validators/file-validator.d.mts.map +1 -1
- package/esm/validation/validators/file-validator.mjs +4 -1
- package/esm/validation/validators/file-validator.mjs.map +1 -1
- package/esm/vite/lower-stage3-decorators.d.mts +1 -1
- package/esm/vite/lower-stage3-decorators.d.mts.map +1 -1
- package/esm/vite/lower-stage3-decorators.mjs +1 -1
- package/esm/vite/lower-stage3-decorators.mjs.map +1 -1
- package/esm/warlock-config/bundle-config.mjs +148 -0
- package/esm/warlock-config/bundle-config.mjs.map +1 -0
- package/esm/warlock-config/default-configurations.mjs +1 -1
- package/esm/warlock-config/default-configurations.mjs.map +1 -1
- package/esm/warlock-config/define-config.d.mts +1 -1
- package/esm/warlock-config/define-config.d.mts.map +1 -1
- package/esm/warlock-config/define-config.mjs +1 -1
- package/esm/warlock-config/define-config.mjs.map +1 -1
- package/esm/warlock-config/index.d.mts +1 -1
- package/esm/warlock-config/index.mjs +1 -1
- package/esm/warlock-config/normalize-build-config.mjs +1 -1
- package/esm/warlock-config/normalize-build-config.mjs.map +1 -1
- package/esm/warlock-config/types.d.mts +28 -4
- package/esm/warlock-config/types.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.d.mts +32 -7
- package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.mjs +94 -18
- package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
- package/esm/warlock-config/warn-deprecated-config.mjs +1 -1
- package/esm/warlock-config/warn-deprecated-config.mjs.map +1 -1
- package/llms-full.txt +3271 -784
- package/llms.txt +16 -6
- package/package.json +51 -14
- package/schemas/inspect-report.schema.json +554 -0
- package/skills/README.md +9 -0
- package/skills/add-connector/SKILL.md +26 -38
- package/skills/benchmark-code/SKILL.md +30 -24
- package/skills/build-restful/SKILL.md +14 -14
- package/skills/build-url/SKILL.md +18 -18
- package/skills/configure-app/SKILL.md +129 -14
- package/skills/create-controller/SKILL.md +29 -12
- package/skills/create-module/SKILL.md +3 -3
- package/skills/define-resource/SKILL.md +32 -29
- package/skills/encrypt-data/SKILL.md +21 -19
- package/skills/generate-openapi/SKILL.md +50 -24
- package/skills/hash-password/SKILL.md +2 -2
- package/skills/health-checks/SKILL.md +26 -7
- package/skills/index.md +9 -4
- package/skills/lower-stage3-decorators/SKILL.md +4 -4
- package/skills/make-endpoint/SKILL.md +110 -0
- package/skills/model-factories/SKILL.md +92 -0
- package/skills/process-image/SKILL.md +32 -30
- package/skills/register-route/SKILL.md +119 -10
- package/skills/request-memo/SKILL.md +1 -1
- package/skills/request-tracing/SKILL.md +4 -1
- package/skills/resolve-path/SKILL.md +45 -44
- package/skills/retry-operation/SKILL.md +20 -11
- package/skills/run-app/SKILL.md +111 -20
- package/skills/send-response/SKILL.md +189 -16
- package/skills/store-file/SKILL.md +97 -53
- package/skills/test-fakes/SKILL.md +123 -0
- package/skills/test-http/SKILL.md +125 -21
- package/skills/test-service/SKILL.md +41 -1
- package/skills/update-packages/SKILL.md +29 -18
- package/skills/upgrade-from-5-29/SKILL.md +413 -0
- package/skills/upload-file/SKILL.md +31 -33
- package/skills/use-app-context/SKILL.md +38 -31
- package/skills/use-middleware/SKILL.md +46 -26
- package/skills/use-model-transformers/SKILL.md +37 -28
- package/skills/use-repository/SKILL.md +2 -2
- package/skills/validate-input/SKILL.md +73 -29
- package/skills/warlock-agents-md/SKILL.md +96 -0
- package/skills/warlock-board/SKILL.md +123 -0
- package/skills/warlock-check/SKILL.md +132 -0
- package/skills/warlock-conventions/SKILL.md +115 -0
- package/skills/warlock-doctor/SKILL.md +55 -22
- package/skills/warlock-inspect/SKILL.md +134 -0
- package/skills/warlock-mcp/SKILL.md +120 -0
- package/skills/warlock-routes/SKILL.md +18 -11
- package/skills/warlock-trace/SKILL.md +81 -0
- package/skills/wire-socket/SKILL.md +8 -8
- package/skills/write-seeder/SKILL.md +46 -32
- package/skills/write-use-case/SKILL.md +40 -27
- package/esm/http/uploads/matches-if-none-match.mjs +0 -13
- package/esm/http/uploads/matches-if-none-match.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,12 +6,176 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
> ⚠ **Versioning: `@warlock.js/*` does not follow SemVer strictly — breaking changes may ship in a minor.** This is a deliberate decision, not an oversight: the framework is pre-adoption and the cost of a major per behaviour fix currently outweighs the benefit. **Pin an exact version or a tilde range (`~4.13.0`) if you need to opt into changes rather than receive them.** Every breaking change is marked **BREAKING** in its entry and summarised in an _Upgrading_ section at the top of the release. **This policy will change once the framework has consumers beyond its author.**
|
|
8
8
|
|
|
9
|
+
## 5.31.0 - 2026-10-18
|
|
10
|
+
|
|
11
|
+
### Security
|
|
12
|
+
|
|
13
|
+
- In every release up to and including 5.30.0, the global `http.rateLimit` did not apply to application routes in production, and per-route `rateLimit` options had no effect in production (development enforced them). 5.31 enforces both: the shared bucket now covers pages and API routes. Static files (the public folder, `router.directory()` mounts, `router.file()` routes and the web build's assets) and the built-in liveness and readiness probes are exempt by default; `http.rateLimit.staticFiles: true` and `http.health.rateLimit: true` opt them into the global policy.
|
|
14
|
+
|
|
15
|
+
### Upgrading
|
|
16
|
+
|
|
17
|
+
- **BREAKING:** rate limits now apply to production and development application routes and web page routes. The default is 60 requests/minute per IP, in one bucket shared by pages and API routes. Review `http.rateLimit.max`; behind a proxy configure trusted `http.trustProxy` addresses or a suitable `keyGenerator` so clients do not share the proxy's quota. Set `http.rateLimit.global: false` to keep blanket quotas off while retaining explicit per-route limits. Static files (the public folder, `router.directory()` mounts, `router.file()`/`cachedFile()`/`files()`/`cachedFiles()` routes and the web build's assets) are exempt unless `http.rateLimit.staticFiles: true` counts them, so a page load's assets do not spend the quota. Files served by a route handler, such as `router.get("/uploads/*", createUploadedFileController())`, are not static mounts and do count against the limit; give such a route `rateLimit: false` or its own limit when pages load many of them. Built-in `/health` and `/ready` are exempt unless `http.health.rateLimit: true` opts them back in. Exempt any other route with `rateLimit: false`. `warlock upgrade --from 5.30 --to 5.31.0` lists an `http` config without `rateLimit` for review (codemod `rate-limit-defaults`).
|
|
18
|
+
- **BREAKING:** upgrade development, CI and production runtimes to Node.js 22.15 or newer before running the CLI. `warlock upgrade --from 5.30 --to 5.31.0` raises `engines.node`, `.nvmrc` and `.node-version` (codemod `node-22-15`).
|
|
19
|
+
- **BREAKING (tests only):** `setupTest()` and `startHttpTestServer()` install test fakes for mail, queue, cache, storage, clock and ids by default. Suites that relied on real deliveries, a Redis cache shared between the HTTP test server and the workers, real buckets or jobs processed by a worker set `fakes: false` (or `{ cache: false }`, etc.) in `src/config/tests.ts`, or pass `fakes` to either call.
|
|
20
|
+
|
|
21
|
+
- `warlock dev` now writes the generated section of `AGENTS.md` at the project root (creating the file when it is missing; hand-written content outside the `warlock:generated` markers is left as it is) and `.warlock/dev-server.json`. Commit `AGENTS.md`, or set `devServer.agentsMd: false` to keep the dev server from touching it.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- `@warlock.js/core/net`: a side-effect-free subpath exporting the SSRF IP classifier `isPrivateOrReservedIp` (the same function the root exports). It loads only `node:net`, so workers, CLIs and standalone processes — `@warlock.js/ai` among them — can reuse the private-address rules without loading the HTTP server, database, cache or mail modules behind the root entry.
|
|
26
|
+
- `http.rateLimit.staticFiles` (default `false`) decides whether static files count against the global rate limiter. Each static mount can decide for itself: `router.directory(options, { rateLimit })` and a fourth `{ rateLimit }` argument on `router.file()`, `cachedFile()`, `files()` and `cachedFiles()` take `true` (global limiter), `false` (exempt) or `{ max, timeWindow, errorMessage? }` (own limit and bucket).
|
|
27
|
+
- Route validation can answer with an application's own failure body. `validation.onFailure(result, { request, response, route })` returns `{ status?, body }` for a failed `schema` or `params` (no `status` uses `validation.response.status`, 422 by default); `validation.response.body(result, route)` in the validation config does the same for every route. The route hook wins, either may return `undefined` to fall through, and the framework body is unchanged when neither is set. Routes also accept a `validation` option merged over the handler's own, so one handler can serve several routes with different failure codes. `ValidationConfiguration` now types `response` and `responseStatus`.
|
|
28
|
+
- `warlock generate.openapi` documents a custom validation failure body from the handler's `responseSchema` entry for the failure status instead of the framework's `ValidationFailed` shape; without one, the configured status is documented without a body and a route-level hook produces a warning.
|
|
29
|
+
- `evaluateConditionalRequest()`, `matchesIfNoneMatch()`, `matchesIfMatch()` and `parseEntityTagList()` expose the framework's RFC 9110 precondition handling for application handlers that set their own ETags.
|
|
30
|
+
- A route's `rateLimit` option also accepts `false` to exempt the route from the global limiter, and `true` to keep it under the global policy (the default for application routes).
|
|
31
|
+
- Production runtime support for Bun and Deno. An app built on Node with `warlock build` starts and serves on Bun 1.4.3 and Deno 2.9.7, either directly (`bun dist/app.js`, `deno run -A dist/app.js`) or through `warlock start` run with that runtime. A `runtimes` CI workflow builds a fixture app with pages, API routes, file cache, file logging and static files from the packed framework, starts it on Node, Bun and Deno, and checks every route plus a clean `SIGTERM` shutdown. The "Supported runtimes" docs page lists the commands for each runtime.
|
|
32
|
+
- `detectJavaScriptRuntime()`, `describeJavaScriptRuntime()`, `nodeOnlyCommandError()`, `assertNodeOnlyCommand()` and `unverifiedBuildRuntimeNotice()` report which runtime is executing (`{ type: "node" | "bun" | "deno", version }`), and let a CLI command refuse to run anywhere but Node.
|
|
33
|
+
- `warlock inspect [--json] [--section routes,models,…]` prints the app's facts from its booted registries: routes (middleware chain, auth guard, CSRF, rate limit, logging, request/response JSON Schema), models (table, columns, relations, resource), resources, config keys with types (never values), event listeners, pages (layout chain, loaders, actions, guard), queue jobs, scheduled tasks and installed `@warlock.js/*` versions. Boots like `warlock doctor` — no connection, no port. The report is versioned (`schemaVersion: 1`, fields only ever added) and published as JSON Schema: `schemas/inspect-report.schema.json` and `INSPECT_REPORT_JSON_SCHEMA`. `inspectApp()` returns the same object inside any process where the app is booted; `bootForInspect()` boots first.
|
|
34
|
+
- `warlock check [--changed] [--base <ref>] [--skip …] [--json]` is one verify command: an incremental typecheck (in a child process, so running out of memory is reported), the app's ESLint/oxlint, the tests the change affects (`vitest run` / `vitest related`), and convention checks (importing an auto-loaded file, `.js` import extensions, relative imports across modules, `experimentalDecorators`). One JSON object per problem — `{ code, category, severity, source, file, line, column, message, hint, skill, docs, rule }` — and exit codes that split your code (1) from this machine (2: Node version, missing tool, unreachable database/Redis, busy port, git unavailable, tool crash). It detects and reports only; it never stops processes or frees ports.
|
|
35
|
+
- `warlock check`'s conventions step also reports security and code-style problems from source, the same with ESLint, Oxlint or no linter: `request.all()` passed to a query, a service or `inApp()` (`WL9005`); a POST/PUT/PATCH/DELETE route with no auth middleware and no `public: true` (`WL9006`, the source-side twin of the `warlock dev` warning, sharing its guard-name rule); a `redirect()` / `navigateTo()` / `<Link to|href>` target read from request input without `safeRedirect()` / `safeRedirectTarget()` or an `isSafeRedirect()` check (`WL9007`); a raw email, credential or request body in a log call (`WL9008`, using the logger's default censored keys); a regex with an unbounded quantifier run on request input (`WL9009`); and, as warnings, `await log.*()` (`WL9010`), a second controller in one file (`WL9011`) and a `kind` union discriminator (`WL9012`). A `// warlock-check-ignore WL9006` comment on the problem's line or the line above records a deliberate exception. The generated `AGENTS.md` conventions list and the `warlock-conventions` skill cover every code.
|
|
36
|
+
- `warlock typecheck [--changed] [--base <ref>] [--project <tsconfig>] [--json]` typechecks with the TypeScript compiler API, keeping incremental state in `.warlock/cache/typecheck.tsbuildinfo`; `--changed` checks only the changed files and the files importing them.
|
|
37
|
+
- Stable error codes: a `WL` + four-digit registry (`ERROR_CODES`, first digit = area: config, boot, routing, validation, http, database, cli, environment, convention), each with a one-line fix, a skill and a docs anchor, exported from `@warlock.js/core` and `@warlock.js/core/errors` with `explainErrorCode()`, `errorCodeOf()` (also maps `ECONNREFUSED`/`EADDRINUSE` and follows `cause`) and `WarlockError`. Framework error classes carry a `code` (`ModuleLoadError` → `WL2001`, `ContainerKeyMissingError` → `WL2004`, `CliOptionValueError` → `WL7001`, …); a duplicate route name throws `RouteNameTakenError` (`WL3001`), and unknown route names, missing URL params, invalid controller actions and refused connector lists throw coded `WarlockError`s with unchanged messages. `warlock explain <CODE> [--json]` prints a code's meaning and fix; `warlock explain` lists them all.
|
|
38
|
+
- `warlock doctor --json` prints the report as JSON, and every `warn`/`fail` finding (also in the plain report) carries its error code with the same `hint` / `skill` / `docs` fields `warlock check --json` uses.
|
|
39
|
+
- `@warlock.js/core/tooling` subpath: `inspectApp`, `runCheck`, `runTypecheck`, `CHECK_EXIT_CODES` and the shared `ToolingProblem` type, kept off the root barrel because it loads the TypeScript compiler and ESLint.
|
|
40
|
+
- Skills `warlock-inspect` and `warlock-check`; `warlock-doctor` covers `--json` and error codes. Docs pages for `warlock inspect`, `warlock check` / `typecheck` and the error-code reference.
|
|
41
|
+
- `warlock make endpoint <module>/<name>` (also `generate.endpoint` / `make.endpoint`) generates one endpoint from its request schema: `--schema` (a seal object schema file), `--method`, `--path`, `--resource`, and `--auth` (default) or `--public`. It writes the schema module, a service taking validated input, the resource shaped from the schema fields, one controller reading `request.validated()` with its `validation` and an OpenAPI `responseSchema`, the route (in a `guarded()` block, or marked `public: true`), the success message in `utils/locales.json`, and `tests/<name>.test.ts`, which requests the endpoint over the real HTTP stack with a valid input derived from the schema, a missing required field, and for guarded routes an anonymous `401` plus a signed-in case. Existing files are skipped and reported unless `--force`; a controller already in `routes.ts` is not registered twice. `warlock make <generator>` dispatches to every generator, like `warlock generate`.
|
|
42
|
+
- Every `generate.*` command, `make` and `add` accept `--dry-run` (write nothing; `add` also installs nothing, running feature setup against an in-memory copy of the files) and `--json` (one versioned report on stdout listing files written, files skipped because they exist, per-file actions, command details and messages; also printed when the command fails). `add --list --json` includes the feature catalog.
|
|
43
|
+
- Test fakes at `@warlock.js/core/tests`, installed by default in the test environment: `mailFake`, `queueFake`, `cacheFake`, `storageFake`, `clockFake` and `idsFake`, with assertion helpers (`assertSent`, `assertSentCount`, `assertPushed`, `assertNotPushed`, `assertHas`, `assertStored`, `assertExists`, `travel`, ...) whose failures list what was recorded. `installTestFakes()` / `restoreTestFakes()` and the `fakes` option of `setupTest()` / `startHttpTestServer()` control them; `tests.fakes` configures them per project. The storage fake's temp root is shared between the HTTP test server and the workers.
|
|
44
|
+
- `clock` (`now()`, `timestamp()`) and `ids` (`uuid()`, `token(length)`) runtime helpers. Outside tests they are the system clock and `node:crypto`; in tests the fakes make them deterministic without touching `Date` or timers.
|
|
45
|
+
- `defineFactory(Model, (seed) => attributes)` model factories with `make()`, `makeMany(n)`, `create()`, `create(n)`, `createMany(n)`, named states (`state()` / `with()`) and a deterministic seed (`text`, `email`, `uuid`, `date`, `number`, `pick`); `resetFactorySequences()`.
|
|
46
|
+
- `createTestHttpServer({ routes?, loadAppModules?, importModule? })` serves requests inside the test worker with the production Fastify setup, plugins and route registration on an OS-assigned port, returning request helpers, `actingAs(user)` and `close()`; the worker's fakes see what handlers did. `createTestRequestClient(baseUrl)` binds the request helpers to any URL, and `actingAs(user, client?)` accepts one.
|
|
47
|
+
- `startHttpTestServer({ port: 0 })` binds a free port and publishes the bound port to the workers; `warlock add test` now generates it.
|
|
48
|
+
- `snapshotResponse(response, { redact })` reduces a response to status, content type and body with volatile paths redacted, for `toMatchSnapshot()`.
|
|
49
|
+
- `warlock test [filters...]` runs the project's own Vitest with `--changed` (optionally `--since <ref>`), `--related <files>`, `--watch`, `--test-name-pattern` and `--json`; change-scoped runs pass when no test is affected.
|
|
50
|
+
- `Storage` exposes `isInitialized`, `driverNames()` and `getDefaultName()`; mail exposes `getExplicitMailMode()` and `resetMailMode()`.
|
|
51
|
+
- `warlock upgrade --to <version>` applies the mechanical edits for each breaking change between the installed release and the target, lists every place that needs a decision with `file:line`, a hint and the skill to read, and moves every `@warlock.js/*` dependency to the target. `--dry-run` prints a unified diff and writes nothing, `--json` prints the result, `--from` sets the version upgrading from; without it the command reads the installed `@warlock.js/core`, which is already the target once the new release is installed, so pass it (`warlock upgrade --from 5.30 --to 5.31.0`). With no `--from` and the installed version equal to the target, the command stops and asks for `--from <previous version>`. Codemods for 5.30 and 5.31: `logger-sync-calls`, `request-log-snapshot`, `head-viewport`, `node-22-15`, `warlock-versions`, plus review lists for `seal-validate-result`, `ai-tool-dispatch`, `ai-anthropic-body`, `ai-finish-reason`, `rate-limit-defaults`, `seal-refine-output`, `seal-container-catch`, `seal-union-output` and `ai-compaction-opt-in`. Source edits use `ts-morph`, an optional peer loaded only by this command; without it the command prints the install command and changes nothing.
|
|
52
|
+
- Route option `public?: boolean` (also on `router.group()`, inherited by its routes; a route's own `public: false` opts back out) records that a mutating route is intentionally reachable without signing in. It changes nothing at runtime.
|
|
53
|
+
- `warlock dev` warns once per route about POST/PUT/PATCH/DELETE routes that have no auth middleware and no `public: true`, listing method, path and route file; HMR-added routes are reported when they commit. Page routes are skipped, production never checks, and `http.warnUnguardedRoutes: false` turns it off. Middleware counts as a guard when marked with the new `markAuthGuard(middleware, isGuard?)` (`authMiddleware()` marks itself) or, unmarked, when its function name contains `auth` or `guard`; `isAuthGuardMiddleware()`, `isUnguardedMutatingRoute()` and `reportUnguardedMutatingRoutes()` are exported for tooling.
|
|
54
|
+
- `safeRedirect(target, { allowedOrigins, fallback })` and `isSafeRedirect(target, options?)`: an allowlist for redirect targets taken from request input. Same-origin paths and absolute http(s) URLs on an allowed origin pass; `//host`, `/\host`, other schemes, credentials in the URL and control characters fall back to `"/"` (or `fallback`). `response.redirect()` itself is unchanged.
|
|
55
|
+
- `escapeHeaderValue(value)` makes any value a valid header value: CR/LF/NUL and other control characters (tab kept) are removed, non-Latin-1 characters become `?`, and the result is trimmed, so request input cannot split a header or make Node throw a 500.
|
|
56
|
+
- Typed, validated configuration: a `src/config/<name>.ts` file may export `configSchema = defineConfigSchema(validator, { env })` next to its default export (`ConfigOf<typeof configSchema>` types the value). Dev boot, each config hot reload and the production loader `warlock build` generates validate it before registration and throw one `InvalidConfigError` listing every problem in every config file (key path, rule message, the environment variable to set), never the values. An invalid config never reaches its special handler; an invalid hot reload keeps the previous value. Files without a schema load as before.
|
|
57
|
+
- `warlock mcp` serves the app to coding agents over the Model Context Protocol — stdio by default, or `--http` (Streamable HTTP on `127.0.0.1`; `--token` / `WARLOCK_MCP_TOKEN` required for any other host). Tools: `inspect_app` and one `inspect_<section>` per inspect section (with filters, e.g. `inspect_routes { unguardedWrites: true }`), `db_schema` (tables, columns, keys and relations from the models), `docs_search` / `docs_read` (offline, over the installed `@warlock.js/*` skills, READMEs and llms files only), `explain`, `check_run`, `test_run` (one file, the tests related to changed files, or the suite), `requests_recent` (devtools: phases, queries with `nPlusOne` flags, logs, timings) and `generate_make` / `generate_add`, which run the generator in a throw-away copy of the project and return a unified diff. Read-only by default: writing needs `--allow-writes`, otherwise `write: true` is refused (`WL7005`). `@warlock.js/ai-tools` is a new optional peer, imported only by this command; a missing one fails with `WL7003` and the install line. Tool names use `_` because model APIs refuse `.` in tool names.
|
|
58
|
+
- `warlock dev --mcp` (or `devServer.mcp: true | { port, token, allowWrites }`) serves the same tools from the dev server over loopback HTTP, reading the live registries after each hot reload.
|
|
59
|
+
- `warlock dev` records its address, devtools mount and MCP endpoint in `.warlock/dev-server.json` (removed on shutdown); `warlock trace` and `requests_recent` read it.
|
|
60
|
+
- `warlock trace <method> <url> [--body json|@file] [--header k:v] [--json]` sends one request to the running dev server (correlated by `x-request-id`) and prints its devtools timeline as a versioned report (`schemaVersion: 1`): middleware with timings, the validation result and errors, handler time, queries with N+1 flags, logs, cache operations, mails, the response (authorization and cookie headers redacted, bodies capped) and timings. Devtools is checked before anything is sent: `WL8008` when the dev server is not running, `WL8009` when devtools is not, `WL5004` when devtools recorded no timeline; failures exit 2 for this machine and 1 otherwise.
|
|
61
|
+
- `warlock agents-md [--write] [--json]` generates the app-specific section of `AGENTS.md` from the booted app — modules with route and model counts, a routes summary with unguarded writes flagged, models, the conventions `warlock check` enforces, the installed skills and the verify commands — between `<!-- warlock:generated:start -->` and `<!-- warlock:generated:end -->`. Content outside the markers is never changed; malformed markers fail with `WL7501` and nothing is written. `warlock dev` refreshes the section on boot and after reloads (debounced, written only when it changed); `devServer.agentsMd: false` turns that off.
|
|
62
|
+
- `warlock board init|add|status|send|watch [--json]` is a file-based protocol for two coding agents (an implementer and a reviewer) in a git-ignored `.warlock/board/`: items with the states todo, in-progress, ready-for-review, changes-requested, approved and blocked (refused moves fail with `WL7403`), append-only numbered messages per recipient (`to-<agent>/NNNN-<slug>.md`), `VERDICT: APPROVED` / `VERDICT: CHANGES REQUESTED` lines that move the item, and a `watch` that blocks until a new message arrives or times out (`WL7404`, exit 3). New codes `WL7401`–`WL7404` cover the board.
|
|
63
|
+
- `runTests({ files | changed | base })` runs the app's vitest for one file, the tests related to changed files, or the suite, with the `warlock check` problem shape. It and the building blocks of the commands above (`startWarlockMcpServer`, `createMcpContext`, `createWarlockMcpTools`, `searchDocs`, `buildDbSchema`, `sandboxBackend`, `applyGeneration`, `traceRequest`, `connectDevtools`, `renderAgentsMdSection`, `writeAgentsMd`, `createAgentsMdRefresher`, `initBoard`, `watchBoard`, …) are exported from `@warlock.js/core/tooling`.
|
|
64
|
+
- Skills `warlock-mcp`, `warlock-trace`, `warlock-agents-md` and `warlock-board`; `warlock-inspect` points agents at the MCP tools. Docs pages for `warlock mcp`, `warlock trace`, `warlock agents-md` and `warlock board`, and the new codes on the error-code reference.
|
|
65
|
+
|
|
66
|
+
- End-to-end configuration recipes cover a non-default R2 image disk, variant ingestion and serving, and shared Redis rate-limit windows across two servers with outage behavior.
|
|
67
|
+
- The `upgrade-from-5-29` skill guides application upgrades through logger delivery, tool concurrency, request snapshots, auth counter/lock resets, image cache layouts and viewport metadata. It covers Seal result narrowing and refinement/container/union behavior, AI finish reasons and replay, bounded workspace reads, and production rate-limit migration in 5.31; cut-off AI agent answers (`AgentIncompleteError` with `report.status: "incomplete"`, `continueOnOutputLimit`, per-run `modelOptions` and the Anthropic adapter's larger default `max_tokens`); the AI cost changes (per-provider cache billing, `totalCost`, the new built-in model prices and removed defaults, and `ProviderOverloadedError`); and the AI workspace changes (the larger `tools.all()` set, the new `WorkspaceOps` / `Workspace` methods, nested-command refusals and `dispose()`).
|
|
68
|
+
- Skills include complete examples for request cancellation, stream/SSE backpressure and retention, HTTP error mapping, shared rate limits and signed-in test clients.
|
|
69
|
+
- Notification scaffolds with test support emit real signed-in controller specs and isolated two-recipient fixtures for listing, unread counts, marking one/all read, query validation and ownership checks. Fixtures use the configured auth model and revoke/delete only their own credentials and rows.
|
|
70
|
+
- `actingAs(user)` at `@warlock.js/core/tests` issues a real persisted access token and returns isolated authenticated HTTP helpers. Middleware remains active; `client.dispose()` revokes only its token.
|
|
71
|
+
- Optional Oxlint background file checks during development. Install Oxlint in the app and add `.oxlintrc.json`, `.oxlintrc.jsonc`, `oxlint.config.ts` or `oxlint.config.mts`; changed files are linted in sequential batches in a worker and JSON diagnostics appear with rule, location and severity. Large boot scans stay within platform command-line limits, tool/config failures include actionable CLI output, and results omit source contents. Both configured ESLint and Oxlint run by default; ESLint still needs only its app configuration and uses core's own dependency. `devServer.healthCheckers` also accepts `{ typescript?, eslint?, oxlint? }` switches while preserving custom arrays and `false`.
|
|
72
|
+
- Real Redis integration coverage for cache-backed HTTP rate-limit stores, including concurrent requests, preserved deadlines and counters recreated after a seeded key expires. Local runs opt in with `WARLOCK_REDIS_INTEGRATION=1`; CI requires a live Redis service. Tests use UUID prefixes and clean only their own keys.
|
|
73
|
+
- Image variants support object-storage disks through `resolveImageVariant`, `createUploadedFileController` and `generateImageVariants({ disk, urlPrefix })`. Remote originals retain their driver URL; derivatives are cached locally, with bounded source reads and generation keys that isolate buckets and tenant prefixes. ETag metadata avoids downloads on cache hits; sources without an ETag use content hashes. Concurrent downloads are shared, and ingest downloads once for all variants/formats. The default public uploads controller keeps returning 404 for cloud default disks; an explicit `disk` or `remote: true` deliberately opts a controller into cloud serving.
|
|
74
|
+
- `uploads.images.maxCacheBytes` (default 512 MiB) and `maxCacheAge` (default seven days) bound cached derivatives. Expired hits render again; cleanup removes expired and oldest files, retaining the derivative being returned even when it alone exceeds the byte budget. Writes schedule a coalesced background sweep at most once per minute; hits never walk the cache and the byte budget is eventual. Idle caches are reclaimed after their next generated derivative.
|
|
75
|
+
- SSE supports unnamed events (`send(undefined, data)`) and raw string payloads through a fourth `{ raw: true }` argument, with safe multiline `data:` encoding. SSE and streams accept explicit cache `headers` before flushing while protecting protocol/drain headers and keeping safe cache defaults.
|
|
76
|
+
- SSE and stream controllers gain synchronous `enqueue()` with a byte cap (`maxQueuedBytes`, default 1 MiB for enqueue), disconnect/drop overflow policies with a visible `dropped` counter, ordered draining and flushing accepted queued output on `end()`.
|
|
77
|
+
- `http.logging.private` applies path-prefix or regular-expression policies to decoded, normalized request URLs, including unmatched requests. Matching policies check raw, decoded and resolved paths plus the matched route pattern, remove input before snapshots are built and cannot be overridden by per-route logging. Dev-dispatch error URLs use the same policy.
|
|
78
|
+
|
|
79
|
+
### Fixed
|
|
80
|
+
|
|
81
|
+
- Skill examples compile against the current API: the LLM-streaming example iterates `agent.stream()` events (`agent.trip.streaming` / `event.delta`), the raw-query example uses `app.database?.driver.query(...)`, the environment-aware logging example sets per-channel `levels` (`LogConfigurations` has no `level`), the authenticated-test examples use `authService.createTokenPair(user)` and `accessToken.token`, `devServer.healthCheckers` shows a valid value, and examples import or declare everything they use.
|
|
82
|
+
- Running `bin/warlock.js` from a source checkout (no `esm/` build next to it) no longer crashes every booting command (`doctor`, `inspect`, `mcp`, `routes`) on Node.js 22.15 with `TypeError: t is not a function` from `dayjs.extend`. The bin's TypeScript `load` hook ran in the main thread, and on 22.15 that hands a CommonJS package the empty, not-yet-run exports of a file an ES module also imports (`@mongez/time-wizard` requiring the dayjs `utc` and `timezone` plugins). The hook now runs in a `module.register()` loader worker. Bare subpaths of a package consumed as source, such as `@warlock.js/core/net`, now resolve to the directory's `index.ts` instead of failing with `ERR_UNSUPPORTED_DIR_IMPORT`, so `warlock mcp` loads `@warlock.js/ai` from source. The published package, which loads compiled output without hooks, was not affected.
|
|
83
|
+
- Conditional requests follow RFC 9110: `If-None-Match` uses weak comparison on both sides (a weak current ETag now matches its strong form) and parses quoted tags containing commas; `If-Match` uses strong comparison, so a `W/` tag never satisfies it. `response.sendFile()`, `sendBuffer()`/`sendImage()` with an `etag` and the uploads variant controller answer a failed `If-Match` or `If-Unmodified-Since` with 412, and evaluate the headers in the RFC order.
|
|
84
|
+
- The development wildcard dispatcher applies the global rate limiter per matched route instead of to every request, so a route exempted with `rateLimit: false` or `serverOptions: { config: { rateLimit: false } }`, a static file route and an unmatched URL are not counted, exactly as in production. Routes with a wildcard path share the global bucket in both modes.
|
|
85
|
+
- `warlock generate.module` list controllers validate their query (`page`, `limit`) with a schema and pass `request.validated()` to the list service instead of `request.all()`; the web starter's contact route is registered with `public: true`.
|
|
86
|
+
- React module-resolution regressions preserve the ESM package boundary in isolated fixtures and report child-process stderr before checking output, so missing and broken React installations are tested correctly under Node.js 22.15.
|
|
87
|
+
- The TypeScript worker configured-root regression uses the framework's real source-worker bootstrap on Node.js 22.15, retaining its declaration, update and deletion checks instead of starting an unsupported direct `.ts` worker entry. The same assertions also run against a built `.mjs` worker without loader hooks.
|
|
88
|
+
- Upgrade guidance names `AgentConfig.compaction`, covers sub-agent dispatch and blank/default validation changes, and explains which routes the production rate quotas cover. In 5.31, `purgeImageVariants()` preserves legacy two-level cache files; retire them manually, correcting the earlier 5.30 cleanup suggestion.
|
|
89
|
+
- Per-file image-cache purges refuse symlinked shard directories for local and object-storage disks. Stale-generation pruning now removes only recognized cache files from older generation-shaped folders, preserving current-generation files, unrelated entries, directories and symlinks.
|
|
90
|
+
- The error-handling guide gives the schema-validation failure status as 422, matching the framework default, and the validation skill's introduction no longer says 400.
|
|
91
|
+
- The validation skill shows the HTTP 422 body as strict JSON that can be copied into a JSON parser.
|
|
92
|
+
- Image-variant purges remove only recognized cache files and retain the cache root, directories, unrelated files and symlinks. Purge and background eviction validate every shard/source/generation path component, so a cache nested inside storage cannot recursively delete uploads. Use a dedicated derivative folder.
|
|
93
|
+
- Notification test fixtures roll back partially created users, tokens and rows on setup failure, attempt all cleanup operations and clear their reference before teardown. `actingAs()` refuses non-test environments before issuing credentials and revokes a newly issued blank token before rejecting it.
|
|
94
|
+
- Image-variant generation and purging reject a cache directory that equals or contains any configured local storage root, including runtime-registered disks and symlink aliases. Validation happens in the shared cache-directory resolver, so `purgeImageVariants()` cannot bypass it and delete uploads through an overlapping cache setting.
|
|
95
|
+
- Oxlint failures preserve stdout config errors alongside stderr warnings and bound command diagnostics without echoing file arguments. Health-worker shutdown waits briefly for child cleanup before forced termination.
|
|
96
|
+
- Generator selection prompts reject an empty choices list before opening terminal input; indexed reads retain their validated bounds under stricter compiler checks.
|
|
97
|
+
- Framework HTTP/2 servers start with default shutdown options and track sessions even without HTTP/1 idle-connection support. Graceful HTTP/2 drains close sessions after active streams finish without setting forbidden connection headers. SSE and stream helpers omit HTTP/1 framing headers on HTTP/2.
|
|
98
|
+
- Both sse() and stream() ignore caller Content-Length, Transfer-Encoding, Content-Type, Connection, Keep-Alive, Proxy-Connection and Upgrade option headers. HTTP/1.1 retains chunked framing and reusable connections; HTTP/1.0 remains close-delimited without Transfer-Encoding.
|
|
99
|
+
- Generated Vitest configuration discovers both `.test.ts` and `.spec.ts`, including notification controller specs. Existing apps should use `include: ["src/app/**/*.{test,spec}.ts"]`.
|
|
100
|
+
- Source health-check workers start on Node.js 22.15 through a JavaScript bootstrap and tsx's import API; passing a `.ts` entry directly to a worker could fail before its loader hook ran. Published `.mjs` workers keep their direct startup path.
|
|
101
|
+
- The cache-backed rate limiter supplies its per-window TTL on every atomic increment, so a key that expires after the create-only seed cannot be recreated without an expiry.
|
|
102
|
+
- The CLI rejects unsupported Node versions with one clear message and a non-zero exit before loading the published entry or registering the source loader.
|
|
103
|
+
- Image-variant cache sweeps remove writer temporaries left by a crashed write once they are an hour old, and remove a generation's `source.json` and then its empty directory (after a five-minute grace, never through a symlink) once its derivatives are gone, so object-storage generations no longer pile up when ETags change. Scheduled checks skip the cache walk while the estimate is within budget and nothing has expired; the first check after boot and one per `maxCacheAge` still walk.
|
|
104
|
+
- A cache directory or disk root that cannot be resolved (`ENOTDIR`, `EACCES`, `ELOOP`) now throws `ImageVariantsConfigError`, with the original error as its `cause`, instead of the raw file-system error. The cache-overlap guard remembers its result per cache, disk root and configured local roots instead of resolving every path on each variant request; a newly registered disk is checked again.
|
|
105
|
+
- Dev-server Oxlint checks no longer abort a boot scan on one over-long path: it runs in its own batch and, if the OS still refuses it, only that file is reported as unchecked. Batches count each argument's `argv` pointer on POSIX, hold at most 500 files, and a batch whose report overflows the output buffer is split and retried. Shutdown sends SIGKILL 250 ms after SIGTERM to a CLI child that ignores it, and an interrupted check reports a cancellation instead of a 30-second timeout.
|
|
106
|
+
|
|
107
|
+
### Changed
|
|
108
|
+
|
|
109
|
+
- `warlock dev` exits with code 1 and a clear error when it is started on Bun or Deno: the development server is Node-only. Before, it started partway and then failed in confusing ways. The error names the runtime and points to the production start commands. `warlock build` on Bun or Deno still runs, but prints a notice that only the Node build is verified.
|
|
110
|
+
- A source checkout of `@warlock.js/core` run by a runtime without `module.registerHooks` now prints what is missing, instead of failing with "registerHooks is not a function".
|
|
111
|
+
- Static file serving loads `@fastify/static` on the first file request instead of at boot, including existing public folders and `router.directory` mounts. The directory globber loads at boot only for `wildcard: false`. Concurrent first requests share initialization; upstream headers, ranges, listings, decorators and exact routes for `wildcard: false` are preserved.
|
|
112
|
+
- Request-log privacy rules (`http.logging.private`) are prepared once per configured array instead of on every log snapshot: each string prefix is normalised a single time, and a regex rule's need for a fresh copy (global or sticky flags) is decided once. Setting a new array applies its rules; editing the existing array in place is no longer picked up. The logging docs and `configure-app` skill now also say that a route pattern containing a `%` that does not decode withholds body and query on every request to that route.
|
|
113
|
+
- **BREAKING:** Node.js 22.15 or newer is required (`engines.node: ">=22.15"`): the `warlock` CLI loads TypeScript through `module.registerHooks`, which Node added in 22.15. `warlock upgrade --from 5.30 --to 5.31.0` raises the app's `engines.node`, `.nvmrc` and `.node-version` (codemod `node-22-15`).
|
|
114
|
+
|
|
115
|
+
## 5.30.0 - 2026-10-16
|
|
116
|
+
|
|
117
|
+
### Upgrading
|
|
118
|
+
|
|
119
|
+
- **BREAKING (only for a custom log channel that reads `context.request` or `context.response`):** request log entries now carry a plain `RequestLogSnapshot` instead of the `Request`/`Response` instances. Read the fields you need from the snapshot, or call `request.toLogSnapshot()` in your own log calls. `warlock upgrade --from 5.29 --to 5.31.0` rewrites the reads that have a snapshot field and lists the rest (codemod `request-log-snapshot`).
|
|
120
|
+
- **The image-variant cache moves to a new layout:** derivatives cached by 5.29 under `<cacheDirectory>/<2 hex>/<hash>.<ext>` are no longer read; each is re-rendered on its next request. Delete those old two-level files once (or call `purgeImageVariants()`) to reclaim the space.
|
|
121
|
+
|
|
122
|
+
### Added
|
|
123
|
+
|
|
124
|
+
- **`request.signal`**: an `AbortSignal` that aborts when the client disconnects before the response finishes (not when the request body finishes reading, never on normal completion); its listener is attached on first access and removed when the response closes.
|
|
125
|
+
- **Stream backpressure**: `response.stream()`'s controller gains `write(data)` (sends, then waits until the client can take more; `false` once it is gone), `drain()`, `backpressured`, `signal` (aborted on client disconnect, not on `end()`) and `onDisconnect(fn)`, matching `response.sse()`.
|
|
126
|
+
- **SSE backpressure**: `sse.write(event, data, id?)` sends and waits until the client can take more (`false` once it is gone), plus `sse.drain()`, `sse.backpressured` and `sse.signal` (aborted on disconnect).
|
|
127
|
+
- **`http.serverOptions` is typed** (`HttpServerOptions`), including Node's native `http` options such as `serverOptions.http.maxHeaderSize`; it was already forwarded to Fastify but the config type could not express it.
|
|
128
|
+
- **`@warlock.js/core/errors`**: a side-effect-free subpath with `HttpError` and its subclasses (`BadRequestError`, `ResourceNotFoundError`, …). A standalone helper or worker can import it without bundling Cascade, Cache or the MongoDB driver; the classes are the same ones the root exports, so `instanceof` holds across both.
|
|
129
|
+
- **`http.errorMapper`**: map errors that are not an `HttpError` to `{ status, message?, payload? }` (or an `HttpError`), so domain errors shared with non-HTTP processes need not extend Core. A mapped 5xx stays opaque unless the mapper sets a message; a mapper that throws is logged and ignored.
|
|
130
|
+
- **Per-route request logging policy**: `logging: { body?: boolean, query?: boolean }` on a route, with app-wide defaults under `http.logging` (plus `redactQueryParams`). It is applied before any log entry is built, so a schema- or middleware-rejected body never reaches a log channel.
|
|
131
|
+
- **`request.toLogSnapshot()`**, `buildRequestLogSnapshot()` and `redactUrlCredentials()`: the bounded, plain-data view of a request that log entries now carry.
|
|
132
|
+
- **`purgeImageVariants(path?, { disk? })`** removes one file's cached image derivatives, or a disk's whole derivative cache.
|
|
133
|
+
- **`createUploadedFileController({ disk })`** serves the originals and variants of any local disk, and **`resolveImageVariant({ disk?, path, variant, format? })`** resolves (and renders on a miss) one variant for an app's own route, e.g. a private disk behind auth. `uploadedFileController` is `createUploadedFileController()`.
|
|
134
|
+
- **Shared rate limits:** `http.rateLimit.store: "cache"` counts in `@warlock.js/cache`, so every process on a shared driver (Redis, Postgres) shares the limit; `middleware.rateLimit()` follows it or takes its own `store` and a stable `name`. A `@fastify/rate-limit` store class can be passed as `store` too. Windows are fixed and clock-aligned. Each route with its own `rateLimit` counts separately (namespaced by method and URL from the plugin's `routeInfo`, hashed so `/users/:id` and `/users/id` never merge). A cache outage fails open on both limiters (`skipOnError` defaults to `true` for this store) and is logged at most once a minute. The `null` and `file` cache drivers are refused with `UnsupportedRateLimitDriverError` (one stores nothing, the other never sweeps expired windows and does not share increments between processes).
|
|
135
|
+
|
|
136
|
+
### Changed
|
|
137
|
+
|
|
138
|
+
- **`response.stream()` no longer keeps rendered chunks.** `response.body` after `end()` holds the last `retainChunks` chunks written by `send()`, `write()` or `render()` (`response.stream(type, { retainChunks })`, default 0); it used to hold every `render()` chunk.
|
|
139
|
+
- `response.stream()`: after the client disconnects, `send()`/`render()` are silent no-ops and `ended` is `true` (they used to write to the closed socket); `send()` after `end()` still throws.
|
|
140
|
+
- **`@fastify/static` is only loaded when there is something to serve** — at least one `router.directory()`, or an existing public folder (`storage.publicRoot`, which now also accepts `false` to turn it off). Its directory-listing module calls `os.cpus()` at load, which cost a measured ~0.4–0.5 s of cold start in an app that served neither. With no public folder, `reply.sendFile` is no longer decorated by that plugin; `response.sendFile()` is unaffected.
|
|
141
|
+
- `@warlock.js/core/errors` also resolves inside the framework repository (a root `errors/index.ts` re-export, not published), so workspace packages and tests can import it by its package name.
|
|
142
|
+
- **`response.sse()` no longer keeps every sent event.** `response.body` after `end()` holds the last `retainEvents` events (`response.sse({ retainEvents })`, default 0), so long-lived streams no longer grow with their history.
|
|
143
|
+
- **BREAKING (only for a custom log channel that reads `context.request`/`context.response`):** **request log entries carry a `RequestLogSnapshot`, not the `Request`/`Response` instances** (`context.request` is `{ id, method, url, route, name, ip, userAgent, query?, body? }`; `response.log` adds `{ statusCode }`). Native request/reply graphs no longer reach log channels, and credential-bearing query values (`secret`, `token`, `apiKey`, `signature`, `code`, `X-Amz-*`, …) are masked in the logged URL. `warlock upgrade --from 5.29 --to 5.31.0` applies the mechanical part (codemod `request-log-snapshot`).
|
|
144
|
+
- **`warlock add notifications` writes a smaller, convention-following module**: `models/notification/` (model with a `NotificationResource`, migration), `resources/`, a validated `schema/list-notifications.schema.ts` (`limit` capped at 50, no `request.all()`), a guarded `types/notifications-request.type.ts`, `services/`, `utils/locales.json`, one controller per file for list / unread-count / mark-read / mark-all-read registered through `router.route()`, a commented `gate()` permission hook, and a 401 spec per controller when the app has the test feature. The clear-all and delete endpoints are no longer generated. Apps that already have a notification model (5.29 layout included) are skipped, and a freshly ejected `config/notifications.ts` then imports the 5.29 model path. In an app that already has `src/app/notifications`, no second model or migration is added, existing files are kept (and listed), and `notFound` is merged into an existing `utils/locales.json`. The mark-read controller turns a numeric `:id` into a number (integer ids on the default MongoDB stack) and keeps other ids as strings; the list query drops unknown keys such as a cache-busting `_` instead of rejecting them.
|
|
145
|
+
- Image derivatives are cached per source (`<cacheDirectory>/<2 hex>/<sourceKey>/<size-mtime>/<hash>.<ext>`). Deleting or moving a file through a local disk (`delete`, `deleteMany`, `move`, and `deleteDirectory` for every file under it) removes its derivatives, and a rewritten source's old derivatives are pruned once a new one is written, so the cache no longer grows forever. Pruning re-checks the source first, so a request that read an older version never deletes the newer version's derivatives, and a derivative pruned mid-request is rendered again instead of answering 500.
|
|
146
|
+
- Concurrent variant requests for the same file on two disks (a mirror copied with its mtime) no longer share one generation, which left the second target unwritten and answered 500.
|
|
147
|
+
- A warning is logged once when the image-variant cache sits inside the public folder: a configured `uploads.images.cacheDirectory` is shared by every local disk, so private derivatives there would be publicly served.
|
|
148
|
+
- `storage.use(name)` (and `StorageManagerContract.use`) is typed as `ScopedStorage`, the class it returns, so `deleteDirectory`, `copyDirectory`, `moveDirectory`, `emptyDirectory`, `putFromUrl`, `prepend` and `append` type-check without a cast.
|
|
149
|
+
- `middleware.rateLimit()` returns an async middleware (its in-memory path still completes synchronously).
|
|
150
|
+
- The `run-app` skill lists where each pnpm version reads build approvals (`allowBuilds` on 10.26+, workspace `onlyBuiltDependencies` on 10.5–10.25, `package.json` before 10.5); it used to say only `allowBuilds` works.
|
|
151
|
+
|
|
152
|
+
### Fixed
|
|
153
|
+
|
|
154
|
+
- Graceful shutdown no longer waits out its timeout on keep-alive connections whose request finished during the drain: in-flight responses answer `Connection: close` and connections are closed as they go idle (default `forceCloseConnections: "idle"`), so later connectors still shut down. Active responses are never cut short.
|
|
155
|
+
- A `response.sse()` or `response.stream()` started after graceful shutdown began keeps the drain's `Connection: close`; its own `Connection: keep-alive` used to override it and hold `close()` until the shutdown timeout.
|
|
156
|
+
- `response.sse()` removes line breaks and NUL from event names and ids, and writes a multi-line `comment()` as one comment line per line, so values built from user input cannot inject SSE fields or events.
|
|
157
|
+
- An `onDisconnect` handler on `response.sse()` or `response.stream()` that throws is logged and no longer crashes the process or skips the handlers after it.
|
|
158
|
+
- `warlock.config.ts` loads when it imports local TypeScript without an extension (`./src/connectors/local`) or through a tsconfig `paths` alias, on Node without native TypeScript and with native type stripping alike. The fallback bundles the config's local graph with esbuild, keeps packages external (one `BaseConnector`/container identity), runs the config once, rethrows its own errors unchanged, keeps each inlined module's `import.meta.url`, and removes its temp file.
|
|
159
|
+
- `v.file()` rule methods (`maxSize`, `image`, `accept`, `mimeType`, …) return `this`, so the `UploadedFile` output type survives the chain; `saveTo()` is typed as a `string` output.
|
|
160
|
+
- The dev server and the HTTP test server register module `src/app/<module>/utils/locales.json` dictionaries at boot; they were left out of the boot file set, so `t()` printed raw keys until the file was edited.
|
|
161
|
+
- The HTTP test server no longer keeps Vitest's main process alive after teardown: the loader-hook `MessagePort` is unreferenced except while a version-bump flush waits for its acknowledgement.
|
|
162
|
+
- A quoted config key (`"machine-thumb"`, `'single-quoted'`) is written to `.warlock/typings/config.d.ts` without its quotes, so the generated file stays valid TypeScript; computed keys are skipped, and a quoted storage driver name is no longer quoted twice. The typings manifest now records its generator version, and a manifest written by an older version is discarded, so a `config.d.ts` broken by 5.29 is regenerated on the first boot after upgrading instead of only when a config file changes.
|
|
163
|
+
- The circular-dependency check no longer reports a file as importing itself because a comment mentions `import("./same-file")`: the regex fallback ignores comments and self imports are not dependency edges. Comments are found with the TypeScript parser, so a regex literal such as `/\/*$/` or `//` inside JSX text is never mistaken for one and the imports after it are kept. A pure `export type { X } from` re-export adds no dependency edge on either parsing path.
|
|
164
|
+
- `warlock add web`'s `src/web/root.tsx` stub notes that `<Head />` renders the viewport tag (`metadata.viewport` changes or disables it) and does not hand-write a second one.
|
|
165
|
+
- Mail logs no longer print recipient addresses: send, development, test-mode, partial-rejection and error lines show `m***@example.com`. `MailResult` and a thrown `MailError` still carry the real addresses.
|
|
166
|
+
- `http.rateLimit` had no way to share counts between processes except an ioredis client, which the node-redis connection of `@warlock.js/cache` cannot provide.
|
|
167
|
+
- Request log snapshots mask credential query parameters (`code`, `signature`, `sig`, `X-Amz-*`, `X-Goog-*`, the logger's secret keys and `http.logging.redactQueryParams`) in the parsed `query` too, not only in `url`; OAuth authorization codes no longer reach log lines. New `redactQueryCredentials()`.
|
|
168
|
+
- `warlock.config.ts` fallback: a catch-all tsconfig `paths` pattern (`"*": ["./types/*"]`) no longer inlines packages into the config bundle; an alias is inlined only when it resolves outside `node_modules`.
|
|
169
|
+
- `warlock.config.ts` fallback: `import.meta.url`/`dirname`/`filename` are replaced only where they are real expressions, so the same words inside a string or comment no longer break or alter the bundled config.
|
|
170
|
+
- `warlock.config.ts` fallback runs only for the config's own unresolved relative or aliased imports (not for a package that is not installed, or a module missing inside `node_modules`), and also when native type stripping refuses the TypeScript (`ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`, `ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING`). A loading error in the bundled config names `warlock.config.ts` instead of the temporary module.
|
|
171
|
+
- `warlock add image` on pnpm 9 and 10.0–10.4 no longer creates a settings-only `pnpm-workspace.yaml` (`packages field missing or empty`): the sharp approval goes where the installed pnpm reads it (`package.json` `pnpm.onlyBuiltDependencies` before 10.5, the workspace's `onlyBuiltDependencies` on 10.5–10.25, `allowBuilds` from 10.26). Inside a parent pnpm workspace no per-app file is written.
|
|
172
|
+
|
|
9
173
|
## 5.29.0 - 2026-10-01
|
|
10
174
|
|
|
11
175
|
### Added
|
|
12
176
|
|
|
13
|
-
- **`nullable(Resource)`**: a resource that may be `null`, accepted as a `defineResource` field and in `responseSchema` bodies. A field outputs `null` (not omitted) for null/undefined input; `ResourceOutput`/`ResponseBodyOutput` type it as `Output | null`; OpenAPI documents it as `oneOf [resource, null]`; route types emit `… | null
|
|
14
|
-
- **`[Resource]` list fields in `defineResource`**: each item is mapped through the resource, `[]` stays `[]`, and the output type is an array (the same syntax `responseSchema` already accepts). Plain `Resource` fields behave as before
|
|
177
|
+
- **`nullable(Resource)`**: a resource that may be `null`, accepted as a `defineResource` field and in `responseSchema` bodies. A field outputs `null` (not omitted) for null/undefined input; `ResourceOutput`/`ResponseBodyOutput` type it as `Output | null`; OpenAPI documents it as `oneOf [resource, null]`; route types emit `… | null`.
|
|
178
|
+
- **`[Resource]` list fields in `defineResource`**: each item is mapped through the resource, `[]` stays `[]`, and the output type is an array (the same syntax `responseSchema` already accepts). Plain `Resource` fields behave as before.
|
|
15
179
|
|
|
16
180
|
### Fixed
|
|
17
181
|
|
|
@@ -603,14 +767,14 @@ _Released in lockstep with the `@warlock.js/*` family; no package-specific chang
|
|
|
603
767
|
verbatim and live, and its failure summary now reports whether a cause actually arrived:
|
|
604
768
|
`the cause is printed above, in the application's own output` when output was seen, and
|
|
605
769
|
`no output was captured from the application process — its cause did not reach this
|
|
606
|
-
terminal` when none was. It previously pointed at "above" unconditionally, which on a
|
|
770
|
+
terminal` when none was. It previously pointed at "above" unconditionally, which on a
|
|
607
771
|
silent child meant pointing at an empty terminal
|
|
608
772
|
|
|
609
773
|
- **The HTTP connector now preflights its port before binding.** `warlock dev` and
|
|
610
774
|
`warlock start` both go through `HttpConnector.start()`, which now calls
|
|
611
775
|
`assertPortIsAvailable(port, host)` immediately before `listen()`. A collision now
|
|
612
776
|
surfaces as `EADDRINUSE: Port <port> is already in use on <host>. Stop the dev server
|
|
613
|
-
(or whatever else is listening on port <port>) and run again...` — the code and the
|
|
777
|
+
(or whatever else is listening on port <port>) and run again...` — the code and the
|
|
614
778
|
port named in the same sentence — instead of a bare `EADDRINUSE` thrown from inside
|
|
615
779
|
Fastify with no indication of which port it meant. `EACCES` on the port is treated
|
|
616
780
|
the same way, since "cannot bind" is one problem from the operator's side. The test
|
package/README.md
CHANGED
|
@@ -12,36 +12,41 @@ yarn create warlock my-backend-app
|
|
|
12
12
|
|
|
13
13
|
`@warlock.js/core` bundles the runtime primitives an application boots on:
|
|
14
14
|
|
|
15
|
-
| Primitive
|
|
16
|
-
|
|
|
17
|
-
| Application
|
|
18
|
-
| HTTP + router
|
|
19
|
-
| Middleware
|
|
20
|
-
| Storage
|
|
21
|
-
| Repositories
|
|
22
|
-
| Use-cases
|
|
23
|
-
| Validation
|
|
24
|
-
| Mail
|
|
25
|
-
| Cache
|
|
26
|
-
| Socket
|
|
27
|
-
| Dev-server
|
|
28
|
-
| CLI
|
|
15
|
+
| Primitive | What it does |
|
|
16
|
+
| ------------- | ------------------------------------------------------------------------- |
|
|
17
|
+
| Application | Boot/shutdown lifecycle, boot hooks, health & readiness endpoints |
|
|
18
|
+
| HTTP + router | Fastify-backed server, route groups, RESTful resource routes |
|
|
19
|
+
| Middleware | Request pipeline guards and transformers |
|
|
20
|
+
| Storage | Disk-contained local + remote file storage |
|
|
21
|
+
| Repositories | Cached query layer over Cascade models |
|
|
22
|
+
| Use-cases | Composable application services with history |
|
|
23
|
+
| Validation | Framework validators (file, database rules) layered on `@warlock.js/seal` |
|
|
24
|
+
| Mail | Mail sending and templating |
|
|
25
|
+
| Cache | Application cache facade |
|
|
26
|
+
| Socket | Real-time socket layer |
|
|
27
|
+
| Dev-server | `warlock dev` with type generation and update notices |
|
|
28
|
+
| CLI | `warlock` generators, migrations, and project commands |
|
|
29
29
|
|
|
30
30
|
## Optional peer dependencies
|
|
31
31
|
|
|
32
32
|
Core keeps these as **optional** peers — install a package only when you use the
|
|
33
33
|
feature that needs it:
|
|
34
34
|
|
|
35
|
-
| Install
|
|
36
|
-
|
|
|
37
|
-
| `sharp`
|
|
38
|
-
| `socket.io`
|
|
39
|
-
| `nodemailer`
|
|
40
|
-
| `@aws-sdk/client-s3` + `@aws-sdk/lib-storage` + `@aws-sdk/s3-request-presigner`
|
|
41
|
-
| `@aws-sdk/client-sesv2`
|
|
42
|
-
| `react` + `react-dom` + `@react-email/render`
|
|
43
|
-
| `@warlock.js/herald`
|
|
35
|
+
| Install | Needed for |
|
|
36
|
+
| ------------------------------------------------------------------------------- | ----------------------------------- |
|
|
37
|
+
| `sharp` | image processing / resizing |
|
|
38
|
+
| `socket.io` | the socket layer |
|
|
39
|
+
| `nodemailer` | sending mail |
|
|
40
|
+
| `@aws-sdk/client-s3` + `@aws-sdk/lib-storage` + `@aws-sdk/s3-request-presigner` | S3 storage driver + presigned URLs |
|
|
41
|
+
| `@aws-sdk/client-sesv2` | the AWS SES mail driver |
|
|
42
|
+
| `react` + `react-dom` + `@react-email/render` | React Email templates |
|
|
43
|
+
| `@warlock.js/herald` | the Herald message-broker connector |
|
|
44
44
|
|
|
45
45
|
## Documentation
|
|
46
46
|
|
|
47
47
|
Full documentation is available at the [official documentation](https://warlock.js.org).
|
|
48
|
+
|
|
49
|
+
For an application moving from 5.29, use the shipped
|
|
50
|
+
[upgrade skill](skills/upgrade-from-5-29/SKILL.md). It covers logger delivery,
|
|
51
|
+
tool concurrency, request-log snapshots, counters, derivative caches and viewport
|
|
52
|
+
metadata, with an additional checklist for 5.31's runtime and Seal changes.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The TypeScript `load` hook `bin/warlock.js` registers when `@warlock.js/core`
|
|
3
|
+
* runs from source (no `esm/` build next to the bin).
|
|
4
|
+
*
|
|
5
|
+
* It runs on Node's loader worker thread (`module.register()`), not in the
|
|
6
|
+
* main thread (`module.registerHooks()`), and that placement is the fix for a
|
|
7
|
+
* real crash, not a style choice. On Node 22.15, an in-thread `load` hook makes
|
|
8
|
+
* the ESM loader hand every imported CommonJS file its source, which puts that
|
|
9
|
+
* file in `require.cache` while the module graph is still being linked but
|
|
10
|
+
* before it has run. A CommonJS package that `require()`s the same file in
|
|
11
|
+
* that window gets its empty, unfilled `exports` object instead of the real
|
|
12
|
+
* value. Core's own graph has exactly that shape: the scheduler imports
|
|
13
|
+
* `dayjs/plugin/utc.js` and `dayjs/plugin/timezone.js`, and
|
|
14
|
+
* `@mongez/time-wizard` `require()`s both, so every booting command
|
|
15
|
+
* (`doctor`, `inspect`, `mcp`, `routes`) died in `bootstrap()` with
|
|
16
|
+
* `TypeError: t is not a function` from `dayjs.extend`. Node 26.3 does not
|
|
17
|
+
* have the defect; a worker-thread hook does not trigger it on either.
|
|
18
|
+
*
|
|
19
|
+
* Non-TypeScript URLs (npm `.js`, `node:` builtins, JSON) fall through to the
|
|
20
|
+
* next loader untouched. When the dev server registers its own loader later,
|
|
21
|
+
* that loader's hooks run before this one (later registrations run first), so
|
|
22
|
+
* it owns the TypeScript path from then on and this hook is never reached for
|
|
23
|
+
* a `.ts` file again.
|
|
24
|
+
*/
|
|
25
|
+
import { readFileSync } from "node:fs";
|
|
26
|
+
import { fileURLToPath } from "node:url";
|
|
27
|
+
import { transformSync } from "esbuild";
|
|
28
|
+
|
|
29
|
+
const TS_FILE = /\.(ts|tsx|mts|cts)$/;
|
|
30
|
+
const VERSION_QUERY = /\?v=\d+$/;
|
|
31
|
+
|
|
32
|
+
/** Set by `initialize()` from the `data` the bin passes to `register()`. */
|
|
33
|
+
let transpileOptions = { target: "node22", tsconfigRaw: "{}" };
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Receive the transpile options from the main thread.
|
|
37
|
+
*
|
|
38
|
+
* @param {{ target: string, tsconfigRaw: string }} data
|
|
39
|
+
*/
|
|
40
|
+
export function initialize(data) {
|
|
41
|
+
transpileOptions = data;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Transpile TypeScript with esbuild; pass everything else down the chain.
|
|
46
|
+
*/
|
|
47
|
+
export async function load(url, context, nextLoad) {
|
|
48
|
+
const cleanUrl = url.replace(VERSION_QUERY, "");
|
|
49
|
+
|
|
50
|
+
if (!TS_FILE.test(cleanUrl)) return nextLoad(url, context);
|
|
51
|
+
|
|
52
|
+
const absolutePath = fileURLToPath(cleanUrl);
|
|
53
|
+
const { code } = transformSync(readFileSync(absolutePath, "utf8"), {
|
|
54
|
+
loader: absolutePath.endsWith(".tsx") ? "tsx" : "ts",
|
|
55
|
+
format: "esm",
|
|
56
|
+
target: transpileOptions.target,
|
|
57
|
+
sourcefile: absolutePath,
|
|
58
|
+
sourcemap: "inline",
|
|
59
|
+
tsconfigRaw: transpileOptions.tsconfigRaw,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
return { format: "module", source: code, shortCircuit: true };
|
|
63
|
+
}
|
package/bin/warlock.js
CHANGED
|
@@ -4,6 +4,41 @@ import { existsSync } from "node:fs";
|
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
6
6
|
|
|
7
|
+
const [nodeMajor, nodeMinor] = process.versions.node.split(".").map(Number);
|
|
8
|
+
if (nodeMajor < 22 || (nodeMajor === 22 && nodeMinor < 15)) {
|
|
9
|
+
console.error(`[warlock] requires Node 22.15 or newer (running ${process.versions.node}).`);
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Bun and Deno report the Node version they emulate in `process.versions.node`
|
|
14
|
+
// and add their own entry, so the check above passes on both. `warlock dev` is
|
|
15
|
+
// the one command that cannot run there (it is built on Node's module loader
|
|
16
|
+
// hooks), and it is refused here, before anything loads, so the refusal reads
|
|
17
|
+
// the same whether the CLI runs from published output or from source. The
|
|
18
|
+
// `dev` command repeats this check for callers that bypass this file.
|
|
19
|
+
const foreignRuntimeName = process.versions.bun
|
|
20
|
+
? "Bun"
|
|
21
|
+
: process.versions.deno
|
|
22
|
+
? "Deno"
|
|
23
|
+
: undefined;
|
|
24
|
+
|
|
25
|
+
if (foreignRuntimeName && process.argv[2] === "dev") {
|
|
26
|
+
const foreignRuntime = `${foreignRuntimeName} ${process.versions.bun ?? process.versions.deno}`;
|
|
27
|
+
const start = process.versions.bun ? "bun dist/app.js" : "deno run -A dist/app.js";
|
|
28
|
+
|
|
29
|
+
console.error(
|
|
30
|
+
[
|
|
31
|
+
`✖ warlock dev runs on Node.js only — this process is ${foreignRuntime}.`,
|
|
32
|
+
" The development server compiles TypeScript and hot-reloads modules through Node's module loader hooks.",
|
|
33
|
+
" Run it with Node.js 22.15 or newer: npx warlock dev",
|
|
34
|
+
` ${foreignRuntimeName} can run the production build: build it with Node (npx warlock build),`,
|
|
35
|
+
` then start it with ${start}.`,
|
|
36
|
+
" Supported runtimes: https://warlock.js.org/v/latest/core/digging-deeper/supported-runtimes/",
|
|
37
|
+
].join("\n"),
|
|
38
|
+
);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
|
|
7
42
|
const binDir = path.dirname(fileURLToPath(import.meta.url));
|
|
8
43
|
|
|
9
44
|
/**
|
|
@@ -49,8 +84,19 @@ async function bootFromSource() {
|
|
|
49
84
|
}
|
|
50
85
|
|
|
51
86
|
const { registerHooks } = await import("node:module");
|
|
52
|
-
|
|
53
|
-
|
|
87
|
+
|
|
88
|
+
// Bun has no `module.registerHooks`. Only a source checkout reaches this
|
|
89
|
+
// path (published packages ship compiled output), so say what is missing
|
|
90
|
+
// instead of failing on "registerHooks is not a function".
|
|
91
|
+
if (typeof registerHooks !== "function") {
|
|
92
|
+
console.error(
|
|
93
|
+
"[warlock] Running @warlock.js/core from TypeScript source needs Node's module.registerHooks " +
|
|
94
|
+
"(Node 22.15 or newer); this runtime does not provide it. Use Node, or install the published package.",
|
|
95
|
+
);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const { register } = await import("node:module");
|
|
54
100
|
const { getTsconfig, resolvePathAlias } = await import("get-tsconfig");
|
|
55
101
|
|
|
56
102
|
// Same target the dev loader and the production builder pin, so a file
|
|
@@ -58,8 +104,6 @@ async function bootFromSource() {
|
|
|
58
104
|
// get anywhere else in the toolchain. Drifting from it would make the CLI a
|
|
59
105
|
// third, subtly different dialect.
|
|
60
106
|
const TRANSPILE_TARGET = "node22";
|
|
61
|
-
const TS_FILE = /\.(ts|tsx|mts|cts)$/;
|
|
62
|
-
const VERSION_QUERY = /\?v=\d+$/;
|
|
63
107
|
|
|
64
108
|
// Read from cwd, not from core: `jsx`, `experimentalDecorators` and friends
|
|
65
109
|
// are the *app's* call, and this is the same source of truth the dev
|
|
@@ -70,59 +114,44 @@ async function bootFromSource() {
|
|
|
70
114
|
});
|
|
71
115
|
|
|
72
116
|
/**
|
|
73
|
-
* Handover switch
|
|
74
|
-
* `register()` worker hooks and
|
|
75
|
-
*
|
|
76
|
-
* `.ts` first and short-circuit
|
|
77
|
-
*
|
|
117
|
+
* Handover switch for the in-thread `resolve` hook below. Verified
|
|
118
|
+
* behaviour: in-thread hooks run *before* `register()` worker hooks and
|
|
119
|
+
* delegate down the chain, so once the dev server registers its own loader
|
|
120
|
+
* this hook would still resolve every `.ts` first and short-circuit,
|
|
121
|
+
* bypassing the dev loader's `?v=N` HMR stamping.
|
|
78
122
|
*
|
|
79
|
-
* Setting `active = false` makes
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
123
|
+
* Setting `active = false` makes it a pure pass-through. `registerLoader()`
|
|
124
|
+
* should flip it just before it calls `register()`; until it does, this
|
|
125
|
+
* hook stays in charge, which is the correct default for every non-dev
|
|
126
|
+
* command. (The `load` hook needs no switch: it is a worker hook, and the
|
|
127
|
+
* dev loader's worker hooks, registered later, run before it.)
|
|
83
128
|
*/
|
|
84
129
|
const bootstrapLoader = { active: true };
|
|
85
130
|
globalThis.__warlockBootstrapLoader = bootstrapLoader;
|
|
86
131
|
|
|
87
132
|
/**
|
|
88
|
-
* `load` hook
|
|
89
|
-
* `register()
|
|
90
|
-
*
|
|
133
|
+
* `load` hook — transpiles TypeScript with esbuild. It runs on Node's
|
|
134
|
+
* loader worker thread (`register()`), NOT in this thread
|
|
135
|
+
* (`registerHooks()`): on Node 22.15 an in-thread `load` hook makes a
|
|
136
|
+
* CommonJS package that `require()`s a file which an ES module also imports
|
|
137
|
+
* receive that file's empty, not-yet-run `exports`, which crashed every
|
|
138
|
+
* booting command inside `dayjs.extend`. See `source-load-hook.mjs`.
|
|
91
139
|
*/
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
// Not TypeScript → not ours. npm `.js`, `node:`, JSON all fall through.
|
|
96
|
-
if (!bootstrapLoader.active || !TS_FILE.test(cleanUrl)) return nextLoad(url, context);
|
|
97
|
-
|
|
98
|
-
const absolutePath = fileURLToPath(cleanUrl);
|
|
99
|
-
const { code } = transformSync(readFileSync(absolutePath, "utf8"), {
|
|
100
|
-
loader: absolutePath.endsWith(".tsx") ? "tsx" : "ts",
|
|
101
|
-
format: "esm",
|
|
102
|
-
target: TRANSPILE_TARGET,
|
|
103
|
-
sourcefile: absolutePath,
|
|
104
|
-
sourcemap: "inline",
|
|
105
|
-
tsconfigRaw,
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
return { format: "module", source: code, shortCircuit: true };
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
registerHooks({ load });
|
|
140
|
+
register(pathToFileURL(path.join(binDir, "source-load-hook.mjs")).href, {
|
|
141
|
+
data: { target: TRANSPILE_TARGET, tsconfigRaw },
|
|
142
|
+
});
|
|
112
143
|
|
|
113
144
|
// Stage 2 — the reuse. With `load` live, core's own resolver can be pulled
|
|
114
145
|
// in as TypeScript. It is imported by exact absolute path on purpose: it is
|
|
115
146
|
// a leaf module whose only import is `node:url`, so it needs no extension
|
|
116
147
|
// probing to load, which is precisely the thing we don't have yet.
|
|
117
|
-
const { ownResolve } = await import(
|
|
118
|
-
pathToFileURL(
|
|
119
|
-
path.join(binDir, "..", "src", "dev-server", "loader", "own-resolver.ts"),
|
|
120
|
-
).href
|
|
148
|
+
const { ownResolve, probeFile } = await import(
|
|
149
|
+
pathToFileURL(path.join(binDir, "..", "src", "dev-server", "loader", "own-resolver.ts")).href
|
|
121
150
|
);
|
|
122
151
|
|
|
123
152
|
let pathsMatcher = null;
|
|
124
153
|
if (tsconfig) {
|
|
125
|
-
pathsMatcher = specifier => resolvePathAlias(tsconfig, specifier);
|
|
154
|
+
pathsMatcher = (specifier) => resolvePathAlias(tsconfig, specifier);
|
|
126
155
|
}
|
|
127
156
|
|
|
128
157
|
/**
|
|
@@ -131,6 +160,14 @@ async function bootFromSource() {
|
|
|
131
160
|
* `null` for (bare npm, `node:`, `file:`) falls through to Node's default,
|
|
132
161
|
* which keeps `exports`/`node_modules` semantics intact.
|
|
133
162
|
*
|
|
163
|
+
* One fallback on top: a bare subpath of a package consumed as source, such
|
|
164
|
+
* as `@warlock.js/core/net` (imported by `@warlock.js/ai`). Core declares no
|
|
165
|
+
* `exports` map in source form, so Node's default resolver lands on the
|
|
166
|
+
* `net/` directory and refuses it (`ERR_UNSUPPORTED_DIR_IMPORT`); the
|
|
167
|
+
* published package maps the subpath to its built entry instead. The
|
|
168
|
+
* directory's `index.ts` is what TypeScript and vitest resolve the same
|
|
169
|
+
* specifier to, so that is what this resolves it to as well.
|
|
170
|
+
*
|
|
134
171
|
* The dev loader's version of this also stamps `?v=N` for HMR. That is
|
|
135
172
|
* deliberately absent: the CLI process has no watcher, and the dev server
|
|
136
173
|
* registers its own full loader when it boots.
|
|
@@ -143,7 +180,30 @@ async function bootFromSource() {
|
|
|
143
180
|
// Producing the URL ourselves means `nextResolve` was never called, so the
|
|
144
181
|
// chain has to be short-circuited explicitly or Node raises
|
|
145
182
|
// ERR_LOADER_CHAIN_INCOMPLETE.
|
|
146
|
-
|
|
183
|
+
if (owned) return { url: owned, shortCircuit: true };
|
|
184
|
+
|
|
185
|
+
try {
|
|
186
|
+
return nextResolve(specifier, context);
|
|
187
|
+
} catch (error) {
|
|
188
|
+
const index = bootstrapLoader.active ? directoryIndexOf(error) : null;
|
|
189
|
+
|
|
190
|
+
if (index) return { url: index, shortCircuit: true };
|
|
191
|
+
|
|
192
|
+
throw error;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* The `index.ts` (or `.tsx`/`.js`/`.jsx`) inside the directory Node refused
|
|
198
|
+
* to import, as a `file:` URL, or `null` when the error is anything else.
|
|
199
|
+
*/
|
|
200
|
+
function directoryIndexOf(error) {
|
|
201
|
+
if (error?.code !== "ERR_UNSUPPORTED_DIR_IMPORT" || typeof error.url !== "string") return null;
|
|
202
|
+
|
|
203
|
+
const directory = fileURLToPath(error.url).replace(/\\/g, "/").replace(/\/$/, "");
|
|
204
|
+
const hit = probeFile(`${directory}/index`, existsSync);
|
|
205
|
+
|
|
206
|
+
return hit ? pathToFileURL(hit).href : null;
|
|
147
207
|
}
|
|
148
208
|
|
|
149
209
|
registerHooks({ resolve });
|
|
@@ -3,7 +3,7 @@ import { DataSource } from "@warlock.js/cascade";
|
|
|
3
3
|
import { FastifyInstance } from "fastify";
|
|
4
4
|
import { Server } from "socket.io";
|
|
5
5
|
|
|
6
|
-
//#region
|
|
6
|
+
//#region ../../packages/core/src/application/app.d.ts
|
|
7
7
|
type RuntimeApplication = {
|
|
8
8
|
socket: Server | undefined;
|
|
9
9
|
http: FastifyInstance | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"app.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/application/app.ts"],"mappings":";;;;;;KAMK,kBAAA;EACH,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,eAAA;EACN,MAAA,EAAQ,MAAA;EACR,QAAA,EAAU,UAAA;AAAA;AAAA,cAGC,GAAA,EAAK,kBAkCjB"}
|