@warlock.js/core 5.30.0 → 5.32.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 +165 -36
- 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 +3 -3
- package/esm/application/app.d.mts.map +1 -1
- package/esm/application/application-config-types.d.mts +1 -2
- package/esm/application/application-config-types.d.mts.map +1 -1
- package/esm/application/application.d.mts +5 -7
- package/esm/application/application.d.mts.map +1 -1
- package/esm/application/application.mjs +3 -1
- package/esm/application/application.mjs.map +1 -1
- package/esm/application/boot-signal.d.mts +14 -12
- package/esm/application/boot-signal.d.mts.map +1 -1
- package/esm/application/index.d.mts +2 -1
- package/esm/application/index.mjs +1 -1
- package/esm/application/public-url.d.mts +1 -2
- package/esm/application/public-url.d.mts.map +1 -1
- package/esm/application/roles.d.mts +10 -11
- package/esm/application/roles.d.mts.map +1 -1
- package/esm/benchmark/benchmark-snapshots.d.mts +1 -3
- package/esm/benchmark/benchmark-snapshots.d.mts.map +1 -1
- package/esm/benchmark/benchmark.d.mts +1 -3
- package/esm/benchmark/benchmark.d.mts.map +1 -1
- package/esm/benchmark/channels/console.channel.d.mts +1 -3
- package/esm/benchmark/channels/console.channel.d.mts.map +1 -1
- package/esm/benchmark/channels/noop.channel.d.mts +1 -3
- package/esm/benchmark/channels/noop.channel.d.mts.map +1 -1
- package/esm/benchmark/index.mjs +1 -1
- package/esm/benchmark/profiler.d.mts +1 -3
- package/esm/benchmark/profiler.d.mts.map +1 -1
- package/esm/benchmark/profiler.mjs +2 -1
- package/esm/benchmark/profiler.mjs.map +1 -1
- package/esm/benchmark/types.d.mts +22 -17
- package/esm/benchmark/types.d.mts.map +1 -1
- package/esm/bootstrap/setup.d.mts +1 -2
- package/esm/bootstrap/setup.d.mts.map +1 -1
- package/esm/bootstrap.d.mts +1 -2
- package/esm/bootstrap.d.mts.map +1 -1
- package/esm/cache/database-cache-driver.d.mts +3 -5
- package/esm/cache/database-cache-driver.d.mts.map +1 -1
- package/esm/cache/database-cache-driver.mjs +1 -1
- package/esm/cache/index.d.mts +2 -1
- package/esm/cache/index.mjs +1 -1
- package/esm/cli/cli-commands.manager.mjs +6 -3
- package/esm/cli/cli-commands.manager.mjs.map +1 -1
- package/esm/cli/commands/add.command.mjs +4 -2
- package/esm/cli/commands/add.command.mjs.map +1 -1
- package/esm/cli/commands/agents-md/agents-md-command.action.mjs +70 -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 +6 -1
- 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/dev-server.command.mjs +12 -3
- package/esm/cli/commands/dev-server.command.mjs.map +1 -1
- package/esm/cli/commands/doctor/boot-for-diagnostics.mjs +8 -3
- package/esm/cli/commands/doctor/boot-for-diagnostics.mjs.map +1 -1
- package/esm/cli/commands/doctor/check.types.d.mts +89 -0
- package/esm/cli/commands/doctor/check.types.d.mts.map +1 -0
- package/esm/cli/commands/doctor/checks/config.check.mjs +1 -0
- package/esm/cli/commands/doctor/checks/config.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/connectors.check.mjs +2 -0
- package/esm/cli/commands/doctor/checks/connectors.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/handler-signature.check.mjs +1 -0
- package/esm/cli/commands/doctor/checks/handler-signature.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/health.check.mjs +3 -0
- package/esm/cli/commands/doctor/checks/health.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs +1 -0
- package/esm/cli/commands/doctor/checks/jwt-secret.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs +23 -27
- package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/optional-peers.check.mjs +1 -0
- package/esm/cli/commands/doctor/checks/optional-peers.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs +4 -0
- package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/checks/routes.check.mjs +3 -0
- package/esm/cli/commands/doctor/checks/routes.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/doctor-command.action.mjs +15 -6
- package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -1
- package/esm/cli/commands/doctor/format-report.mjs +30 -2
- package/esm/cli/commands/doctor/format-report.mjs.map +1 -1
- package/esm/cli/commands/doctor.command.mjs +4 -0
- package/esm/cli/commands/doctor.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 +124 -124
- package/esm/cli/commands/generate/generate.command.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/controller.generator.mjs +5 -2
- package/esm/cli/commands/generate/generators/controller.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/endpoint.generator.mjs +313 -0
- package/esm/cli/commands/generate/generators/endpoint.generator.mjs.map +1 -0
- package/esm/cli/commands/generate/generators/migration.generator.mjs +1 -1
- package/esm/cli/commands/generate/generators/migration.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/model.generator.mjs +4 -3
- package/esm/cli/commands/generate/generators/model.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/repository.generator.mjs +3 -1
- package/esm/cli/commands/generate/generators/repository.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/resource.generator.mjs +3 -1
- package/esm/cli/commands/generate/generators/resource.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/service.generator.mjs +3 -1
- package/esm/cli/commands/generate/generators/service.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 +19 -6
- package/esm/cli/commands/generate/templates/stubs.mjs.map +1 -1
- package/esm/cli/commands/generate/utils/endpoint-schema.mjs +136 -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/prompt.mjs.map +1 -1
- package/esm/cli/commands/generate/utils/writer.mjs +38 -13
- package/esm/cli/commands/generate/utils/writer.mjs.map +1 -1
- package/esm/cli/commands/inspect/inspect-command.action.mjs +73 -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/issue/collect-environment.mjs +187 -0
- package/esm/cli/commands/issue/collect-environment.mjs.map +1 -0
- package/esm/cli/commands/issue/issue-command.action.mjs +70 -0
- package/esm/cli/commands/issue/issue-command.action.mjs.map +1 -0
- package/esm/cli/commands/issue.command.mjs +31 -0
- package/esm/cli/commands/issue.command.mjs.map +1 -0
- package/esm/cli/commands/mcp/mcp-command.action.mjs +104 -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/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.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.map +1 -1
- package/esm/cli/commands/routes/format-routes-table.mjs +1 -1
- package/esm/cli/commands/routes/route-row.mjs +1 -1
- package/esm/cli/commands/routes/routes-diff.action.mjs +3 -3
- package/esm/cli/commands/routes/routes-diff.action.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/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/flush-and-exit.mjs +34 -0
- package/esm/cli/flush-and-exit.mjs.map +1 -0
- package/esm/cli/framework-cli-commands.mjs +25 -1
- package/esm/cli/framework-cli-commands.mjs.map +1 -1
- package/esm/cli/parse-cli-args.mjs +3 -2
- package/esm/cli/parse-cli-args.mjs.map +1 -1
- package/esm/cli/start.d.mts +1 -1
- package/esm/cli/string-similarity.mjs +1 -1
- package/esm/commands/cli-command.d.mts +2 -4
- package/esm/commands/cli-command.d.mts.map +1 -1
- package/esm/commands/index.d.mts +2 -1
- package/esm/commands/index.mjs +1 -1
- package/esm/commands/types.d.mts +8 -8
- package/esm/commands/types.d.mts.map +1 -1
- package/esm/config/config-getter.d.mts +2 -3
- package/esm/config/config-getter.d.mts.map +1 -1
- package/esm/config/config-getter.mjs +5 -5
- package/esm/config/config-getter.mjs.map +1 -1
- package/esm/config/config-handlers.d.mts +1 -3
- package/esm/config/config-handlers.d.mts.map +1 -1
- package/esm/config/config-loader.d.mts +1 -2
- 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-schema.d.mts +70 -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 +2 -4
- package/esm/config/config-setter.d.mts.map +1 -1
- package/esm/config/config-setter.mjs +2 -2
- package/esm/config/config-setter.mjs.map +1 -1
- package/esm/config/config-special-handlers.d.mts +2 -4
- package/esm/config/config-special-handlers.d.mts.map +1 -1
- package/esm/config/index.d.mts +7 -0
- package/esm/config/index.mjs +2 -1
- package/esm/config/types.d.mts +4 -5
- package/esm/config/types.d.mts.map +1 -1
- package/esm/connectors/access-connector.d.mts +1 -3
- package/esm/connectors/access-connector.d.mts.map +1 -1
- package/esm/connectors/access-connector.mjs +2 -2
- package/esm/connectors/access-connector.mjs.map +1 -1
- package/esm/connectors/ai-connector.d.mts +1 -3
- package/esm/connectors/ai-connector.d.mts.map +1 -1
- package/esm/connectors/ai-connector.mjs +2 -2
- package/esm/connectors/ai-connector.mjs.map +1 -1
- package/esm/connectors/assert-no-reserved-connector-names.d.mts +1 -3
- package/esm/connectors/assert-no-reserved-connector-names.d.mts.map +1 -1
- package/esm/connectors/assert-no-reserved-connector-names.mjs +2 -1
- package/esm/connectors/assert-no-reserved-connector-names.mjs.map +1 -1
- package/esm/connectors/assert-unique-connector-names.d.mts +1 -3
- package/esm/connectors/assert-unique-connector-names.d.mts.map +1 -1
- package/esm/connectors/assert-unique-connector-names.mjs +26 -1
- package/esm/connectors/assert-unique-connector-names.mjs.map +1 -1
- package/esm/connectors/base-connector.d.mts +1 -3
- package/esm/connectors/base-connector.d.mts.map +1 -1
- package/esm/connectors/cache-connector.d.mts +1 -3
- package/esm/connectors/cache-connector.d.mts.map +1 -1
- package/esm/connectors/cache-connector.mjs +3 -3
- package/esm/connectors/cache-connector.mjs.map +1 -1
- package/esm/connectors/connectors-manager.d.mts +2 -4
- 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 -3
- package/esm/connectors/database-connector.d.mts.map +1 -1
- package/esm/connectors/database-connector.mjs +2 -2
- package/esm/connectors/database-connector.mjs.map +1 -1
- package/esm/connectors/describe-server-address.mjs +4 -4
- package/esm/connectors/describe-server-address.mjs.map +1 -1
- package/esm/connectors/herald-connector.d.mts +1 -3
- package/esm/connectors/herald-connector.d.mts.map +1 -1
- package/esm/connectors/herald-connector.mjs +2 -2
- package/esm/connectors/herald-connector.mjs.map +1 -1
- package/esm/connectors/http-connector.d.mts +1 -3
- package/esm/connectors/http-connector.d.mts.map +1 -1
- package/esm/connectors/http-connector.mjs +11 -9
- package/esm/connectors/http-connector.mjs.map +1 -1
- package/esm/connectors/index.d.mts +2 -1
- package/esm/connectors/index.mjs +1 -1
- package/esm/connectors/logger-connector.d.mts +1 -3
- package/esm/connectors/logger-connector.d.mts.map +1 -1
- package/esm/connectors/logger-connector.mjs +2 -2
- package/esm/connectors/logger-connector.mjs.map +1 -1
- package/esm/connectors/mail-connector.d.mts +1 -3
- package/esm/connectors/mail-connector.d.mts.map +1 -1
- package/esm/connectors/mail-connector.mjs +2 -2
- package/esm/connectors/mail-connector.mjs.map +1 -1
- package/esm/connectors/notifications-connector.d.mts +1 -3
- package/esm/connectors/notifications-connector.d.mts.map +1 -1
- package/esm/connectors/notifications-connector.mjs +2 -2
- package/esm/connectors/notifications-connector.mjs.map +1 -1
- package/esm/connectors/register-configured-connectors.d.mts +2 -4
- package/esm/connectors/register-configured-connectors.d.mts.map +1 -1
- package/esm/connectors/single-server-warnings.mjs.map +1 -1
- package/esm/connectors/socket-connector.d.mts +1 -3
- package/esm/connectors/socket-connector.d.mts.map +1 -1
- package/esm/connectors/socket-connector.mjs +12 -10
- package/esm/connectors/socket-connector.mjs.map +1 -1
- package/esm/connectors/storage.connector.d.mts +1 -3
- package/esm/connectors/storage.connector.d.mts.map +1 -1
- package/esm/connectors/storage.connector.mjs +2 -2
- package/esm/connectors/storage.connector.mjs.map +1 -1
- package/esm/connectors/types.d.mts +17 -14
- package/esm/connectors/types.d.mts.map +1 -1
- package/esm/container/container-instance-registry.mjs.map +1 -1
- package/esm/container/development-app-modules.d.mts +7 -5
- package/esm/container/development-app-modules.d.mts.map +1 -1
- package/esm/container/development-model-modules.d.mts +6 -5
- package/esm/container/development-model-modules.d.mts.map +1 -1
- package/esm/container/index.d.mts +4 -4
- package/esm/container/index.d.mts.map +1 -1
- package/esm/container/index.mjs.map +1 -1
- package/esm/database/index.d.mts +3 -1
- package/esm/database/index.mjs +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 +2 -31
- package/esm/database/models/database-log/database-log.d.mts.map +1 -1
- package/esm/database/models/database-log/index.d.mts +2 -1
- package/esm/database/models/database-log/index.mjs +1 -1
- package/esm/database/seed-command-action.mjs +1 -1
- package/esm/database/seeds/seeder.d.mts +2 -4
- package/esm/database/seeds/seeder.d.mts.map +1 -1
- package/esm/database/seeds/seeder.errors.d.mts +6 -3
- package/esm/database/seeds/seeder.errors.d.mts.map +1 -1
- package/esm/database/seeds/seeder.errors.mjs +2 -0
- package/esm/database/seeds/seeder.errors.mjs.map +1 -1
- package/esm/database/seeds/seeders.manager.mjs +2 -1
- package/esm/database/seeds/seeders.manager.mjs.map +1 -1
- package/esm/database/seeds/types.d.mts +7 -8
- package/esm/database/seeds/types.d.mts.map +1 -1
- package/esm/database/utils.d.mts +4 -5
- package/esm/database/utils.d.mts.map +1 -1
- package/esm/dev-server/app-module-registry.mjs +1 -1
- package/esm/dev-server/boot-precondition-error.mjs +1 -0
- package/esm/dev-server/boot-precondition-error.mjs.map +1 -1
- package/esm/dev-server/create-worker.mjs +17 -9
- package/esm/dev-server/create-worker.mjs.map +1 -1
- package/esm/dev-server/dependency-graph.d.mts +1 -3
- 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.map +1 -1
- package/esm/dev-server/development-server.mjs +8 -0
- package/esm/dev-server/development-server.mjs.map +1 -1
- package/esm/dev-server/extract-translation-keys.mjs +16 -17
- package/esm/dev-server/extract-translation-keys.mjs.map +1 -1
- package/esm/dev-server/file-manager.d.mts +3 -7
- package/esm/dev-server/file-manager.d.mts.map +1 -1
- package/esm/dev-server/file-operations.d.mts +1 -3
- package/esm/dev-server/file-operations.d.mts.map +1 -1
- package/esm/dev-server/files-orchestrator.mjs +4 -5
- package/esm/dev-server/files-orchestrator.mjs.map +1 -1
- package/esm/dev-server/files-watcher.mjs +12 -11
- package/esm/dev-server/files-watcher.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs +2 -3
- 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 +36 -115
- 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 +12 -6
- 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 +2 -2
- package/esm/dev-server/health-checker/file-health-result.d.mts.map +1 -1
- package/esm/dev-server/health-checker/files-healthcare.manager.mjs +16 -4
- package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
- package/esm/dev-server/health-checker/oxlint-runner.mjs +303 -0
- package/esm/dev-server/health-checker/oxlint-runner.mjs.map +1 -0
- package/esm/dev-server/health-checker/workers/eslint-health.worker.d.mts +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.d.mts +1 -1
- package/esm/dev-server/health-checker/workers/ts-health.worker.mjs +40 -174
- package/esm/dev-server/health-checker/workers/ts-health.worker.mjs.map +1 -1
- package/esm/dev-server/loader/hook-thread.d.mts +4 -8
- package/esm/dev-server/loader/hook-thread.d.mts.map +1 -1
- package/esm/dev-server/loader/load-hook.d.mts +10 -6
- package/esm/dev-server/loader/load-hook.d.mts.map +1 -1
- package/esm/dev-server/loader/load-hook.mjs +4 -3
- package/esm/dev-server/loader/load-hook.mjs.map +1 -1
- package/esm/dev-server/loader/loader-port-acks.mjs +1 -1
- package/esm/dev-server/loader/loader-port-acks.mjs.map +1 -1
- package/esm/dev-server/loader/own-resolver.mjs +1 -1
- package/esm/dev-server/loader/register-loader.mjs +4 -3
- package/esm/dev-server/loader/register-loader.mjs.map +1 -1
- package/esm/dev-server/loader/resolve-hook.d.mts +2 -2
- package/esm/dev-server/loader/resolve-hook.d.mts.map +1 -1
- package/esm/dev-server/loader/resolve-hook.mjs +3 -2
- package/esm/dev-server/loader/resolve-hook.mjs.map +1 -1
- package/esm/dev-server/loader/transpile-cache.mjs +3 -2
- package/esm/dev-server/loader/transpile-cache.mjs.map +1 -1
- package/esm/dev-server/manifest-manager.d.mts +1 -3
- package/esm/dev-server/manifest-manager.d.mts.map +1 -1
- package/esm/dev-server/model-module-registry.mjs +3 -3
- package/esm/dev-server/model-module-registry.mjs.map +1 -1
- package/esm/dev-server/model-resource-typings.mjs +40 -47
- package/esm/dev-server/model-resource-typings.mjs.map +1 -1
- package/esm/dev-server/module-loader.mjs +3 -2
- package/esm/dev-server/module-loader.mjs.map +1 -1
- package/esm/dev-server/package-json-manager.mjs +1 -1
- package/esm/dev-server/parse-imports.mjs +7 -39
- package/esm/dev-server/parse-imports.mjs.map +1 -1
- package/esm/dev-server/read-config-ast.mjs +3 -33
- package/esm/dev-server/read-config-ast.mjs.map +1 -1
- package/esm/dev-server/ready-block.mjs +1 -1
- package/esm/dev-server/route-types-publisher.mjs +1 -1
- package/esm/dev-server/shortcuts.mjs +1 -1
- package/esm/dev-server/special-files-collector.d.mts +2 -4
- package/esm/dev-server/special-files-collector.d.mts.map +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/translation-keys-sources.mjs +1 -1
- package/esm/dev-server/translation-keys-sources.mjs.map +1 -1
- package/esm/dev-server/tsconfig-manager.mjs +3 -3
- package/esm/dev-server/tsconfig-manager.mjs.map +1 -1
- package/esm/dev-server/type-generator.mjs +31 -38
- package/esm/dev-server/type-generator.mjs.map +1 -1
- package/esm/dev-server/types.d.mts +3 -4
- package/esm/dev-server/types.d.mts.map +1 -1
- package/esm/dev-server/update-check-cache.mjs +2 -2
- package/esm/dev-server/update-check-cache.mjs.map +1 -1
- package/esm/encryption/encrypt.d.mts +2 -3
- package/esm/encryption/encrypt.d.mts.map +1 -1
- package/esm/encryption/hash.d.mts +1 -2
- package/esm/encryption/hash.d.mts.map +1 -1
- package/esm/encryption/index.mjs +1 -1
- package/esm/encryption/password.d.mts +2 -3
- package/esm/encryption/password.d.mts.map +1 -1
- package/esm/encryption/types.d.mts +2 -3
- package/esm/encryption/types.d.mts.map +1 -1
- package/esm/errors/container-key-missing-error.mjs +1 -0
- package/esm/errors/container-key-missing-error.mjs.map +1 -1
- package/esm/errors/error-codes.d.mts +660 -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 +1 -0
- package/esm/errors/esbuild-binary-missing-error.mjs.map +1 -1
- package/esm/errors/index.d.mts +3 -1
- package/esm/errors/index.mjs +3 -1
- package/esm/errors/unknown-locale-error.mjs +1 -0
- package/esm/errors/unknown-locale-error.mjs.map +1 -1
- package/esm/errors/warlock-error.d.mts +21 -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 +22 -5
- package/esm/generations/add-command.action.mjs.map +1 -1
- package/esm/generations/features/access.feature.mjs +1 -1
- package/esm/generations/features/access.feature.mjs.map +1 -1
- package/esm/generations/features/bull-board.feature.mjs +3 -2
- package/esm/generations/features/bull-board.feature.mjs.map +1 -1
- package/esm/generations/features/mysql.feature.mjs.map +1 -1
- package/esm/generations/features/notifications.feature.mjs +7 -3
- package/esm/generations/features/notifications.feature.mjs.map +1 -1
- package/esm/generations/features/queue.feature.mjs +1 -1
- package/esm/generations/features/queue.feature.mjs.map +1 -1
- package/esm/generations/features/react-email.feature.mjs +1 -1
- package/esm/generations/features/react-email.feature.mjs.map +1 -1
- package/esm/generations/features/shadcn.feature.mjs +1 -1
- package/esm/generations/features/shadcn.feature.mjs.map +1 -1
- package/esm/generations/features/shared/link-ai-package-import.mjs +1 -1
- package/esm/generations/features/shared/link-ai-package-import.mjs.map +1 -1
- package/esm/generations/features/shared/merge-web-sitemap-config.mjs +16 -23
- package/esm/generations/features/shared/merge-web-sitemap-config.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/sitemap.feature.mjs +3 -2
- package/esm/generations/features/sitemap.feature.mjs.map +1 -1
- package/esm/generations/features/tailwind.feature.mjs +1 -1
- package/esm/generations/features/tailwind.feature.mjs.map +1 -1
- package/esm/generations/features/test.feature.mjs +11 -6
- package/esm/generations/features/test.feature.mjs.map +1 -1
- package/esm/generations/features/web.feature.mjs +1 -1
- 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/stubs.mjs +156 -14
- package/esm/generations/stubs.mjs.map +1 -1
- package/esm/http/boot-port-preflight.d.mts +4 -5
- package/esm/http/boot-port-preflight.d.mts.map +1 -1
- package/esm/http/boot-port-preflight.mjs +2 -2
- 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 +2 -2
- package/esm/http/build-cors-options.mjs.map +1 -1
- package/esm/http/build-rate-limit-options.d.mts +15 -3
- package/esm/http/build-rate-limit-options.d.mts.map +1 -1
- package/esm/http/build-rate-limit-options.mjs +1 -1
- package/esm/http/build-rate-limit-options.mjs.map +1 -1
- package/esm/http/conditional-request.d.mts +87 -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 +2 -4
- package/esm/http/config.d.mts.map +1 -1
- package/esm/http/config.mjs +2 -2
- package/esm/http/config.mjs.map +1 -1
- package/esm/http/context/request-context.d.mts +6 -7
- package/esm/http/context/request-context.d.mts.map +1 -1
- package/esm/http/context/request-memo.d.mts +1 -2
- package/esm/http/context/request-memo.d.mts.map +1 -1
- package/esm/http/createHttpApplication.d.mts +2 -3
- package/esm/http/createHttpApplication.d.mts.map +1 -1
- package/esm/http/createHttpApplication.mjs +2 -2
- package/esm/http/createHttpApplication.mjs.map +1 -1
- package/esm/http/csp.d.mts +12 -12
- package/esm/http/csp.d.mts.map +1 -1
- package/esm/http/csp.mjs +3 -2
- package/esm/http/csp.mjs.map +1 -1
- package/esm/http/csrf-default-guard.d.mts +2 -4
- 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 +7 -9
- package/esm/http/csrf-origin-policy.d.mts.map +1 -1
- package/esm/http/csrf-origin-policy.mjs +2 -2
- package/esm/http/csrf-origin-policy.mjs.map +1 -1
- package/esm/http/database/RequestLog.d.mts +26 -87
- package/esm/http/database/RequestLog.d.mts.map +1 -1
- package/esm/http/error-codes.d.mts +1 -2
- package/esm/http/error-codes.d.mts.map +1 -1
- package/esm/http/error-mapper.d.mts +2 -4
- package/esm/http/error-mapper.d.mts.map +1 -1
- package/esm/http/error-mapper.mjs +2 -2
- package/esm/http/error-mapper.mjs.map +1 -1
- package/esm/http/errors/errors.d.mts +30 -29
- package/esm/http/errors/errors.d.mts.map +1 -1
- package/esm/http/errors/errors.mjs +1 -0
- package/esm/http/errors/errors.mjs.map +1 -1
- package/esm/http/escape-header-value.d.mts +17 -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 +2 -4
- package/esm/http/events.d.mts.map +1 -1
- package/esm/http/flush-pending-cookies.mjs.map +1 -1
- package/esm/http/health.d.mts +4 -4
- package/esm/http/health.d.mts.map +1 -1
- package/esm/http/index.d.mts +9 -3
- package/esm/http/index.mjs +5 -2
- 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 +2 -4
- package/esm/http/middleware/cache-response-middleware.d.mts.map +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.d.mts +3 -3
- package/esm/http/middleware/concurrency-limit.middleware.d.mts.map +1 -1
- package/esm/http/middleware/idempotency.middleware.d.mts +3 -3
- package/esm/http/middleware/idempotency.middleware.d.mts.map +1 -1
- package/esm/http/middleware/idempotency.middleware.mjs +6 -6
- package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
- package/esm/http/middleware/index.d.mts +3 -1
- package/esm/http/middleware/index.mjs +1 -1
- package/esm/http/middleware/inject-request-context.d.mts +2 -4
- package/esm/http/middleware/inject-request-context.d.mts.map +1 -1
- package/esm/http/middleware/inject-request-context.mjs +3 -3
- package/esm/http/middleware/inject-request-context.mjs.map +1 -1
- package/esm/http/middleware/ip-filter.middleware.d.mts +3 -3
- package/esm/http/middleware/ip-filter.middleware.d.mts.map +1 -1
- package/esm/http/middleware/maintenance.middleware.d.mts +3 -3
- package/esm/http/middleware/maintenance.middleware.d.mts.map +1 -1
- package/esm/http/middleware/maintenance.middleware.mjs +4 -4
- package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
- package/esm/http/middleware/max-body-size.middleware.d.mts +2 -2
- package/esm/http/middleware/max-body-size.middleware.d.mts.map +1 -1
- package/esm/http/middleware/middleware-list.d.mts +1 -3
- package/esm/http/middleware/middleware-list.d.mts.map +1 -1
- package/esm/http/middleware/rate-limit.middleware.d.mts +3 -3
- package/esm/http/middleware/rate-limit.middleware.d.mts.map +1 -1
- package/esm/http/middleware/rate-limit.middleware.mjs +2 -2
- package/esm/http/middleware/rate-limit.middleware.mjs.map +1 -1
- package/esm/http/middleware/utils/cidr-match.d.mts +2 -3
- package/esm/http/middleware/utils/cidr-match.d.mts.map +1 -1
- package/esm/http/middleware/utils/idempotency-key.d.mts +3 -5
- package/esm/http/middleware/utils/idempotency-key.d.mts.map +1 -1
- package/esm/http/middleware/utils/index.d.mts +2 -1
- package/esm/http/middleware/utils/parse-size.d.mts +1 -2
- package/esm/http/middleware/utils/parse-size.d.mts.map +1 -1
- package/esm/http/middleware/utils/parse-size.mjs +2 -2
- package/esm/http/middleware/utils/parse-size.mjs.map +1 -1
- package/esm/http/plugins.d.mts +2 -4
- package/esm/http/plugins.d.mts.map +1 -1
- package/esm/http/plugins.mjs +17 -14
- package/esm/http/plugins.mjs.map +1 -1
- package/esm/http/port-preflight.d.mts +3 -4
- package/esm/http/port-preflight.d.mts.map +1 -1
- package/esm/http/rate-limit-cache-store.mjs +6 -4
- package/esm/http/rate-limit-cache-store.mjs.map +1 -1
- package/esm/http/ready-report.d.mts +15 -10
- package/esm/http/ready-report.d.mts.map +1 -1
- package/esm/http/request-controller.d.mts +1 -3
- package/esm/http/request-controller.d.mts.map +1 -1
- package/esm/http/request-log-snapshot.d.mts +26 -15
- package/esm/http/request-log-snapshot.d.mts.map +1 -1
- package/esm/http/request-log-snapshot.mjs +85 -6
- package/esm/http/request-log-snapshot.mjs.map +1 -1
- package/esm/http/request.d.mts +6 -5
- package/esm/http/request.d.mts.map +1 -1
- package/esm/http/request.mjs +13 -11
- package/esm/http/request.mjs.map +1 -1
- package/esm/http/response.d.mts +23 -12
- package/esm/http/response.d.mts.map +1 -1
- package/esm/http/response.mjs +169 -81
- package/esm/http/response.mjs.map +1 -1
- package/esm/http/safe-redirect.d.mts +50 -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 +12 -13
- package/esm/http/serialized.d.mts.map +1 -1
- package/esm/http/server-rebuilt.d.mts +3 -5
- package/esm/http/server-rebuilt.d.mts.map +1 -1
- package/esm/http/server.d.mts +11 -9
- package/esm/http/server.d.mts.map +1 -1
- package/esm/http/server.mjs +17 -7
- package/esm/http/server.mjs.map +1 -1
- package/esm/http/stream-react-response.d.mts +7 -7
- package/esm/http/stream-react-response.d.mts.map +1 -1
- package/esm/http/stream-transport.mjs +4 -2
- package/esm/http/stream-transport.mjs.map +1 -1
- package/esm/http/tracing/index.mjs +1 -1
- package/esm/http/tracing/trace-id.d.mts +2 -3
- package/esm/http/tracing/trace-id.d.mts.map +1 -1
- package/esm/http/tracing/tracing-dispatcher.d.mts +10 -11
- package/esm/http/tracing/tracing-dispatcher.d.mts.map +1 -1
- package/esm/http/tracing/tracing-dispatcher.mjs +2 -2
- package/esm/http/tracing/tracing-dispatcher.mjs.map +1 -1
- package/esm/http/tracing/tracing.type.d.mts +11 -9
- package/esm/http/tracing/tracing.type.d.mts.map +1 -1
- package/esm/http/types.d.mts +78 -39
- package/esm/http/types.d.mts.map +1 -1
- package/esm/http/uploaded-file.d.mts +6 -5
- package/esm/http/uploaded-file.d.mts.map +1 -1
- package/esm/http/uploads/generate-image-variant.mjs +1 -1
- package/esm/http/uploads/generate-image-variants.d.mts +13 -10
- package/esm/http/uploads/generate-image-variants.d.mts.map +1 -1
- package/esm/http/uploads/generate-image-variants.mjs +62 -25
- 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 +72 -30
- package/esm/http/uploads/image-variant-cache.mjs.map +1 -1
- package/esm/http/uploads/image-variant-types.d.mts +9 -9
- package/esm/http/uploads/image-variant-types.d.mts.map +1 -1
- package/esm/http/uploads/image-variants-config-error.d.mts +4 -3
- package/esm/http/uploads/image-variants-config-error.d.mts.map +1 -1
- package/esm/http/uploads/image-variants-config-error.mjs +3 -2
- package/esm/http/uploads/image-variants-config-error.mjs.map +1 -1
- package/esm/http/uploads/index.d.mts +2 -1
- package/esm/http/uploads/index.mjs +1 -1
- package/esm/http/uploads/load-variant-source.mjs +1 -1
- package/esm/http/uploads/load-variant-source.mjs.map +1 -1
- 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 +9 -6
- package/esm/http/uploads/purge-image-variants.d.mts.map +1 -1
- package/esm/http/uploads/purge-image-variants.mjs +16 -16
- package/esm/http/uploads/purge-image-variants.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 +6 -9
- package/esm/http/uploads/resolve-image-variant.d.mts.map +1 -1
- package/esm/http/uploads/resolve-image-variant.mjs +10 -18
- package/esm/http/uploads/resolve-image-variant.mjs.map +1 -1
- package/esm/http/uploads/resolve-image-variants-config.mjs +7 -5
- package/esm/http/uploads/resolve-image-variants-config.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/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 +9 -6
- package/esm/http/uploads/uploaded-file.controller.d.mts.map +1 -1
- package/esm/http/uploads/uploaded-file.controller.mjs +18 -9
- package/esm/http/uploads/uploaded-file.controller.mjs.map +1 -1
- package/esm/http/uploads/variant-cache-key.mjs +2 -2
- package/esm/http/uploads-config.d.mts +2 -4
- package/esm/http/uploads-config.d.mts.map +1 -1
- package/esm/http/uploads-types.d.mts +22 -16
- package/esm/http/uploads-types.d.mts.map +1 -1
- package/esm/http/xmlable.d.mts +1 -2
- package/esm/http/xmlable.d.mts.map +1 -1
- package/esm/image/image.d.mts +6 -7
- package/esm/image/image.d.mts.map +1 -1
- package/esm/image/image.mjs.map +1 -1
- package/esm/image/index.d.mts +2 -1
- package/esm/image/index.mjs +1 -1
- package/esm/index.d.mts +38 -6
- package/esm/index.mjs +14 -3
- package/esm/loader/app-module-importer.d.mts +1 -2
- package/esm/loader/app-module-importer.d.mts.map +1 -1
- package/esm/localization/index.mjs +1 -1
- package/esm/localization/parse-locale-dictionary.d.mts +6 -5
- 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 +3 -4
- package/esm/localization/register-locale-dictionary.d.mts.map +1 -1
- package/esm/localization/register-locale-dictionary.mjs +2 -2
- package/esm/localization/register-locale-dictionary.mjs.map +1 -1
- package/esm/logger/fatal-visibility.d.mts +1 -2
- package/esm/logger/fatal-visibility.d.mts.map +1 -1
- package/esm/logger/index.d.mts +2 -1
- package/esm/logger/index.mjs +1 -1
- package/esm/logger/logger.d.mts +1 -3
- package/esm/logger/logger.d.mts.map +1 -1
- package/esm/logger/types.d.mts +2 -3
- package/esm/logger/types.d.mts.map +1 -1
- package/esm/mail/config.d.mts +21 -12
- package/esm/mail/config.d.mts.map +1 -1
- package/esm/mail/config.mjs +16 -1
- package/esm/mail/config.mjs.map +1 -1
- package/esm/mail/events.d.mts +4 -6
- package/esm/mail/events.d.mts.map +1 -1
- package/esm/mail/index.d.mts +3 -2
- package/esm/mail/index.mjs +2 -2
- package/esm/mail/mail.d.mts +1 -3
- package/esm/mail/mail.d.mts.map +1 -1
- package/esm/mail/mailer-pool.d.mts +5 -7
- package/esm/mail/mailer-pool.d.mts.map +1 -1
- package/esm/mail/react-mail.d.mts +1 -3
- package/esm/mail/react-mail.d.mts.map +1 -1
- package/esm/mail/send-mail.d.mts +1 -3
- package/esm/mail/send-mail.d.mts.map +1 -1
- package/esm/mail/send-mail.mjs +2 -1
- package/esm/mail/send-mail.mjs.map +1 -1
- package/esm/mail/test-mailbox.d.mts +11 -13
- package/esm/mail/test-mailbox.d.mts.map +1 -1
- package/esm/mail/types.d.mts +17 -18
- package/esm/mail/types.d.mts.map +1 -1
- package/esm/manifest/manifest-manager.mjs +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 +2 -4
- package/esm/openapi/build-openapi-document.d.mts.map +1 -1
- package/esm/openapi/build-openapi-document.mjs +8 -5
- package/esm/openapi/build-openapi-document.mjs.map +1 -1
- package/esm/openapi/cast-schema.mjs +1 -1
- package/esm/openapi/development-openapi-provider.d.mts +5 -6
- package/esm/openapi/development-openapi-provider.d.mts.map +1 -1
- package/esm/openapi/error-responses.mjs +28 -2
- package/esm/openapi/error-responses.mjs.map +1 -1
- package/esm/openapi/index.d.mts +3 -1
- package/esm/openapi/index.mjs +1 -1
- package/esm/openapi/openapi-child-output.mjs +2 -2
- package/esm/openapi/openapi-child-output.mjs.map +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.map +1 -1
- package/esm/openapi/postman/example-from-schema.d.mts +1 -3
- package/esm/openapi/postman/example-from-schema.d.mts.map +1 -1
- package/esm/openapi/postman/example-from-schema.mjs.map +1 -1
- package/esm/openapi/postman/index.d.mts +2 -1
- package/esm/openapi/postman/openapi-to-postman-collection.d.mts +3 -5
- package/esm/openapi/postman/openapi-to-postman-collection.d.mts.map +1 -1
- package/esm/openapi/postman/openapi-to-postman-collection.mjs.map +1 -1
- package/esm/openapi/postman/postman-types.d.mts +19 -18
- package/esm/openapi/postman/postman-types.d.mts.map +1 -1
- package/esm/openapi/postman/schema-refs.d.mts +1 -3
- package/esm/openapi/postman/schema-refs.d.mts.map +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.map +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.map +1 -1
- package/esm/openapi/security.mjs +1 -1
- package/esm/openapi/security.mjs.map +1 -1
- package/esm/openapi/types.d.mts +23 -20
- package/esm/openapi/types.d.mts.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-contributions.mjs +1 -1
- package/esm/production/bundle-framework-dependencies.mjs +1 -1
- package/esm/production/dist-build-manifest.mjs +1 -1
- package/esm/production/esbuild-plugins.mjs.map +1 -1
- package/esm/production/esbuild-preflight.mjs +1 -1
- package/esm/production/production-builder.mjs +14 -5
- package/esm/production/production-builder.mjs.map +1 -1
- package/esm/production/production-supervisor.mjs +1 -1
- package/esm/production/registration-child-runner.mjs +4 -3
- package/esm/production/registration-child-runner.mjs.map +1 -1
- package/esm/production/resolve-build-config.d.mts +4 -4
- 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.d.mts +1 -1
- package/esm/production/route-registration-child.mjs +8 -7
- package/esm/production/route-registration-child.mjs.map +1 -1
- package/esm/production/route-registration-snapshot.mjs.map +1 -1
- package/esm/production/tsconfig-path-aliases.mjs +1 -1
- package/esm/react/index.d.mts +1 -3
- package/esm/react/index.d.mts.map +1 -1
- package/esm/react/index.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.d.mts +3 -4
- package/esm/repositories/adapters/cascade/cascade-adapter.d.mts.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +2 -3
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
- package/esm/repositories/adapters/cascade/filter-applicator.mjs +10 -9
- package/esm/repositories/adapters/cascade/filter-applicator.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/index.d.mts +2 -1
- package/esm/repositories/adapters/cascade/index.mjs +1 -1
- package/esm/repositories/contracts/index.d.mts +2 -1
- package/esm/repositories/contracts/query-builder.contract.d.mts +4 -6
- package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
- package/esm/repositories/contracts/repository-adapter.contract.d.mts +1 -3
- package/esm/repositories/contracts/repository-adapter.contract.d.mts.map +1 -1
- package/esm/repositories/contracts/types.d.mts +23 -25
- package/esm/repositories/contracts/types.d.mts.map +1 -1
- package/esm/repositories/index.d.mts +4 -1
- package/esm/repositories/index.mjs +1 -1
- package/esm/repositories/repository.manager.d.mts +2 -3
- package/esm/repositories/repository.manager.d.mts.map +1 -1
- package/esm/repositories/repository.manager.mjs +2 -2
- package/esm/repositories/repository.manager.mjs.map +1 -1
- package/esm/resource/define-resource.d.mts +3 -5
- package/esm/resource/define-resource.d.mts.map +1 -1
- package/esm/resource/index.d.mts +2 -1
- package/esm/resource/index.mjs +1 -1
- package/esm/resource/nullable-resource.d.mts +5 -7
- package/esm/resource/nullable-resource.d.mts.map +1 -1
- package/esm/resource/register-resource.d.mts +1 -3
- package/esm/resource/register-resource.d.mts.map +1 -1
- package/esm/resource/resource-field-builder.d.mts +1 -3
- package/esm/resource/resource-field-builder.d.mts.map +1 -1
- package/esm/resource/resource.d.mts +3 -5
- package/esm/resource/resource.d.mts.map +1 -1
- package/esm/resource/resource.mjs +4 -2
- package/esm/resource/resource.mjs.map +1 -1
- package/esm/resource/types.d.mts +21 -21
- package/esm/resource/types.d.mts.map +1 -1
- package/esm/restful/index.d.mts +2 -1
- package/esm/restful/index.mjs +1 -1
- package/esm/restful/restful.d.mts +11 -31
- package/esm/restful/restful.d.mts.map +1 -1
- package/esm/restful/restful.mjs.map +1 -1
- package/esm/router/build-route-rate-limit.mjs.map +1 -1
- package/esm/router/dev-dispatch.mjs +31 -12
- package/esm/router/dev-dispatch.mjs.map +1 -1
- package/esm/router/index.d.mts +5 -2
- package/esm/router/index.mjs +3 -1
- package/esm/router/log-request-lifecycle.mjs.map +1 -1
- package/esm/router/named-api-routes-with-responses.mjs +2 -1
- package/esm/router/named-api-routes-with-responses.mjs.map +1 -1
- package/esm/router/normalize-request-path.d.mts +1 -2
- package/esm/router/normalize-request-path.d.mts.map +1 -1
- package/esm/router/normalize-route-path.d.mts +1 -2
- package/esm/router/normalize-route-path.d.mts.map +1 -1
- package/esm/router/positional-handler-diagnostics.d.mts +15 -13
- package/esm/router/positional-handler-diagnostics.d.mts.map +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/route-builder.d.mts +1 -3
- package/esm/router/route-builder.d.mts.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 +2 -3
- package/esm/router/route-name-method-suffix.d.mts.map +1 -1
- package/esm/router/route-name-taken-error.d.mts +12 -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 -3
- package/esm/router/route-registry.d.mts.map +1 -1
- package/esm/router/router.d.mts +34 -17
- package/esm/router/router.d.mts.map +1 -1
- package/esm/router/router.mjs +74 -39
- package/esm/router/router.mjs.map +1 -1
- package/esm/router/types.d.mts +156 -37
- package/esm/router/types.d.mts.map +1 -1
- package/esm/router/unguarded-route-diagnostics.d.mts +38 -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/index.d.mts +2 -1
- package/esm/socket/index.mjs +1 -1
- package/esm/socket/types.d.mts +2 -4
- package/esm/socket/types.d.mts.map +1 -1
- package/esm/socket/utils.d.mts +1 -3
- package/esm/socket/utils.d.mts.map +1 -1
- package/esm/storage/config.d.mts +4 -6
- package/esm/storage/config.d.mts.map +1 -1
- package/esm/storage/context/storage-driver-context.d.mts +3 -4
- package/esm/storage/context/storage-driver-context.d.mts.map +1 -1
- package/esm/storage/drivers/cloud-driver.d.mts +2 -4
- package/esm/storage/drivers/cloud-driver.d.mts.map +1 -1
- package/esm/storage/drivers/cloud-driver.mjs.map +1 -1
- package/esm/storage/drivers/do-spaces-driver.d.mts +1 -3
- package/esm/storage/drivers/do-spaces-driver.d.mts.map +1 -1
- package/esm/storage/drivers/local-driver.d.mts +2 -3
- package/esm/storage/drivers/local-driver.d.mts.map +1 -1
- package/esm/storage/drivers/local-driver.mjs +8 -3
- package/esm/storage/drivers/local-driver.mjs.map +1 -1
- package/esm/storage/drivers/r2-driver.d.mts +1 -3
- package/esm/storage/drivers/r2-driver.d.mts.map +1 -1
- package/esm/storage/drivers/s3-driver.d.mts +1 -3
- package/esm/storage/drivers/s3-driver.d.mts.map +1 -1
- package/esm/storage/index.d.mts +2 -1
- package/esm/storage/index.mjs +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 +2 -3
- package/esm/storage/scoped-storage.d.mts.map +1 -1
- package/esm/storage/storage-file.d.mts +1 -3
- package/esm/storage/storage-file.d.mts.map +1 -1
- package/esm/storage/storage.d.mts +17 -4
- package/esm/storage/storage.d.mts.map +1 -1
- package/esm/storage/storage.mjs +22 -0
- package/esm/storage/storage.mjs.map +1 -1
- package/esm/storage/types.d.mts +36 -36
- package/esm/storage/types.d.mts.map +1 -1
- package/esm/storage/utils/classify-ip-address.d.mts +1 -2
- package/esm/storage/utils/classify-ip-address.d.mts.map +1 -1
- package/esm/storage/utils/contain-path.d.mts +1 -2
- package/esm/storage/utils/contain-path.d.mts.map +1 -1
- package/esm/storage/utils/mime.d.mts +2 -3
- package/esm/storage/utils/mime.d.mts.map +1 -1
- package/esm/storage/utils/safe-fetch.d.mts +6 -6
- package/esm/storage/utils/safe-fetch.d.mts.map +1 -1
- package/esm/storage/utils/safe-fetch.mjs +3 -3
- package/esm/storage/utils/safe-fetch.mjs.map +1 -1
- package/esm/storage/utils/storage-capability-error.d.mts +1 -3
- package/esm/storage/utils/storage-capability-error.d.mts.map +1 -1
- package/esm/storage/utils/storage-error.d.mts +2 -3
- package/esm/storage/utils/storage-error.d.mts.map +1 -1
- package/esm/storage/utils/storage-not-initialized-error.d.mts +3 -2
- package/esm/storage/utils/storage-not-initialized-error.d.mts.map +1 -1
- package/esm/storage/utils/storage-not-initialized-error.mjs +1 -0
- package/esm/storage/utils/storage-not-initialized-error.mjs.map +1 -1
- package/esm/tests/authenticated-test-client.d.mts +31 -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 +74 -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 +34 -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 +37 -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 +12 -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 +23 -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 +9 -0
- package/esm/tests/fakes/index.mjs +10 -0
- package/esm/tests/fakes/mail-fake.d.mts +49 -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 +56 -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 +35 -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 +38 -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 +15 -2
- package/esm/tests/index.mjs +15 -2
- package/esm/tests/snapshot-response.d.mts +33 -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 +25 -5
- package/esm/tests/start-http-development-server.d.mts.map +1 -1
- package/esm/tests/start-http-development-server.mjs +41 -8
- package/esm/tests/start-http-development-server.mjs.map +1 -1
- package/esm/tests/test-connectors-selection.d.mts +2 -2
- package/esm/tests/test-connectors-selection.d.mts.map +1 -1
- package/esm/tests/test-connectors-selection.mjs +1 -1
- package/esm/tests/test-helpers.d.mts +28 -10
- package/esm/tests/test-helpers.d.mts.map +1 -1
- package/esm/tests/test-helpers.mjs +40 -27
- package/esm/tests/test-helpers.mjs.map +1 -1
- package/esm/tests/test-http-server.d.mts +66 -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/vitest-setup.d.mts +17 -7
- package/esm/tests/vitest-setup.d.mts.map +1 -1
- package/esm/tests/vitest-setup.mjs +12 -4
- package/esm/tests/vitest-setup.mjs.map +1 -1
- package/esm/tooling/agents-md/agents-md-markers.d.mts +26 -0
- package/esm/tooling/agents-md/agents-md-markers.d.mts.map +1 -0
- package/esm/tooling/agents-md/agents-md-markers.mjs +60 -0
- package/esm/tooling/agents-md/agents-md-markers.mjs.map +1 -0
- package/esm/tooling/agents-md/agents-md-refresher.d.mts +43 -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 +34 -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 +34 -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 +38 -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 +29 -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 +121 -0
- package/esm/tooling/board/board.d.mts.map +1 -0
- package/esm/tooling/board/board.mjs +407 -0
- package/esm/tooling/board/board.mjs.map +1 -0
- package/esm/tooling/board/board.types.d.mts +81 -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 +31 -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 +67 -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 +32 -0
- package/esm/tooling/check/conventions-step.d.mts.map +1 -0
- package/esm/tooling/check/conventions-step.mjs +173 -0
- package/esm/tooling/check/conventions-step.mjs.map +1 -0
- package/esm/tooling/check/environment-step.d.mts +16 -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.mjs +10 -0
- package/esm/tooling/check/lint-step.d.mts +18 -0
- package/esm/tooling/check/lint-step.d.mts.map +1 -0
- package/esm/tooling/check/lint-step.mjs +112 -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 +43 -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 +55 -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 +650 -0
- package/esm/tooling/check/security-conventions.mjs.map +1 -0
- package/esm/tooling/check/source-ast.mjs +155 -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 +33 -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 +43 -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 +100 -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 +90 -0
- package/esm/tooling/generate/generation.d.mts.map +1 -0
- package/esm/tooling/generate/generation.mjs +127 -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 +43 -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 +40 -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 +42 -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 +10 -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 +9 -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 +8 -0
- package/esm/tooling/inspect/index.mjs +7 -0
- package/esm/tooling/inspect/inspect-app.d.mts +62 -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 +14 -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 +228 -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 +29 -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 +50 -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 +77 -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 +61 -0
- package/esm/tooling/mcp/load-ai-tools.d.mts.map +1 -0
- package/esm/tooling/mcp/load-ai-tools.mjs +45 -0
- package/esm/tooling/mcp/load-ai-tools.mjs.map +1 -0
- package/esm/tooling/mcp/mcp-tools.d.mts +70 -0
- package/esm/tooling/mcp/mcp-tools.d.mts.map +1 -0
- package/esm/tooling/mcp/mcp-tools.mjs +514 -0
- package/esm/tooling/mcp/mcp-tools.mjs.map +1 -0
- package/esm/tooling/mcp/start-mcp-server.d.mts +63 -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 +55 -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/syntax/ast.mjs +230 -0
- package/esm/tooling/syntax/ast.mjs.map +1 -0
- package/esm/tooling/syntax/imports.mjs +34 -0
- package/esm/tooling/syntax/imports.mjs.map +1 -0
- package/esm/tooling/trace/trace-report.types.d.mts +85 -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 +90 -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.mjs +3 -0
- package/esm/tooling/typecheck/run-typecheck.d.mts +26 -0
- package/esm/tooling/typecheck/run-typecheck.d.mts.map +1 -0
- package/esm/tooling/typecheck/run-typecheck.mjs +90 -0
- package/esm/tooling/typecheck/run-typecheck.mjs.map +1 -0
- package/esm/tooling/typescript/compiler.d.mts +31 -0
- package/esm/tooling/typescript/compiler.d.mts.map +1 -0
- package/esm/tooling/typescript/compiler.mjs +120 -0
- package/esm/tooling/typescript/compiler.mjs.map +1 -0
- package/esm/updater/update-warlock-packages.mjs +3 -2
- 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 +49 -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/index.d.mts +2 -1
- package/esm/use-cases/index.mjs +1 -1
- package/esm/use-cases/types.d.mts +116 -63
- package/esm/use-cases/types.d.mts.map +1 -1
- package/esm/use-cases/use-case-broadcast.d.mts +1 -3
- package/esm/use-cases/use-case-broadcast.d.mts.map +1 -1
- package/esm/use-cases/use-case-events.d.mts +3 -5
- package/esm/use-cases/use-case-events.d.mts.map +1 -1
- package/esm/use-cases/use-case-pipeline.d.mts +6 -6
- package/esm/use-cases/use-case-pipeline.d.mts.map +1 -1
- package/esm/use-cases/use-case.d.mts +2 -4
- package/esm/use-cases/use-case.d.mts.map +1 -1
- package/esm/use-cases/use-case.errors.d.mts +1 -3
- package/esm/use-cases/use-case.errors.d.mts.map +1 -1
- package/esm/use-cases/use-cases-registry.d.mts +8 -10
- package/esm/use-cases/use-cases-registry.d.mts.map +1 -1
- package/esm/use-cases/use-cases-registry.mjs.map +1 -1
- package/esm/utils/app-log.d.mts +1 -2
- package/esm/utils/app-log.d.mts.map +1 -1
- package/esm/utils/clock.d.mts +35 -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 +3 -4
- package/esm/utils/database-log.d.mts.map +1 -1
- package/esm/utils/environment.d.mts +4 -5
- package/esm/utils/environment.d.mts.map +1 -1
- package/esm/utils/framework-vesion.mjs +1 -1
- package/esm/utils/framework-vesion.mjs.map +1 -1
- package/esm/utils/get-localized.d.mts +2 -3
- package/esm/utils/get-localized.d.mts.map +1 -1
- package/esm/utils/ids.d.mts +35 -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 +5 -1
- package/esm/utils/index.mjs +4 -1
- package/esm/utils/normalized-path.d.mts +1 -2
- package/esm/utils/normalized-path.d.mts.map +1 -1
- package/esm/utils/npm-registry.d.mts +1 -2
- package/esm/utils/npm-registry.d.mts.map +1 -1
- package/esm/utils/paths.d.mts +13 -14
- package/esm/utils/paths.d.mts.map +1 -1
- package/esm/utils/paths.mjs +2 -2
- package/esm/utils/paths.mjs.map +1 -1
- package/esm/utils/promise-all-object.d.mts +1 -2
- package/esm/utils/promise-all-object.d.mts.map +1 -1
- package/esm/utils/queue.d.mts +1 -2
- package/esm/utils/queue.d.mts.map +1 -1
- package/esm/utils/runtime.d.mts +60 -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 -2
- package/esm/utils/sleep.d.mts.map +1 -1
- package/esm/utils/sluggable.d.mts +1 -3
- package/esm/utils/sluggable.d.mts.map +1 -1
- package/esm/utils/to-json.d.mts +1 -2
- package/esm/utils/to-json.d.mts.map +1 -1
- package/esm/utils/types.d.mts +1 -2
- package/esm/utils/types.d.mts.map +1 -1
- package/esm/utils/urls.d.mts +5 -6
- package/esm/utils/urls.d.mts.map +1 -1
- package/esm/utils/version-compare.d.mts +1 -2
- package/esm/utils/version-compare.d.mts.map +1 -1
- package/esm/validation/database/exists-except-current-id.d.mts +2 -3
- package/esm/validation/database/exists-except-current-id.d.mts.map +1 -1
- package/esm/validation/database/exists-except-current-user.d.mts +2 -3
- package/esm/validation/database/exists-except-current-user.d.mts.map +1 -1
- package/esm/validation/database/index.d.mts +2 -1
- package/esm/validation/database/index.mjs +1 -1
- package/esm/validation/database/types.d.mts +14 -10
- package/esm/validation/database/types.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-id.d.mts +2 -3
- package/esm/validation/database/unique-except-current-id.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-user.d.mts +2 -3
- package/esm/validation/database/unique-except-current-user.d.mts.map +1 -1
- package/esm/validation/file/file.d.mts +4 -6
- package/esm/validation/file/file.d.mts.map +1 -1
- package/esm/validation/file/index.d.mts +2 -1
- package/esm/validation/file/index.mjs +1 -1
- package/esm/validation/index.d.mts +6 -2
- package/esm/validation/index.mjs +1 -1
- package/esm/validation/plugins/index.mjs +1 -1
- package/esm/validation/types.d.mts +61 -4
- package/esm/validation/types.d.mts.map +1 -1
- package/esm/validation/validateAll.mjs +21 -4
- 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 +2 -20
- package/esm/validation/validators/file-validator.d.mts.map +1 -1
- package/esm/validation/validators/index.d.mts +2 -1
- package/esm/validation/validators/index.mjs +1 -1
- package/esm/vite/lower-stage3-decorators.d.mts +2 -3
- package/esm/vite/lower-stage3-decorators.d.mts.map +1 -1
- package/esm/warlock-config/bundle-config.mjs +1 -1
- package/esm/warlock-config/define-config.d.mts +1 -3
- package/esm/warlock-config/define-config.d.mts.map +1 -1
- package/esm/warlock-config/define-config.mjs +3 -2
- package/esm/warlock-config/define-config.mjs.map +1 -1
- package/esm/warlock-config/index.d.mts +2 -1
- package/esm/warlock-config/index.mjs +1 -1
- package/esm/warlock-config/types.d.mts +31 -6
- package/esm/warlock-config/types.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.d.mts +5 -7
- package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.mjs +2 -1
- package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
- package/esm/warlock-config/warn-deprecated-config.mjs +1 -1
- package/llms-full.txt +3211 -731
- package/llms.txt +16 -6
- package/package.json +47 -15
- 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 +107 -14
- package/skills/create-controller/SKILL.md +25 -12
- package/skills/create-module/SKILL.md +10 -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 +24 -7
- package/skills/index.md +11 -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 +109 -10
- package/skills/report-framework-issue.md +154 -0
- 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 +107 -22
- package/skills/send-response/SKILL.md +179 -14
- package/skills/store-file/SKILL.md +93 -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 +454 -0
- package/skills/upload-file/SKILL.md +31 -33
- package/skills/use-app-context/SKILL.md +38 -31
- package/skills/use-middleware/SKILL.md +45 -25
- package/skills/use-model-transformers/SKILL.md +37 -28
- package/skills/use-repository/SKILL.md +2 -2
- package/skills/validate-input/SKILL.md +72 -28
- package/skills/warlock-agents-md/SKILL.md +96 -0
- package/skills/warlock-board/SKILL.md +123 -0
- package/skills/warlock-check/SKILL.md +133 -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
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { TestRequestClient, testDelete, testGet, testPatch, testPost, testPut, testRequest } from "./test-helpers.mjs";
|
|
2
|
+
//#region ../../packages/core/src/tests/authenticated-test-client.d.ts
|
|
3
|
+
/** Structural auth contract: an Auth model satisfies this without a runtime auth import. */
|
|
4
|
+
export interface TestAuthenticableUser {
|
|
5
|
+
generateAccessToken(): Promise<{
|
|
6
|
+
token: string;
|
|
7
|
+
}>;
|
|
8
|
+
removeAccessToken(token: string): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
/** An isolated HTTP client using one real issued access token. */
|
|
11
|
+
export type AuthenticatedTestClient = {
|
|
12
|
+
request: typeof testRequest;
|
|
13
|
+
get: typeof testGet;
|
|
14
|
+
post: typeof testPost;
|
|
15
|
+
put: typeof testPut;
|
|
16
|
+
patch: typeof testPatch;
|
|
17
|
+
delete: typeof testDelete;
|
|
18
|
+
/** Revoke only this client's token; fixtures still own their user/data cleanup. */
|
|
19
|
+
dispose(): Promise<void>;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Issue a real persisted access token and bind it to this client's requests.
|
|
23
|
+
* Authentication middleware still verifies every request; no globals or bypasses
|
|
24
|
+
* are installed. The bound identity takes precedence over per-request headers.
|
|
25
|
+
*
|
|
26
|
+
* Requests go to the shared test server, or through `client` — e.g. the one
|
|
27
|
+
* `createTestHttpServer()` returns (its own `actingAs()` passes it).
|
|
28
|
+
*/
|
|
29
|
+
export declare function actingAs(user: TestAuthenticableUser, client?: TestRequestClient): Promise<AuthenticatedTestClient>;
|
|
30
|
+
//#endregion
|
|
31
|
+
//# sourceMappingURL=authenticated-test-client.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticated-test-client.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/tests/authenticated-test-client.ts"],"mappings":";;;iBAaiB;EACf,uBAAuB;IAAU;;EACjC,kBAAkB,gBAAgB;;;YAIxB;EACV,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,cAAc;EACd,eAAe;;EAEf,WAAW;;;;;;;;;;wBAWS,SACpB,MAAM,uBACN,SAAQ,oBACP,QAAQ"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { createTestRequestClient, getTestServerUrl } from "./test-helpers.mjs";
|
|
2
|
+
|
|
3
|
+
//#region ../../packages/core/src/tests/authenticated-test-client.ts
|
|
4
|
+
/**
|
|
5
|
+
* Issue a real persisted access token and bind it to this client's requests.
|
|
6
|
+
* Authentication middleware still verifies every request; no globals or bypasses
|
|
7
|
+
* are installed. The bound identity takes precedence over per-request headers.
|
|
8
|
+
*
|
|
9
|
+
* Requests go to the shared test server, or through `client` — e.g. the one
|
|
10
|
+
* `createTestHttpServer()` returns (its own `actingAs()` passes it).
|
|
11
|
+
*/
|
|
12
|
+
async function actingAs(user, client = createTestRequestClient(getTestServerUrl)) {
|
|
13
|
+
if (process.env.NODE_ENV !== "test") throw new Error(`actingAs() requires NODE_ENV="test", but received NODE_ENV=${JSON.stringify(process.env.NODE_ENV)}. Set NODE_ENV=test before creating a test client.`);
|
|
14
|
+
const { token } = await user.generateAccessToken();
|
|
15
|
+
if (!token.trim()) {
|
|
16
|
+
await user.removeAccessToken(token).catch(() => void 0);
|
|
17
|
+
throw new Error("actingAs() requires a non-empty access token.");
|
|
18
|
+
}
|
|
19
|
+
const authorized = (options = {}) => {
|
|
20
|
+
const headers = new Headers(options.headers);
|
|
21
|
+
headers.set("authorization", `Bearer ${token}`);
|
|
22
|
+
return {
|
|
23
|
+
...options,
|
|
24
|
+
headers
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
request: (path, options) => client.request(path, authorized(options)),
|
|
29
|
+
get: (path, options) => client.get(path, authorized(options)),
|
|
30
|
+
post: (path, body, options) => client.post(path, body, authorized(options)),
|
|
31
|
+
put: (path, body, options) => client.put(path, body, authorized(options)),
|
|
32
|
+
patch: (path, body, options) => client.patch(path, body, authorized(options)),
|
|
33
|
+
delete: (path, options) => client.delete(path, authorized(options)),
|
|
34
|
+
dispose: () => user.removeAccessToken(token)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
export { actingAs };
|
|
40
|
+
//# sourceMappingURL=authenticated-test-client.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticated-test-client.mjs","names":[],"sources":["../../../../../../../../packages/core/src/tests/authenticated-test-client.ts"],"sourcesContent":["import {\n type TestRequestClient,\n createTestRequestClient,\n getTestServerUrl,\n type testDelete,\n type testGet,\n type testPatch,\n type testPost,\n type testPut,\n type testRequest,\n} from \"./test-helpers\";\n\n/** Structural auth contract: an Auth model satisfies this without a runtime auth import. */\nexport interface TestAuthenticableUser {\n generateAccessToken(): Promise<{ token: string }>;\n removeAccessToken(token: string): Promise<void>;\n}\n\n/** An isolated HTTP client using one real issued access token. */\nexport type AuthenticatedTestClient = {\n request: typeof testRequest;\n get: typeof testGet;\n post: typeof testPost;\n put: typeof testPut;\n patch: typeof testPatch;\n delete: typeof testDelete;\n /** Revoke only this client's token; fixtures still own their user/data cleanup. */\n dispose(): Promise<void>;\n};\n\n/**\n * Issue a real persisted access token and bind it to this client's requests.\n * Authentication middleware still verifies every request; no globals or bypasses\n * are installed. The bound identity takes precedence over per-request headers.\n *\n * Requests go to the shared test server, or through `client` — e.g. the one\n * `createTestHttpServer()` returns (its own `actingAs()` passes it).\n */\nexport async function actingAs(\n user: TestAuthenticableUser,\n client: TestRequestClient = createTestRequestClient(getTestServerUrl),\n): Promise<AuthenticatedTestClient> {\n if (process.env.NODE_ENV !== \"test\") {\n throw new Error(\n `actingAs() requires NODE_ENV=\"test\", but received NODE_ENV=${JSON.stringify(process.env.NODE_ENV)}. Set NODE_ENV=test before creating a test client.`,\n );\n }\n const { token } = await user.generateAccessToken();\n if (!token.trim()) {\n await user.removeAccessToken(token).catch(() => undefined);\n throw new Error(\"actingAs() requires a non-empty access token.\");\n }\n\n const authorized = (options: RequestInit = {}): RequestInit => {\n const headers = new Headers(options.headers);\n headers.set(\"authorization\", `Bearer ${token}`);\n return { ...options, headers };\n };\n\n return {\n request: (path, options) => client.request(path, authorized(options)),\n get: (path, options) => client.get(path, authorized(options)),\n post: (path, body, options) => client.post(path, body, authorized(options)),\n put: (path, body, options) => client.put(path, body, authorized(options)),\n patch: (path, body, options) => client.patch(path, body, authorized(options)),\n delete: (path, options) => client.delete(path, authorized(options)),\n dispose: () => user.removeAccessToken(token),\n };\n}\n"],"mappings":";;;;;;;;;;;AAsCA,eAAsB,SACpB,MACA,SAA4B,wBAAwB,gBAAgB,GAClC;CAClC,IAAI,QAAQ,IAAI,aAAa,QAC3B,MAAM,IAAI,MACR,8DAA8D,KAAK,UAAU,QAAQ,IAAI,QAAQ,EAAE,mDACrG;CAEF,MAAM,EAAE,UAAU,MAAM,KAAK,oBAAoB;CACjD,IAAI,CAAC,MAAM,KAAK,GAAG;EACjB,MAAM,KAAK,kBAAkB,KAAK,CAAC,CAAC,YAAY,MAAS;EACzD,MAAM,IAAI,MAAM,+CAA+C;CACjE;CAEA,MAAM,cAAc,UAAuB,CAAC,MAAmB;EAC7D,MAAM,UAAU,IAAI,QAAQ,QAAQ,OAAO;EAC3C,QAAQ,IAAI,iBAAiB,UAAU,OAAO;EAC9C,OAAO;GAAE,GAAG;GAAS;EAAQ;CAC/B;CAEA,OAAO;EACL,UAAU,MAAM,YAAY,OAAO,QAAQ,MAAM,WAAW,OAAO,CAAC;EACpE,MAAM,MAAM,YAAY,OAAO,IAAI,MAAM,WAAW,OAAO,CAAC;EAC5D,OAAO,MAAM,MAAM,YAAY,OAAO,KAAK,MAAM,MAAM,WAAW,OAAO,CAAC;EAC1E,MAAM,MAAM,MAAM,YAAY,OAAO,IAAI,MAAM,MAAM,WAAW,OAAO,CAAC;EACxE,QAAQ,MAAM,MAAM,YAAY,OAAO,MAAM,MAAM,MAAM,WAAW,OAAO,CAAC;EAC5E,SAAS,MAAM,YAAY,OAAO,OAAO,MAAM,WAAW,OAAO,CAAC;EAClE,eAAe,KAAK,kBAAkB,KAAK;CAC7C;AACF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ChildModel, Model, ModelSchema } from "@warlock.js/cascade";
|
|
2
|
+
//#region ../../packages/core/src/tests/factories.d.ts
|
|
3
|
+
/** A model's schema type. */
|
|
4
|
+
type SchemaOf<TModel extends Model> = TModel extends Model<infer TSchema> ? TSchema : ModelSchema;
|
|
5
|
+
/** The attributes a model is created from: a partial of its schema, as `Model.create()` takes. */
|
|
6
|
+
export type FactoryAttributes<TModel extends Model> = Partial<SchemaOf<TModel>>;
|
|
7
|
+
/**
|
|
8
|
+
* Deterministic values for one record, derived only from its sequence number:
|
|
9
|
+
* the n-th record a factory builds is the same on every run, with no faker
|
|
10
|
+
* and no randomness.
|
|
11
|
+
*/
|
|
12
|
+
export type FactorySeed = {
|
|
13
|
+
/** 1 for the first record this factory builds, 2 for the second, ... */
|
|
14
|
+
readonly sequence: number;
|
|
15
|
+
/** Position within the current `makeMany()` / `createMany()` call, from 0. */
|
|
16
|
+
readonly index: number;
|
|
17
|
+
/** `"<prefix> <sequence>"`, e.g. `text("Post")` → `"Post 3"`. */
|
|
18
|
+
text(prefix?: string): string;
|
|
19
|
+
/** `"<prefix><sequence>@example.test"`, e.g. `"user3@example.test"`. */
|
|
20
|
+
email(prefix?: string): string;
|
|
21
|
+
/** A valid v4-shaped UUID numbered by the sequence. */
|
|
22
|
+
uuid(): string;
|
|
23
|
+
/** 2026-01-01T00:00:00Z plus `offsetDays` days. */
|
|
24
|
+
date(offsetDays?: number): Date;
|
|
25
|
+
/** An integer in `[min, max]`, cycling with the sequence. */
|
|
26
|
+
number(min?: number, max?: number): number;
|
|
27
|
+
/** One of `values`, cycling with the sequence. */
|
|
28
|
+
pick<T>(values: readonly T[]): T;
|
|
29
|
+
};
|
|
30
|
+
/** Overrides: a partial, or a function of the seed returning one. */
|
|
31
|
+
export type FactoryOverrides<TAttributes> = Partial<TAttributes> | ((seed: FactorySeed) => Partial<TAttributes>);
|
|
32
|
+
/** A named variation, applied on top of the definition (and earlier states). */
|
|
33
|
+
export type FactoryState<TAttributes> = (seed: FactorySeed, attributes: TAttributes) => Partial<TAttributes>;
|
|
34
|
+
export type Factory<TModel extends Model, TAttributes = FactoryAttributes<TModel>> = {
|
|
35
|
+
/** Build attributes without saving anything — no database needed. */
|
|
36
|
+
make(overrides?: FactoryOverrides<TAttributes>): TAttributes;
|
|
37
|
+
/** Build `count` attribute sets without saving anything. */
|
|
38
|
+
makeMany(count: number, overrides?: FactoryOverrides<TAttributes>): TAttributes[];
|
|
39
|
+
/** Create and save one record through `Model.create()`. */
|
|
40
|
+
create(overrides?: FactoryOverrides<TAttributes>): Promise<TModel>;
|
|
41
|
+
/** Create and save `count` records, one `Model.create()` each, in order. */
|
|
42
|
+
create(count: number, overrides?: FactoryOverrides<TAttributes>): Promise<TModel[]>;
|
|
43
|
+
/** Same as `create(count, overrides)`. */
|
|
44
|
+
createMany(count: number, overrides?: FactoryOverrides<TAttributes>): Promise<TModel[]>;
|
|
45
|
+
/** Register a named state on this factory; returns the factory for chaining. */
|
|
46
|
+
state(name: string, state: FactoryState<TAttributes>): Factory<TModel, TAttributes>;
|
|
47
|
+
/** A factory that applies the named states, in order, on top of the definition. */
|
|
48
|
+
with(...states: string[]): Factory<TModel, TAttributes>;
|
|
49
|
+
/** Restart this factory's sequence at 1. */
|
|
50
|
+
resetSequence(): void;
|
|
51
|
+
};
|
|
52
|
+
/** Restart every factory's sequence, e.g. in `beforeEach`. */
|
|
53
|
+
export declare function resetFactorySequences(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Define a model factory: deterministic attributes for tests and seeders.
|
|
56
|
+
*
|
|
57
|
+
* `make()` builds attributes only (no database), `create()` saves through the
|
|
58
|
+
* model's own `create()`, so casts, defaults, hooks and events all run.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* export const userFactory = defineFactory(User, (seed) => ({
|
|
62
|
+
* name: seed.text("User"),
|
|
63
|
+
* email: seed.email(),
|
|
64
|
+
* password: "test-password",
|
|
65
|
+
* })).state("admin", () => ({ role: "admin" }));
|
|
66
|
+
*
|
|
67
|
+
* const body = userFactory.make({ name: "Ada" }); // { name: "Ada", email: "user1@example.test", ... }
|
|
68
|
+
* const admin = await userFactory.with("admin").create();
|
|
69
|
+
* const users = await userFactory.create(3);
|
|
70
|
+
*/
|
|
71
|
+
export declare function defineFactory<TModel extends Model>(model: ChildModel<TModel>, definition: (seed: FactorySeed) => FactoryAttributes<TModel>): Factory<TModel>;
|
|
72
|
+
//#endregion
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=factories.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.d.mts","names":[],"sources":["../../../../../../../../packages/core/src/tests/factories.ts"],"mappings":";;;KAIK,SAAS,eAAe,SAAS,eAAe,YAAY,WAAW,UAAU;;YAG1E,kBAAkB,eAAe,SAAS,QAAQ,SAAS;;;;;;YAO3D;;WAED;;WAEA;;EAET,KAAK;;EAEL,MAAM;;EAEN;;EAEA,KAAK,sBAAsB;;EAE3B,OAAO,cAAc;;EAErB,KAAK,GAAG,iBAAiB,MAAM;;;YAIrB,iBAAiB,eACzB,QAAQ,iBACN,MAAM,gBAAgB,QAAQ;;YAGxB,aAAa,gBACvB,MAAM,aACN,YAAY,gBACT,QAAQ;YAED,QAAQ,eAAe,OAAO,cAAc,kBAAkB;;EAExE,KAAK,YAAY,iBAAiB,eAAe;;EAEjD,SAAS,eAAe,YAAY,iBAAiB,eAAe;;EAEpE,OAAO,YAAY,iBAAiB,eAAe,QAAQ;;EAE3D,OAAO,eAAe,YAAY,iBAAiB,eAAe,QAAQ;;EAE1E,WAAW,eAAe,YAAY,iBAAiB,eAAe,QAAQ;;EAE9E,MAAM,cAAc,OAAO,aAAa,eAAe,QAAQ,QAAQ;;EAEvE,QAAQ,mBAAmB,QAAQ,QAAQ;;EAE3C;;;wBAQc;;;;;;;;;;;;;;;;;;wBAqIA,cAAc,eAAe,OAC3C,OAAO,WAAW,SAClB,aAAa,MAAM,gBAAgB,kBAAkB,UACpD,QAAQ"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { DEFAULT_FAKE_NOW } from "./fakes/clock-fake.mjs";
|
|
2
|
+
|
|
3
|
+
//#region ../../packages/core/src/tests/factories.ts
|
|
4
|
+
const counters = /* @__PURE__ */ new Set();
|
|
5
|
+
/** Restart every factory's sequence, e.g. in `beforeEach`. */
|
|
6
|
+
function resetFactorySequences() {
|
|
7
|
+
for (const counter of counters) counter.value = 0;
|
|
8
|
+
}
|
|
9
|
+
function createSeed(sequence, index) {
|
|
10
|
+
return {
|
|
11
|
+
sequence,
|
|
12
|
+
index,
|
|
13
|
+
text: (prefix = "Text") => `${prefix} ${sequence}`,
|
|
14
|
+
email: (prefix = "user") => `${prefix}${sequence}@example.test`,
|
|
15
|
+
uuid: () => `00000000-0000-4000-8000-${String(sequence).padStart(12, "0")}`,
|
|
16
|
+
date: (offsetDays = 0) => new Date(DEFAULT_FAKE_NOW + offsetDays * 864e5),
|
|
17
|
+
number: (min = 1, max = 1e3) => {
|
|
18
|
+
if (max < min) throw new RangeError(`seed.number(${min}, ${max}): max is below min.`);
|
|
19
|
+
return min + (sequence - 1) % (max - min + 1);
|
|
20
|
+
},
|
|
21
|
+
pick: (values) => {
|
|
22
|
+
const value = values[(sequence - 1) % values.length];
|
|
23
|
+
if (value === void 0) throw new RangeError("seed.pick() needs at least one value.");
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function buildFactory(model, definition, counter, states, applied) {
|
|
29
|
+
const build = (index, overrides) => {
|
|
30
|
+
counter.value += 1;
|
|
31
|
+
const seed = createSeed(counter.value, index);
|
|
32
|
+
let attributes = { ...definition(seed) };
|
|
33
|
+
for (const name of applied) {
|
|
34
|
+
const state = states.get(name);
|
|
35
|
+
if (!state) throw new Error(`Factory state "${name}" is not defined. Defined states: ${[...states.keys()].join(", ") || "(none)"}.`);
|
|
36
|
+
attributes = {
|
|
37
|
+
...attributes,
|
|
38
|
+
...state(seed, attributes)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const extra = typeof overrides === "function" ? overrides(seed) : overrides;
|
|
42
|
+
return {
|
|
43
|
+
...attributes,
|
|
44
|
+
...extra
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
const assertCount = (count) => {
|
|
48
|
+
if (!Number.isInteger(count) || count < 0) throw new RangeError(`A factory count must be a non-negative integer, got ${String(count)}.`);
|
|
49
|
+
};
|
|
50
|
+
const persist = (attributes) => model.create(attributes);
|
|
51
|
+
const createMany = async (count, overrides) => {
|
|
52
|
+
assertCount(count);
|
|
53
|
+
const records = [];
|
|
54
|
+
for (let index = 0; index < count; index++) records.push(await persist(build(index, overrides)));
|
|
55
|
+
return records;
|
|
56
|
+
};
|
|
57
|
+
function create(countOrOverrides, overrides) {
|
|
58
|
+
if (typeof countOrOverrides === "number") return createMany(countOrOverrides, overrides);
|
|
59
|
+
return persist(build(0, countOrOverrides));
|
|
60
|
+
}
|
|
61
|
+
const factory = {
|
|
62
|
+
make: (overrides) => build(0, overrides),
|
|
63
|
+
makeMany: (count, overrides) => {
|
|
64
|
+
assertCount(count);
|
|
65
|
+
return Array.from({ length: count }, (_, index) => build(index, overrides));
|
|
66
|
+
},
|
|
67
|
+
create,
|
|
68
|
+
createMany,
|
|
69
|
+
state: (name, state) => {
|
|
70
|
+
states.set(name, state);
|
|
71
|
+
return factory;
|
|
72
|
+
},
|
|
73
|
+
with: (...names) => buildFactory(model, definition, counter, states, [...applied, ...names]),
|
|
74
|
+
resetSequence: () => {
|
|
75
|
+
counter.value = 0;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
return factory;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Define a model factory: deterministic attributes for tests and seeders.
|
|
82
|
+
*
|
|
83
|
+
* `make()` builds attributes only (no database), `create()` saves through the
|
|
84
|
+
* model's own `create()`, so casts, defaults, hooks and events all run.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* export const userFactory = defineFactory(User, (seed) => ({
|
|
88
|
+
* name: seed.text("User"),
|
|
89
|
+
* email: seed.email(),
|
|
90
|
+
* password: "test-password",
|
|
91
|
+
* })).state("admin", () => ({ role: "admin" }));
|
|
92
|
+
*
|
|
93
|
+
* const body = userFactory.make({ name: "Ada" }); // { name: "Ada", email: "user1@example.test", ... }
|
|
94
|
+
* const admin = await userFactory.with("admin").create();
|
|
95
|
+
* const users = await userFactory.create(3);
|
|
96
|
+
*/
|
|
97
|
+
function defineFactory(model, definition) {
|
|
98
|
+
const counter = { value: 0 };
|
|
99
|
+
counters.add(counter);
|
|
100
|
+
return buildFactory(model, definition, counter, /* @__PURE__ */ new Map(), []);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
//#endregion
|
|
104
|
+
export { defineFactory, resetFactorySequences };
|
|
105
|
+
//# sourceMappingURL=factories.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.mjs","names":[],"sources":["../../../../../../../../packages/core/src/tests/factories.ts"],"sourcesContent":["import type { ChildModel, Model, ModelSchema } from \"@warlock.js/cascade\";\nimport { DEFAULT_FAKE_NOW } from \"./fakes/clock-fake\";\n\n/** A model's schema type. */\ntype SchemaOf<TModel extends Model> = TModel extends Model<infer TSchema> ? TSchema : ModelSchema;\n\n/** The attributes a model is created from: a partial of its schema, as `Model.create()` takes. */\nexport type FactoryAttributes<TModel extends Model> = Partial<SchemaOf<TModel>>;\n\n/**\n * Deterministic values for one record, derived only from its sequence number:\n * the n-th record a factory builds is the same on every run, with no faker\n * and no randomness.\n */\nexport type FactorySeed = {\n /** 1 for the first record this factory builds, 2 for the second, ... */\n readonly sequence: number;\n /** Position within the current `makeMany()` / `createMany()` call, from 0. */\n readonly index: number;\n /** `\"<prefix> <sequence>\"`, e.g. `text(\"Post\")` → `\"Post 3\"`. */\n text(prefix?: string): string;\n /** `\"<prefix><sequence>@example.test\"`, e.g. `\"user3@example.test\"`. */\n email(prefix?: string): string;\n /** A valid v4-shaped UUID numbered by the sequence. */\n uuid(): string;\n /** 2026-01-01T00:00:00Z plus `offsetDays` days. */\n date(offsetDays?: number): Date;\n /** An integer in `[min, max]`, cycling with the sequence. */\n number(min?: number, max?: number): number;\n /** One of `values`, cycling with the sequence. */\n pick<T>(values: readonly T[]): T;\n};\n\n/** Overrides: a partial, or a function of the seed returning one. */\nexport type FactoryOverrides<TAttributes> =\n | Partial<TAttributes>\n | ((seed: FactorySeed) => Partial<TAttributes>);\n\n/** A named variation, applied on top of the definition (and earlier states). */\nexport type FactoryState<TAttributes> = (\n seed: FactorySeed,\n attributes: TAttributes,\n) => Partial<TAttributes>;\n\nexport type Factory<TModel extends Model, TAttributes = FactoryAttributes<TModel>> = {\n /** Build attributes without saving anything — no database needed. */\n make(overrides?: FactoryOverrides<TAttributes>): TAttributes;\n /** Build `count` attribute sets without saving anything. */\n makeMany(count: number, overrides?: FactoryOverrides<TAttributes>): TAttributes[];\n /** Create and save one record through `Model.create()`. */\n create(overrides?: FactoryOverrides<TAttributes>): Promise<TModel>;\n /** Create and save `count` records, one `Model.create()` each, in order. */\n create(count: number, overrides?: FactoryOverrides<TAttributes>): Promise<TModel[]>;\n /** Same as `create(count, overrides)`. */\n createMany(count: number, overrides?: FactoryOverrides<TAttributes>): Promise<TModel[]>;\n /** Register a named state on this factory; returns the factory for chaining. */\n state(name: string, state: FactoryState<TAttributes>): Factory<TModel, TAttributes>;\n /** A factory that applies the named states, in order, on top of the definition. */\n with(...states: string[]): Factory<TModel, TAttributes>;\n /** Restart this factory's sequence at 1. */\n resetSequence(): void;\n};\n\ntype SequenceCounter = { value: number };\n\nconst counters = new Set<SequenceCounter>();\n\n/** Restart every factory's sequence, e.g. in `beforeEach`. */\nexport function resetFactorySequences(): void {\n for (const counter of counters) counter.value = 0;\n}\n\nfunction createSeed(sequence: number, index: number): FactorySeed {\n return {\n sequence,\n index,\n text: (prefix = \"Text\") => `${prefix} ${sequence}`,\n email: (prefix = \"user\") => `${prefix}${sequence}@example.test`,\n uuid: () => `00000000-0000-4000-8000-${String(sequence).padStart(12, \"0\")}`,\n date: (offsetDays = 0) => new Date(DEFAULT_FAKE_NOW + offsetDays * 86_400_000),\n number: (min = 1, max = 1000) => {\n if (max < min) throw new RangeError(`seed.number(${min}, ${max}): max is below min.`);\n\n return min + ((sequence - 1) % (max - min + 1));\n },\n pick: <T>(values: readonly T[]): T => {\n const value = values[(sequence - 1) % values.length];\n\n if (value === undefined) throw new RangeError(\"seed.pick() needs at least one value.\");\n\n return value;\n },\n };\n}\n\nfunction buildFactory<TModel extends Model>(\n model: ChildModel<TModel>,\n definition: (seed: FactorySeed) => FactoryAttributes<TModel>,\n counter: SequenceCounter,\n states: Map<string, FactoryState<FactoryAttributes<TModel>>>,\n applied: readonly string[],\n): Factory<TModel> {\n type TAttributes = FactoryAttributes<TModel>;\n\n const build = (index: number, overrides?: FactoryOverrides<TAttributes>): TAttributes => {\n counter.value += 1;\n\n const seed = createSeed(counter.value, index);\n let attributes: TAttributes = { ...definition(seed) };\n\n for (const name of applied) {\n const state = states.get(name);\n\n if (!state) {\n throw new Error(\n `Factory state \"${name}\" is not defined. Defined states: ${[...states.keys()].join(\", \") || \"(none)\"}.`,\n );\n }\n\n attributes = { ...attributes, ...state(seed, attributes) };\n }\n\n const extra = typeof overrides === \"function\" ? overrides(seed) : overrides;\n\n return { ...attributes, ...extra };\n };\n\n const assertCount = (count: number): void => {\n if (!Number.isInteger(count) || count < 0) {\n throw new RangeError(`A factory count must be a non-negative integer, got ${String(count)}.`);\n }\n };\n\n const persist = (attributes: TAttributes): Promise<TModel> => model.create(attributes);\n\n const createMany = async (\n count: number,\n overrides?: FactoryOverrides<TAttributes>,\n ): Promise<TModel[]> => {\n assertCount(count);\n\n const records: TModel[] = [];\n\n for (let index = 0; index < count; index++) {\n records.push(await persist(build(index, overrides)));\n }\n\n return records;\n };\n\n function create(overrides?: FactoryOverrides<TAttributes>): Promise<TModel>;\n function create(count: number, overrides?: FactoryOverrides<TAttributes>): Promise<TModel[]>;\n function create(\n countOrOverrides?: number | FactoryOverrides<TAttributes>,\n overrides?: FactoryOverrides<TAttributes>,\n ): Promise<TModel | TModel[]> {\n if (typeof countOrOverrides === \"number\") return createMany(countOrOverrides, overrides);\n\n return persist(build(0, countOrOverrides));\n }\n\n const factory: Factory<TModel> = {\n make: (overrides) => build(0, overrides),\n makeMany: (count, overrides) => {\n assertCount(count);\n\n return Array.from({ length: count }, (_, index) => build(index, overrides));\n },\n create,\n createMany,\n state: (name, state) => {\n states.set(name, state);\n\n return factory;\n },\n with: (...names) => buildFactory(model, definition, counter, states, [...applied, ...names]),\n resetSequence: () => {\n counter.value = 0;\n },\n };\n\n return factory;\n}\n\n/**\n * Define a model factory: deterministic attributes for tests and seeders.\n *\n * `make()` builds attributes only (no database), `create()` saves through the\n * model's own `create()`, so casts, defaults, hooks and events all run.\n *\n * @example\n * export const userFactory = defineFactory(User, (seed) => ({\n * name: seed.text(\"User\"),\n * email: seed.email(),\n * password: \"test-password\",\n * })).state(\"admin\", () => ({ role: \"admin\" }));\n *\n * const body = userFactory.make({ name: \"Ada\" }); // { name: \"Ada\", email: \"user1@example.test\", ... }\n * const admin = await userFactory.with(\"admin\").create();\n * const users = await userFactory.create(3);\n */\nexport function defineFactory<TModel extends Model>(\n model: ChildModel<TModel>,\n definition: (seed: FactorySeed) => FactoryAttributes<TModel>,\n): Factory<TModel> {\n const counter: SequenceCounter = { value: 0 };\n\n counters.add(counter);\n\n return buildFactory<TModel>(model, definition, counter, new Map(), []);\n}\n"],"mappings":";;;AAiEA,MAAM,2BAAW,IAAI,IAAqB;;AAG1C,SAAgB,wBAA8B;CAC5C,KAAK,MAAM,WAAW,UAAU,QAAQ,QAAQ;AAClD;AAEA,SAAS,WAAW,UAAkB,OAA4B;CAChE,OAAO;EACL;EACA;EACA,OAAO,SAAS,WAAW,GAAG,OAAO,GAAG;EACxC,QAAQ,SAAS,WAAW,GAAG,SAAS,SAAS;EACjD,YAAY,2BAA2B,OAAO,QAAQ,CAAC,CAAC,SAAS,IAAI,GAAG;EACxE,OAAO,aAAa,MAAM,IAAI,KAAK,mBAAmB,aAAa,KAAU;EAC7E,SAAS,MAAM,GAAG,MAAM,QAAS;GAC/B,IAAI,MAAM,KAAK,MAAM,IAAI,WAAW,eAAe,IAAI,IAAI,IAAI,qBAAqB;GAEpF,OAAO,OAAQ,WAAW,MAAM,MAAM,MAAM;EAC9C;EACA,OAAU,WAA4B;GACpC,MAAM,QAAQ,QAAQ,WAAW,KAAK,OAAO;GAE7C,IAAI,UAAU,QAAW,MAAM,IAAI,WAAW,uCAAuC;GAErF,OAAO;EACT;CACF;AACF;AAEA,SAAS,aACP,OACA,YACA,SACA,QACA,SACiB;CAGjB,MAAM,SAAS,OAAe,cAA2D;EACvF,QAAQ,SAAS;EAEjB,MAAM,OAAO,WAAW,QAAQ,OAAO,KAAK;EAC5C,IAAI,aAA0B,EAAE,GAAG,WAAW,IAAI,EAAE;EAEpD,KAAK,MAAM,QAAQ,SAAS;GAC1B,MAAM,QAAQ,OAAO,IAAI,IAAI;GAE7B,IAAI,CAAC,OACH,MAAM,IAAI,MACR,kBAAkB,KAAK,oCAAoC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,SAAS,EACvG;GAGF,aAAa;IAAE,GAAG;IAAY,GAAG,MAAM,MAAM,UAAU;GAAE;EAC3D;EAEA,MAAM,QAAQ,OAAO,cAAc,aAAa,UAAU,IAAI,IAAI;EAElE,OAAO;GAAE,GAAG;GAAY,GAAG;EAAM;CACnC;CAEA,MAAM,eAAe,UAAwB;EAC3C,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GACtC,MAAM,IAAI,WAAW,uDAAuD,OAAO,KAAK,EAAE,EAAE;CAEhG;CAEA,MAAM,WAAW,eAA6C,MAAM,OAAO,UAAU;CAErF,MAAM,aAAa,OACjB,OACA,cACsB;EACtB,YAAY,KAAK;EAEjB,MAAM,UAAoB,CAAC;EAE3B,KAAK,IAAI,QAAQ,GAAG,QAAQ,OAAO,SACjC,QAAQ,KAAK,MAAM,QAAQ,MAAM,OAAO,SAAS,CAAC,CAAC;EAGrD,OAAO;CACT;CAIA,SAAS,OACP,kBACA,WAC4B;EAC5B,IAAI,OAAO,qBAAqB,UAAU,OAAO,WAAW,kBAAkB,SAAS;EAEvF,OAAO,QAAQ,MAAM,GAAG,gBAAgB,CAAC;CAC3C;CAEA,MAAM,UAA2B;EAC/B,OAAO,cAAc,MAAM,GAAG,SAAS;EACvC,WAAW,OAAO,cAAc;GAC9B,YAAY,KAAK;GAEjB,OAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,IAAI,GAAG,UAAU,MAAM,OAAO,SAAS,CAAC;EAC5E;EACA;EACA;EACA,QAAQ,MAAM,UAAU;GACtB,OAAO,IAAI,MAAM,KAAK;GAEtB,OAAO;EACT;EACA,OAAO,GAAG,UAAU,aAAa,OAAO,YAAY,SAAS,QAAQ,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC;EAC3F,qBAAqB;GACnB,QAAQ,QAAQ;EAClB;CACF;CAEA,OAAO;AACT;;;;;;;;;;;;;;;;;;AAmBA,SAAgB,cACd,OACA,YACiB;CACjB,MAAM,UAA2B,EAAE,OAAO,EAAE;CAE5C,SAAS,IAAI,OAAO;CAEpB,OAAO,aAAqB,OAAO,YAAY,yBAAS,IAAI,IAAI,GAAG,CAAC,CAAC;AACvE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { CacheKey, MemoryCacheDriver } from "@warlock.js/cache";
|
|
2
|
+
//#region ../../packages/core/src/tests/fakes/cache-fake.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Swaps the cache's current driver for a fresh in-memory one.
|
|
5
|
+
*
|
|
6
|
+
* Installed by default in the test environment, so tests never need Redis
|
|
7
|
+
* and never see another test's keys. Everything goes through the real cache
|
|
8
|
+
* manager and the real memory driver: TTLs, tags, namespaces and locks behave
|
|
9
|
+
* as they do in production.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* await getDashboardStats(); // caches under "stats.dashboard"
|
|
13
|
+
*
|
|
14
|
+
* await cacheFake.assertHas("stats.dashboard");
|
|
15
|
+
*/
|
|
16
|
+
export declare const cacheFake: {
|
|
17
|
+
/** Start a fresh in-memory store (idempotent: a second call empties it). */
|
|
18
|
+
install(): Promise<void>;
|
|
19
|
+
/** Put the previous driver back and drop the in-memory store. */
|
|
20
|
+
restore(): Promise<void>;
|
|
21
|
+
isInstalled(): boolean;
|
|
22
|
+
/** The in-memory driver standing in for the configured one. */
|
|
23
|
+
driver(): MemoryCacheDriver;
|
|
24
|
+
/** Empty the store. */
|
|
25
|
+
clear(): Promise<void>;
|
|
26
|
+
/** Assert `key` is cached. */
|
|
27
|
+
assertHas(key: CacheKey): Promise<void>;
|
|
28
|
+
/** Assert `key` is not cached. */
|
|
29
|
+
assertMissing(key: CacheKey): Promise<void>;
|
|
30
|
+
/** Assert `key` holds a value deeply equal to `value`. */
|
|
31
|
+
assertStored(key: CacheKey, value: unknown): Promise<void>;
|
|
32
|
+
};
|
|
33
|
+
//#endregion
|
|
34
|
+
//# sourceMappingURL=cache-fake.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-fake.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/tests/fakes/cache-fake.ts"],"mappings":";;;;;;;;;;;;;;;qBA+Ba;;EAEL,WAAW;;EAkBX,WAAW;EAgBjB;;EAKA,UAAU;;EAKJ,SAAS;;EAKT,UAAS,KAAM,WAAW;;EAS1B,cAAa,KAAM,WAAW;;EAS9B,aAAY,KAAM,UAAQ,iBAAmB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { FakeAssertionError } from "./fake-assertion-error.mjs";
|
|
2
|
+
import { MemoryCacheDriver, cache } from "@warlock.js/cache";
|
|
3
|
+
import { isDeepStrictEqual } from "node:util";
|
|
4
|
+
|
|
5
|
+
//#region ../../packages/core/src/tests/fakes/cache-fake.ts
|
|
6
|
+
let fakeDriver;
|
|
7
|
+
let previousDriver;
|
|
8
|
+
let installed = false;
|
|
9
|
+
function driver() {
|
|
10
|
+
if (!fakeDriver) throw new FakeAssertionError("cacheFake is not installed. It installs by default in the test environment; check `tests.fakes` in src/config/tests.ts, or call cacheFake.install().");
|
|
11
|
+
return fakeDriver;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Swaps the cache's current driver for a fresh in-memory one.
|
|
15
|
+
*
|
|
16
|
+
* Installed by default in the test environment, so tests never need Redis
|
|
17
|
+
* and never see another test's keys. Everything goes through the real cache
|
|
18
|
+
* manager and the real memory driver: TTLs, tags, namespaces and locks behave
|
|
19
|
+
* as they do in production.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* await getDashboardStats(); // caches under "stats.dashboard"
|
|
23
|
+
*
|
|
24
|
+
* await cacheFake.assertHas("stats.dashboard");
|
|
25
|
+
*/
|
|
26
|
+
const cacheFake = {
|
|
27
|
+
/** Start a fresh in-memory store (idempotent: a second call empties it). */
|
|
28
|
+
async install() {
|
|
29
|
+
if (!installed) {
|
|
30
|
+
previousDriver = cache.currentDriver;
|
|
31
|
+
installed = true;
|
|
32
|
+
}
|
|
33
|
+
await fakeDriver?.disconnect();
|
|
34
|
+
const next = new MemoryCacheDriver();
|
|
35
|
+
next.setOptions({});
|
|
36
|
+
await next.connect();
|
|
37
|
+
fakeDriver = next;
|
|
38
|
+
await cache.use(next);
|
|
39
|
+
},
|
|
40
|
+
/** Put the previous driver back and drop the in-memory store. */
|
|
41
|
+
async restore() {
|
|
42
|
+
if (!installed) return;
|
|
43
|
+
const fake = fakeDriver;
|
|
44
|
+
fakeDriver = void 0;
|
|
45
|
+
installed = false;
|
|
46
|
+
if (previousDriver) await cache.use(previousDriver);
|
|
47
|
+
else cache.currentDriver = void 0;
|
|
48
|
+
previousDriver = void 0;
|
|
49
|
+
await fake?.disconnect();
|
|
50
|
+
},
|
|
51
|
+
isInstalled() {
|
|
52
|
+
return installed;
|
|
53
|
+
},
|
|
54
|
+
/** The in-memory driver standing in for the configured one. */
|
|
55
|
+
driver() {
|
|
56
|
+
return driver();
|
|
57
|
+
},
|
|
58
|
+
/** Empty the store. */
|
|
59
|
+
async clear() {
|
|
60
|
+
await driver().flush();
|
|
61
|
+
},
|
|
62
|
+
/** Assert `key` is cached. */
|
|
63
|
+
async assertHas(key) {
|
|
64
|
+
if (!await driver().has(key)) throw new FakeAssertionError(`Expected cache key ${JSON.stringify(key)} to be set. Cached keys: ${JSON.stringify(Object.keys(driver().data))}.`);
|
|
65
|
+
},
|
|
66
|
+
/** Assert `key` is not cached. */
|
|
67
|
+
async assertMissing(key) {
|
|
68
|
+
if (await driver().has(key)) throw new FakeAssertionError(`Expected cache key ${JSON.stringify(key)} not to be set, but it holds ${JSON.stringify(await driver().get(key))}.`);
|
|
69
|
+
},
|
|
70
|
+
/** Assert `key` holds a value deeply equal to `value`. */
|
|
71
|
+
async assertStored(key, value) {
|
|
72
|
+
const stored = await driver().get(key);
|
|
73
|
+
if (!isDeepStrictEqual(stored, value)) throw new FakeAssertionError(`Expected cache key ${JSON.stringify(key)} to hold ${JSON.stringify(value)}, but it holds ${JSON.stringify(stored)}.`);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
export { cacheFake };
|
|
79
|
+
//# sourceMappingURL=cache-fake.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-fake.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/tests/fakes/cache-fake.ts"],"sourcesContent":["import { type CacheDriver, type CacheKey, MemoryCacheDriver, cache } from \"@warlock.js/cache\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport { FakeAssertionError } from \"./fake-assertion-error\";\n\nlet fakeDriver: MemoryCacheDriver | undefined;\nlet previousDriver: CacheDriver<unknown, unknown> | undefined;\nlet installed = false;\n\nfunction driver(): MemoryCacheDriver {\n if (!fakeDriver) {\n throw new FakeAssertionError(\n \"cacheFake is not installed. It installs by default in the test environment; check `tests.fakes` in src/config/tests.ts, or call cacheFake.install().\",\n );\n }\n\n return fakeDriver;\n}\n\n/**\n * Swaps the cache's current driver for a fresh in-memory one.\n *\n * Installed by default in the test environment, so tests never need Redis\n * and never see another test's keys. Everything goes through the real cache\n * manager and the real memory driver: TTLs, tags, namespaces and locks behave\n * as they do in production.\n *\n * @example\n * await getDashboardStats(); // caches under \"stats.dashboard\"\n *\n * await cacheFake.assertHas(\"stats.dashboard\");\n */\nexport const cacheFake = {\n /** Start a fresh in-memory store (idempotent: a second call empties it). */\n async install(): Promise<void> {\n if (!installed) {\n previousDriver = cache.currentDriver;\n installed = true;\n }\n\n await fakeDriver?.disconnect();\n\n const next = new MemoryCacheDriver();\n\n next.setOptions({});\n await next.connect();\n\n fakeDriver = next;\n await cache.use(next);\n },\n\n /** Put the previous driver back and drop the in-memory store. */\n async restore(): Promise<void> {\n if (!installed) return;\n\n const fake = fakeDriver;\n\n fakeDriver = undefined;\n installed = false;\n\n if (previousDriver) await cache.use(previousDriver);\n else cache.currentDriver = undefined;\n\n previousDriver = undefined;\n\n await fake?.disconnect();\n },\n\n isInstalled(): boolean {\n return installed;\n },\n\n /** The in-memory driver standing in for the configured one. */\n driver(): MemoryCacheDriver {\n return driver();\n },\n\n /** Empty the store. */\n async clear(): Promise<void> {\n await driver().flush();\n },\n\n /** Assert `key` is cached. */\n async assertHas(key: CacheKey): Promise<void> {\n if (!(await driver().has(key))) {\n throw new FakeAssertionError(\n `Expected cache key ${JSON.stringify(key)} to be set. Cached keys: ${JSON.stringify(Object.keys(driver().data))}.`,\n );\n }\n },\n\n /** Assert `key` is not cached. */\n async assertMissing(key: CacheKey): Promise<void> {\n if (await driver().has(key)) {\n throw new FakeAssertionError(\n `Expected cache key ${JSON.stringify(key)} not to be set, but it holds ${JSON.stringify(await driver().get(key))}.`,\n );\n }\n },\n\n /** Assert `key` holds a value deeply equal to `value`. */\n async assertStored(key: CacheKey, value: unknown): Promise<void> {\n const stored: unknown = await driver().get(key);\n\n if (!isDeepStrictEqual(stored, value)) {\n throw new FakeAssertionError(\n `Expected cache key ${JSON.stringify(key)} to hold ${JSON.stringify(value)}, but it holds ${JSON.stringify(stored)}.`,\n );\n }\n },\n};\n"],"mappings":";;;;;AAIA,IAAI;AACJ,IAAI;AACJ,IAAI,YAAY;AAEhB,SAAS,SAA4B;CACnC,IAAI,CAAC,YACH,MAAM,IAAI,mBACR,sJACF;CAGF,OAAO;AACT;;;;;;;;;;;;;;AAeA,MAAa,YAAY;;CAEvB,MAAM,UAAyB;EAC7B,IAAI,CAAC,WAAW;GACd,iBAAiB,MAAM;GACvB,YAAY;EACd;EAEA,MAAM,YAAY,WAAW;EAE7B,MAAM,OAAO,IAAI,kBAAkB;EAEnC,KAAK,WAAW,CAAC,CAAC;EAClB,MAAM,KAAK,QAAQ;EAEnB,aAAa;EACb,MAAM,MAAM,IAAI,IAAI;CACtB;;CAGA,MAAM,UAAyB;EAC7B,IAAI,CAAC,WAAW;EAEhB,MAAM,OAAO;EAEb,aAAa;EACb,YAAY;EAEZ,IAAI,gBAAgB,MAAM,MAAM,IAAI,cAAc;OAC7C,MAAM,gBAAgB;EAE3B,iBAAiB;EAEjB,MAAM,MAAM,WAAW;CACzB;CAEA,cAAuB;EACrB,OAAO;CACT;;CAGA,SAA4B;EAC1B,OAAO,OAAO;CAChB;;CAGA,MAAM,QAAuB;EAC3B,MAAM,OAAO,CAAC,CAAC,MAAM;CACvB;;CAGA,MAAM,UAAU,KAA8B;EAC5C,IAAI,CAAE,MAAM,OAAO,CAAC,CAAC,IAAI,GAAG,GAC1B,MAAM,IAAI,mBACR,sBAAsB,KAAK,UAAU,GAAG,EAAE,2BAA2B,KAAK,UAAU,OAAO,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAClH;CAEJ;;CAGA,MAAM,cAAc,KAA8B;EAChD,IAAI,MAAM,OAAO,CAAC,CAAC,IAAI,GAAG,GACxB,MAAM,IAAI,mBACR,sBAAsB,KAAK,UAAU,GAAG,EAAE,+BAA+B,KAAK,UAAU,MAAM,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,EACnH;CAEJ;;CAGA,MAAM,aAAa,KAAe,OAA+B;EAC/D,MAAM,SAAkB,MAAM,OAAO,CAAC,CAAC,IAAI,GAAG;EAE9C,IAAI,CAAC,kBAAkB,QAAQ,KAAK,GAClC,MAAM,IAAI,mBACR,sBAAsB,KAAK,UAAU,GAAG,EAAE,WAAW,KAAK,UAAU,KAAK,EAAE,iBAAiB,KAAK,UAAU,MAAM,EAAE,EACrH;CAEJ;AACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//#region ../../packages/core/src/tests/fakes/clock-fake.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* The instant the fake clock starts at: 2026-01-01T00:00:00.000Z. Fixed so a
|
|
4
|
+
* snapshot or an expiry computed in a test is the same on every run.
|
|
5
|
+
*/
|
|
6
|
+
export declare const DEFAULT_FAKE_NOW: number;
|
|
7
|
+
/**
|
|
8
|
+
* A frozen `clock` (from `@warlock.js/core`) that only moves when told to.
|
|
9
|
+
*
|
|
10
|
+
* Installed by default in the test environment, frozen at
|
|
11
|
+
* {@link DEFAULT_FAKE_NOW}. It replaces only the framework clock: `Date`,
|
|
12
|
+
* `setTimeout` and drivers keep real time, so nothing stalls.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* const token = await issueResetToken(user); // expires in 15 minutes
|
|
16
|
+
*
|
|
17
|
+
* clockFake.travel(16 * 60_000);
|
|
18
|
+
*
|
|
19
|
+
* expect(await isResetTokenValid(token)).toBe(false);
|
|
20
|
+
*/
|
|
21
|
+
export declare const clockFake: {
|
|
22
|
+
/** Freeze the clock at `at` (default {@link DEFAULT_FAKE_NOW}). */
|
|
23
|
+
install(at?: Date | string | number): void;
|
|
24
|
+
/** Hand the clock back to real time. */
|
|
25
|
+
restore(): void;
|
|
26
|
+
isInstalled(): boolean;
|
|
27
|
+
/** Freeze at a given instant (installs the fake if needed). */
|
|
28
|
+
freeze(at?: Date | string | number): Date;
|
|
29
|
+
/** Move the frozen clock by `milliseconds` (negative goes back). */
|
|
30
|
+
travel(milliseconds: number): Date;
|
|
31
|
+
/** Jump the frozen clock to an instant. */
|
|
32
|
+
travelTo(at: Date | string | number): Date;
|
|
33
|
+
/** The fake clock's current time. */
|
|
34
|
+
now(): Date;
|
|
35
|
+
};
|
|
36
|
+
//#endregion
|
|
37
|
+
//# sourceMappingURL=clock-fake.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock-fake.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/tests/fakes/clock-fake.ts"],"mappings":";;;;;qBAMa;;;;;;;;;;;;;;;qBA6BA;;EAEX,QAAO,KAAK;;EAOZ;EAMA;;EAKA,OAAM,KAAK,yBAA8D;;EAOzE,OAAM,uBAAwB;;EAS9B,SAAQ,IAAK,yBAAyB;;EAKtC,OAAO"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { setClockSource } from "../../utils/clock.mjs";
|
|
2
|
+
|
|
3
|
+
//#region ../../packages/core/src/tests/fakes/clock-fake.ts
|
|
4
|
+
/**
|
|
5
|
+
* The instant the fake clock starts at: 2026-01-01T00:00:00.000Z. Fixed so a
|
|
6
|
+
* snapshot or an expiry computed in a test is the same on every run.
|
|
7
|
+
*/
|
|
8
|
+
const DEFAULT_FAKE_NOW = Date.UTC(2026, 0, 1, 0, 0, 0, 0);
|
|
9
|
+
let now = DEFAULT_FAKE_NOW;
|
|
10
|
+
let installed = false;
|
|
11
|
+
function toTimestamp(value) {
|
|
12
|
+
const timestamp = value instanceof Date ? value.getTime() : new Date(value).getTime();
|
|
13
|
+
if (Number.isNaN(timestamp)) throw new RangeError(`clockFake cannot travel to ${JSON.stringify(value)}: not a valid date.`);
|
|
14
|
+
return timestamp;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A frozen `clock` (from `@warlock.js/core`) that only moves when told to.
|
|
18
|
+
*
|
|
19
|
+
* Installed by default in the test environment, frozen at
|
|
20
|
+
* {@link DEFAULT_FAKE_NOW}. It replaces only the framework clock: `Date`,
|
|
21
|
+
* `setTimeout` and drivers keep real time, so nothing stalls.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* const token = await issueResetToken(user); // expires in 15 minutes
|
|
25
|
+
*
|
|
26
|
+
* clockFake.travel(16 * 60_000);
|
|
27
|
+
*
|
|
28
|
+
* expect(await isResetTokenValid(token)).toBe(false);
|
|
29
|
+
*/
|
|
30
|
+
const clockFake = {
|
|
31
|
+
/** Freeze the clock at `at` (default {@link DEFAULT_FAKE_NOW}). */
|
|
32
|
+
install(at = DEFAULT_FAKE_NOW) {
|
|
33
|
+
now = toTimestamp(at);
|
|
34
|
+
installed = true;
|
|
35
|
+
setClockSource({ now: () => now });
|
|
36
|
+
},
|
|
37
|
+
/** Hand the clock back to real time. */
|
|
38
|
+
restore() {
|
|
39
|
+
installed = false;
|
|
40
|
+
now = DEFAULT_FAKE_NOW;
|
|
41
|
+
setClockSource(void 0);
|
|
42
|
+
},
|
|
43
|
+
isInstalled() {
|
|
44
|
+
return installed;
|
|
45
|
+
},
|
|
46
|
+
/** Freeze at a given instant (installs the fake if needed). */
|
|
47
|
+
freeze(at = installed ? now : DEFAULT_FAKE_NOW) {
|
|
48
|
+
clockFake.install(at);
|
|
49
|
+
return new Date(now);
|
|
50
|
+
},
|
|
51
|
+
/** Move the frozen clock by `milliseconds` (negative goes back). */
|
|
52
|
+
travel(milliseconds) {
|
|
53
|
+
if (!installed) clockFake.install();
|
|
54
|
+
now += milliseconds;
|
|
55
|
+
return new Date(now);
|
|
56
|
+
},
|
|
57
|
+
/** Jump the frozen clock to an instant. */
|
|
58
|
+
travelTo(at) {
|
|
59
|
+
return clockFake.freeze(at);
|
|
60
|
+
},
|
|
61
|
+
/** The fake clock's current time. */
|
|
62
|
+
now() {
|
|
63
|
+
return new Date(now);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
//#endregion
|
|
68
|
+
export { DEFAULT_FAKE_NOW, clockFake };
|
|
69
|
+
//# sourceMappingURL=clock-fake.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock-fake.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/tests/fakes/clock-fake.ts"],"sourcesContent":["import { setClockSource } from \"../../utils/clock\";\n\n/**\n * The instant the fake clock starts at: 2026-01-01T00:00:00.000Z. Fixed so a\n * snapshot or an expiry computed in a test is the same on every run.\n */\nexport const DEFAULT_FAKE_NOW = Date.UTC(2026, 0, 1, 0, 0, 0, 0);\n\nlet now = DEFAULT_FAKE_NOW;\nlet installed = false;\n\nfunction toTimestamp(value: Date | string | number): number {\n const timestamp = value instanceof Date ? value.getTime() : new Date(value).getTime();\n\n if (Number.isNaN(timestamp)) {\n throw new RangeError(`clockFake cannot travel to ${JSON.stringify(value)}: not a valid date.`);\n }\n\n return timestamp;\n}\n\n/**\n * A frozen `clock` (from `@warlock.js/core`) that only moves when told to.\n *\n * Installed by default in the test environment, frozen at\n * {@link DEFAULT_FAKE_NOW}. It replaces only the framework clock: `Date`,\n * `setTimeout` and drivers keep real time, so nothing stalls.\n *\n * @example\n * const token = await issueResetToken(user); // expires in 15 minutes\n *\n * clockFake.travel(16 * 60_000);\n *\n * expect(await isResetTokenValid(token)).toBe(false);\n */\nexport const clockFake = {\n /** Freeze the clock at `at` (default {@link DEFAULT_FAKE_NOW}). */\n install(at: Date | string | number = DEFAULT_FAKE_NOW): void {\n now = toTimestamp(at);\n installed = true;\n setClockSource({ now: () => now });\n },\n\n /** Hand the clock back to real time. */\n restore(): void {\n installed = false;\n now = DEFAULT_FAKE_NOW;\n setClockSource(undefined);\n },\n\n isInstalled(): boolean {\n return installed;\n },\n\n /** Freeze at a given instant (installs the fake if needed). */\n freeze(at: Date | string | number = installed ? now : DEFAULT_FAKE_NOW): Date {\n clockFake.install(at);\n\n return new Date(now);\n },\n\n /** Move the frozen clock by `milliseconds` (negative goes back). */\n travel(milliseconds: number): Date {\n if (!installed) clockFake.install();\n\n now += milliseconds;\n\n return new Date(now);\n },\n\n /** Jump the frozen clock to an instant. */\n travelTo(at: Date | string | number): Date {\n return clockFake.freeze(at);\n },\n\n /** The fake clock's current time. */\n now(): Date {\n return new Date(now);\n },\n};\n"],"mappings":";;;;;;;AAMA,MAAa,mBAAmB,KAAK,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE/D,IAAI,MAAM;AACV,IAAI,YAAY;AAEhB,SAAS,YAAY,OAAuC;CAC1D,MAAM,YAAY,iBAAiB,OAAO,MAAM,QAAQ,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,QAAQ;CAEpF,IAAI,OAAO,MAAM,SAAS,GACxB,MAAM,IAAI,WAAW,8BAA8B,KAAK,UAAU,KAAK,EAAE,oBAAoB;CAG/F,OAAO;AACT;;;;;;;;;;;;;;;AAgBA,MAAa,YAAY;;CAEvB,QAAQ,KAA6B,kBAAwB;EAC3D,MAAM,YAAY,EAAE;EACpB,YAAY;EACZ,eAAe,EAAE,WAAW,IAAI,CAAC;CACnC;;CAGA,UAAgB;EACd,YAAY;EACZ,MAAM;EACN,eAAe,MAAS;CAC1B;CAEA,cAAuB;EACrB,OAAO;CACT;;CAGA,OAAO,KAA6B,YAAY,MAAM,kBAAwB;EAC5E,UAAU,QAAQ,EAAE;EAEpB,OAAO,IAAI,KAAK,GAAG;CACrB;;CAGA,OAAO,cAA4B;EACjC,IAAI,CAAC,WAAW,UAAU,QAAQ;EAElC,OAAO;EAEP,OAAO,IAAI,KAAK,GAAG;CACrB;;CAGA,SAAS,IAAkC;EACzC,OAAO,UAAU,OAAO,EAAE;CAC5B;;CAGA,MAAY;EACV,OAAO,IAAI,KAAK,GAAG;CACrB;AACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region ../../packages/core/src/tests/fakes/fake-assertion-error.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Thrown by a fake's `assert*` helper. The message says what was expected and
|
|
4
|
+
* lists what the fake actually recorded, so a failing test explains itself.
|
|
5
|
+
*/
|
|
6
|
+
export declare class FakeAssertionError extends Error {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
/** Render recorded entries for an assertion message, one per line. */
|
|
10
|
+
export declare function describeRecorded<T>(entries: readonly T[], describe: (entry: T) => string, noun: string): string;
|
|
11
|
+
//#endregion
|
|
12
|
+
//# sourceMappingURL=fake-assertion-error.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake-assertion-error.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/tests/fakes/fake-assertion-error.ts"],"mappings":";;;;;qBAIa,2BAA2B;EACtC,YAAmB;;;wBAQL,iBAAiB,GAC/B,kBAAkB,KAClB,WAAW,OAAO,cAClB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region ../../packages/core/src/tests/fakes/fake-assertion-error.ts
|
|
2
|
+
/**
|
|
3
|
+
* Thrown by a fake's `assert*` helper. The message says what was expected and
|
|
4
|
+
* lists what the fake actually recorded, so a failing test explains itself.
|
|
5
|
+
*/
|
|
6
|
+
var FakeAssertionError = class extends Error {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = "FakeAssertionError";
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
/** Render recorded entries for an assertion message, one per line. */
|
|
13
|
+
function describeRecorded(entries, describe, noun) {
|
|
14
|
+
if (entries.length === 0) return `Nothing was ${noun}.`;
|
|
15
|
+
return `${entries.length} ${entries.length === 1 ? "entry was" : "entries were"} ${noun}:\n${entries.map((entry, index) => ` ${index + 1}. ${describe(entry)}`).join("\n")}`;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { FakeAssertionError, describeRecorded };
|
|
20
|
+
//# sourceMappingURL=fake-assertion-error.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake-assertion-error.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/tests/fakes/fake-assertion-error.ts"],"sourcesContent":["/**\n * Thrown by a fake's `assert*` helper. The message says what was expected and\n * lists what the fake actually recorded, so a failing test explains itself.\n */\nexport class FakeAssertionError extends Error {\n public constructor(message: string) {\n super(message);\n\n this.name = \"FakeAssertionError\";\n }\n}\n\n/** Render recorded entries for an assertion message, one per line. */\nexport function describeRecorded<T>(\n entries: readonly T[],\n describe: (entry: T) => string,\n noun: string,\n): string {\n if (entries.length === 0) return `Nothing was ${noun}.`;\n\n return `${entries.length} ${entries.length === 1 ? \"entry was\" : \"entries were\"} ${noun}:\\n${entries\n .map((entry, index) => ` ${index + 1}. ${describe(entry)}`)\n .join(\"\\n\")}`;\n}\n"],"mappings":";;;;;AAIA,IAAa,qBAAb,cAAwC,MAAM;CAC5C,AAAO,YAAY,SAAiB;EAClC,MAAM,OAAO;EAEb,KAAK,OAAO;CACd;AACF;;AAGA,SAAgB,iBACd,SACA,UACA,MACQ;CACR,IAAI,QAAQ,WAAW,GAAG,OAAO,eAAe,KAAK;CAErD,OAAO,GAAG,QAAQ,OAAO,GAAG,QAAQ,WAAW,IAAI,cAAc,eAAe,GAAG,KAAK,KAAK,QAC1F,KAAK,OAAO,UAAU,KAAK,QAAQ,EAAE,IAAI,SAAS,KAAK,GAAG,CAAC,CAC3D,KAAK,IAAI;AACd"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region ../../packages/core/src/tests/fakes/ids-fake.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Deterministic `ids` (from `@warlock.js/core`): numbered UUIDs and tokens.
|
|
4
|
+
*
|
|
5
|
+
* Installed by default in the test environment. Each sequence restarts on
|
|
6
|
+
* install and on `reset()`, so the n-th id in a test is the same on every run.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* const file = await storeReport(report); // named ids.uuid() + ".pdf"
|
|
10
|
+
*
|
|
11
|
+
* expect(file.path).toBe("reports/00000000-0000-4000-8000-000000000001.pdf");
|
|
12
|
+
*/
|
|
13
|
+
export declare const idsFake: {
|
|
14
|
+
install(): void;
|
|
15
|
+
restore(): void;
|
|
16
|
+
isInstalled(): boolean;
|
|
17
|
+
/** Restart both sequences. */
|
|
18
|
+
reset(): void;
|
|
19
|
+
/** The UUID the n-th `ids.uuid()` call returns (1-based). */
|
|
20
|
+
uuid(n: number): string;
|
|
21
|
+
};
|
|
22
|
+
//#endregion
|
|
23
|
+
//# sourceMappingURL=ids-fake.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids-fake.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/tests/fakes/ids-fake.ts"],"mappings":";;;;;;;;;;;;qBA6Ba;EACX;EASA;EAMA;;EAKA;;EAMA,KAAI"}
|