@warlock.js/core 4.1.15 → 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 +6 -6
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +4 -4
- 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 +8 -6
- 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 +3 -3
- 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 +3 -3
- 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 +4 -4
- 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 +3 -3
- 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 +3 -3
- 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 +6 -6
- 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 +3 -3
- 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 +5 -5
- 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 +10 -10
- 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 +6 -6
- 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 +3 -3
- 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 +4 -1
- package/esm/index.mjs +5 -1
- package/esm/logger/logger.d.mts +1 -1
- package/esm/logger/logger.d.mts.map +1 -1
- package/esm/logger/logger.mjs +1 -1
- package/esm/logger/logger.mjs.map +1 -1
- package/esm/logger/types.d.mts +1 -1
- package/esm/logger/types.d.mts.map +1 -1
- package/esm/mail/config.d.mts +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 +3 -3
- 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 +3 -3
- 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/types.d.mts +1 -1
- package/esm/warlock-config/types.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.d.mts +1 -1
- package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.mjs +1 -1
- package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
- package/llms-full.txt +64 -4
- package/llms.txt +1 -0
- package/package.json +9 -33
- package/skills/lower-stage3-decorators/SKILL.md +54 -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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restful.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"restful.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/restful/restful.ts"],"mappings":";;;;;;;uBAOsB,OAAA,WAAkB,KAAA,aAAkB,aAAA;;;;YAI9C,UAAA,EAAY,iBAAA;;AAJxB;;YASY,UAAA;EAT4B;;;EAAA,UAc5B,eAAA;EAUU;;;EAAA,mBALD,UAAA,EAAY,iBAAA,CAAkB,CAAA;EA8BH;;;EAAA,UAzBpC,QAAA,EAAU,MAAA;EAyDyB;;;;;EA7CtC,KAAA;EAkHsB;;;EA7GhB,IAAA,CAAK,EAAA,WAAU,OAAA,CAAA,CAAA;EAyJmB;;;EAjJlC,IAAA,CAAK,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,QAAA,GAAQ,OAAA,CAAA,QAAA;EAoLN;;;EApJnC,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,QAAA,GAAQ,OAAA,CAAA,QAAA;EAqLD;;;EAhKvC,MAAA,CAAO,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,QAAA,GAAQ,OAAA;EAgNG;;;EAhK9C,MAAA,CAAO,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,QAAA,GAAQ,OAAA;EAuKD;;;EA3H1C,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,QAAA,GAAQ,OAAA,CAAA,QAAA;EAoI1C;;;EAjGA,MAAA,CAAO,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,QAAA,GAAQ,OAAA,CAAA,QAAA;EA4G5C;;;EA3EC,UAAA,CAAW,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,QAAA,GAAQ,OAAA,CAAA,QAAA;EA+EzD;;;EAAA,UA/Ba,YAAA,CAAa,QAAA,EAAU,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,CAAA,GAAI,OAAA;EAsCA;;;EAAA,UA/BlE,QAAA,CAAS,QAAA,EAAU,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,CAAA,GAAI,OAAA;EAsCA;;;EAAA,UA/B9D,YAAA,CACd,QAAA,EAAU,OAAA,EACV,SAAA,EAAW,QAAA,EACX,OAAA,EAAS,CAAA,EACT,UAAA,GAAa,CAAA,GACZ,OAAA;EAqCY;;;EAAA,UA9BC,QAAA,CACd,QAAA,EAAU,OAAA,EACV,SAAA,EAAW,QAAA,EACX,OAAA,EAAS,CAAA,EACT,UAAA,EAAY,CAAA,GACX,OAAA;EAoCQ;;;EAAA,UA7BK,YAAA,CAAa,QAAA,EAAU,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,CAAA,GAAI,OAAA;EAwCrE;;;EAAA,UAjCG,QAAA,CAAS,QAAA,EAAU,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,CAAA,GAAI,OAAA;EA4ClE;;;EAAA,UArCI,WAAA,CACd,QAAA,EAAU,OAAA,EACV,SAAA,EAAW,QAAA,EACX,OAAA,EAAS,CAAA,EACT,UAAA,GAAa,CAAA,GACZ,OAAA;EAoCA;;;EAAA,UA7Ba,OAAA,CACd,QAAA,EAAU,OAAA,EACV,SAAA,EAAW,QAAA,EACX,OAAA,EAAS,CAAA,EACT,UAAA,EAAY,CAAA,GACX,OAAA;EAoCY;;;EAAA,UA7BC,UAAA,CACd,QAAA,EAAU,OAAA,EACV,SAAA,EAAW,QAAA,EACX,OAAA,GAAU,CAAA,EACV,UAAA,GAAa,CAAA,GACZ,OAAA;EAvYkE;;;EAAA,UA8YrD,MAAA,CACd,QAAA,EAAU,OAAA,EACV,SAAA,EAAW,QAAA,EACX,OAAA,EAAS,CAAA,EACT,UAAA,GAAa,CAAA,GACZ,OAAA;EA/YO;;;;EAAA,UAuZM,cAAA,CACd,MAAA,UACA,OAAA,EAAS,OAAA,EACT,QAAA,EAAU,QAAA,EACV,OAAA,SAAa,OAAA,SAAA,MAAA,gBAAA,QAAA;AAAA"}
|
package/esm/restful/restful.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restful.mjs","names":[],"sources":["../../../../../../@warlock.js/core/src/restful/restful.ts"],"sourcesContent":["import type { GenericObject } from \"@mongez/reinforcements\";\nimport type { Model } from \"@warlock.js/cascade\";\nimport { log } from \"@warlock.js/logger\";\nimport type { Request, Response } from \"../http\";\nimport type { QueryBuilderContract, RepositoryManager } from \"../repositories\";\nimport type { RestfulMiddleware, RouteResource } from \"../router\";\n\nexport abstract class Restful<T extends Model> implements RouteResource {\n /**\n * Middleware for each method\n */\n protected middleware: RestfulMiddleware = {};\n\n /**\n * Record name\n */\n protected recordName = \"record\";\n\n /**\n * Records list name\n */\n protected recordsListName = \"records\";\n\n /**\n * Repository\n */\n protected abstract repository: RepositoryManager<T>;\n\n /**\n * Define what to be returned when a record is created|updated|deleted|patched\n */\n protected returnOn: Record<string, \"record\" | \"records\"> = {\n create: \"record\",\n update: \"record\",\n delete: \"record\",\n patch: \"record\",\n };\n\n /**\n * Enable fetching cache\n *\n * @default true\n */\n public cache = true;\n\n /**\n * Find record instance by id\n */\n public async find(id: number) {\n const findMethod = this.cache ? \"getCached\" : \"find\";\n return this.repository[findMethod](id);\n }\n\n /**\n * List records\n */\n public async list(request: Request, response: Response) {\n try {\n if (await this.callMiddleware(\"list\", request, response)) return;\n\n const responseDocument: GenericObject = {};\n\n const data = request.heavy();\n\n if (data.paginate === \"false\") {\n data.paginate = false;\n }\n\n const listMethod = this.cache ? \"listCached\" : \"list\";\n\n const { data: documents, pagination } = await this.repository[listMethod](data);\n\n responseDocument[this.recordsListName] = documents;\n\n if (pagination) {\n responseDocument.pagination = pagination;\n }\n\n return response.success(responseDocument);\n } catch (error: any) {\n log.error(\"restful\", \"list\", error);\n return response.serverError(error);\n }\n }\n\n /**\n * Get single record\n */\n public async get(request: Request, response: Response) {\n try {\n if (await this.callMiddleware(\"get\", request, response)) return;\n\n const record = await this.find(request.input(\"id\"));\n\n if (!record) {\n return response.notFound();\n }\n\n return response.success({\n [this.recordName]: record,\n });\n } catch (error) {\n log.error(\"restful\", \"get\", error);\n }\n }\n\n /**\n * Create a new record\n */\n public async create(request: Request, response: Response) {\n try {\n const model = this.repository.newModel();\n const beforeCreate = await this.beforeCreate(request, response, model);\n\n if (beforeCreate) {\n return beforeCreate;\n }\n\n const beforeSave = await this.beforeSave(request, response, model);\n\n if (beforeSave) {\n return beforeSave;\n }\n\n const record = await this.repository.create(request.all());\n\n const createOutput = await this.onCreate(request, response, record);\n\n if (createOutput) {\n return createOutput;\n }\n\n const saveOutput = await this.onSave(request, response, record);\n\n if (saveOutput) {\n return saveOutput;\n }\n\n if (this.returnOn.create === \"records\") {\n return this.list(request, response);\n }\n\n return response.successCreate({\n [this.recordName]: record,\n });\n } catch (error: Error | any) {\n log.error(\"restful\", \"create\", error);\n\n return response.badRequest({\n error: error.message,\n });\n }\n }\n\n /**\n * Update record\n */\n public async update(request: Request, response: Response) {\n try {\n // Find record\n const record = await this.find(request.input(\"id\"));\n\n if (!record) {\n return response.notFound({\n error: \"Record not found\",\n });\n }\n\n const beforeOutput = await this.beforeUpdate(request, response, record);\n if (beforeOutput) {\n return beforeOutput;\n }\n\n const beforeSafe = await this.beforeSave(request, response, record);\n\n if (beforeSafe) {\n return beforeSafe;\n }\n\n const oldRecord = record.clone();\n\n await record.save(request.allExceptParams());\n\n this.onUpdate(request, response, record, oldRecord);\n this.onSave(request, response, record, oldRecord);\n\n if (this.returnOn.update === \"records\") {\n return this.list(request, response);\n }\n\n return response.success({\n [this.recordName]: record,\n });\n } catch (error) {\n log.error(\"restful\", \"update\", error);\n }\n }\n\n /**\n * Patch record\n */\n public async patch(request: Request, response: Response) {\n try {\n const record = await this.find(request.input(\"id\"));\n\n if (!record) {\n return response.notFound({\n error: \"Record not found\",\n });\n }\n\n const oldRecord = record.clone();\n\n await this.beforePatch(request, response, record, oldRecord);\n await this.beforeSave(request, response, record, oldRecord);\n\n await record.save(request.heavyExceptParams());\n\n this.onPatch(request, response, record, oldRecord);\n this.onSave(request, response, record, oldRecord);\n\n if (this.returnOn.patch === \"records\") {\n return this.list(request, response);\n }\n\n return response.success({\n [this.recordName]: record,\n });\n } catch (error) {\n log.error(\"restful\", \"patch\", error);\n }\n }\n\n /**\n * Delete record\n */\n public async delete(request: Request, response: Response) {\n try {\n const record = await this.find(request.input(\"id\"));\n\n if (!record) {\n return response.notFound();\n }\n\n if (await this.callMiddleware(\"delete\", request, response, record)) return;\n\n await this.beforeDelete(request, response, record);\n\n await record.destroy();\n\n this.onDelete(request, response, record);\n\n if (this.returnOn.delete === \"records\") {\n return this.list(request, response);\n }\n\n return response.success();\n } catch (error: Error | any) {\n log.error(\"restful\", \"delete\", error);\n\n return response.badRequest({\n error: error.message,\n });\n }\n }\n\n /**\n * Bulk delete records\n */\n public async bulkDelete(request: Request, response: Response) {\n try {\n const ids = request.input(\"id\");\n\n if (!Array.isArray(ids)) {\n return response.badRequest({\n error: \"id must be an array\",\n });\n }\n\n const records = await this.repository.all({\n perform: (query: QueryBuilderContract<T>) =>\n query.whereIn(\n \"id\",\n ids.map((id) => parseInt(id)),\n ),\n });\n\n await Promise.all(\n records.map(async (record) => {\n if (await this.callMiddleware(\"delete\", request, response, record)) {\n return;\n }\n\n await this.beforeDelete(request, response, record);\n await record.destroy();\n this.onDelete(request, response, record);\n }),\n );\n\n if (this.returnOn.delete === \"records\") {\n return this.list(request, response);\n }\n\n return response.success({\n deleted: records.length,\n });\n } catch (error: Error | any) {\n log.error(\"restful\", \"bulkDelete\", error);\n return response.badRequest({\n error: error.message,\n });\n }\n }\n\n /**\n * Before create\n */\n protected async beforeCreate(_request: Request, _response: Response, _record: T): Promise<any> {\n //\n }\n\n /**\n * On create\n */\n protected async onCreate(_request: Request, _response: Response, _record: T): Promise<any> {\n //\n }\n\n /**\n * Before update\n */\n protected async beforeUpdate(\n _request: Request,\n _response: Response,\n _record: T,\n _oldRecord?: T,\n ): Promise<any> {\n //\n }\n\n /**\n * On update\n */\n protected async onUpdate(\n _request: Request,\n _response: Response,\n _record: T,\n _oldRecord: T,\n ): Promise<any> {\n //\n }\n\n /**\n * Before delete\n */\n protected async beforeDelete(_request: Request, _response: Response, _record: T): Promise<any> {\n //\n }\n\n /**\n * On delete\n */\n protected async onDelete(_request: Request, _response: Response, _record: T): Promise<any> {\n //\n }\n\n /**\n * Before patch\n */\n protected async beforePatch(\n _request: Request,\n _response: Response,\n _record: T,\n _oldRecord?: T,\n ): Promise<any> {\n //\n }\n\n /**\n * On patch\n */\n protected async onPatch(\n _request: Request,\n _response: Response,\n _record: T,\n _oldRecord: T,\n ): Promise<any> {\n //\n }\n\n /**\n * Before save\n */\n protected async beforeSave(\n _request: Request,\n _response: Response,\n _record?: T,\n _oldRecord?: T,\n ): Promise<any> {\n //\n }\n\n /**\n * On save\n */\n protected async onSave(\n _request: Request,\n _response: Response,\n _record: T,\n _oldRecord?: T,\n ): Promise<any> {\n //\n }\n\n /**\n * Call middleware for the given method\n *\n */\n protected async callMiddleware(\n method: string,\n request: Request,\n response: Response,\n _record?: any,\n ) {\n if (!this.middleware[method]) return;\n\n for (const middleware of this.middleware[method]) {\n const output = await middleware(request, response);\n\n if (output) {\n return output;\n }\n }\n\n return;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"restful.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/restful/restful.ts"],"sourcesContent":["import type { GenericObject } from \"@mongez/reinforcements\";\nimport type { Model } from \"@warlock.js/cascade\";\nimport { log } from \"@warlock.js/logger\";\nimport type { Request, Response } from \"../http\";\nimport type { QueryBuilderContract, RepositoryManager } from \"../repositories\";\nimport type { RestfulMiddleware, RouteResource } from \"../router\";\n\nexport abstract class Restful<T extends Model> implements RouteResource {\n /**\n * Middleware for each method\n */\n protected middleware: RestfulMiddleware = {};\n\n /**\n * Record name\n */\n protected recordName = \"record\";\n\n /**\n * Records list name\n */\n protected recordsListName = \"records\";\n\n /**\n * Repository\n */\n protected abstract repository: RepositoryManager<T>;\n\n /**\n * Define what to be returned when a record is created|updated|deleted|patched\n */\n protected returnOn: Record<string, \"record\" | \"records\"> = {\n create: \"record\",\n update: \"record\",\n delete: \"record\",\n patch: \"record\",\n };\n\n /**\n * Enable fetching cache\n *\n * @default true\n */\n public cache = true;\n\n /**\n * Find record instance by id\n */\n public async find(id: number) {\n const findMethod = this.cache ? \"getCached\" : \"find\";\n return this.repository[findMethod](id);\n }\n\n /**\n * List records\n */\n public async list(request: Request, response: Response) {\n try {\n if (await this.callMiddleware(\"list\", request, response)) return;\n\n const responseDocument: GenericObject = {};\n\n const data = request.heavy();\n\n if (data.paginate === \"false\") {\n data.paginate = false;\n }\n\n const listMethod = this.cache ? \"listCached\" : \"list\";\n\n const { data: documents, pagination } = await this.repository[listMethod](data);\n\n responseDocument[this.recordsListName] = documents;\n\n if (pagination) {\n responseDocument.pagination = pagination;\n }\n\n return response.success(responseDocument);\n } catch (error: any) {\n log.error(\"restful\", \"list\", error);\n return response.serverError(error);\n }\n }\n\n /**\n * Get single record\n */\n public async get(request: Request, response: Response) {\n try {\n if (await this.callMiddleware(\"get\", request, response)) return;\n\n const record = await this.find(request.input(\"id\"));\n\n if (!record) {\n return response.notFound();\n }\n\n return response.success({\n [this.recordName]: record,\n });\n } catch (error) {\n log.error(\"restful\", \"get\", error);\n }\n }\n\n /**\n * Create a new record\n */\n public async create(request: Request, response: Response) {\n try {\n const model = this.repository.newModel();\n const beforeCreate = await this.beforeCreate(request, response, model);\n\n if (beforeCreate) {\n return beforeCreate;\n }\n\n const beforeSave = await this.beforeSave(request, response, model);\n\n if (beforeSave) {\n return beforeSave;\n }\n\n const record = await this.repository.create(request.all());\n\n const createOutput = await this.onCreate(request, response, record);\n\n if (createOutput) {\n return createOutput;\n }\n\n const saveOutput = await this.onSave(request, response, record);\n\n if (saveOutput) {\n return saveOutput;\n }\n\n if (this.returnOn.create === \"records\") {\n return this.list(request, response);\n }\n\n return response.successCreate({\n [this.recordName]: record,\n });\n } catch (error: Error | any) {\n log.error(\"restful\", \"create\", error);\n\n return response.badRequest({\n error: error.message,\n });\n }\n }\n\n /**\n * Update record\n */\n public async update(request: Request, response: Response) {\n try {\n // Find record\n const record = await this.find(request.input(\"id\"));\n\n if (!record) {\n return response.notFound({\n error: \"Record not found\",\n });\n }\n\n const beforeOutput = await this.beforeUpdate(request, response, record);\n if (beforeOutput) {\n return beforeOutput;\n }\n\n const beforeSafe = await this.beforeSave(request, response, record);\n\n if (beforeSafe) {\n return beforeSafe;\n }\n\n const oldRecord = record.clone();\n\n await record.save(request.allExceptParams());\n\n this.onUpdate(request, response, record, oldRecord);\n this.onSave(request, response, record, oldRecord);\n\n if (this.returnOn.update === \"records\") {\n return this.list(request, response);\n }\n\n return response.success({\n [this.recordName]: record,\n });\n } catch (error) {\n log.error(\"restful\", \"update\", error);\n }\n }\n\n /**\n * Patch record\n */\n public async patch(request: Request, response: Response) {\n try {\n const record = await this.find(request.input(\"id\"));\n\n if (!record) {\n return response.notFound({\n error: \"Record not found\",\n });\n }\n\n const oldRecord = record.clone();\n\n await this.beforePatch(request, response, record, oldRecord);\n await this.beforeSave(request, response, record, oldRecord);\n\n await record.save(request.heavyExceptParams());\n\n this.onPatch(request, response, record, oldRecord);\n this.onSave(request, response, record, oldRecord);\n\n if (this.returnOn.patch === \"records\") {\n return this.list(request, response);\n }\n\n return response.success({\n [this.recordName]: record,\n });\n } catch (error) {\n log.error(\"restful\", \"patch\", error);\n }\n }\n\n /**\n * Delete record\n */\n public async delete(request: Request, response: Response) {\n try {\n const record = await this.find(request.input(\"id\"));\n\n if (!record) {\n return response.notFound();\n }\n\n if (await this.callMiddleware(\"delete\", request, response, record)) return;\n\n await this.beforeDelete(request, response, record);\n\n await record.destroy();\n\n this.onDelete(request, response, record);\n\n if (this.returnOn.delete === \"records\") {\n return this.list(request, response);\n }\n\n return response.success();\n } catch (error: Error | any) {\n log.error(\"restful\", \"delete\", error);\n\n return response.badRequest({\n error: error.message,\n });\n }\n }\n\n /**\n * Bulk delete records\n */\n public async bulkDelete(request: Request, response: Response) {\n try {\n const ids = request.input(\"id\");\n\n if (!Array.isArray(ids)) {\n return response.badRequest({\n error: \"id must be an array\",\n });\n }\n\n const records = await this.repository.all({\n perform: (query: QueryBuilderContract<T>) =>\n query.whereIn(\n \"id\",\n ids.map((id) => parseInt(id)),\n ),\n });\n\n await Promise.all(\n records.map(async (record) => {\n if (await this.callMiddleware(\"delete\", request, response, record)) {\n return;\n }\n\n await this.beforeDelete(request, response, record);\n await record.destroy();\n this.onDelete(request, response, record);\n }),\n );\n\n if (this.returnOn.delete === \"records\") {\n return this.list(request, response);\n }\n\n return response.success({\n deleted: records.length,\n });\n } catch (error: Error | any) {\n log.error(\"restful\", \"bulkDelete\", error);\n return response.badRequest({\n error: error.message,\n });\n }\n }\n\n /**\n * Before create\n */\n protected async beforeCreate(_request: Request, _response: Response, _record: T): Promise<any> {\n //\n }\n\n /**\n * On create\n */\n protected async onCreate(_request: Request, _response: Response, _record: T): Promise<any> {\n //\n }\n\n /**\n * Before update\n */\n protected async beforeUpdate(\n _request: Request,\n _response: Response,\n _record: T,\n _oldRecord?: T,\n ): Promise<any> {\n //\n }\n\n /**\n * On update\n */\n protected async onUpdate(\n _request: Request,\n _response: Response,\n _record: T,\n _oldRecord: T,\n ): Promise<any> {\n //\n }\n\n /**\n * Before delete\n */\n protected async beforeDelete(_request: Request, _response: Response, _record: T): Promise<any> {\n //\n }\n\n /**\n * On delete\n */\n protected async onDelete(_request: Request, _response: Response, _record: T): Promise<any> {\n //\n }\n\n /**\n * Before patch\n */\n protected async beforePatch(\n _request: Request,\n _response: Response,\n _record: T,\n _oldRecord?: T,\n ): Promise<any> {\n //\n }\n\n /**\n * On patch\n */\n protected async onPatch(\n _request: Request,\n _response: Response,\n _record: T,\n _oldRecord: T,\n ): Promise<any> {\n //\n }\n\n /**\n * Before save\n */\n protected async beforeSave(\n _request: Request,\n _response: Response,\n _record?: T,\n _oldRecord?: T,\n ): Promise<any> {\n //\n }\n\n /**\n * On save\n */\n protected async onSave(\n _request: Request,\n _response: Response,\n _record: T,\n _oldRecord?: T,\n ): Promise<any> {\n //\n }\n\n /**\n * Call middleware for the given method\n *\n */\n protected async callMiddleware(\n method: string,\n request: Request,\n response: Response,\n _record?: any,\n ) {\n if (!this.middleware[method]) return;\n\n for (const middleware of this.middleware[method]) {\n const output = await middleware(request, response);\n\n if (output) {\n return output;\n }\n }\n\n return;\n }\n}\n"],"mappings":";;;AAOA,IAAsB,UAAtB,MAAwE;;oBAI5B,CAAC;oBAKpB;yBAKK;kBAU+B;GACzD,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,OAAO;EACT;eAOe;;;;;CAKf,MAAa,KAAK,IAAY;EAC5B,MAAM,aAAa,KAAK,QAAQ,cAAc;EAC9C,OAAO,KAAK,WAAW,WAAW,CAAC,EAAE;CACvC;;;;CAKA,MAAa,KAAK,SAAkB,UAAoB;EACtD,IAAI;GACF,IAAI,MAAM,KAAK,eAAe,QAAQ,SAAS,QAAQ,GAAG;GAE1D,MAAM,mBAAkC,CAAC;GAEzC,MAAM,OAAO,QAAQ,MAAM;GAE3B,IAAI,KAAK,aAAa,SACpB,KAAK,WAAW;GAGlB,MAAM,aAAa,KAAK,QAAQ,eAAe;GAE/C,MAAM,EAAE,MAAM,WAAW,eAAe,MAAM,KAAK,WAAW,WAAW,CAAC,IAAI;GAE9E,iBAAiB,KAAK,mBAAmB;GAEzC,IAAI,YACF,iBAAiB,aAAa;GAGhC,OAAO,SAAS,QAAQ,gBAAgB;EAC1C,SAAS,OAAY;GACnB,IAAI,MAAM,WAAW,QAAQ,KAAK;GAClC,OAAO,SAAS,YAAY,KAAK;EACnC;CACF;;;;CAKA,MAAa,IAAI,SAAkB,UAAoB;EACrD,IAAI;GACF,IAAI,MAAM,KAAK,eAAe,OAAO,SAAS,QAAQ,GAAG;GAEzD,MAAM,SAAS,MAAM,KAAK,KAAK,QAAQ,MAAM,IAAI,CAAC;GAElD,IAAI,CAAC,QACH,OAAO,SAAS,SAAS;GAG3B,OAAO,SAAS,QAAQ,GACrB,KAAK,aAAa,OACrB,CAAC;EACH,SAAS,OAAO;GACd,IAAI,MAAM,WAAW,OAAO,KAAK;EACnC;CACF;;;;CAKA,MAAa,OAAO,SAAkB,UAAoB;EACxD,IAAI;GACF,MAAM,QAAQ,KAAK,WAAW,SAAS;GACvC,MAAM,eAAe,MAAM,KAAK,aAAa,SAAS,UAAU,KAAK;GAErE,IAAI,cACF,OAAO;GAGT,MAAM,aAAa,MAAM,KAAK,WAAW,SAAS,UAAU,KAAK;GAEjE,IAAI,YACF,OAAO;GAGT,MAAM,SAAS,MAAM,KAAK,WAAW,OAAO,QAAQ,IAAI,CAAC;GAEzD,MAAM,eAAe,MAAM,KAAK,SAAS,SAAS,UAAU,MAAM;GAElE,IAAI,cACF,OAAO;GAGT,MAAM,aAAa,MAAM,KAAK,OAAO,SAAS,UAAU,MAAM;GAE9D,IAAI,YACF,OAAO;GAGT,IAAI,KAAK,SAAS,WAAW,WAC3B,OAAO,KAAK,KAAK,SAAS,QAAQ;GAGpC,OAAO,SAAS,cAAc,GAC3B,KAAK,aAAa,OACrB,CAAC;EACH,SAAS,OAAoB;GAC3B,IAAI,MAAM,WAAW,UAAU,KAAK;GAEpC,OAAO,SAAS,WAAW,EACzB,OAAO,MAAM,QACf,CAAC;EACH;CACF;;;;CAKA,MAAa,OAAO,SAAkB,UAAoB;EACxD,IAAI;GAEF,MAAM,SAAS,MAAM,KAAK,KAAK,QAAQ,MAAM,IAAI,CAAC;GAElD,IAAI,CAAC,QACH,OAAO,SAAS,SAAS,EACvB,OAAO,mBACT,CAAC;GAGH,MAAM,eAAe,MAAM,KAAK,aAAa,SAAS,UAAU,MAAM;GACtE,IAAI,cACF,OAAO;GAGT,MAAM,aAAa,MAAM,KAAK,WAAW,SAAS,UAAU,MAAM;GAElE,IAAI,YACF,OAAO;GAGT,MAAM,YAAY,OAAO,MAAM;GAE/B,MAAM,OAAO,KAAK,QAAQ,gBAAgB,CAAC;GAE3C,KAAK,SAAS,SAAS,UAAU,QAAQ,SAAS;GAClD,KAAK,OAAO,SAAS,UAAU,QAAQ,SAAS;GAEhD,IAAI,KAAK,SAAS,WAAW,WAC3B,OAAO,KAAK,KAAK,SAAS,QAAQ;GAGpC,OAAO,SAAS,QAAQ,GACrB,KAAK,aAAa,OACrB,CAAC;EACH,SAAS,OAAO;GACd,IAAI,MAAM,WAAW,UAAU,KAAK;EACtC;CACF;;;;CAKA,MAAa,MAAM,SAAkB,UAAoB;EACvD,IAAI;GACF,MAAM,SAAS,MAAM,KAAK,KAAK,QAAQ,MAAM,IAAI,CAAC;GAElD,IAAI,CAAC,QACH,OAAO,SAAS,SAAS,EACvB,OAAO,mBACT,CAAC;GAGH,MAAM,YAAY,OAAO,MAAM;GAE/B,MAAM,KAAK,YAAY,SAAS,UAAU,QAAQ,SAAS;GAC3D,MAAM,KAAK,WAAW,SAAS,UAAU,QAAQ,SAAS;GAE1D,MAAM,OAAO,KAAK,QAAQ,kBAAkB,CAAC;GAE7C,KAAK,QAAQ,SAAS,UAAU,QAAQ,SAAS;GACjD,KAAK,OAAO,SAAS,UAAU,QAAQ,SAAS;GAEhD,IAAI,KAAK,SAAS,UAAU,WAC1B,OAAO,KAAK,KAAK,SAAS,QAAQ;GAGpC,OAAO,SAAS,QAAQ,GACrB,KAAK,aAAa,OACrB,CAAC;EACH,SAAS,OAAO;GACd,IAAI,MAAM,WAAW,SAAS,KAAK;EACrC;CACF;;;;CAKA,MAAa,OAAO,SAAkB,UAAoB;EACxD,IAAI;GACF,MAAM,SAAS,MAAM,KAAK,KAAK,QAAQ,MAAM,IAAI,CAAC;GAElD,IAAI,CAAC,QACH,OAAO,SAAS,SAAS;GAG3B,IAAI,MAAM,KAAK,eAAe,UAAU,SAAS,UAAU,MAAM,GAAG;GAEpE,MAAM,KAAK,aAAa,SAAS,UAAU,MAAM;GAEjD,MAAM,OAAO,QAAQ;GAErB,KAAK,SAAS,SAAS,UAAU,MAAM;GAEvC,IAAI,KAAK,SAAS,WAAW,WAC3B,OAAO,KAAK,KAAK,SAAS,QAAQ;GAGpC,OAAO,SAAS,QAAQ;EAC1B,SAAS,OAAoB;GAC3B,IAAI,MAAM,WAAW,UAAU,KAAK;GAEpC,OAAO,SAAS,WAAW,EACzB,OAAO,MAAM,QACf,CAAC;EACH;CACF;;;;CAKA,MAAa,WAAW,SAAkB,UAAoB;EAC5D,IAAI;GACF,MAAM,MAAM,QAAQ,MAAM,IAAI;GAE9B,IAAI,CAAC,MAAM,QAAQ,GAAG,GACpB,OAAO,SAAS,WAAW,EACzB,OAAO,sBACT,CAAC;GAGH,MAAM,UAAU,MAAM,KAAK,WAAW,IAAI,EACxC,UAAU,UACR,MAAM,QACJ,MACA,IAAI,KAAK,OAAO,SAAS,EAAE,CAAC,CAC9B,EACJ,CAAC;GAED,MAAM,QAAQ,IACZ,QAAQ,IAAI,OAAO,WAAW;IAC5B,IAAI,MAAM,KAAK,eAAe,UAAU,SAAS,UAAU,MAAM,GAC/D;IAGF,MAAM,KAAK,aAAa,SAAS,UAAU,MAAM;IACjD,MAAM,OAAO,QAAQ;IACrB,KAAK,SAAS,SAAS,UAAU,MAAM;GACzC,CAAC,CACH;GAEA,IAAI,KAAK,SAAS,WAAW,WAC3B,OAAO,KAAK,KAAK,SAAS,QAAQ;GAGpC,OAAO,SAAS,QAAQ,EACtB,SAAS,QAAQ,OACnB,CAAC;EACH,SAAS,OAAoB;GAC3B,IAAI,MAAM,WAAW,cAAc,KAAK;GACxC,OAAO,SAAS,WAAW,EACzB,OAAO,MAAM,QACf,CAAC;EACH;CACF;;;;CAKA,MAAgB,aAAa,UAAmB,WAAqB,SAA0B,CAE/F;;;;CAKA,MAAgB,SAAS,UAAmB,WAAqB,SAA0B,CAE3F;;;;CAKA,MAAgB,aACd,UACA,WACA,SACA,YACc,CAEhB;;;;CAKA,MAAgB,SACd,UACA,WACA,SACA,YACc,CAEhB;;;;CAKA,MAAgB,aAAa,UAAmB,WAAqB,SAA0B,CAE/F;;;;CAKA,MAAgB,SAAS,UAAmB,WAAqB,SAA0B,CAE3F;;;;CAKA,MAAgB,YACd,UACA,WACA,SACA,YACc,CAEhB;;;;CAKA,MAAgB,QACd,UACA,WACA,SACA,YACc,CAEhB;;;;CAKA,MAAgB,WACd,UACA,WACA,SACA,YACc,CAEhB;;;;CAKA,MAAgB,OACd,UACA,WACA,SACA,YACc,CAEhB;;;;;CAMA,MAAgB,eACd,QACA,SACA,UACA,SACA;EACA,IAAI,CAAC,KAAK,WAAW,SAAS;EAE9B,KAAK,MAAM,cAAc,KAAK,WAAW,SAAS;GAChD,MAAM,SAAS,MAAM,WAAW,SAAS,QAAQ;GAEjD,IAAI,QACF,OAAO;EAEX;CAGF;AACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { RequestHandlerType, RouteOptions } from "./types.mjs";
|
|
2
2
|
import { Router } from "./router.mjs";
|
|
3
3
|
|
|
4
|
-
//#region
|
|
4
|
+
//#region ../@warlock.js/core/src/router/route-builder.d.ts
|
|
5
5
|
declare class RouteBuilder {
|
|
6
6
|
private readonly router;
|
|
7
7
|
private readonly path;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-builder.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"route-builder.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/router/route-builder.ts"],"mappings":";;;;cAIa,YAAA;EAAA,iBAYQ,MAAA;EAAA,iBACA,IAAA;EAAA,iBACA,WAAA;EAAA,UAbT,WAAA;;;;;;;;;cAWS,MAAA,EAAQ,MAAA,EACR,IAAA,UACA,WAAA,GAAa,YAAA;EA4CqB;;;EApC9C,GAAA,CAAI,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EAyDM;;;;EA3ChD,MAAA,CAAO,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EAwE7B;;;EAhEhB,IAAA,CAAK,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EA0F7B;;;;EA5Ed,OAAA,CAAQ,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EA4FH;;;EApF3C,GAAA,CAAI,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EAoGI;;;EAvF9C,SAAA,CAAU,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EA8H1C;;;EAtHN,KAAA,CAAM,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EA0HvC;;;EA7GL,QAAA,CAAS,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EA6HN;;;EArHzC,MAAA,CAAO,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EA9FjC;;;EA2GZ,SAAA,CAAU,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;;;;;EAahD,IAAA,CAAK,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;;;;;EAQ3C,MAAA,CAAO,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EAhIjC;;;;EAwIZ,IAAA,CAAK,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EAhIV;;;;EAwIjC,MAAA,CAAO,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EA1HT;;;;EAkIpC,OAAA,CAAQ,OAAA,EAAS,kBAAA,EAAoB,OAAA,GAAS,YAAA;EA1HZ;;;;;;;;;;EA4IlC,IAAA,CAAK,IAAA,UAAc,OAAA,GAAS,YAAA,GAAoB,YAAA;EAzGhD;;;;;;;;;;;;EA2HA,IAAA,CACL,QAAA;IACE,IAAA,GAAO,kBAAA;IACP,MAAA,GAAS,kBAAA;IACT,IAAA,GAAO,kBAAA;IACP,MAAA,GAAS,kBAAA;IACT,OAAA,GAAU,kBAAA;IACV,KAAA,GAAQ,kBAAA;EAAA,GAEV,OAAA,GAAS,YAAA;EA1FJ;;;EAAA,UAwGG,WAAA,CAAY,OAAA,GAAS,YAAA,GAAiB,YAAA;AAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { merge } from "@mongez/reinforcements";
|
|
2
2
|
|
|
3
|
-
//#region
|
|
3
|
+
//#region ../@warlock.js/core/src/router/route-builder.ts
|
|
4
4
|
var RouteBuilder = class RouteBuilder {
|
|
5
5
|
constructor(router, path, moreOptions = {}) {
|
|
6
6
|
this.router = router;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-builder.mjs","names":[],"sources":["../../../../../../@warlock.js/core/src/router/route-builder.ts"],"sourcesContent":["import { merge } from \"@mongez/reinforcements\";\nimport { type Router } from \"./router\";\nimport type { RequestHandlerType, RouteOptions } from \"./types\";\n\nexport class RouteBuilder {\n protected addedRoutes = {\n get: false,\n post: false,\n put: false,\n delete: false,\n patch: false,\n options: false,\n head: false,\n };\n\n public constructor(\n private readonly router: Router,\n private readonly path: string,\n private readonly moreOptions: RouteOptions = {},\n ) {\n //\n }\n\n /**\n * Add a get method to the route\n */\n public get(handler: RequestHandlerType, options: RouteOptions = {}) {\n if (this.addedRoutes.get) {\n throw new Error(`Route ${this.path} already has a GET method`);\n }\n\n this.addedRoutes.get = true;\n this.router.get(this.path, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Get one resource, appends /:id to the path\n * For example: /posts/:id\n */\n public getOne(handler: RequestHandlerType, options: RouteOptions = {}) {\n this.router.get(`${this.path}/:id`, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Add a post method to the route\n */\n public post(handler: RequestHandlerType, options: RouteOptions = {}) {\n if (this.addedRoutes.post) {\n throw new Error(`Route ${this.path} already has a POST method`);\n }\n\n this.addedRoutes.post = true;\n this.router.post(this.path, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Post one resource, appends /:id to the path\n * For example: /posts/:id\n */\n public postOne(handler: RequestHandlerType, options: RouteOptions = {}) {\n this.router.post(`${this.path}/:id`, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Add a PUT request handler for current path\n */\n public put(handler: RequestHandlerType, options: RouteOptions = {}) {\n if (this.addedRoutes.put) {\n throw new Error(`Route ${this.path} already has a PUT method`);\n }\n\n this.addedRoutes.put = true;\n this.router.put(this.path, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Update one resource, appends /:id to the path\n */\n public updateOne(handler: RequestHandlerType, options: RouteOptions = {}) {\n this.router.put(`${this.path}/:id`, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Add a PATCH request handler for current path\n */\n public patch(handler: RequestHandlerType, options: RouteOptions = {}) {\n if (this.addedRoutes.patch) {\n throw new Error(`Route ${this.path} already has a PATCH method`);\n }\n\n this.addedRoutes.patch = true;\n this.router.patch(this.path, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Patch one resource, appends /:id to the path\n */\n public patchOne(handler: RequestHandlerType, options: RouteOptions = {}) {\n this.router.patch(`${this.path}/:id`, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Add a DELETE request handler for current path\n */\n public delete(handler: RequestHandlerType, options: RouteOptions = {}) {\n if (this.addedRoutes.delete) {\n throw new Error(`Route ${this.path} already has a DELETE method`);\n }\n\n this.addedRoutes.delete = true;\n this.router.delete(this.path, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Delete one resource, appends /:id to the path\n */\n public deleteOne(handler: RequestHandlerType, options: RouteOptions = {}) {\n this.router.delete(`${this.path}/:id`, handler, this.withOptions(options));\n return this;\n }\n\n // ============================================================================\n // RESTful Semantic Aliases\n // ============================================================================\n\n /**\n * List all resources (RESTful alias for GET collection)\n * @example router.route(\"/posts\").list(listPosts)\n */\n public list(handler: RequestHandlerType, options: RouteOptions = {}) {\n return this.get(handler, options);\n }\n\n /**\n * Create a new resource (RESTful alias for POST)\n * @example router.route(\"/posts\").create(createPost)\n */\n public create(handler: RequestHandlerType, options: RouteOptions = {}) {\n return this.post(handler, options);\n }\n\n /**\n * Show a single resource (RESTful alias for GET one)\n * @example router.route(\"/posts\").show(showPost) // GET /posts/:id\n */\n public show(handler: RequestHandlerType, options: RouteOptions = {}) {\n return this.getOne(handler, options);\n }\n\n /**\n * Update a resource (RESTful alias for PUT one)\n * @example router.route(\"/posts\").update(updatePost) // PUT /posts/:id\n */\n public update(handler: RequestHandlerType, options: RouteOptions = {}) {\n return this.updateOne(handler, options);\n }\n\n /**\n * Destroy a resource (RESTful alias for DELETE one)\n * @example router.route(\"/posts\").destroy(deletePost) // DELETE /posts/:id\n */\n public destroy(handler: RequestHandlerType, options: RouteOptions = {}) {\n return this.deleteOne(handler, options);\n }\n\n // ============================================================================\n // Route Nesting\n // ============================================================================\n\n /**\n * Create a nested route builder\n * Useful for building nested resources like /posts/:id/comments\n * @example\n * router.route(\"/posts/:id\")\n * .getOne(showPost)\n * .nest(\"/comments\")\n * .list(listComments) // GET /posts/:id/comments\n * .create(createComment); // POST /posts/:id/comments\n */\n public nest(path: string, options: RouteOptions = {}): RouteBuilder {\n const nestedPath = `${this.path}${path}`;\n const mergedOptions = this.withOptions(options);\n return new RouteBuilder(this.router, nestedPath, mergedOptions);\n }\n\n /**\n * Set up common RESTful CRUD routes in one call\n * @example\n * router.route(\"/posts\").crud({\n * list: listPosts, // GET /posts\n * create: createPost, // POST /posts\n * show: showPost, // GET /posts/:id\n * update: updatePost, // PUT /posts/:id\n * destroy: deletePost, // DELETE /posts/:id\n * patch: patchPost, // PATCH /posts/:id\n * });\n */\n public crud(\n handlers: {\n list?: RequestHandlerType;\n create?: RequestHandlerType;\n show?: RequestHandlerType;\n update?: RequestHandlerType;\n destroy?: RequestHandlerType;\n patch?: RequestHandlerType;\n },\n options: RouteOptions = {},\n ) {\n if (handlers.list) this.get(handlers.list, options);\n if (handlers.create) this.post(handlers.create, options);\n if (handlers.show) this.getOne(handlers.show, options);\n if (handlers.update) this.updateOne(handlers.update, options);\n if (handlers.destroy) this.deleteOne(handlers.destroy, options);\n if (handlers.patch) this.patchOne(handlers.patch, options);\n return this;\n }\n\n /**\n * Merge options with moreOptions\n */\n protected withOptions(options: RouteOptions = {}) {\n return merge(this.moreOptions, options);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"route-builder.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/router/route-builder.ts"],"sourcesContent":["import { merge } from \"@mongez/reinforcements\";\nimport { type Router } from \"./router\";\nimport type { RequestHandlerType, RouteOptions } from \"./types\";\n\nexport class RouteBuilder {\n protected addedRoutes = {\n get: false,\n post: false,\n put: false,\n delete: false,\n patch: false,\n options: false,\n head: false,\n };\n\n public constructor(\n private readonly router: Router,\n private readonly path: string,\n private readonly moreOptions: RouteOptions = {},\n ) {\n //\n }\n\n /**\n * Add a get method to the route\n */\n public get(handler: RequestHandlerType, options: RouteOptions = {}) {\n if (this.addedRoutes.get) {\n throw new Error(`Route ${this.path} already has a GET method`);\n }\n\n this.addedRoutes.get = true;\n this.router.get(this.path, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Get one resource, appends /:id to the path\n * For example: /posts/:id\n */\n public getOne(handler: RequestHandlerType, options: RouteOptions = {}) {\n this.router.get(`${this.path}/:id`, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Add a post method to the route\n */\n public post(handler: RequestHandlerType, options: RouteOptions = {}) {\n if (this.addedRoutes.post) {\n throw new Error(`Route ${this.path} already has a POST method`);\n }\n\n this.addedRoutes.post = true;\n this.router.post(this.path, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Post one resource, appends /:id to the path\n * For example: /posts/:id\n */\n public postOne(handler: RequestHandlerType, options: RouteOptions = {}) {\n this.router.post(`${this.path}/:id`, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Add a PUT request handler for current path\n */\n public put(handler: RequestHandlerType, options: RouteOptions = {}) {\n if (this.addedRoutes.put) {\n throw new Error(`Route ${this.path} already has a PUT method`);\n }\n\n this.addedRoutes.put = true;\n this.router.put(this.path, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Update one resource, appends /:id to the path\n */\n public updateOne(handler: RequestHandlerType, options: RouteOptions = {}) {\n this.router.put(`${this.path}/:id`, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Add a PATCH request handler for current path\n */\n public patch(handler: RequestHandlerType, options: RouteOptions = {}) {\n if (this.addedRoutes.patch) {\n throw new Error(`Route ${this.path} already has a PATCH method`);\n }\n\n this.addedRoutes.patch = true;\n this.router.patch(this.path, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Patch one resource, appends /:id to the path\n */\n public patchOne(handler: RequestHandlerType, options: RouteOptions = {}) {\n this.router.patch(`${this.path}/:id`, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Add a DELETE request handler for current path\n */\n public delete(handler: RequestHandlerType, options: RouteOptions = {}) {\n if (this.addedRoutes.delete) {\n throw new Error(`Route ${this.path} already has a DELETE method`);\n }\n\n this.addedRoutes.delete = true;\n this.router.delete(this.path, handler, this.withOptions(options));\n return this;\n }\n\n /**\n * Delete one resource, appends /:id to the path\n */\n public deleteOne(handler: RequestHandlerType, options: RouteOptions = {}) {\n this.router.delete(`${this.path}/:id`, handler, this.withOptions(options));\n return this;\n }\n\n // ============================================================================\n // RESTful Semantic Aliases\n // ============================================================================\n\n /**\n * List all resources (RESTful alias for GET collection)\n * @example router.route(\"/posts\").list(listPosts)\n */\n public list(handler: RequestHandlerType, options: RouteOptions = {}) {\n return this.get(handler, options);\n }\n\n /**\n * Create a new resource (RESTful alias for POST)\n * @example router.route(\"/posts\").create(createPost)\n */\n public create(handler: RequestHandlerType, options: RouteOptions = {}) {\n return this.post(handler, options);\n }\n\n /**\n * Show a single resource (RESTful alias for GET one)\n * @example router.route(\"/posts\").show(showPost) // GET /posts/:id\n */\n public show(handler: RequestHandlerType, options: RouteOptions = {}) {\n return this.getOne(handler, options);\n }\n\n /**\n * Update a resource (RESTful alias for PUT one)\n * @example router.route(\"/posts\").update(updatePost) // PUT /posts/:id\n */\n public update(handler: RequestHandlerType, options: RouteOptions = {}) {\n return this.updateOne(handler, options);\n }\n\n /**\n * Destroy a resource (RESTful alias for DELETE one)\n * @example router.route(\"/posts\").destroy(deletePost) // DELETE /posts/:id\n */\n public destroy(handler: RequestHandlerType, options: RouteOptions = {}) {\n return this.deleteOne(handler, options);\n }\n\n // ============================================================================\n // Route Nesting\n // ============================================================================\n\n /**\n * Create a nested route builder\n * Useful for building nested resources like /posts/:id/comments\n * @example\n * router.route(\"/posts/:id\")\n * .getOne(showPost)\n * .nest(\"/comments\")\n * .list(listComments) // GET /posts/:id/comments\n * .create(createComment); // POST /posts/:id/comments\n */\n public nest(path: string, options: RouteOptions = {}): RouteBuilder {\n const nestedPath = `${this.path}${path}`;\n const mergedOptions = this.withOptions(options);\n return new RouteBuilder(this.router, nestedPath, mergedOptions);\n }\n\n /**\n * Set up common RESTful CRUD routes in one call\n * @example\n * router.route(\"/posts\").crud({\n * list: listPosts, // GET /posts\n * create: createPost, // POST /posts\n * show: showPost, // GET /posts/:id\n * update: updatePost, // PUT /posts/:id\n * destroy: deletePost, // DELETE /posts/:id\n * patch: patchPost, // PATCH /posts/:id\n * });\n */\n public crud(\n handlers: {\n list?: RequestHandlerType;\n create?: RequestHandlerType;\n show?: RequestHandlerType;\n update?: RequestHandlerType;\n destroy?: RequestHandlerType;\n patch?: RequestHandlerType;\n },\n options: RouteOptions = {},\n ) {\n if (handlers.list) this.get(handlers.list, options);\n if (handlers.create) this.post(handlers.create, options);\n if (handlers.show) this.getOne(handlers.show, options);\n if (handlers.update) this.updateOne(handlers.update, options);\n if (handlers.destroy) this.deleteOne(handlers.destroy, options);\n if (handlers.patch) this.patchOne(handlers.patch, options);\n return this;\n }\n\n /**\n * Merge options with moreOptions\n */\n protected withOptions(options: RouteOptions = {}) {\n return merge(this.moreOptions, options);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-registry.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"route-registry.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/router/route-registry.ts"],"sourcesContent":["import FindMyWay, { type HTTPMethod, type Instance } from \"find-my-way\";\nimport type { Route } from \"./types\";\n\n/**\n * Route Registry\n * Manages dynamic route matching using find-my-way for HMR support\n */\nexport class RouteRegistry {\n private router: Instance<any>;\n\n public constructor() {\n this.router = FindMyWay({\n ignoreTrailingSlash: true,\n caseSensitive: false,\n });\n }\n\n /**\n * Register all routes from the router's internal list\n */\n public register(routes: Route[]): void {\n // Register each route\n for (const route of routes) {\n if (route.method === \"all\") {\n this.registerRoute({\n ...route,\n method: \"GET\",\n });\n\n this.registerRoute({\n ...route,\n method: \"POST\",\n });\n } else {\n this.registerRoute(route);\n }\n }\n }\n\n /**\n * Register a single route\n */\n public registerRoute(route: Route): void {\n this.router.on(route.method as HTTPMethod, route.path, (req, res, params) => {\n // Store the route and params for later use\n return { route, params };\n });\n }\n\n /**\n * Find a matching route for the given method and URL\n * @returns Matched route with extracted params, or null if no match\n */\n public find(\n method: string,\n url: string,\n ): { route: Route; params: Record<string, string> } | null {\n // Strip query string from URL (find-my-way expects just the path)\n const path = url.split(\"?\")[0];\n\n const match = this.router.find(method as HTTPMethod, path);\n\n if (!match) {\n return null;\n }\n\n // find-my-way handler expects (req, res, params, store, searchParams)\n // We only care about the return value which contains { route, params }\n return match.handler(null as any, null as any, match.params, match.store, {});\n }\n\n /**\n * Get all registered routes count (for debugging)\n */\n public getRouteCount(): number {\n return this.router\n .prettyPrint()\n .split(\"\\n\")\n .filter((line) => line.trim()).length;\n }\n}\n"],"mappings":";;;;;;;AAOA,IAAa,gBAAb,MAA2B;CAGzB,AAAO,cAAc;EACnB,KAAK,SAAS,UAAU;GACtB,qBAAqB;GACrB,eAAe;EACjB,CAAC;CACH;;;;CAKA,AAAO,SAAS,QAAuB;EAErC,KAAK,MAAM,SAAS,QAClB,IAAI,MAAM,WAAW,OAAO;GAC1B,KAAK,cAAc;IACjB,GAAG;IACH,QAAQ;GACV,CAAC;GAED,KAAK,cAAc;IACjB,GAAG;IACH,QAAQ;GACV,CAAC;EACH,OACE,KAAK,cAAc,KAAK;CAG9B;;;;CAKA,AAAO,cAAc,OAAoB;EACvC,KAAK,OAAO,GAAG,MAAM,QAAsB,MAAM,OAAO,KAAK,KAAK,WAAW;GAE3E,OAAO;IAAE;IAAO;GAAO;EACzB,CAAC;CACH;;;;;CAMA,AAAO,KACL,QACA,KACyD;EAEzD,MAAM,OAAO,IAAI,MAAM,GAAG,CAAC,CAAC;EAE5B,MAAM,QAAQ,KAAK,OAAO,KAAK,QAAsB,IAAI;EAEzD,IAAI,CAAC,OACH,OAAO;EAKT,OAAO,MAAM,QAAQ,MAAa,MAAa,MAAM,QAAQ,MAAM,OAAO,CAAC,CAAC;CAC9E;;;;CAKA,AAAO,gBAAwB;EAC7B,OAAO,KAAK,OACT,YAAY,CAAC,CACb,MAAM,IAAI,CAAC,CACX,QAAQ,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC;CACnC;AACF"}
|
package/esm/router/router.d.mts
CHANGED
|
@@ -4,7 +4,7 @@ import { RouteBuilder } from "./route-builder.mjs";
|
|
|
4
4
|
import { FastifyHttpProxyOptions } from "@fastify/http-proxy";
|
|
5
5
|
import { FastifyStaticOptions } from "@fastify/static";
|
|
6
6
|
|
|
7
|
-
//#region
|
|
7
|
+
//#region ../@warlock.js/core/src/router/router.d.ts
|
|
8
8
|
declare class Router {
|
|
9
9
|
/**
|
|
10
10
|
* Routes list
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"router.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/router/router.ts"],"mappings":"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"}
|
package/esm/router/router.mjs
CHANGED
|
@@ -10,7 +10,7 @@ import proxy from "@fastify/http-proxy";
|
|
|
10
10
|
import fastifyStatic from "@fastify/static";
|
|
11
11
|
import concatRoute from "@mongez/concat-route";
|
|
12
12
|
|
|
13
|
-
//#region
|
|
13
|
+
//#region ../@warlock.js/core/src/router/router.ts
|
|
14
14
|
var Router = class Router {
|
|
15
15
|
/**
|
|
16
16
|
* Get router instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.mjs","names":[],"sources":["../../../../../../@warlock.js/core/src/router/router.ts"],"sourcesContent":["import proxy, { type FastifyHttpProxyOptions } from \"@fastify/http-proxy\";\r\nimport fastifyStatic, { type FastifyStaticOptions } from \"@fastify/static\";\r\nimport concatRoute from \"@mongez/concat-route\";\r\nimport { ltrim, merge, toCamelCase, trim } from \"@mongez/reinforcements\";\r\nimport { isEmpty } from \"@mongez/supportive-is\";\r\nimport { log } from \"@warlock.js/logger\";\r\nimport type { FastifyReply, FastifyRequest } from \"fastify\";\r\nimport { container } from \"../container\";\r\nimport { Request } from \"../http/request\";\r\nimport { Response } from \"../http/response\";\r\nimport { type FastifyInstance } from \"../http/server\";\r\nimport { RouteBuilder } from \"./route-builder\";\r\nimport { RouteRegistry } from \"./route-registry\";\r\nimport type {\r\n GroupedRoutesOptions,\r\n RequestHandler,\r\n RequestHandlerType,\r\n RequestHandlerValidation,\r\n ResourceMethod,\r\n Route,\r\n RouteOptions,\r\n RouteResource,\r\n RouterGroupCallback,\r\n RouterStacks,\r\n} from \"./types\";\r\n\r\nexport class Router {\r\n /**\r\n * Routes list\r\n */\r\n private routes: Route[] = [];\r\n\r\n /**\r\n * Router Instance\r\n */\r\n private static instance: Router;\r\n\r\n /**\r\n * Static paths\r\n */\r\n protected staticDirectories: FastifyStaticOptions[] = [];\r\n\r\n /**\r\n * Event listeners\r\n */\r\n protected eventListeners: Record<string, ((router: Router, server: FastifyInstance) => void)[]> =\r\n {};\r\n\r\n /**\r\n * Stacks\r\n * Stacks will be used for grouping routes to add prefix, name or middleware\r\n */\r\n protected stacks: RouterStacks = {\r\n prefix: [],\r\n name: [],\r\n middleware: [],\r\n };\r\n\r\n /**\r\n * Get router instance\r\n */\r\n public static getInstance() {\r\n if (!Router.instance) {\r\n Router.instance = new Router();\r\n }\r\n\r\n return Router.instance;\r\n }\r\n\r\n private constructor() {\r\n //\r\n }\r\n\r\n /**\r\n * Listen to router before scan\r\n */\r\n public beforeScanning(callback: (router: Router, server: FastifyInstance) => void) {\r\n this.eventListeners.beforeScan = [...(this.eventListeners.beforeScan || []), callback];\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Listen to router after scanning\r\n */\r\n public afterScanning(callback: (router: Router, server: FastifyInstance) => void) {\r\n this.eventListeners.afterScanning = [...(this.eventListeners.afterScanning || []), callback];\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Redirect path to another path\r\n */\r\n public redirect(from: string, to: string, redirectMode: \"temporary\" | \"permanent\" = \"temporary\") {\r\n return this.get(from, (_request, response) => {\r\n response.redirect(to, redirectMode === \"temporary\" ? 302 : 301);\r\n });\r\n }\r\n\r\n /**\r\n * Server static folder\r\n */\r\n public directory(options: FastifyStaticOptions) {\r\n this.staticDirectories.push(options);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Serve file\r\n */\r\n public file(path: string, location: string, cacheTime?: number) {\r\n return this.get(path, (_request, response) => {\r\n response.sendFile(location, cacheTime);\r\n });\r\n }\r\n\r\n /**\r\n * Serve cached file, it will cache the file to 1 year by default\r\n */\r\n public cachedFile(path: string, location: string, cacheTime?: number) {\r\n return this.get(path, (_request, response) => {\r\n response.sendCachedFile(location, cacheTime);\r\n });\r\n }\r\n\r\n /**\r\n * Serve list of files\r\n */\r\n public files(files: Record<string, string>, cacheTime?: number) {\r\n for (const [path, location] of Object.entries(files)) {\r\n this.get(path, (_request, response) => {\r\n response.sendFile(location, cacheTime);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Serve list of cached files, it will cache the file to 1 year by default\r\n */\r\n public cachedFiles(files: Record<string, string>, cacheTime?: number) {\r\n for (const [path, location] of Object.entries(files)) {\r\n this.get(path, (_request, response) => {\r\n response.sendCachedFile(location, cacheTime);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Add proxy route\r\n */\r\n public proxy(\r\n path: string,\r\n baseUrl: string,\r\n options?: Omit<FastifyHttpProxyOptions, \"prefix\" | \"upstream\">,\r\n ): this;\r\n public proxy(options: FastifyHttpProxyOptions): this;\r\n public proxy(...args: any[]) {\r\n this.beforeScanning((_router, server) => {\r\n if (args.length === 1) {\r\n server.register(proxy, args[0]);\r\n } else {\r\n server.register(proxy, {\r\n prefix: args[0],\r\n upstream: args[1],\r\n ...args[2],\r\n });\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add route to routes list\r\n */\r\n public add(\r\n method: Route[\"method\"],\r\n path: string | string[],\r\n handler: RequestHandlerType,\r\n options: RouteOptions = {},\r\n ) {\r\n if (Array.isArray(path)) {\r\n path.forEach((p) => this.add(method, p, handler, options));\r\n return this;\r\n }\r\n\r\n const prefix = this.stacks.prefix.reduce((path, prefix) => {\r\n return concatRoute(path, prefix);\r\n }, \"\");\r\n\r\n const name = this.stacks.name.reduceRight(\r\n (name, prefixName) => {\r\n return trim(prefixName + \".\" + name, \".\");\r\n },\r\n options.name || trim(path.replace(/\\//g, \".\"), \".\"),\r\n );\r\n\r\n path = concatRoute(prefix, path);\r\n\r\n const middlewarePrecedence = options.middlewarePrecedence || \"after\";\r\n\r\n if (middlewarePrecedence === \"before\") {\r\n options.middleware = [...(options.middleware || []), ...this.stacks.middleware];\r\n } else {\r\n options.middleware = [...this.stacks.middleware, ...(options.middleware || [])];\r\n }\r\n\r\n if (Array.isArray(handler)) {\r\n const [controller, action] = handler;\r\n\r\n if (typeof controller[action] !== \"function\") {\r\n throw new Error(\r\n `Invalid controller action \"${action}\" for controller \"${controller.constructor.name}\"`,\r\n );\r\n }\r\n\r\n handler = controller[action].bind(controller) as RequestHandler;\r\n\r\n if (!handler.validation) {\r\n handler.validation = {};\r\n if (controller[`${action}ValidationSchema`]) {\r\n handler.validation.schema = controller[`${action}ValidationSchema`]();\r\n }\r\n\r\n if (controller[`${action}Validate`]) {\r\n handler.validation.validate = controller[`${action}Validate`];\r\n }\r\n }\r\n }\r\n\r\n const routeData: Route = {\r\n method,\r\n path,\r\n handler,\r\n ...options,\r\n name,\r\n rateLimit: options.rateLimit,\r\n $prefix: prefix || \"/\",\r\n // it must be a new array to avoid modifying the original array\r\n $prefixStack: [...this.stacks.prefix],\r\n // Inject source file from stacks if set\r\n sourceFile: this.stacks.sourceFile || \"\",\r\n };\r\n\r\n if (routeData.name) {\r\n // check if the name exists\r\n const route = this.routes.find((route) => route.name === routeData.name);\r\n\r\n if (route) {\r\n // check again if the route name exists with the same method\r\n if (route.method === routeData.method) {\r\n throw new Error(`Route name \"${routeData.name}\" already exists`);\r\n } else {\r\n routeData.name += `.${routeData.method.toLowerCase()}`;\r\n }\r\n }\r\n }\r\n\r\n this.routes.push(routeData);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a request that accepts all methods\r\n */\r\n public any(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"all\" as Route[\"method\"], path, handler, options);\r\n }\r\n\r\n /**\r\n * Add get request method\r\n */\r\n public get(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"GET\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add post request method\r\n */\r\n public post(path: string | string[], handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"POST\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add put request method\r\n */\r\n public put(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"PUT\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add delete request method\r\n */\r\n public delete(path: string | string[], handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"DELETE\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add patch request method\r\n */\r\n public patch(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"PATCH\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add head request method\r\n */\r\n public head(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"HEAD\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add options request method\r\n */\r\n public options(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"OPTIONS\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Get a chainable route builder for the same route path\r\n */\r\n public route(path: string, options: RouteOptions = {}) {\r\n return new RouteBuilder(this, path, options);\r\n }\r\n\r\n /**\r\n * Add full restful resource routes\r\n * This method will generate the following routes:\r\n * 1. GET /path: list all resources\r\n * 2. GET /path/:id: get a single resource\r\n * 3. POST /path: create a new resource\r\n * 4. PUT /path/:id: update a resource\r\n * 5. DELETE /path/:id: delete a resource\r\n * 6. PATCH /path/:id: update a resource partially\r\n */\r\n public restfulResource(\r\n path: string,\r\n resource: RouteResource,\r\n options: RouteOptions & {\r\n only?: ResourceMethod[];\r\n except?: ResourceMethod[];\r\n replace?: Partial<Record<ResourceMethod, RequestHandler>> & {\r\n bulkDelete?: RequestHandler;\r\n };\r\n } = {},\r\n ) {\r\n return this.prefix(path, () => {\r\n path = \"\";\r\n // get base resource name\r\n const baseResourceName = options.name || toCamelCase(ltrim(path, \"/\"));\r\n\r\n // clone the resource so we don't mess up with it\r\n const routeResource = resource;\r\n\r\n const isAcceptableResource = (type: ResourceMethod) => {\r\n return Boolean(\r\n // check if the route is not excluded\r\n (!options.except || !options.except.includes(type)) &&\r\n // check if the only option is set and the route is included\r\n (!options.only || options.only.includes(type)),\r\n );\r\n };\r\n\r\n if (routeResource.list && isAcceptableResource(\"list\")) {\r\n const resourceName = baseResourceName + \".list\";\r\n this.get(path, options.replace?.list || routeResource.list.bind(routeResource), {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n });\r\n }\r\n\r\n if (routeResource.get && isAcceptableResource(\"get\")) {\r\n const resourceName = baseResourceName + \".single\";\r\n\r\n this.get(path + \"/:id\", options.replace?.get || routeResource.get.bind(routeResource), {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n });\r\n }\r\n\r\n if (routeResource.create && isAcceptableResource(\"create\")) {\r\n const resourceName = baseResourceName + \".create\";\r\n\r\n const handler = options.replace?.create || this.manageValidation(routeResource, \"create\");\r\n\r\n this.post(path, handler, {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n });\r\n }\r\n\r\n if (routeResource.update && isAcceptableResource(\"update\")) {\r\n const resourceName = baseResourceName + \".update\";\r\n\r\n const handler = options.replace?.update || this.manageValidation(routeResource, \"update\");\r\n\r\n this.put(path + \"/:id\", handler, {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n });\r\n }\r\n\r\n if (routeResource.patch && isAcceptableResource(\"patch\")) {\r\n const resourceName = baseResourceName + \".patch\";\r\n\r\n const handler = options.replace?.patch || this.manageValidation(routeResource, \"patch\");\r\n\r\n this.patch(path + \"/:id\", handler, {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n });\r\n }\r\n\r\n if (routeResource.delete && isAcceptableResource(\"delete\")) {\r\n const resourceName = baseResourceName + \".delete\";\r\n\r\n this.delete(\r\n path + \"/:id\",\r\n options.replace?.delete || routeResource.delete.bind(routeResource),\r\n {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n },\r\n );\r\n }\r\n\r\n if (routeResource.bulkDelete && isAcceptableResource(\"delete\")) {\r\n const resourceName = baseResourceName + \".bulkDelete\";\r\n\r\n this.delete(\r\n path,\r\n options.replace?.bulkDelete || routeResource.bulkDelete.bind(routeResource),\r\n {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n },\r\n );\r\n }\r\n\r\n return this;\r\n });\r\n }\r\n\r\n /**\r\n * Group routes with options\r\n */\r\n public group(options: GroupedRoutesOptions, callback: RouterGroupCallback) {\r\n const {\r\n prefix,\r\n // name must always be defined because\r\n // if there are multiple groups without name\r\n // they might generate the same route name\r\n // thus causing an error\r\n // in this case we need always to make sure that\r\n // the name is always defined.\r\n name = prefix ? trim(prefix.replace(/\\//g, \".\"), \".\") : undefined,\r\n middleware,\r\n } = options;\r\n\r\n if (prefix) {\r\n this.stacks.prefix.push(prefix);\r\n }\r\n\r\n if (name) {\r\n this.stacks.name.push(name);\r\n }\r\n\r\n if (middleware) {\r\n this.stacks.middleware.push(...middleware);\r\n }\r\n\r\n callback();\r\n\r\n if (prefix) {\r\n this.stacks.prefix.pop();\r\n }\r\n\r\n if (name) {\r\n this.stacks.name.pop();\r\n }\r\n\r\n if (middleware) {\r\n this.stacks.middleware.splice(\r\n this.stacks.middleware.length - middleware.length,\r\n middleware.length,\r\n );\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add prefix to all routes in the given callback\r\n */\r\n public prefix(prefix: string, callback: () => void) {\r\n return this.group({ prefix }, callback);\r\n }\r\n\r\n /**\r\n * Add API version prefix to all routes in the given callback\r\n * Automatically formats the version as /v{version}\r\n * @example\r\n * router.version(\"1\", () => {\r\n * router.get(\"/users\", getUsersV1); // /v1/users\r\n * });\r\n *\r\n * router.version(\"2\", () => {\r\n * router.get(\"/users\", getUsersV2); // /v2/users\r\n * });\r\n */\r\n public version(version: string | number, callback: () => void) {\r\n return this.prefix(`/v${version}`, callback);\r\n }\r\n\r\n /**\r\n * Wrap route additions with a source file path\r\n * Used for tracking which routes come from which file (for HMR)\r\n * @param sourceFile Relative path to the source file (e.g., \"src/app/users/routes.ts\")\r\n * @param callback Function that adds routes (will have sourceFile injected)\r\n */\r\n public async withSourceFile<T = any>(\r\n sourceFile: string,\r\n callback: () => T | Promise<T>,\r\n ): Promise<T | undefined> {\r\n // Set source file in stacks\r\n this.stacks.sourceFile = sourceFile;\r\n\r\n try {\r\n // Execute callback (routes added here will have sourceFile injected)\r\n return await callback();\r\n } catch (error) {\r\n console.log(\"Error in withSourceFile\", error);\r\n } finally {\r\n // Always clear source file from stacks\r\n delete this.stacks.sourceFile;\r\n }\r\n }\r\n\r\n /**\r\n * Remove all routes that belong to a specific source file\r\n * Used when reloading routes files via HMR\r\n * @param sourceFile Relative path to the source file\r\n */\r\n public removeRoutesBySourceFile(sourceFile: string): void {\r\n this.routes = this.routes.filter((route) => route.sourceFile !== sourceFile);\r\n }\r\n\r\n /**\r\n * Manage validation system for the given resource\r\n */\r\n private manageValidation(resource: RouteResource, method: \"create\" | \"update\" | \"patch\") {\r\n const handler = resource[method]?.bind(resource) as RequestHandler;\r\n\r\n const methodValidation = resource?.validation?.[method];\r\n\r\n if (method === \"patch\") {\r\n handler.validation = methodValidation;\r\n\r\n if (handler.validation?.validate) {\r\n handler.validation.validate = handler.validation.validate.bind(resource);\r\n }\r\n\r\n if (resource.validation?.patch) {\r\n handler.validation = merge(resource.validation.patch, handler.validation);\r\n }\r\n\r\n return handler;\r\n }\r\n\r\n if (!resource.validation || (!methodValidation && !resource.validation.all)) return handler;\r\n\r\n if (resource.validation.all) {\r\n const validationMethods = {\r\n all: resource?.validation?.all?.validate,\r\n [method]: methodValidation?.validate,\r\n };\r\n\r\n const validation: RequestHandlerValidation = {};\r\n\r\n if (resource.validation.all.schema || methodValidation?.schema) {\r\n if (!methodValidation?.schema && resource.validation.all.schema) {\r\n // Case 2: Only all.schema exists - clone it for this method\r\n validation.schema = resource.validation.all.schema;\r\n } else if (methodValidation?.schema && resource.validation.all.schema) {\r\n // Case 3: Both exist - merge them (all is base, method overrides)\r\n validation.schema = resource.validation.all.schema.merge(methodValidation.schema);\r\n } else if (methodValidation?.schema && !resource.validation.all.schema) {\r\n // Case 1: Only method schema exists - use it directly\r\n validation.schema = methodValidation.schema;\r\n }\r\n // Case 4: Neither exists - handled by outer if being false\r\n }\r\n\r\n if (validationMethods.all || validationMethods[method]) {\r\n validation.validate = async (request: Request, response: Response) => {\r\n if (validationMethods.all) {\r\n const output = await validationMethods.all.call(resource, request, response);\r\n\r\n if (output) return output;\r\n }\r\n\r\n if (validationMethods[method]) {\r\n return await validationMethods[method]?.call(resource, request, response);\r\n }\r\n\r\n return;\r\n };\r\n }\r\n\r\n if (!isEmpty(validation)) {\r\n handler.validation = validation;\r\n }\r\n } else {\r\n handler.validation = resource.validation[method];\r\n\r\n if (handler.validation?.validate) {\r\n handler.validation.validate = handler.validation.validate.bind(resource);\r\n }\r\n }\r\n\r\n return handler;\r\n }\r\n\r\n /**\r\n * Get all routes list\r\n */\r\n public list() {\r\n return this.routes;\r\n }\r\n\r\n /**\r\n * Register routes to the server\r\n */\r\n public scan(server: FastifyInstance) {\r\n this.eventListeners.beforeScan?.forEach((callback) => callback(this, server));\r\n\r\n this.routes.forEach((route) => {\r\n const requestMethod = route.method.toLowerCase();\r\n const requestMethodFunction = server[requestMethod].bind(server);\r\n\r\n const options = {\r\n ...route.serverOptions,\r\n config: {\r\n ...route.serverOptions?.config,\r\n ...(route.rateLimit && { rateLimit: route.rateLimit }),\r\n },\r\n };\r\n\r\n requestMethodFunction(\r\n route.path,\r\n options,\r\n async (baseRequest: FastifyRequest, reply: FastifyReply) => {\r\n const { output, response } = await this.handleRoute(route)(baseRequest, reply);\r\n\r\n return output || response.baseResponse;\r\n },\r\n );\r\n });\r\n\r\n for (const directoryOptions of this.staticDirectories) {\r\n server.register(fastifyStatic, {\r\n ...directoryOptions,\r\n decorateReply: false,\r\n });\r\n }\r\n\r\n this.eventListeners.afterScanning?.forEach((callback) => callback(this, server));\r\n }\r\n\r\n /**\r\n * Scan routes for the development server\r\n * Uses wildcard routing with find-my-way for HMR support\r\n */\r\n public scanDevServer(server: FastifyInstance) {\r\n this.eventListeners.beforeScan?.forEach((callback) => callback(this, server));\r\n\r\n // Shared handler for wildcard routing\r\n const wildcardHandler = async (fastifyRequest: FastifyRequest, fastifyReply: FastifyReply) => {\r\n // Initialize route registry once (will be rebuilt on HMR via rebuildRouteRegistry)\r\n const routeRegistry = new RouteRegistry();\r\n\r\n routeRegistry.register(this.routes);\r\n // Find matching route using find-my-way\r\n const match = routeRegistry.find(fastifyRequest.method, fastifyRequest.url);\r\n\r\n // No match found - return 404\r\n if (!match) {\r\n return fastifyReply.code(404).send({\r\n error: \"Route not found\",\r\n path: fastifyRequest.url,\r\n method: fastifyRequest.method,\r\n });\r\n }\r\n\r\n // Inject extracted params into the request\r\n fastifyRequest.params = match.params;\r\n\r\n try {\r\n // Call the matched route handler\r\n const { output, response } = await this.handleRoute(match.route)(\r\n fastifyRequest,\r\n fastifyReply,\r\n );\r\n\r\n return output || response.baseResponse;\r\n } catch (error) {\r\n console.log(error);\r\n throw error;\r\n }\r\n };\r\n\r\n // Register wildcard route for all methods EXCEPT OPTIONS (to avoid conflict with CORS)\r\n // OPTIONS is handled by @fastify/cors plugin for preflight requests\r\n const methods = [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\"] as const;\r\n for (const method of methods) {\r\n server.route({\r\n method,\r\n url: \"*\",\r\n handler: wildcardHandler,\r\n });\r\n }\r\n\r\n // Register static directories\r\n for (const directoryOptions of this.staticDirectories) {\r\n server.register(fastifyStatic, {\r\n ...directoryOptions,\r\n decorateReply: false,\r\n });\r\n }\r\n\r\n this.eventListeners.afterScanning?.forEach((callback) => callback(this, server));\r\n }\r\n\r\n /**\r\n * Get the route path for the given route name\r\n */\r\n public getRoute(name: string, params: any = {}) {\r\n const route = this.routes.find((route) => route.name === name);\r\n\r\n if (!route) {\r\n throw new Error(`Route name \"${name}\" not found`);\r\n }\r\n\r\n let path = route.path;\r\n\r\n if (route.path.includes(\":\")) {\r\n Object.keys(params).forEach((key) => {\r\n path = path.replace(\":\" + key, params[key]);\r\n });\r\n }\r\n\r\n return path;\r\n }\r\n\r\n /**\r\n * Handle the given route\r\n */\r\n private handleRoute(route: Route) {\r\n return async (fastifyRequest: FastifyRequest, fastifyResponse: FastifyReply) => {\r\n const request = new Request();\r\n const response = new Response();\r\n response.setResponse(fastifyResponse);\r\n request.response = response;\r\n\r\n response.request = request;\r\n\r\n request.setRequest(fastifyRequest).setRoute(route);\r\n\r\n log.info({\r\n module: \"route\",\r\n action: route.method + \" \" + route.path.replace(\"/*\", \"\"),\r\n message: `Starting Request: ${request.id}`,\r\n context: {\r\n request,\r\n response,\r\n },\r\n });\r\n\r\n const result = await request.execute();\r\n\r\n return {\r\n output: result,\r\n response,\r\n request,\r\n };\r\n };\r\n }\r\n}\r\n\r\nexport const router = Router.getInstance();\r\n\r\ncontainer.set(\"router\", router);\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/router/router.ts"],"sourcesContent":["import proxy, { type FastifyHttpProxyOptions } from \"@fastify/http-proxy\";\r\nimport fastifyStatic, { type FastifyStaticOptions } from \"@fastify/static\";\r\nimport concatRoute from \"@mongez/concat-route\";\r\nimport { ltrim, merge, toCamelCase, trim } from \"@mongez/reinforcements\";\r\nimport { isEmpty } from \"@mongez/supportive-is\";\r\nimport { log } from \"@warlock.js/logger\";\r\nimport type { FastifyReply, FastifyRequest } from \"fastify\";\r\nimport { container } from \"../container\";\r\nimport { Request } from \"../http/request\";\r\nimport { Response } from \"../http/response\";\r\nimport { type FastifyInstance } from \"../http/server\";\r\nimport { RouteBuilder } from \"./route-builder\";\r\nimport { RouteRegistry } from \"./route-registry\";\r\nimport type {\r\n GroupedRoutesOptions,\r\n RequestHandler,\r\n RequestHandlerType,\r\n RequestHandlerValidation,\r\n ResourceMethod,\r\n Route,\r\n RouteOptions,\r\n RouteResource,\r\n RouterGroupCallback,\r\n RouterStacks,\r\n} from \"./types\";\r\n\r\nexport class Router {\r\n /**\r\n * Routes list\r\n */\r\n private routes: Route[] = [];\r\n\r\n /**\r\n * Router Instance\r\n */\r\n private static instance: Router;\r\n\r\n /**\r\n * Static paths\r\n */\r\n protected staticDirectories: FastifyStaticOptions[] = [];\r\n\r\n /**\r\n * Event listeners\r\n */\r\n protected eventListeners: Record<string, ((router: Router, server: FastifyInstance) => void)[]> =\r\n {};\r\n\r\n /**\r\n * Stacks\r\n * Stacks will be used for grouping routes to add prefix, name or middleware\r\n */\r\n protected stacks: RouterStacks = {\r\n prefix: [],\r\n name: [],\r\n middleware: [],\r\n };\r\n\r\n /**\r\n * Get router instance\r\n */\r\n public static getInstance() {\r\n if (!Router.instance) {\r\n Router.instance = new Router();\r\n }\r\n\r\n return Router.instance;\r\n }\r\n\r\n private constructor() {\r\n //\r\n }\r\n\r\n /**\r\n * Listen to router before scan\r\n */\r\n public beforeScanning(callback: (router: Router, server: FastifyInstance) => void) {\r\n this.eventListeners.beforeScan = [...(this.eventListeners.beforeScan || []), callback];\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Listen to router after scanning\r\n */\r\n public afterScanning(callback: (router: Router, server: FastifyInstance) => void) {\r\n this.eventListeners.afterScanning = [...(this.eventListeners.afterScanning || []), callback];\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Redirect path to another path\r\n */\r\n public redirect(from: string, to: string, redirectMode: \"temporary\" | \"permanent\" = \"temporary\") {\r\n return this.get(from, (_request, response) => {\r\n response.redirect(to, redirectMode === \"temporary\" ? 302 : 301);\r\n });\r\n }\r\n\r\n /**\r\n * Server static folder\r\n */\r\n public directory(options: FastifyStaticOptions) {\r\n this.staticDirectories.push(options);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Serve file\r\n */\r\n public file(path: string, location: string, cacheTime?: number) {\r\n return this.get(path, (_request, response) => {\r\n response.sendFile(location, cacheTime);\r\n });\r\n }\r\n\r\n /**\r\n * Serve cached file, it will cache the file to 1 year by default\r\n */\r\n public cachedFile(path: string, location: string, cacheTime?: number) {\r\n return this.get(path, (_request, response) => {\r\n response.sendCachedFile(location, cacheTime);\r\n });\r\n }\r\n\r\n /**\r\n * Serve list of files\r\n */\r\n public files(files: Record<string, string>, cacheTime?: number) {\r\n for (const [path, location] of Object.entries(files)) {\r\n this.get(path, (_request, response) => {\r\n response.sendFile(location, cacheTime);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Serve list of cached files, it will cache the file to 1 year by default\r\n */\r\n public cachedFiles(files: Record<string, string>, cacheTime?: number) {\r\n for (const [path, location] of Object.entries(files)) {\r\n this.get(path, (_request, response) => {\r\n response.sendCachedFile(location, cacheTime);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Add proxy route\r\n */\r\n public proxy(\r\n path: string,\r\n baseUrl: string,\r\n options?: Omit<FastifyHttpProxyOptions, \"prefix\" | \"upstream\">,\r\n ): this;\r\n public proxy(options: FastifyHttpProxyOptions): this;\r\n public proxy(...args: any[]) {\r\n this.beforeScanning((_router, server) => {\r\n if (args.length === 1) {\r\n server.register(proxy, args[0]);\r\n } else {\r\n server.register(proxy, {\r\n prefix: args[0],\r\n upstream: args[1],\r\n ...args[2],\r\n });\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add route to routes list\r\n */\r\n public add(\r\n method: Route[\"method\"],\r\n path: string | string[],\r\n handler: RequestHandlerType,\r\n options: RouteOptions = {},\r\n ) {\r\n if (Array.isArray(path)) {\r\n path.forEach((p) => this.add(method, p, handler, options));\r\n return this;\r\n }\r\n\r\n const prefix = this.stacks.prefix.reduce((path, prefix) => {\r\n return concatRoute(path, prefix);\r\n }, \"\");\r\n\r\n const name = this.stacks.name.reduceRight(\r\n (name, prefixName) => {\r\n return trim(prefixName + \".\" + name, \".\");\r\n },\r\n options.name || trim(path.replace(/\\//g, \".\"), \".\"),\r\n );\r\n\r\n path = concatRoute(prefix, path);\r\n\r\n const middlewarePrecedence = options.middlewarePrecedence || \"after\";\r\n\r\n if (middlewarePrecedence === \"before\") {\r\n options.middleware = [...(options.middleware || []), ...this.stacks.middleware];\r\n } else {\r\n options.middleware = [...this.stacks.middleware, ...(options.middleware || [])];\r\n }\r\n\r\n if (Array.isArray(handler)) {\r\n const [controller, action] = handler;\r\n\r\n if (typeof controller[action] !== \"function\") {\r\n throw new Error(\r\n `Invalid controller action \"${action}\" for controller \"${controller.constructor.name}\"`,\r\n );\r\n }\r\n\r\n handler = controller[action].bind(controller) as RequestHandler;\r\n\r\n if (!handler.validation) {\r\n handler.validation = {};\r\n if (controller[`${action}ValidationSchema`]) {\r\n handler.validation.schema = controller[`${action}ValidationSchema`]();\r\n }\r\n\r\n if (controller[`${action}Validate`]) {\r\n handler.validation.validate = controller[`${action}Validate`];\r\n }\r\n }\r\n }\r\n\r\n const routeData: Route = {\r\n method,\r\n path,\r\n handler,\r\n ...options,\r\n name,\r\n rateLimit: options.rateLimit,\r\n $prefix: prefix || \"/\",\r\n // it must be a new array to avoid modifying the original array\r\n $prefixStack: [...this.stacks.prefix],\r\n // Inject source file from stacks if set\r\n sourceFile: this.stacks.sourceFile || \"\",\r\n };\r\n\r\n if (routeData.name) {\r\n // check if the name exists\r\n const route = this.routes.find((route) => route.name === routeData.name);\r\n\r\n if (route) {\r\n // check again if the route name exists with the same method\r\n if (route.method === routeData.method) {\r\n throw new Error(`Route name \"${routeData.name}\" already exists`);\r\n } else {\r\n routeData.name += `.${routeData.method.toLowerCase()}`;\r\n }\r\n }\r\n }\r\n\r\n this.routes.push(routeData);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a request that accepts all methods\r\n */\r\n public any(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"all\" as Route[\"method\"], path, handler, options);\r\n }\r\n\r\n /**\r\n * Add get request method\r\n */\r\n public get(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"GET\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add post request method\r\n */\r\n public post(path: string | string[], handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"POST\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add put request method\r\n */\r\n public put(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"PUT\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add delete request method\r\n */\r\n public delete(path: string | string[], handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"DELETE\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add patch request method\r\n */\r\n public patch(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"PATCH\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add head request method\r\n */\r\n public head(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"HEAD\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Add options request method\r\n */\r\n public options(path: string, handler: RequestHandlerType, options: RouteOptions = {}) {\r\n return this.add(\"OPTIONS\", path, handler, options);\r\n }\r\n\r\n /**\r\n * Get a chainable route builder for the same route path\r\n */\r\n public route(path: string, options: RouteOptions = {}) {\r\n return new RouteBuilder(this, path, options);\r\n }\r\n\r\n /**\r\n * Add full restful resource routes\r\n * This method will generate the following routes:\r\n * 1. GET /path: list all resources\r\n * 2. GET /path/:id: get a single resource\r\n * 3. POST /path: create a new resource\r\n * 4. PUT /path/:id: update a resource\r\n * 5. DELETE /path/:id: delete a resource\r\n * 6. PATCH /path/:id: update a resource partially\r\n */\r\n public restfulResource(\r\n path: string,\r\n resource: RouteResource,\r\n options: RouteOptions & {\r\n only?: ResourceMethod[];\r\n except?: ResourceMethod[];\r\n replace?: Partial<Record<ResourceMethod, RequestHandler>> & {\r\n bulkDelete?: RequestHandler;\r\n };\r\n } = {},\r\n ) {\r\n return this.prefix(path, () => {\r\n path = \"\";\r\n // get base resource name\r\n const baseResourceName = options.name || toCamelCase(ltrim(path, \"/\"));\r\n\r\n // clone the resource so we don't mess up with it\r\n const routeResource = resource;\r\n\r\n const isAcceptableResource = (type: ResourceMethod) => {\r\n return Boolean(\r\n // check if the route is not excluded\r\n (!options.except || !options.except.includes(type)) &&\r\n // check if the only option is set and the route is included\r\n (!options.only || options.only.includes(type)),\r\n );\r\n };\r\n\r\n if (routeResource.list && isAcceptableResource(\"list\")) {\r\n const resourceName = baseResourceName + \".list\";\r\n this.get(path, options.replace?.list || routeResource.list.bind(routeResource), {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n });\r\n }\r\n\r\n if (routeResource.get && isAcceptableResource(\"get\")) {\r\n const resourceName = baseResourceName + \".single\";\r\n\r\n this.get(path + \"/:id\", options.replace?.get || routeResource.get.bind(routeResource), {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n });\r\n }\r\n\r\n if (routeResource.create && isAcceptableResource(\"create\")) {\r\n const resourceName = baseResourceName + \".create\";\r\n\r\n const handler = options.replace?.create || this.manageValidation(routeResource, \"create\");\r\n\r\n this.post(path, handler, {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n });\r\n }\r\n\r\n if (routeResource.update && isAcceptableResource(\"update\")) {\r\n const resourceName = baseResourceName + \".update\";\r\n\r\n const handler = options.replace?.update || this.manageValidation(routeResource, \"update\");\r\n\r\n this.put(path + \"/:id\", handler, {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n });\r\n }\r\n\r\n if (routeResource.patch && isAcceptableResource(\"patch\")) {\r\n const resourceName = baseResourceName + \".patch\";\r\n\r\n const handler = options.replace?.patch || this.manageValidation(routeResource, \"patch\");\r\n\r\n this.patch(path + \"/:id\", handler, {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n });\r\n }\r\n\r\n if (routeResource.delete && isAcceptableResource(\"delete\")) {\r\n const resourceName = baseResourceName + \".delete\";\r\n\r\n this.delete(\r\n path + \"/:id\",\r\n options.replace?.delete || routeResource.delete.bind(routeResource),\r\n {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n },\r\n );\r\n }\r\n\r\n if (routeResource.bulkDelete && isAcceptableResource(\"delete\")) {\r\n const resourceName = baseResourceName + \".bulkDelete\";\r\n\r\n this.delete(\r\n path,\r\n options.replace?.bulkDelete || routeResource.bulkDelete.bind(routeResource),\r\n {\r\n ...options,\r\n name: resourceName,\r\n restful: true,\r\n },\r\n );\r\n }\r\n\r\n return this;\r\n });\r\n }\r\n\r\n /**\r\n * Group routes with options\r\n */\r\n public group(options: GroupedRoutesOptions, callback: RouterGroupCallback) {\r\n const {\r\n prefix,\r\n // name must always be defined because\r\n // if there are multiple groups without name\r\n // they might generate the same route name\r\n // thus causing an error\r\n // in this case we need always to make sure that\r\n // the name is always defined.\r\n name = prefix ? trim(prefix.replace(/\\//g, \".\"), \".\") : undefined,\r\n middleware,\r\n } = options;\r\n\r\n if (prefix) {\r\n this.stacks.prefix.push(prefix);\r\n }\r\n\r\n if (name) {\r\n this.stacks.name.push(name);\r\n }\r\n\r\n if (middleware) {\r\n this.stacks.middleware.push(...middleware);\r\n }\r\n\r\n callback();\r\n\r\n if (prefix) {\r\n this.stacks.prefix.pop();\r\n }\r\n\r\n if (name) {\r\n this.stacks.name.pop();\r\n }\r\n\r\n if (middleware) {\r\n this.stacks.middleware.splice(\r\n this.stacks.middleware.length - middleware.length,\r\n middleware.length,\r\n );\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add prefix to all routes in the given callback\r\n */\r\n public prefix(prefix: string, callback: () => void) {\r\n return this.group({ prefix }, callback);\r\n }\r\n\r\n /**\r\n * Add API version prefix to all routes in the given callback\r\n * Automatically formats the version as /v{version}\r\n * @example\r\n * router.version(\"1\", () => {\r\n * router.get(\"/users\", getUsersV1); // /v1/users\r\n * });\r\n *\r\n * router.version(\"2\", () => {\r\n * router.get(\"/users\", getUsersV2); // /v2/users\r\n * });\r\n */\r\n public version(version: string | number, callback: () => void) {\r\n return this.prefix(`/v${version}`, callback);\r\n }\r\n\r\n /**\r\n * Wrap route additions with a source file path\r\n * Used for tracking which routes come from which file (for HMR)\r\n * @param sourceFile Relative path to the source file (e.g., \"src/app/users/routes.ts\")\r\n * @param callback Function that adds routes (will have sourceFile injected)\r\n */\r\n public async withSourceFile<T = any>(\r\n sourceFile: string,\r\n callback: () => T | Promise<T>,\r\n ): Promise<T | undefined> {\r\n // Set source file in stacks\r\n this.stacks.sourceFile = sourceFile;\r\n\r\n try {\r\n // Execute callback (routes added here will have sourceFile injected)\r\n return await callback();\r\n } catch (error) {\r\n console.log(\"Error in withSourceFile\", error);\r\n } finally {\r\n // Always clear source file from stacks\r\n delete this.stacks.sourceFile;\r\n }\r\n }\r\n\r\n /**\r\n * Remove all routes that belong to a specific source file\r\n * Used when reloading routes files via HMR\r\n * @param sourceFile Relative path to the source file\r\n */\r\n public removeRoutesBySourceFile(sourceFile: string): void {\r\n this.routes = this.routes.filter((route) => route.sourceFile !== sourceFile);\r\n }\r\n\r\n /**\r\n * Manage validation system for the given resource\r\n */\r\n private manageValidation(resource: RouteResource, method: \"create\" | \"update\" | \"patch\") {\r\n const handler = resource[method]?.bind(resource) as RequestHandler;\r\n\r\n const methodValidation = resource?.validation?.[method];\r\n\r\n if (method === \"patch\") {\r\n handler.validation = methodValidation;\r\n\r\n if (handler.validation?.validate) {\r\n handler.validation.validate = handler.validation.validate.bind(resource);\r\n }\r\n\r\n if (resource.validation?.patch) {\r\n handler.validation = merge(resource.validation.patch, handler.validation);\r\n }\r\n\r\n return handler;\r\n }\r\n\r\n if (!resource.validation || (!methodValidation && !resource.validation.all)) return handler;\r\n\r\n if (resource.validation.all) {\r\n const validationMethods = {\r\n all: resource?.validation?.all?.validate,\r\n [method]: methodValidation?.validate,\r\n };\r\n\r\n const validation: RequestHandlerValidation = {};\r\n\r\n if (resource.validation.all.schema || methodValidation?.schema) {\r\n if (!methodValidation?.schema && resource.validation.all.schema) {\r\n // Case 2: Only all.schema exists - clone it for this method\r\n validation.schema = resource.validation.all.schema;\r\n } else if (methodValidation?.schema && resource.validation.all.schema) {\r\n // Case 3: Both exist - merge them (all is base, method overrides)\r\n validation.schema = resource.validation.all.schema.merge(methodValidation.schema);\r\n } else if (methodValidation?.schema && !resource.validation.all.schema) {\r\n // Case 1: Only method schema exists - use it directly\r\n validation.schema = methodValidation.schema;\r\n }\r\n // Case 4: Neither exists - handled by outer if being false\r\n }\r\n\r\n if (validationMethods.all || validationMethods[method]) {\r\n validation.validate = async (request: Request, response: Response) => {\r\n if (validationMethods.all) {\r\n const output = await validationMethods.all.call(resource, request, response);\r\n\r\n if (output) return output;\r\n }\r\n\r\n if (validationMethods[method]) {\r\n return await validationMethods[method]?.call(resource, request, response);\r\n }\r\n\r\n return;\r\n };\r\n }\r\n\r\n if (!isEmpty(validation)) {\r\n handler.validation = validation;\r\n }\r\n } else {\r\n handler.validation = resource.validation[method];\r\n\r\n if (handler.validation?.validate) {\r\n handler.validation.validate = handler.validation.validate.bind(resource);\r\n }\r\n }\r\n\r\n return handler;\r\n }\r\n\r\n /**\r\n * Get all routes list\r\n */\r\n public list() {\r\n return this.routes;\r\n }\r\n\r\n /**\r\n * Register routes to the server\r\n */\r\n public scan(server: FastifyInstance) {\r\n this.eventListeners.beforeScan?.forEach((callback) => callback(this, server));\r\n\r\n this.routes.forEach((route) => {\r\n const requestMethod = route.method.toLowerCase();\r\n const requestMethodFunction = server[requestMethod].bind(server);\r\n\r\n const options = {\r\n ...route.serverOptions,\r\n config: {\r\n ...route.serverOptions?.config,\r\n ...(route.rateLimit && { rateLimit: route.rateLimit }),\r\n },\r\n };\r\n\r\n requestMethodFunction(\r\n route.path,\r\n options,\r\n async (baseRequest: FastifyRequest, reply: FastifyReply) => {\r\n const { output, response } = await this.handleRoute(route)(baseRequest, reply);\r\n\r\n return output || response.baseResponse;\r\n },\r\n );\r\n });\r\n\r\n for (const directoryOptions of this.staticDirectories) {\r\n server.register(fastifyStatic, {\r\n ...directoryOptions,\r\n decorateReply: false,\r\n });\r\n }\r\n\r\n this.eventListeners.afterScanning?.forEach((callback) => callback(this, server));\r\n }\r\n\r\n /**\r\n * Scan routes for the development server\r\n * Uses wildcard routing with find-my-way for HMR support\r\n */\r\n public scanDevServer(server: FastifyInstance) {\r\n this.eventListeners.beforeScan?.forEach((callback) => callback(this, server));\r\n\r\n // Shared handler for wildcard routing\r\n const wildcardHandler = async (fastifyRequest: FastifyRequest, fastifyReply: FastifyReply) => {\r\n // Initialize route registry once (will be rebuilt on HMR via rebuildRouteRegistry)\r\n const routeRegistry = new RouteRegistry();\r\n\r\n routeRegistry.register(this.routes);\r\n // Find matching route using find-my-way\r\n const match = routeRegistry.find(fastifyRequest.method, fastifyRequest.url);\r\n\r\n // No match found - return 404\r\n if (!match) {\r\n return fastifyReply.code(404).send({\r\n error: \"Route not found\",\r\n path: fastifyRequest.url,\r\n method: fastifyRequest.method,\r\n });\r\n }\r\n\r\n // Inject extracted params into the request\r\n fastifyRequest.params = match.params;\r\n\r\n try {\r\n // Call the matched route handler\r\n const { output, response } = await this.handleRoute(match.route)(\r\n fastifyRequest,\r\n fastifyReply,\r\n );\r\n\r\n return output || response.baseResponse;\r\n } catch (error) {\r\n console.log(error);\r\n throw error;\r\n }\r\n };\r\n\r\n // Register wildcard route for all methods EXCEPT OPTIONS (to avoid conflict with CORS)\r\n // OPTIONS is handled by @fastify/cors plugin for preflight requests\r\n const methods = [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\"] as const;\r\n for (const method of methods) {\r\n server.route({\r\n method,\r\n url: \"*\",\r\n handler: wildcardHandler,\r\n });\r\n }\r\n\r\n // Register static directories\r\n for (const directoryOptions of this.staticDirectories) {\r\n server.register(fastifyStatic, {\r\n ...directoryOptions,\r\n decorateReply: false,\r\n });\r\n }\r\n\r\n this.eventListeners.afterScanning?.forEach((callback) => callback(this, server));\r\n }\r\n\r\n /**\r\n * Get the route path for the given route name\r\n */\r\n public getRoute(name: string, params: any = {}) {\r\n const route = this.routes.find((route) => route.name === name);\r\n\r\n if (!route) {\r\n throw new Error(`Route name \"${name}\" not found`);\r\n }\r\n\r\n let path = route.path;\r\n\r\n if (route.path.includes(\":\")) {\r\n Object.keys(params).forEach((key) => {\r\n path = path.replace(\":\" + key, params[key]);\r\n });\r\n }\r\n\r\n return path;\r\n }\r\n\r\n /**\r\n * Handle the given route\r\n */\r\n private handleRoute(route: Route) {\r\n return async (fastifyRequest: FastifyRequest, fastifyResponse: FastifyReply) => {\r\n const request = new Request();\r\n const response = new Response();\r\n response.setResponse(fastifyResponse);\r\n request.response = response;\r\n\r\n response.request = request;\r\n\r\n request.setRequest(fastifyRequest).setRoute(route);\r\n\r\n log.info({\r\n module: \"route\",\r\n action: route.method + \" \" + route.path.replace(\"/*\", \"\"),\r\n message: `Starting Request: ${request.id}`,\r\n context: {\r\n request,\r\n response,\r\n },\r\n });\r\n\r\n const result = await request.execute();\r\n\r\n return {\r\n output: result,\r\n response,\r\n request,\r\n };\r\n };\r\n }\r\n}\r\n\r\nexport const router = Router.getInstance();\r\n\r\ncontainer.set(\"router\", router);\r\n"],"mappings":"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"}
|
package/esm/router/types.d.mts
CHANGED
|
@@ -6,7 +6,7 @@ import { ObjectValidator } from "@warlock.js/seal";
|
|
|
6
6
|
import { GenericObject } from "@mongez/reinforcements";
|
|
7
7
|
import { RouteShorthandOptions } from "fastify";
|
|
8
8
|
|
|
9
|
-
//#region
|
|
9
|
+
//#region ../@warlock.js/core/src/router/types.d.ts
|
|
10
10
|
/**
|
|
11
11
|
* Middleware response
|
|
12
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/router/types.ts"],"mappings":";;;;;;;;;;;;KASY,kBAAA,GAAqB,gBAAgB;;AAAjD;;;;KAOY,UAAA,2BAAqC,OAAA,GAAU,OAAA;EAAA,CACxD,OAAA,EAAS,iBAAA,EAAmB,QAAA,EAAU,QAAA,GAAW,kBAAA;AAAA;AAAA,KAGxC,mBAAA;AAAA,KAEA,kBAAA,GAAqB,cAAA,SAAuB,aAAa;;;;KAKzD,cAAA;AAAA,KAEA,iBAAA,GAAoB,MAAM,UAAU,UAAA;AAAA,KAEpC,wBAAA,kBAA0C,OAAA,GAAU,OAAA;EAfzC;;;EAmBrB,QAAA,GAAW,UAAA,CAAW,QAAA;EAlBrB;;;;EAuBD,UAAA;EAvBoE;AAGtE;;EAwBE,MAAA,GAAS,eAAA;AAAA;AAAA,UAGM,yBAAA;EAzBL;;;EA6BV,OAAA,EAAS,OAAA;EA7B0D;AAKrE;;EA4BE,QAAA,EAAU,QAAA;EA5Bc;AAAA;AAE1B;EA8BE,OAAA,IAAW,OAAA,CAAQ,gBAAA;;;AA9BqC;EAkCxD,WAAA;EAhCkC;;;EAoClC,UAAA,SAAmB,OAAA,CAAQ,kBAAA,IAAsB,kBAAA;AAAA;AAAA,KAGvC,cAAA,kBAAgC,OAAA,GAAU,OAAA;EA1B3C;;;EAAA,CA8BR,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,QAAA,GAAW,gBAAA;EA3CW;;;EAgDpD,UAAA,GAAa,wBAAA,CAAyB,QAAA;EA5ChB;;;EAiDtB,WAAA;EAxCwB;AAAA;AAG1B;;EA2CE,cAAA,GAAiB,cAAA;AAAA;AAAA,UAGF,YAAA;EAlCI;;;EAsCnB,UAAA,GAAa,UAAA;EA9BoC;;;EAkCjD,oBAAA;EAlDS;;;EAsDT,IAAA;EA9CW;;;;EAmDX,WAAA;EA3C2B;;;EA+C3B,aAAA,GAAgB,qBAAqB;EA5C3B;;;;;EAkDV,KAAA;EA9C8B;;;EAkD9B,OAAA;EAlCiB;;;EAsCjB,MAAA;EA1D0C;;;EA8D1C,SAAA;IA1D8B;;;IA8D5B,GAAA;IAzDW;;;IA6DX,UAAA;IAlDe;;AAAc;IAsD7B,YAAA;EAAA;AAAA;AAAA,KAIQ,aAAA;;;;KAaA,KAAA,GAAQ,YAAA;EAnDlB;;;EAuDA,MAAA,EAAQ,aAAA;EAzCR;;;EA6CA,UAAA;EA7BE;;;EAiCF,IAAA;EAzBU;;;;EA8BV,OAAA,EAAS,cAAA;EAjBC;;;;;EAuBV,OAAA;EAUY;;;;;EAJZ,YAAA;EArBA;;;EAyBA,SAAA,GAAY,YAAA;AAAA;AAAA,KAGF,WAAA,oBAA+B,CAAA,IAAK,IAAA,CAAK,CAAA,EAAG,CAAA,IAAK,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,CAAA;;;;KAKjE,oBAAA;EALA;;;EASV,UAAA,GAAa,UAAU;EAT4B;;;EAanD,MAAA;EAb2E;;;;EAkB3E,IAAA;AAAA;;KAIU,aAAA;EAtBoC;;;EA0B9C,IAAA,GAAO,cAAA;EA1B4D;;;EA8BnE,GAAA,GAAM,cAAA;EA9BsE;AAK9E;;EA6BE,MAAA,GAAS,cAAA;EAzBc;;;EA6BvB,MAAA,GAAS,cAAA;EApBT;;AAAI;EAwBJ,KAAA,GAAQ,cAAA;EApBe;;;EAwBvB,MAAA,GAAS,cAAA;EAZA;;;EAgBT,UAAA,GAAa,cAAA;EAAA;;;EAIb,UAAA;IAgBU;;;IAZR,GAAA,GAAM,wBAAA;IAhCD;;;IAoCL,MAAA,GAAS,wBAAA;IA5BF;;;IAgCP,MAAA,GAAS,wBAAA;IAxBH;;;IA4BN,KAAA,GAAQ,wBAAA;EAAA;AAAA;AAAA,KAIA,YAAA;EACV,MAAA;EACA,IAAA;EACA,UAAA,EAAY,UAAU;EAXpB;;;EAeF,UAAA;AAAA"}
|
package/esm/socket/types.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/socket/types.ts"],"mappings":";;;;;AAKA;KAAY,aAAA;;;;EAIV,IAAA;EAIU;;AAAa;EAAvB,OAAA,GAAU,aAAa;AAAA"}
|
package/esm/socket/utils.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"utils.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/socket/utils.ts"],"mappings":";;;;;AAMA;iBAAgB,eAAA,IAAmB,MAAM"}
|
package/esm/socket/utils.mjs
CHANGED
package/esm/socket/utils.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"utils.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/socket/utils.ts"],"sourcesContent":["import { type Server } from \"socket.io\";\nimport { container } from \"../container\";\n\n/**\n * Get socket server instance\n */\nexport function getSocketServer(): Server | null {\n if (container.has(\"socket\")) {\n return container.get(\"socket\");\n }\n\n return null;\n}\n"],"mappings":";;;;;;AAMA,SAAgB,kBAAiC;CAC/C,IAAI,UAAU,IAAI,QAAQ,GACxB,OAAO,UAAU,IAAI,QAAQ;CAG/B,OAAO;AACT"}
|
package/esm/storage/config.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CloudStorageDriverOptions, LocalStorageDriverOptions, R2StorageDriverOptions, StorageConfigurations, StorageDriverConfig } from "./types.mjs";
|
|
2
2
|
import { S3ClientConfig } from "@aws-sdk/client-s3";
|
|
3
3
|
|
|
4
|
-
//#region
|
|
4
|
+
//#region ../@warlock.js/core/src/storage/config.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* Get storage configuration
|
|
7
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"config.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/storage/config.ts"],"mappings":";;;;;;AAaA;iBAAgB,aAAA,IAAiB,qBAAqB;AAAA,iBACtC,aAAA,UAAuB,GAAA,WAAc,CAAC;AAAA,iBACtC,aAAA,UAAuB,GAAA,UAAa,YAAA,EAAc,CAAA,GAAI,CAAC;AAAA,cAS1D,qBAAA;mBACM,yBAAA,KAA4B,mBAAA;iBAM9B,yBAAA,GAA4B,cAAA,KAAiB,mBAAA;gBAM9C,sBAAA,GAAyB,cAAA,KAAiB,mBAAA;oBAMtC,yBAAA,GAA4B,cAAA,KAAiB,mBAAA;AAAA"}
|
package/esm/storage/config.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { config } from "../config/config-getter.mjs";
|
|
2
2
|
import "../config/index.mjs";
|
|
3
3
|
|
|
4
|
-
//#region
|
|
4
|
+
//#region ../@warlock.js/core/src/storage/config.ts
|
|
5
5
|
function storageConfig(key, defaultValue) {
|
|
6
6
|
if (!key) return config.get("storage");
|
|
7
7
|
return config.get(`storage.${key}`, defaultValue);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"config.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/storage/config.ts"],"sourcesContent":["import type { S3ClientConfig } from \"@aws-sdk/client-s3\";\nimport { config } from \"../config\";\nimport type {\n CloudStorageDriverOptions,\n LocalStorageDriverOptions,\n R2StorageDriverOptions,\n StorageConfigurations,\n StorageDriverConfig,\n} from \"./types\";\n\n/**\n * Get storage configuration\n */\nexport function storageConfig(): StorageConfigurations;\nexport function storageConfig<T = any>(key: string): T;\nexport function storageConfig<T = any>(key: string, defaultValue: T): T;\nexport function storageConfig(key?: string, defaultValue?: any): any {\n if (!key) {\n return config.get(\"storage\");\n }\n\n return config.get(`storage.${key}`, defaultValue);\n}\n\nexport const storageConfigurations = {\n local: (options: LocalStorageDriverOptions): StorageDriverConfig => {\n return {\n driver: \"local\",\n ...options,\n };\n },\n aws: (options: CloudStorageDriverOptions & S3ClientConfig): StorageDriverConfig => {\n return {\n driver: \"s3\",\n ...options,\n };\n },\n r2: (options: R2StorageDriverOptions & S3ClientConfig): StorageDriverConfig => {\n return {\n driver: \"r2\",\n ...options,\n };\n },\n spaces: (options: CloudStorageDriverOptions & S3ClientConfig): StorageDriverConfig => {\n return {\n driver: \"spaces\",\n ...options,\n };\n },\n};\n"],"mappings":";;;;AAgBA,SAAgB,cAAc,KAAc,cAAyB;CACnE,IAAI,CAAC,KACH,OAAO,OAAO,IAAI,SAAS;CAG7B,OAAO,OAAO,IAAI,WAAW,OAAO,YAAY;AAClD;AAEA,MAAa,wBAAwB;CACnC,QAAQ,YAA4D;EAClE,OAAO;GACL,QAAQ;GACR,GAAG;EACL;CACF;CACA,MAAM,YAA6E;EACjF,OAAO;GACL,QAAQ;GACR,GAAG;EACL;CACF;CACA,KAAK,YAA0E;EAC7E,OAAO;GACL,QAAQ;GACR,GAAG;EACL;CACF;CACA,SAAS,YAA6E;EACpF,OAAO;GACL,QAAQ;GACR,GAAG;EACL;CACF;AACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StorageDriverContract } from "../types.mjs";
|
|
2
2
|
import { Context } from "@warlock.js/context";
|
|
3
3
|
|
|
4
|
-
//#region
|
|
4
|
+
//#region ../@warlock.js/core/src/storage/context/storage-driver-context.d.ts
|
|
5
5
|
type StorageDriverContextStore = {
|
|
6
6
|
driver?: StorageDriverContract;
|
|
7
7
|
prefix?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-driver-context.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"storage-driver-context.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/core/src/storage/context/storage-driver-context.ts"],"mappings":";;;;KAGY,yBAAA;EACV,MAAA,GAAS,qBAAA;EACT,MAAA;EACA,QAAA,GAAW,MAAM;AAAA;;;;;;;;AAAA;AACjB;;;;;;;;;;cAoBI,oBAAA,SAA6B,OAAA,CAAQ,yBAAA;EAAD;;;EAIjC,SAAA,IAAa,qBAAA;EAAA;;;EAOb,SAAA;EAiBA;;;EAVA,WAAA,IAAe,MAAA;EAYS;;;;;;EAFxB,SAAA,CACL,MAAA,EAAQ,qBAAA,EACR,OAAA;IAAY,MAAA;IAAiB,QAAA,GAAW,MAAA;EAAA;EAwC/B;;;;AAAiD;;;;EAvBrD,SAAA,CAAU,MAAA;;;;EAOV,WAAA;;;;EAOA,UAAA,IAAc,yBAAA;AAAA;AAAA,cASV,oBAAA,EAAoB,oBAA6B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-driver-context.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"storage-driver-context.mjs","names":[],"sources":["../../../../../../../../@warlock.js/core/src/storage/context/storage-driver-context.ts"],"sourcesContent":["import { Context, contextManager } from \"@warlock.js/context\";\nimport type { StorageDriverContract } from \"../types\";\n\nexport type StorageDriverContextStore = {\n driver?: StorageDriverContract;\n prefix?: string;\n metadata?: Record<string, any>;\n};\n\n/**\n * Storage Driver Context\n *\n * Manages the active storage driver and path prefix using AsyncLocalStorage.\n * Allows multi-tenant applications to switch drivers and isolate storage paths per request context.\n *\n * @example\n * ```typescript\n * // Set driver with tenant-specific prefix\n * storageDriverContext.setDriver(storage.getDriver(\"s3\"), {\n * prefix: \"tenant-123\",\n * metadata: { tenantId: \"123\" }\n * });\n *\n * // Or just set prefix for same driver\n * storageDriverContext.setPrefix(\"tenant-456\");\n * ```\n */\nclass StorageDriverContext extends Context<StorageDriverContextStore> {\n /**\n * Get the current storage driver\n */\n public getDriver(): StorageDriverContract | undefined {\n return this.get(\"driver\");\n }\n\n /**\n * Get the current path prefix (e.g., tenant-specific path)\n */\n public getPrefix(): string | undefined {\n return this.get(\"prefix\");\n }\n\n /**\n * Get context metadata (e.g., tenantId)\n */\n public getMetadata(): Record<string, any> | undefined {\n return this.get(\"metadata\");\n }\n\n /**\n * Set the active driver with optional prefix and metadata\n *\n * @param driver - Storage driver to use\n * @param options - Optional prefix and metadata\n */\n public setDriver(\n driver: StorageDriverContract,\n options?: { prefix?: string; metadata?: Record<string, any> },\n ): void {\n this.update({\n driver,\n prefix: options?.prefix,\n metadata: options?.metadata,\n });\n }\n\n /**\n * Set only the path prefix (keeps current driver)\n *\n * Useful for multi-tenant scenarios where you want to isolate\n * storage paths without changing the driver.\n *\n * @param prefix - Path prefix to prepend to all operations\n */\n public setPrefix(prefix: string): void {\n this.update({ prefix });\n }\n\n /**\n * Clear the prefix\n */\n public clearPrefix(): void {\n this.update({ prefix: undefined });\n }\n\n /**\n * Build the initial storage store with defaults\n */\n public buildStore(): StorageDriverContextStore {\n return {\n driver: undefined,\n prefix: undefined,\n metadata: undefined,\n };\n }\n}\n\nexport const storageDriverContext = new StorageDriverContext();\n\ncontextManager.register(\"storage\", storageDriverContext);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2BA,IAAM,uBAAN,cAAmC,QAAmC;;;;CAIpE,AAAO,YAA+C;EACpD,OAAO,KAAK,IAAI,QAAQ;CAC1B;;;;CAKA,AAAO,YAAgC;EACrC,OAAO,KAAK,IAAI,QAAQ;CAC1B;;;;CAKA,AAAO,cAA+C;EACpD,OAAO,KAAK,IAAI,UAAU;CAC5B;;;;;;;CAQA,AAAO,UACL,QACA,SACM;EACN,KAAK,OAAO;GACV;GACA,QAAQ,SAAS;GACjB,UAAU,SAAS;EACrB,CAAC;CACH;;;;;;;;;CAUA,AAAO,UAAU,QAAsB;EACrC,KAAK,OAAO,EAAE,OAAO,CAAC;CACxB;;;;CAKA,AAAO,cAAoB;EACzB,KAAK,OAAO,EAAE,QAAQ,OAAU,CAAC;CACnC;;;;CAKA,AAAO,aAAwC;EAC7C,OAAO;GACL,QAAQ;GACR,QAAQ;GACR,UAAU;EACZ;CACF;AACF;AAEA,MAAa,uBAAuB,IAAI,qBAAqB;AAE7D,eAAe,SAAS,WAAW,oBAAoB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CloudStorageDriverContract, CloudStorageDriverOptions, CloudStorageFileData, DeleteManyResult, FileVisibility, ListOptions, PresignedOptions, PresignedUploadOptions, PutOptions, StorageDriverType, StorageFileInfo } from "../types.mjs";
|
|
2
2
|
import { Readable } from "stream";
|
|
3
3
|
|
|
4
|
-
//#region
|
|
4
|
+
//#region ../@warlock.js/core/src/storage/drivers/cloud-driver.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* Load S3 modules lazily
|
|
7
7
|
*
|