@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
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { router } from "../../../router/router.mjs";
|
|
2
|
-
import { resolveBuildConfig } from "../../../production/resolve-build-config.mjs";
|
|
3
2
|
import { bootForDiagnostics } from "../doctor/boot-for-diagnostics.mjs";
|
|
3
|
+
import { resolveBuildConfig } from "../../../production/resolve-build-config.mjs";
|
|
4
4
|
import { comparePageRoutes, diffPageRoutes } from "./diff-page-routes.mjs";
|
|
5
5
|
import path from "node:path";
|
|
6
|
-
import
|
|
6
|
+
import fsSync from "node:fs";
|
|
7
7
|
|
|
8
8
|
//#region ../../packages/core/src/cli/commands/routes/routes-diff.action.ts
|
|
9
9
|
const SNAPSHOT_FILE = "page-routes.manifest.json";
|
|
@@ -26,7 +26,7 @@ function snapshotPath() {
|
|
|
26
26
|
function readSnapshot(file) {
|
|
27
27
|
let raw;
|
|
28
28
|
try {
|
|
29
|
-
raw =
|
|
29
|
+
raw = fsSync.readFileSync(file, "utf-8");
|
|
30
30
|
} catch {
|
|
31
31
|
throw new Error(`Cannot compare page routes: no build snapshot exists at "${file}". Run \`warlock build\` successfully, then run \`warlock routes:diff\` again.`);
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes-diff.action.mjs","names":[],"sources":["../../../../../../../../../../packages/core/src/cli/commands/routes/routes-diff.action.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { resolveBuildConfig } from \"../../../production/resolve-build-config\";\nimport { router } from \"../../../router/router\";\nimport type { Route } from \"../../../router/types\";\nimport { bootForDiagnostics } from \"../doctor/boot-for-diagnostics\";\nimport { comparePageRoutes, diffPageRoutes, type PageRoute } from \"./diff-page-routes\";\n\ntype PageRoutesSnapshot = {\n version: 1;\n routes: PageRoute[];\n};\n\nconst SNAPSHOT_FILE = \"page-routes.manifest.json\";\n\n/**\n * What a clean `warlock routes:diff` does and does NOT prove, printed on a\n * clean run so the guarantee is stated where it is relied on.\n */\nconst CLEAN_RUN_LIMIT =\n \"Note: page names are compared as DERIVED by the build, so a clean diff does not prove \" +\n \"that no route name collided at registration (the router appends `.<method>` to a name \" +\n \"already claimed by another method). Run `warlock routes` to see the registered names.\";\n\nfunction routeFromLive(route: Route): PageRoute {\n return {\n method: route.method.toUpperCase() as \"GET\",\n path: route.path,\n name: route.name ?? \"\",\n source: route.sourceFile ?? \"\",\n };\n}\n\nfunction snapshotPath(): string {\n return path.join(resolveBuildConfig().outdir, SNAPSHOT_FILE);\n}\n\nfunction readSnapshot(file: string): PageRoutesSnapshot {\n let raw: string;\n\n try {\n raw = fs.readFileSync(file, \"utf-8\");\n } catch {\n throw new Error(\n `Cannot compare page routes: no build snapshot exists at \"${file}\". Run \\`warlock build\\` successfully, then run \\`warlock routes:diff\\` again.`,\n );\n }\n\n try {\n const parsed: unknown = JSON.parse(raw);\n\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n (parsed as { version?: unknown }).version !== 1 ||\n !Array.isArray((parsed as { routes?: unknown }).routes) ||\n !(parsed as { routes: unknown[] }).routes.every(\n (route) =>\n typeof route === \"object\" &&\n route !== null &&\n (route as PageRoute).method === \"GET\" &&\n typeof (route as PageRoute).path === \"string\" &&\n typeof (route as PageRoute).name === \"string\" &&\n typeof (route as PageRoute).source === \"string\",\n )\n ) {\n throw new Error(\"invalid shape\");\n }\n\n return parsed as PageRoutesSnapshot;\n } catch {\n throw new Error(\n `Cannot compare page routes: build snapshot \"${file}\" is malformed. Run \\`warlock build\\` successfully to replace it, then retry.`,\n );\n }\n}\n\nfunction printRoute(prefix: string, route: PageRoute): void {\n const source = route.source ? ` (${route.source})` : \"\";\n console.log(`${prefix} GET ${route.path} ${route.name}${source}`);\n}\n\n/**\n * Compare the last successful production page surface with the live dev\n * surface.\n *\n * The comparison itself lives in `diff-page-routes.ts`, which also documents\n * why the route-name method suffix is the one registration-time difference the\n * build-time manifest cannot record — and therefore what a clean run of this\n * command does not prove.\n */\nexport async function routesDiffCommandAction(): Promise<void> {\n const snapshot = readSnapshot(snapshotPath());\n const context = await bootForDiagnostics();\n\n if (\n !context.booted ||\n context.moduleFailures.length > 0 ||\n context.connectors.failures.length > 0 ||\n context.connectors.registrationError !== undefined\n ) {\n const details = [\n ...context.moduleFailures.map(({ file, message }) => `${file}: ${message}`),\n ...context.connectors.failures.map(({ name, message }) => `${name}: ${message}`),\n ...(context.connectors.registrationError ? [context.connectors.registrationError] : []),\n ];\n throw new Error(\n `Cannot compare page routes because diagnostic boot failed.${details.length ? `\\n${details.join(\"\\n\")}` : \"\"}`,\n );\n }\n\n const live = router\n .list()\n .filter((route) => route.isPage)\n .map(routeFromLive)\n .sort(comparePageRoutes);\n const expected = [...snapshot.routes].sort(comparePageRoutes);\n const { changes, removed, added } = diffPageRoutes(expected, live);\n\n if (changes.length === 0 && removed.length === 0 && added.length === 0) {\n console.log(`Page routes match (${expected.length} routes).`);\n console.log(CLEAN_RUN_LIMIT);\n return;\n }\n\n for (const { before, after } of changes) {\n printRoute(\"changed -\", before);\n printRoute(\" +\", after);\n }\n for (const route of removed) printRoute(\"removed -\", route);\n for (const route of added) printRoute(\"added +\", route);\n\n throw new Error(\n `Page route drift: ${changes.length} changed, ${removed.length} removed, ${added.length} added. Run \\`warlock build\\` after reviewing these changes.`,\n );\n}\n"],"mappings":";;;;;;;;AAaA,MAAM,gBAAgB;;;;;AAMtB,MAAM,kBACJ;AAIF,SAAS,cAAc,OAAyB;CAC9C,OAAO;EACL,QAAQ,MAAM,OAAO,YAAY;EACjC,MAAM,MAAM;EACZ,MAAM,MAAM,QAAQ;EACpB,QAAQ,MAAM,cAAc;CAC9B;AACF;AAEA,SAAS,eAAuB;CAC9B,OAAO,KAAK,KAAK,mBAAmB,CAAC,CAAC,QAAQ,aAAa;AAC7D;AAEA,SAAS,aAAa,MAAkC;CACtD,IAAI;CAEJ,IAAI;EACF,
|
|
1
|
+
{"version":3,"file":"routes-diff.action.mjs","names":["fs"],"sources":["../../../../../../../../../../packages/core/src/cli/commands/routes/routes-diff.action.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { resolveBuildConfig } from \"../../../production/resolve-build-config\";\nimport { router } from \"../../../router/router\";\nimport type { Route } from \"../../../router/types\";\nimport { bootForDiagnostics } from \"../doctor/boot-for-diagnostics\";\nimport { comparePageRoutes, diffPageRoutes, type PageRoute } from \"./diff-page-routes\";\n\ntype PageRoutesSnapshot = {\n version: 1;\n routes: PageRoute[];\n};\n\nconst SNAPSHOT_FILE = \"page-routes.manifest.json\";\n\n/**\n * What a clean `warlock routes:diff` does and does NOT prove, printed on a\n * clean run so the guarantee is stated where it is relied on.\n */\nconst CLEAN_RUN_LIMIT =\n \"Note: page names are compared as DERIVED by the build, so a clean diff does not prove \" +\n \"that no route name collided at registration (the router appends `.<method>` to a name \" +\n \"already claimed by another method). Run `warlock routes` to see the registered names.\";\n\nfunction routeFromLive(route: Route): PageRoute {\n return {\n method: route.method.toUpperCase() as \"GET\",\n path: route.path,\n name: route.name ?? \"\",\n source: route.sourceFile ?? \"\",\n };\n}\n\nfunction snapshotPath(): string {\n return path.join(resolveBuildConfig().outdir, SNAPSHOT_FILE);\n}\n\nfunction readSnapshot(file: string): PageRoutesSnapshot {\n let raw: string;\n\n try {\n raw = fs.readFileSync(file, \"utf-8\");\n } catch {\n throw new Error(\n `Cannot compare page routes: no build snapshot exists at \"${file}\". Run \\`warlock build\\` successfully, then run \\`warlock routes:diff\\` again.`,\n );\n }\n\n try {\n const parsed: unknown = JSON.parse(raw);\n\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n (parsed as { version?: unknown }).version !== 1 ||\n !Array.isArray((parsed as { routes?: unknown }).routes) ||\n !(parsed as { routes: unknown[] }).routes.every(\n (route) =>\n typeof route === \"object\" &&\n route !== null &&\n (route as PageRoute).method === \"GET\" &&\n typeof (route as PageRoute).path === \"string\" &&\n typeof (route as PageRoute).name === \"string\" &&\n typeof (route as PageRoute).source === \"string\",\n )\n ) {\n throw new Error(\"invalid shape\");\n }\n\n return parsed as PageRoutesSnapshot;\n } catch {\n throw new Error(\n `Cannot compare page routes: build snapshot \"${file}\" is malformed. Run \\`warlock build\\` successfully to replace it, then retry.`,\n );\n }\n}\n\nfunction printRoute(prefix: string, route: PageRoute): void {\n const source = route.source ? ` (${route.source})` : \"\";\n console.log(`${prefix} GET ${route.path} ${route.name}${source}`);\n}\n\n/**\n * Compare the last successful production page surface with the live dev\n * surface.\n *\n * The comparison itself lives in `diff-page-routes.ts`, which also documents\n * why the route-name method suffix is the one registration-time difference the\n * build-time manifest cannot record — and therefore what a clean run of this\n * command does not prove.\n */\nexport async function routesDiffCommandAction(): Promise<void> {\n const snapshot = readSnapshot(snapshotPath());\n const context = await bootForDiagnostics();\n\n if (\n !context.booted ||\n context.moduleFailures.length > 0 ||\n context.connectors.failures.length > 0 ||\n context.connectors.registrationError !== undefined\n ) {\n const details = [\n ...context.moduleFailures.map(({ file, message }) => `${file}: ${message}`),\n ...context.connectors.failures.map(({ name, message }) => `${name}: ${message}`),\n ...(context.connectors.registrationError ? [context.connectors.registrationError] : []),\n ];\n throw new Error(\n `Cannot compare page routes because diagnostic boot failed.${details.length ? `\\n${details.join(\"\\n\")}` : \"\"}`,\n );\n }\n\n const live = router\n .list()\n .filter((route) => route.isPage)\n .map(routeFromLive)\n .sort(comparePageRoutes);\n const expected = [...snapshot.routes].sort(comparePageRoutes);\n const { changes, removed, added } = diffPageRoutes(expected, live);\n\n if (changes.length === 0 && removed.length === 0 && added.length === 0) {\n console.log(`Page routes match (${expected.length} routes).`);\n console.log(CLEAN_RUN_LIMIT);\n return;\n }\n\n for (const { before, after } of changes) {\n printRoute(\"changed -\", before);\n printRoute(\" +\", after);\n }\n for (const route of removed) printRoute(\"removed -\", route);\n for (const route of added) printRoute(\"added +\", route);\n\n throw new Error(\n `Page route drift: ${changes.length} changed, ${removed.length} removed, ${added.length} added. Run \\`warlock build\\` after reviewing these changes.`,\n );\n}\n"],"mappings":";;;;;;;;AAaA,MAAM,gBAAgB;;;;;AAMtB,MAAM,kBACJ;AAIF,SAAS,cAAc,OAAyB;CAC9C,OAAO;EACL,QAAQ,MAAM,OAAO,YAAY;EACjC,MAAM,MAAM;EACZ,MAAM,MAAM,QAAQ;EACpB,QAAQ,MAAM,cAAc;CAC9B;AACF;AAEA,SAAS,eAAuB;CAC9B,OAAO,KAAK,KAAK,mBAAmB,CAAC,CAAC,QAAQ,aAAa;AAC7D;AAEA,SAAS,aAAa,MAAkC;CACtD,IAAI;CAEJ,IAAI;EACF,MAAMA,OAAG,aAAa,MAAM,OAAO;CACrC,QAAQ;EACN,MAAM,IAAI,MACR,4DAA4D,KAAK,+EACnE;CACF;CAEA,IAAI;EACF,MAAM,SAAkB,KAAK,MAAM,GAAG;EAEtC,IACE,OAAO,WAAW,YAClB,WAAW,QACV,OAAiC,YAAY,KAC9C,CAAC,MAAM,QAAS,OAAgC,MAAM,KACtD,CAAE,OAAiC,OAAO,OACvC,UACC,OAAO,UAAU,YACjB,UAAU,QACT,MAAoB,WAAW,SAChC,OAAQ,MAAoB,SAAS,YACrC,OAAQ,MAAoB,SAAS,YACrC,OAAQ,MAAoB,WAAW,QAC3C,GAEA,MAAM,IAAI,MAAM,eAAe;EAGjC,OAAO;CACT,QAAQ;EACN,MAAM,IAAI,MACR,+CAA+C,KAAK,8EACtD;CACF;AACF;AAEA,SAAS,WAAW,QAAgB,OAAwB;CAC1D,MAAM,SAAS,MAAM,SAAS,KAAK,MAAM,OAAO,KAAK;CACrD,QAAQ,IAAI,GAAG,OAAO,OAAO,MAAM,KAAK,IAAI,MAAM,OAAO,QAAQ;AACnE;;;;;;;;;;AAWA,eAAsB,0BAAyC;CAC7D,MAAM,WAAW,aAAa,aAAa,CAAC;CAC5C,MAAM,UAAU,MAAM,mBAAmB;CAEzC,IACE,CAAC,QAAQ,UACT,QAAQ,eAAe,SAAS,KAChC,QAAQ,WAAW,SAAS,SAAS,KACrC,QAAQ,WAAW,sBAAsB,QACzC;EACA,MAAM,UAAU;GACd,GAAG,QAAQ,eAAe,KAAK,EAAE,MAAM,cAAc,GAAG,KAAK,IAAI,SAAS;GAC1E,GAAG,QAAQ,WAAW,SAAS,KAAK,EAAE,MAAM,cAAc,GAAG,KAAK,IAAI,SAAS;GAC/E,GAAI,QAAQ,WAAW,oBAAoB,CAAC,QAAQ,WAAW,iBAAiB,IAAI,CAAC;EACvF;EACA,MAAM,IAAI,MACR,6DAA6D,QAAQ,SAAS,KAAK,QAAQ,KAAK,IAAI,MAAM,IAC5G;CACF;CAEA,MAAM,OAAO,OACV,KAAK,CAAC,CACN,QAAQ,UAAU,MAAM,MAAM,CAAC,CAC/B,IAAI,aAAa,CAAC,CAClB,KAAK,iBAAiB;CACzB,MAAM,WAAW,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC,KAAK,iBAAiB;CAC5D,MAAM,EAAE,SAAS,SAAS,UAAU,eAAe,UAAU,IAAI;CAEjE,IAAI,QAAQ,WAAW,KAAK,QAAQ,WAAW,KAAK,MAAM,WAAW,GAAG;EACtE,QAAQ,IAAI,sBAAsB,SAAS,OAAO,UAAU;EAC5D,QAAQ,IAAI,eAAe;EAC3B;CACF;CAEA,KAAK,MAAM,EAAE,QAAQ,WAAW,SAAS;EACvC,WAAW,aAAa,MAAM;EAC9B,WAAW,aAAa,KAAK;CAC/B;CACA,KAAK,MAAM,SAAS,SAAS,WAAW,aAAa,KAAK;CAC1D,KAAK,MAAM,SAAS,OAAO,WAAW,aAAa,KAAK;CAExD,MAAM,IAAI,MACR,qBAAqB,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,MAAM,OAAO,6DAC1F;AACF"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { command } from "../../commands/cli-command.mjs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
5
|
+
import { spawn } from "node:child_process";
|
|
6
|
+
|
|
7
|
+
//#region ../../packages/core/src/cli/commands/test.command.ts
|
|
8
|
+
/**
|
|
9
|
+
* Translate `warlock test` options into Vitest arguments. Pure, so the mapping
|
|
10
|
+
* is pinned by a test rather than discovered in CI.
|
|
11
|
+
*
|
|
12
|
+
* Flags used (verified against `vitest --help`, Vitest 4.1):
|
|
13
|
+
* `run`, `related [...filters]`, `--changed [since]`, `--passWithNoTests`,
|
|
14
|
+
* `--reporter <name>`, `--testNamePattern <pattern>`.
|
|
15
|
+
*/
|
|
16
|
+
function buildVitestArguments(options) {
|
|
17
|
+
const related = options.related ?? [];
|
|
18
|
+
const args = [];
|
|
19
|
+
if (related.length > 0) {
|
|
20
|
+
args.push("related", ...related, ...options.filters);
|
|
21
|
+
if (!options.watch) args.push("--run");
|
|
22
|
+
} else {
|
|
23
|
+
if (!options.watch) args.push("run");
|
|
24
|
+
args.push(...options.filters);
|
|
25
|
+
}
|
|
26
|
+
if (options.changed || options.since) {
|
|
27
|
+
args.push("--changed");
|
|
28
|
+
if (options.since) args.push(options.since);
|
|
29
|
+
}
|
|
30
|
+
if (related.length > 0 || options.changed || options.since) args.push("--passWithNoTests");
|
|
31
|
+
if (options.testNamePattern) args.push("--testNamePattern", options.testNamePattern);
|
|
32
|
+
if (options.json) args.push("--reporter=json");
|
|
33
|
+
return args;
|
|
34
|
+
}
|
|
35
|
+
/** Read `warlock test`'s parsed CLI input into {@link TestCommandOptions}. */
|
|
36
|
+
function readTestCommandOptions(data) {
|
|
37
|
+
const text = (value) => typeof value === "string" && value.trim() !== "" ? value.trim() : void 0;
|
|
38
|
+
const relatedOption = text(data.options.related);
|
|
39
|
+
return {
|
|
40
|
+
filters: data.args,
|
|
41
|
+
changed: data.options.changed === true,
|
|
42
|
+
since: text(data.options.since),
|
|
43
|
+
related: relatedOption ? relatedOption.split(",").map((file) => file.trim()).filter(Boolean) : void 0,
|
|
44
|
+
watch: data.options.watch === true,
|
|
45
|
+
json: data.options.json === true,
|
|
46
|
+
testNamePattern: text(data.options.testNamePattern) ?? text(data.options.t)
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The project's own Vitest entry (`vitest.mjs`), resolved from the project
|
|
51
|
+
* root — never a global or an `npx` download.
|
|
52
|
+
*/
|
|
53
|
+
function resolveProjectVitest(projectRoot, resolve = createRequire(path.join(projectRoot, "package.json")).resolve) {
|
|
54
|
+
let manifestPath;
|
|
55
|
+
try {
|
|
56
|
+
manifestPath = resolve("vitest/package.json");
|
|
57
|
+
} catch {
|
|
58
|
+
throw new Error(`Vitest is not installed in ${projectRoot}. Run \`warlock add test\` (or install vitest as a dev dependency) first.`);
|
|
59
|
+
}
|
|
60
|
+
const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
|
|
61
|
+
const bin = typeof manifest.bin === "string" ? manifest.bin : manifest.bin?.vitest;
|
|
62
|
+
const entry = path.join(path.dirname(manifestPath), bin ?? "vitest.mjs");
|
|
63
|
+
if (!existsSync(entry)) throw new Error(`Vitest's entry point was not found at ${entry}. Reinstall vitest.`);
|
|
64
|
+
return entry;
|
|
65
|
+
}
|
|
66
|
+
async function testCommandAction(data) {
|
|
67
|
+
const options = readTestCommandOptions(data);
|
|
68
|
+
const vitest = resolveProjectVitest(process.cwd());
|
|
69
|
+
const args = buildVitestArguments(options);
|
|
70
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
71
|
+
const child = spawn(process.execPath, [vitest, ...args], {
|
|
72
|
+
cwd: process.cwd(),
|
|
73
|
+
env: {
|
|
74
|
+
...process.env,
|
|
75
|
+
NODE_ENV: "test"
|
|
76
|
+
},
|
|
77
|
+
stdio: "inherit"
|
|
78
|
+
});
|
|
79
|
+
child.once("error", reject);
|
|
80
|
+
child.once("exit", (code, signal) => resolve(code ?? (signal ? 1 : 0)));
|
|
81
|
+
});
|
|
82
|
+
if (exitCode !== 0) process.exit(exitCode);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* `warlock test` — run the project's tests through its own Vitest.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* warlock test # everything, once
|
|
89
|
+
* warlock test --changed # tests affected by uncommitted changes
|
|
90
|
+
* warlock test --changed --since main # ... by changes since main
|
|
91
|
+
* warlock test --related src/app/posts/services/create-post.service.ts
|
|
92
|
+
* warlock test src/app/posts --json # one folder, JSON report on stdout
|
|
93
|
+
*/
|
|
94
|
+
const testCommand = command({
|
|
95
|
+
name: "test [filters...]",
|
|
96
|
+
description: "Run the project's tests with Vitest; --changed / --related run only the tests your change affects",
|
|
97
|
+
action: testCommandAction,
|
|
98
|
+
options: [
|
|
99
|
+
{
|
|
100
|
+
text: "--changed",
|
|
101
|
+
description: "Only run tests affected by uncommitted changes (git)",
|
|
102
|
+
type: "boolean"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
text: "--since <ref>",
|
|
106
|
+
description: "With --changed: tests affected by changes since this git ref (e.g. main)"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
text: "--related <files>",
|
|
110
|
+
description: "Comma-separated source files: only run the tests that import them"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
text: "--watch, -w",
|
|
114
|
+
description: "Re-run on change instead of running once",
|
|
115
|
+
type: "boolean"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
text: "--test-name-pattern, -t",
|
|
119
|
+
description: "Only run tests whose name matches this pattern"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
text: "--json",
|
|
123
|
+
description: "Print Vitest's JSON report on stdout",
|
|
124
|
+
type: "boolean"
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
//#endregion
|
|
130
|
+
export { buildVitestArguments, readTestCommandOptions, resolveProjectVitest, testCommand };
|
|
131
|
+
//# sourceMappingURL=test.command.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.command.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/cli/commands/test.command.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { command } from \"../../commands/cli-command\";\nimport type { CommandActionData } from \"../../commands/types\";\n\n/** What `warlock test` was asked for. */\nexport type TestCommandOptions = {\n /** Positional filters: file paths or name fragments, passed to Vitest. */\n filters: string[];\n /** Only the tests affected by uncommitted changes (or by changes since `since`). */\n changed?: boolean;\n /** A git ref for `changed`: tests affected by changes since this commit or branch. */\n since?: string;\n /** Only the tests that import these source files, directly or not. */\n related?: string[];\n /** Keep running and re-run on change instead of running once. */\n watch?: boolean;\n /** Print Vitest's JSON report on stdout. */\n json?: boolean;\n /** Only tests whose name matches this pattern. */\n testNamePattern?: string;\n};\n\n/**\n * Translate `warlock test` options into Vitest arguments. Pure, so the mapping\n * is pinned by a test rather than discovered in CI.\n *\n * Flags used (verified against `vitest --help`, Vitest 4.1):\n * `run`, `related [...filters]`, `--changed [since]`, `--passWithNoTests`,\n * `--reporter <name>`, `--testNamePattern <pattern>`.\n */\nexport function buildVitestArguments(options: TestCommandOptions): string[] {\n const related = options.related ?? [];\n const args: string[] = [];\n\n if (related.length > 0) {\n // `vitest related` watches by default; `--run` makes it run once.\n args.push(\"related\", ...related, ...options.filters);\n\n if (!options.watch) args.push(\"--run\");\n } else {\n if (!options.watch) args.push(\"run\");\n\n args.push(...options.filters);\n }\n\n if (options.changed || options.since) {\n args.push(\"--changed\");\n\n if (options.since) args.push(options.since);\n }\n\n // \"Run what my change affects\" finding nothing to run is a pass, not an error.\n if (related.length > 0 || options.changed || options.since) args.push(\"--passWithNoTests\");\n\n if (options.testNamePattern) args.push(\"--testNamePattern\", options.testNamePattern);\n\n if (options.json) args.push(\"--reporter=json\");\n\n return args;\n}\n\n/** Read `warlock test`'s parsed CLI input into {@link TestCommandOptions}. */\nexport function readTestCommandOptions(data: CommandActionData): TestCommandOptions {\n const text = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n const relatedOption = text(data.options.related);\n\n return {\n filters: data.args,\n changed: data.options.changed === true,\n since: text(data.options.since),\n related: relatedOption\n ? relatedOption\n .split(\",\")\n .map((file) => file.trim())\n .filter(Boolean)\n : undefined,\n watch: data.options.watch === true,\n json: data.options.json === true,\n testNamePattern: text(data.options.testNamePattern) ?? text(data.options.t),\n };\n}\n\n/**\n * The project's own Vitest entry (`vitest.mjs`), resolved from the project\n * root — never a global or an `npx` download.\n */\nexport function resolveProjectVitest(\n projectRoot: string,\n resolve: (specifier: string) => string = createRequire(path.join(projectRoot, \"package.json\"))\n .resolve,\n): string {\n let manifestPath: string;\n\n try {\n manifestPath = resolve(\"vitest/package.json\");\n } catch {\n throw new Error(\n `Vitest is not installed in ${projectRoot}. Run \\`warlock add test\\` (or install vitest as a dev dependency) first.`,\n );\n }\n\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as {\n bin?: string | Record<string, string>;\n };\n const bin = typeof manifest.bin === \"string\" ? manifest.bin : manifest.bin?.vitest;\n const entry = path.join(path.dirname(manifestPath), bin ?? \"vitest.mjs\");\n\n if (!existsSync(entry)) {\n throw new Error(`Vitest's entry point was not found at ${entry}. Reinstall vitest.`);\n }\n\n return entry;\n}\n\nasync function testCommandAction(data: CommandActionData): Promise<void> {\n const options = readTestCommandOptions(data);\n const vitest = resolveProjectVitest(process.cwd());\n const args = buildVitestArguments(options);\n\n const exitCode = await new Promise<number>((resolve, reject) => {\n const child = spawn(process.execPath, [vitest, ...args], {\n cwd: process.cwd(),\n // Vitest only defaults NODE_ENV to \"test\" when it is unset; an exported\n // NODE_ENV=production would otherwise reach the test server and be refused.\n env: { ...process.env, NODE_ENV: \"test\" },\n stdio: \"inherit\",\n });\n\n child.once(\"error\", reject);\n child.once(\"exit\", (code, signal) => resolve(code ?? (signal ? 1 : 0)));\n });\n\n if (exitCode !== 0) process.exit(exitCode);\n}\n\n/**\n * `warlock test` — run the project's tests through its own Vitest.\n *\n * @example\n * warlock test # everything, once\n * warlock test --changed # tests affected by uncommitted changes\n * warlock test --changed --since main # ... by changes since main\n * warlock test --related src/app/posts/services/create-post.service.ts\n * warlock test src/app/posts --json # one folder, JSON report on stdout\n */\nexport const testCommand = command({\n name: \"test [filters...]\",\n description:\n \"Run the project's tests with Vitest; --changed / --related run only the tests your change affects\",\n action: testCommandAction,\n options: [\n {\n text: \"--changed\",\n description: \"Only run tests affected by uncommitted changes (git)\",\n type: \"boolean\",\n },\n {\n text: \"--since <ref>\",\n description: \"With --changed: tests affected by changes since this git ref (e.g. main)\",\n },\n {\n text: \"--related <files>\",\n description: \"Comma-separated source files: only run the tests that import them\",\n },\n {\n text: \"--watch, -w\",\n description: \"Re-run on change instead of running once\",\n type: \"boolean\",\n },\n {\n text: \"--test-name-pattern, -t\",\n description: \"Only run tests whose name matches this pattern\",\n },\n {\n text: \"--json\",\n description: \"Print Vitest's JSON report on stdout\",\n type: \"boolean\",\n },\n ],\n});\n"],"mappings":";;;;;;;;;;;;;;;AAiCA,SAAgB,qBAAqB,SAAuC;CAC1E,MAAM,UAAU,QAAQ,WAAW,CAAC;CACpC,MAAM,OAAiB,CAAC;CAExB,IAAI,QAAQ,SAAS,GAAG;EAEtB,KAAK,KAAK,WAAW,GAAG,SAAS,GAAG,QAAQ,OAAO;EAEnD,IAAI,CAAC,QAAQ,OAAO,KAAK,KAAK,OAAO;CACvC,OAAO;EACL,IAAI,CAAC,QAAQ,OAAO,KAAK,KAAK,KAAK;EAEnC,KAAK,KAAK,GAAG,QAAQ,OAAO;CAC9B;CAEA,IAAI,QAAQ,WAAW,QAAQ,OAAO;EACpC,KAAK,KAAK,WAAW;EAErB,IAAI,QAAQ,OAAO,KAAK,KAAK,QAAQ,KAAK;CAC5C;CAGA,IAAI,QAAQ,SAAS,KAAK,QAAQ,WAAW,QAAQ,OAAO,KAAK,KAAK,mBAAmB;CAEzF,IAAI,QAAQ,iBAAiB,KAAK,KAAK,qBAAqB,QAAQ,eAAe;CAEnF,IAAI,QAAQ,MAAM,KAAK,KAAK,iBAAiB;CAE7C,OAAO;AACT;;AAGA,SAAgB,uBAAuB,MAA6C;CAClF,MAAM,QAAQ,UACZ,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI;CACpE,MAAM,gBAAgB,KAAK,KAAK,QAAQ,OAAO;CAE/C,OAAO;EACL,SAAS,KAAK;EACd,SAAS,KAAK,QAAQ,YAAY;EAClC,OAAO,KAAK,KAAK,QAAQ,KAAK;EAC9B,SAAS,gBACL,cACG,MAAM,GAAG,CAAC,CACV,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAC1B,OAAO,OAAO,IACjB;EACJ,OAAO,KAAK,QAAQ,UAAU;EAC9B,MAAM,KAAK,QAAQ,SAAS;EAC5B,iBAAiB,KAAK,KAAK,QAAQ,eAAe,KAAK,KAAK,KAAK,QAAQ,CAAC;CAC5E;AACF;;;;;AAMA,SAAgB,qBACd,aACA,UAAyC,cAAc,KAAK,KAAK,aAAa,cAAc,CAAC,CAAC,CAC3F,SACK;CACR,IAAI;CAEJ,IAAI;EACF,eAAe,QAAQ,qBAAqB;CAC9C,QAAQ;EACN,MAAM,IAAI,MACR,8BAA8B,YAAY,0EAC5C;CACF;CAEA,MAAM,WAAW,KAAK,MAAM,aAAa,cAAc,MAAM,CAAC;CAG9D,MAAM,MAAM,OAAO,SAAS,QAAQ,WAAW,SAAS,MAAM,SAAS,KAAK;CAC5E,MAAM,QAAQ,KAAK,KAAK,KAAK,QAAQ,YAAY,GAAG,OAAO,YAAY;CAEvE,IAAI,CAAC,WAAW,KAAK,GACnB,MAAM,IAAI,MAAM,yCAAyC,MAAM,oBAAoB;CAGrF,OAAO;AACT;AAEA,eAAe,kBAAkB,MAAwC;CACvE,MAAM,UAAU,uBAAuB,IAAI;CAC3C,MAAM,SAAS,qBAAqB,QAAQ,IAAI,CAAC;CACjD,MAAM,OAAO,qBAAqB,OAAO;CAEzC,MAAM,WAAW,MAAM,IAAI,SAAiB,SAAS,WAAW;EAC9D,MAAM,QAAQ,MAAM,QAAQ,UAAU,CAAC,QAAQ,GAAG,IAAI,GAAG;GACvD,KAAK,QAAQ,IAAI;GAGjB,KAAK;IAAE,GAAG,QAAQ;IAAK,UAAU;GAAO;GACxC,OAAO;EACT,CAAC;EAED,MAAM,KAAK,SAAS,MAAM;EAC1B,MAAM,KAAK,SAAS,MAAM,WAAW,QAAQ,SAAS,SAAS,IAAI,EAAE,CAAC;CACxE,CAAC;CAED,IAAI,aAAa,GAAG,QAAQ,KAAK,QAAQ;AAC3C;;;;;;;;;;;AAYA,MAAa,cAAc,QAAQ;CACjC,MAAM;CACN,aACE;CACF,QAAQ;CACR,SAAS;EACP;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;EACf;EACA;GACE,MAAM;GACN,aAAa;EACf;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;EACf;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;CACF;AACF,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { ERROR_CODES, errorCodeOf } from "../../../errors/error-codes.mjs";
|
|
2
|
+
import { flushAndExit } from "../../flush-and-exit.mjs";
|
|
3
|
+
import { traceRequest } from "../../../tooling/trace/trace-request.mjs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { readFileSync } from "node:fs";
|
|
6
|
+
import { colors } from "@mongez/copper";
|
|
7
|
+
|
|
8
|
+
//#region ../../packages/core/src/cli/commands/trace/trace-command.action.ts
|
|
9
|
+
function stringOption(value) {
|
|
10
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Every `--header` / `-H` value in `argv`, in order. The CLI parser keeps only
|
|
14
|
+
* the last value of a repeated option, so headers are read from argv directly.
|
|
15
|
+
* Accepts `--header k:v`, `--header=k:v`, `-H k:v` and `-H=k:v`.
|
|
16
|
+
*/
|
|
17
|
+
function collectHeaderValues(argv) {
|
|
18
|
+
const values = [];
|
|
19
|
+
for (let index = 0; index < argv.length; index++) {
|
|
20
|
+
const token = argv[index];
|
|
21
|
+
if (token === void 0) continue;
|
|
22
|
+
const inline = /^(?:--header|-H)=(.*)$/s.exec(token);
|
|
23
|
+
if (inline) {
|
|
24
|
+
values.push(inline[1] ?? "");
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (token === "--header" || token === "-H") {
|
|
28
|
+
const next = argv[index + 1];
|
|
29
|
+
if (next !== void 0) {
|
|
30
|
+
values.push(next);
|
|
31
|
+
index++;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return values;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Turn `name:value` strings into a header object. The first colon splits; both
|
|
39
|
+
* sides are trimmed. Throws on a value without a colon or with an empty name.
|
|
40
|
+
*/
|
|
41
|
+
function parseHeaderValues(values) {
|
|
42
|
+
const headers = {};
|
|
43
|
+
for (const value of values) {
|
|
44
|
+
const colon = value.indexOf(":");
|
|
45
|
+
const name = colon === -1 ? "" : value.slice(0, colon).trim();
|
|
46
|
+
if (name.length === 0) throw new Error(`Invalid --header ${JSON.stringify(value)}: expected name:value.`);
|
|
47
|
+
headers[name] = value.slice(colon + 1).trim();
|
|
48
|
+
}
|
|
49
|
+
return headers;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The request body for `--body`: `@path` reads the file (relative to `cwd`);
|
|
53
|
+
* text that parses as JSON becomes that value (sent as JSON); anything else is
|
|
54
|
+
* sent as the text itself. `undefined` without `--body`.
|
|
55
|
+
*/
|
|
56
|
+
function parseTraceBody(value, cwd = process.cwd(), readFile = (file) => readFileSync(file, "utf8")) {
|
|
57
|
+
if (value === void 0) return void 0;
|
|
58
|
+
const text = value.startsWith("@") ? readFile(path.resolve(cwd, value.slice(1))) : value;
|
|
59
|
+
try {
|
|
60
|
+
return JSON.parse(text);
|
|
61
|
+
} catch {
|
|
62
|
+
return text;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function ms(value) {
|
|
66
|
+
return value === null ? "-" : `${value.toFixed(1)}ms`;
|
|
67
|
+
}
|
|
68
|
+
/** The human summary `warlock trace` prints without `--json`. Uncolored, so it is testable. */
|
|
69
|
+
function formatTraceSummary(report) {
|
|
70
|
+
const { timeline } = report;
|
|
71
|
+
const lines = [`${report.request.method} ${report.request.url} → ${report.response.status} (${report.route ?? "no route"}, id ${report.requestId})`, ` total ${ms(report.timings.totalMs)} server, ${ms(report.timings.clientMs)} round trip`];
|
|
72
|
+
if (timeline.routeMatch) lines.push(` route.match ${ms(timeline.routeMatch.durationMs)}`);
|
|
73
|
+
for (const middleware of timeline.middleware) lines.push(` middleware ${middleware.name ?? "(anonymous)"} ${ms(middleware.durationMs)}`);
|
|
74
|
+
if (timeline.validation.ran) {
|
|
75
|
+
const verdict = timeline.validation.passed ? "passed" : "failed";
|
|
76
|
+
lines.push(` validation ${verdict} ${ms(timeline.validation.durationMs)}`);
|
|
77
|
+
}
|
|
78
|
+
if (timeline.handler) lines.push(` handler ${ms(timeline.handler.durationMs)}`);
|
|
79
|
+
const nPlusOne = report.queries.filter((query) => query.nPlusOne).length;
|
|
80
|
+
lines.push(` queries ${report.queries.length}${nPlusOne > 0 ? ` (${nPlusOne} N+1)` : ""} · logs ${report.logs.length} · cache ${report.cache.length} · mails ${report.mails.length}`);
|
|
81
|
+
for (const warning of report.warnings) if (typeof warning.message === "string") lines.push(` ! ${warning.message}`);
|
|
82
|
+
if (report.error) lines.push(` error: ${report.error}`);
|
|
83
|
+
lines.push("", "Run with --json for the full timeline.");
|
|
84
|
+
return lines;
|
|
85
|
+
}
|
|
86
|
+
/** The exit code for a failed trace: 2 for this machine (WL8xxx), 1 otherwise. */
|
|
87
|
+
function traceFailureExitCode(error) {
|
|
88
|
+
const code = errorCodeOf(error);
|
|
89
|
+
return code !== void 0 && ERROR_CODES[code].category === "environment" ? 2 : 1;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Action behind `warlock trace <method> <url>`.
|
|
93
|
+
*
|
|
94
|
+
* Sends the request to the running dev server and prints its devtools
|
|
95
|
+
* timeline; with `--json`, stdout carries exactly the report. A failure
|
|
96
|
+
* (no dev server, no devtools, no record) prints the coded error — as
|
|
97
|
+
* `{ ok: false, code, message }` with `--json` — and exits 2 for this machine
|
|
98
|
+
* or 1 otherwise.
|
|
99
|
+
*
|
|
100
|
+
* @param data Parsed CLI args: `[method, url]`, `body`, `url`, `devtoolsPath`, `idHeader`, `timeout`, `json`.
|
|
101
|
+
*/
|
|
102
|
+
async function traceCommandAction({ args, options }) {
|
|
103
|
+
const json = options.json === true;
|
|
104
|
+
const [method, url] = args;
|
|
105
|
+
try {
|
|
106
|
+
if (!method || !url) throw new Error("Usage: warlock trace <method> <url> [--body json|@file] [--header k:v]");
|
|
107
|
+
const timeout = stringOption(options.timeout);
|
|
108
|
+
const timeoutMs = timeout === void 0 ? void 0 : Number(timeout);
|
|
109
|
+
if (timeoutMs !== void 0 && (!Number.isFinite(timeoutMs) || timeoutMs < 0)) throw new Error(`Invalid --timeout ${JSON.stringify(timeout)}: expected milliseconds.`);
|
|
110
|
+
const report = await traceRequest({
|
|
111
|
+
method,
|
|
112
|
+
url,
|
|
113
|
+
body: parseTraceBody(stringOption(options.body)),
|
|
114
|
+
headers: parseHeaderValues(collectHeaderValues(process.argv)),
|
|
115
|
+
serverUrl: stringOption(options.url),
|
|
116
|
+
devtoolsPath: stringOption(options.devtoolsPath),
|
|
117
|
+
requestIdHeader: stringOption(options.idHeader),
|
|
118
|
+
timeoutMs
|
|
119
|
+
});
|
|
120
|
+
if (json) {
|
|
121
|
+
console.log(JSON.stringify(report, null, 2));
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const [heading, ...rest] = formatTraceSummary(report);
|
|
125
|
+
console.log(colors.bold(heading ?? ""));
|
|
126
|
+
for (const line of rest) console.log(line);
|
|
127
|
+
} catch (error) {
|
|
128
|
+
const code = errorCodeOf(error) ?? null;
|
|
129
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
130
|
+
if (json) console.log(JSON.stringify({
|
|
131
|
+
ok: false,
|
|
132
|
+
code,
|
|
133
|
+
message
|
|
134
|
+
}, null, 2));
|
|
135
|
+
else {
|
|
136
|
+
console.error(colors.red(`${code ? `${code} ` : ""}${message}`));
|
|
137
|
+
if (code) console.error(` → ${ERROR_CODES[code].fix}`);
|
|
138
|
+
}
|
|
139
|
+
await flushAndExit(traceFailureExitCode(error));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
//#endregion
|
|
144
|
+
export { collectHeaderValues, formatTraceSummary, parseHeaderValues, parseTraceBody, traceCommandAction, traceFailureExitCode };
|
|
145
|
+
//# sourceMappingURL=trace-command.action.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-command.action.mjs","names":[],"sources":["../../../../../../../../../../packages/core/src/cli/commands/trace/trace-command.action.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { colors } from \"@mongez/copper\";\nimport type { CommandActionData } from \"../../../commands/types\";\nimport { ERROR_CODES, errorCodeOf } from \"../../../errors/error-codes\";\nimport type { TraceReport } from \"../../../tooling/trace/trace-report.types\";\nimport { traceRequest } from \"../../../tooling/trace/trace-request\";\nimport { flushAndExit } from \"../../flush-and-exit\";\n\nfunction stringOption(value: string | number | boolean | undefined): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\n/**\n * Every `--header` / `-H` value in `argv`, in order. The CLI parser keeps only\n * the last value of a repeated option, so headers are read from argv directly.\n * Accepts `--header k:v`, `--header=k:v`, `-H k:v` and `-H=k:v`.\n */\nexport function collectHeaderValues(argv: readonly string[]): string[] {\n const values: string[] = [];\n\n for (let index = 0; index < argv.length; index++) {\n const token = argv[index];\n\n if (token === undefined) continue;\n\n const inline = /^(?:--header|-H)=(.*)$/s.exec(token);\n\n if (inline) {\n values.push(inline[1] ?? \"\");\n continue;\n }\n\n if (token === \"--header\" || token === \"-H\") {\n const next = argv[index + 1];\n\n if (next !== undefined) {\n values.push(next);\n index++;\n }\n }\n }\n\n return values;\n}\n\n/**\n * Turn `name:value` strings into a header object. The first colon splits; both\n * sides are trimmed. Throws on a value without a colon or with an empty name.\n */\nexport function parseHeaderValues(values: readonly string[]): Record<string, string> {\n const headers: Record<string, string> = {};\n\n for (const value of values) {\n const colon = value.indexOf(\":\");\n const name = colon === -1 ? \"\" : value.slice(0, colon).trim();\n\n if (name.length === 0) {\n throw new Error(`Invalid --header ${JSON.stringify(value)}: expected name:value.`);\n }\n\n headers[name] = value.slice(colon + 1).trim();\n }\n\n return headers;\n}\n\n/**\n * The request body for `--body`: `@path` reads the file (relative to `cwd`);\n * text that parses as JSON becomes that value (sent as JSON); anything else is\n * sent as the text itself. `undefined` without `--body`.\n */\nexport function parseTraceBody(\n value: string | undefined,\n cwd = process.cwd(),\n readFile: (file: string) => string = (file) => readFileSync(file, \"utf8\"),\n): unknown {\n if (value === undefined) return undefined;\n\n const text = value.startsWith(\"@\") ? readFile(path.resolve(cwd, value.slice(1))) : value;\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction ms(value: number | null): string {\n return value === null ? \"-\" : `${value.toFixed(1)}ms`;\n}\n\n/** The human summary `warlock trace` prints without `--json`. Uncolored, so it is testable. */\nexport function formatTraceSummary(report: TraceReport): string[] {\n const { timeline } = report;\n const lines = [\n `${report.request.method} ${report.request.url} → ${report.response.status} (${report.route ?? \"no route\"}, id ${report.requestId})`,\n ` total ${ms(report.timings.totalMs)} server, ${ms(report.timings.clientMs)} round trip`,\n ];\n\n if (timeline.routeMatch) lines.push(` route.match ${ms(timeline.routeMatch.durationMs)}`);\n\n for (const middleware of timeline.middleware) {\n lines.push(` middleware ${middleware.name ?? \"(anonymous)\"} ${ms(middleware.durationMs)}`);\n }\n\n if (timeline.validation.ran) {\n const verdict = timeline.validation.passed ? \"passed\" : \"failed\";\n\n lines.push(` validation ${verdict} ${ms(timeline.validation.durationMs)}`);\n }\n\n if (timeline.handler) lines.push(` handler ${ms(timeline.handler.durationMs)}`);\n\n const nPlusOne = report.queries.filter((query) => query.nPlusOne).length;\n\n lines.push(\n ` queries ${report.queries.length}${nPlusOne > 0 ? ` (${nPlusOne} N+1)` : \"\"} · logs ${report.logs.length} · cache ${report.cache.length} · mails ${report.mails.length}`,\n );\n\n for (const warning of report.warnings) {\n if (typeof warning.message === \"string\") lines.push(` ! ${warning.message}`);\n }\n\n if (report.error) lines.push(` error: ${report.error}`);\n\n lines.push(\"\", \"Run with --json for the full timeline.\");\n\n return lines;\n}\n\n/** The exit code for a failed trace: 2 for this machine (WL8xxx), 1 otherwise. */\nexport function traceFailureExitCode(error: unknown): 1 | 2 {\n const code = errorCodeOf(error);\n\n return code !== undefined && ERROR_CODES[code].category === \"environment\" ? 2 : 1;\n}\n\n/**\n * Action behind `warlock trace <method> <url>`.\n *\n * Sends the request to the running dev server and prints its devtools\n * timeline; with `--json`, stdout carries exactly the report. A failure\n * (no dev server, no devtools, no record) prints the coded error — as\n * `{ ok: false, code, message }` with `--json` — and exits 2 for this machine\n * or 1 otherwise.\n *\n * @param data Parsed CLI args: `[method, url]`, `body`, `url`, `devtoolsPath`, `idHeader`, `timeout`, `json`.\n */\nexport async function traceCommandAction({ args, options }: CommandActionData): Promise<void> {\n const json = options.json === true;\n const [method, url] = args;\n\n try {\n if (!method || !url) {\n throw new Error(\"Usage: warlock trace <method> <url> [--body json|@file] [--header k:v]\");\n }\n\n const timeout = stringOption(options.timeout);\n const timeoutMs = timeout === undefined ? undefined : Number(timeout);\n\n if (timeoutMs !== undefined && (!Number.isFinite(timeoutMs) || timeoutMs < 0)) {\n throw new Error(`Invalid --timeout ${JSON.stringify(timeout)}: expected milliseconds.`);\n }\n\n const report = await traceRequest({\n method,\n url,\n body: parseTraceBody(stringOption(options.body)),\n headers: parseHeaderValues(collectHeaderValues(process.argv)),\n serverUrl: stringOption(options.url),\n devtoolsPath: stringOption(options.devtoolsPath),\n requestIdHeader: stringOption(options.idHeader),\n timeoutMs,\n });\n\n if (json) {\n console.log(JSON.stringify(report, null, 2));\n return;\n }\n\n const [heading, ...rest] = formatTraceSummary(report);\n\n console.log(colors.bold(heading ?? \"\"));\n\n for (const line of rest) {\n console.log(line);\n }\n } catch (error) {\n const code = errorCodeOf(error) ?? null;\n const message = error instanceof Error ? error.message : String(error);\n\n if (json) {\n console.log(JSON.stringify({ ok: false, code, message }, null, 2));\n } else {\n console.error(colors.red(`${code ? `${code} ` : \"\"}${message}`));\n\n if (code) console.error(` → ${ERROR_CODES[code].fix}`);\n }\n\n await flushAndExit(traceFailureExitCode(error));\n }\n}\n"],"mappings":";;;;;;;;AASA,SAAS,aAAa,OAAkE;CACtF,OAAO,OAAO,UAAU,YAAY,MAAM,KAAK,CAAC,CAAC,SAAS,IAAI,MAAM,KAAK,IAAI;AAC/E;;;;;;AAOA,SAAgB,oBAAoB,MAAmC;CACrE,MAAM,SAAmB,CAAC;CAE1B,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS;EAChD,MAAM,QAAQ,KAAK;EAEnB,IAAI,UAAU,QAAW;EAEzB,MAAM,SAAS,0BAA0B,KAAK,KAAK;EAEnD,IAAI,QAAQ;GACV,OAAO,KAAK,OAAO,MAAM,EAAE;GAC3B;EACF;EAEA,IAAI,UAAU,cAAc,UAAU,MAAM;GAC1C,MAAM,OAAO,KAAK,QAAQ;GAE1B,IAAI,SAAS,QAAW;IACtB,OAAO,KAAK,IAAI;IAChB;GACF;EACF;CACF;CAEA,OAAO;AACT;;;;;AAMA,SAAgB,kBAAkB,QAAmD;CACnF,MAAM,UAAkC,CAAC;CAEzC,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,QAAQ,MAAM,QAAQ,GAAG;EAC/B,MAAM,OAAO,UAAU,KAAK,KAAK,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK;EAE5D,IAAI,KAAK,WAAW,GAClB,MAAM,IAAI,MAAM,oBAAoB,KAAK,UAAU,KAAK,EAAE,uBAAuB;EAGnF,QAAQ,QAAQ,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAK;CAC9C;CAEA,OAAO;AACT;;;;;;AAOA,SAAgB,eACd,OACA,MAAM,QAAQ,IAAI,GAClB,YAAsC,SAAS,aAAa,MAAM,MAAM,GAC/D;CACT,IAAI,UAAU,QAAW,OAAO;CAEhC,MAAM,OAAO,MAAM,WAAW,GAAG,IAAI,SAAS,KAAK,QAAQ,KAAK,MAAM,MAAM,CAAC,CAAC,CAAC,IAAI;CAEnF,IAAI;EACF,OAAO,KAAK,MAAM,IAAI;CACxB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,GAAG,OAA8B;CACxC,OAAO,UAAU,OAAO,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE;AACpD;;AAGA,SAAgB,mBAAmB,QAA+B;CAChE,MAAM,EAAE,aAAa;CACrB,MAAM,QAAQ,CACZ,GAAG,OAAO,QAAQ,OAAO,GAAG,OAAO,QAAQ,IAAI,KAAK,OAAO,SAAS,OAAO,KAAK,OAAO,SAAS,WAAW,OAAO,OAAO,UAAU,IACnI,WAAW,GAAG,OAAO,QAAQ,OAAO,EAAE,WAAW,GAAG,OAAO,QAAQ,QAAQ,EAAE,YAC/E;CAEA,IAAI,SAAS,YAAY,MAAM,KAAK,kBAAkB,GAAG,SAAS,WAAW,UAAU,GAAG;CAE1F,KAAK,MAAM,cAAc,SAAS,YAChC,MAAM,KAAK,kBAAkB,WAAW,QAAQ,cAAc,IAAI,GAAG,WAAW,UAAU,GAAG;CAG/F,IAAI,SAAS,WAAW,KAAK;EAC3B,MAAM,UAAU,SAAS,WAAW,SAAS,WAAW;EAExD,MAAM,KAAK,kBAAkB,QAAQ,IAAI,GAAG,SAAS,WAAW,UAAU,GAAG;CAC/E;CAEA,IAAI,SAAS,SAAS,MAAM,KAAK,kBAAkB,GAAG,SAAS,QAAQ,UAAU,GAAG;CAEpF,MAAM,WAAW,OAAO,QAAQ,QAAQ,UAAU,MAAM,QAAQ,CAAC,CAAC;CAElE,MAAM,KACJ,aAAa,OAAO,QAAQ,SAAS,WAAW,IAAI,KAAK,SAAS,SAAS,GAAG,UAAU,OAAO,KAAK,OAAO,WAAW,OAAO,MAAM,OAAO,WAAW,OAAO,MAAM,QACpK;CAEA,KAAK,MAAM,WAAW,OAAO,UAC3B,IAAI,OAAO,QAAQ,YAAY,UAAU,MAAM,KAAK,OAAO,QAAQ,SAAS;CAG9E,IAAI,OAAO,OAAO,MAAM,KAAK,YAAY,OAAO,OAAO;CAEvD,MAAM,KAAK,IAAI,wCAAwC;CAEvD,OAAO;AACT;;AAGA,SAAgB,qBAAqB,OAAuB;CAC1D,MAAM,OAAO,YAAY,KAAK;CAE9B,OAAO,SAAS,UAAa,YAAY,KAAK,CAAC,aAAa,gBAAgB,IAAI;AAClF;;;;;;;;;;;;AAaA,eAAsB,mBAAmB,EAAE,MAAM,WAA6C;CAC5F,MAAM,OAAO,QAAQ,SAAS;CAC9B,MAAM,CAAC,QAAQ,OAAO;CAEtB,IAAI;EACF,IAAI,CAAC,UAAU,CAAC,KACd,MAAM,IAAI,MAAM,wEAAwE;EAG1F,MAAM,UAAU,aAAa,QAAQ,OAAO;EAC5C,MAAM,YAAY,YAAY,SAAY,SAAY,OAAO,OAAO;EAEpE,IAAI,cAAc,WAAc,CAAC,OAAO,SAAS,SAAS,KAAK,YAAY,IACzE,MAAM,IAAI,MAAM,qBAAqB,KAAK,UAAU,OAAO,EAAE,yBAAyB;EAGxF,MAAM,SAAS,MAAM,aAAa;GAChC;GACA;GACA,MAAM,eAAe,aAAa,QAAQ,IAAI,CAAC;GAC/C,SAAS,kBAAkB,oBAAoB,QAAQ,IAAI,CAAC;GAC5D,WAAW,aAAa,QAAQ,GAAG;GACnC,cAAc,aAAa,QAAQ,YAAY;GAC/C,iBAAiB,aAAa,QAAQ,QAAQ;GAC9C;EACF,CAAC;EAED,IAAI,MAAM;GACR,QAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;GAC3C;EACF;EAEA,MAAM,CAAC,SAAS,GAAG,QAAQ,mBAAmB,MAAM;EAEpD,QAAQ,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;EAEtC,KAAK,MAAM,QAAQ,MACjB,QAAQ,IAAI,IAAI;CAEpB,SAAS,OAAO;EACd,MAAM,OAAO,YAAY,KAAK,KAAK;EACnC,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;EAErE,IAAI,MACF,QAAQ,IAAI,KAAK,UAAU;GAAE,IAAI;GAAO;GAAM;EAAQ,GAAG,MAAM,CAAC,CAAC;OAC5D;GACL,QAAQ,MAAM,OAAO,IAAI,GAAG,OAAO,GAAG,KAAK,KAAK,KAAK,SAAS,CAAC;GAE/D,IAAI,MAAM,QAAQ,MAAM,OAAO,YAAY,KAAK,CAAC,KAAK;EACxD;EAEA,MAAM,aAAa,qBAAqB,KAAK,CAAC;CAChD;AACF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { command } from "../../commands/cli-command.mjs";
|
|
2
|
+
import { traceCommandAction } from "./trace/trace-command.action.mjs";
|
|
3
|
+
|
|
4
|
+
//#region ../../packages/core/src/cli/commands/trace.command.ts
|
|
5
|
+
/**
|
|
6
|
+
* `warlock trace <method> <url>` — send one request to the running dev server
|
|
7
|
+
* and print its devtools timeline: middleware, validation result, handler,
|
|
8
|
+
* queries with N+1 flags, logs, cache operations, the response and timings.
|
|
9
|
+
* `--json` prints the versioned report (`schemaVersion: 1`).
|
|
10
|
+
*
|
|
11
|
+
* No preload: nothing boots here. The dev server (`warlock dev` with
|
|
12
|
+
* `@warlock.js/devtools` installed) does the work; this command finds it
|
|
13
|
+
* through `.warlock/dev-server.json` or `--url`.
|
|
14
|
+
*/
|
|
15
|
+
const traceCommand = command({
|
|
16
|
+
name: "trace <method> <url>",
|
|
17
|
+
description: "Send a request to the running dev server and print its devtools timeline (middleware, validation, queries, logs, response, timings); --json for the report",
|
|
18
|
+
action: traceCommandAction,
|
|
19
|
+
options: [
|
|
20
|
+
{
|
|
21
|
+
text: "--body, -b",
|
|
22
|
+
description: "Request body: JSON text, plain text, or @file to read it from a file",
|
|
23
|
+
type: "string"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
text: "--header, -H",
|
|
27
|
+
description: "A request header as name:value (repeatable)",
|
|
28
|
+
type: "string"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
text: "--url, -u",
|
|
32
|
+
description: "Dev server origin (default: read from .warlock/dev-server.json)",
|
|
33
|
+
type: "string"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
text: "--devtools-path",
|
|
37
|
+
description: "Devtools mount path (default /__warlock)",
|
|
38
|
+
type: "string"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
text: "--id-header",
|
|
42
|
+
description: "The app's request id header (http.requestId.header; default x-request-id)",
|
|
43
|
+
type: "string"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
text: "--timeout, -t",
|
|
47
|
+
description: "How long to wait for the devtools record, in ms (default 5000)",
|
|
48
|
+
type: "string"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
text: "--json, -j",
|
|
52
|
+
description: "Print the trace report as JSON (schemaVersion 1)",
|
|
53
|
+
type: "boolean"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
//#endregion
|
|
59
|
+
export { traceCommand };
|
|
60
|
+
//# sourceMappingURL=trace.command.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.command.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/cli/commands/trace.command.ts"],"sourcesContent":["import { command } from \"../../commands/cli-command\";\nimport { traceCommandAction } from \"./trace/trace-command.action\";\n\n/**\n * `warlock trace <method> <url>` — send one request to the running dev server\n * and print its devtools timeline: middleware, validation result, handler,\n * queries with N+1 flags, logs, cache operations, the response and timings.\n * `--json` prints the versioned report (`schemaVersion: 1`).\n *\n * No preload: nothing boots here. The dev server (`warlock dev` with\n * `@warlock.js/devtools` installed) does the work; this command finds it\n * through `.warlock/dev-server.json` or `--url`.\n */\nexport const traceCommand = command({\n name: \"trace <method> <url>\",\n description:\n \"Send a request to the running dev server and print its devtools timeline (middleware, validation, queries, logs, response, timings); --json for the report\",\n action: traceCommandAction,\n options: [\n {\n text: \"--body, -b\",\n description: \"Request body: JSON text, plain text, or @file to read it from a file\",\n type: \"string\",\n },\n {\n text: \"--header, -H\",\n description: \"A request header as name:value (repeatable)\",\n type: \"string\",\n },\n {\n text: \"--url, -u\",\n description: \"Dev server origin (default: read from .warlock/dev-server.json)\",\n type: \"string\",\n },\n {\n text: \"--devtools-path\",\n description: \"Devtools mount path (default /__warlock)\",\n type: \"string\",\n },\n {\n text: \"--id-header\",\n description: \"The app's request id header (http.requestId.header; default x-request-id)\",\n type: \"string\",\n },\n {\n text: \"--timeout, -t\",\n description: \"How long to wait for the devtools record, in ms (default 5000)\",\n type: \"string\",\n },\n {\n text: \"--json, -j\",\n description: \"Print the trace report as JSON (schemaVersion 1)\",\n type: \"boolean\",\n },\n ],\n});\n"],"mappings":";;;;;;;;;;;;;;AAaA,MAAa,eAAe,QAAQ;CAClC,MAAM;CACN,aACE;CACF,QAAQ;CACR,SAAS;EACP;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;CACF;AACF,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { command } from "../../commands/cli-command.mjs";
|
|
2
|
+
import { typecheckCommandAction } from "./check/typecheck-command.action.mjs";
|
|
3
|
+
|
|
4
|
+
//#region ../../packages/core/src/cli/commands/typecheck.command.ts
|
|
5
|
+
/**
|
|
6
|
+
* `warlock typecheck` — incremental TypeScript check through the compiler
|
|
7
|
+
* API, with `--changed` to limit it to the changed files and their importers.
|
|
8
|
+
* The same problem shape and exit codes as `warlock check`. No preload.
|
|
9
|
+
*/
|
|
10
|
+
const typecheckCommand = command({
|
|
11
|
+
name: "typecheck",
|
|
12
|
+
description: "Typecheck the project incrementally; --changed limits it to changed files and the files importing them",
|
|
13
|
+
action: typecheckCommandAction,
|
|
14
|
+
options: [
|
|
15
|
+
{
|
|
16
|
+
text: "--changed, -c",
|
|
17
|
+
description: "Only the files changed against HEAD (plus untracked files) and their importers",
|
|
18
|
+
type: "boolean"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
text: "--base, -b",
|
|
22
|
+
description: "Compare with the merge base of this ref instead of HEAD (implies --changed)",
|
|
23
|
+
type: "string"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
text: "--project, -p",
|
|
27
|
+
description: "tsconfig path (default tsconfig.json)",
|
|
28
|
+
type: "string"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
text: "--json, -j",
|
|
32
|
+
description: "Print the result as JSON",
|
|
33
|
+
type: "boolean"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
export { typecheckCommand };
|
|
40
|
+
//# sourceMappingURL=typecheck.command.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typecheck.command.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/cli/commands/typecheck.command.ts"],"sourcesContent":["import { command } from \"../../commands/cli-command\";\nimport { typecheckCommandAction } from \"./check/typecheck-command.action\";\n\n/**\n * `warlock typecheck` — incremental TypeScript check through the compiler\n * API, with `--changed` to limit it to the changed files and their importers.\n * The same problem shape and exit codes as `warlock check`. No preload.\n */\nexport const typecheckCommand = command({\n name: \"typecheck\",\n description:\n \"Typecheck the project incrementally; --changed limits it to changed files and the files importing them\",\n action: typecheckCommandAction,\n options: [\n {\n text: \"--changed, -c\",\n description: \"Only the files changed against HEAD (plus untracked files) and their importers\",\n type: \"boolean\",\n },\n {\n text: \"--base, -b\",\n description: \"Compare with the merge base of this ref instead of HEAD (implies --changed)\",\n type: \"string\",\n },\n {\n text: \"--project, -p\",\n description: \"tsconfig path (default tsconfig.json)\",\n type: \"string\",\n },\n {\n text: \"--json, -j\",\n description: \"Print the result as JSON\",\n type: \"boolean\",\n },\n ],\n});\n"],"mappings":";;;;;;;;;AAQA,MAAa,mBAAmB,QAAQ;CACtC,MAAM;CACN,aACE;CACF,QAAQ;CACR,SAAS;EACP;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;CACF;AACF,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { command } from "../../commands/cli-command.mjs";
|
|
2
|
+
|
|
3
|
+
//#region ../../packages/core/src/cli/commands/upgrade.command.ts
|
|
4
|
+
/**
|
|
5
|
+
* `warlock upgrade --to <version>` — apply the mechanical edits for every
|
|
6
|
+
* breaking change between the installed release and the target, and list the
|
|
7
|
+
* places that need a decision (`file:line` plus the reason). `--dry-run`
|
|
8
|
+
* prints a diff and writes nothing; `--json` prints the result as JSON.
|
|
9
|
+
*
|
|
10
|
+
* Needs no app boot: it reads source files, `package.json` and Node version
|
|
11
|
+
* files only. `ts-morph` (an optional peer) is loaded when the command runs.
|
|
12
|
+
*/
|
|
13
|
+
const upgradeCommand = command({
|
|
14
|
+
name: "upgrade",
|
|
15
|
+
description: "Apply the code changes a Warlock upgrade needs (--to <version>), and list what to review by hand; --dry-run shows a diff, --json prints JSON",
|
|
16
|
+
action: async (data) => {
|
|
17
|
+
const { runUpgradeCommand } = await import("../../upgrade/upgrade-command.action.mjs");
|
|
18
|
+
await runUpgradeCommand(data.options);
|
|
19
|
+
},
|
|
20
|
+
options: [
|
|
21
|
+
{
|
|
22
|
+
text: "--to",
|
|
23
|
+
description: "Version to upgrade to, e.g. 5.31 or 5.31.0 (required)",
|
|
24
|
+
type: "string"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
text: "--from",
|
|
28
|
+
description: "Version to upgrade from (default: the installed @warlock.js/core, so pass it once the new release is installed)",
|
|
29
|
+
type: "string"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
text: "--dry-run",
|
|
33
|
+
description: "Show the diff and the review list without writing any file",
|
|
34
|
+
type: "boolean"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
text: "--json, -j",
|
|
38
|
+
description: "Print the result as JSON",
|
|
39
|
+
type: "boolean"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
//#endregion
|
|
45
|
+
export { upgradeCommand };
|
|
46
|
+
//# sourceMappingURL=upgrade.command.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.command.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/cli/commands/upgrade.command.ts"],"sourcesContent":["import { command } from \"../../commands/cli-command\";\n\n/**\n * `warlock upgrade --to <version>` — apply the mechanical edits for every\n * breaking change between the installed release and the target, and list the\n * places that need a decision (`file:line` plus the reason). `--dry-run`\n * prints a diff and writes nothing; `--json` prints the result as JSON.\n *\n * Needs no app boot: it reads source files, `package.json` and Node version\n * files only. `ts-morph` (an optional peer) is loaded when the command runs.\n */\nexport const upgradeCommand = command({\n name: \"upgrade\",\n description:\n \"Apply the code changes a Warlock upgrade needs (--to <version>), and list what to review by hand; --dry-run shows a diff, --json prints JSON\",\n action: async (data) => {\n // Loaded here so ts-morph and the codemods never join another command's graph.\n const { runUpgradeCommand } = await import(\"../../upgrade/upgrade-command.action\");\n await runUpgradeCommand(data.options);\n },\n options: [\n {\n text: \"--to\",\n description: \"Version to upgrade to, e.g. 5.31 or 5.31.0 (required)\",\n type: \"string\",\n },\n {\n text: \"--from\",\n description:\n \"Version to upgrade from (default: the installed @warlock.js/core, so pass it once the new release is installed)\",\n type: \"string\",\n },\n {\n text: \"--dry-run\",\n description: \"Show the diff and the review list without writing any file\",\n type: \"boolean\",\n },\n {\n text: \"--json, -j\",\n description: \"Print the result as JSON\",\n type: \"boolean\",\n },\n ],\n});\n"],"mappings":";;;;;;;;;;;;AAWA,MAAa,iBAAiB,QAAQ;CACpC,MAAM;CACN,aACE;CACF,QAAQ,OAAO,SAAS;EAEtB,MAAM,EAAE,sBAAsB,MAAM,OAAO;EAC3C,MAAM,kBAAkB,KAAK,OAAO;CACtC;CACA,SAAS;EACP;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aACE;GACF,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;EACA;GACE,MAAM;GACN,aAAa;GACb,MAAM;EACR;CACF;AACF,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region ../../packages/core/src/cli/flush-and-exit.ts
|
|
2
|
+
/** How long to wait for stdout/stderr to drain before exiting anyway. */
|
|
3
|
+
const FLUSH_BUDGET_MS = 500;
|
|
4
|
+
function drain(stream) {
|
|
5
|
+
return new Promise((resolve) => {
|
|
6
|
+
stream.write("", () => resolve());
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Exit with `code` once everything already written to stdout and stderr has
|
|
11
|
+
* been flushed.
|
|
12
|
+
*
|
|
13
|
+
* For commands whose exit code carries meaning (`warlock check` exits 1 for
|
|
14
|
+
* problems in the code and 2 for problems with the machine): a bare
|
|
15
|
+
* `process.exit()` right after printing a large JSON report to a pipe can cut
|
|
16
|
+
* the report short. Awaited inside the action, so the CLI never goes on to
|
|
17
|
+
* print its success banner or exit 0.
|
|
18
|
+
*
|
|
19
|
+
* @param code The process exit code.
|
|
20
|
+
*/
|
|
21
|
+
async function flushAndExit(code) {
|
|
22
|
+
process.exitCode = code;
|
|
23
|
+
let timer;
|
|
24
|
+
await Promise.race([Promise.all([drain(process.stdout), drain(process.stderr)]), new Promise((resolve) => {
|
|
25
|
+
timer = setTimeout(resolve, FLUSH_BUDGET_MS);
|
|
26
|
+
timer.unref?.();
|
|
27
|
+
})]);
|
|
28
|
+
if (timer) clearTimeout(timer);
|
|
29
|
+
return process.exit(code);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
export { flushAndExit };
|
|
34
|
+
//# sourceMappingURL=flush-and-exit.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flush-and-exit.mjs","names":[],"sources":["../../../../../../../../packages/core/src/cli/flush-and-exit.ts"],"sourcesContent":["/** How long to wait for stdout/stderr to drain before exiting anyway. */\nconst FLUSH_BUDGET_MS = 500;\n\nfunction drain(stream: NodeJS.WriteStream): Promise<void> {\n return new Promise((resolve) => {\n // A zero-length write's callback fires once everything queued ahead of it\n // has been handed to the OS.\n stream.write(\"\", () => resolve());\n });\n}\n\n/**\n * Exit with `code` once everything already written to stdout and stderr has\n * been flushed.\n *\n * For commands whose exit code carries meaning (`warlock check` exits 1 for\n * problems in the code and 2 for problems with the machine): a bare\n * `process.exit()` right after printing a large JSON report to a pipe can cut\n * the report short. Awaited inside the action, so the CLI never goes on to\n * print its success banner or exit 0.\n *\n * @param code The process exit code.\n */\nexport async function flushAndExit(code: number): Promise<never> {\n process.exitCode = code;\n\n let timer: NodeJS.Timeout | undefined;\n\n await Promise.race([\n Promise.all([drain(process.stdout), drain(process.stderr)]),\n new Promise<void>((resolve) => {\n timer = setTimeout(resolve, FLUSH_BUDGET_MS);\n timer.unref?.();\n }),\n ]);\n\n if (timer) clearTimeout(timer);\n\n return process.exit(code);\n}\n"],"mappings":";;AACA,MAAM,kBAAkB;AAExB,SAAS,MAAM,QAA2C;CACxD,OAAO,IAAI,SAAS,YAAY;EAG9B,OAAO,MAAM,UAAU,QAAQ,CAAC;CAClC,CAAC;AACH;;;;;;;;;;;;;AAcA,eAAsB,aAAa,MAA8B;CAC/D,QAAQ,WAAW;CAEnB,IAAI;CAEJ,MAAM,QAAQ,KAAK,CACjB,QAAQ,IAAI,CAAC,MAAM,QAAQ,MAAM,GAAG,MAAM,QAAQ,MAAM,CAAC,CAAC,GAC1D,IAAI,SAAe,YAAY;EAC7B,QAAQ,WAAW,SAAS,eAAe;EAC3C,MAAM,QAAQ;CAChB,CAAC,CACH,CAAC;CAED,IAAI,OAAO,aAAa,KAAK;CAE7B,OAAO,QAAQ,KAAK,IAAI;AAC1B"}
|