@warlock.js/core 5.31.0 → 5.33.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 +61 -0
- 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 +9 -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 +22 -20
- package/esm/application/boot-signal.d.mts.map +1 -1
- package/esm/application/boot-signal.mjs +15 -9
- package/esm/application/boot-signal.mjs.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/agents-md/agents-md-command.action.mjs +3 -2
- package/esm/cli/commands/agents-md/agents-md-command.action.mjs.map +1 -1
- package/esm/cli/commands/ai/ai-command.action.mjs +140 -0
- package/esm/cli/commands/ai/ai-command.action.mjs.map +1 -0
- package/esm/cli/commands/ai.command.mjs +50 -0
- package/esm/cli/commands/ai.command.mjs.map +1 -0
- package/esm/cli/commands/board/board-command.action.mjs +1 -1
- package/esm/cli/commands/check/check-command.action.mjs +4 -1
- package/esm/cli/commands/check/check-command.action.mjs.map +1 -1
- package/esm/cli/commands/check/child-typecheck.mjs +1 -1
- package/esm/cli/commands/check/child-typecheck.mjs.map +1 -1
- package/esm/cli/commands/check/format-problems.mjs +1 -1
- package/esm/cli/commands/check.command.mjs +6 -1
- package/esm/cli/commands/check.command.mjs.map +1 -1
- package/esm/cli/commands/dev-server.command.mjs +3 -2
- package/esm/cli/commands/dev-server.command.mjs.map +1 -1
- package/esm/cli/commands/doctor/check.types.d.mts +29 -16
- package/esm/cli/commands/doctor/check.types.d.mts.map +1 -1
- package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs +22 -27
- package/esm/cli/commands/doctor/checks/locales-ts-deprecated.check.mjs.map +1 -1
- package/esm/cli/commands/doctor/doctor-command.action.mjs +2 -1
- package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -1
- package/esm/cli/commands/explain/explain-command.action.mjs +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 +5 -3
- package/esm/cli/commands/generate/generators/endpoint.generator.mjs.map +1 -1
- package/esm/cli/commands/generate/generators/model.generator.mjs +3 -2
- 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 +2 -2
- package/esm/cli/commands/generate/templates/endpoint-stubs.mjs.map +1 -1
- package/esm/cli/commands/generate/utils/endpoint-schema.mjs +1 -2
- package/esm/cli/commands/generate/utils/endpoint-schema.mjs.map +1 -1
- package/esm/cli/commands/generate/utils/name-parser.mjs +1 -1
- package/esm/cli/commands/generate/utils/path-resolver.mjs +1 -1
- package/esm/cli/commands/inspect/inspect-command.action.mjs +3 -2
- package/esm/cli/commands/inspect/inspect-command.action.mjs.map +1 -1
- 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 +15 -14
- package/esm/cli/commands/mcp/mcp-command.action.mjs.map +1 -1
- package/esm/cli/commands/openapi-generator.action.mjs +1 -1
- package/esm/cli/commands/pm2/pm2-command.action.mjs +91 -0
- package/esm/cli/commands/pm2/pm2-command.action.mjs.map +1 -0
- package/esm/cli/commands/pm2/pm2-config.mjs +115 -0
- package/esm/cli/commands/pm2/pm2-config.mjs.map +1 -0
- package/esm/cli/commands/pm2.command.mjs +53 -0
- package/esm/cli/commands/pm2.command.mjs.map +1 -0
- package/esm/cli/commands/postman-generator.action.mjs +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 +2 -2
- package/esm/cli/commands/routes/routes-diff.action.mjs.map +1 -1
- package/esm/cli/commands/test.command.mjs +1 -1
- package/esm/cli/commands/trace/trace-command.action.mjs +1 -1
- package/esm/cli/commands-loader.mjs +1 -1
- package/esm/cli/framework-cli-commands.mjs +6 -0
- package/esm/cli/framework-cli-commands.mjs.map +1 -1
- package/esm/cli/parse-cli-args.mjs +2 -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 +3 -3
- package/esm/config/config-loader.mjs.map +1 -1
- package/esm/config/config-manager.mjs +1 -1
- package/esm/config/config-schema.d.mts +19 -16
- package/esm/config/config-schema.d.mts.map +1 -1
- 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 +2 -1
- package/esm/config/index.mjs +1 -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-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 +2 -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 +3 -6
- 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 +8 -7
- 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/shutdown-timeout.mjs +7 -0
- package/esm/connectors/shutdown-timeout.mjs.map +1 -0
- 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 +20 -11
- 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/database/index.d.mts +3 -1
- package/esm/database/index.mjs +1 -1
- package/esm/database/migrate-action.mjs +1 -1
- package/esm/database/models/database-log/database-log.d.mts +2 -3
- 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 +2 -3
- package/esm/database/seeds/seeder.errors.d.mts.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/create-worker.mjs +5 -3
- 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/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-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 +6 -8
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
- 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 +6 -15
- package/esm/dev-server/health-checker/default-health-checkers.mjs.map +1 -1
- package/esm/dev-server/health-checker/eslint-support.mjs +27 -0
- package/esm/dev-server/health-checker/eslint-support.mjs.map +1 -0
- package/esm/dev-server/health-checker/file-health-checker.contract.d.mts +7 -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 +1 -0
- package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
- package/esm/dev-server/health-checker/oxlint-runner.mjs +6 -5
- package/esm/dev-server/health-checker/oxlint-runner.mjs.map +1 -1
- package/esm/dev-server/health-checker/workers/eslint-health.worker.d.mts +1 -1
- package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs +2 -11
- package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs.map +1 -1
- package/esm/dev-server/health-checker/workers/oxlint-health.worker.d.mts +1 -1
- 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/own-resolver.mjs +1 -1
- package/esm/dev-server/loader/register-loader.mjs +3 -2
- 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 +2 -1
- package/esm/dev-server/loader/resolve-hook.mjs.map +1 -1
- package/esm/dev-server/loader/transpile-cache.mjs +2 -1
- 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 +2 -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 +6 -38
- 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/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/supervisor.mjs +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 +28 -35
- 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/error-codes.d.mts +29 -22
- package/esm/errors/error-codes.d.mts.map +1 -1
- package/esm/errors/warlock-error.d.mts +1 -3
- package/esm/errors/warlock-error.d.mts.map +1 -1
- package/esm/generations/add-command.action.mjs +3 -2
- package/esm/generations/add-command.action.mjs.map +1 -1
- package/esm/generations/features/bull-board.feature.mjs +2 -1
- package/esm/generations/features/bull-board.feature.mjs.map +1 -1
- package/esm/generations/features/index.mjs +2 -0
- package/esm/generations/features/index.mjs.map +1 -1
- package/esm/generations/features/notifications.feature.mjs +2 -1
- package/esm/generations/features/notifications.feature.mjs.map +1 -1
- package/esm/generations/features/process.feature.mjs +65 -0
- package/esm/generations/features/process.feature.mjs.map +1 -0
- 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 +1 -1
- package/esm/generations/features/shared/relocate-conflicting-home-route.mjs +1 -1
- package/esm/generations/features/sitemap.feature.mjs +2 -1
- package/esm/generations/features/sitemap.feature.mjs.map +1 -1
- package/esm/generations/generation-fs.mjs +1 -1
- package/esm/generations/generation-run.mjs +1 -1
- package/esm/generations/stubs.mjs +1 -1
- 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 +4 -4
- package/esm/http/bounded-stream-queue.d.mts.map +1 -1
- package/esm/http/bounded-stream-queue.mjs +1 -1
- package/esm/http/bounded-stream-queue.mjs.map +1 -1
- 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 +2 -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 +14 -13
- package/esm/http/conditional-request.d.mts.map +1 -1
- 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 +10 -12
- package/esm/http/csp.d.mts.map +1 -1
- package/esm/http/csp.mjs +2 -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 +2 -3
- 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 +28 -29
- package/esm/http/errors/errors.d.mts.map +1 -1
- package/esm/http/escape-header-value.d.mts +1 -2
- package/esm/http/escape-header-value.d.mts.map +1 -1
- package/esm/http/events.d.mts +2 -4
- package/esm/http/events.d.mts.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 +4 -1
- package/esm/http/index.mjs +1 -1
- 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 +10 -10
- 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/port-preflight.mjs +2 -0
- package/esm/http/port-preflight.mjs.map +1 -1
- package/esm/http/rate-limit-cache-store.mjs +4 -3
- 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 +20 -16
- package/esm/http/request-log-snapshot.d.mts.map +1 -1
- package/esm/http/request-log-snapshot.mjs +3 -3
- package/esm/http/request-log-snapshot.mjs.map +1 -1
- package/esm/http/request.d.mts +8 -7
- package/esm/http/request.d.mts.map +1 -1
- package/esm/http/request.mjs +8 -7
- package/esm/http/request.mjs.map +1 -1
- package/esm/http/response.d.mts +12 -11
- package/esm/http/response.d.mts.map +1 -1
- package/esm/http/response.mjs +7 -7
- package/esm/http/response.mjs.map +1 -1
- package/esm/http/safe-redirect.d.mts +3 -4
- package/esm/http/safe-redirect.d.mts.map +1 -1
- 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 +9 -9
- package/esm/http/server.d.mts.map +1 -1
- package/esm/http/server.mjs +4 -4
- 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/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 +49 -43
- 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-variants.d.mts +6 -6
- package/esm/http/uploads/generate-image-variants.d.mts.map +1 -1
- package/esm/http/uploads/generate-image-variants.mjs +1 -1
- package/esm/http/uploads/generate-image-variants.mjs.map +1 -1
- package/esm/http/uploads/image-variant-cache-entries.mjs +1 -1
- package/esm/http/uploads/image-variant-cache.mjs +8 -8
- package/esm/http/uploads/image-variant-cache.mjs.map +1 -1
- package/esm/http/uploads/image-variant-types.d.mts +7 -9
- package/esm/http/uploads/image-variant-types.d.mts.map +1 -1
- package/esm/http/uploads/image-variants-config-error.d.mts +1 -2
- package/esm/http/uploads/image-variants-config-error.d.mts.map +1 -1
- package/esm/http/uploads/index.d.mts +2 -1
- package/esm/http/uploads/index.mjs +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 +2 -4
- package/esm/http/uploads/purge-image-variants.d.mts.map +1 -1
- package/esm/http/uploads/resolve-image-variant.d.mts +3 -5
- package/esm/http/uploads/resolve-image-variant.d.mts.map +1 -1
- package/esm/http/uploads/resolve-image-variants-config.mjs +4 -4
- 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/trim-image-variant-cache.mjs +3 -3
- package/esm/http/uploads/trim-image-variant-cache.mjs.map +1 -1
- package/esm/http/uploads/uploaded-file.controller.d.mts +6 -5
- package/esm/http/uploads/uploaded-file.controller.d.mts.map +1 -1
- package/esm/http/uploads/uploaded-file.controller.mjs +2 -1
- package/esm/http/uploads/uploaded-file.controller.mjs.map +1 -1
- package/esm/http/uploads/variant-cache-key.mjs +1 -1
- 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 +19 -17
- 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 +28 -2
- package/esm/index.mjs +7 -2
- 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 +4 -5
- package/esm/localization/parse-locale-dictionary.d.mts.map +1 -1
- package/esm/localization/parse-locale-dictionary.mjs +1 -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 +12 -14
- package/esm/mail/config.d.mts.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 +2 -1
- package/esm/mail/index.mjs +1 -1
- 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/openapi/build-openapi-document.d.mts +2 -4
- package/esm/openapi/build-openapi-document.d.mts.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/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-url.mjs +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/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/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/uuid-v5.mjs +1 -1
- package/esm/openapi/schema-registry.d.mts +1 -1
- package/esm/openapi/security.mjs +1 -1
- package/esm/openapi/types.d.mts +23 -21
- package/esm/openapi/types.d.mts.map +1 -1
- package/esm/production/assert-generated-imports.mjs +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 +2 -1
- 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 +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/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 +12 -32
- package/esm/restful/restful.d.mts.map +1 -1
- package/esm/router/index.d.mts +2 -1
- package/esm/router/index.mjs +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/resolve-route-rate-limit.mjs +3 -3
- package/esm/router/resolve-route-rate-limit.mjs.map +1 -1
- 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 +1 -1
- package/esm/router/route-guard-names.mjs.map +1 -1
- 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 +1 -3
- package/esm/router/route-name-taken-error.d.mts.map +1 -1
- 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 +2 -4
- package/esm/router/router.d.mts.map +1 -1
- package/esm/router/router.mjs +8 -6
- package/esm/router/router.mjs.map +1 -1
- package/esm/router/types.d.mts +25 -26
- package/esm/router/types.d.mts.map +1 -1
- package/esm/router/unguarded-route-diagnostics.d.mts +6 -8
- package/esm/router/unguarded-route-diagnostics.d.mts.map +1 -1
- package/esm/secrets/errors.d.mts +9 -0
- package/esm/secrets/errors.d.mts.map +1 -0
- package/esm/secrets/errors.mjs +22 -0
- package/esm/secrets/errors.mjs.map +1 -0
- package/esm/secrets/file-backend.mjs +167 -0
- package/esm/secrets/file-backend.mjs.map +1 -0
- package/esm/secrets/index.d.mts +6 -0
- package/esm/secrets/index.mjs +6 -0
- package/esm/secrets/keyring-backend.mjs +50 -0
- package/esm/secrets/keyring-backend.mjs.map +1 -0
- package/esm/secrets/memory-backend.d.mts +12 -0
- package/esm/secrets/memory-backend.d.mts.map +1 -0
- package/esm/secrets/memory-backend.mjs +28 -0
- package/esm/secrets/memory-backend.mjs.map +1 -0
- package/esm/secrets/secret-store.d.mts +25 -0
- package/esm/secrets/secret-store.d.mts.map +1 -0
- package/esm/secrets/secret-store.mjs +117 -0
- package/esm/secrets/secret-store.mjs.map +1 -0
- package/esm/secrets/secrets.d.mts +11 -0
- package/esm/secrets/secrets.d.mts.map +1 -0
- package/esm/secrets/secrets.mjs +63 -0
- package/esm/secrets/secrets.mjs.map +1 -0
- package/esm/secrets/types.d.mts +22 -0
- package/esm/secrets/types.d.mts.map +1 -0
- package/esm/socket/index.d.mts +2 -1
- package/esm/socket/index.mjs +2 -2
- package/esm/socket/types.d.mts +2 -4
- package/esm/socket/types.d.mts.map +1 -1
- package/esm/socket/utils.d.mts +8 -3
- package/esm/socket/utils.d.mts.map +1 -1
- package/esm/socket/utils.mjs +12 -1
- package/esm/socket/utils.mjs.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 +2 -2
- package/esm/storage/local-disk-roots.mjs.map +1 -1
- 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 +3 -4
- package/esm/storage/storage.d.mts.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 +1 -2
- package/esm/storage/utils/storage-not-initialized-error.d.mts.map +1 -1
- package/esm/tests/authenticated-test-client.d.mts +5 -6
- package/esm/tests/authenticated-test-client.d.mts.map +1 -1
- package/esm/tests/factories.d.mts +38 -23
- package/esm/tests/factories.d.mts.map +1 -1
- package/esm/tests/fakes/cache-fake.d.mts +14 -9
- package/esm/tests/fakes/cache-fake.d.mts.map +1 -1
- package/esm/tests/fakes/clock-fake.d.mts +13 -8
- package/esm/tests/fakes/clock-fake.d.mts.map +1 -1
- package/esm/tests/fakes/fake-assertion-error.d.mts +2 -3
- package/esm/tests/fakes/fake-assertion-error.d.mts.map +1 -1
- package/esm/tests/fakes/ids-fake.d.mts +5 -4
- package/esm/tests/fakes/ids-fake.d.mts.map +1 -1
- package/esm/tests/fakes/index.d.mts +3 -1
- package/esm/tests/fakes/index.mjs +2 -1
- package/esm/tests/fakes/mail-fake.d.mts +21 -13
- package/esm/tests/fakes/mail-fake.d.mts.map +1 -1
- package/esm/tests/fakes/queue-fake.d.mts +21 -13
- package/esm/tests/fakes/queue-fake.d.mts.map +1 -1
- package/esm/tests/fakes/secrets-fake.d.mts +13 -0
- package/esm/tests/fakes/secrets-fake.d.mts.map +1 -0
- package/esm/tests/fakes/secrets-fake.mjs +50 -0
- package/esm/tests/fakes/secrets-fake.mjs.map +1 -0
- package/esm/tests/fakes/storage-fake.d.mts +12 -8
- package/esm/tests/fakes/storage-fake.d.mts.map +1 -1
- package/esm/tests/fakes/storage-fake.mjs +1 -1
- package/esm/tests/fakes/test-fakes.d.mts +9 -10
- package/esm/tests/fakes/test-fakes.d.mts.map +1 -1
- package/esm/tests/fakes/test-fakes.mjs +6 -3
- package/esm/tests/fakes/test-fakes.mjs.map +1 -1
- package/esm/tests/index.d.mts +3 -1
- package/esm/tests/index.mjs +2 -1
- package/esm/tests/snapshot-response.d.mts +4 -5
- package/esm/tests/snapshot-response.d.mts.map +1 -1
- package/esm/tests/start-http-development-server.d.mts +4 -6
- package/esm/tests/start-http-development-server.d.mts.map +1 -1
- package/esm/tests/start-http-development-server.mjs +5 -5
- 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 +11 -12
- package/esm/tests/test-helpers.d.mts.map +1 -1
- package/esm/tests/test-http-server.d.mts +14 -10
- package/esm/tests/test-http-server.d.mts.map +1 -1
- package/esm/tests/test-lifecycle-state.mjs +1 -1
- package/esm/tests/vitest-setup.d.mts +7 -8
- package/esm/tests/vitest-setup.d.mts.map +1 -1
- package/esm/tests/vitest-setup.mjs.map +1 -1
- package/esm/tooling/agents-md/agents-md-markers.d.mts +4 -5
- package/esm/tooling/agents-md/agents-md-markers.d.mts.map +1 -1
- package/esm/tooling/agents-md/agents-md-markers.mjs +2 -1
- package/esm/tooling/agents-md/agents-md-markers.mjs.map +1 -1
- package/esm/tooling/agents-md/agents-md-refresher.d.mts +19 -12
- package/esm/tooling/agents-md/agents-md-refresher.d.mts.map +1 -1
- package/esm/tooling/agents-md/installed-skills.d.mts +13 -9
- package/esm/tooling/agents-md/installed-skills.d.mts.map +1 -1
- package/esm/tooling/agents-md/render-agents-md.d.mts +8 -7
- package/esm/tooling/agents-md/render-agents-md.d.mts.map +1 -1
- package/esm/tooling/agents-md/render-agents-md.mjs +2 -2
- package/esm/tooling/agents-md/render-agents-md.mjs.map +1 -1
- package/esm/tooling/agents-md/write-agents-md.d.mts +17 -12
- package/esm/tooling/agents-md/write-agents-md.d.mts.map +1 -1
- package/esm/tooling/board/board-message.d.mts +4 -6
- package/esm/tooling/board/board-message.d.mts.map +1 -1
- package/esm/tooling/board/board.d.mts +50 -38
- package/esm/tooling/board/board.d.mts.map +1 -1
- package/esm/tooling/board/board.mjs +4 -3
- package/esm/tooling/board/board.mjs.map +1 -1
- package/esm/tooling/board/board.types.d.mts +32 -23
- package/esm/tooling/board/board.types.d.mts.map +1 -1
- package/esm/tooling/check/changed-files.d.mts +4 -6
- package/esm/tooling/check/changed-files.d.mts.map +1 -1
- package/esm/tooling/check/changed-files.mjs +2 -2
- package/esm/tooling/check/changed-files.mjs.map +1 -1
- package/esm/tooling/check/check-report.types.d.mts +22 -17
- package/esm/tooling/check/check-report.types.d.mts.map +1 -1
- package/esm/tooling/check/code-style-conventions.mjs +25 -25
- package/esm/tooling/check/code-style-conventions.mjs.map +1 -1
- package/esm/tooling/check/conventions-step.d.mts +4 -6
- package/esm/tooling/check/conventions-step.d.mts.map +1 -1
- package/esm/tooling/check/conventions-step.mjs +7 -18
- package/esm/tooling/check/conventions-step.mjs.map +1 -1
- package/esm/tooling/check/environment-step.d.mts +2 -4
- package/esm/tooling/check/environment-step.d.mts.map +1 -1
- package/esm/tooling/check/environment-step.mjs +1 -1
- package/esm/tooling/check/index.mjs +1 -1
- package/esm/tooling/check/lint-step.d.mts +5 -12
- package/esm/tooling/check/lint-step.d.mts.map +1 -1
- package/esm/tooling/check/lint-step.mjs +16 -12
- package/esm/tooling/check/lint-step.mjs.map +1 -1
- package/esm/tooling/check/request-input.mjs +15 -15
- package/esm/tooling/check/request-input.mjs.map +1 -1
- package/esm/tooling/check/run-check.d.mts +24 -14
- package/esm/tooling/check/run-check.d.mts.map +1 -1
- package/esm/tooling/check/run-check.mjs +2 -2
- package/esm/tooling/check/run-check.mjs.map +1 -1
- package/esm/tooling/check/run-tests.d.mts +22 -15
- package/esm/tooling/check/run-tests.d.mts.map +1 -1
- package/esm/tooling/check/security-conventions.mjs +133 -131
- package/esm/tooling/check/security-conventions.mjs.map +1 -1
- package/esm/tooling/check/source-ast.mjs +92 -132
- package/esm/tooling/check/source-ast.mjs.map +1 -1
- package/esm/tooling/check/tests-step.d.mts +7 -8
- package/esm/tooling/check/tests-step.d.mts.map +1 -1
- package/esm/tooling/check/tests-step.mjs +3 -3
- package/esm/tooling/check/tests-step.mjs.map +1 -1
- package/esm/tooling/dev-state/dev-server-state.d.mts +17 -13
- package/esm/tooling/dev-state/dev-server-state.d.mts.map +1 -1
- package/esm/tooling/devtools/devtools-client.d.mts +29 -20
- package/esm/tooling/devtools/devtools-client.d.mts.map +1 -1
- package/esm/tooling/generate/generation.d.mts +34 -22
- package/esm/tooling/generate/generation.d.mts.map +1 -1
- package/esm/tooling/generate/generation.mjs +9 -5
- package/esm/tooling/generate/generation.mjs.map +1 -1
- package/esm/tooling/generate/generator-spec.d.mts +9 -9
- package/esm/tooling/generate/generator-spec.d.mts.map +1 -1
- package/esm/tooling/generate/index.mjs +1 -1
- package/esm/tooling/generate/project-files.mjs +3 -3
- package/esm/tooling/generate/project-files.mjs.map +1 -1
- package/esm/tooling/generate/run-cli.d.mts +14 -11
- package/esm/tooling/generate/run-cli.d.mts.map +1 -1
- package/esm/tooling/generate/run-cli.mjs +2 -2
- package/esm/tooling/generate/run-cli.mjs.map +1 -1
- package/esm/tooling/generate/unified-diff.d.mts +10 -7
- package/esm/tooling/generate/unified-diff.d.mts.map +1 -1
- package/esm/tooling/index.d.mts +1 -0
- package/esm/tooling/inspect/boot-for-inspect.d.mts +7 -7
- package/esm/tooling/inspect/boot-for-inspect.d.mts.map +1 -1
- package/esm/tooling/inspect/collect-config.mjs +3 -3
- package/esm/tooling/inspect/collect-config.mjs.map +1 -1
- package/esm/tooling/inspect/collect-models.d.mts +4 -3
- package/esm/tooling/inspect/collect-models.d.mts.map +1 -1
- package/esm/tooling/inspect/collect-models.mjs +1 -1
- package/esm/tooling/inspect/collect-packages.d.mts +1 -2
- package/esm/tooling/inspect/collect-packages.d.mts.map +1 -1
- package/esm/tooling/inspect/collect-pages.mjs +10 -10
- package/esm/tooling/inspect/collect-pages.mjs.map +1 -1
- package/esm/tooling/inspect/collect-routes.mjs +1 -1
- package/esm/tooling/inspect/event-recorder.d.mts +7 -7
- package/esm/tooling/inspect/event-recorder.d.mts.map +1 -1
- package/esm/tooling/inspect/index.d.mts +2 -1
- package/esm/tooling/inspect/index.mjs +1 -1
- package/esm/tooling/inspect/inspect-app.d.mts +25 -16
- package/esm/tooling/inspect/inspect-app.d.mts.map +1 -1
- package/esm/tooling/inspect/inspect-report.schema.d.mts +1 -2
- package/esm/tooling/inspect/inspect-report.schema.d.mts.map +1 -1
- package/esm/tooling/inspect/inspect-report.types.d.mts +86 -54
- package/esm/tooling/inspect/inspect-report.types.d.mts.map +1 -1
- package/esm/tooling/mcp/create-mcp-context.d.mts +11 -8
- package/esm/tooling/mcp/create-mcp-context.d.mts.map +1 -1
- package/esm/tooling/mcp/db-schema.d.mts +10 -9
- package/esm/tooling/mcp/db-schema.d.mts.map +1 -1
- package/esm/tooling/mcp/docs-search.d.mts +20 -15
- package/esm/tooling/mcp/docs-search.d.mts.map +1 -1
- package/esm/tooling/mcp/index.mjs +1 -1
- package/esm/tooling/mcp/load-ai-tools.d.mts +7 -8
- package/esm/tooling/mcp/load-ai-tools.d.mts.map +1 -1
- package/esm/tooling/mcp/load-ai-tools.mjs +2 -1
- package/esm/tooling/mcp/load-ai-tools.mjs.map +1 -1
- package/esm/tooling/mcp/mcp-tools.d.mts +29 -19
- package/esm/tooling/mcp/mcp-tools.d.mts.map +1 -1
- package/esm/tooling/mcp/mcp-tools.mjs +3 -2
- package/esm/tooling/mcp/mcp-tools.mjs.map +1 -1
- package/esm/tooling/mcp/start-mcp-server.d.mts +24 -17
- package/esm/tooling/mcp/start-mcp-server.d.mts.map +1 -1
- package/esm/tooling/mcp/start-mcp-server.mjs +1 -1
- package/esm/tooling/mcp/start-mcp-server.mjs.map +1 -1
- package/esm/tooling/mcp/tool-input.d.mts +7 -7
- package/esm/tooling/mcp/tool-input.d.mts.map +1 -1
- package/esm/tooling/problem.d.mts +27 -17
- package/esm/tooling/problem.d.mts.map +1 -1
- 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 +36 -22
- package/esm/tooling/trace/trace-report.types.d.mts.map +1 -1
- package/esm/tooling/trace/trace-request.d.mts +27 -20
- package/esm/tooling/trace/trace-request.d.mts.map +1 -1
- package/esm/tooling/trace/trace-request.mjs +2 -2
- package/esm/tooling/trace/trace-request.mjs.map +1 -1
- package/esm/tooling/typecheck/index.mjs +1 -1
- package/esm/tooling/typecheck/run-typecheck.d.mts +15 -48
- package/esm/tooling/typecheck/run-typecheck.d.mts.map +1 -1
- package/esm/tooling/typecheck/run-typecheck.mjs +42 -105
- package/esm/tooling/typecheck/run-typecheck.mjs.map +1 -1
- 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/index.mjs +3 -1
- package/esm/upgrade/codemods/index.mjs.map +1 -1
- package/esm/upgrade/codemods/logger-sync-calls.mjs +1 -1
- package/esm/upgrade/codemods/logger-sync-calls.mjs.map +1 -1
- package/esm/upgrade/codemods/oxc-toolchain.mjs +142 -0
- package/esm/upgrade/codemods/oxc-toolchain.mjs.map +1 -0
- package/esm/upgrade/codemods/request-log-snapshot.mjs +1 -1
- package/esm/upgrade/codemods/request-log-snapshot.mjs.map +1 -1
- package/esm/upgrade/codemods/toolchain-templates.mjs +244 -0
- package/esm/upgrade/codemods/toolchain-templates.mjs.map +1 -0
- package/esm/upgrade/diff.mjs +1 -1
- package/esm/upgrade/diff.mjs.map +1 -1
- package/esm/upgrade/load-ts-morph.mjs +3 -2
- package/esm/upgrade/load-ts-morph.mjs.map +1 -1
- package/esm/upgrade/run-upgrade.mjs +26 -7
- package/esm/upgrade/run-upgrade.mjs.map +1 -1
- 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/utils/app-log.d.mts +1 -2
- package/esm/utils/app-log.d.mts.map +1 -1
- package/esm/utils/clock.d.mts +8 -6
- package/esm/utils/clock.d.mts.map +1 -1
- 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.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 +9 -6
- package/esm/utils/ids.d.mts.map +1 -1
- package/esm/utils/index.d.mts +2 -1
- package/esm/utils/index.mjs +1 -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 +11 -10
- package/esm/utils/runtime.d.mts.map +1 -1
- 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 +5 -1
- package/esm/validation/index.mjs +1 -1
- package/esm/validation/plugins/index.mjs +1 -1
- package/esm/validation/types.d.mts +6 -4
- package/esm/validation/types.d.mts.map +1 -1
- package/esm/validation/validateAll.mjs +2 -2
- package/esm/validation/validateAll.mjs.map +1 -1
- package/esm/validation/validation-failure-status.mjs +2 -2
- package/esm/validation/validation-failure-status.mjs.map +1 -1
- package/esm/validation/validators/file-validator.d.mts +2 -4
- 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/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 +8 -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 +379 -22
- package/llms.txt +3 -2
- package/package.json +27 -15
- package/skills/README.md +2 -1
- package/skills/create-module/SKILL.md +7 -0
- package/skills/index.md +3 -1
- package/skills/report-framework-issue.md +154 -0
- package/skills/run-app/SKILL.md +120 -10
- package/skills/store-secrets/SKILL.md +102 -0
- package/skills/test-fakes/SKILL.md +13 -11
- package/skills/upgrade-from-5-29/SKILL.md +78 -0
- package/skills/warlock-check/SKILL.md +6 -1
- package/skills/warlock-doctor/SKILL.md +9 -0
- package/skills/wire-socket/SKILL.md +19 -0
- package/skills/write-cli-command/SKILL.md +21 -0
- package/esm/tooling/check/index.d.mts +0 -8
- package/esm/tooling/typecheck/index.d.mts +0 -1
|
@@ -1,55 +1,16 @@
|
|
|
1
|
-
import { tsconfigManager } from "../../tsconfig-manager.mjs";
|
|
2
1
|
import { BaseHealthChecker } from "./base-health-checker.mjs";
|
|
2
|
+
import { CompilerSession } from "../../../tooling/typescript/compiler.mjs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
3
5
|
import { colors } from "@mongez/copper";
|
|
4
|
-
import ts from "typescript";
|
|
5
6
|
|
|
6
7
|
//#region ../../packages/core/src/dev-server/health-checker/checkers/typescript-health-checker.ts
|
|
7
8
|
var TypescriptHealthChecker = class extends BaseHealthChecker {
|
|
8
9
|
constructor(..._args) {
|
|
9
10
|
super(..._args);
|
|
10
|
-
this.
|
|
11
|
-
this.parsedConfig = null;
|
|
11
|
+
this.session = null;
|
|
12
12
|
this.name = "TypeScript";
|
|
13
13
|
this.workerPath = "./workers/ts-health.worker";
|
|
14
|
-
this.initialized = false;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Check if file is a TypeScript file
|
|
18
|
-
*/
|
|
19
|
-
isTypeScriptFile(filePath) {
|
|
20
|
-
const ext = filePath.toLowerCase();
|
|
21
|
-
return ext.endsWith(".ts") || ext.endsWith(".tsx");
|
|
22
|
-
}
|
|
23
|
-
/** Preserve files selected by tsconfig when source updates rebuild the program. */
|
|
24
|
-
getProgramRootNames(files) {
|
|
25
|
-
return [...new Set([...this.parsedConfig?.fileNames || [], ...files.map((file) => file.absolutePath)])];
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Extract line and column from diagnostic location
|
|
29
|
-
*/
|
|
30
|
-
getDiagnosticLocation(diagnostic) {
|
|
31
|
-
if (diagnostic.file && diagnostic.start !== void 0) {
|
|
32
|
-
const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
|
|
33
|
-
return {
|
|
34
|
-
lineNumber: line + 1,
|
|
35
|
-
columnNumber: character + 1
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
return {
|
|
39
|
-
lineNumber: 1,
|
|
40
|
-
columnNumber: 1
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Format diagnostic message
|
|
45
|
-
*/
|
|
46
|
-
formatDiagnosticMessage(diagnostic) {
|
|
47
|
-
if (diagnostic.file && diagnostic.start !== void 0) return ts.formatDiagnostic(diagnostic, {
|
|
48
|
-
getCurrentDirectory: () => process.cwd(),
|
|
49
|
-
getCanonicalFileName: (fileName) => fileName,
|
|
50
|
-
getNewLine: () => "\n"
|
|
51
|
-
});
|
|
52
|
-
return diagnostic.messageText.toString();
|
|
53
14
|
}
|
|
54
15
|
/**
|
|
55
16
|
* Display health check results in a pretty format
|
|
@@ -107,86 +68,46 @@ var TypescriptHealthChecker = class extends BaseHealthChecker {
|
|
|
107
68
|
if (errorCount > 0) summary.push(colors.red(`${errorCount} error${errorCount > 1 ? "s" : ""}`));
|
|
108
69
|
if (warningCount > 0) summary.push(colors.yellow(`${warningCount} warning${warningCount > 1 ? "s" : ""}`));
|
|
109
70
|
}
|
|
110
|
-
/**
|
|
111
|
-
* Detect when files are changed
|
|
112
|
-
*/
|
|
113
71
|
async onFileChanges(files) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}, void 0, this.program);
|
|
72
|
+
this.session?.update(files.map((file) => ({
|
|
73
|
+
path: file.absolutePath,
|
|
74
|
+
content: file.source
|
|
75
|
+
})));
|
|
119
76
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
initialize() {
|
|
124
|
-
try {
|
|
125
|
-
if (!tsconfigManager.tsconfig || Object.keys(tsconfigManager.tsconfig).length === 0) {
|
|
126
|
-
this.initialized = true;
|
|
127
|
-
return this;
|
|
128
|
-
}
|
|
129
|
-
this.parsedConfig = ts.parseJsonConfigFileContent(tsconfigManager.tsconfig, ts.sys, process.cwd());
|
|
130
|
-
if (this.parsedConfig.errors.length > 0) console.warn("TypeScript Health Checker: tsconfig.json has errors:", this.parsedConfig.errors.map((e) => ts.formatDiagnostic(e, ts.createCompilerHost({}))));
|
|
131
|
-
this.program = ts.createProgram(this.parsedConfig.fileNames, this.parsedConfig.options);
|
|
132
|
-
this.initialized = true;
|
|
133
|
-
} catch (error) {
|
|
134
|
-
console.warn("TypeScript Health Checker: Failed to initialize:", error);
|
|
135
|
-
this.initialized = true;
|
|
136
|
-
}
|
|
77
|
+
initialize(cwd = process.cwd()) {
|
|
78
|
+
this.shutdown();
|
|
79
|
+
if (existsSync(path.join(cwd, "tsconfig.json"))) this.session = new CompilerSession(cwd);
|
|
137
80
|
return this;
|
|
138
81
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
82
|
+
removeFile(file) {
|
|
83
|
+
this.session?.update([], [file.absolutePath]);
|
|
84
|
+
super.removeFile(file);
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
shutdown() {
|
|
88
|
+
this.session?.close();
|
|
89
|
+
this.session = null;
|
|
90
|
+
}
|
|
142
91
|
async validate(file, result) {
|
|
143
|
-
if (!this.
|
|
92
|
+
if (!this.session || !/\.tsx?$/i.test(file.absolutePath)) {
|
|
144
93
|
result.markAsHealthy();
|
|
145
94
|
return result;
|
|
146
95
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
const warnings = [];
|
|
163
|
-
for (const diagnostic of allDiagnostics) {
|
|
164
|
-
const location = this.getDiagnosticLocation(diagnostic);
|
|
165
|
-
const message = this.formatDiagnosticMessage(diagnostic);
|
|
166
|
-
const errorLength = diagnostic.length || 1;
|
|
167
|
-
if (diagnostic.category === ts.DiagnosticCategory.Error) errors.push({
|
|
168
|
-
message,
|
|
169
|
-
type: "error",
|
|
170
|
-
lineNumber: location.lineNumber,
|
|
171
|
-
columnNumber: location.columnNumber,
|
|
172
|
-
length: errorLength
|
|
173
|
-
});
|
|
174
|
-
else if (diagnostic.category === ts.DiagnosticCategory.Warning) warnings.push({
|
|
175
|
-
message,
|
|
176
|
-
type: "warning",
|
|
177
|
-
lineNumber: location.lineNumber,
|
|
178
|
-
columnNumber: location.columnNumber,
|
|
179
|
-
length: errorLength
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
if (errors.length > 0) result.addErrors(errors);
|
|
183
|
-
if (warnings.length > 0) result.addWarnings(warnings);
|
|
184
|
-
if (errors.length === 0 && warnings.length === 0) result.markAsHealthy();
|
|
185
|
-
else this.displayResults(file, result);
|
|
186
|
-
} catch (error) {
|
|
187
|
-
console.warn(`TypeScript Health Checker: Error validating file ${file.relativePath}:`, error);
|
|
188
|
-
result.markAsHealthy();
|
|
189
|
-
}
|
|
96
|
+
this.session.update([{
|
|
97
|
+
path: file.absolutePath,
|
|
98
|
+
content: file.source
|
|
99
|
+
}]);
|
|
100
|
+
const messages = this.session.diagnostics(file.absolutePath).map((diagnostic) => ({
|
|
101
|
+
type: diagnostic.severity,
|
|
102
|
+
message: diagnostic.message,
|
|
103
|
+
lineNumber: diagnostic.line,
|
|
104
|
+
columnNumber: diagnostic.column,
|
|
105
|
+
length: diagnostic.length
|
|
106
|
+
}));
|
|
107
|
+
result.addErrors(messages.filter((message) => message.type === "error"));
|
|
108
|
+
result.addWarnings(messages.filter((message) => message.type === "warning"));
|
|
109
|
+
if (messages.length === 0) result.markAsHealthy();
|
|
110
|
+
else this.displayResults(file, result);
|
|
190
111
|
return result;
|
|
191
112
|
}
|
|
192
113
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript-health-checker.mjs","names":[],"sources":["../../../../../../../../../../packages/core/src/dev-server/health-checker/checkers/typescript-health-checker.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\nimport ts from \"typescript\";\nimport type { FileManager } from \"../../file-manager\";\nimport { tsconfigManager } from \"../../tsconfig-manager\";\nimport type { FileHealthCheckerContract } from \"../file-health-checker.contract\";\nimport { FileHealthResult } from \"../file-health-result\";\nimport { BaseHealthChecker } from \"./base-health-checker\";\n\nexport class TypescriptHealthChecker\n extends BaseHealthChecker\n implements FileHealthCheckerContract\n{\n /**\n * Cached TypeScript program instance\n */\n private program: ts.Program | null = null;\n\n /**\n * Cached parsed TypeScript configuration\n */\n private parsedConfig: ts.ParsedCommandLine | null = null;\n\n /**\n * Health checker name\n */\n public name: string = \"TypeScript\";\n\n /**\n * Path to dedicated worker file for TypeScript checking\n * Runs in a separate thread to avoid blocking the main dev server\n */\n public workerPath: string = \"./workers/ts-health.worker\";\n\n /**\n * Whether checker is initialized\n */\n private initialized: boolean = false;\n\n /**\n * Check if file is a TypeScript file\n */\n private isTypeScriptFile(filePath: string): boolean {\n const ext = filePath.toLowerCase();\n return ext.endsWith(\".ts\") || ext.endsWith(\".tsx\");\n }\n\n /** Preserve files selected by tsconfig when source updates rebuild the program. */\n private getProgramRootNames(files: FileManager[]): string[] {\n return [\n ...new Set([\n ...(this.parsedConfig?.fileNames || []),\n ...files.map((file) => file.absolutePath),\n ]),\n ];\n }\n\n /**\n * Extract line and column from diagnostic location\n */\n private getDiagnosticLocation(diagnostic: ts.Diagnostic): {\n lineNumber: number;\n columnNumber: number;\n } {\n if (diagnostic.file && diagnostic.start !== undefined) {\n const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);\n return {\n lineNumber: line + 1, // TypeScript uses 0-based, we use 1-based\n columnNumber: character + 1,\n };\n }\n return {\n lineNumber: 1,\n columnNumber: 1,\n };\n }\n\n /**\n * Format diagnostic message\n */\n private formatDiagnosticMessage(diagnostic: ts.Diagnostic): string {\n if (diagnostic.file && diagnostic.start !== undefined) {\n return ts.formatDiagnostic(diagnostic, {\n getCurrentDirectory: () => process.cwd(),\n getCanonicalFileName: (fileName) => fileName,\n getNewLine: () => \"\\n\",\n });\n }\n return diagnostic.messageText.toString();\n }\n\n /**\n * Display health check results in a pretty format\n */\n private displayResults(file: FileManager, result: FileHealthResult): void {\n const stats = result.getStats();\n\n // Only display if there are errors or warnings\n if (stats.errors === 0 && stats.warnings === 0) {\n return;\n }\n\n const fileName = file.relativePath.replace(/\\\\/g, \"/\");\n const errorCount = stats.errors;\n const warningCount = stats.warnings;\n const sourceLines = file.source ? file.source.split(\"\\n\") : [];\n\n // Display header\n // console.log(\n // `\\n${colors.dim(\"╭─\")} ${colors.bold(colors.cyanBright(\"TypeScript Health\"))} ${colors.dim(\"→\")} ${colors.cyan(fileName)}`,\n // );\n\n // Display errors\n if (errorCount > 0) {\n const errorMessages = result.messages.filter((m) => m.type === \"error\");\n for (const error of errorMessages) {\n const icon = colors.redBright(\"✖\");\n const level = colors.redBright(colors.bold(\"ERROR\"));\n console.log(\n `\\n${icon} ${level} ${colors.dim(\"in\")} ${colors.cyanBright(fileName)}${colors.dim(`(${error.lineNumber},${error.columnNumber})`)}`,\n );\n // Extract just the message text (remove file path prefix if present)\n const messageLines = error.message.split(\"\\n\");\n const cleanMessage = messageLines\n .map((line) => line.replace(/^[^:]+:\\d+:\\d+ - /, \"\").trim())\n .filter((line) => line.length > 0)\n .join(\"\\n\");\n console.log(` ${colors.dim(\"→\")} ${colors.red(cleanMessage)}`);\n\n // Display code line with underline indicator\n if (\n sourceLines.length > 0 &&\n error.lineNumber > 0 &&\n error.lineNumber <= sourceLines.length\n ) {\n const lineIndex = error.lineNumber - 1; // Convert to 0-based index\n const lineContent = sourceLines[lineIndex];\n const lineNum = error.lineNumber.toString().padStart(4, \" \");\n const errorLength = error.length || 1;\n const columnIndex = error.columnNumber - 1; // Convert to 0-based index\n\n // Display the line with normal color (not all red)\n console.log(` ${colors.dim(lineNum)} ${colors.dim(\"│\")} ${lineContent || \"\"}`);\n\n // Display underline indicator\n // Padding accounts for: lineNum.length + 1 space + 1 (│) + 1 space = lineNum.length + 3\n // (The initial 2 spaces indent is already in the console.log)\n const prefixPadding = lineNum.length + 3;\n const columnPadding = \" \".repeat(columnIndex);\n const underline = colors.redBright(\"~\".repeat(Math.max(1, errorLength)));\n console.log(` ${colors.dim(\" \".repeat(prefixPadding))}${columnPadding}${underline}`);\n }\n }\n }\n\n // Display warnings\n if (warningCount > 0) {\n const warningMessages = result.messages.filter((m) => m.type === \"warning\");\n for (const warning of warningMessages) {\n const icon = colors.yellowBright(\"⚠\");\n const level = colors.yellowBright(colors.bold(\"WARNING\"));\n console.log(\n `\\n${icon} ${level} ${colors.dim(\"in\")} ${colors.cyanBright(fileName)}${colors.dim(`(${warning.lineNumber},${warning.columnNumber})`)}`,\n );\n // Extract just the message text (remove file path prefix if present)\n const messageLines = warning.message.split(\"\\n\");\n const cleanMessage = messageLines\n .map((line) => line.replace(/^[^:]+:\\d+:\\d+ - /, \"\").trim())\n .filter((line) => line.length > 0)\n .join(\"\\n\");\n console.log(` ${colors.dim(\"→\")} ${colors.yellow(cleanMessage)}`);\n\n // Display code line with underline indicator\n if (\n sourceLines.length > 0 &&\n warning.lineNumber > 0 &&\n warning.lineNumber <= sourceLines.length\n ) {\n const lineIndex = warning.lineNumber - 1; // Convert to 0-based index\n const lineContent = sourceLines[lineIndex];\n const lineNum = warning.lineNumber.toString().padStart(4, \" \");\n const warningLength = warning.length || 1;\n const columnIndex = warning.columnNumber - 1; // Convert to 0-based index\n\n // Display the line with normal color (not all yellow)\n console.log(` ${colors.dim(lineNum)} ${colors.dim(\"│\")} ${lineContent || \"\"}`);\n\n // Display underline indicator\n // Padding accounts for: lineNum.length + 1 space + 1 (│) + 1 space = lineNum.length + 3\n // (The initial 2 spaces indent is already in the console.log)\n const prefixPadding = lineNum.length + 3;\n const columnPadding = \" \".repeat(columnIndex);\n const underline = colors.yellowBright(\"~\".repeat(Math.max(1, warningLength)));\n console.log(` ${colors.dim(\" \".repeat(prefixPadding))}${columnPadding}${underline}`);\n }\n }\n }\n\n // Display summary\n const summary = [];\n if (errorCount > 0) {\n summary.push(colors.red(`${errorCount} error${errorCount > 1 ? \"s\" : \"\"}`));\n }\n if (warningCount > 0) {\n summary.push(colors.yellow(`${warningCount} warning${warningCount > 1 ? \"s\" : \"\"}`));\n }\n\n // console.log(\n // `\\n${colors.dim(\"╰─\")} ${colors.bold(\"TypeScript\")} ${colors.dim(\"→\")} ${summary.join(colors.dim(\" and \"))}`,\n // );\n }\n\n /**\n * Detect when files are changed\n */\n public async onFileChanges(files: FileManager[]): Promise<void> {\n // recreate an incremental program\n if (!this.parsedConfig) {\n return;\n }\n\n this.program = ts.createProgram(\n this.getProgramRootNames(files),\n {\n ...this.parsedConfig.options,\n incremental: true,\n },\n undefined,\n this.program!,\n );\n }\n\n /**\n * Initialize the health checker\n */\n public initialize(): TypescriptHealthChecker {\n try {\n // Verify tsconfigManager is initialized and has config\n if (!tsconfigManager.tsconfig || Object.keys(tsconfigManager.tsconfig).length === 0) {\n this.initialized = true;\n return this;\n }\n\n // Parse the config using tsconfigManager's cached config\n this.parsedConfig = ts.parseJsonConfigFileContent(\n tsconfigManager.tsconfig,\n ts.sys,\n process.cwd(),\n );\n\n // Check for config errors\n if (this.parsedConfig.errors.length > 0) {\n // Log config errors but continue (will skip validation)\n console.warn(\n \"TypeScript Health Checker: tsconfig.json has errors:\",\n this.parsedConfig.errors.map((e) => ts.formatDiagnostic(e, ts.createCompilerHost({}))),\n );\n }\n\n this.program = ts.createProgram(this.parsedConfig.fileNames, this.parsedConfig.options);\n\n this.initialized = true;\n } catch (error) {\n // Handle any errors during initialization gracefully\n console.warn(\"TypeScript Health Checker: Failed to initialize:\", error);\n this.initialized = true; // Mark as initialized to prevent retries\n }\n\n return this;\n }\n\n /**\n * Validate the health of the file\n */\n public async validate(file: FileManager, result: FileHealthResult): Promise<FileHealthResult> {\n // Early exit: skip non-TypeScript files\n if (!this.isTypeScriptFile(file.absolutePath)) {\n result.markAsHealthy();\n return result;\n }\n\n // Early exit: check if parsed config is available\n if (!this.parsedConfig) {\n result.markAsHealthy();\n return result;\n }\n\n try {\n // Lazy-load program on first validation if not already created\n if (!this.program) {\n // Create program with all project files from parsed config (for proper type checking)\n this.program = ts.createProgram(this.parsedConfig.fileNames, this.parsedConfig.options);\n }\n\n // Get source file from program\n const sourceFile = this.program.getSourceFile(file.absolutePath);\n\n // If file is not in the program, return healthy (might be excluded)\n if (!sourceFile) {\n result.markAsHealthy();\n return result;\n }\n\n // Get diagnostics for the specific file only\n const syntacticDiagnostics = this.program.getSyntacticDiagnostics(sourceFile);\n const semanticDiagnostics = this.program.getSemanticDiagnostics(sourceFile);\n\n // Combine all diagnostics\n const allDiagnostics = [...syntacticDiagnostics, ...semanticDiagnostics];\n\n // Convert TypeScript diagnostics to FileHealthResult format\n const errors: Array<{\n message: string;\n type: \"error\";\n lineNumber: number;\n columnNumber: number;\n length: number;\n }> = [];\n const warnings: Array<{\n message: string;\n type: \"warning\";\n lineNumber: number;\n columnNumber: number;\n length: number;\n }> = [];\n\n for (const diagnostic of allDiagnostics) {\n const location = this.getDiagnosticLocation(diagnostic);\n const message = this.formatDiagnosticMessage(diagnostic);\n const errorLength = diagnostic.length || 1;\n\n if (diagnostic.category === ts.DiagnosticCategory.Error) {\n errors.push({\n message,\n type: \"error\",\n lineNumber: location.lineNumber,\n columnNumber: location.columnNumber,\n length: errorLength,\n });\n } else if (diagnostic.category === ts.DiagnosticCategory.Warning) {\n warnings.push({\n message,\n type: \"warning\",\n lineNumber: location.lineNumber,\n columnNumber: location.columnNumber,\n length: errorLength,\n });\n }\n }\n\n // Add errors and warnings to result\n if (errors.length > 0) {\n result.addErrors(errors);\n }\n if (warnings.length > 0) {\n result.addWarnings(warnings);\n }\n\n // If no errors or warnings, mark as healthy\n if (errors.length === 0 && warnings.length === 0) {\n result.markAsHealthy();\n } else {\n // Display results if there are errors or warnings\n this.displayResults(file, result);\n }\n } catch (error) {\n // Handle any errors during validation gracefully\n console.warn(`TypeScript Health Checker: Error validating file ${file.relativePath}:`, error);\n result.markAsHealthy(); // Return healthy on error to avoid blocking\n }\n\n return result;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"typescript-health-checker.mjs","names":[],"sources":["../../../../../../../../../../packages/core/src/dev-server/health-checker/checkers/typescript-health-checker.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { CompilerSession } from \"../../../tooling/typescript/compiler\";\nimport type { FileManager } from \"../../file-manager\";\nimport type { FileHealthCheckerContract } from \"../file-health-checker.contract\";\nimport { FileHealthResult } from \"../file-health-result\";\nimport { BaseHealthChecker } from \"./base-health-checker\";\n\nexport class TypescriptHealthChecker\n extends BaseHealthChecker\n implements FileHealthCheckerContract\n{\n private session: CompilerSession | null = null;\n /**\n * Health checker name\n */\n public name: string = \"TypeScript\";\n\n /**\n * Path to dedicated worker file for TypeScript checking\n * Runs in a separate thread to avoid blocking the main dev server\n */\n public workerPath: string = \"./workers/ts-health.worker\";\n\n /**\n * Display health check results in a pretty format\n */\n private displayResults(file: FileManager, result: FileHealthResult): void {\n const stats = result.getStats();\n\n // Only display if there are errors or warnings\n if (stats.errors === 0 && stats.warnings === 0) {\n return;\n }\n\n const fileName = file.relativePath.replace(/\\\\/g, \"/\");\n const errorCount = stats.errors;\n const warningCount = stats.warnings;\n const sourceLines = file.source ? file.source.split(\"\\n\") : [];\n\n // Display header\n // console.log(\n // `\\n${colors.dim(\"╭─\")} ${colors.bold(colors.cyanBright(\"TypeScript Health\"))} ${colors.dim(\"→\")} ${colors.cyan(fileName)}`,\n // );\n\n // Display errors\n if (errorCount > 0) {\n const errorMessages = result.messages.filter((m) => m.type === \"error\");\n for (const error of errorMessages) {\n const icon = colors.redBright(\"✖\");\n const level = colors.redBright(colors.bold(\"ERROR\"));\n console.log(\n `\\n${icon} ${level} ${colors.dim(\"in\")} ${colors.cyanBright(fileName)}${colors.dim(`(${error.lineNumber},${error.columnNumber})`)}`,\n );\n // Extract just the message text (remove file path prefix if present)\n const messageLines = error.message.split(\"\\n\");\n const cleanMessage = messageLines\n .map((line) => line.replace(/^[^:]+:\\d+:\\d+ - /, \"\").trim())\n .filter((line) => line.length > 0)\n .join(\"\\n\");\n console.log(` ${colors.dim(\"→\")} ${colors.red(cleanMessage)}`);\n\n // Display code line with underline indicator\n if (\n sourceLines.length > 0 &&\n error.lineNumber > 0 &&\n error.lineNumber <= sourceLines.length\n ) {\n const lineIndex = error.lineNumber - 1; // Convert to 0-based index\n const lineContent = sourceLines[lineIndex];\n const lineNum = error.lineNumber.toString().padStart(4, \" \");\n const errorLength = error.length || 1;\n const columnIndex = error.columnNumber - 1; // Convert to 0-based index\n\n // Display the line with normal color (not all red)\n console.log(` ${colors.dim(lineNum)} ${colors.dim(\"│\")} ${lineContent || \"\"}`);\n\n // Display underline indicator\n // Padding accounts for: lineNum.length + 1 space + 1 (│) + 1 space = lineNum.length + 3\n // (The initial 2 spaces indent is already in the console.log)\n const prefixPadding = lineNum.length + 3;\n const columnPadding = \" \".repeat(columnIndex);\n const underline = colors.redBright(\"~\".repeat(Math.max(1, errorLength)));\n console.log(` ${colors.dim(\" \".repeat(prefixPadding))}${columnPadding}${underline}`);\n }\n }\n }\n\n // Display warnings\n if (warningCount > 0) {\n const warningMessages = result.messages.filter((m) => m.type === \"warning\");\n for (const warning of warningMessages) {\n const icon = colors.yellowBright(\"⚠\");\n const level = colors.yellowBright(colors.bold(\"WARNING\"));\n console.log(\n `\\n${icon} ${level} ${colors.dim(\"in\")} ${colors.cyanBright(fileName)}${colors.dim(`(${warning.lineNumber},${warning.columnNumber})`)}`,\n );\n // Extract just the message text (remove file path prefix if present)\n const messageLines = warning.message.split(\"\\n\");\n const cleanMessage = messageLines\n .map((line) => line.replace(/^[^:]+:\\d+:\\d+ - /, \"\").trim())\n .filter((line) => line.length > 0)\n .join(\"\\n\");\n console.log(` ${colors.dim(\"→\")} ${colors.yellow(cleanMessage)}`);\n\n // Display code line with underline indicator\n if (\n sourceLines.length > 0 &&\n warning.lineNumber > 0 &&\n warning.lineNumber <= sourceLines.length\n ) {\n const lineIndex = warning.lineNumber - 1; // Convert to 0-based index\n const lineContent = sourceLines[lineIndex];\n const lineNum = warning.lineNumber.toString().padStart(4, \" \");\n const warningLength = warning.length || 1;\n const columnIndex = warning.columnNumber - 1; // Convert to 0-based index\n\n // Display the line with normal color (not all yellow)\n console.log(` ${colors.dim(lineNum)} ${colors.dim(\"│\")} ${lineContent || \"\"}`);\n\n // Display underline indicator\n // Padding accounts for: lineNum.length + 1 space + 1 (│) + 1 space = lineNum.length + 3\n // (The initial 2 spaces indent is already in the console.log)\n const prefixPadding = lineNum.length + 3;\n const columnPadding = \" \".repeat(columnIndex);\n const underline = colors.yellowBright(\"~\".repeat(Math.max(1, warningLength)));\n console.log(` ${colors.dim(\" \".repeat(prefixPadding))}${columnPadding}${underline}`);\n }\n }\n }\n\n // Display summary\n const summary = [];\n if (errorCount > 0) {\n summary.push(colors.red(`${errorCount} error${errorCount > 1 ? \"s\" : \"\"}`));\n }\n if (warningCount > 0) {\n summary.push(colors.yellow(`${warningCount} warning${warningCount > 1 ? \"s\" : \"\"}`));\n }\n\n // console.log(\n // `\\n${colors.dim(\"╰─\")} ${colors.bold(\"TypeScript\")} ${colors.dim(\"→\")} ${summary.join(colors.dim(\" and \"))}`,\n // );\n }\n\n public async onFileChanges(files: FileManager[]): Promise<void> {\n this.session?.update(files.map((file) => ({ path: file.absolutePath, content: file.source })));\n }\n\n public initialize(cwd = process.cwd()): TypescriptHealthChecker {\n this.shutdown();\n if (existsSync(path.join(cwd, \"tsconfig.json\"))) this.session = new CompilerSession(cwd);\n return this;\n }\n\n public override removeFile(file: FileManager): this {\n this.session?.update([], [file.absolutePath]);\n super.removeFile(file);\n return this;\n }\n\n public shutdown(): void {\n this.session?.close();\n this.session = null;\n }\n\n public async validate(file: FileManager, result: FileHealthResult): Promise<FileHealthResult> {\n if (!this.session || !/\\.tsx?$/i.test(file.absolutePath)) {\n result.markAsHealthy();\n return result;\n }\n this.session.update([{ path: file.absolutePath, content: file.source }]);\n const diagnostics = this.session.diagnostics(file.absolutePath);\n const messages = diagnostics.map((diagnostic) => ({\n type: diagnostic.severity,\n message: diagnostic.message,\n lineNumber: diagnostic.line,\n columnNumber: diagnostic.column,\n length: diagnostic.length,\n }));\n result.addErrors(messages.filter((message) => message.type === \"error\"));\n result.addWarnings(messages.filter((message) => message.type === \"warning\"));\n if (messages.length === 0) result.markAsHealthy();\n else this.displayResults(file, result);\n return result;\n }\n}\n"],"mappings":";;;;;;;AASA,IAAa,0BAAb,cACU,kBAEV;;;iBAC4C;cAIpB;oBAMM;;;;;CAK5B,AAAQ,eAAe,MAAmB,QAAgC;EACxE,MAAM,QAAQ,OAAO,SAAS;EAG9B,IAAI,MAAM,WAAW,KAAK,MAAM,aAAa,GAC3C;EAGF,MAAM,WAAW,KAAK,aAAa,QAAQ,OAAO,GAAG;EACrD,MAAM,aAAa,MAAM;EACzB,MAAM,eAAe,MAAM;EAC3B,MAAM,cAAc,KAAK,SAAS,KAAK,OAAO,MAAM,IAAI,IAAI,CAAC;EAQ7D,IAAI,aAAa,GAAG;GAClB,MAAM,gBAAgB,OAAO,SAAS,QAAQ,MAAM,EAAE,SAAS,OAAO;GACtE,KAAK,MAAM,SAAS,eAAe;IACjC,MAAM,OAAO,OAAO,UAAU,GAAG;IACjC,MAAM,QAAQ,OAAO,UAAU,OAAO,KAAK,OAAO,CAAC;IACnD,QAAQ,IACN,KAAK,KAAK,GAAG,MAAM,GAAG,OAAO,IAAI,IAAI,EAAE,GAAG,OAAO,WAAW,QAAQ,IAAI,OAAO,IAAI,IAAI,MAAM,WAAW,GAAG,MAAM,aAAa,EAAE,GAClI;IAGA,MAAM,eADe,MAAM,QAAQ,MAAM,IACT,CAAC,CAC9B,KAAK,SAAS,KAAK,QAAQ,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAC3D,QAAQ,SAAS,KAAK,SAAS,CAAC,CAAC,CACjC,KAAK,IAAI;IACZ,QAAQ,IAAI,KAAK,OAAO,IAAI,GAAG,EAAE,GAAG,OAAO,IAAI,YAAY,GAAG;IAG9D,IACE,YAAY,SAAS,KACrB,MAAM,aAAa,KACnB,MAAM,cAAc,YAAY,QAChC;KAEA,MAAM,cAAc,YADF,MAAM,aAAa;KAErC,MAAM,UAAU,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,GAAG,GAAG;KAC3D,MAAM,cAAc,MAAM,UAAU;KACpC,MAAM,cAAc,MAAM,eAAe;KAGzC,QAAQ,IAAI,KAAK,OAAO,IAAI,OAAO,EAAE,GAAG,OAAO,IAAI,GAAG,EAAE,GAAG,eAAe,IAAI;KAK9E,MAAM,gBAAgB,QAAQ,SAAS;KACvC,MAAM,gBAAgB,IAAI,OAAO,WAAW;KAC5C,MAAM,YAAY,OAAO,UAAU,IAAI,OAAO,KAAK,IAAI,GAAG,WAAW,CAAC,CAAC;KACvE,QAAQ,IAAI,KAAK,OAAO,IAAI,IAAI,OAAO,aAAa,CAAC,IAAI,gBAAgB,WAAW;IACtF;GACF;EACF;EAGA,IAAI,eAAe,GAAG;GACpB,MAAM,kBAAkB,OAAO,SAAS,QAAQ,MAAM,EAAE,SAAS,SAAS;GAC1E,KAAK,MAAM,WAAW,iBAAiB;IACrC,MAAM,OAAO,OAAO,aAAa,GAAG;IACpC,MAAM,QAAQ,OAAO,aAAa,OAAO,KAAK,SAAS,CAAC;IACxD,QAAQ,IACN,KAAK,KAAK,GAAG,MAAM,GAAG,OAAO,IAAI,IAAI,EAAE,GAAG,OAAO,WAAW,QAAQ,IAAI,OAAO,IAAI,IAAI,QAAQ,WAAW,GAAG,QAAQ,aAAa,EAAE,GACtI;IAGA,MAAM,eADe,QAAQ,QAAQ,MAAM,IACX,CAAC,CAC9B,KAAK,SAAS,KAAK,QAAQ,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAC3D,QAAQ,SAAS,KAAK,SAAS,CAAC,CAAC,CACjC,KAAK,IAAI;IACZ,QAAQ,IAAI,KAAK,OAAO,IAAI,GAAG,EAAE,GAAG,OAAO,OAAO,YAAY,GAAG;IAGjE,IACE,YAAY,SAAS,KACrB,QAAQ,aAAa,KACrB,QAAQ,cAAc,YAAY,QAClC;KAEA,MAAM,cAAc,YADF,QAAQ,aAAa;KAEvC,MAAM,UAAU,QAAQ,WAAW,SAAS,CAAC,CAAC,SAAS,GAAG,GAAG;KAC7D,MAAM,gBAAgB,QAAQ,UAAU;KACxC,MAAM,cAAc,QAAQ,eAAe;KAG3C,QAAQ,IAAI,KAAK,OAAO,IAAI,OAAO,EAAE,GAAG,OAAO,IAAI,GAAG,EAAE,GAAG,eAAe,IAAI;KAK9E,MAAM,gBAAgB,QAAQ,SAAS;KACvC,MAAM,gBAAgB,IAAI,OAAO,WAAW;KAC5C,MAAM,YAAY,OAAO,aAAa,IAAI,OAAO,KAAK,IAAI,GAAG,aAAa,CAAC,CAAC;KAC5E,QAAQ,IAAI,KAAK,OAAO,IAAI,IAAI,OAAO,aAAa,CAAC,IAAI,gBAAgB,WAAW;IACtF;GACF;EACF;EAGA,MAAM,UAAU,CAAC;EACjB,IAAI,aAAa,GACf,QAAQ,KAAK,OAAO,IAAI,GAAG,WAAW,QAAQ,aAAa,IAAI,MAAM,IAAI,CAAC;EAE5E,IAAI,eAAe,GACjB,QAAQ,KAAK,OAAO,OAAO,GAAG,aAAa,UAAU,eAAe,IAAI,MAAM,IAAI,CAAC;CAMvF;CAEA,MAAa,cAAc,OAAqC;EAC9D,KAAK,SAAS,OAAO,MAAM,KAAK,UAAU;GAAE,MAAM,KAAK;GAAc,SAAS,KAAK;EAAO,EAAE,CAAC;CAC/F;CAEA,AAAO,WAAW,MAAM,QAAQ,IAAI,GAA4B;EAC9D,KAAK,SAAS;EACd,IAAI,WAAW,KAAK,KAAK,KAAK,eAAe,CAAC,GAAG,KAAK,UAAU,IAAI,gBAAgB,GAAG;EACvF,OAAO;CACT;CAEA,AAAgB,WAAW,MAAyB;EAClD,KAAK,SAAS,OAAO,CAAC,GAAG,CAAC,KAAK,YAAY,CAAC;EAC5C,MAAM,WAAW,IAAI;EACrB,OAAO;CACT;CAEA,AAAO,WAAiB;EACtB,KAAK,SAAS,MAAM;EACpB,KAAK,UAAU;CACjB;CAEA,MAAa,SAAS,MAAmB,QAAqD;EAC5F,IAAI,CAAC,KAAK,WAAW,CAAC,WAAW,KAAK,KAAK,YAAY,GAAG;GACxD,OAAO,cAAc;GACrB,OAAO;EACT;EACA,KAAK,QAAQ,OAAO,CAAC;GAAE,MAAM,KAAK;GAAc,SAAS,KAAK;EAAO,CAAC,CAAC;EAEvE,MAAM,WADc,KAAK,QAAQ,YAAY,KAAK,YACvB,CAAC,CAAC,KAAK,gBAAgB;GAChD,MAAM,WAAW;GACjB,SAAS,WAAW;GACpB,YAAY,WAAW;GACvB,cAAc,WAAW;GACzB,QAAQ,WAAW;EACrB,EAAE;EACF,OAAO,UAAU,SAAS,QAAQ,YAAY,QAAQ,SAAS,OAAO,CAAC;EACvE,OAAO,YAAY,SAAS,QAAQ,YAAY,QAAQ,SAAS,SAAS,CAAC;EAC3E,IAAI,SAAS,WAAW,GAAG,OAAO,cAAc;OAC3C,KAAK,eAAe,MAAM,MAAM;EACrC,OAAO;CACT;AACF"}
|
|
@@ -1,31 +1,22 @@
|
|
|
1
|
+
import { hasEslint, warnEslintDeprecation } from "./eslint-support.mjs";
|
|
1
2
|
import { EslintHealthChecker } from "./checkers/eslint-health-checker.mjs";
|
|
2
3
|
import { findOxlint } from "./oxlint-runner.mjs";
|
|
3
4
|
import { OxlintHealthChecker } from "./checkers/oxlint-health-checker.mjs";
|
|
4
5
|
import { TypescriptHealthChecker } from "./checkers/typescript-health-checker.mjs";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
import { existsSync } from "node:fs";
|
|
7
6
|
|
|
8
7
|
//#region ../../packages/core/src/dev-server/health-checker/default-health-checkers.ts
|
|
9
|
-
/** Whether the app has an ESLint flat config at its root. */
|
|
10
|
-
function hasEslint(cwd) {
|
|
11
|
-
return [
|
|
12
|
-
"js",
|
|
13
|
-
"mjs",
|
|
14
|
-
"cjs",
|
|
15
|
-
"ts",
|
|
16
|
-
"mts",
|
|
17
|
-
"cts"
|
|
18
|
-
].some((extension) => existsSync(path.join(cwd, `eslint.config.${extension}`)));
|
|
19
|
-
}
|
|
20
8
|
/** Explicit arrays remain custom-only; built-in booleans select among available checkers. */
|
|
21
9
|
function defaultHealthCheckers(options = {}, cwd = process.cwd()) {
|
|
22
10
|
const checkers = [];
|
|
23
11
|
if (options.typescript !== false) checkers.push(new TypescriptHealthChecker());
|
|
24
|
-
if (options.eslint
|
|
12
|
+
if (options.eslint === true) {
|
|
13
|
+
warnEslintDeprecation();
|
|
14
|
+
if (hasEslint(cwd)) checkers.push(new EslintHealthChecker());
|
|
15
|
+
}
|
|
25
16
|
if (options.oxlint !== false && findOxlint(cwd)) checkers.push(new OxlintHealthChecker());
|
|
26
17
|
return checkers;
|
|
27
18
|
}
|
|
28
19
|
|
|
29
20
|
//#endregion
|
|
30
|
-
export { defaultHealthCheckers
|
|
21
|
+
export { defaultHealthCheckers };
|
|
31
22
|
//# sourceMappingURL=default-health-checkers.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-health-checkers.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/dev-server/health-checker/default-health-checkers.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"default-health-checkers.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/dev-server/health-checker/default-health-checkers.ts"],"sourcesContent":["import { EslintHealthChecker } from \"./checkers/eslint-health-checker\";\nimport { OxlintHealthChecker } from \"./checkers/oxlint-health-checker\";\nimport { TypescriptHealthChecker } from \"./checkers/typescript-health-checker\";\nimport type {\n BuiltInHealthCheckerOptions,\n FileHealthCheckerContract,\n} from \"./file-health-checker.contract\";\nimport { hasEslint, warnEslintDeprecation } from \"./eslint-support\";\nimport { findOxlint } from \"./oxlint-runner\";\n\nexport { hasEslint } from \"./eslint-support\";\n\n/** Explicit arrays remain custom-only; built-in booleans select among available checkers. */\nexport function defaultHealthCheckers(\n options: BuiltInHealthCheckerOptions = {},\n cwd = process.cwd(),\n): FileHealthCheckerContract[] {\n const checkers: FileHealthCheckerContract[] = [];\n if (options.typescript !== false) checkers.push(new TypescriptHealthChecker());\n if (options.eslint === true) {\n warnEslintDeprecation();\n if (hasEslint(cwd)) checkers.push(new EslintHealthChecker());\n }\n if (options.oxlint !== false && findOxlint(cwd)) checkers.push(new OxlintHealthChecker());\n return checkers;\n}\n"],"mappings":";;;;;;;;AAaA,SAAgB,sBACd,UAAuC,CAAC,GACxC,MAAM,QAAQ,IAAI,GACW;CAC7B,MAAM,WAAwC,CAAC;CAC/C,IAAI,QAAQ,eAAe,OAAO,SAAS,KAAK,IAAI,wBAAwB,CAAC;CAC7E,IAAI,QAAQ,WAAW,MAAM;EAC3B,sBAAsB;EACtB,IAAI,UAAU,GAAG,GAAG,SAAS,KAAK,IAAI,oBAAoB,CAAC;CAC7D;CACA,IAAI,QAAQ,WAAW,SAAS,WAAW,GAAG,GAAG,SAAS,KAAK,IAAI,oBAAoB,CAAC;CACxF,OAAO;AACT"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
|
|
4
|
+
//#region ../../packages/core/src/dev-server/health-checker/eslint-support.ts
|
|
5
|
+
/** Whether the app has an ESLint flat config at its root. */
|
|
6
|
+
function hasEslint(cwd) {
|
|
7
|
+
return [
|
|
8
|
+
"js",
|
|
9
|
+
"mjs",
|
|
10
|
+
"cjs",
|
|
11
|
+
"ts",
|
|
12
|
+
"mts",
|
|
13
|
+
"cts"
|
|
14
|
+
].some((extension) => existsSync(path.join(cwd, `eslint.config.${extension}`)));
|
|
15
|
+
}
|
|
16
|
+
const ESLINT_DEPRECATION = "Deprecated: ESLint + Prettier support will be removed in 5.34.0. Migrate to Oxlint + Oxfmt with npx warlock upgrade --from 5.32 --to 5.33.0; remove the ESLint opt-in afterwards.";
|
|
17
|
+
let warned = false;
|
|
18
|
+
/** One warning per process, on stderr so JSON reports stay parseable. */
|
|
19
|
+
function warnEslintDeprecation() {
|
|
20
|
+
if (warned) return;
|
|
21
|
+
warned = true;
|
|
22
|
+
console.warn(ESLINT_DEPRECATION);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
export { ESLINT_DEPRECATION, hasEslint, warnEslintDeprecation };
|
|
27
|
+
//# sourceMappingURL=eslint-support.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eslint-support.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/dev-server/health-checker/eslint-support.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\n\n/** Whether the app has an ESLint flat config at its root. */\nexport function hasEslint(cwd: string): boolean {\n return [\"js\", \"mjs\", \"cjs\", \"ts\", \"mts\", \"cts\"].some((extension) =>\n existsSync(path.join(cwd, `eslint.config.${extension}`)),\n );\n}\n\nexport const ESLINT_DEPRECATION =\n \"Deprecated: ESLint + Prettier support will be removed in 5.34.0. Migrate to Oxlint + Oxfmt with npx warlock upgrade --from 5.32 --to 5.33.0; remove the ESLint opt-in afterwards.\";\n\nlet warned = false;\n\n/** One warning per process, on stderr so JSON reports stay parseable. */\nexport function warnEslintDeprecation(): void {\n if (warned) return;\n warned = true;\n console.warn(ESLINT_DEPRECATION);\n}\n"],"mappings":";;;;;AAIA,SAAgB,UAAU,KAAsB;CAC9C,OAAO;EAAC;EAAM;EAAO;EAAO;EAAM;EAAO;CAAK,CAAC,CAAC,MAAM,cACpD,WAAW,KAAK,KAAK,KAAK,iBAAiB,WAAW,CAAC,CACzD;AACF;AAEA,MAAa,qBACX;AAEF,IAAI,SAAS;;AAGb,SAAgB,wBAA8B;CAC5C,IAAI,QAAQ;CACZ,SAAS;CACT,QAAQ,KAAK,kBAAkB;AACjC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { FileManager } from "../file-manager.mjs";
|
|
2
2
|
import { FileHealthResult } from "./file-health-result.mjs";
|
|
3
|
-
|
|
4
3
|
//#region ../../packages/core/src/dev-server/health-checker/file-health-checker.contract.d.ts
|
|
5
|
-
type HealthCheckerFilesStats = {
|
|
4
|
+
export type HealthCheckerFilesStats = {
|
|
6
5
|
name: string;
|
|
7
6
|
files: {
|
|
8
7
|
healthy: number;
|
|
@@ -17,7 +16,7 @@ type HealthCheckerFilesStats = {
|
|
|
17
16
|
totalFiles: number;
|
|
18
17
|
};
|
|
19
18
|
};
|
|
20
|
-
interface FileHealthCheckerContract {
|
|
19
|
+
export interface FileHealthCheckerContract {
|
|
21
20
|
/**
|
|
22
21
|
* Health checker name (unique identifier)
|
|
23
22
|
*/
|
|
@@ -41,6 +40,8 @@ interface FileHealthCheckerContract {
|
|
|
41
40
|
* Called once on startup (before any checks run)
|
|
42
41
|
*/
|
|
43
42
|
initialize(): void;
|
|
43
|
+
/** Release resources owned by an inline checker. */
|
|
44
|
+
shutdown?(): void | Promise<void>;
|
|
44
45
|
/**
|
|
45
46
|
* Detect when files are changed
|
|
46
47
|
*/
|
|
@@ -58,12 +59,12 @@ interface FileHealthCheckerContract {
|
|
|
58
59
|
*/
|
|
59
60
|
stats(): Promise<HealthCheckerFilesStats>;
|
|
60
61
|
}
|
|
61
|
-
/** Select
|
|
62
|
-
type BuiltInHealthCheckerOptions = {
|
|
62
|
+
/** Select background checks; TypeScript and configured Oxlint run by default. */
|
|
63
|
+
export type BuiltInHealthCheckerOptions = {
|
|
63
64
|
typescript?: boolean;
|
|
65
|
+
/** @deprecated Removed in 5.34.0. Explicit opt-in only; default false. */
|
|
64
66
|
eslint?: boolean;
|
|
65
67
|
oxlint?: boolean;
|
|
66
68
|
};
|
|
67
69
|
//#endregion
|
|
68
|
-
export { BuiltInHealthCheckerOptions, FileHealthCheckerContract };
|
|
69
70
|
//# sourceMappingURL=file-health-checker.contract.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-health-checker.contract.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/dev-server/health-checker/file-health-checker.contract.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-health-checker.contract.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/dev-server/health-checker/file-health-checker.contract.ts"],"mappings":";;;YAGY;EACV;EACA;IACE;IACA;;EAEF;IACE;IACA;;EAEF;IACE;IACA;;;iBAIa;;;;EAIf;;;;;;;;;;;;;;EAeA;;;;;EAMA;;EAGA,oBAAoB;;;;EAKpB,cAAc,OAAO,gBAAgB;;;;EAKrC,WAAW,MAAM;;;;EAKjB,MAAM,MAAM,cAAc,QAAQ;;;;EAKlC,SAAS,QAAQ;;;YAIP;EACV;;EAEA;EACA"}
|
|
@@ -39,7 +39,7 @@ type FileHealthMessage = {
|
|
|
39
39
|
*/
|
|
40
40
|
ruleId?: string;
|
|
41
41
|
};
|
|
42
|
-
declare class FileHealthResult {
|
|
42
|
+
export declare class FileHealthResult {
|
|
43
43
|
/**
|
|
44
44
|
* Result of the health check
|
|
45
45
|
*/
|
|
@@ -66,5 +66,5 @@ declare class FileHealthResult {
|
|
|
66
66
|
getStats(): FileHealthStats;
|
|
67
67
|
}
|
|
68
68
|
//#endregion
|
|
69
|
-
export {
|
|
69
|
+
export {};
|
|
70
70
|
//# sourceMappingURL=file-health-result.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-health-result.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/dev-server/health-checker/file-health-result.ts"],"mappings":";KAAK
|
|
1
|
+
{"version":3,"file":"file-health-result.d.mts","names":[],"sources":["../../../../../../../../../packages/core/src/dev-server/health-checker/file-health-result.ts"],"mappings":";KAAK;;;;EAIH;;;;EAIA;;;;EAIA;;KAGG;;;;EAIH;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;qBAGW;;;;EAIJ;;;;EAKA,UAAU;;;;EAKV;;;;EAOA,UAAU,UAAU;;;;EAQpB,YAAY,UAAU;;;;EAQtB,YAAY"}
|
|
@@ -368,6 +368,7 @@ var FilesHealthcareManager = class {
|
|
|
368
368
|
await worker.terminate();
|
|
369
369
|
} catch {}
|
|
370
370
|
}));
|
|
371
|
+
await Promise.all(this.healthCheckers.filter((checker) => !checker.workerPath).map((checker) => checker.shutdown?.()));
|
|
371
372
|
this.workers.clear();
|
|
372
373
|
this.workerInitPromises.clear();
|
|
373
374
|
this.checkerStats.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files-healthcare.manager.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/dev-server/health-checker/files-healthcare.manager.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\nimport type { Worker } from \"worker_threads\";\nimport { createWorker } from \"../create-worker\";\nimport { devLogInfo } from \"../dev-logger\";\nimport type { FileManager } from \"../file-manager\";\nimport type {\n FileHealthCheckerContract,\n HealthCheckerFilesStats,\n} from \"./file-health-checker.contract\";\n\n/**\n * Serialized file data to send to workers\n */\ntype SerializedFile = {\n path: string;\n content: string;\n relativePath: string;\n};\n\n/**\n * Diagnostic message from worker\n */\ntype DiagnosticMessage = {\n type: \"error\" | \"warning\";\n message: string;\n lineNumber: number;\n columnNumber: number;\n length: number;\n filePath: string;\n relativePath: string;\n ruleId?: string;\n};\n\n/**\n * File check result from worker\n */\ntype FileCheckResult = {\n path: string;\n relativePath: string;\n healthy: boolean;\n errors: DiagnosticMessage[];\n warnings: DiagnosticMessage[];\n};\n\n/**\n * Worker response type\n */\ntype WorkerResponse =\n | { type: \"initialized\"; success: boolean; hasConfig?: boolean; error?: string }\n | { type: \"results\"; results: FileCheckResult[] }\n | { type: \"error\"; message: string };\n\n/**\n * Files Healthcare Manager\n *\n * Manages health checkers for file validation during development.\n * Supports both main-thread and worker-based checkers.\n *\n * Checkers with `workerPath` run in dedicated worker threads for performance.\n * Checkers without `workerPath` run in the main thread.\n *\n * @example\n * ```typescript\n * const manager = new FilesHealthcareManager(files);\n *\n * manager.setHealthCheckers([\n * new TypescriptHealthChecker(), // Has workerPath → runs in worker\n * new CustomChecker(), // No workerPath → runs in main thread\n * ]);\n *\n * await manager.initialize();\n * await manager.validateAllFiles();\n * ```\n */\nexport class FilesHealthcareManager {\n /**\n * Registered health checkers\n */\n private healthCheckers: FileHealthCheckerContract[] = [];\n\n /**\n * Active worker instances (checkerName → Worker)\n */\n private workers = new Map<string, Worker>();\n\n /**\n * Worker initialization promises (for ensuring workers are ready)\n */\n private workerInitPromises = new Map<string, Promise<boolean>>();\n\n /**\n * Per-worker queue that serializes check requests\n */\n private workerQueues = new Map<string, Promise<void>>();\n\n /**\n * Aggregated stats for each checker\n */\n private checkerStats = new Map<\n string,\n {\n totalFiles: number;\n healthyFiles: number;\n defectiveFiles: number;\n totalErrors: number;\n totalWarnings: number;\n filesWithErrors: number;\n filesWithWarnings: number;\n }\n >();\n\n /**\n * Constructor\n * @param files - Map of tracked files\n */\n public constructor(private readonly files: Map<string, FileManager>) {}\n\n /**\n * Add health checkers to the manager\n * @param checkers - Checkers to add\n */\n public addHealthCheckers(...checkers: FileHealthCheckerContract[]): FilesHealthcareManager {\n this.healthCheckers.push(...checkers);\n return this;\n }\n\n /**\n * Set (replace) all health checkers\n * @param checkers - New set of checkers\n */\n public setHealthCheckers(checkers: FileHealthCheckerContract[]): FilesHealthcareManager {\n this.healthCheckers = checkers;\n return this;\n }\n\n /**\n * Initialize all health checkers\n *\n * For checkers with `workerPath`, spawns dedicated worker threads.\n * For other checkers, calls their `initialize()` method directly.\n */\n public async initialize(): Promise<void> {\n const initPromises = this.healthCheckers.map(async (checker) => {\n // Initialize stats for this checker\n this.checkerStats.set(checker.name, {\n totalFiles: 0,\n healthyFiles: 0,\n defectiveFiles: 0,\n totalErrors: 0,\n totalWarnings: 0,\n filesWithErrors: 0,\n filesWithWarnings: 0,\n });\n\n if (checker.workerPath) {\n // Spawn dedicated worker for this checker\n await this.spawnWorker(checker);\n } else {\n // Initialize checker on main thread\n checker.initialize();\n }\n });\n\n await Promise.all(initPromises);\n }\n\n /**\n * Spawn a worker for a checker\n */\n private async spawnWorker(checker: FileHealthCheckerContract): Promise<void> {\n if (!checker.workerPath) return;\n\n const worker = createWorker(checker.workerPath, import.meta.url, {\n workerData: { cwd: process.cwd() },\n });\n\n this.workers.set(checker.name, worker);\n\n // Create init promise\n const initPromise = new Promise<boolean>((resolve) => {\n const handler = (response: WorkerResponse) => {\n if (response.type === \"initialized\") {\n worker.off(\"message\", handler);\n resolve(response.success);\n }\n };\n\n worker.on(\"message\", handler);\n\n // Handle worker errors\n worker.on(\"error\", (error) => {\n console.error(`Health Checker Worker Error (${checker.name}):`, error);\n resolve(false);\n });\n\n // Send init message\n worker.postMessage({ type: \"init\", config: { cwd: process.cwd() } });\n });\n\n this.workerInitPromises.set(checker.name, initPromise);\n\n // Wait for initialization\n await initPromise;\n }\n\n /**\n * Validate all tracked files\n */\n public async validateAllFiles(): Promise<void> {\n const allFiles = Array.from(this.files.values());\n await this.checkFiles(allFiles);\n\n // Display stats\n await this.displayStats();\n }\n\n /**\n * Check the given files with all registered checkers\n *\n * All checkers run in parallel for performance.\n * Worker-based checkers communicate via postMessage.\n * Main-thread checkers are called directly.\n */\n public async checkFiles(files: FileManager[]): Promise<void> {\n const checkPromises = this.healthCheckers.map(async (checker) => {\n if (checker.workerPath) {\n return this.runInWorker(checker.name, files);\n } else {\n return this.runInline(checker, files);\n }\n });\n\n const results = await Promise.all(checkPromises);\n\n // Display any errors/warnings\n for (const checkerResults of results) {\n for (const result of checkerResults) {\n if (!result.healthy) {\n this.displayFileResults(result);\n }\n }\n }\n }\n\n /**\n * Run checker in worker thread\n */\n private async runInWorker(checkerName: string, files: FileManager[]): Promise<FileCheckResult[]> {\n const worker = this.workers.get(checkerName);\n\n if (!worker) {\n return files.map((f) => ({\n path: f.absolutePath,\n relativePath: f.relativePath,\n healthy: true,\n errors: [],\n warnings: [],\n }));\n }\n\n // Wait for worker to be initialized\n const initPromise = this.workerInitPromises.get(checkerName);\n if (initPromise) {\n const success = await initPromise;\n if (!success) {\n return files.map((f) => ({\n path: f.absolutePath,\n relativePath: f.relativePath,\n healthy: true,\n errors: [],\n warnings: [],\n }));\n }\n }\n\n // Serialize files for worker\n const serializedFiles: SerializedFile[] = files.map((f) => ({\n path: f.absolutePath,\n content: f.source,\n relativePath: f.relativePath,\n }));\n\n // Workers reply without a request id, so calls are serialized per worker:\n // exactly one \"check\" is in flight and its reply can only belong to it.\n const previous = this.workerQueues.get(checkerName) ?? Promise.resolve();\n\n const current = previous.then(() =>\n this.postCheck(checkerName, worker, files, serializedFiles),\n );\n\n this.workerQueues.set(\n checkerName,\n current.then(\n () => undefined,\n () => undefined,\n ),\n );\n\n return current;\n }\n\n /**\n * Post one check to the worker and wait for its single reply.\n * Resolves as healthy if the worker errors or exits so callers never hang.\n */\n private postCheck(\n checkerName: string,\n worker: Worker,\n files: FileManager[],\n serializedFiles: SerializedFile[],\n ): Promise<FileCheckResult[]> {\n return new Promise((resolve) => {\n const fallback = () =>\n files.map((f) => ({\n path: f.absolutePath,\n relativePath: f.relativePath,\n healthy: true,\n errors: [],\n warnings: [],\n }));\n\n const cleanup = () => {\n worker.off(\"message\", handler);\n worker.off(\"error\", onFailure);\n worker.off(\"exit\", onFailure);\n };\n\n const onFailure = () => {\n cleanup();\n resolve(fallback());\n };\n\n const handler = (response: WorkerResponse) => {\n if (response.type === \"results\") {\n cleanup();\n\n // Update stats\n this.updateStats(checkerName, response.results);\n\n resolve(response.results);\n } else if (response.type === \"error\") {\n cleanup();\n resolve(fallback());\n }\n };\n\n worker.on(\"message\", handler);\n worker.on(\"error\", onFailure);\n worker.on(\"exit\", onFailure);\n worker.postMessage({ type: \"check\", files: serializedFiles });\n });\n }\n\n /**\n * Run checker inline (main thread)\n */\n private async runInline(\n checker: FileHealthCheckerContract,\n files: FileManager[],\n ): Promise<FileCheckResult[]> {\n const results: FileCheckResult[] = [];\n\n for (const file of files) {\n const healthResult = await checker.check(file);\n const stats = healthResult.getStats();\n\n results.push({\n path: file.absolutePath,\n relativePath: file.relativePath,\n healthy: stats.state === \"healthy\",\n errors: healthResult.messages\n .filter((m) => m.type === \"error\")\n .map((m) => ({\n type: \"error\" as const,\n message: m.message,\n lineNumber: m.lineNumber,\n columnNumber: m.columnNumber,\n length: m.length || 1,\n filePath: file.absolutePath,\n relativePath: file.relativePath,\n ruleId: m.ruleId,\n })),\n warnings: healthResult.messages\n .filter((m) => m.type === \"warning\")\n .map((m) => ({\n type: \"warning\" as const,\n message: m.message,\n lineNumber: m.lineNumber,\n columnNumber: m.columnNumber,\n length: m.length || 1,\n filePath: file.absolutePath,\n relativePath: file.relativePath,\n ruleId: m.ruleId,\n })),\n });\n }\n\n // Update stats\n const checkerResults = results;\n this.updateStats(checker.name, checkerResults);\n\n return results;\n }\n\n /**\n * Update aggregated stats for a checker\n */\n private updateStats(checkerName: string, results: FileCheckResult[]): void {\n const stats = this.checkerStats.get(checkerName);\n if (!stats) return;\n\n for (const result of results) {\n stats.totalFiles++;\n if (result.healthy) {\n stats.healthyFiles++;\n } else {\n stats.defectiveFiles++;\n }\n stats.totalErrors += result.errors.length;\n stats.totalWarnings += result.warnings.length;\n if (result.errors.length > 0) stats.filesWithErrors++;\n if (result.warnings.length > 0) stats.filesWithWarnings++;\n }\n }\n\n /**\n * Detect when files are changed\n */\n public async onFileChanges(files: FileManager[]): Promise<void> {\n // Notify workers of file changes\n const serializedFiles: SerializedFile[] = files.map((f) => ({\n path: f.absolutePath,\n content: f.source,\n relativePath: f.relativePath,\n }));\n\n for (const [, worker] of this.workers) {\n worker.postMessage({ type: \"fileChanges\", files: serializedFiles });\n }\n\n // Notify inline checkers\n await Promise.all(\n this.healthCheckers.filter((c) => !c.workerPath).map((c) => c.onFileChanges(files)),\n );\n }\n\n /**\n * Remove files from tracking\n * Notifies both inline checkers and worker-based checkers about removed files\n */\n public removeFiles(files: FileManager[]): void {\n // Notify inline checkers\n this.healthCheckers\n .filter((c) => !c.workerPath)\n .forEach((checker) => files.forEach((file) => checker.removeFile(file)));\n\n // Notify workers about deleted files\n if (files.length > 0) {\n const deletedPaths = files.map((f) => ({\n path: f.absolutePath,\n relativePath: f.relativePath,\n }));\n\n for (const [, worker] of this.workers) {\n worker.postMessage({ type: \"filesDeleted\", files: deletedPaths });\n }\n }\n }\n\n /**\n * Display file results (errors/warnings)\n */\n private displayFileResults(result: FileCheckResult): void {\n const fileName = result.relativePath.replace(/\\\\/g, \"/\");\n\n // Display errors\n for (const error of result.errors) {\n const icon = colors.redBright(\"✖\");\n const level = colors.redBright(colors.bold(\"ERROR\"));\n console.log(\n `\\n${icon} ${level} ${colors.dim(\"in\")} ${colors.cyanBright(fileName)}${colors.dim(`(${error.lineNumber},${error.columnNumber})`)}`,\n );\n if (error.ruleId) {\n console.log(\n ` ${colors.magentaBright(error.ruleId)} ${colors.dim(\"→\")} ${colors.red(error.message)}`,\n );\n } else {\n console.log(` ${colors.dim(\"→\")} ${colors.red(error.message)}`);\n }\n }\n\n // Display warnings\n for (const warning of result.warnings) {\n const icon = colors.yellowBright(\"⚠\");\n const level = colors.yellowBright(colors.bold(\"WARNING\"));\n console.log(\n `\\n${icon} ${level} ${colors.dim(\"in\")} ${colors.cyanBright(fileName)}${colors.dim(`(${warning.lineNumber},${warning.columnNumber})`)}`,\n );\n if (warning.ruleId) {\n console.log(\n ` ${colors.magentaBright(warning.ruleId)} ${colors.dim(\"→\")} ${colors.yellow(warning.message)}`,\n );\n } else {\n console.log(` ${colors.dim(\"→\")} ${colors.yellow(warning.message)}`);\n }\n }\n }\n\n /**\n * Display stats for all health checkers\n */\n private async displayStats(): Promise<void> {\n const allStats: HealthCheckerFilesStats[] = [];\n\n for (const checker of this.healthCheckers) {\n const stats = this.checkerStats.get(checker.name);\n if (stats) {\n allStats.push({\n name: checker.name,\n files: {\n healthy: stats.healthyFiles,\n defective: stats.defectiveFiles,\n },\n warnings: {\n total: stats.totalWarnings,\n totalFiles: stats.filesWithWarnings,\n },\n errors: {\n total: stats.totalErrors,\n totalFiles: stats.filesWithErrors,\n },\n });\n }\n }\n\n console.log(\"\\n\");\n console.log(colors.bold(colors.cyan(\"━\".repeat(80))));\n devLogInfo(colors.bold(\" 📊 Health Checker Statistics\"));\n console.log(colors.bold(colors.cyan(\"━\".repeat(80))));\n console.log(\"\");\n\n allStats.forEach((stats: HealthCheckerFilesStats, index: number) => {\n const totalFiles = stats.files.healthy + stats.files.defective;\n const hasIssues = stats.files.defective > 0;\n\n // Checker name with icon\n const statusIcon = hasIssues ? \"⚠️\" : \"✅\";\n console.log(colors.bold(` ${statusIcon} ${stats.name}`));\n console.log(colors.dim(\" \" + \"─\".repeat(76)));\n\n // Files summary\n const filesLine = ` Files: ${colors.white(totalFiles.toString())} total │ ${colors.green(\"✓ \" + stats.files.healthy)} healthy │ ${hasIssues ? colors.red(\"✗ \" + stats.files.defective) : colors.dim(\"✗ 0\")} defective`;\n console.log(filesLine);\n\n // Issues summary\n const warningsText =\n stats.warnings.total > 0\n ? colors.yellow(`⚠ ${stats.warnings.total} warnings`)\n : colors.dim(\"⚠ 0 warnings\");\n\n const errorsText =\n stats.errors.total > 0\n ? colors.red(`✗ ${stats.errors.total} errors`)\n : colors.dim(\"✗ 0 errors\");\n\n console.log(` Issues: ${warningsText} │ ${errorsText}`);\n\n // Add spacing between checkers\n if (index < allStats.length - 1) {\n console.log(\"\");\n }\n });\n\n console.log(\"\");\n console.log(colors.bold(colors.cyan(\"━\".repeat(80))));\n console.log(\"\");\n }\n\n /**\n * Shutdown all workers\n */\n public async shutdown(): Promise<void> {\n await Promise.all(\n [...this.workers.values()].map(async (worker) => {\n try {\n // Let the shutdown handler release CLI children before forced termination.\n await new Promise<void>((resolve) => {\n const finish = () => {\n clearTimeout(timer);\n worker.off(\"exit\", finish);\n resolve();\n };\n const timer = setTimeout(finish, 500);\n worker.once(\"exit\", finish);\n worker.postMessage({ type: \"shutdown\" });\n });\n await worker.terminate();\n } catch {\n // Worker may already be terminated.\n }\n }),\n );\n\n this.workers.clear();\n this.workerInitPromises.clear();\n this.checkerStats.clear();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"files-healthcare.manager.mjs","names":[],"sources":["../../../../../../../../../packages/core/src/dev-server/health-checker/files-healthcare.manager.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\nimport type { Worker } from \"worker_threads\";\nimport { createWorker } from \"../create-worker\";\nimport { devLogInfo } from \"../dev-logger\";\nimport type { FileManager } from \"../file-manager\";\nimport type {\n FileHealthCheckerContract,\n HealthCheckerFilesStats,\n} from \"./file-health-checker.contract\";\n\n/**\n * Serialized file data to send to workers\n */\ntype SerializedFile = {\n path: string;\n content: string;\n relativePath: string;\n};\n\n/**\n * Diagnostic message from worker\n */\ntype DiagnosticMessage = {\n type: \"error\" | \"warning\";\n message: string;\n lineNumber: number;\n columnNumber: number;\n length: number;\n filePath: string;\n relativePath: string;\n ruleId?: string;\n};\n\n/**\n * File check result from worker\n */\ntype FileCheckResult = {\n path: string;\n relativePath: string;\n healthy: boolean;\n errors: DiagnosticMessage[];\n warnings: DiagnosticMessage[];\n};\n\n/**\n * Worker response type\n */\ntype WorkerResponse =\n | { type: \"initialized\"; success: boolean; hasConfig?: boolean; error?: string }\n | { type: \"results\"; results: FileCheckResult[] }\n | { type: \"error\"; message: string };\n\n/**\n * Files Healthcare Manager\n *\n * Manages health checkers for file validation during development.\n * Supports both main-thread and worker-based checkers.\n *\n * Checkers with `workerPath` run in dedicated worker threads for performance.\n * Checkers without `workerPath` run in the main thread.\n *\n * @example\n * ```typescript\n * const manager = new FilesHealthcareManager(files);\n *\n * manager.setHealthCheckers([\n * new TypescriptHealthChecker(), // Has workerPath → runs in worker\n * new CustomChecker(), // No workerPath → runs in main thread\n * ]);\n *\n * await manager.initialize();\n * await manager.validateAllFiles();\n * ```\n */\nexport class FilesHealthcareManager {\n /**\n * Registered health checkers\n */\n private healthCheckers: FileHealthCheckerContract[] = [];\n\n /**\n * Active worker instances (checkerName → Worker)\n */\n private workers = new Map<string, Worker>();\n\n /**\n * Worker initialization promises (for ensuring workers are ready)\n */\n private workerInitPromises = new Map<string, Promise<boolean>>();\n\n /**\n * Per-worker queue that serializes check requests\n */\n private workerQueues = new Map<string, Promise<void>>();\n\n /**\n * Aggregated stats for each checker\n */\n private checkerStats = new Map<\n string,\n {\n totalFiles: number;\n healthyFiles: number;\n defectiveFiles: number;\n totalErrors: number;\n totalWarnings: number;\n filesWithErrors: number;\n filesWithWarnings: number;\n }\n >();\n\n /**\n * Constructor\n * @param files - Map of tracked files\n */\n public constructor(private readonly files: Map<string, FileManager>) {}\n\n /**\n * Add health checkers to the manager\n * @param checkers - Checkers to add\n */\n public addHealthCheckers(...checkers: FileHealthCheckerContract[]): FilesHealthcareManager {\n this.healthCheckers.push(...checkers);\n return this;\n }\n\n /**\n * Set (replace) all health checkers\n * @param checkers - New set of checkers\n */\n public setHealthCheckers(checkers: FileHealthCheckerContract[]): FilesHealthcareManager {\n this.healthCheckers = checkers;\n return this;\n }\n\n /**\n * Initialize all health checkers\n *\n * For checkers with `workerPath`, spawns dedicated worker threads.\n * For other checkers, calls their `initialize()` method directly.\n */\n public async initialize(): Promise<void> {\n const initPromises = this.healthCheckers.map(async (checker) => {\n // Initialize stats for this checker\n this.checkerStats.set(checker.name, {\n totalFiles: 0,\n healthyFiles: 0,\n defectiveFiles: 0,\n totalErrors: 0,\n totalWarnings: 0,\n filesWithErrors: 0,\n filesWithWarnings: 0,\n });\n\n if (checker.workerPath) {\n // Spawn dedicated worker for this checker\n await this.spawnWorker(checker);\n } else {\n // Initialize checker on main thread\n checker.initialize();\n }\n });\n\n await Promise.all(initPromises);\n }\n\n /**\n * Spawn a worker for a checker\n */\n private async spawnWorker(checker: FileHealthCheckerContract): Promise<void> {\n if (!checker.workerPath) return;\n\n const worker = createWorker(checker.workerPath, import.meta.url, {\n workerData: { cwd: process.cwd() },\n });\n\n this.workers.set(checker.name, worker);\n\n // Create init promise\n const initPromise = new Promise<boolean>((resolve) => {\n const handler = (response: WorkerResponse) => {\n if (response.type === \"initialized\") {\n worker.off(\"message\", handler);\n resolve(response.success);\n }\n };\n\n worker.on(\"message\", handler);\n\n // Handle worker errors\n worker.on(\"error\", (error) => {\n console.error(`Health Checker Worker Error (${checker.name}):`, error);\n resolve(false);\n });\n\n // Send init message\n worker.postMessage({ type: \"init\", config: { cwd: process.cwd() } });\n });\n\n this.workerInitPromises.set(checker.name, initPromise);\n\n // Wait for initialization\n await initPromise;\n }\n\n /**\n * Validate all tracked files\n */\n public async validateAllFiles(): Promise<void> {\n const allFiles = Array.from(this.files.values());\n await this.checkFiles(allFiles);\n\n // Display stats\n await this.displayStats();\n }\n\n /**\n * Check the given files with all registered checkers\n *\n * All checkers run in parallel for performance.\n * Worker-based checkers communicate via postMessage.\n * Main-thread checkers are called directly.\n */\n public async checkFiles(files: FileManager[]): Promise<void> {\n const checkPromises = this.healthCheckers.map(async (checker) => {\n if (checker.workerPath) {\n return this.runInWorker(checker.name, files);\n } else {\n return this.runInline(checker, files);\n }\n });\n\n const results = await Promise.all(checkPromises);\n\n // Display any errors/warnings\n for (const checkerResults of results) {\n for (const result of checkerResults) {\n if (!result.healthy) {\n this.displayFileResults(result);\n }\n }\n }\n }\n\n /**\n * Run checker in worker thread\n */\n private async runInWorker(checkerName: string, files: FileManager[]): Promise<FileCheckResult[]> {\n const worker = this.workers.get(checkerName);\n\n if (!worker) {\n return files.map((f) => ({\n path: f.absolutePath,\n relativePath: f.relativePath,\n healthy: true,\n errors: [],\n warnings: [],\n }));\n }\n\n // Wait for worker to be initialized\n const initPromise = this.workerInitPromises.get(checkerName);\n if (initPromise) {\n const success = await initPromise;\n if (!success) {\n return files.map((f) => ({\n path: f.absolutePath,\n relativePath: f.relativePath,\n healthy: true,\n errors: [],\n warnings: [],\n }));\n }\n }\n\n // Serialize files for worker\n const serializedFiles: SerializedFile[] = files.map((f) => ({\n path: f.absolutePath,\n content: f.source,\n relativePath: f.relativePath,\n }));\n\n // Workers reply without a request id, so calls are serialized per worker:\n // exactly one \"check\" is in flight and its reply can only belong to it.\n const previous = this.workerQueues.get(checkerName) ?? Promise.resolve();\n\n const current = previous.then(() =>\n this.postCheck(checkerName, worker, files, serializedFiles),\n );\n\n this.workerQueues.set(\n checkerName,\n current.then(\n () => undefined,\n () => undefined,\n ),\n );\n\n return current;\n }\n\n /**\n * Post one check to the worker and wait for its single reply.\n * Resolves as healthy if the worker errors or exits so callers never hang.\n */\n private postCheck(\n checkerName: string,\n worker: Worker,\n files: FileManager[],\n serializedFiles: SerializedFile[],\n ): Promise<FileCheckResult[]> {\n return new Promise((resolve) => {\n const fallback = () =>\n files.map((f) => ({\n path: f.absolutePath,\n relativePath: f.relativePath,\n healthy: true,\n errors: [],\n warnings: [],\n }));\n\n const cleanup = () => {\n worker.off(\"message\", handler);\n worker.off(\"error\", onFailure);\n worker.off(\"exit\", onFailure);\n };\n\n const onFailure = () => {\n cleanup();\n resolve(fallback());\n };\n\n const handler = (response: WorkerResponse) => {\n if (response.type === \"results\") {\n cleanup();\n\n // Update stats\n this.updateStats(checkerName, response.results);\n\n resolve(response.results);\n } else if (response.type === \"error\") {\n cleanup();\n resolve(fallback());\n }\n };\n\n worker.on(\"message\", handler);\n worker.on(\"error\", onFailure);\n worker.on(\"exit\", onFailure);\n worker.postMessage({ type: \"check\", files: serializedFiles });\n });\n }\n\n /**\n * Run checker inline (main thread)\n */\n private async runInline(\n checker: FileHealthCheckerContract,\n files: FileManager[],\n ): Promise<FileCheckResult[]> {\n const results: FileCheckResult[] = [];\n\n for (const file of files) {\n const healthResult = await checker.check(file);\n const stats = healthResult.getStats();\n\n results.push({\n path: file.absolutePath,\n relativePath: file.relativePath,\n healthy: stats.state === \"healthy\",\n errors: healthResult.messages\n .filter((m) => m.type === \"error\")\n .map((m) => ({\n type: \"error\" as const,\n message: m.message,\n lineNumber: m.lineNumber,\n columnNumber: m.columnNumber,\n length: m.length || 1,\n filePath: file.absolutePath,\n relativePath: file.relativePath,\n ruleId: m.ruleId,\n })),\n warnings: healthResult.messages\n .filter((m) => m.type === \"warning\")\n .map((m) => ({\n type: \"warning\" as const,\n message: m.message,\n lineNumber: m.lineNumber,\n columnNumber: m.columnNumber,\n length: m.length || 1,\n filePath: file.absolutePath,\n relativePath: file.relativePath,\n ruleId: m.ruleId,\n })),\n });\n }\n\n // Update stats\n const checkerResults = results;\n this.updateStats(checker.name, checkerResults);\n\n return results;\n }\n\n /**\n * Update aggregated stats for a checker\n */\n private updateStats(checkerName: string, results: FileCheckResult[]): void {\n const stats = this.checkerStats.get(checkerName);\n if (!stats) return;\n\n for (const result of results) {\n stats.totalFiles++;\n if (result.healthy) {\n stats.healthyFiles++;\n } else {\n stats.defectiveFiles++;\n }\n stats.totalErrors += result.errors.length;\n stats.totalWarnings += result.warnings.length;\n if (result.errors.length > 0) stats.filesWithErrors++;\n if (result.warnings.length > 0) stats.filesWithWarnings++;\n }\n }\n\n /**\n * Detect when files are changed\n */\n public async onFileChanges(files: FileManager[]): Promise<void> {\n // Notify workers of file changes\n const serializedFiles: SerializedFile[] = files.map((f) => ({\n path: f.absolutePath,\n content: f.source,\n relativePath: f.relativePath,\n }));\n\n for (const [, worker] of this.workers) {\n worker.postMessage({ type: \"fileChanges\", files: serializedFiles });\n }\n\n // Notify inline checkers\n await Promise.all(\n this.healthCheckers.filter((c) => !c.workerPath).map((c) => c.onFileChanges(files)),\n );\n }\n\n /**\n * Remove files from tracking\n * Notifies both inline checkers and worker-based checkers about removed files\n */\n public removeFiles(files: FileManager[]): void {\n // Notify inline checkers\n this.healthCheckers\n .filter((c) => !c.workerPath)\n .forEach((checker) => files.forEach((file) => checker.removeFile(file)));\n\n // Notify workers about deleted files\n if (files.length > 0) {\n const deletedPaths = files.map((f) => ({\n path: f.absolutePath,\n relativePath: f.relativePath,\n }));\n\n for (const [, worker] of this.workers) {\n worker.postMessage({ type: \"filesDeleted\", files: deletedPaths });\n }\n }\n }\n\n /**\n * Display file results (errors/warnings)\n */\n private displayFileResults(result: FileCheckResult): void {\n const fileName = result.relativePath.replace(/\\\\/g, \"/\");\n\n // Display errors\n for (const error of result.errors) {\n const icon = colors.redBright(\"✖\");\n const level = colors.redBright(colors.bold(\"ERROR\"));\n console.log(\n `\\n${icon} ${level} ${colors.dim(\"in\")} ${colors.cyanBright(fileName)}${colors.dim(`(${error.lineNumber},${error.columnNumber})`)}`,\n );\n if (error.ruleId) {\n console.log(\n ` ${colors.magentaBright(error.ruleId)} ${colors.dim(\"→\")} ${colors.red(error.message)}`,\n );\n } else {\n console.log(` ${colors.dim(\"→\")} ${colors.red(error.message)}`);\n }\n }\n\n // Display warnings\n for (const warning of result.warnings) {\n const icon = colors.yellowBright(\"⚠\");\n const level = colors.yellowBright(colors.bold(\"WARNING\"));\n console.log(\n `\\n${icon} ${level} ${colors.dim(\"in\")} ${colors.cyanBright(fileName)}${colors.dim(`(${warning.lineNumber},${warning.columnNumber})`)}`,\n );\n if (warning.ruleId) {\n console.log(\n ` ${colors.magentaBright(warning.ruleId)} ${colors.dim(\"→\")} ${colors.yellow(warning.message)}`,\n );\n } else {\n console.log(` ${colors.dim(\"→\")} ${colors.yellow(warning.message)}`);\n }\n }\n }\n\n /**\n * Display stats for all health checkers\n */\n private async displayStats(): Promise<void> {\n const allStats: HealthCheckerFilesStats[] = [];\n\n for (const checker of this.healthCheckers) {\n const stats = this.checkerStats.get(checker.name);\n if (stats) {\n allStats.push({\n name: checker.name,\n files: {\n healthy: stats.healthyFiles,\n defective: stats.defectiveFiles,\n },\n warnings: {\n total: stats.totalWarnings,\n totalFiles: stats.filesWithWarnings,\n },\n errors: {\n total: stats.totalErrors,\n totalFiles: stats.filesWithErrors,\n },\n });\n }\n }\n\n console.log(\"\\n\");\n console.log(colors.bold(colors.cyan(\"━\".repeat(80))));\n devLogInfo(colors.bold(\" 📊 Health Checker Statistics\"));\n console.log(colors.bold(colors.cyan(\"━\".repeat(80))));\n console.log(\"\");\n\n allStats.forEach((stats: HealthCheckerFilesStats, index: number) => {\n const totalFiles = stats.files.healthy + stats.files.defective;\n const hasIssues = stats.files.defective > 0;\n\n // Checker name with icon\n const statusIcon = hasIssues ? \"⚠️\" : \"✅\";\n console.log(colors.bold(` ${statusIcon} ${stats.name}`));\n console.log(colors.dim(\" \" + \"─\".repeat(76)));\n\n // Files summary\n const filesLine = ` Files: ${colors.white(totalFiles.toString())} total │ ${colors.green(\"✓ \" + stats.files.healthy)} healthy │ ${hasIssues ? colors.red(\"✗ \" + stats.files.defective) : colors.dim(\"✗ 0\")} defective`;\n console.log(filesLine);\n\n // Issues summary\n const warningsText =\n stats.warnings.total > 0\n ? colors.yellow(`⚠ ${stats.warnings.total} warnings`)\n : colors.dim(\"⚠ 0 warnings\");\n\n const errorsText =\n stats.errors.total > 0\n ? colors.red(`✗ ${stats.errors.total} errors`)\n : colors.dim(\"✗ 0 errors\");\n\n console.log(` Issues: ${warningsText} │ ${errorsText}`);\n\n // Add spacing between checkers\n if (index < allStats.length - 1) {\n console.log(\"\");\n }\n });\n\n console.log(\"\");\n console.log(colors.bold(colors.cyan(\"━\".repeat(80))));\n console.log(\"\");\n }\n\n /**\n * Shutdown all workers\n */\n public async shutdown(): Promise<void> {\n await Promise.all(\n [...this.workers.values()].map(async (worker) => {\n try {\n // Let the shutdown handler release CLI children before forced termination.\n await new Promise<void>((resolve) => {\n const finish = () => {\n clearTimeout(timer);\n worker.off(\"exit\", finish);\n resolve();\n };\n const timer = setTimeout(finish, 500);\n worker.once(\"exit\", finish);\n worker.postMessage({ type: \"shutdown\" });\n });\n await worker.terminate();\n } catch {\n // Worker may already be terminated.\n }\n }),\n );\n\n await Promise.all(\n this.healthCheckers\n .filter((checker) => !checker.workerPath)\n .map((checker) => checker.shutdown?.()),\n );\n this.workers.clear();\n this.workerInitPromises.clear();\n this.checkerStats.clear();\n }\n}\n"],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ function outputDetail(stdout, stderr) {
|
|
|
39
39
|
return [stderr.trim(), stdout.trim()].filter(Boolean).join("\n").slice(0, 2e3);
|
|
40
40
|
}
|
|
41
41
|
/** Most output one CLI run may write before Node stops it. */
|
|
42
|
-
const MAX_OUTPUT_BYTES =
|
|
42
|
+
const MAX_OUTPUT_BYTES = 8388608;
|
|
43
43
|
/**
|
|
44
44
|
* Most files passed to one CLI run. An 8 MiB report holds roughly 16,000
|
|
45
45
|
* diagnostics, so a batch of thousands of files with several diagnostics each
|
|
@@ -54,7 +54,7 @@ const MAX_FILES_PER_BATCH = 500;
|
|
|
54
54
|
const SHUTDOWN_KILL_GRACE_MS = 250;
|
|
55
55
|
const MAX_BUFFER_CODE = "ERR_CHILD_PROCESS_STDIO_MAXBUFFER";
|
|
56
56
|
/** The OS refused the command line: too long overall, or one argument too long. */
|
|
57
|
-
const COMMAND_TOO_LONG_CODES = new Set(["E2BIG", "ENAMETOOLONG"]);
|
|
57
|
+
const COMMAND_TOO_LONG_CODES = /* @__PURE__ */ new Set(["E2BIG", "ENAMETOOLONG"]);
|
|
58
58
|
/** A failed CLI run; `code` keeps the process or spawn error code (`E2BIG`, maxBuffer, …). */
|
|
59
59
|
var OxlintCommandError = class extends Error {
|
|
60
60
|
constructor(message, code) {
|
|
@@ -75,7 +75,8 @@ function errorCodeOf(error) {
|
|
|
75
75
|
return typeof code === "string" ? code : void 0;
|
|
76
76
|
}
|
|
77
77
|
function oxlintCommandError(error, stdout, stderr) {
|
|
78
|
-
|
|
78
|
+
const status = error.code === MAX_BUFFER_CODE ? `produced more than ${MAX_OUTPUT_BYTES / 1048576} MiB of output` : error.killed ? "timed out or terminated (30s limit)" : `failed (code ${String(error.code ?? "unknown")}${error.signal ? `, signal ${error.signal}` : ""})`;
|
|
79
|
+
return new OxlintCommandError(`Oxlint could not check changed files: ${status}${outputDetail(stdout, stderr) ? `\n${outputDetail(stdout, stderr)}` : ""}`, typeof error.code === "string" ? error.code : void 0);
|
|
79
80
|
}
|
|
80
81
|
function parseOxlintResults(output, files, cwd) {
|
|
81
82
|
let report;
|
|
@@ -130,7 +131,7 @@ function oxlintArgumentSize(argument, platform) {
|
|
|
130
131
|
* (24 KiB here) and other systems get 128 KiB.
|
|
131
132
|
*/
|
|
132
133
|
function commandLineLimit(platform) {
|
|
133
|
-
return platform === "win32" ?
|
|
134
|
+
return platform === "win32" ? 24576 : platform === "linux" ? 524288 : 131072;
|
|
134
135
|
}
|
|
135
136
|
function uncheckedResult(file, code) {
|
|
136
137
|
return {
|
|
@@ -298,5 +299,5 @@ var OxlintRunner = class {
|
|
|
298
299
|
};
|
|
299
300
|
|
|
300
301
|
//#endregion
|
|
301
|
-
export { OxlintCheckCancelledError, OxlintRunner, findOxlint, hasOxlintConfig };
|
|
302
|
+
export { OxlintCheckCancelledError, OxlintCommandError, OxlintRunner, findOxlint, hasOxlintConfig, oxlintArgumentSize, oxlintCommandError, parseOxlintResults };
|
|
302
303
|
//# sourceMappingURL=oxlint-runner.mjs.map
|