@warlock.js/core 4.1.14 → 4.2.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 +24 -0
- package/LICENSE +21 -0
- package/esm/application/app.d.mts +1 -1
- package/esm/application/app.d.mts.map +1 -1
- package/esm/application/app.mjs +1 -1
- package/esm/application/app.mjs.map +1 -1
- package/esm/application/application-config-types.d.mts +1 -1
- package/esm/application/application-config-types.d.mts.map +1 -1
- package/esm/application/application.d.mts +1 -1
- package/esm/application/application.d.mts.map +1 -1
- package/esm/application/application.mjs +1 -1
- package/esm/application/application.mjs.map +1 -1
- package/esm/benchmark/benchmark-snapshots.d.mts +1 -1
- package/esm/benchmark/benchmark-snapshots.d.mts.map +1 -1
- package/esm/benchmark/benchmark-snapshots.mjs +1 -1
- package/esm/benchmark/benchmark-snapshots.mjs.map +1 -1
- package/esm/benchmark/benchmark.d.mts +1 -1
- package/esm/benchmark/benchmark.d.mts.map +1 -1
- package/esm/benchmark/benchmark.mjs +1 -1
- package/esm/benchmark/benchmark.mjs.map +1 -1
- package/esm/benchmark/channels/console.channel.d.mts +1 -1
- package/esm/benchmark/channels/console.channel.d.mts.map +1 -1
- package/esm/benchmark/channels/console.channel.mjs +1 -1
- package/esm/benchmark/channels/console.channel.mjs.map +1 -1
- package/esm/benchmark/channels/noop.channel.d.mts +1 -1
- package/esm/benchmark/channels/noop.channel.d.mts.map +1 -1
- package/esm/benchmark/channels/noop.channel.mjs +1 -1
- package/esm/benchmark/channels/noop.channel.mjs.map +1 -1
- package/esm/benchmark/profiler.d.mts +1 -1
- package/esm/benchmark/profiler.d.mts.map +1 -1
- package/esm/benchmark/profiler.mjs +1 -1
- package/esm/benchmark/profiler.mjs.map +1 -1
- package/esm/benchmark/types.d.mts +1 -1
- package/esm/benchmark/types.d.mts.map +1 -1
- package/esm/bootstrap/setup.d.mts +1 -1
- package/esm/bootstrap/setup.d.mts.map +1 -1
- package/esm/bootstrap/setup.mjs +1 -1
- package/esm/bootstrap/setup.mjs.map +1 -1
- package/esm/bootstrap.d.mts +1 -1
- package/esm/bootstrap.d.mts.map +1 -1
- package/esm/bootstrap.mjs +1 -1
- package/esm/bootstrap.mjs.map +1 -1
- package/esm/cache/database-cache-driver.d.mts +1 -1
- package/esm/cache/database-cache-driver.d.mts.map +1 -1
- package/esm/cache/database-cache-driver.mjs +1 -1
- package/esm/cache/database-cache-driver.mjs.map +1 -1
- package/esm/cache/index.mjs +1 -1
- package/esm/cache/index.mjs.map +1 -1
- package/esm/cli/cli-command.d.mts +1 -1
- package/esm/cli/cli-command.d.mts.map +1 -1
- package/esm/cli/cli-command.mjs +1 -1
- package/esm/cli/cli-command.mjs.map +1 -1
- package/esm/cli/types.d.mts +1 -1
- package/esm/cli/types.d.mts.map +1 -1
- package/esm/config/config-getter.d.mts +1 -1
- package/esm/config/config-getter.d.mts.map +1 -1
- package/esm/config/config-getter.mjs +1 -1
- package/esm/config/config-getter.mjs.map +1 -1
- package/esm/config/config-handlers.d.mts +1 -1
- package/esm/config/config-handlers.d.mts.map +1 -1
- package/esm/config/config-handlers.mjs +1 -1
- package/esm/config/config-handlers.mjs.map +1 -1
- package/esm/config/config-loader.d.mts +1 -1
- package/esm/config/config-loader.d.mts.map +1 -1
- package/esm/config/config-loader.mjs +1 -1
- package/esm/config/config-loader.mjs.map +1 -1
- package/esm/config/config-manager.mjs +1 -1
- package/esm/config/config-manager.mjs.map +1 -1
- package/esm/config/config-special-handlers.d.mts +1 -1
- package/esm/config/config-special-handlers.d.mts.map +1 -1
- package/esm/config/config-special-handlers.mjs +1 -1
- package/esm/config/config-special-handlers.mjs.map +1 -1
- package/esm/config/load-config-files.mjs +1 -1
- package/esm/config/load-config-files.mjs.map +1 -1
- package/esm/config/types.d.mts +1 -1
- package/esm/config/types.d.mts.map +1 -1
- package/esm/connectors/access-connector.d.mts +39 -0
- package/esm/connectors/access-connector.d.mts.map +1 -0
- package/esm/connectors/access-connector.mjs +54 -0
- package/esm/connectors/access-connector.mjs.map +1 -0
- package/esm/connectors/base-connector.d.mts +1 -1
- package/esm/connectors/base-connector.d.mts.map +1 -1
- package/esm/connectors/base-connector.mjs +1 -1
- package/esm/connectors/base-connector.mjs.map +1 -1
- package/esm/connectors/cache-connector.d.mts +1 -1
- package/esm/connectors/cache-connector.d.mts.map +1 -1
- package/esm/connectors/cache-connector.mjs +1 -1
- package/esm/connectors/cache-connector.mjs.map +1 -1
- package/esm/connectors/connectors-manager.d.mts +1 -1
- package/esm/connectors/connectors-manager.d.mts.map +1 -1
- package/esm/connectors/connectors-manager.mjs +5 -1
- package/esm/connectors/connectors-manager.mjs.map +1 -1
- package/esm/connectors/database-connector.d.mts +1 -1
- package/esm/connectors/database-connector.d.mts.map +1 -1
- package/esm/connectors/database-connector.mjs +1 -1
- package/esm/connectors/database-connector.mjs.map +1 -1
- package/esm/connectors/herald-connector.d.mts +1 -1
- 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 -1
- package/esm/connectors/http-connector.d.mts.map +1 -1
- package/esm/connectors/http-connector.mjs +3 -1
- package/esm/connectors/http-connector.mjs.map +1 -1
- package/esm/connectors/index.d.mts +2 -0
- package/esm/connectors/index.mjs +2 -0
- package/esm/connectors/logger-connector.d.mts +1 -1
- package/esm/connectors/logger-connector.d.mts.map +1 -1
- package/esm/connectors/logger-connector.mjs +1 -1
- package/esm/connectors/logger-connector.mjs.map +1 -1
- package/esm/connectors/mail-connector.d.mts +1 -1
- package/esm/connectors/mail-connector.d.mts.map +1 -1
- package/esm/connectors/mail-connector.mjs +1 -1
- package/esm/connectors/mail-connector.mjs.map +1 -1
- package/esm/connectors/notifications-connector.d.mts +38 -0
- package/esm/connectors/notifications-connector.d.mts.map +1 -0
- package/esm/connectors/notifications-connector.mjs +51 -0
- package/esm/connectors/notifications-connector.mjs.map +1 -0
- package/esm/connectors/socket-connector.d.mts +1 -1
- package/esm/connectors/socket-connector.d.mts.map +1 -1
- package/esm/connectors/socket-connector.mjs +1 -1
- package/esm/connectors/socket-connector.mjs.map +1 -1
- package/esm/connectors/storage.connector.d.mts +1 -1
- package/esm/connectors/storage.connector.d.mts.map +1 -1
- package/esm/connectors/storage.connector.mjs +1 -1
- package/esm/connectors/storage.connector.mjs.map +1 -1
- package/esm/connectors/types.d.mts +5 -3
- package/esm/connectors/types.d.mts.map +1 -1
- package/esm/connectors/types.mjs +3 -1
- package/esm/connectors/types.mjs.map +1 -1
- package/esm/container/index.d.mts +1 -1
- package/esm/container/index.d.mts.map +1 -1
- package/esm/container/index.mjs +1 -1
- package/esm/container/index.mjs.map +1 -1
- package/esm/database/models/database-log/database-log.d.mts +1 -1
- package/esm/database/models/database-log/database-log.d.mts.map +1 -1
- package/esm/database/models/database-log/database-log.mjs +1 -1
- package/esm/database/models/database-log/database-log.mjs.map +1 -1
- package/esm/database/seeds/seeder.d.mts +1 -1
- package/esm/database/seeds/seeder.d.mts.map +1 -1
- package/esm/database/seeds/seeder.mjs +1 -1
- package/esm/database/seeds/seeder.mjs.map +1 -1
- package/esm/database/seeds/types.d.mts +1 -1
- package/esm/database/seeds/types.d.mts.map +1 -1
- package/esm/database/utils.d.mts +1 -1
- package/esm/database/utils.d.mts.map +1 -1
- package/esm/database/utils.mjs +1 -1
- package/esm/database/utils.mjs.map +1 -1
- package/esm/dev-server/create-worker.mjs +1 -1
- package/esm/dev-server/create-worker.mjs.map +1 -1
- package/esm/dev-server/dependency-graph.d.mts +1 -1
- package/esm/dev-server/dependency-graph.d.mts.map +1 -1
- package/esm/dev-server/dependency-graph.mjs +1 -1
- package/esm/dev-server/dependency-graph.mjs.map +1 -1
- package/esm/dev-server/dev-logger.mjs +2 -13
- package/esm/dev-server/dev-logger.mjs.map +1 -1
- package/esm/dev-server/events.mjs +1 -1
- package/esm/dev-server/events.mjs.map +1 -1
- package/esm/dev-server/file-event-handler.mjs +1 -1
- package/esm/dev-server/file-event-handler.mjs.map +1 -1
- package/esm/dev-server/file-manager.d.mts +1 -1
- package/esm/dev-server/file-manager.d.mts.map +1 -1
- package/esm/dev-server/file-manager.mjs +1 -1
- package/esm/dev-server/file-manager.mjs.map +1 -1
- package/esm/dev-server/file-operations.d.mts +1 -1
- package/esm/dev-server/file-operations.d.mts.map +1 -1
- package/esm/dev-server/file-operations.mjs +1 -1
- package/esm/dev-server/file-operations.mjs.map +1 -1
- package/esm/dev-server/files-orchestrator.d.mts +1 -1
- package/esm/dev-server/files-orchestrator.d.mts.map +1 -1
- package/esm/dev-server/files-orchestrator.mjs +1 -1
- package/esm/dev-server/files-orchestrator.mjs.map +1 -1
- package/esm/dev-server/files-watcher.d.mts +1 -1
- package/esm/dev-server/files-watcher.d.mts.map +1 -1
- package/esm/dev-server/files-watcher.mjs +1 -1
- package/esm/dev-server/files-watcher.mjs.map +1 -1
- package/esm/dev-server/flags.mjs +1 -1
- package/esm/dev-server/flags.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/base-health-checker.d.mts +1 -1
- package/esm/dev-server/health-checker/checkers/base-health-checker.d.mts.map +1 -1
- package/esm/dev-server/health-checker/checkers/base-health-checker.mjs +1 -1
- package/esm/dev-server/health-checker/checkers/base-health-checker.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.d.mts +1 -1
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.d.mts.map +1 -1
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs +1 -1
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.d.mts +1 -1
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.d.mts.map +1 -1
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs +1 -1
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs.map +1 -1
- package/esm/dev-server/health-checker/file-health-checker.contract.d.mts +1 -1
- package/esm/dev-server/health-checker/file-health-checker.contract.d.mts.map +1 -1
- package/esm/dev-server/health-checker/file-health-result.d.mts +1 -1
- package/esm/dev-server/health-checker/file-health-result.d.mts.map +1 -1
- package/esm/dev-server/health-checker/file-health-result.mjs +1 -1
- package/esm/dev-server/health-checker/file-health-result.mjs.map +1 -1
- package/esm/dev-server/health-checker/files-healthcare.manager.d.mts +1 -1
- package/esm/dev-server/health-checker/files-healthcare.manager.d.mts.map +1 -1
- package/esm/dev-server/health-checker/files-healthcare.manager.mjs +1 -1
- package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
- package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs +1 -1
- package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs.map +1 -1
- package/esm/dev-server/health-checker/workers/ts-health.worker.mjs +1 -1
- package/esm/dev-server/health-checker/workers/ts-health.worker.mjs.map +1 -1
- package/esm/dev-server/loader/build-transpile-init.mjs +1 -1
- package/esm/dev-server/loader/build-transpile-init.mjs.map +1 -1
- package/esm/dev-server/loader/register-loader.mjs +1 -1
- package/esm/dev-server/loader/register-loader.mjs.map +1 -1
- package/esm/dev-server/loader/transpile-cache.mjs +2 -164
- package/esm/dev-server/loader/transpile-cache.mjs.map +1 -1
- package/esm/dev-server/manifest-manager.d.mts +1 -1
- package/esm/dev-server/manifest-manager.d.mts.map +1 -1
- package/esm/dev-server/manifest-manager.mjs +1 -1
- package/esm/dev-server/manifest-manager.mjs.map +1 -1
- package/esm/dev-server/module-loader.d.mts +1 -1
- package/esm/dev-server/module-loader.d.mts.map +1 -1
- package/esm/dev-server/module-loader.mjs +1 -1
- package/esm/dev-server/module-loader.mjs.map +1 -1
- package/esm/dev-server/package-json-manager.mjs +1 -1
- package/esm/dev-server/package-json-manager.mjs.map +1 -1
- package/esm/dev-server/parse-imports.mjs +1 -1
- package/esm/dev-server/parse-imports.mjs.map +1 -1
- package/esm/dev-server/path.mjs +1 -1
- package/esm/dev-server/path.mjs.map +1 -1
- package/esm/dev-server/special-files-collector.d.mts +1 -1
- package/esm/dev-server/special-files-collector.d.mts.map +1 -1
- package/esm/dev-server/special-files-collector.mjs +1 -1
- package/esm/dev-server/special-files-collector.mjs.map +1 -1
- package/esm/dev-server/tsconfig-manager.mjs +1 -1
- package/esm/dev-server/tsconfig-manager.mjs.map +1 -1
- package/esm/dev-server/types.d.mts +1 -1
- package/esm/dev-server/types.d.mts.map +1 -1
- package/esm/dev-server/utils.mjs +1 -1
- package/esm/dev-server/utils.mjs.map +1 -1
- package/esm/encryption/encrypt.d.mts +1 -1
- package/esm/encryption/encrypt.d.mts.map +1 -1
- package/esm/encryption/encrypt.mjs +1 -1
- package/esm/encryption/encrypt.mjs.map +1 -1
- package/esm/encryption/hash.d.mts +1 -1
- package/esm/encryption/hash.d.mts.map +1 -1
- package/esm/encryption/hash.mjs +1 -1
- package/esm/encryption/hash.mjs.map +1 -1
- package/esm/encryption/password.d.mts +1 -1
- package/esm/encryption/password.d.mts.map +1 -1
- package/esm/encryption/password.mjs +1 -1
- package/esm/encryption/password.mjs.map +1 -1
- package/esm/encryption/types.d.mts +1 -1
- package/esm/encryption/types.d.mts.map +1 -1
- package/esm/http/config.d.mts +1 -1
- package/esm/http/config.d.mts.map +1 -1
- package/esm/http/config.mjs +1 -1
- package/esm/http/config.mjs.map +1 -1
- package/esm/http/context/request-context.d.mts +1 -1
- package/esm/http/context/request-context.d.mts.map +1 -1
- package/esm/http/context/request-context.mjs +1 -1
- package/esm/http/context/request-context.mjs.map +1 -1
- package/esm/http/createHttpApplication.d.mts +1 -1
- package/esm/http/createHttpApplication.d.mts.map +1 -1
- package/esm/http/createHttpApplication.mjs +1 -1
- package/esm/http/createHttpApplication.mjs.map +1 -1
- package/esm/http/database/RequestLog.d.mts +1 -1
- package/esm/http/database/RequestLog.d.mts.map +1 -1
- package/esm/http/database/RequestLog.mjs +1 -1
- package/esm/http/database/RequestLog.mjs.map +1 -1
- package/esm/http/error-codes.d.mts +1 -1
- package/esm/http/error-codes.d.mts.map +1 -1
- package/esm/http/error-codes.mjs +1 -1
- package/esm/http/error-codes.mjs.map +1 -1
- package/esm/http/errors/errors.d.mts +1 -1
- package/esm/http/errors/errors.d.mts.map +1 -1
- package/esm/http/errors/errors.mjs +1 -1
- package/esm/http/errors/errors.mjs.map +1 -1
- package/esm/http/events.d.mts +1 -1
- package/esm/http/events.d.mts.map +1 -1
- package/esm/http/events.mjs +1 -1
- package/esm/http/events.mjs.map +1 -1
- package/esm/http/middleware/cache-response-middleware.d.mts +1 -1
- package/esm/http/middleware/cache-response-middleware.d.mts.map +1 -1
- package/esm/http/middleware/cache-response-middleware.mjs +1 -1
- package/esm/http/middleware/cache-response-middleware.mjs.map +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.d.mts +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.d.mts.map +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.mjs +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.mjs.map +1 -1
- package/esm/http/middleware/idempotency.middleware.d.mts +1 -1
- package/esm/http/middleware/idempotency.middleware.d.mts.map +1 -1
- package/esm/http/middleware/idempotency.middleware.mjs +1 -1
- package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
- package/esm/http/middleware/inject-request-context.d.mts +1 -1
- package/esm/http/middleware/inject-request-context.d.mts.map +1 -1
- package/esm/http/middleware/inject-request-context.mjs +1 -1
- package/esm/http/middleware/inject-request-context.mjs.map +1 -1
- package/esm/http/middleware/ip-filter.middleware.d.mts +1 -1
- package/esm/http/middleware/ip-filter.middleware.d.mts.map +1 -1
- package/esm/http/middleware/ip-filter.middleware.mjs +1 -1
- package/esm/http/middleware/ip-filter.middleware.mjs.map +1 -1
- package/esm/http/middleware/maintenance.middleware.d.mts +1 -1
- package/esm/http/middleware/maintenance.middleware.d.mts.map +1 -1
- package/esm/http/middleware/maintenance.middleware.mjs +1 -1
- package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
- package/esm/http/middleware/max-body-size.middleware.d.mts +1 -1
- package/esm/http/middleware/max-body-size.middleware.d.mts.map +1 -1
- package/esm/http/middleware/max-body-size.middleware.mjs +1 -1
- package/esm/http/middleware/max-body-size.middleware.mjs.map +1 -1
- package/esm/http/middleware/middleware-list.d.mts +1 -1
- package/esm/http/middleware/middleware-list.d.mts.map +1 -1
- package/esm/http/middleware/middleware-list.mjs +1 -1
- package/esm/http/middleware/middleware-list.mjs.map +1 -1
- package/esm/http/middleware/rate-limit.middleware.d.mts +1 -1
- package/esm/http/middleware/rate-limit.middleware.d.mts.map +1 -1
- package/esm/http/middleware/rate-limit.middleware.mjs +1 -1
- package/esm/http/middleware/rate-limit.middleware.mjs.map +1 -1
- package/esm/http/middleware/utils/cidr-match.d.mts +1 -1
- package/esm/http/middleware/utils/cidr-match.d.mts.map +1 -1
- package/esm/http/middleware/utils/cidr-match.mjs +1 -1
- package/esm/http/middleware/utils/cidr-match.mjs.map +1 -1
- package/esm/http/middleware/utils/idempotency-key.d.mts +1 -1
- package/esm/http/middleware/utils/idempotency-key.d.mts.map +1 -1
- package/esm/http/middleware/utils/idempotency-key.mjs +1 -1
- package/esm/http/middleware/utils/idempotency-key.mjs.map +1 -1
- package/esm/http/middleware/utils/parse-size.d.mts +1 -1
- package/esm/http/middleware/utils/parse-size.d.mts.map +1 -1
- package/esm/http/middleware/utils/parse-size.mjs +1 -1
- package/esm/http/middleware/utils/parse-size.mjs.map +1 -1
- package/esm/http/plugins.d.mts +1 -1
- package/esm/http/plugins.d.mts.map +1 -1
- package/esm/http/plugins.mjs +1 -1
- package/esm/http/plugins.mjs.map +1 -1
- package/esm/http/request-controller.d.mts +1 -1
- package/esm/http/request-controller.d.mts.map +1 -1
- package/esm/http/request-controller.mjs +1 -1
- package/esm/http/request-controller.mjs.map +1 -1
- package/esm/http/request.d.mts +1 -1
- package/esm/http/request.d.mts.map +1 -1
- package/esm/http/request.mjs +1 -1
- package/esm/http/request.mjs.map +1 -1
- package/esm/http/response.d.mts +4 -4
- package/esm/http/response.d.mts.map +1 -1
- package/esm/http/response.mjs +1 -1
- package/esm/http/response.mjs.map +1 -1
- package/esm/http/server.d.mts +1 -1
- package/esm/http/server.d.mts.map +1 -1
- package/esm/http/server.mjs +1 -1
- package/esm/http/server.mjs.map +1 -1
- package/esm/http/types.d.mts +1 -1
- package/esm/http/types.d.mts.map +1 -1
- package/esm/http/uploaded-file.d.mts +1 -1
- package/esm/http/uploaded-file.d.mts.map +1 -1
- package/esm/http/uploaded-file.mjs +1 -1
- package/esm/http/uploaded-file.mjs.map +1 -1
- package/esm/http/uploads-config.d.mts +1 -1
- package/esm/http/uploads-config.d.mts.map +1 -1
- package/esm/http/uploads-config.mjs +1 -1
- package/esm/http/uploads-config.mjs.map +1 -1
- package/esm/http/uploads-types.d.mts +1 -1
- package/esm/http/uploads-types.d.mts.map +1 -1
- package/esm/image/image.d.mts +1 -1
- package/esm/image/image.d.mts.map +1 -1
- package/esm/image/image.mjs +1 -1
- package/esm/image/image.mjs.map +1 -1
- package/esm/index.d.mts +5 -2
- package/esm/index.mjs +6 -2
- package/esm/logger/logger.d.mts +1 -1
- package/esm/logger/logger.d.mts.map +1 -1
- package/esm/logger/logger.mjs +1 -1
- package/esm/logger/logger.mjs.map +1 -1
- package/esm/logger/types.d.mts +1 -1
- package/esm/logger/types.d.mts.map +1 -1
- package/esm/mail/config.d.mts +1 -1
- package/esm/mail/config.d.mts.map +1 -1
- package/esm/mail/config.mjs +1 -1
- package/esm/mail/config.mjs.map +1 -1
- package/esm/mail/events.d.mts +1 -1
- package/esm/mail/events.d.mts.map +1 -1
- package/esm/mail/events.mjs +1 -1
- package/esm/mail/events.mjs.map +1 -1
- package/esm/mail/mail.d.mts +1 -1
- package/esm/mail/mail.d.mts.map +1 -1
- package/esm/mail/mail.mjs +1 -1
- package/esm/mail/mail.mjs.map +1 -1
- package/esm/mail/mailer-pool.d.mts +1 -1
- package/esm/mail/mailer-pool.d.mts.map +1 -1
- package/esm/mail/mailer-pool.mjs +1 -1
- package/esm/mail/mailer-pool.mjs.map +1 -1
- package/esm/mail/react-mail.d.mts +1 -1
- package/esm/mail/react-mail.d.mts.map +1 -1
- package/esm/mail/react-mail.mjs +1 -1
- package/esm/mail/react-mail.mjs.map +1 -1
- package/esm/mail/send-mail.d.mts +1 -1
- package/esm/mail/send-mail.d.mts.map +1 -1
- package/esm/mail/send-mail.mjs +1 -1
- package/esm/mail/send-mail.mjs.map +1 -1
- package/esm/mail/test-mailbox.d.mts +1 -1
- package/esm/mail/test-mailbox.d.mts.map +1 -1
- package/esm/mail/test-mailbox.mjs +1 -1
- package/esm/mail/test-mailbox.mjs.map +1 -1
- package/esm/mail/types.d.mts +1 -1
- package/esm/mail/types.d.mts.map +1 -1
- package/esm/mail/types.mjs +1 -1
- package/esm/mail/types.mjs.map +1 -1
- package/esm/react/index.d.mts +1 -1
- package/esm/react/index.d.mts.map +1 -1
- package/esm/react/index.mjs +1 -1
- package/esm/react/index.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.d.mts +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.d.mts.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.mjs +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.mjs +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/filter-applicator.mjs +1 -1
- package/esm/repositories/adapters/cascade/filter-applicator.mjs.map +1 -1
- package/esm/repositories/contracts/query-builder.contract.d.mts +1 -1
- package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
- package/esm/repositories/contracts/repository-adapter.contract.d.mts +1 -1
- package/esm/repositories/contracts/repository-adapter.contract.d.mts.map +1 -1
- package/esm/repositories/contracts/types.d.mts +1 -1
- package/esm/repositories/contracts/types.d.mts.map +1 -1
- package/esm/repositories/repository.manager.d.mts +1 -1
- package/esm/repositories/repository.manager.d.mts.map +1 -1
- package/esm/repositories/repository.manager.mjs +1 -1
- package/esm/repositories/repository.manager.mjs.map +1 -1
- package/esm/resource/define-resource.d.mts +1 -1
- package/esm/resource/define-resource.d.mts.map +1 -1
- package/esm/resource/define-resource.mjs +1 -1
- package/esm/resource/define-resource.mjs.map +1 -1
- package/esm/resource/register-resource.d.mts +1 -1
- package/esm/resource/register-resource.d.mts.map +1 -1
- package/esm/resource/register-resource.mjs +1 -1
- package/esm/resource/register-resource.mjs.map +1 -1
- package/esm/resource/resource-field-builder.d.mts +1 -1
- package/esm/resource/resource-field-builder.d.mts.map +1 -1
- package/esm/resource/resource-field-builder.mjs +1 -1
- package/esm/resource/resource-field-builder.mjs.map +1 -1
- package/esm/resource/resource.d.mts +1 -1
- package/esm/resource/resource.d.mts.map +1 -1
- package/esm/resource/resource.mjs +1 -1
- package/esm/resource/resource.mjs.map +1 -1
- package/esm/resource/types.d.mts +1 -1
- package/esm/resource/types.d.mts.map +1 -1
- package/esm/restful/restful.d.mts +1 -1
- package/esm/restful/restful.d.mts.map +1 -1
- package/esm/restful/restful.mjs +1 -1
- package/esm/restful/restful.mjs.map +1 -1
- package/esm/router/route-builder.d.mts +1 -1
- package/esm/router/route-builder.d.mts.map +1 -1
- package/esm/router/route-builder.mjs +1 -1
- package/esm/router/route-builder.mjs.map +1 -1
- package/esm/router/route-registry.mjs +1 -1
- package/esm/router/route-registry.mjs.map +1 -1
- package/esm/router/router.d.mts +1 -1
- package/esm/router/router.d.mts.map +1 -1
- package/esm/router/router.mjs +1 -1
- package/esm/router/router.mjs.map +1 -1
- package/esm/router/types.d.mts +1 -1
- package/esm/router/types.d.mts.map +1 -1
- package/esm/socket/types.d.mts +1 -1
- package/esm/socket/types.d.mts.map +1 -1
- package/esm/socket/utils.d.mts +1 -1
- package/esm/socket/utils.d.mts.map +1 -1
- package/esm/socket/utils.mjs +1 -1
- package/esm/socket/utils.mjs.map +1 -1
- package/esm/storage/config.d.mts +1 -1
- package/esm/storage/config.d.mts.map +1 -1
- package/esm/storage/config.mjs +1 -1
- package/esm/storage/config.mjs.map +1 -1
- package/esm/storage/context/storage-driver-context.d.mts +1 -1
- package/esm/storage/context/storage-driver-context.d.mts.map +1 -1
- package/esm/storage/context/storage-driver-context.mjs +1 -1
- package/esm/storage/context/storage-driver-context.mjs.map +1 -1
- package/esm/storage/drivers/cloud-driver.d.mts +1 -1
- package/esm/storage/drivers/cloud-driver.d.mts.map +1 -1
- package/esm/storage/drivers/cloud-driver.mjs +1 -1
- package/esm/storage/drivers/cloud-driver.mjs.map +1 -1
- package/esm/storage/drivers/do-spaces-driver.d.mts +1 -1
- package/esm/storage/drivers/do-spaces-driver.d.mts.map +1 -1
- package/esm/storage/drivers/do-spaces-driver.mjs +1 -1
- package/esm/storage/drivers/do-spaces-driver.mjs.map +1 -1
- package/esm/storage/drivers/local-driver.d.mts +1 -1
- package/esm/storage/drivers/local-driver.d.mts.map +1 -1
- package/esm/storage/drivers/local-driver.mjs +1 -1
- package/esm/storage/drivers/local-driver.mjs.map +1 -1
- package/esm/storage/drivers/r2-driver.d.mts +1 -1
- package/esm/storage/drivers/r2-driver.d.mts.map +1 -1
- package/esm/storage/drivers/r2-driver.mjs +1 -1
- package/esm/storage/drivers/r2-driver.mjs.map +1 -1
- package/esm/storage/drivers/s3-driver.d.mts +1 -1
- package/esm/storage/drivers/s3-driver.d.mts.map +1 -1
- package/esm/storage/drivers/s3-driver.mjs +1 -1
- package/esm/storage/drivers/s3-driver.mjs.map +1 -1
- package/esm/storage/scoped-storage.d.mts +1 -1
- package/esm/storage/scoped-storage.d.mts.map +1 -1
- package/esm/storage/scoped-storage.mjs +1 -1
- package/esm/storage/scoped-storage.mjs.map +1 -1
- package/esm/storage/storage-file.d.mts +1 -1
- package/esm/storage/storage-file.d.mts.map +1 -1
- package/esm/storage/storage-file.mjs +1 -1
- package/esm/storage/storage-file.mjs.map +1 -1
- package/esm/storage/storage.d.mts +1 -1
- package/esm/storage/storage.d.mts.map +1 -1
- package/esm/storage/storage.mjs +1 -1
- package/esm/storage/storage.mjs.map +1 -1
- package/esm/storage/types.d.mts +1 -1
- package/esm/storage/types.d.mts.map +1 -1
- package/esm/storage/utils/mime.d.mts +1 -1
- package/esm/storage/utils/mime.d.mts.map +1 -1
- package/esm/storage/utils/mime.mjs +1 -1
- package/esm/storage/utils/mime.mjs.map +1 -1
- package/esm/tests/start-http-development-server.d.mts +1 -1
- package/esm/tests/start-http-development-server.d.mts.map +1 -1
- package/esm/tests/start-http-development-server.mjs +4 -2
- package/esm/tests/start-http-development-server.mjs.map +1 -1
- package/esm/tests/test-helpers.d.mts +1 -1
- package/esm/tests/test-helpers.d.mts.map +1 -1
- package/esm/tests/test-helpers.mjs +1 -1
- package/esm/tests/test-helpers.mjs.map +1 -1
- package/esm/tests/vitest-setup.d.mts +1 -1
- package/esm/tests/vitest-setup.d.mts.map +1 -1
- package/esm/tests/vitest-setup.mjs +1 -1
- package/esm/tests/vitest-setup.mjs.map +1 -1
- package/esm/use-cases/types.d.mts +1 -1
- package/esm/use-cases/types.d.mts.map +1 -1
- package/esm/use-cases/use-case-broadcast.d.mts +1 -1
- package/esm/use-cases/use-case-broadcast.d.mts.map +1 -1
- package/esm/use-cases/use-case-broadcast.mjs +1 -1
- package/esm/use-cases/use-case-broadcast.mjs.map +1 -1
- package/esm/use-cases/use-case-events.d.mts +1 -1
- package/esm/use-cases/use-case-events.d.mts.map +1 -1
- package/esm/use-cases/use-case-events.mjs +1 -1
- package/esm/use-cases/use-case-events.mjs.map +1 -1
- package/esm/use-cases/use-case-pipeline.d.mts +1 -1
- package/esm/use-cases/use-case-pipeline.d.mts.map +1 -1
- package/esm/use-cases/use-case-pipeline.mjs +1 -1
- package/esm/use-cases/use-case-pipeline.mjs.map +1 -1
- package/esm/use-cases/use-case.d.mts +1 -1
- package/esm/use-cases/use-case.d.mts.map +1 -1
- package/esm/use-cases/use-case.errors.d.mts +1 -1
- package/esm/use-cases/use-case.errors.d.mts.map +1 -1
- package/esm/use-cases/use-case.errors.mjs +1 -1
- package/esm/use-cases/use-case.errors.mjs.map +1 -1
- package/esm/use-cases/use-case.mjs +1 -1
- package/esm/use-cases/use-case.mjs.map +1 -1
- package/esm/use-cases/use-cases-registry.d.mts +1 -1
- package/esm/use-cases/use-cases-registry.d.mts.map +1 -1
- package/esm/use-cases/use-cases-registry.mjs +1 -1
- package/esm/use-cases/use-cases-registry.mjs.map +1 -1
- package/esm/utils/app-log.d.mts +1 -1
- package/esm/utils/app-log.d.mts.map +1 -1
- package/esm/utils/app-log.mjs +1 -1
- package/esm/utils/app-log.mjs.map +1 -1
- package/esm/utils/database-log.d.mts +1 -1
- package/esm/utils/database-log.d.mts.map +1 -1
- package/esm/utils/database-log.mjs +1 -1
- package/esm/utils/database-log.mjs.map +1 -1
- package/esm/utils/environment.d.mts +1 -1
- package/esm/utils/environment.d.mts.map +1 -1
- package/esm/utils/environment.mjs +1 -1
- package/esm/utils/environment.mjs.map +1 -1
- package/esm/utils/framework-vesion.mjs +2 -11
- package/esm/utils/framework-vesion.mjs.map +1 -1
- package/esm/utils/get-localized.d.mts +1 -1
- package/esm/utils/get-localized.d.mts.map +1 -1
- package/esm/utils/get-localized.mjs +1 -1
- package/esm/utils/get-localized.mjs.map +1 -1
- package/esm/utils/paths.d.mts +1 -1
- package/esm/utils/paths.d.mts.map +1 -1
- package/esm/utils/paths.mjs +1 -1
- package/esm/utils/paths.mjs.map +1 -1
- package/esm/utils/promise-all-object.d.mts +1 -1
- package/esm/utils/promise-all-object.d.mts.map +1 -1
- package/esm/utils/promise-all-object.mjs +1 -1
- package/esm/utils/promise-all-object.mjs.map +1 -1
- package/esm/utils/queue.d.mts +1 -1
- package/esm/utils/queue.d.mts.map +1 -1
- package/esm/utils/queue.mjs +1 -1
- package/esm/utils/queue.mjs.map +1 -1
- package/esm/utils/sleep.d.mts +1 -1
- package/esm/utils/sleep.d.mts.map +1 -1
- package/esm/utils/sleep.mjs +1 -1
- package/esm/utils/sleep.mjs.map +1 -1
- package/esm/utils/sluggable.d.mts +1 -1
- package/esm/utils/sluggable.d.mts.map +1 -1
- package/esm/utils/sluggable.mjs +1 -1
- package/esm/utils/sluggable.mjs.map +1 -1
- package/esm/utils/to-json.d.mts +1 -1
- package/esm/utils/to-json.d.mts.map +1 -1
- package/esm/utils/to-json.mjs +1 -1
- package/esm/utils/to-json.mjs.map +1 -1
- package/esm/utils/types.d.mts +1 -1
- package/esm/utils/types.d.mts.map +1 -1
- package/esm/utils/urls.d.mts +1 -1
- package/esm/utils/urls.d.mts.map +1 -1
- package/esm/utils/urls.mjs +1 -1
- package/esm/utils/urls.mjs.map +1 -1
- package/esm/validation/database/exists-except-current-id.d.mts +1 -1
- package/esm/validation/database/exists-except-current-id.d.mts.map +1 -1
- package/esm/validation/database/exists-except-current-id.mjs +1 -1
- package/esm/validation/database/exists-except-current-id.mjs.map +1 -1
- package/esm/validation/database/exists-except-current-user.d.mts +1 -1
- package/esm/validation/database/exists-except-current-user.d.mts.map +1 -1
- package/esm/validation/database/exists-except-current-user.mjs +1 -1
- package/esm/validation/database/exists-except-current-user.mjs.map +1 -1
- package/esm/validation/database/types.d.mts +1 -1
- package/esm/validation/database/types.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-id.d.mts +1 -1
- package/esm/validation/database/unique-except-current-id.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-id.mjs +1 -1
- package/esm/validation/database/unique-except-current-id.mjs.map +1 -1
- package/esm/validation/database/unique-except-current-user.d.mts +1 -1
- package/esm/validation/database/unique-except-current-user.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-user.mjs +1 -1
- package/esm/validation/database/unique-except-current-user.mjs.map +1 -1
- package/esm/validation/file/file.d.mts +1 -1
- package/esm/validation/file/file.d.mts.map +1 -1
- package/esm/validation/file/file.mjs +1 -1
- package/esm/validation/file/file.mjs.map +1 -1
- package/esm/validation/init.mjs +1 -1
- package/esm/validation/init.mjs.map +1 -1
- package/esm/validation/plugins/database-plugin.mjs +1 -1
- package/esm/validation/plugins/database-plugin.mjs.map +1 -1
- package/esm/validation/plugins/file-plugin.mjs +1 -1
- package/esm/validation/plugins/file-plugin.mjs.map +1 -1
- package/esm/validation/plugins/localized-plugin.mjs +1 -1
- package/esm/validation/plugins/localized-plugin.mjs.map +1 -1
- package/esm/validation/types.d.mts +1 -1
- package/esm/validation/types.d.mts.map +1 -1
- package/esm/validation/validateAll.mjs +1 -1
- package/esm/validation/validateAll.mjs.map +1 -1
- package/esm/validation/validators/file-validator.d.mts +1 -1
- package/esm/validation/validators/file-validator.d.mts.map +1 -1
- package/esm/validation/validators/file-validator.mjs +1 -1
- package/esm/validation/validators/file-validator.mjs.map +1 -1
- package/esm/vite/index.mjs +3 -0
- package/esm/vite/lower-stage3-decorators.d.mts +53 -0
- package/esm/vite/lower-stage3-decorators.d.mts.map +1 -0
- package/esm/vite/lower-stage3-decorators.mjs +63 -0
- package/esm/vite/lower-stage3-decorators.mjs.map +1 -0
- package/esm/warlock-config/default-configurations.mjs +1 -1
- package/esm/warlock-config/default-configurations.mjs.map +1 -1
- package/esm/warlock-config/define-config.d.mts +1 -1
- package/esm/warlock-config/define-config.d.mts.map +1 -1
- package/esm/warlock-config/define-config.mjs +1 -1
- package/esm/warlock-config/define-config.mjs.map +1 -1
- package/esm/warlock-config/index.d.mts +1 -1
- package/esm/warlock-config/index.mjs +1 -1
- package/esm/warlock-config/types.d.mts +1 -1
- package/esm/warlock-config/types.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.d.mts +20 -2
- package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.mjs +39 -2
- package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
- package/llms-full.txt +66 -4
- package/llms.txt +1 -0
- package/package.json +9 -33
- package/skills/lower-stage3-decorators/SKILL.md +54 -0
- package/skills/run-app/SKILL.md +2 -0
- package/skills/test-http/SKILL.md +3 -2
- package/skills/test-service/SKILL.md +3 -2
- package/bin/warlock.js +0 -3
- package/esm/_virtual/_rolldown/runtime.mjs +0 -7
- package/esm/cli/cli-commands.manager.mjs +0 -290
- package/esm/cli/cli-commands.manager.mjs.map +0 -1
- package/esm/cli/cli-commands.utils.mjs +0 -217
- package/esm/cli/cli-commands.utils.mjs.map +0 -1
- package/esm/cli/commands/add.command.mjs +0 -27
- package/esm/cli/commands/add.command.mjs.map +0 -1
- package/esm/cli/commands/build.command.mjs +0 -14
- package/esm/cli/commands/build.command.mjs.map +0 -1
- package/esm/cli/commands/create-database.command.mjs +0 -24
- package/esm/cli/commands/create-database.command.mjs.map +0 -1
- package/esm/cli/commands/dev-server.command.mjs +0 -48
- package/esm/cli/commands/dev-server.command.mjs.map +0 -1
- package/esm/cli/commands/drop-tables.command.mjs +0 -23
- package/esm/cli/commands/drop-tables.command.mjs.map +0 -1
- package/esm/cli/commands/generate/generate.command.mjs +0 -201
- package/esm/cli/commands/generate/generate.command.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/column-dsl-parser.mjs +0 -49
- package/esm/cli/commands/generate/generators/column-dsl-parser.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/controller.generator.mjs +0 -48
- package/esm/cli/commands/generate/generators/controller.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/migration.generator.mjs +0 -81
- package/esm/cli/commands/generate/generators/migration.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/model.generator.mjs +0 -60
- package/esm/cli/commands/generate/generators/model.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/module.generator.mjs +0 -113
- package/esm/cli/commands/generate/generators/module.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/repository.generator.mjs +0 -42
- package/esm/cli/commands/generate/generators/repository.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/resource.generator.mjs +0 -42
- package/esm/cli/commands/generate/generators/resource.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/service.generator.mjs +0 -42
- package/esm/cli/commands/generate/generators/service.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/templates/stubs.mjs +0 -514
- package/esm/cli/commands/generate/templates/stubs.mjs.map +0 -1
- package/esm/cli/commands/generate/utils/name-parser.mjs +0 -69
- package/esm/cli/commands/generate/utils/name-parser.mjs.map +0 -1
- package/esm/cli/commands/generate/utils/path-resolver.mjs +0 -56
- package/esm/cli/commands/generate/utils/path-resolver.mjs.map +0 -1
- package/esm/cli/commands/generate/utils/prompt.mjs +0 -28
- package/esm/cli/commands/generate/utils/prompt.mjs.map +0 -1
- package/esm/cli/commands/generate/utils/writer.mjs +0 -60
- package/esm/cli/commands/generate/utils/writer.mjs.map +0 -1
- package/esm/cli/commands/migrate.command.mjs +0 -60
- package/esm/cli/commands/migrate.command.mjs.map +0 -1
- package/esm/cli/commands/seed.command.mjs +0 -41
- package/esm/cli/commands/seed.command.mjs.map +0 -1
- package/esm/cli/commands/start-production.command.mjs +0 -50
- package/esm/cli/commands/start-production.command.mjs.map +0 -1
- package/esm/cli/commands/storage-put.action.mjs +0 -75
- package/esm/cli/commands/storage-put.action.mjs.map +0 -1
- package/esm/cli/commands/storage-put.command.mjs +0 -46
- package/esm/cli/commands/storage-put.command.mjs.map +0 -1
- package/esm/cli/commands/typings-generator.command.mjs +0 -38
- package/esm/cli/commands/typings-generator.command.mjs.map +0 -1
- package/esm/cli/commands-loader.mjs +0 -50
- package/esm/cli/commands-loader.mjs.map +0 -1
- package/esm/cli/framework-cli-commands.mjs +0 -37
- package/esm/cli/framework-cli-commands.mjs.map +0 -1
- package/esm/cli/parse-cli-args.mjs +0 -62
- package/esm/cli/parse-cli-args.mjs.map +0 -1
- package/esm/cli/start.d.mts +0 -1
- package/esm/cli/start.mjs +0 -8
- package/esm/cli/start.mjs.map +0 -1
- package/esm/cli/string-similarity.mjs +0 -56
- package/esm/cli/string-similarity.mjs.map +0 -1
- package/esm/database/create-database-action.mjs +0 -32
- package/esm/database/create-database-action.mjs.map +0 -1
- package/esm/database/drop-tables-action.mjs +0 -35
- package/esm/database/drop-tables-action.mjs.map +0 -1
- package/esm/database/migrate-action.mjs +0 -99
- package/esm/database/migrate-action.mjs.map +0 -1
- package/esm/database/seed-command-action.mjs +0 -74
- package/esm/database/seed-command-action.mjs.map +0 -1
- package/esm/database/seeds/seeders.manager.mjs +0 -129
- package/esm/database/seeds/seeders.manager.mjs.map +0 -1
- package/esm/database/seeds/seeds-table-migration.mjs +0 -31
- package/esm/database/seeds/seeds-table-migration.mjs.map +0 -1
- package/esm/database/seeds/utils.mjs +0 -6
- package/esm/database/seeds/utils.mjs.map +0 -1
- package/esm/dev-server/development-server.mjs +0 -115
- package/esm/dev-server/development-server.mjs.map +0 -1
- package/esm/dev-server/health-checker/workers/eslint-health.worker.d.mts +0 -1
- package/esm/dev-server/health-checker/workers/ts-health.worker.d.mts +0 -1
- package/esm/dev-server/layer-executor.mjs +0 -114
- package/esm/dev-server/layer-executor.mjs.map +0 -1
- package/esm/dev-server/loader/hook-thread.d.mts +0 -48
- package/esm/dev-server/loader/hook-thread.d.mts.map +0 -1
- package/esm/dev-server/loader/hook-thread.mjs +0 -47
- package/esm/dev-server/loader/hook-thread.mjs.map +0 -1
- package/esm/dev-server/loader/load-hook.d.mts +0 -58
- package/esm/dev-server/loader/load-hook.d.mts.map +0 -1
- package/esm/dev-server/loader/load-hook.mjs +0 -86
- package/esm/dev-server/loader/load-hook.mjs.map +0 -1
- package/esm/dev-server/loader/own-resolver.mjs +0 -69
- package/esm/dev-server/loader/own-resolver.mjs.map +0 -1
- package/esm/dev-server/loader/resolve-capture.mjs +0 -43
- package/esm/dev-server/loader/resolve-capture.mjs.map +0 -1
- package/esm/dev-server/loader/resolve-hook.d.mts +0 -41
- package/esm/dev-server/loader/resolve-hook.d.mts.map +0 -1
- package/esm/dev-server/loader/resolve-hook.mjs +0 -87
- package/esm/dev-server/loader/resolve-hook.mjs.map +0 -1
- package/esm/dev-server/loader/source-slug.mjs +0 -22
- package/esm/dev-server/loader/source-slug.mjs.map +0 -1
- package/esm/dev-server/loader/version-registry.mjs +0 -45
- package/esm/dev-server/loader/version-registry.mjs.map +0 -1
- package/esm/dev-server/start-development-server.mjs +0 -63
- package/esm/dev-server/start-development-server.mjs.map +0 -1
- package/esm/dev-server/type-generator.mjs +0 -453
- package/esm/dev-server/type-generator.mjs.map +0 -1
- package/esm/generations/add-command.action.mjs +0 -376
- package/esm/generations/add-command.action.mjs.map +0 -1
- package/esm/generations/stubs.mjs +0 -103
- package/esm/generations/stubs.mjs.map +0 -1
- package/esm/manifest/manifest-manager.mjs +0 -79
- package/esm/manifest/manifest-manager.mjs.map +0 -1
- package/esm/production/build-app-production.mjs +0 -14
- package/esm/production/build-app-production.mjs.map +0 -1
- package/esm/production/esbuild-plugins.mjs +0 -37
- package/esm/production/esbuild-plugins.mjs.map +0 -1
- package/esm/production/production-builder.mjs +0 -264
- package/esm/production/production-builder.mjs.map +0 -1
- package/esm/production/resolve-build-config.mjs +0 -28
- package/esm/production/resolve-build-config.mjs.map +0 -1
|
@@ -2,7 +2,7 @@ import { t } from "./inject-request-context.mjs";
|
|
|
2
2
|
import { HttpErrorCodes } from "../error-codes.mjs";
|
|
3
3
|
import { parseSize } from "./utils/parse-size.mjs";
|
|
4
4
|
|
|
5
|
-
//#region
|
|
5
|
+
//#region ../@warlock.js/core/src/http/middleware/max-body-size.middleware.ts
|
|
6
6
|
/**
|
|
7
7
|
* Reject requests whose `Content-Length` exceeds the configured cap.
|
|
8
8
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"max-body-size.middleware.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"max-body-size.middleware.mjs","names":[],"sources":["../../../../../../../../@warlock.js/core/src/http/middleware/max-body-size.middleware.ts"],"sourcesContent":["import type { Middleware } from \"../../router\";\nimport { HttpErrorCodes } from \"../error-codes\";\nimport { t } from \"./inject-request-context\";\nimport { parseSize } from \"./utils/parse-size\";\n\n/**\n * Reject requests whose `Content-Length` exceeds the configured cap.\n *\n * Runs before body parsing — the rejection lands as a 413 with the request\n * body still on the wire (the server reads it to completion regardless; this\n * just short-circuits the application stack). For genuine pre-read protection\n * you also want `http.bodyLimit` lowered at the Fastify level — middleware\n * is a per-route layer on top, not a replacement.\n *\n * @example\n * import { middleware } from \"@warlock.js/core\";\n *\n * router.post(\"/comments\", createCommentController, {\n * middleware: [middleware.maxBodySize(\"8kb\")],\n * });\n *\n * router.post(\"/uploads\", uploadController, {\n * middleware: [middleware.maxBodySize(\"10mb\")],\n * });\n */\nexport function maxBodySizeMiddleware(limit: string | number): Middleware {\n const limitBytes = parseSize(limit);\n\n return (request, response) => {\n const contentLengthHeader = request.header(\"content-length\");\n\n if (!contentLengthHeader) return;\n\n const contentLength = Number(contentLengthHeader);\n\n if (!Number.isFinite(contentLength)) return;\n\n if (contentLength <= limitBytes) return;\n\n response.header(\"Connection\", \"close\");\n\n return response.contentTooLarge({\n error: t(\"http.bodyTooLarge\"),\n errorCode: HttpErrorCodes.BodyTooLarge,\n limit: limitBytes,\n received: contentLength,\n },\n );\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,sBAAsB,OAAoC;CACxE,MAAM,aAAa,UAAU,KAAK;CAElC,QAAQ,SAAS,aAAa;EAC5B,MAAM,sBAAsB,QAAQ,OAAO,gBAAgB;EAE3D,IAAI,CAAC,qBAAqB;EAE1B,MAAM,gBAAgB,OAAO,mBAAmB;EAEhD,IAAI,CAAC,OAAO,SAAS,aAAa,GAAG;EAErC,IAAI,iBAAiB,YAAY;EAEjC,SAAS,OAAO,cAAc,OAAO;EAErC,OAAO,SAAS,gBAAgB;GAC5B,OAAO,EAAE,mBAAmB;GAC5B;GACA,OAAO;GACP,UAAU;EACZ,CACF;CACF;AACF"}
|
|
@@ -6,7 +6,7 @@ import { maintenanceMiddleware } from "./maintenance.middleware.mjs";
|
|
|
6
6
|
import { maxBodySizeMiddleware } from "./max-body-size.middleware.mjs";
|
|
7
7
|
import { rateLimitMiddleware } from "./rate-limit.middleware.mjs";
|
|
8
8
|
|
|
9
|
-
//#region
|
|
9
|
+
//#region ../@warlock.js/core/src/http/middleware/middleware-list.d.ts
|
|
10
10
|
/**
|
|
11
11
|
* Built-in HTTP middleware factories.
|
|
12
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware-list.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"middleware-list.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/core/src/http/middleware/middleware-list.ts"],"mappings":";;;;;;;;;;;AA+BA;;;;;;;;;;;;;;;;;;;;;cAAa,UAAA;EAAA"}
|
|
@@ -6,7 +6,7 @@ import { maintenanceMiddleware } from "./maintenance.middleware.mjs";
|
|
|
6
6
|
import { maxBodySizeMiddleware } from "./max-body-size.middleware.mjs";
|
|
7
7
|
import { rateLimitMiddleware } from "./rate-limit.middleware.mjs";
|
|
8
8
|
|
|
9
|
-
//#region
|
|
9
|
+
//#region ../@warlock.js/core/src/http/middleware/middleware-list.ts
|
|
10
10
|
/**
|
|
11
11
|
* Built-in HTTP middleware factories.
|
|
12
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware-list.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"middleware-list.mjs","names":[],"sources":["../../../../../../../../@warlock.js/core/src/http/middleware/middleware-list.ts"],"sourcesContent":["import { cacheMiddleware } from \"./cache-response-middleware\";\nimport { concurrencyLimitMiddleware } from \"./concurrency-limit.middleware\";\nimport { idempotencyMiddleware } from \"./idempotency.middleware\";\nimport { ipFilterMiddleware } from \"./ip-filter.middleware\";\nimport { maintenanceMiddleware } from \"./maintenance.middleware\";\nimport { maxBodySizeMiddleware } from \"./max-body-size.middleware\";\nimport { rateLimitMiddleware } from \"./rate-limit.middleware\";\n\n/**\n * Built-in HTTP middleware factories.\n *\n * Single canonical entry point for the framework's middleware suite. Each\n * property is a factory that returns a `Middleware` ready to drop into a\n * route's `middleware` array.\n *\n * Bare names (`rateLimitMiddleware`, etc.) are not exported from the package —\n * always reach for them via this namespace. The internal `*Middleware` suffix\n * naming exists for in-package code organization only.\n *\n * @example\n * import { authMiddleware } from \"@warlock.js/auth\";\n * import { middleware, router } from \"@warlock.js/core\";\n *\n * router.post(\"/orders\", createOrderController, {\n * middleware: [\n * authMiddleware(\"client\"),\n * middleware.rateLimit({ max: 5, duration: 60_000 }),\n * middleware.idempotency(),\n * ],\n * });\n */\nexport const middleware = {\n cache: cacheMiddleware,\n concurrencyLimit: concurrencyLimitMiddleware,\n idempotency: idempotencyMiddleware,\n ipFilter: ipFilterMiddleware,\n maintenance: maintenanceMiddleware,\n maxBodySize: maxBodySizeMiddleware,\n rateLimit: rateLimitMiddleware,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAa,aAAa;CACxB,OAAO;CACP,kBAAkB;CAClB,aAAa;CACb,UAAU;CACV,aAAa;CACb,aAAa;CACb,WAAW;AACb"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Request } from "../request.mjs";
|
|
2
2
|
import { Middleware } from "../../router/types.mjs";
|
|
3
|
-
//#region
|
|
3
|
+
//#region ../@warlock.js/core/src/http/middleware/rate-limit.middleware.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Options for the per-route rate limit middleware.
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.middleware.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"rate-limit.middleware.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/core/src/http/middleware/rate-limit.middleware.ts"],"mappings":";;;;;;KAQY,gBAAA;EAAgB;;;EAI1B,GAAA;EAIA;;;EAAA,QAAA;EAYA;;AAAY;AA6Cd;;;;EAjDE,YAAA,IAAgB,OAAA,EAAS,OAAO;EAiDE;;;EA7ClC,YAAA;AAAA;;;;;;;;;;;;;;;;;;;;iBA6Cc,mBAAA,CAAoB,OAAA,EAAS,gBAAA,GAAmB,UAAU"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t } from "./inject-request-context.mjs";
|
|
2
2
|
import { HttpErrorCodes } from "../error-codes.mjs";
|
|
3
3
|
|
|
4
|
-
//#region
|
|
4
|
+
//#region ../@warlock.js/core/src/http/middleware/rate-limit.middleware.ts
|
|
5
5
|
const buckets = /* @__PURE__ */ new Map();
|
|
6
6
|
/**
|
|
7
7
|
* Sweep expired buckets so the Map doesn't grow unbounded with one-shot keys
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.middleware.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"rate-limit.middleware.mjs","names":[],"sources":["../../../../../../../../@warlock.js/core/src/http/middleware/rate-limit.middleware.ts"],"sourcesContent":["import type { Middleware } from \"../../router\";\nimport { HttpErrorCodes } from \"../error-codes\";\nimport type { Request } from \"../request\";\nimport { t } from \"./inject-request-context\";\n\n/**\n * Options for the per-route rate limit middleware.\n */\nexport type RateLimitOptions = {\n /**\n * Max requests allowed within the time window.\n */\n max: number;\n /**\n * Time window in milliseconds.\n */\n duration: number;\n /**\n * Group key generator. Defaults to the client IP. Override to scope per-user,\n * per-organization, per-tenant, etc.\n *\n * @example\n * keyGenerator: (request) => request.user?.id ?? request.ip,\n */\n keyGenerator?: (request: Request) => string;\n /**\n * Override the default error message.\n */\n errorMessage?: string;\n};\n\ntype Bucket = {\n count: number;\n resetAt: number;\n};\n\nconst buckets = new Map<string, Bucket>();\n\n/**\n * Sweep expired buckets so the Map doesn't grow unbounded with one-shot keys\n * (rare per-user keys, dynamic path parameters in `keyGenerator`, etc.).\n * Called opportunistically, at most once per minute, not on a timer — keeps\n * the module side-effect-free for testing.\n */\nlet lastPruneAt = 0;\n\nfunction pruneExpired(now: number) {\n for (const [key, bucket] of buckets) {\n if (bucket.resetAt <= now) {\n buckets.delete(key);\n }\n }\n}\n\n/**\n * Per-route / per-group rate limit. Layers on top of `@fastify/rate-limit`'s\n * global cap (configured via `http.rateLimit`) — both run, and either can\n * 429. Use this for endpoints that need a tighter cap than the global default:\n * login, OTP request, password reset, expensive search, AI completions.\n *\n * The counter lives in-process. With `N` replicas the effective cap is\n * `N × max`. For genuinely shared limits, configure `@fastify/rate-limit`'s\n * Redis store via `http.rateLimit` instead.\n *\n * Sets `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` on\n * every response; adds `Retry-After` (seconds) on a 429.\n *\n * @example\n * import { middleware } from \"@warlock.js/core\";\n * router.post(\"/auth/login\", loginController, {\n * middleware: [middleware.rateLimit({ max: 5, duration: 60_000 })],\n * });\n */\nexport function rateLimitMiddleware(options: RateLimitOptions): Middleware {\n return (request, response) => {\n const now = Date.now();\n\n if (now - lastPruneAt > 60_000) {\n pruneExpired(now);\n lastPruneAt = now;\n }\n\n const groupKey = options.keyGenerator?.(request) || request.detectIp() || \"unknown\";\n const cacheKey = `${request.route.path}:${groupKey}`;\n\n let bucket = buckets.get(cacheKey);\n\n if (!bucket || bucket.resetAt <= now) {\n bucket = { count: 0, resetAt: now + options.duration };\n buckets.set(cacheKey, bucket);\n }\n\n bucket.count++;\n\n const remaining = Math.max(0, options.max - bucket.count);\n const retryAfter = Math.max(1, Math.ceil((bucket.resetAt - now) / 1000));\n\n response.header(\"X-RateLimit-Limit\", options.max);\n response.header(\"X-RateLimit-Remaining\", remaining);\n response.header(\"X-RateLimit-Reset\", Math.ceil(bucket.resetAt / 1000));\n\n if (bucket.count > options.max) {\n response.header(\"Retry-After\", retryAfter);\n\n return response.tooManyRequests({\n error: options.errorMessage || t(\"http.rateLimitExceeded\"),\n errorCode: HttpErrorCodes.RateLimitExceeded,\n },\n );\n }\n };\n}\n"],"mappings":";;;;AAoCA,MAAM,0BAAU,IAAI,IAAoB;;;;;;;AAQxC,IAAI,cAAc;AAElB,SAAS,aAAa,KAAa;CACjC,KAAK,MAAM,CAAC,KAAK,WAAW,SAC1B,IAAI,OAAO,WAAW,KACpB,QAAQ,OAAO,GAAG;AAGxB;;;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,oBAAoB,SAAuC;CACzE,QAAQ,SAAS,aAAa;EAC5B,MAAM,MAAM,KAAK,IAAI;EAErB,IAAI,MAAM,cAAc,KAAQ;GAC9B,aAAa,GAAG;GAChB,cAAc;EAChB;EAEA,MAAM,WAAW,QAAQ,eAAe,OAAO,KAAK,QAAQ,SAAS,KAAK;EAC1E,MAAM,WAAW,GAAG,QAAQ,MAAM,KAAK,GAAG;EAE1C,IAAI,SAAS,QAAQ,IAAI,QAAQ;EAEjC,IAAI,CAAC,UAAU,OAAO,WAAW,KAAK;GACpC,SAAS;IAAE,OAAO;IAAG,SAAS,MAAM,QAAQ;GAAS;GACrD,QAAQ,IAAI,UAAU,MAAM;EAC9B;EAEA,OAAO;EAEP,MAAM,YAAY,KAAK,IAAI,GAAG,QAAQ,MAAM,OAAO,KAAK;EACxD,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,UAAU,OAAO,GAAI,CAAC;EAEvE,SAAS,OAAO,qBAAqB,QAAQ,GAAG;EAChD,SAAS,OAAO,yBAAyB,SAAS;EAClD,SAAS,OAAO,qBAAqB,KAAK,KAAK,OAAO,UAAU,GAAI,CAAC;EAErE,IAAI,OAAO,QAAQ,QAAQ,KAAK;GAC9B,SAAS,OAAO,eAAe,UAAU;GAEzC,OAAO,SAAS,gBAAgB;IAC5B,OAAO,QAAQ,gBAAgB,EAAE,wBAAwB;IACzD;GACF,CACF;EACF;CACF;AACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region
|
|
1
|
+
//#region ../@warlock.js/core/src/http/middleware/utils/cidr-match.d.ts
|
|
2
2
|
declare function ipMatches(ip: string, pattern: string): boolean;
|
|
3
3
|
/**
|
|
4
4
|
* Returns true if `ip` matches any pattern in the list.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cidr-match.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"cidr-match.d.mts","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/http/middleware/utils/cidr-match.ts"],"mappings":";iBAkCgB,SAAA,CAAU,EAAA,UAAY,OAAe;AAArD;;;;AAAqD;AA0CrD;AA1CA,iBA0CgB,QAAA,CAAS,EAAA,UAAY,QAAkB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cidr-match.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"cidr-match.mjs","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/http/middleware/utils/cidr-match.ts"],"sourcesContent":["/**\n * Match an IPv4 address against an exact IP or a CIDR block.\n *\n * IPv6 patterns are matched as exact-string only — full IPv6 CIDR support is\n * out of scope; ACLs in production almost always use IPv4 ranges. Add IPv6 CIDR\n * later if a real use-case appears.\n *\n * @example\n * ipMatches(\"10.0.0.5\", \"10.0.0.0/8\"); // true\n * ipMatches(\"10.0.0.5\", \"10.0.0.5\"); // true\n * ipMatches(\"192.168.1.1\", \"10.0.0.0/8\"); // false\n */\nfunction ipv4ToInt(ip: string): number | null {\n const parts = ip.split(\".\");\n\n if (parts.length !== 4) {\n return null;\n }\n\n let result = 0;\n\n for (const part of parts) {\n const num = Number(part);\n\n if (!Number.isInteger(num) || num < 0 || num > 255) {\n return null;\n }\n\n result = (result << 8) + num;\n }\n\n return result >>> 0;\n}\n\nexport function ipMatches(ip: string, pattern: string): boolean {\n if (!ip || !pattern) {\n return false;\n }\n\n if (pattern === ip) {\n return true;\n }\n\n if (!pattern.includes(\"/\")) {\n return false;\n }\n\n const [base, bitsRaw] = pattern.split(\"/\");\n const bits = Number(bitsRaw);\n\n if (!Number.isInteger(bits) || bits < 0 || bits > 32) {\n return false;\n }\n\n const ipInt = ipv4ToInt(ip);\n const baseInt = ipv4ToInt(base);\n\n if (ipInt === null || baseInt === null) {\n return false;\n }\n\n if (bits === 0) {\n return true;\n }\n\n const mask = (~0 << (32 - bits)) >>> 0;\n\n return (ipInt & mask) === (baseInt & mask);\n}\n\n/**\n * Returns true if `ip` matches any pattern in the list.\n *\n * @example\n * anyMatch(\"10.0.0.5\", [\"192.168.0.0/16\", \"10.0.0.0/8\"]); // true\n */\nexport function anyMatch(ip: string, patterns: string[]): boolean {\n return patterns.some((pattern) => ipMatches(ip, pattern));\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,SAAS,UAAU,IAA2B;CAC5C,MAAM,QAAQ,GAAG,MAAM,GAAG;CAE1B,IAAI,MAAM,WAAW,GACnB,OAAO;CAGT,IAAI,SAAS;CAEb,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,MAAM,OAAO,IAAI;EAEvB,IAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,KAAK,MAAM,KAC7C,OAAO;EAGT,UAAU,UAAU,KAAK;CAC3B;CAEA,OAAO,WAAW;AACpB;AAEA,SAAgB,UAAU,IAAY,SAA0B;CAC9D,IAAI,CAAC,MAAM,CAAC,SACV,OAAO;CAGT,IAAI,YAAY,IACd,OAAO;CAGT,IAAI,CAAC,QAAQ,SAAS,GAAG,GACvB,OAAO;CAGT,MAAM,CAAC,MAAM,WAAW,QAAQ,MAAM,GAAG;CACzC,MAAM,OAAO,OAAO,OAAO;CAE3B,IAAI,CAAC,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,OAAO,IAChD,OAAO;CAGT,MAAM,QAAQ,UAAU,EAAE;CAC1B,MAAM,UAAU,UAAU,IAAI;CAE9B,IAAI,UAAU,QAAQ,YAAY,MAChC,OAAO;CAGT,IAAI,SAAS,GACX,OAAO;CAGT,MAAM,OAAQ,MAAO,KAAK,SAAW;CAErC,QAAQ,QAAQ,WAAW,UAAU;AACvC;;;;;;;AAQA,SAAgB,SAAS,IAAY,UAA6B;CAChE,OAAO,SAAS,MAAM,YAAY,UAAU,IAAI,OAAO,CAAC;AAC1D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Request } from "../../request.mjs";
|
|
2
2
|
|
|
3
|
-
//#region
|
|
3
|
+
//#region ../@warlock.js/core/src/http/middleware/utils/idempotency-key.d.ts
|
|
4
4
|
declare function isValidIdempotencyKey(value: unknown): value is string;
|
|
5
5
|
/**
|
|
6
6
|
* Hash a request body to a stable hex digest.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idempotency-key.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"idempotency-key.d.mts","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/http/middleware/utils/idempotency-key.ts"],"mappings":";;;iBAcgB,qBAAA,CAAsB,KAAA,YAAiB,KAAK;;AAA5D;;;;AAA4D;AAmB5D;;;;iBAAgB,QAAA,CAAS,IAAa;AAoBtC;;;;;;;;AAAiF;;;;;;AAAjF,iBAAgB,wBAAA,CAAyB,OAAA,EAAS,OAAO,EAAE,cAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idempotency-key.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"idempotency-key.mjs","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/http/middleware/utils/idempotency-key.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { Request } from \"../../request\";\n\n/**\n * Idempotency-key validation rules.\n *\n * RFC draft-ietf-httpapi-idempotency-key suggests UUIDs or ULIDs but doesn't\n * mandate a format. We accept any printable ASCII string up to 255 chars —\n * tight enough to reject log-injection (no control characters / newlines),\n * loose enough to accept whatever ID scheme the client picks.\n */\nconst MAX_KEY_LENGTH = 255;\nconst PRINTABLE_ASCII = /^[\\x21-\\x7e]+$/;\n\nexport function isValidIdempotencyKey(value: unknown): value is string {\n return (\n typeof value === \"string\" &&\n value.length > 0 &&\n value.length <= MAX_KEY_LENGTH &&\n PRINTABLE_ASCII.test(value)\n );\n}\n\n/**\n * Hash a request body to a stable hex digest.\n *\n * Used to detect \"same key, different body\" — that's a client bug, not a retry.\n * sha256 is overkill for collision resistance here, but it's the dependency-free\n * choice and avoids importing a faster hasher.\n *\n * @example\n * hashBody({ amount: 100, currency: \"USD\" }); // \"a1b2c3...\"\n */\nexport function hashBody(body: unknown): string {\n const serialized = typeof body === \"string\" ? body : JSON.stringify(body ?? {});\n\n return createHash(\"sha256\").update(serialized).digest(\"hex\");\n}\n\n/**\n * Build the cache key for an idempotency record.\n *\n * Scope is `userType:userId` when authenticated, falling back to the client IP\n * when anonymous. This prevents user A from replaying user B's key — even if\n * user B used a guessable value — while still letting the primitive work on\n * public endpoints.\n *\n * Idempotency middleware must run **after** `authMiddleware` so `request.user`\n * and `request.decodedAccessToken` are populated.\n *\n * @example\n * buildIdempotencyCacheKey(request, \"01J9XZQ-ABC\"); // \"idem:client:user_123:01J9XZQ-ABC\"\n */\nexport function buildIdempotencyCacheKey(request: Request, idempotencyKey: string): string {\n const userType = request.decodedAccessToken?.userType || \"anonymous\";\n const userId = request.user?.id || request.detectIp() || \"unknown\";\n\n return `idem:${userType}:${userId}:${idempotencyKey}`;\n}\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AAExB,SAAgB,sBAAsB,OAAiC;CACrE,OACE,OAAO,UAAU,YACjB,MAAM,SAAS,KACf,MAAM,UAAU,kBAChB,gBAAgB,KAAK,KAAK;AAE9B;;;;;;;;;;;AAYA,SAAgB,SAAS,MAAuB;CAC9C,MAAM,aAAa,OAAO,SAAS,WAAW,OAAO,KAAK,UAAU,QAAQ,CAAC,CAAC;CAE9E,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,OAAO,KAAK;AAC7D;;;;;;;;;;;;;;;AAgBA,SAAgB,yBAAyB,SAAkB,gBAAgC;CAIzF,OAAO,QAHU,QAAQ,oBAAoB,YAAY,YAGjC,GAFT,QAAQ,MAAM,MAAM,QAAQ,SAAS,KAAK,UAEvB,GAAG;AACvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-size.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"parse-size.d.mts","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/http/middleware/utils/parse-size.ts"],"mappings":";iBAkBgB,SAAA,CAAU,KAAsB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-size.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"parse-size.mjs","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/http/middleware/utils/parse-size.ts"],"sourcesContent":["/**\n * Parse a human-readable size string into bytes.\n *\n * Accepts `\"2mb\"`, `\"500kb\"`, `\"1.5gb\"`, `\"1024\"`, `\"1024b\"`, etc. Case-insensitive.\n * Numeric input is returned untouched (already bytes).\n *\n * @example\n * parseSize(\"2mb\"); // 2_097_152\n * parseSize(\"500kb\"); // 512_000\n * parseSize(4096); // 4096\n */\nconst UNITS: Record<string, number> = {\n b: 1,\n kb: 1024,\n mb: 1024 * 1024,\n gb: 1024 * 1024 * 1024,\n};\n\nexport function parseSize(value: string | number): number {\n if (typeof value === \"number\") {\n return value;\n }\n\n const match = /^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb)?$/i.exec(value.trim());\n\n if (!match) {\n throw new Error(`Invalid size value: ${value}`);\n }\n\n const [, amount, rawUnit = \"b\"] = match;\n const unit = rawUnit.toLowerCase();\n const multiplier = UNITS[unit];\n\n if (!multiplier) {\n throw new Error(`Unknown size unit: ${unit}`);\n }\n\n return Math.floor(Number(amount) * multiplier);\n}\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,QAAgC;CACpC,GAAG;CACH,IAAI;CACJ,IAAI,OAAO;CACX,IAAI,OAAO,OAAO;AACpB;AAEA,SAAgB,UAAU,OAAgC;CACxD,IAAI,OAAO,UAAU,UACnB,OAAO;CAGT,MAAM,QAAQ,qCAAqC,KAAK,MAAM,KAAK,CAAC;CAEpE,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,uBAAuB,OAAO;CAGhD,MAAM,GAAG,QAAQ,UAAU,OAAO;CAClC,MAAM,OAAO,QAAQ,YAAY;CACjC,MAAM,aAAa,MAAM;CAEzB,IAAI,CAAC,YACH,MAAM,IAAI,MAAM,sBAAsB,MAAM;CAG9C,OAAO,KAAK,MAAM,OAAO,MAAM,IAAI,UAAU;AAC/C"}
|
package/esm/http/plugins.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FastifyInstance } from "./server.mjs";
|
|
2
2
|
|
|
3
|
-
//#region
|
|
3
|
+
//#region ../@warlock.js/core/src/http/plugins.d.ts
|
|
4
4
|
declare function registerHttpPlugins(server: FastifyInstance): Promise<void>;
|
|
5
5
|
//#endregion
|
|
6
6
|
export { registerHttpPlugins };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"plugins.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/http/plugins.ts"],"mappings":";;;iBAWsB,mBAAA,CAAoB,MAAA,EAAQ,eAAA,GAAe,OAAA"}
|
package/esm/http/plugins.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import "../utils/index.mjs";
|
|
|
3
3
|
import config from "@mongez/config";
|
|
4
4
|
import fastifyMultipart from "@fastify/multipart";
|
|
5
5
|
|
|
6
|
-
//#region
|
|
6
|
+
//#region ../@warlock.js/core/src/http/plugins.ts
|
|
7
7
|
const defaultCorsOptions = {
|
|
8
8
|
origin: "*",
|
|
9
9
|
methods: "*"
|
package/esm/http/plugins.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"plugins.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/http/plugins.ts"],"sourcesContent":["import type { FastifyCorsOptions } from \"@fastify/cors\";\nimport fastifyMultipart from \"@fastify/multipart\";\nimport config from \"@mongez/config\";\nimport { rootPath } from \"../utils\";\nimport type { FastifyInstance } from \"./server\";\n\nconst defaultCorsOptions: FastifyCorsOptions = {\n origin: \"*\",\n methods: \"*\",\n};\n\nexport async function registerHttpPlugins(server: FastifyInstance) {\n // 👇🏻 register rate-limit plugin\n server.register(import(\"@fastify/rate-limit\"), {\n // max requests per time window\n max: config.get(\"http.rateLimit.max\", 60),\n // maximum time that is will allow max requests\n timeWindow: config.get(\"http.rateLimit.duration\", 60 * 1000),\n });\n\n // 👇🏻 register cors plugin\n const corsOptions: FastifyCorsOptions | undefined = {\n ...config.get(\"http.cors\", {}),\n ...defaultCorsOptions,\n };\n\n server.register(import(\"@fastify/cors\"), corsOptions);\n\n // 👇🏻 import multipart plugin\n server.register(fastifyMultipart, {\n attachFieldsToBody: true,\n limits: {\n // file size could be up to 10MB\n fileSize: config.get(\"http.fileUploadLimit\", 10 * 1024 * 1024),\n },\n });\n\n server.register(import(\"@fastify/static\"), {\n root: config.get(\"storage.publicRoot\", rootPath(\"public\")),\n prefix: config.get(\"storage.publicPrefix\", \"/public/\"),\n });\n\n // 👇🏻 register cookie plugin\n server.register(import(\"@fastify/cookie\"), {\n secret: config.get(\"http.cookies.secret\"), // Optional: allow signed cookies\n parseOptions: config.get(\"http.cookies.options\", {}),\n });\n}\n"],"mappings":";;;;;;AAMA,MAAM,qBAAyC;CAC7C,QAAQ;CACR,SAAS;AACX;AAEA,eAAsB,oBAAoB,QAAyB;CAEjE,OAAO,SAAS,OAAO,wBAAwB;EAE7C,KAAK,OAAO,IAAI,sBAAsB,EAAE;EAExC,YAAY,OAAO,IAAI,2BAA2B,KAAK,GAAI;CAC7D,CAAC;CAGD,MAAM,cAA8C;EAClD,GAAG,OAAO,IAAI,aAAa,CAAC,CAAC;EAC7B,GAAG;CACL;CAEA,OAAO,SAAS,OAAO,kBAAkB,WAAW;CAGpD,OAAO,SAAS,kBAAkB;EAChC,oBAAoB;EACpB,QAAQ,EAEN,UAAU,OAAO,IAAI,wBAAwB,KAAK,OAAO,IAAI,EAC/D;CACF,CAAC;CAED,OAAO,SAAS,OAAO,oBAAoB;EACzC,MAAM,OAAO,IAAI,sBAAsB,SAAS,QAAQ,CAAC;EACzD,QAAQ,OAAO,IAAI,wBAAwB,UAAU;CACvD,CAAC;CAGD,OAAO,SAAS,OAAO,oBAAoB;EACzC,QAAQ,OAAO,IAAI,qBAAqB;EACxC,cAAc,OAAO,IAAI,wBAAwB,CAAC,CAAC;CACrD,CAAC;AACH"}
|
|
@@ -3,7 +3,7 @@ import { Response } from "./response.mjs";
|
|
|
3
3
|
import { ReturnedResponse } from "./types.mjs";
|
|
4
4
|
import { RequestControllerContract } from "../router/types.mjs";
|
|
5
5
|
|
|
6
|
-
//#region
|
|
6
|
+
//#region ../@warlock.js/core/src/http/request-controller.d.ts
|
|
7
7
|
declare abstract class RequestController implements RequestControllerContract {
|
|
8
8
|
readonly request: Request;
|
|
9
9
|
readonly response: Response;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-controller.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"request-controller.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/http/request-controller.ts"],"mappings":";;;;;;uBAKsB,iBAAA,YAA6B,yBAAA;EAAA,SAE/B,OAAA,EAAS,OAAA;EAAA,SACT,QAAA,EAAU,QAAA;cADV,OAAA,EAAS,OAAA,EACT,QAAA,EAAU,QAAA;EAAA,SAKZ,OAAA,IAAW,OAAA,CAAQ,gBAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-controller.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"request-controller.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/http/request-controller.ts"],"sourcesContent":["import type { RequestControllerContract } from \"./../router/types\";\nimport type { Request } from \"./request\";\nimport type { Response } from \"./response\";\nimport type { ReturnedResponse } from \"./types\";\n\nexport abstract class RequestController implements RequestControllerContract {\n public constructor(\n public readonly request: Request,\n public readonly response: Response,\n ) {\n //\n }\n\n public abstract execute(): Promise<ReturnedResponse>;\n}\n"],"mappings":";AAKA,IAAsB,oBAAtB,MAA6E;CAC3E,AAAO,YACL,AAAgB,SAChB,AAAgB,UAChB;EAFgB;EACA;CAGlB;AAGF"}
|
package/esm/http/request.d.mts
CHANGED
|
@@ -8,7 +8,7 @@ import { LogLevel } from "@warlock.js/logger";
|
|
|
8
8
|
import { FastifyRequest } from "fastify";
|
|
9
9
|
import { IncomingHttpHeaders } from "node:http2";
|
|
10
10
|
|
|
11
|
-
//#region
|
|
11
|
+
//#region ../@warlock.js/core/src/http/request.d.ts
|
|
12
12
|
type StandardHeaders = { [K in keyof IncomingHttpHeaders as string extends K ? never : number extends K ? never : K]: IncomingHttpHeaders[K] };
|
|
13
13
|
type HeaderKeys = keyof StandardHeaders;
|
|
14
14
|
declare class Request<RequestValidation = any> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"request.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/http/request.ts"],"mappings":"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"}
|
package/esm/http/request.mjs
CHANGED
|
@@ -11,7 +11,7 @@ import { Random, except, get, only, rtrim, set, unset } from "@mongez/reinforcem
|
|
|
11
11
|
import { colors } from "@mongez/copper";
|
|
12
12
|
import events from "@mongez/events";
|
|
13
13
|
|
|
14
|
-
//#region
|
|
14
|
+
//#region ../@warlock.js/core/src/http/request.ts
|
|
15
15
|
var Request = class Request {
|
|
16
16
|
constructor() {
|
|
17
17
|
this.payload = {};
|
package/esm/http/request.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.mjs","names":[],"sources":["../../../../../../@warlock.js/core/src/http/request.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\r\nimport events from \"@mongez/events\";\r\nimport { trans, transFrom } from \"@mongez/localization\";\r\nimport { Random, except, get, only, rtrim, set, unset } from \"@mongez/reinforcements\";\r\nimport { isEmpty } from \"@mongez/supportive-is\";\r\nimport type { LogLevel } from \"@warlock.js/logger\";\r\nimport { log } from \"@warlock.js/logger\";\r\nimport { BaseValidator, v } from \"@warlock.js/seal\";\r\nimport type { FastifyRequest } from \"fastify\";\r\nimport { type IncomingHttpHeaders } from \"node:http2\";\r\nimport { config } from \"../config/config-getter\";\r\nimport type { Middleware, Route } from \"../router\";\r\nimport { validateAll } from \"../validation/validateAll\";\r\nimport { createRequestStore } from \"./middleware/inject-request-context\";\r\nimport { Response } from \"./response\";\r\nimport type { RequestEvent } from \"./types\";\r\nimport { UploadedFile } from \"./uploaded-file\";\r\n\r\ntype StandardHeaders = {\r\n // copy every declared property from http.IncomingHttpHeaders\r\n // but remove index signatures\r\n [K in keyof IncomingHttpHeaders as string extends K\r\n ? never\r\n : number extends K\r\n ? never\r\n : K]: IncomingHttpHeaders[K];\r\n};\r\n\r\ntype HeaderKeys = keyof StandardHeaders;\r\n\r\nexport class Request<RequestValidation = any> {\r\n /**\r\n * Underlying Fastify request — a public escape hatch to capabilities the\r\n * framework's high-level helpers don't yet cover.\r\n *\r\n * **Prefer framework methods first**: `request.input()`, `request.header()`,\r\n * `request.body`, `request.query`, `request.params`, `request.file()`,\r\n * `request.user`, `request.detectIp()`, etc. They handle locale, parsing,\r\n * trust-proxy, and validation pipeline integration correctly.\r\n *\r\n * **Reach for `baseRequest` only** when the framework genuinely lacks a\r\n * helper for what you need — and when you do, file an issue so we can add\r\n * it. The escape hatch is the release valve that lets consumers move\r\n * faster than the framework, but every long-term reach here is a missing\r\n * helper waiting to be added.\r\n */\r\n public baseRequest!: FastifyRequest;\r\n\r\n /**\r\n * Response Object\r\n */\r\n public response!: Response;\r\n\r\n /**\r\n * Route Object\r\n */\r\n public route!: Route;\r\n\r\n /**\r\n * Parsed Request Payload\r\n */\r\n protected payload: any = {};\r\n\r\n /**\r\n * Decoded access token payload (set by auth middleware)\r\n */\r\n public decodedAccessToken?: any;\r\n\r\n /**\r\n * Current request instance\r\n */\r\n public static current: Request;\r\n\r\n /**\r\n * Translation method\r\n * Type of it is the same as the type of trans function\r\n */\r\n public trans: ReturnType<typeof trans> = trans;\r\n\r\n /**\r\n * Alias to trans method\r\n */\r\n public t: ReturnType<typeof trans> = trans;\r\n\r\n /**\r\n * Dynamic properties index signature\r\n *\r\n * This allows attaching custom properties to the request instance,\r\n * commonly used during validation middleware to attach fetched models.\r\n *\r\n * @example\r\n * // In validation middleware:\r\n * const post = await Post.find(request.int(\"id\"));\r\n * if (!post) return response.notFound();\r\n * request.post = post; // Attach the model to the request\r\n *\r\n * // In route handler:\r\n * const post = request.post;\r\n * // Work with the pre-fetched model\r\n */\r\n [key: string]: any;\r\n\r\n /**\r\n * Locale code\r\n */\r\n protected _locale = \"\";\r\n\r\n /**\r\n * Validated data\r\n */\r\n protected validatedData?: RequestValidation;\r\n\r\n /**\r\n * Request id\r\n */\r\n public id = Random.string(32);\r\n\r\n /**\r\n * Start Time\r\n */\r\n public startTime = Date.now();\r\n\r\n /**\r\n * End Time\r\n */\r\n public endTime?: undefined | number;\r\n\r\n /**\r\n * Set request handler\r\n */\r\n public setRequest(request: FastifyRequest) {\r\n this.baseRequest = request;\r\n\r\n this.resolveRequestId();\r\n\r\n this.parsePayload();\r\n\r\n const localeCode = this.getLocaleCode();\r\n\r\n this.trans = this.t = transFrom.bind(null, localeCode);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Inherit `X-Request-Id` from the incoming request, fall back to a custom\r\n * generator, then to the field-init default (`Random.string(32)`).\r\n *\r\n * Inherited values are validated (length cap + printable-ASCII) to prevent\r\n * log-injection from a malicious client. Disable the whole behavior by\r\n * setting `http.requestId.enabled = false` — in which case the field-init\r\n * default is used regardless of any incoming header.\r\n */\r\n protected resolveRequestId() {\r\n const requestIdConfig = config.key(\"http.requestId\") || {};\r\n\r\n if (requestIdConfig.enabled === false) return;\r\n\r\n const headerName = (requestIdConfig.header || \"x-request-id\").toLowerCase();\r\n const incoming = this.baseRequest.headers[headerName];\r\n\r\n if (Request.isValidRequestId(incoming)) {\r\n this.id = incoming;\r\n\r\n return;\r\n }\r\n\r\n if (typeof requestIdConfig.generator === \"function\") {\r\n this.id = requestIdConfig.generator();\r\n }\r\n }\r\n\r\n /**\r\n * Validate a candidate request-id value. Accepts non-empty printable ASCII\r\n * up to 128 characters — tight enough to reject newline / control-character\r\n * log-injection, loose enough to accept UUIDs, ULIDs, snowflakes, etc.\r\n */\r\n protected static isValidRequestId(value: unknown): value is string {\r\n return (\r\n typeof value === \"string\" &&\r\n value.length > 0 &&\r\n value.length <= 128 &&\r\n /^[\\x21-\\x7e]+$/.test(value)\r\n );\r\n }\r\n\r\n /**\r\n * Translate from the given locale code\r\n */\r\n public transFrom(localeCode: string, keyword: string, placeholders?: any) {\r\n return transFrom(localeCode, keyword, placeholders);\r\n }\r\n\r\n /**\r\n * Get current locale code\r\n */\r\n public get locale() {\r\n if (this._locale) return this._locale;\r\n\r\n return this.header(\"translation-locale-code\") || this.localized;\r\n }\r\n\r\n /**\r\n * Set locale code\r\n */\r\n public set locale(localeCode: string) {\r\n this._locale = localeCode;\r\n }\r\n\r\n /**\r\n * Get locale code that will be used for translation\r\n */\r\n public get localized() {\r\n if (this._locale) return this._locale;\r\n\r\n return (this._locale = this.header(\"locale\") || this.query[\"locale\"]);\r\n }\r\n\r\n /**\r\n * Set locale code\r\n */\r\n public setLocaleCode(localeCode: string) {\r\n this._locale = localeCode;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get current locale code or return default locale code\r\n */\r\n public getLocaleCode(defaultLocaleCode: string = config.key(\"app.localeCode\") || \"en\") {\r\n return this.locale || defaultLocaleCode;\r\n }\r\n\r\n /**\r\n * Get http protocol\r\n */\r\n public get protocol() {\r\n return this.baseRequest.protocol;\r\n }\r\n\r\n /**\r\n * Validate the given validation schema\r\n */\r\n public async validate(validation: BaseValidator, selectedInputs?: string[]) {\r\n return await v.validate(validation, selectedInputs ? this.only(selectedInputs) : this.all());\r\n }\r\n\r\n /**\r\n * Clear current user\r\n */\r\n public clearCurrentUser() {\r\n this.user = undefined;\r\n }\r\n\r\n /**\r\n * Get value of the given header\r\n */\r\n public header<TCustomHeader extends string = HeaderKeys>(\r\n name: TCustomHeader | HeaderKeys,\r\n defaultValue: any = null,\r\n ) {\r\n return this.baseRequest.headers[name.toLocaleLowerCase()] ?? defaultValue;\r\n }\r\n\r\n /**\r\n * Get all cookies from the current request\r\n */\r\n public get cookies(): Record<string, string | undefined> {\r\n return this.baseRequest.cookies || {};\r\n }\r\n\r\n /**\r\n * Get a particular cookie value or fallback to default\r\n */\r\n public cookie(name: string, defaultValue?: any): string | any {\r\n const value = this.cookies[name] ?? defaultValue;\r\n\r\n try {\r\n return JSON.parse(value);\r\n } catch (error) {\r\n return value;\r\n }\r\n }\r\n\r\n /**\r\n * Determine if the request has the specified cookie\r\n */\r\n public hasCookie(name: string): boolean {\r\n return this.cookies[name] !== undefined;\r\n }\r\n\r\n /**\r\n * Get the current request domain\r\n */\r\n public get domain() {\r\n return this.baseRequest.hostname.replace(/^www\\./, \"\");\r\n }\r\n\r\n /**\r\n * Get hostname\r\n */\r\n public get hostname() {\r\n return this.domain;\r\n }\r\n\r\n /**\r\n * Get request origin\r\n */\r\n public get origin() {\r\n return this.baseRequest.headers.origin as string;\r\n }\r\n\r\n /**\r\n * Get the domain of the origin\r\n */\r\n public get originDomain() {\r\n const domain = this.origin ? new URL(this.origin).hostname : null;\r\n\r\n if (domain?.startsWith(\"www.\")) {\r\n return domain.replace(/^www\\./, \"\");\r\n }\r\n\r\n return domain;\r\n }\r\n\r\n /**\r\n * Get authorization header value\r\n */\r\n public get authorizationValue(): string {\r\n const authorization = this.header(\"authorization\");\r\n\r\n if (!authorization) return \"\";\r\n\r\n const [type, value] = authorization.split(\" \");\r\n\r\n if (![\"bearer\", \"key\"].includes(type.toLowerCase())) return \"\";\r\n\r\n return value || \"\";\r\n }\r\n\r\n /**\r\n * Get access token from Authorization header\r\n *\r\n * If the Authorization header does not start with `Bearer` value then return null\r\n */\r\n public get accessToken(): string | undefined {\r\n const authorization = this.header(\"authorization\");\r\n\r\n if (!authorization) return;\r\n\r\n const [type, value] = authorization.split(\" \");\r\n\r\n if (type.toLowerCase() !== \"bearer\") return;\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Get the authorization header\r\n */\r\n public get authorization() {\r\n return this.header(\"authorization\");\r\n }\r\n\r\n /**\r\n * Get current request method\r\n */\r\n public get method(): string {\r\n return this.baseRequest.method;\r\n }\r\n\r\n /**\r\n * Parse the payload and merge it from the request body, params and query string\r\n */\r\n protected parsePayload() {\r\n this.payload.body = this.parseBody(this.baseRequest.body);\r\n\r\n this.payload.query = this.parseBody(this.baseRequest.query);\r\n this.payload.params = { ...(this.baseRequest.params || {}) };\r\n this.payload.all = {\r\n ...this.payload.body,\r\n ...this.payload.query,\r\n ...this.payload.params,\r\n };\r\n }\r\n\r\n /**\r\n * Parse body payload\r\n */\r\n protected parseBody(data: any) {\r\n try {\r\n if (!data) return {};\r\n\r\n const body: any = {};\r\n\r\n const arrayOfObjectValues: any = {};\r\n\r\n for (let key in data) {\r\n const value = data[key];\r\n\r\n let isArrayKey = false;\r\n\r\n if (key.endsWith(\"[]\")) {\r\n isArrayKey = true;\r\n }\r\n\r\n key = rtrim(key, \"[]\");\r\n\r\n // check if the key is has a square brackets, then convert it into object\r\n // i.e user[email] => user: {email: \"value\"}\r\n // also check if its an array of objects\r\n\r\n if (key.includes(\"[\")) {\r\n // check if its an array of objects\r\n if (key.includes(\"][\")) {\r\n const keyParts = key.split(\"[\");\r\n\r\n const keyName = keyParts[0];\r\n if (!arrayOfObjectValues[keyName]) {\r\n arrayOfObjectValues[keyName] = [];\r\n }\r\n\r\n const keyNameParts = keyParts[1].split(\"]\");\r\n\r\n const index = Number(keyNameParts[0]);\r\n\r\n if (!arrayOfObjectValues[keyName][index]) {\r\n arrayOfObjectValues[keyName][index] = {};\r\n }\r\n\r\n // now get the key after the index\r\n const keyNameParts2 = keyParts[2].split(\"]\");\r\n const keyName2 = keyNameParts2[0];\r\n\r\n arrayOfObjectValues[keyName][index][keyName2] = this.parseValue(value);\r\n\r\n continue;\r\n }\r\n\r\n const keyParts = key.split(\"[\");\r\n const keyName = keyParts[0];\r\n const keyNameParts = keyParts[1].split(\"]\");\r\n\r\n set(\r\n body,\r\n keyName + \".\" + keyNameParts[0],\r\n Array.isArray(value) ? value.map(this.parseValue.bind(this)) : this.parseValue(value),\r\n );\r\n\r\n continue;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n set(body, key, value.map(this.parseValue.bind(this)));\r\n } else if (isArrayKey) {\r\n if (body[key]) {\r\n body[key].push(this.parseValue(value));\r\n } else {\r\n body[key] = [this.parseValue(value)];\r\n\r\n continue;\r\n }\r\n } else {\r\n set(body, key, this.parseValue(value));\r\n }\r\n }\r\n\r\n // now merge the array of objects into the body\r\n for (const key in arrayOfObjectValues) {\r\n body[key] = arrayOfObjectValues[key];\r\n }\r\n\r\n return body;\r\n } catch (error) {\r\n console.log(error);\r\n this.log(error, \"error\");\r\n }\r\n }\r\n\r\n /**\r\n * Parse the given data\r\n */\r\n protected parseValue(data: any) {\r\n // data.value appears only in the multipart form data\r\n // if it json, then just return the data\r\n if (data?.file) return new UploadedFile(data);\r\n if (data?.value !== undefined && data?.fields && data?.type) {\r\n data = data.value;\r\n }\r\n\r\n if (data === \"false\") return false;\r\n\r\n if (data === \"true\") return true;\r\n\r\n if (data === \"null\") return null;\r\n\r\n if (typeof data === \"string\") return data.trim();\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Set route handler\r\n */\r\n public setRoute(route: Route) {\r\n this.route = route;\r\n\r\n // pass the route to the response object\r\n this.response.setRoute(route);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Trigger an http event\r\n */\r\n public trigger(eventName: RequestEvent, ...args: any[]) {\r\n return events.trigger(`request.${eventName}`, ...args, this);\r\n }\r\n\r\n /**\r\n * Listen to the given event\r\n */\r\n public on(eventName: RequestEvent, callback: any) {\r\n return this.subscribe(eventName, callback);\r\n }\r\n\r\n /**\r\n * Make a log message\r\n */\r\n public log(message: any, level: LogLevel = \"info\") {\r\n if (!config.key(\"http.log\")) return;\r\n\r\n log.log({\r\n module: \"request\",\r\n action: this.route.method + \" \" + this.route.path.replace(\"/*\", \"\") + `:${this.id}`,\r\n message,\r\n type: level,\r\n context: {\r\n request: this,\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Get current request path\r\n */\r\n public get path() {\r\n return this.baseRequest.url;\r\n }\r\n\r\n /**\r\n * {@alias}\r\n */\r\n public get url() {\r\n return this.baseRequest.url;\r\n }\r\n\r\n /**\r\n * Get full url\r\n */\r\n public get fullUrl() {\r\n return this.protocol + \"://\" + this.hostname + this.path;\r\n }\r\n\r\n /**\r\n * Drive the middleware chain for the current route, then defer to the\r\n * controller. Returns the first response value any middleware short-circuits\r\n * with, or `undefined` to continue into validation + handler.\r\n *\r\n * @internal Framework orchestration — do not call from app code. Will move\r\n * to a dedicated controller dispatcher in a future refactor.\r\n */\r\n public async runMiddleware() {\r\n // measure request time\r\n // check for middleware first\r\n const middlewareOutput = await this.executeMiddleware();\r\n\r\n if (middlewareOutput !== undefined) {\r\n // 👇🏻 make sure first its not a response instance\r\n if (middlewareOutput instanceof Response) return middlewareOutput;\r\n // 👇🏻 send the response\r\n return this.response.send(middlewareOutput);\r\n }\r\n\r\n const handler = this.route.handler;\r\n\r\n if (!handler.validation) return;\r\n\r\n // 👇🏻 check for validation using validateAll helper function\r\n const validationOutput = await validateAll(handler.validation, this, this.response);\r\n\r\n return validationOutput;\r\n }\r\n\r\n /**\r\n * Return the request handler attached to the current route.\r\n *\r\n * @internal Framework orchestration — do not call from app code.\r\n */\r\n public getHandler() {\r\n return this.route.handler;\r\n }\r\n\r\n /**\r\n * Get inputs that has been validated only\r\n * You can also pass an array of inputs to get only the validated inputs\r\n */\r\n public validated<Output = RequestValidation>(inputs?: (keyof Output | (string & {}))[]): Output {\r\n if (this.validatedData) {\r\n return inputs\r\n ? only(this.validatedData as Output, inputs as string[])\r\n : (this.validatedData as Output);\r\n }\r\n\r\n return {} as Output;\r\n }\r\n\r\n /**\r\n * Get inputs that has been validated except the given inputs\r\n */\r\n public validatedExcept(...inputs: string[]): RequestValidation {\r\n return except(this.validated(), inputs);\r\n }\r\n\r\n /**\r\n * Set validated data\r\n */\r\n public setValidatedData(data: RequestValidation) {\r\n this.validatedData = data;\r\n }\r\n\r\n /**\r\n * Top-level entry into the request lifecycle — opens the context store,\r\n * runs middleware, drives the handler, handles errors.\r\n *\r\n * @internal Framework orchestration — do not call from app code. Wired\r\n * from the Fastify route handler in `router.scan()`.\r\n */\r\n public async execute() {\r\n try {\r\n // call executingAction event\r\n\r\n this.log(\"Executing the request\");\r\n\r\n return await createRequestStore(this, this.response);\r\n } catch (error) {\r\n this.log(error, \"error\");\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Iterate the collected middlewares in order; return the first short-circuit\r\n * value or `undefined` when every middleware passes through.\r\n *\r\n * @internal Framework orchestration — do not call from app code.\r\n */\r\n protected async executeMiddleware() {\r\n // collect all middlewares for current route\r\n const middlewares = this.collectMiddlewares();\r\n\r\n // check if there are no middlewares, then return\r\n if (middlewares.length === 0) return;\r\n\r\n this.log(\"About to execute request middlewares\");\r\n\r\n // trigger the executingMiddleware event\r\n this.trigger(\"executingMiddleware\", middlewares, this.route);\r\n\r\n for (const middleware of middlewares) {\r\n this.log(\"Executing middleware \" + colors.yellowBright(middleware.name));\r\n const output = await middleware(this, this.response);\r\n this.log(\"Executed middleware \" + colors.yellowBright(middleware.name), \"success\");\r\n\r\n if (output !== undefined) {\r\n this.log(\r\n colors.yellow(\"request intercepted by middleware \") + colors.cyanBright(middleware.name),\r\n \"warn\",\r\n );\r\n\r\n this.trigger(\"executedMiddleware\");\r\n\r\n this.log(\"Request middlewares executed\", \"success\");\r\n\r\n return output;\r\n }\r\n }\r\n\r\n this.log(\"Request middlewares executed\", \"success\");\r\n\r\n // trigger the executedMiddleware event\r\n this.trigger(\"executedMiddleware\", middlewares, this.route);\r\n }\r\n\r\n /**\r\n * Gather the middleware list for the current route — today just the\r\n * route-level array; future extraction may merge group + app-wide layers.\r\n *\r\n * @internal Framework orchestration — do not call from app code.\r\n */\r\n protected collectMiddlewares(): Middleware[] {\r\n const middlewaresList: Middleware[] = [];\r\n\r\n // collect route middlewares\r\n if (this.route.middleware) {\r\n middlewaresList.push(...this.route.middleware);\r\n }\r\n\r\n return middlewaresList;\r\n }\r\n\r\n /**\r\n * Get request input value from query string, params or body\r\n */\r\n public input(key: string, defaultValue?: any) {\r\n return get(this.payload.all, key, defaultValue);\r\n }\r\n\r\n /**\r\n * Get email input value, this will lowercase the value\r\n */\r\n public email(key: string = \"email\", defaultValue: string = \"\"): string {\r\n return this.input(key, defaultValue)?.toLowerCase() || defaultValue;\r\n }\r\n\r\n /**\r\n * @alias input\r\n */\r\n public get(key: string, defaultValue?: any) {\r\n return this.input(key, defaultValue);\r\n }\r\n\r\n /**\r\n * Determine if request has input value\r\n */\r\n public has(key: string) {\r\n return get(this.payload.all, key, undefined) !== undefined;\r\n }\r\n\r\n /**\r\n * Set request input value\r\n */\r\n public set(key: string, value: any) {\r\n set(this.payload.all, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set the given value if the request does not have the input\r\n */\r\n public setDefault(key: string, value: any) {\r\n if (this.has(key)) return this;\r\n\r\n set(this.payload.all, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Unset request payload keys\r\n */\r\n public unset(...keys: string[]) {\r\n this.payload.all = unset(this.payload.all, keys);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get request body\r\n */\r\n public get body() {\r\n return this.payload.body;\r\n }\r\n\r\n /**\r\n * Set request body value\r\n */\r\n public setBody(key: string, value: any) {\r\n set(this.payload.body, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get body inputs except files\r\n */\r\n public get bodyInputs() {\r\n const inputs = this.payload.body;\r\n\r\n const bodyInputs: any = {};\r\n\r\n for (const key in inputs) {\r\n const value = inputs[key];\r\n\r\n if (value.file && value.fieldname) continue;\r\n\r\n bodyInputs[key] = value;\r\n }\r\n\r\n return bodyInputs;\r\n }\r\n\r\n /**\r\n * Get request file in UploadedFile instance\r\n */\r\n public file(key: string): UploadedFile | undefined {\r\n const file = this.input(key);\r\n\r\n return file;\r\n }\r\n\r\n /**\r\n * Get uploaded files from the request for the given name\r\n * If the given name is not present in the request, return an empty array\r\n */\r\n public files(name: string): UploadedFile[] {\r\n return this.input(name) || [];\r\n }\r\n\r\n /**\r\n * Get request params\r\n */\r\n public get params() {\r\n return this.payload.params;\r\n }\r\n\r\n /**\r\n * Set request params value\r\n */\r\n public setParam(key: string, value: any) {\r\n set(this.payload.params, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get request query\r\n */\r\n public get query() {\r\n return this.payload.query;\r\n }\r\n\r\n /**\r\n * Set request query value\r\n */\r\n public setQuery(key: string, value: any) {\r\n set(this.payload.query, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get all inputs\r\n */\r\n public all() {\r\n return this.payload.all;\r\n }\r\n\r\n /**\r\n * Get all inputs except params\r\n */\r\n public allExceptParams() {\r\n return {\r\n ...this.payload.query,\r\n ...this.payload.body,\r\n };\r\n }\r\n\r\n /**\r\n * Get all heavy inputs except params\r\n */\r\n public heavyExceptParams() {\r\n const inputs = this.allExceptParams();\r\n\r\n const heavyInputs: any = {};\r\n\r\n for (const key in inputs) {\r\n const value = inputs[key];\r\n\r\n if (isEmpty(value) && value !== null) continue;\r\n\r\n heavyInputs[key] = value;\r\n }\r\n\r\n return heavyInputs;\r\n }\r\n\r\n /**\r\n * Get only heavy inputs, the input with a value\r\n */\r\n public heavy() {\r\n const inputs = this.all();\r\n\r\n const heavyInputs: any = {};\r\n\r\n for (const key in inputs) {\r\n const value = inputs[key];\r\n\r\n if (isEmpty(value) && value !== null) continue;\r\n\r\n heavyInputs[key] = value;\r\n }\r\n\r\n return heavyInputs;\r\n }\r\n\r\n /**\r\n * Get only the given keys from the request data\r\n */\r\n public only(keys: string[]) {\r\n return only(this.all(), keys);\r\n }\r\n\r\n /**\r\n * Pluck the given keys from the request data\r\n */\r\n public pluck(keys: string[]) {\r\n const data = this.only(keys);\r\n\r\n this.unset(...keys);\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Get all request inputs except the given keys\r\n */\r\n public except(keys: string[]) {\r\n return except(this.all(), keys);\r\n }\r\n\r\n /**\r\n * Get boolean input value\r\n */\r\n public bool(key: string, defaultValue = false) {\r\n const value = this.input(key, defaultValue);\r\n\r\n if (value === \"true\") {\r\n return true;\r\n }\r\n\r\n if (value === \"false\") {\r\n return false;\r\n }\r\n\r\n if (value === 0) {\r\n return false;\r\n }\r\n\r\n return Boolean(value);\r\n }\r\n\r\n /**\r\n * Get integer input value\r\n */\r\n public int(key: string, defaultValue: number = 0): number | undefined {\r\n const value = this.input(key, defaultValue);\r\n\r\n if (!value && value !== 0) return undefined;\r\n\r\n return parseInt(value);\r\n }\r\n\r\n /**\r\n * Shorthand getter to get id param\r\n */\r\n public get idParam() {\r\n return this.int(\"id\");\r\n }\r\n\r\n /**\r\n * Get string input value\r\n */\r\n public string(key: string, defaultValue: string = \"\"): string {\r\n const value = this.input(key, defaultValue);\r\n\r\n return String(value);\r\n }\r\n\r\n /**\r\n * Get float input value\r\n */\r\n public float(key: string, defaultValue: number = 0): number {\r\n const value = this.input(key, defaultValue);\r\n\r\n return parseFloat(value) || 0;\r\n }\r\n\r\n /**\r\n * Get number input value\r\n */\r\n public number(key: string, defaultValue: number = 0): number {\r\n const value = Number(this.input(key, defaultValue));\r\n\r\n return isNaN(value) ? defaultValue : value;\r\n }\r\n\r\n /**\r\n * Immediate-peer IP as Fastify reports it — the address that connected to\r\n * the server socket, with `trustProxy` resolution applied. Use this when\r\n * you specifically need the peer address (rate-limit-by-direct-connection,\r\n * health-check origin verification).\r\n *\r\n * **For most use cases prefer `request.detectIp()`** — behind any proxy\r\n * (load balancer, CDN, sidecar) `ip` reports the proxy, not the real client.\r\n */\r\n public get ip() {\r\n return this.baseRequest.ip;\r\n }\r\n\r\n /**\r\n * Best-effort real client IP — checks `X-Real-IP` and `X-Forwarded-For`\r\n * headers first, falls back to `baseRequest.ip` when neither is present.\r\n *\r\n * **Prefer this over `request.ip` for any caller behind a proxy** (load\r\n * balancer, CDN, reverse proxy, k8s ingress). Only trust the result as\r\n * far as you trust the upstream proxy chain — `X-Forwarded-For` is\r\n * client-settable; verify the request came through your trusted edge\r\n * before treating the value as authoritative.\r\n */\r\n public detectIp() {\r\n // as the server maybe used behind a proxy\r\n // then we need to check first if there is a forwarded ip\r\n // check for the real-ip header\r\n\r\n const realIp = this.header(\"x-real-ip\");\r\n\r\n if (realIp) return realIp;\r\n\r\n const forwardedIp = this.header(\"x-forwarded-for\");\r\n\r\n return forwardedIp || this.baseRequest.ip;\r\n }\r\n\r\n /**\r\n * An alias to detectIp\r\n */\r\n public get realIp() {\r\n return this.detectIp();\r\n }\r\n\r\n /**\r\n * Get request ips\r\n */\r\n public get ips() {\r\n return this.baseRequest.ips;\r\n }\r\n\r\n /**\r\n * Get request referer\r\n */\r\n public get referer() {\r\n return this.baseRequest.headers.referer;\r\n }\r\n\r\n /**\r\n * Get user agent\r\n */\r\n public get userAgent() {\r\n return this.baseRequest.headers[\"user-agent\"];\r\n }\r\n\r\n /**\r\n * Get request headers\r\n */\r\n public get headers(): typeof this.baseRequest.headers {\r\n return this.baseRequest.headers;\r\n }\r\n\r\n /**\r\n * Set the given header\r\n */\r\n public setHeader(key: HeaderKeys, value: string) {\r\n this.baseRequest.headers[key.toLowerCase()] = value;\r\n\r\n return this;\r\n }\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"request.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/http/request.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\r\nimport events from \"@mongez/events\";\r\nimport { trans, transFrom } from \"@mongez/localization\";\r\nimport { Random, except, get, only, rtrim, set, unset } from \"@mongez/reinforcements\";\r\nimport { isEmpty } from \"@mongez/supportive-is\";\r\nimport type { LogLevel } from \"@warlock.js/logger\";\r\nimport { log } from \"@warlock.js/logger\";\r\nimport { BaseValidator, v } from \"@warlock.js/seal\";\r\nimport type { FastifyRequest } from \"fastify\";\r\nimport { type IncomingHttpHeaders } from \"node:http2\";\r\nimport { config } from \"../config/config-getter\";\r\nimport type { Middleware, Route } from \"../router\";\r\nimport { validateAll } from \"../validation/validateAll\";\r\nimport { createRequestStore } from \"./middleware/inject-request-context\";\r\nimport { Response } from \"./response\";\r\nimport type { RequestEvent } from \"./types\";\r\nimport { UploadedFile } from \"./uploaded-file\";\r\n\r\ntype StandardHeaders = {\r\n // copy every declared property from http.IncomingHttpHeaders\r\n // but remove index signatures\r\n [K in keyof IncomingHttpHeaders as string extends K\r\n ? never\r\n : number extends K\r\n ? never\r\n : K]: IncomingHttpHeaders[K];\r\n};\r\n\r\ntype HeaderKeys = keyof StandardHeaders;\r\n\r\nexport class Request<RequestValidation = any> {\r\n /**\r\n * Underlying Fastify request — a public escape hatch to capabilities the\r\n * framework's high-level helpers don't yet cover.\r\n *\r\n * **Prefer framework methods first**: `request.input()`, `request.header()`,\r\n * `request.body`, `request.query`, `request.params`, `request.file()`,\r\n * `request.user`, `request.detectIp()`, etc. They handle locale, parsing,\r\n * trust-proxy, and validation pipeline integration correctly.\r\n *\r\n * **Reach for `baseRequest` only** when the framework genuinely lacks a\r\n * helper for what you need — and when you do, file an issue so we can add\r\n * it. The escape hatch is the release valve that lets consumers move\r\n * faster than the framework, but every long-term reach here is a missing\r\n * helper waiting to be added.\r\n */\r\n public baseRequest!: FastifyRequest;\r\n\r\n /**\r\n * Response Object\r\n */\r\n public response!: Response;\r\n\r\n /**\r\n * Route Object\r\n */\r\n public route!: Route;\r\n\r\n /**\r\n * Parsed Request Payload\r\n */\r\n protected payload: any = {};\r\n\r\n /**\r\n * Decoded access token payload (set by auth middleware)\r\n */\r\n public decodedAccessToken?: any;\r\n\r\n /**\r\n * Current request instance\r\n */\r\n public static current: Request;\r\n\r\n /**\r\n * Translation method\r\n * Type of it is the same as the type of trans function\r\n */\r\n public trans: ReturnType<typeof trans> = trans;\r\n\r\n /**\r\n * Alias to trans method\r\n */\r\n public t: ReturnType<typeof trans> = trans;\r\n\r\n /**\r\n * Dynamic properties index signature\r\n *\r\n * This allows attaching custom properties to the request instance,\r\n * commonly used during validation middleware to attach fetched models.\r\n *\r\n * @example\r\n * // In validation middleware:\r\n * const post = await Post.find(request.int(\"id\"));\r\n * if (!post) return response.notFound();\r\n * request.post = post; // Attach the model to the request\r\n *\r\n * // In route handler:\r\n * const post = request.post;\r\n * // Work with the pre-fetched model\r\n */\r\n [key: string]: any;\r\n\r\n /**\r\n * Locale code\r\n */\r\n protected _locale = \"\";\r\n\r\n /**\r\n * Validated data\r\n */\r\n protected validatedData?: RequestValidation;\r\n\r\n /**\r\n * Request id\r\n */\r\n public id = Random.string(32);\r\n\r\n /**\r\n * Start Time\r\n */\r\n public startTime = Date.now();\r\n\r\n /**\r\n * End Time\r\n */\r\n public endTime?: undefined | number;\r\n\r\n /**\r\n * Set request handler\r\n */\r\n public setRequest(request: FastifyRequest) {\r\n this.baseRequest = request;\r\n\r\n this.resolveRequestId();\r\n\r\n this.parsePayload();\r\n\r\n const localeCode = this.getLocaleCode();\r\n\r\n this.trans = this.t = transFrom.bind(null, localeCode);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Inherit `X-Request-Id` from the incoming request, fall back to a custom\r\n * generator, then to the field-init default (`Random.string(32)`).\r\n *\r\n * Inherited values are validated (length cap + printable-ASCII) to prevent\r\n * log-injection from a malicious client. Disable the whole behavior by\r\n * setting `http.requestId.enabled = false` — in which case the field-init\r\n * default is used regardless of any incoming header.\r\n */\r\n protected resolveRequestId() {\r\n const requestIdConfig = config.key(\"http.requestId\") || {};\r\n\r\n if (requestIdConfig.enabled === false) return;\r\n\r\n const headerName = (requestIdConfig.header || \"x-request-id\").toLowerCase();\r\n const incoming = this.baseRequest.headers[headerName];\r\n\r\n if (Request.isValidRequestId(incoming)) {\r\n this.id = incoming;\r\n\r\n return;\r\n }\r\n\r\n if (typeof requestIdConfig.generator === \"function\") {\r\n this.id = requestIdConfig.generator();\r\n }\r\n }\r\n\r\n /**\r\n * Validate a candidate request-id value. Accepts non-empty printable ASCII\r\n * up to 128 characters — tight enough to reject newline / control-character\r\n * log-injection, loose enough to accept UUIDs, ULIDs, snowflakes, etc.\r\n */\r\n protected static isValidRequestId(value: unknown): value is string {\r\n return (\r\n typeof value === \"string\" &&\r\n value.length > 0 &&\r\n value.length <= 128 &&\r\n /^[\\x21-\\x7e]+$/.test(value)\r\n );\r\n }\r\n\r\n /**\r\n * Translate from the given locale code\r\n */\r\n public transFrom(localeCode: string, keyword: string, placeholders?: any) {\r\n return transFrom(localeCode, keyword, placeholders);\r\n }\r\n\r\n /**\r\n * Get current locale code\r\n */\r\n public get locale() {\r\n if (this._locale) return this._locale;\r\n\r\n return this.header(\"translation-locale-code\") || this.localized;\r\n }\r\n\r\n /**\r\n * Set locale code\r\n */\r\n public set locale(localeCode: string) {\r\n this._locale = localeCode;\r\n }\r\n\r\n /**\r\n * Get locale code that will be used for translation\r\n */\r\n public get localized() {\r\n if (this._locale) return this._locale;\r\n\r\n return (this._locale = this.header(\"locale\") || this.query[\"locale\"]);\r\n }\r\n\r\n /**\r\n * Set locale code\r\n */\r\n public setLocaleCode(localeCode: string) {\r\n this._locale = localeCode;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get current locale code or return default locale code\r\n */\r\n public getLocaleCode(defaultLocaleCode: string = config.key(\"app.localeCode\") || \"en\") {\r\n return this.locale || defaultLocaleCode;\r\n }\r\n\r\n /**\r\n * Get http protocol\r\n */\r\n public get protocol() {\r\n return this.baseRequest.protocol;\r\n }\r\n\r\n /**\r\n * Validate the given validation schema\r\n */\r\n public async validate(validation: BaseValidator, selectedInputs?: string[]) {\r\n return await v.validate(validation, selectedInputs ? this.only(selectedInputs) : this.all());\r\n }\r\n\r\n /**\r\n * Clear current user\r\n */\r\n public clearCurrentUser() {\r\n this.user = undefined;\r\n }\r\n\r\n /**\r\n * Get value of the given header\r\n */\r\n public header<TCustomHeader extends string = HeaderKeys>(\r\n name: TCustomHeader | HeaderKeys,\r\n defaultValue: any = null,\r\n ) {\r\n return this.baseRequest.headers[name.toLocaleLowerCase()] ?? defaultValue;\r\n }\r\n\r\n /**\r\n * Get all cookies from the current request\r\n */\r\n public get cookies(): Record<string, string | undefined> {\r\n return this.baseRequest.cookies || {};\r\n }\r\n\r\n /**\r\n * Get a particular cookie value or fallback to default\r\n */\r\n public cookie(name: string, defaultValue?: any): string | any {\r\n const value = this.cookies[name] ?? defaultValue;\r\n\r\n try {\r\n return JSON.parse(value);\r\n } catch (error) {\r\n return value;\r\n }\r\n }\r\n\r\n /**\r\n * Determine if the request has the specified cookie\r\n */\r\n public hasCookie(name: string): boolean {\r\n return this.cookies[name] !== undefined;\r\n }\r\n\r\n /**\r\n * Get the current request domain\r\n */\r\n public get domain() {\r\n return this.baseRequest.hostname.replace(/^www\\./, \"\");\r\n }\r\n\r\n /**\r\n * Get hostname\r\n */\r\n public get hostname() {\r\n return this.domain;\r\n }\r\n\r\n /**\r\n * Get request origin\r\n */\r\n public get origin() {\r\n return this.baseRequest.headers.origin as string;\r\n }\r\n\r\n /**\r\n * Get the domain of the origin\r\n */\r\n public get originDomain() {\r\n const domain = this.origin ? new URL(this.origin).hostname : null;\r\n\r\n if (domain?.startsWith(\"www.\")) {\r\n return domain.replace(/^www\\./, \"\");\r\n }\r\n\r\n return domain;\r\n }\r\n\r\n /**\r\n * Get authorization header value\r\n */\r\n public get authorizationValue(): string {\r\n const authorization = this.header(\"authorization\");\r\n\r\n if (!authorization) return \"\";\r\n\r\n const [type, value] = authorization.split(\" \");\r\n\r\n if (![\"bearer\", \"key\"].includes(type.toLowerCase())) return \"\";\r\n\r\n return value || \"\";\r\n }\r\n\r\n /**\r\n * Get access token from Authorization header\r\n *\r\n * If the Authorization header does not start with `Bearer` value then return null\r\n */\r\n public get accessToken(): string | undefined {\r\n const authorization = this.header(\"authorization\");\r\n\r\n if (!authorization) return;\r\n\r\n const [type, value] = authorization.split(\" \");\r\n\r\n if (type.toLowerCase() !== \"bearer\") return;\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Get the authorization header\r\n */\r\n public get authorization() {\r\n return this.header(\"authorization\");\r\n }\r\n\r\n /**\r\n * Get current request method\r\n */\r\n public get method(): string {\r\n return this.baseRequest.method;\r\n }\r\n\r\n /**\r\n * Parse the payload and merge it from the request body, params and query string\r\n */\r\n protected parsePayload() {\r\n this.payload.body = this.parseBody(this.baseRequest.body);\r\n\r\n this.payload.query = this.parseBody(this.baseRequest.query);\r\n this.payload.params = { ...(this.baseRequest.params || {}) };\r\n this.payload.all = {\r\n ...this.payload.body,\r\n ...this.payload.query,\r\n ...this.payload.params,\r\n };\r\n }\r\n\r\n /**\r\n * Parse body payload\r\n */\r\n protected parseBody(data: any) {\r\n try {\r\n if (!data) return {};\r\n\r\n const body: any = {};\r\n\r\n const arrayOfObjectValues: any = {};\r\n\r\n for (let key in data) {\r\n const value = data[key];\r\n\r\n let isArrayKey = false;\r\n\r\n if (key.endsWith(\"[]\")) {\r\n isArrayKey = true;\r\n }\r\n\r\n key = rtrim(key, \"[]\");\r\n\r\n // check if the key is has a square brackets, then convert it into object\r\n // i.e user[email] => user: {email: \"value\"}\r\n // also check if its an array of objects\r\n\r\n if (key.includes(\"[\")) {\r\n // check if its an array of objects\r\n if (key.includes(\"][\")) {\r\n const keyParts = key.split(\"[\");\r\n\r\n const keyName = keyParts[0];\r\n if (!arrayOfObjectValues[keyName]) {\r\n arrayOfObjectValues[keyName] = [];\r\n }\r\n\r\n const keyNameParts = keyParts[1].split(\"]\");\r\n\r\n const index = Number(keyNameParts[0]);\r\n\r\n if (!arrayOfObjectValues[keyName][index]) {\r\n arrayOfObjectValues[keyName][index] = {};\r\n }\r\n\r\n // now get the key after the index\r\n const keyNameParts2 = keyParts[2].split(\"]\");\r\n const keyName2 = keyNameParts2[0];\r\n\r\n arrayOfObjectValues[keyName][index][keyName2] = this.parseValue(value);\r\n\r\n continue;\r\n }\r\n\r\n const keyParts = key.split(\"[\");\r\n const keyName = keyParts[0];\r\n const keyNameParts = keyParts[1].split(\"]\");\r\n\r\n set(\r\n body,\r\n keyName + \".\" + keyNameParts[0],\r\n Array.isArray(value) ? value.map(this.parseValue.bind(this)) : this.parseValue(value),\r\n );\r\n\r\n continue;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n set(body, key, value.map(this.parseValue.bind(this)));\r\n } else if (isArrayKey) {\r\n if (body[key]) {\r\n body[key].push(this.parseValue(value));\r\n } else {\r\n body[key] = [this.parseValue(value)];\r\n\r\n continue;\r\n }\r\n } else {\r\n set(body, key, this.parseValue(value));\r\n }\r\n }\r\n\r\n // now merge the array of objects into the body\r\n for (const key in arrayOfObjectValues) {\r\n body[key] = arrayOfObjectValues[key];\r\n }\r\n\r\n return body;\r\n } catch (error) {\r\n console.log(error);\r\n this.log(error, \"error\");\r\n }\r\n }\r\n\r\n /**\r\n * Parse the given data\r\n */\r\n protected parseValue(data: any) {\r\n // data.value appears only in the multipart form data\r\n // if it json, then just return the data\r\n if (data?.file) return new UploadedFile(data);\r\n if (data?.value !== undefined && data?.fields && data?.type) {\r\n data = data.value;\r\n }\r\n\r\n if (data === \"false\") return false;\r\n\r\n if (data === \"true\") return true;\r\n\r\n if (data === \"null\") return null;\r\n\r\n if (typeof data === \"string\") return data.trim();\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Set route handler\r\n */\r\n public setRoute(route: Route) {\r\n this.route = route;\r\n\r\n // pass the route to the response object\r\n this.response.setRoute(route);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Trigger an http event\r\n */\r\n public trigger(eventName: RequestEvent, ...args: any[]) {\r\n return events.trigger(`request.${eventName}`, ...args, this);\r\n }\r\n\r\n /**\r\n * Listen to the given event\r\n */\r\n public on(eventName: RequestEvent, callback: any) {\r\n return this.subscribe(eventName, callback);\r\n }\r\n\r\n /**\r\n * Make a log message\r\n */\r\n public log(message: any, level: LogLevel = \"info\") {\r\n if (!config.key(\"http.log\")) return;\r\n\r\n log.log({\r\n module: \"request\",\r\n action: this.route.method + \" \" + this.route.path.replace(\"/*\", \"\") + `:${this.id}`,\r\n message,\r\n type: level,\r\n context: {\r\n request: this,\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Get current request path\r\n */\r\n public get path() {\r\n return this.baseRequest.url;\r\n }\r\n\r\n /**\r\n * {@alias}\r\n */\r\n public get url() {\r\n return this.baseRequest.url;\r\n }\r\n\r\n /**\r\n * Get full url\r\n */\r\n public get fullUrl() {\r\n return this.protocol + \"://\" + this.hostname + this.path;\r\n }\r\n\r\n /**\r\n * Drive the middleware chain for the current route, then defer to the\r\n * controller. Returns the first response value any middleware short-circuits\r\n * with, or `undefined` to continue into validation + handler.\r\n *\r\n * @internal Framework orchestration — do not call from app code. Will move\r\n * to a dedicated controller dispatcher in a future refactor.\r\n */\r\n public async runMiddleware() {\r\n // measure request time\r\n // check for middleware first\r\n const middlewareOutput = await this.executeMiddleware();\r\n\r\n if (middlewareOutput !== undefined) {\r\n // 👇🏻 make sure first its not a response instance\r\n if (middlewareOutput instanceof Response) return middlewareOutput;\r\n // 👇🏻 send the response\r\n return this.response.send(middlewareOutput);\r\n }\r\n\r\n const handler = this.route.handler;\r\n\r\n if (!handler.validation) return;\r\n\r\n // 👇🏻 check for validation using validateAll helper function\r\n const validationOutput = await validateAll(handler.validation, this, this.response);\r\n\r\n return validationOutput;\r\n }\r\n\r\n /**\r\n * Return the request handler attached to the current route.\r\n *\r\n * @internal Framework orchestration — do not call from app code.\r\n */\r\n public getHandler() {\r\n return this.route.handler;\r\n }\r\n\r\n /**\r\n * Get inputs that has been validated only\r\n * You can also pass an array of inputs to get only the validated inputs\r\n */\r\n public validated<Output = RequestValidation>(inputs?: (keyof Output | (string & {}))[]): Output {\r\n if (this.validatedData) {\r\n return inputs\r\n ? only(this.validatedData as Output, inputs as string[])\r\n : (this.validatedData as Output);\r\n }\r\n\r\n return {} as Output;\r\n }\r\n\r\n /**\r\n * Get inputs that has been validated except the given inputs\r\n */\r\n public validatedExcept(...inputs: string[]): RequestValidation {\r\n return except(this.validated(), inputs);\r\n }\r\n\r\n /**\r\n * Set validated data\r\n */\r\n public setValidatedData(data: RequestValidation) {\r\n this.validatedData = data;\r\n }\r\n\r\n /**\r\n * Top-level entry into the request lifecycle — opens the context store,\r\n * runs middleware, drives the handler, handles errors.\r\n *\r\n * @internal Framework orchestration — do not call from app code. Wired\r\n * from the Fastify route handler in `router.scan()`.\r\n */\r\n public async execute() {\r\n try {\r\n // call executingAction event\r\n\r\n this.log(\"Executing the request\");\r\n\r\n return await createRequestStore(this, this.response);\r\n } catch (error) {\r\n this.log(error, \"error\");\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Iterate the collected middlewares in order; return the first short-circuit\r\n * value or `undefined` when every middleware passes through.\r\n *\r\n * @internal Framework orchestration — do not call from app code.\r\n */\r\n protected async executeMiddleware() {\r\n // collect all middlewares for current route\r\n const middlewares = this.collectMiddlewares();\r\n\r\n // check if there are no middlewares, then return\r\n if (middlewares.length === 0) return;\r\n\r\n this.log(\"About to execute request middlewares\");\r\n\r\n // trigger the executingMiddleware event\r\n this.trigger(\"executingMiddleware\", middlewares, this.route);\r\n\r\n for (const middleware of middlewares) {\r\n this.log(\"Executing middleware \" + colors.yellowBright(middleware.name));\r\n const output = await middleware(this, this.response);\r\n this.log(\"Executed middleware \" + colors.yellowBright(middleware.name), \"success\");\r\n\r\n if (output !== undefined) {\r\n this.log(\r\n colors.yellow(\"request intercepted by middleware \") + colors.cyanBright(middleware.name),\r\n \"warn\",\r\n );\r\n\r\n this.trigger(\"executedMiddleware\");\r\n\r\n this.log(\"Request middlewares executed\", \"success\");\r\n\r\n return output;\r\n }\r\n }\r\n\r\n this.log(\"Request middlewares executed\", \"success\");\r\n\r\n // trigger the executedMiddleware event\r\n this.trigger(\"executedMiddleware\", middlewares, this.route);\r\n }\r\n\r\n /**\r\n * Gather the middleware list for the current route — today just the\r\n * route-level array; future extraction may merge group + app-wide layers.\r\n *\r\n * @internal Framework orchestration — do not call from app code.\r\n */\r\n protected collectMiddlewares(): Middleware[] {\r\n const middlewaresList: Middleware[] = [];\r\n\r\n // collect route middlewares\r\n if (this.route.middleware) {\r\n middlewaresList.push(...this.route.middleware);\r\n }\r\n\r\n return middlewaresList;\r\n }\r\n\r\n /**\r\n * Get request input value from query string, params or body\r\n */\r\n public input(key: string, defaultValue?: any) {\r\n return get(this.payload.all, key, defaultValue);\r\n }\r\n\r\n /**\r\n * Get email input value, this will lowercase the value\r\n */\r\n public email(key: string = \"email\", defaultValue: string = \"\"): string {\r\n return this.input(key, defaultValue)?.toLowerCase() || defaultValue;\r\n }\r\n\r\n /**\r\n * @alias input\r\n */\r\n public get(key: string, defaultValue?: any) {\r\n return this.input(key, defaultValue);\r\n }\r\n\r\n /**\r\n * Determine if request has input value\r\n */\r\n public has(key: string) {\r\n return get(this.payload.all, key, undefined) !== undefined;\r\n }\r\n\r\n /**\r\n * Set request input value\r\n */\r\n public set(key: string, value: any) {\r\n set(this.payload.all, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set the given value if the request does not have the input\r\n */\r\n public setDefault(key: string, value: any) {\r\n if (this.has(key)) return this;\r\n\r\n set(this.payload.all, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Unset request payload keys\r\n */\r\n public unset(...keys: string[]) {\r\n this.payload.all = unset(this.payload.all, keys);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get request body\r\n */\r\n public get body() {\r\n return this.payload.body;\r\n }\r\n\r\n /**\r\n * Set request body value\r\n */\r\n public setBody(key: string, value: any) {\r\n set(this.payload.body, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get body inputs except files\r\n */\r\n public get bodyInputs() {\r\n const inputs = this.payload.body;\r\n\r\n const bodyInputs: any = {};\r\n\r\n for (const key in inputs) {\r\n const value = inputs[key];\r\n\r\n if (value.file && value.fieldname) continue;\r\n\r\n bodyInputs[key] = value;\r\n }\r\n\r\n return bodyInputs;\r\n }\r\n\r\n /**\r\n * Get request file in UploadedFile instance\r\n */\r\n public file(key: string): UploadedFile | undefined {\r\n const file = this.input(key);\r\n\r\n return file;\r\n }\r\n\r\n /**\r\n * Get uploaded files from the request for the given name\r\n * If the given name is not present in the request, return an empty array\r\n */\r\n public files(name: string): UploadedFile[] {\r\n return this.input(name) || [];\r\n }\r\n\r\n /**\r\n * Get request params\r\n */\r\n public get params() {\r\n return this.payload.params;\r\n }\r\n\r\n /**\r\n * Set request params value\r\n */\r\n public setParam(key: string, value: any) {\r\n set(this.payload.params, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get request query\r\n */\r\n public get query() {\r\n return this.payload.query;\r\n }\r\n\r\n /**\r\n * Set request query value\r\n */\r\n public setQuery(key: string, value: any) {\r\n set(this.payload.query, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get all inputs\r\n */\r\n public all() {\r\n return this.payload.all;\r\n }\r\n\r\n /**\r\n * Get all inputs except params\r\n */\r\n public allExceptParams() {\r\n return {\r\n ...this.payload.query,\r\n ...this.payload.body,\r\n };\r\n }\r\n\r\n /**\r\n * Get all heavy inputs except params\r\n */\r\n public heavyExceptParams() {\r\n const inputs = this.allExceptParams();\r\n\r\n const heavyInputs: any = {};\r\n\r\n for (const key in inputs) {\r\n const value = inputs[key];\r\n\r\n if (isEmpty(value) && value !== null) continue;\r\n\r\n heavyInputs[key] = value;\r\n }\r\n\r\n return heavyInputs;\r\n }\r\n\r\n /**\r\n * Get only heavy inputs, the input with a value\r\n */\r\n public heavy() {\r\n const inputs = this.all();\r\n\r\n const heavyInputs: any = {};\r\n\r\n for (const key in inputs) {\r\n const value = inputs[key];\r\n\r\n if (isEmpty(value) && value !== null) continue;\r\n\r\n heavyInputs[key] = value;\r\n }\r\n\r\n return heavyInputs;\r\n }\r\n\r\n /**\r\n * Get only the given keys from the request data\r\n */\r\n public only(keys: string[]) {\r\n return only(this.all(), keys);\r\n }\r\n\r\n /**\r\n * Pluck the given keys from the request data\r\n */\r\n public pluck(keys: string[]) {\r\n const data = this.only(keys);\r\n\r\n this.unset(...keys);\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Get all request inputs except the given keys\r\n */\r\n public except(keys: string[]) {\r\n return except(this.all(), keys);\r\n }\r\n\r\n /**\r\n * Get boolean input value\r\n */\r\n public bool(key: string, defaultValue = false) {\r\n const value = this.input(key, defaultValue);\r\n\r\n if (value === \"true\") {\r\n return true;\r\n }\r\n\r\n if (value === \"false\") {\r\n return false;\r\n }\r\n\r\n if (value === 0) {\r\n return false;\r\n }\r\n\r\n return Boolean(value);\r\n }\r\n\r\n /**\r\n * Get integer input value\r\n */\r\n public int(key: string, defaultValue: number = 0): number | undefined {\r\n const value = this.input(key, defaultValue);\r\n\r\n if (!value && value !== 0) return undefined;\r\n\r\n return parseInt(value);\r\n }\r\n\r\n /**\r\n * Shorthand getter to get id param\r\n */\r\n public get idParam() {\r\n return this.int(\"id\");\r\n }\r\n\r\n /**\r\n * Get string input value\r\n */\r\n public string(key: string, defaultValue: string = \"\"): string {\r\n const value = this.input(key, defaultValue);\r\n\r\n return String(value);\r\n }\r\n\r\n /**\r\n * Get float input value\r\n */\r\n public float(key: string, defaultValue: number = 0): number {\r\n const value = this.input(key, defaultValue);\r\n\r\n return parseFloat(value) || 0;\r\n }\r\n\r\n /**\r\n * Get number input value\r\n */\r\n public number(key: string, defaultValue: number = 0): number {\r\n const value = Number(this.input(key, defaultValue));\r\n\r\n return isNaN(value) ? defaultValue : value;\r\n }\r\n\r\n /**\r\n * Immediate-peer IP as Fastify reports it — the address that connected to\r\n * the server socket, with `trustProxy` resolution applied. Use this when\r\n * you specifically need the peer address (rate-limit-by-direct-connection,\r\n * health-check origin verification).\r\n *\r\n * **For most use cases prefer `request.detectIp()`** — behind any proxy\r\n * (load balancer, CDN, sidecar) `ip` reports the proxy, not the real client.\r\n */\r\n public get ip() {\r\n return this.baseRequest.ip;\r\n }\r\n\r\n /**\r\n * Best-effort real client IP — checks `X-Real-IP` and `X-Forwarded-For`\r\n * headers first, falls back to `baseRequest.ip` when neither is present.\r\n *\r\n * **Prefer this over `request.ip` for any caller behind a proxy** (load\r\n * balancer, CDN, reverse proxy, k8s ingress). Only trust the result as\r\n * far as you trust the upstream proxy chain — `X-Forwarded-For` is\r\n * client-settable; verify the request came through your trusted edge\r\n * before treating the value as authoritative.\r\n */\r\n public detectIp() {\r\n // as the server maybe used behind a proxy\r\n // then we need to check first if there is a forwarded ip\r\n // check for the real-ip header\r\n\r\n const realIp = this.header(\"x-real-ip\");\r\n\r\n if (realIp) return realIp;\r\n\r\n const forwardedIp = this.header(\"x-forwarded-for\");\r\n\r\n return forwardedIp || this.baseRequest.ip;\r\n }\r\n\r\n /**\r\n * An alias to detectIp\r\n */\r\n public get realIp() {\r\n return this.detectIp();\r\n }\r\n\r\n /**\r\n * Get request ips\r\n */\r\n public get ips() {\r\n return this.baseRequest.ips;\r\n }\r\n\r\n /**\r\n * Get request referer\r\n */\r\n public get referer() {\r\n return this.baseRequest.headers.referer;\r\n }\r\n\r\n /**\r\n * Get user agent\r\n */\r\n public get userAgent() {\r\n return this.baseRequest.headers[\"user-agent\"];\r\n }\r\n\r\n /**\r\n * Get request headers\r\n */\r\n public get headers(): typeof this.baseRequest.headers {\r\n return this.baseRequest.headers;\r\n }\r\n\r\n /**\r\n * Set the given header\r\n */\r\n public setHeader(key: HeaderKeys, value: string) {\r\n this.baseRequest.headers[key.toLowerCase()] = value;\r\n\r\n return this;\r\n }\r\n}\r\n"],"mappings":"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"}
|
package/esm/http/response.d.mts
CHANGED
|
@@ -9,7 +9,7 @@ import { FastifyReply } from "fastify";
|
|
|
9
9
|
import { CookieSerializeOptions } from "@fastify/cookie";
|
|
10
10
|
import React from "react";
|
|
11
11
|
|
|
12
|
-
//#region
|
|
12
|
+
//#region ../@warlock.js/core/src/http/response.d.ts
|
|
13
13
|
type CookieValue = string | number | boolean | Record<string, any> | Array<any>;
|
|
14
14
|
/**
|
|
15
15
|
* Cookie options accepted by `response.cookie()`.
|
|
@@ -115,7 +115,7 @@ declare class Response {
|
|
|
115
115
|
/**
|
|
116
116
|
* Get raw response
|
|
117
117
|
*/
|
|
118
|
-
get raw(): import("http").ServerResponse<import("http").IncomingMessage>;
|
|
118
|
+
get raw(): import("node:http").ServerResponse<import("node:http").IncomingMessage>;
|
|
119
119
|
/**
|
|
120
120
|
* Get Current response body
|
|
121
121
|
*/
|
|
@@ -383,7 +383,7 @@ declare class Response {
|
|
|
383
383
|
/**
|
|
384
384
|
* Send a no content response with status code 204
|
|
385
385
|
*/
|
|
386
|
-
noContent(): FastifyReply<import("fastify").RouteGenericInterface, import("fastify").RawServerDefault, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, unknown, import("fastify").FastifySchema, import("fastify").FastifyTypeProviderDefault, unknown>;
|
|
386
|
+
noContent(): FastifyReply<import("fastify").RouteGenericInterface, import("fastify").RawServerDefault, import("node:http").IncomingMessage, import("node:http").ServerResponse<import("node:http").IncomingMessage>, unknown, import("fastify").FastifySchema, import("fastify").FastifyTypeProviderDefault, unknown>;
|
|
387
387
|
/**
|
|
388
388
|
* Send an accepted response with status code 202
|
|
389
389
|
* Used for async operations that have been accepted but not yet processed
|
|
@@ -415,7 +415,7 @@ declare class Response {
|
|
|
415
415
|
* Send buffer as a response
|
|
416
416
|
* Useful for dynamically generated content (e.g., resized images, generated PDFs)
|
|
417
417
|
*/
|
|
418
|
-
sendBuffer(buffer: Buffer, options?: number | SendBufferOptions): FastifyReply<import("fastify").RouteGenericInterface, import("fastify").RawServerDefault, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, unknown, import("fastify").FastifySchema, import("fastify").FastifyTypeProviderDefault, unknown>;
|
|
418
|
+
sendBuffer(buffer: Buffer, options?: number | SendBufferOptions): FastifyReply<import("fastify").RouteGenericInterface, import("fastify").RawServerDefault, import("node:http").IncomingMessage, import("node:http").ServerResponse<import("node:http").IncomingMessage>, unknown, import("fastify").FastifySchema, import("fastify").FastifyTypeProviderDefault, unknown>;
|
|
419
419
|
/**
|
|
420
420
|
* Send an Image instance as a response
|
|
421
421
|
* Automatically detects image format and sets content type
|