@warlock.js/core 4.1.14 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/LICENSE +21 -0
- package/esm/application/app.d.mts +1 -1
- package/esm/application/app.d.mts.map +1 -1
- package/esm/application/app.mjs +1 -1
- package/esm/application/app.mjs.map +1 -1
- package/esm/application/application-config-types.d.mts +1 -1
- package/esm/application/application-config-types.d.mts.map +1 -1
- package/esm/application/application.d.mts +1 -1
- package/esm/application/application.d.mts.map +1 -1
- package/esm/application/application.mjs +1 -1
- package/esm/application/application.mjs.map +1 -1
- package/esm/benchmark/benchmark-snapshots.d.mts +1 -1
- package/esm/benchmark/benchmark-snapshots.d.mts.map +1 -1
- package/esm/benchmark/benchmark-snapshots.mjs +1 -1
- package/esm/benchmark/benchmark-snapshots.mjs.map +1 -1
- package/esm/benchmark/benchmark.d.mts +1 -1
- package/esm/benchmark/benchmark.d.mts.map +1 -1
- package/esm/benchmark/benchmark.mjs +1 -1
- package/esm/benchmark/benchmark.mjs.map +1 -1
- package/esm/benchmark/channels/console.channel.d.mts +1 -1
- package/esm/benchmark/channels/console.channel.d.mts.map +1 -1
- package/esm/benchmark/channels/console.channel.mjs +1 -1
- package/esm/benchmark/channels/console.channel.mjs.map +1 -1
- package/esm/benchmark/channels/noop.channel.d.mts +1 -1
- package/esm/benchmark/channels/noop.channel.d.mts.map +1 -1
- package/esm/benchmark/channels/noop.channel.mjs +1 -1
- package/esm/benchmark/channels/noop.channel.mjs.map +1 -1
- package/esm/benchmark/profiler.d.mts +1 -1
- package/esm/benchmark/profiler.d.mts.map +1 -1
- package/esm/benchmark/profiler.mjs +1 -1
- package/esm/benchmark/profiler.mjs.map +1 -1
- package/esm/benchmark/types.d.mts +1 -1
- package/esm/benchmark/types.d.mts.map +1 -1
- package/esm/bootstrap/setup.d.mts +1 -1
- package/esm/bootstrap/setup.d.mts.map +1 -1
- package/esm/bootstrap/setup.mjs +1 -1
- package/esm/bootstrap/setup.mjs.map +1 -1
- package/esm/bootstrap.d.mts +1 -1
- package/esm/bootstrap.d.mts.map +1 -1
- package/esm/bootstrap.mjs +1 -1
- package/esm/bootstrap.mjs.map +1 -1
- package/esm/cache/database-cache-driver.d.mts +1 -1
- package/esm/cache/database-cache-driver.d.mts.map +1 -1
- package/esm/cache/database-cache-driver.mjs +1 -1
- package/esm/cache/database-cache-driver.mjs.map +1 -1
- package/esm/cache/index.mjs +1 -1
- package/esm/cache/index.mjs.map +1 -1
- package/esm/cli/cli-command.d.mts +1 -1
- package/esm/cli/cli-command.d.mts.map +1 -1
- package/esm/cli/cli-command.mjs +1 -1
- package/esm/cli/cli-command.mjs.map +1 -1
- package/esm/cli/types.d.mts +1 -1
- package/esm/cli/types.d.mts.map +1 -1
- package/esm/config/config-getter.d.mts +1 -1
- package/esm/config/config-getter.d.mts.map +1 -1
- package/esm/config/config-getter.mjs +1 -1
- package/esm/config/config-getter.mjs.map +1 -1
- package/esm/config/config-handlers.d.mts +1 -1
- package/esm/config/config-handlers.d.mts.map +1 -1
- package/esm/config/config-handlers.mjs +1 -1
- package/esm/config/config-handlers.mjs.map +1 -1
- package/esm/config/config-loader.d.mts +1 -1
- package/esm/config/config-loader.d.mts.map +1 -1
- package/esm/config/config-loader.mjs +1 -1
- package/esm/config/config-loader.mjs.map +1 -1
- package/esm/config/config-manager.mjs +1 -1
- package/esm/config/config-manager.mjs.map +1 -1
- package/esm/config/config-special-handlers.d.mts +1 -1
- package/esm/config/config-special-handlers.d.mts.map +1 -1
- package/esm/config/config-special-handlers.mjs +1 -1
- package/esm/config/config-special-handlers.mjs.map +1 -1
- package/esm/config/load-config-files.mjs +1 -1
- package/esm/config/load-config-files.mjs.map +1 -1
- package/esm/config/types.d.mts +1 -1
- package/esm/config/types.d.mts.map +1 -1
- package/esm/connectors/access-connector.d.mts +39 -0
- package/esm/connectors/access-connector.d.mts.map +1 -0
- package/esm/connectors/access-connector.mjs +54 -0
- package/esm/connectors/access-connector.mjs.map +1 -0
- package/esm/connectors/base-connector.d.mts +1 -1
- package/esm/connectors/base-connector.d.mts.map +1 -1
- package/esm/connectors/base-connector.mjs +1 -1
- package/esm/connectors/base-connector.mjs.map +1 -1
- package/esm/connectors/cache-connector.d.mts +1 -1
- package/esm/connectors/cache-connector.d.mts.map +1 -1
- package/esm/connectors/cache-connector.mjs +1 -1
- package/esm/connectors/cache-connector.mjs.map +1 -1
- package/esm/connectors/connectors-manager.d.mts +1 -1
- package/esm/connectors/connectors-manager.d.mts.map +1 -1
- package/esm/connectors/connectors-manager.mjs +5 -1
- package/esm/connectors/connectors-manager.mjs.map +1 -1
- package/esm/connectors/database-connector.d.mts +1 -1
- package/esm/connectors/database-connector.d.mts.map +1 -1
- package/esm/connectors/database-connector.mjs +1 -1
- package/esm/connectors/database-connector.mjs.map +1 -1
- package/esm/connectors/herald-connector.d.mts +1 -1
- package/esm/connectors/herald-connector.d.mts.map +1 -1
- package/esm/connectors/herald-connector.mjs +2 -2
- package/esm/connectors/herald-connector.mjs.map +1 -1
- package/esm/connectors/http-connector.d.mts +1 -1
- package/esm/connectors/http-connector.d.mts.map +1 -1
- package/esm/connectors/http-connector.mjs +3 -1
- package/esm/connectors/http-connector.mjs.map +1 -1
- package/esm/connectors/index.d.mts +2 -0
- package/esm/connectors/index.mjs +2 -0
- package/esm/connectors/logger-connector.d.mts +1 -1
- package/esm/connectors/logger-connector.d.mts.map +1 -1
- package/esm/connectors/logger-connector.mjs +1 -1
- package/esm/connectors/logger-connector.mjs.map +1 -1
- package/esm/connectors/mail-connector.d.mts +1 -1
- package/esm/connectors/mail-connector.d.mts.map +1 -1
- package/esm/connectors/mail-connector.mjs +1 -1
- package/esm/connectors/mail-connector.mjs.map +1 -1
- package/esm/connectors/notifications-connector.d.mts +38 -0
- package/esm/connectors/notifications-connector.d.mts.map +1 -0
- package/esm/connectors/notifications-connector.mjs +51 -0
- package/esm/connectors/notifications-connector.mjs.map +1 -0
- package/esm/connectors/socket-connector.d.mts +1 -1
- package/esm/connectors/socket-connector.d.mts.map +1 -1
- package/esm/connectors/socket-connector.mjs +1 -1
- package/esm/connectors/socket-connector.mjs.map +1 -1
- package/esm/connectors/storage.connector.d.mts +1 -1
- package/esm/connectors/storage.connector.d.mts.map +1 -1
- package/esm/connectors/storage.connector.mjs +1 -1
- package/esm/connectors/storage.connector.mjs.map +1 -1
- package/esm/connectors/types.d.mts +5 -3
- package/esm/connectors/types.d.mts.map +1 -1
- package/esm/connectors/types.mjs +3 -1
- package/esm/connectors/types.mjs.map +1 -1
- package/esm/container/index.d.mts +1 -1
- package/esm/container/index.d.mts.map +1 -1
- package/esm/container/index.mjs +1 -1
- package/esm/container/index.mjs.map +1 -1
- package/esm/database/models/database-log/database-log.d.mts +1 -1
- package/esm/database/models/database-log/database-log.d.mts.map +1 -1
- package/esm/database/models/database-log/database-log.mjs +1 -1
- package/esm/database/models/database-log/database-log.mjs.map +1 -1
- package/esm/database/seeds/seeder.d.mts +1 -1
- package/esm/database/seeds/seeder.d.mts.map +1 -1
- package/esm/database/seeds/seeder.mjs +1 -1
- package/esm/database/seeds/seeder.mjs.map +1 -1
- package/esm/database/seeds/types.d.mts +1 -1
- package/esm/database/seeds/types.d.mts.map +1 -1
- package/esm/database/utils.d.mts +1 -1
- package/esm/database/utils.d.mts.map +1 -1
- package/esm/database/utils.mjs +1 -1
- package/esm/database/utils.mjs.map +1 -1
- package/esm/dev-server/create-worker.mjs +1 -1
- package/esm/dev-server/create-worker.mjs.map +1 -1
- package/esm/dev-server/dependency-graph.d.mts +1 -1
- package/esm/dev-server/dependency-graph.d.mts.map +1 -1
- package/esm/dev-server/dependency-graph.mjs +1 -1
- package/esm/dev-server/dependency-graph.mjs.map +1 -1
- package/esm/dev-server/dev-logger.mjs +2 -13
- package/esm/dev-server/dev-logger.mjs.map +1 -1
- package/esm/dev-server/events.mjs +1 -1
- package/esm/dev-server/events.mjs.map +1 -1
- package/esm/dev-server/file-event-handler.mjs +1 -1
- package/esm/dev-server/file-event-handler.mjs.map +1 -1
- package/esm/dev-server/file-manager.d.mts +1 -1
- package/esm/dev-server/file-manager.d.mts.map +1 -1
- package/esm/dev-server/file-manager.mjs +1 -1
- package/esm/dev-server/file-manager.mjs.map +1 -1
- package/esm/dev-server/file-operations.d.mts +1 -1
- package/esm/dev-server/file-operations.d.mts.map +1 -1
- package/esm/dev-server/file-operations.mjs +1 -1
- package/esm/dev-server/file-operations.mjs.map +1 -1
- package/esm/dev-server/files-orchestrator.d.mts +1 -1
- package/esm/dev-server/files-orchestrator.d.mts.map +1 -1
- package/esm/dev-server/files-orchestrator.mjs +1 -1
- package/esm/dev-server/files-orchestrator.mjs.map +1 -1
- package/esm/dev-server/files-watcher.d.mts +1 -1
- package/esm/dev-server/files-watcher.d.mts.map +1 -1
- package/esm/dev-server/files-watcher.mjs +1 -1
- package/esm/dev-server/files-watcher.mjs.map +1 -1
- package/esm/dev-server/flags.mjs +1 -1
- package/esm/dev-server/flags.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/base-health-checker.d.mts +1 -1
- package/esm/dev-server/health-checker/checkers/base-health-checker.d.mts.map +1 -1
- package/esm/dev-server/health-checker/checkers/base-health-checker.mjs +1 -1
- package/esm/dev-server/health-checker/checkers/base-health-checker.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.d.mts +1 -1
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.d.mts.map +1 -1
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs +1 -1
- package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.d.mts +1 -1
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.d.mts.map +1 -1
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs +1 -1
- package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs.map +1 -1
- package/esm/dev-server/health-checker/file-health-checker.contract.d.mts +1 -1
- package/esm/dev-server/health-checker/file-health-checker.contract.d.mts.map +1 -1
- package/esm/dev-server/health-checker/file-health-result.d.mts +1 -1
- package/esm/dev-server/health-checker/file-health-result.d.mts.map +1 -1
- package/esm/dev-server/health-checker/file-health-result.mjs +1 -1
- package/esm/dev-server/health-checker/file-health-result.mjs.map +1 -1
- package/esm/dev-server/health-checker/files-healthcare.manager.d.mts +1 -1
- package/esm/dev-server/health-checker/files-healthcare.manager.d.mts.map +1 -1
- package/esm/dev-server/health-checker/files-healthcare.manager.mjs +1 -1
- package/esm/dev-server/health-checker/files-healthcare.manager.mjs.map +1 -1
- package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs +1 -1
- package/esm/dev-server/health-checker/workers/eslint-health.worker.mjs.map +1 -1
- package/esm/dev-server/health-checker/workers/ts-health.worker.mjs +1 -1
- package/esm/dev-server/health-checker/workers/ts-health.worker.mjs.map +1 -1
- package/esm/dev-server/loader/build-transpile-init.mjs +1 -1
- package/esm/dev-server/loader/build-transpile-init.mjs.map +1 -1
- package/esm/dev-server/loader/register-loader.mjs +1 -1
- package/esm/dev-server/loader/register-loader.mjs.map +1 -1
- package/esm/dev-server/loader/transpile-cache.mjs +2 -164
- package/esm/dev-server/loader/transpile-cache.mjs.map +1 -1
- package/esm/dev-server/manifest-manager.d.mts +1 -1
- package/esm/dev-server/manifest-manager.d.mts.map +1 -1
- package/esm/dev-server/manifest-manager.mjs +1 -1
- package/esm/dev-server/manifest-manager.mjs.map +1 -1
- package/esm/dev-server/module-loader.d.mts +1 -1
- package/esm/dev-server/module-loader.d.mts.map +1 -1
- package/esm/dev-server/module-loader.mjs +1 -1
- package/esm/dev-server/module-loader.mjs.map +1 -1
- package/esm/dev-server/package-json-manager.mjs +1 -1
- package/esm/dev-server/package-json-manager.mjs.map +1 -1
- package/esm/dev-server/parse-imports.mjs +1 -1
- package/esm/dev-server/parse-imports.mjs.map +1 -1
- package/esm/dev-server/path.mjs +1 -1
- package/esm/dev-server/path.mjs.map +1 -1
- package/esm/dev-server/special-files-collector.d.mts +1 -1
- package/esm/dev-server/special-files-collector.d.mts.map +1 -1
- package/esm/dev-server/special-files-collector.mjs +1 -1
- package/esm/dev-server/special-files-collector.mjs.map +1 -1
- package/esm/dev-server/tsconfig-manager.mjs +1 -1
- package/esm/dev-server/tsconfig-manager.mjs.map +1 -1
- package/esm/dev-server/types.d.mts +1 -1
- package/esm/dev-server/types.d.mts.map +1 -1
- package/esm/dev-server/utils.mjs +1 -1
- package/esm/dev-server/utils.mjs.map +1 -1
- package/esm/encryption/encrypt.d.mts +1 -1
- package/esm/encryption/encrypt.d.mts.map +1 -1
- package/esm/encryption/encrypt.mjs +1 -1
- package/esm/encryption/encrypt.mjs.map +1 -1
- package/esm/encryption/hash.d.mts +1 -1
- package/esm/encryption/hash.d.mts.map +1 -1
- package/esm/encryption/hash.mjs +1 -1
- package/esm/encryption/hash.mjs.map +1 -1
- package/esm/encryption/password.d.mts +1 -1
- package/esm/encryption/password.d.mts.map +1 -1
- package/esm/encryption/password.mjs +1 -1
- package/esm/encryption/password.mjs.map +1 -1
- package/esm/encryption/types.d.mts +1 -1
- package/esm/encryption/types.d.mts.map +1 -1
- package/esm/http/config.d.mts +1 -1
- package/esm/http/config.d.mts.map +1 -1
- package/esm/http/config.mjs +1 -1
- package/esm/http/config.mjs.map +1 -1
- package/esm/http/context/request-context.d.mts +1 -1
- package/esm/http/context/request-context.d.mts.map +1 -1
- package/esm/http/context/request-context.mjs +1 -1
- package/esm/http/context/request-context.mjs.map +1 -1
- package/esm/http/createHttpApplication.d.mts +1 -1
- package/esm/http/createHttpApplication.d.mts.map +1 -1
- package/esm/http/createHttpApplication.mjs +1 -1
- package/esm/http/createHttpApplication.mjs.map +1 -1
- package/esm/http/database/RequestLog.d.mts +1 -1
- package/esm/http/database/RequestLog.d.mts.map +1 -1
- package/esm/http/database/RequestLog.mjs +1 -1
- package/esm/http/database/RequestLog.mjs.map +1 -1
- package/esm/http/error-codes.d.mts +1 -1
- package/esm/http/error-codes.d.mts.map +1 -1
- package/esm/http/error-codes.mjs +1 -1
- package/esm/http/error-codes.mjs.map +1 -1
- package/esm/http/errors/errors.d.mts +1 -1
- package/esm/http/errors/errors.d.mts.map +1 -1
- package/esm/http/errors/errors.mjs +1 -1
- package/esm/http/errors/errors.mjs.map +1 -1
- package/esm/http/events.d.mts +1 -1
- package/esm/http/events.d.mts.map +1 -1
- package/esm/http/events.mjs +1 -1
- package/esm/http/events.mjs.map +1 -1
- package/esm/http/middleware/cache-response-middleware.d.mts +1 -1
- package/esm/http/middleware/cache-response-middleware.d.mts.map +1 -1
- package/esm/http/middleware/cache-response-middleware.mjs +1 -1
- package/esm/http/middleware/cache-response-middleware.mjs.map +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.d.mts +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.d.mts.map +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.mjs +1 -1
- package/esm/http/middleware/concurrency-limit.middleware.mjs.map +1 -1
- package/esm/http/middleware/idempotency.middleware.d.mts +1 -1
- package/esm/http/middleware/idempotency.middleware.d.mts.map +1 -1
- package/esm/http/middleware/idempotency.middleware.mjs +1 -1
- package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
- package/esm/http/middleware/inject-request-context.d.mts +1 -1
- package/esm/http/middleware/inject-request-context.d.mts.map +1 -1
- package/esm/http/middleware/inject-request-context.mjs +1 -1
- package/esm/http/middleware/inject-request-context.mjs.map +1 -1
- package/esm/http/middleware/ip-filter.middleware.d.mts +1 -1
- package/esm/http/middleware/ip-filter.middleware.d.mts.map +1 -1
- package/esm/http/middleware/ip-filter.middleware.mjs +1 -1
- package/esm/http/middleware/ip-filter.middleware.mjs.map +1 -1
- package/esm/http/middleware/maintenance.middleware.d.mts +1 -1
- package/esm/http/middleware/maintenance.middleware.d.mts.map +1 -1
- package/esm/http/middleware/maintenance.middleware.mjs +1 -1
- package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
- package/esm/http/middleware/max-body-size.middleware.d.mts +1 -1
- package/esm/http/middleware/max-body-size.middleware.d.mts.map +1 -1
- package/esm/http/middleware/max-body-size.middleware.mjs +1 -1
- package/esm/http/middleware/max-body-size.middleware.mjs.map +1 -1
- package/esm/http/middleware/middleware-list.d.mts +1 -1
- package/esm/http/middleware/middleware-list.d.mts.map +1 -1
- package/esm/http/middleware/middleware-list.mjs +1 -1
- package/esm/http/middleware/middleware-list.mjs.map +1 -1
- package/esm/http/middleware/rate-limit.middleware.d.mts +1 -1
- package/esm/http/middleware/rate-limit.middleware.d.mts.map +1 -1
- package/esm/http/middleware/rate-limit.middleware.mjs +1 -1
- package/esm/http/middleware/rate-limit.middleware.mjs.map +1 -1
- package/esm/http/middleware/utils/cidr-match.d.mts +1 -1
- package/esm/http/middleware/utils/cidr-match.d.mts.map +1 -1
- package/esm/http/middleware/utils/cidr-match.mjs +1 -1
- package/esm/http/middleware/utils/cidr-match.mjs.map +1 -1
- package/esm/http/middleware/utils/idempotency-key.d.mts +1 -1
- package/esm/http/middleware/utils/idempotency-key.d.mts.map +1 -1
- package/esm/http/middleware/utils/idempotency-key.mjs +1 -1
- package/esm/http/middleware/utils/idempotency-key.mjs.map +1 -1
- package/esm/http/middleware/utils/parse-size.d.mts +1 -1
- package/esm/http/middleware/utils/parse-size.d.mts.map +1 -1
- package/esm/http/middleware/utils/parse-size.mjs +1 -1
- package/esm/http/middleware/utils/parse-size.mjs.map +1 -1
- package/esm/http/plugins.d.mts +1 -1
- package/esm/http/plugins.d.mts.map +1 -1
- package/esm/http/plugins.mjs +1 -1
- package/esm/http/plugins.mjs.map +1 -1
- package/esm/http/request-controller.d.mts +1 -1
- package/esm/http/request-controller.d.mts.map +1 -1
- package/esm/http/request-controller.mjs +1 -1
- package/esm/http/request-controller.mjs.map +1 -1
- package/esm/http/request.d.mts +1 -1
- package/esm/http/request.d.mts.map +1 -1
- package/esm/http/request.mjs +1 -1
- package/esm/http/request.mjs.map +1 -1
- package/esm/http/response.d.mts +4 -4
- package/esm/http/response.d.mts.map +1 -1
- package/esm/http/response.mjs +1 -1
- package/esm/http/response.mjs.map +1 -1
- package/esm/http/server.d.mts +1 -1
- package/esm/http/server.d.mts.map +1 -1
- package/esm/http/server.mjs +1 -1
- package/esm/http/server.mjs.map +1 -1
- package/esm/http/types.d.mts +1 -1
- package/esm/http/types.d.mts.map +1 -1
- package/esm/http/uploaded-file.d.mts +1 -1
- package/esm/http/uploaded-file.d.mts.map +1 -1
- package/esm/http/uploaded-file.mjs +1 -1
- package/esm/http/uploaded-file.mjs.map +1 -1
- package/esm/http/uploads-config.d.mts +1 -1
- package/esm/http/uploads-config.d.mts.map +1 -1
- package/esm/http/uploads-config.mjs +1 -1
- package/esm/http/uploads-config.mjs.map +1 -1
- package/esm/http/uploads-types.d.mts +1 -1
- package/esm/http/uploads-types.d.mts.map +1 -1
- package/esm/image/image.d.mts +1 -1
- package/esm/image/image.d.mts.map +1 -1
- package/esm/image/image.mjs +1 -1
- package/esm/image/image.mjs.map +1 -1
- package/esm/index.d.mts +5 -2
- package/esm/index.mjs +6 -2
- package/esm/logger/logger.d.mts +1 -1
- package/esm/logger/logger.d.mts.map +1 -1
- package/esm/logger/logger.mjs +1 -1
- package/esm/logger/logger.mjs.map +1 -1
- package/esm/logger/types.d.mts +1 -1
- package/esm/logger/types.d.mts.map +1 -1
- package/esm/mail/config.d.mts +1 -1
- package/esm/mail/config.d.mts.map +1 -1
- package/esm/mail/config.mjs +1 -1
- package/esm/mail/config.mjs.map +1 -1
- package/esm/mail/events.d.mts +1 -1
- package/esm/mail/events.d.mts.map +1 -1
- package/esm/mail/events.mjs +1 -1
- package/esm/mail/events.mjs.map +1 -1
- package/esm/mail/mail.d.mts +1 -1
- package/esm/mail/mail.d.mts.map +1 -1
- package/esm/mail/mail.mjs +1 -1
- package/esm/mail/mail.mjs.map +1 -1
- package/esm/mail/mailer-pool.d.mts +1 -1
- package/esm/mail/mailer-pool.d.mts.map +1 -1
- package/esm/mail/mailer-pool.mjs +1 -1
- package/esm/mail/mailer-pool.mjs.map +1 -1
- package/esm/mail/react-mail.d.mts +1 -1
- package/esm/mail/react-mail.d.mts.map +1 -1
- package/esm/mail/react-mail.mjs +1 -1
- package/esm/mail/react-mail.mjs.map +1 -1
- package/esm/mail/send-mail.d.mts +1 -1
- package/esm/mail/send-mail.d.mts.map +1 -1
- package/esm/mail/send-mail.mjs +1 -1
- package/esm/mail/send-mail.mjs.map +1 -1
- package/esm/mail/test-mailbox.d.mts +1 -1
- package/esm/mail/test-mailbox.d.mts.map +1 -1
- package/esm/mail/test-mailbox.mjs +1 -1
- package/esm/mail/test-mailbox.mjs.map +1 -1
- package/esm/mail/types.d.mts +1 -1
- package/esm/mail/types.d.mts.map +1 -1
- package/esm/mail/types.mjs +1 -1
- package/esm/mail/types.mjs.map +1 -1
- package/esm/react/index.d.mts +1 -1
- package/esm/react/index.d.mts.map +1 -1
- package/esm/react/index.mjs +1 -1
- package/esm/react/index.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.d.mts +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.d.mts.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.mjs +1 -1
- package/esm/repositories/adapters/cascade/cascade-adapter.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.mjs +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.mjs.map +1 -1
- package/esm/repositories/adapters/cascade/filter-applicator.mjs +1 -1
- package/esm/repositories/adapters/cascade/filter-applicator.mjs.map +1 -1
- package/esm/repositories/contracts/query-builder.contract.d.mts +1 -1
- package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
- package/esm/repositories/contracts/repository-adapter.contract.d.mts +1 -1
- package/esm/repositories/contracts/repository-adapter.contract.d.mts.map +1 -1
- package/esm/repositories/contracts/types.d.mts +1 -1
- package/esm/repositories/contracts/types.d.mts.map +1 -1
- package/esm/repositories/repository.manager.d.mts +1 -1
- package/esm/repositories/repository.manager.d.mts.map +1 -1
- package/esm/repositories/repository.manager.mjs +1 -1
- package/esm/repositories/repository.manager.mjs.map +1 -1
- package/esm/resource/define-resource.d.mts +1 -1
- package/esm/resource/define-resource.d.mts.map +1 -1
- package/esm/resource/define-resource.mjs +1 -1
- package/esm/resource/define-resource.mjs.map +1 -1
- package/esm/resource/register-resource.d.mts +1 -1
- package/esm/resource/register-resource.d.mts.map +1 -1
- package/esm/resource/register-resource.mjs +1 -1
- package/esm/resource/register-resource.mjs.map +1 -1
- package/esm/resource/resource-field-builder.d.mts +1 -1
- package/esm/resource/resource-field-builder.d.mts.map +1 -1
- package/esm/resource/resource-field-builder.mjs +1 -1
- package/esm/resource/resource-field-builder.mjs.map +1 -1
- package/esm/resource/resource.d.mts +1 -1
- package/esm/resource/resource.d.mts.map +1 -1
- package/esm/resource/resource.mjs +1 -1
- package/esm/resource/resource.mjs.map +1 -1
- package/esm/resource/types.d.mts +1 -1
- package/esm/resource/types.d.mts.map +1 -1
- package/esm/restful/restful.d.mts +1 -1
- package/esm/restful/restful.d.mts.map +1 -1
- package/esm/restful/restful.mjs +1 -1
- package/esm/restful/restful.mjs.map +1 -1
- package/esm/router/route-builder.d.mts +1 -1
- package/esm/router/route-builder.d.mts.map +1 -1
- package/esm/router/route-builder.mjs +1 -1
- package/esm/router/route-builder.mjs.map +1 -1
- package/esm/router/route-registry.mjs +1 -1
- package/esm/router/route-registry.mjs.map +1 -1
- package/esm/router/router.d.mts +1 -1
- package/esm/router/router.d.mts.map +1 -1
- package/esm/router/router.mjs +1 -1
- package/esm/router/router.mjs.map +1 -1
- package/esm/router/types.d.mts +1 -1
- package/esm/router/types.d.mts.map +1 -1
- package/esm/socket/types.d.mts +1 -1
- package/esm/socket/types.d.mts.map +1 -1
- package/esm/socket/utils.d.mts +1 -1
- package/esm/socket/utils.d.mts.map +1 -1
- package/esm/socket/utils.mjs +1 -1
- package/esm/socket/utils.mjs.map +1 -1
- package/esm/storage/config.d.mts +1 -1
- package/esm/storage/config.d.mts.map +1 -1
- package/esm/storage/config.mjs +1 -1
- package/esm/storage/config.mjs.map +1 -1
- package/esm/storage/context/storage-driver-context.d.mts +1 -1
- package/esm/storage/context/storage-driver-context.d.mts.map +1 -1
- package/esm/storage/context/storage-driver-context.mjs +1 -1
- package/esm/storage/context/storage-driver-context.mjs.map +1 -1
- package/esm/storage/drivers/cloud-driver.d.mts +1 -1
- package/esm/storage/drivers/cloud-driver.d.mts.map +1 -1
- package/esm/storage/drivers/cloud-driver.mjs +1 -1
- package/esm/storage/drivers/cloud-driver.mjs.map +1 -1
- package/esm/storage/drivers/do-spaces-driver.d.mts +1 -1
- package/esm/storage/drivers/do-spaces-driver.d.mts.map +1 -1
- package/esm/storage/drivers/do-spaces-driver.mjs +1 -1
- package/esm/storage/drivers/do-spaces-driver.mjs.map +1 -1
- package/esm/storage/drivers/local-driver.d.mts +1 -1
- package/esm/storage/drivers/local-driver.d.mts.map +1 -1
- package/esm/storage/drivers/local-driver.mjs +1 -1
- package/esm/storage/drivers/local-driver.mjs.map +1 -1
- package/esm/storage/drivers/r2-driver.d.mts +1 -1
- package/esm/storage/drivers/r2-driver.d.mts.map +1 -1
- package/esm/storage/drivers/r2-driver.mjs +1 -1
- package/esm/storage/drivers/r2-driver.mjs.map +1 -1
- package/esm/storage/drivers/s3-driver.d.mts +1 -1
- package/esm/storage/drivers/s3-driver.d.mts.map +1 -1
- package/esm/storage/drivers/s3-driver.mjs +1 -1
- package/esm/storage/drivers/s3-driver.mjs.map +1 -1
- package/esm/storage/scoped-storage.d.mts +1 -1
- package/esm/storage/scoped-storage.d.mts.map +1 -1
- package/esm/storage/scoped-storage.mjs +1 -1
- package/esm/storage/scoped-storage.mjs.map +1 -1
- package/esm/storage/storage-file.d.mts +1 -1
- package/esm/storage/storage-file.d.mts.map +1 -1
- package/esm/storage/storage-file.mjs +1 -1
- package/esm/storage/storage-file.mjs.map +1 -1
- package/esm/storage/storage.d.mts +1 -1
- package/esm/storage/storage.d.mts.map +1 -1
- package/esm/storage/storage.mjs +1 -1
- package/esm/storage/storage.mjs.map +1 -1
- package/esm/storage/types.d.mts +1 -1
- package/esm/storage/types.d.mts.map +1 -1
- package/esm/storage/utils/mime.d.mts +1 -1
- package/esm/storage/utils/mime.d.mts.map +1 -1
- package/esm/storage/utils/mime.mjs +1 -1
- package/esm/storage/utils/mime.mjs.map +1 -1
- package/esm/tests/start-http-development-server.d.mts +1 -1
- package/esm/tests/start-http-development-server.d.mts.map +1 -1
- package/esm/tests/start-http-development-server.mjs +4 -2
- package/esm/tests/start-http-development-server.mjs.map +1 -1
- package/esm/tests/test-helpers.d.mts +1 -1
- package/esm/tests/test-helpers.d.mts.map +1 -1
- package/esm/tests/test-helpers.mjs +1 -1
- package/esm/tests/test-helpers.mjs.map +1 -1
- package/esm/tests/vitest-setup.d.mts +1 -1
- package/esm/tests/vitest-setup.d.mts.map +1 -1
- package/esm/tests/vitest-setup.mjs +1 -1
- package/esm/tests/vitest-setup.mjs.map +1 -1
- package/esm/use-cases/types.d.mts +1 -1
- package/esm/use-cases/types.d.mts.map +1 -1
- package/esm/use-cases/use-case-broadcast.d.mts +1 -1
- package/esm/use-cases/use-case-broadcast.d.mts.map +1 -1
- package/esm/use-cases/use-case-broadcast.mjs +1 -1
- package/esm/use-cases/use-case-broadcast.mjs.map +1 -1
- package/esm/use-cases/use-case-events.d.mts +1 -1
- package/esm/use-cases/use-case-events.d.mts.map +1 -1
- package/esm/use-cases/use-case-events.mjs +1 -1
- package/esm/use-cases/use-case-events.mjs.map +1 -1
- package/esm/use-cases/use-case-pipeline.d.mts +1 -1
- package/esm/use-cases/use-case-pipeline.d.mts.map +1 -1
- package/esm/use-cases/use-case-pipeline.mjs +1 -1
- package/esm/use-cases/use-case-pipeline.mjs.map +1 -1
- package/esm/use-cases/use-case.d.mts +1 -1
- package/esm/use-cases/use-case.d.mts.map +1 -1
- package/esm/use-cases/use-case.errors.d.mts +1 -1
- package/esm/use-cases/use-case.errors.d.mts.map +1 -1
- package/esm/use-cases/use-case.errors.mjs +1 -1
- package/esm/use-cases/use-case.errors.mjs.map +1 -1
- package/esm/use-cases/use-case.mjs +1 -1
- package/esm/use-cases/use-case.mjs.map +1 -1
- package/esm/use-cases/use-cases-registry.d.mts +1 -1
- package/esm/use-cases/use-cases-registry.d.mts.map +1 -1
- package/esm/use-cases/use-cases-registry.mjs +1 -1
- package/esm/use-cases/use-cases-registry.mjs.map +1 -1
- package/esm/utils/app-log.d.mts +1 -1
- package/esm/utils/app-log.d.mts.map +1 -1
- package/esm/utils/app-log.mjs +1 -1
- package/esm/utils/app-log.mjs.map +1 -1
- package/esm/utils/database-log.d.mts +1 -1
- package/esm/utils/database-log.d.mts.map +1 -1
- package/esm/utils/database-log.mjs +1 -1
- package/esm/utils/database-log.mjs.map +1 -1
- package/esm/utils/environment.d.mts +1 -1
- package/esm/utils/environment.d.mts.map +1 -1
- package/esm/utils/environment.mjs +1 -1
- package/esm/utils/environment.mjs.map +1 -1
- package/esm/utils/framework-vesion.mjs +2 -11
- package/esm/utils/framework-vesion.mjs.map +1 -1
- package/esm/utils/get-localized.d.mts +1 -1
- package/esm/utils/get-localized.d.mts.map +1 -1
- package/esm/utils/get-localized.mjs +1 -1
- package/esm/utils/get-localized.mjs.map +1 -1
- package/esm/utils/paths.d.mts +1 -1
- package/esm/utils/paths.d.mts.map +1 -1
- package/esm/utils/paths.mjs +1 -1
- package/esm/utils/paths.mjs.map +1 -1
- package/esm/utils/promise-all-object.d.mts +1 -1
- package/esm/utils/promise-all-object.d.mts.map +1 -1
- package/esm/utils/promise-all-object.mjs +1 -1
- package/esm/utils/promise-all-object.mjs.map +1 -1
- package/esm/utils/queue.d.mts +1 -1
- package/esm/utils/queue.d.mts.map +1 -1
- package/esm/utils/queue.mjs +1 -1
- package/esm/utils/queue.mjs.map +1 -1
- package/esm/utils/sleep.d.mts +1 -1
- package/esm/utils/sleep.d.mts.map +1 -1
- package/esm/utils/sleep.mjs +1 -1
- package/esm/utils/sleep.mjs.map +1 -1
- package/esm/utils/sluggable.d.mts +1 -1
- package/esm/utils/sluggable.d.mts.map +1 -1
- package/esm/utils/sluggable.mjs +1 -1
- package/esm/utils/sluggable.mjs.map +1 -1
- package/esm/utils/to-json.d.mts +1 -1
- package/esm/utils/to-json.d.mts.map +1 -1
- package/esm/utils/to-json.mjs +1 -1
- package/esm/utils/to-json.mjs.map +1 -1
- package/esm/utils/types.d.mts +1 -1
- package/esm/utils/types.d.mts.map +1 -1
- package/esm/utils/urls.d.mts +1 -1
- package/esm/utils/urls.d.mts.map +1 -1
- package/esm/utils/urls.mjs +1 -1
- package/esm/utils/urls.mjs.map +1 -1
- package/esm/validation/database/exists-except-current-id.d.mts +1 -1
- package/esm/validation/database/exists-except-current-id.d.mts.map +1 -1
- package/esm/validation/database/exists-except-current-id.mjs +1 -1
- package/esm/validation/database/exists-except-current-id.mjs.map +1 -1
- package/esm/validation/database/exists-except-current-user.d.mts +1 -1
- package/esm/validation/database/exists-except-current-user.d.mts.map +1 -1
- package/esm/validation/database/exists-except-current-user.mjs +1 -1
- package/esm/validation/database/exists-except-current-user.mjs.map +1 -1
- package/esm/validation/database/types.d.mts +1 -1
- package/esm/validation/database/types.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-id.d.mts +1 -1
- package/esm/validation/database/unique-except-current-id.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-id.mjs +1 -1
- package/esm/validation/database/unique-except-current-id.mjs.map +1 -1
- package/esm/validation/database/unique-except-current-user.d.mts +1 -1
- package/esm/validation/database/unique-except-current-user.d.mts.map +1 -1
- package/esm/validation/database/unique-except-current-user.mjs +1 -1
- package/esm/validation/database/unique-except-current-user.mjs.map +1 -1
- package/esm/validation/file/file.d.mts +1 -1
- package/esm/validation/file/file.d.mts.map +1 -1
- package/esm/validation/file/file.mjs +1 -1
- package/esm/validation/file/file.mjs.map +1 -1
- package/esm/validation/init.mjs +1 -1
- package/esm/validation/init.mjs.map +1 -1
- package/esm/validation/plugins/database-plugin.mjs +1 -1
- package/esm/validation/plugins/database-plugin.mjs.map +1 -1
- package/esm/validation/plugins/file-plugin.mjs +1 -1
- package/esm/validation/plugins/file-plugin.mjs.map +1 -1
- package/esm/validation/plugins/localized-plugin.mjs +1 -1
- package/esm/validation/plugins/localized-plugin.mjs.map +1 -1
- package/esm/validation/types.d.mts +1 -1
- package/esm/validation/types.d.mts.map +1 -1
- package/esm/validation/validateAll.mjs +1 -1
- package/esm/validation/validateAll.mjs.map +1 -1
- package/esm/validation/validators/file-validator.d.mts +1 -1
- package/esm/validation/validators/file-validator.d.mts.map +1 -1
- package/esm/validation/validators/file-validator.mjs +1 -1
- package/esm/validation/validators/file-validator.mjs.map +1 -1
- package/esm/vite/index.mjs +3 -0
- package/esm/vite/lower-stage3-decorators.d.mts +53 -0
- package/esm/vite/lower-stage3-decorators.d.mts.map +1 -0
- package/esm/vite/lower-stage3-decorators.mjs +63 -0
- package/esm/vite/lower-stage3-decorators.mjs.map +1 -0
- package/esm/warlock-config/default-configurations.mjs +1 -1
- package/esm/warlock-config/default-configurations.mjs.map +1 -1
- package/esm/warlock-config/define-config.d.mts +1 -1
- package/esm/warlock-config/define-config.d.mts.map +1 -1
- package/esm/warlock-config/define-config.mjs +1 -1
- package/esm/warlock-config/define-config.mjs.map +1 -1
- package/esm/warlock-config/index.d.mts +1 -1
- package/esm/warlock-config/index.mjs +1 -1
- package/esm/warlock-config/types.d.mts +1 -1
- package/esm/warlock-config/types.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.d.mts +20 -2
- package/esm/warlock-config/warlock-config.manager.d.mts.map +1 -1
- package/esm/warlock-config/warlock-config.manager.mjs +39 -2
- package/esm/warlock-config/warlock-config.manager.mjs.map +1 -1
- package/llms-full.txt +66 -4
- package/llms.txt +1 -0
- package/package.json +9 -33
- package/skills/lower-stage3-decorators/SKILL.md +54 -0
- package/skills/run-app/SKILL.md +2 -0
- package/skills/test-http/SKILL.md +3 -2
- package/skills/test-service/SKILL.md +3 -2
- package/bin/warlock.js +0 -3
- package/esm/_virtual/_rolldown/runtime.mjs +0 -7
- package/esm/cli/cli-commands.manager.mjs +0 -290
- package/esm/cli/cli-commands.manager.mjs.map +0 -1
- package/esm/cli/cli-commands.utils.mjs +0 -217
- package/esm/cli/cli-commands.utils.mjs.map +0 -1
- package/esm/cli/commands/add.command.mjs +0 -27
- package/esm/cli/commands/add.command.mjs.map +0 -1
- package/esm/cli/commands/build.command.mjs +0 -14
- package/esm/cli/commands/build.command.mjs.map +0 -1
- package/esm/cli/commands/create-database.command.mjs +0 -24
- package/esm/cli/commands/create-database.command.mjs.map +0 -1
- package/esm/cli/commands/dev-server.command.mjs +0 -48
- package/esm/cli/commands/dev-server.command.mjs.map +0 -1
- package/esm/cli/commands/drop-tables.command.mjs +0 -23
- package/esm/cli/commands/drop-tables.command.mjs.map +0 -1
- package/esm/cli/commands/generate/generate.command.mjs +0 -201
- package/esm/cli/commands/generate/generate.command.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/column-dsl-parser.mjs +0 -49
- package/esm/cli/commands/generate/generators/column-dsl-parser.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/controller.generator.mjs +0 -48
- package/esm/cli/commands/generate/generators/controller.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/migration.generator.mjs +0 -81
- package/esm/cli/commands/generate/generators/migration.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/model.generator.mjs +0 -60
- package/esm/cli/commands/generate/generators/model.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/module.generator.mjs +0 -113
- package/esm/cli/commands/generate/generators/module.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/repository.generator.mjs +0 -42
- package/esm/cli/commands/generate/generators/repository.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/resource.generator.mjs +0 -42
- package/esm/cli/commands/generate/generators/resource.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/generators/service.generator.mjs +0 -42
- package/esm/cli/commands/generate/generators/service.generator.mjs.map +0 -1
- package/esm/cli/commands/generate/templates/stubs.mjs +0 -514
- package/esm/cli/commands/generate/templates/stubs.mjs.map +0 -1
- package/esm/cli/commands/generate/utils/name-parser.mjs +0 -69
- package/esm/cli/commands/generate/utils/name-parser.mjs.map +0 -1
- package/esm/cli/commands/generate/utils/path-resolver.mjs +0 -56
- package/esm/cli/commands/generate/utils/path-resolver.mjs.map +0 -1
- package/esm/cli/commands/generate/utils/prompt.mjs +0 -28
- package/esm/cli/commands/generate/utils/prompt.mjs.map +0 -1
- package/esm/cli/commands/generate/utils/writer.mjs +0 -60
- package/esm/cli/commands/generate/utils/writer.mjs.map +0 -1
- package/esm/cli/commands/migrate.command.mjs +0 -60
- package/esm/cli/commands/migrate.command.mjs.map +0 -1
- package/esm/cli/commands/seed.command.mjs +0 -41
- package/esm/cli/commands/seed.command.mjs.map +0 -1
- package/esm/cli/commands/start-production.command.mjs +0 -50
- package/esm/cli/commands/start-production.command.mjs.map +0 -1
- package/esm/cli/commands/storage-put.action.mjs +0 -75
- package/esm/cli/commands/storage-put.action.mjs.map +0 -1
- package/esm/cli/commands/storage-put.command.mjs +0 -46
- package/esm/cli/commands/storage-put.command.mjs.map +0 -1
- package/esm/cli/commands/typings-generator.command.mjs +0 -38
- package/esm/cli/commands/typings-generator.command.mjs.map +0 -1
- package/esm/cli/commands-loader.mjs +0 -50
- package/esm/cli/commands-loader.mjs.map +0 -1
- package/esm/cli/framework-cli-commands.mjs +0 -37
- package/esm/cli/framework-cli-commands.mjs.map +0 -1
- package/esm/cli/parse-cli-args.mjs +0 -62
- package/esm/cli/parse-cli-args.mjs.map +0 -1
- package/esm/cli/start.d.mts +0 -1
- package/esm/cli/start.mjs +0 -8
- package/esm/cli/start.mjs.map +0 -1
- package/esm/cli/string-similarity.mjs +0 -56
- package/esm/cli/string-similarity.mjs.map +0 -1
- package/esm/database/create-database-action.mjs +0 -32
- package/esm/database/create-database-action.mjs.map +0 -1
- package/esm/database/drop-tables-action.mjs +0 -35
- package/esm/database/drop-tables-action.mjs.map +0 -1
- package/esm/database/migrate-action.mjs +0 -99
- package/esm/database/migrate-action.mjs.map +0 -1
- package/esm/database/seed-command-action.mjs +0 -74
- package/esm/database/seed-command-action.mjs.map +0 -1
- package/esm/database/seeds/seeders.manager.mjs +0 -129
- package/esm/database/seeds/seeders.manager.mjs.map +0 -1
- package/esm/database/seeds/seeds-table-migration.mjs +0 -31
- package/esm/database/seeds/seeds-table-migration.mjs.map +0 -1
- package/esm/database/seeds/utils.mjs +0 -6
- package/esm/database/seeds/utils.mjs.map +0 -1
- package/esm/dev-server/development-server.mjs +0 -115
- package/esm/dev-server/development-server.mjs.map +0 -1
- package/esm/dev-server/health-checker/workers/eslint-health.worker.d.mts +0 -1
- package/esm/dev-server/health-checker/workers/ts-health.worker.d.mts +0 -1
- package/esm/dev-server/layer-executor.mjs +0 -114
- package/esm/dev-server/layer-executor.mjs.map +0 -1
- package/esm/dev-server/loader/hook-thread.d.mts +0 -48
- package/esm/dev-server/loader/hook-thread.d.mts.map +0 -1
- package/esm/dev-server/loader/hook-thread.mjs +0 -47
- package/esm/dev-server/loader/hook-thread.mjs.map +0 -1
- package/esm/dev-server/loader/load-hook.d.mts +0 -58
- package/esm/dev-server/loader/load-hook.d.mts.map +0 -1
- package/esm/dev-server/loader/load-hook.mjs +0 -86
- package/esm/dev-server/loader/load-hook.mjs.map +0 -1
- package/esm/dev-server/loader/own-resolver.mjs +0 -69
- package/esm/dev-server/loader/own-resolver.mjs.map +0 -1
- package/esm/dev-server/loader/resolve-capture.mjs +0 -43
- package/esm/dev-server/loader/resolve-capture.mjs.map +0 -1
- package/esm/dev-server/loader/resolve-hook.d.mts +0 -41
- package/esm/dev-server/loader/resolve-hook.d.mts.map +0 -1
- package/esm/dev-server/loader/resolve-hook.mjs +0 -87
- package/esm/dev-server/loader/resolve-hook.mjs.map +0 -1
- package/esm/dev-server/loader/source-slug.mjs +0 -22
- package/esm/dev-server/loader/source-slug.mjs.map +0 -1
- package/esm/dev-server/loader/version-registry.mjs +0 -45
- package/esm/dev-server/loader/version-registry.mjs.map +0 -1
- package/esm/dev-server/start-development-server.mjs +0 -63
- package/esm/dev-server/start-development-server.mjs.map +0 -1
- package/esm/dev-server/type-generator.mjs +0 -453
- package/esm/dev-server/type-generator.mjs.map +0 -1
- package/esm/generations/add-command.action.mjs +0 -376
- package/esm/generations/add-command.action.mjs.map +0 -1
- package/esm/generations/stubs.mjs +0 -103
- package/esm/generations/stubs.mjs.map +0 -1
- package/esm/manifest/manifest-manager.mjs +0 -79
- package/esm/manifest/manifest-manager.mjs.map +0 -1
- package/esm/production/build-app-production.mjs +0 -14
- package/esm/production/build-app-production.mjs.map +0 -1
- package/esm/production/esbuild-plugins.mjs +0 -37
- package/esm/production/esbuild-plugins.mjs.map +0 -1
- package/esm/production/production-builder.mjs +0 -264
- package/esm/production/production-builder.mjs.map +0 -1
- package/esm/production/resolve-build-config.mjs +0 -28
- package/esm/production/resolve-build-config.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-resource.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"register-resource.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/resource/register-resource.ts"],"mappings":";;;;;AAoBA;;;;AAC0C;;;;;;;;;;;;iBAD1B,gBAAA,KACG,MAAuB,SAAR,QAAQ"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Resource } from "./resource.mjs";
|
|
2
2
|
|
|
3
|
-
//#region
|
|
3
|
+
//#region ../@warlock.js/core/src/resource/register-resource.ts
|
|
4
4
|
/**
|
|
5
5
|
* Decorator for hand-written Resource classes.
|
|
6
6
|
* Triggers one-time schema normalization (converts string cast types into
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-resource.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"register-resource.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/resource/register-resource.ts"],"sourcesContent":["import { Resource } from \"./resource\";\n\n/**\n * Decorator for hand-written Resource classes.\n * Triggers one-time schema normalization (converts string cast types into\n * pre-built ResourceFieldBuilder instances) so transformOutput runs against\n * builders without per-call overhead.\n *\n * @example\n * ```typescript\n * @RegisterResource()\n * class PostResource extends Resource {\n * static schema = {\n * id: \"number\",\n * title: \"string\",\n * keywords: \"string[]\",\n * };\n * }\n * ```\n */\nexport function RegisterResource() {\n return function (target: typeof Resource) {\n target.parsedSchema = Resource.normalizeSchema(target.schema);\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,mBAAmB;CACjC,OAAO,SAAU,QAAyB;EACxC,OAAO,eAAe,SAAS,gBAAgB,OAAO,MAAM;CAC9D;AACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LocalizedObject } from "../utils/get-localized.mjs";
|
|
2
2
|
import { ResourceFieldBuilderDateOutputOptions, ResourceOutputValueCastType } from "./types.mjs";
|
|
3
3
|
|
|
4
|
-
//#region
|
|
4
|
+
//#region ../@warlock.js/core/src/resource/resource-field-builder.d.ts
|
|
5
5
|
declare class ResourceFieldBuilder {
|
|
6
6
|
protected readonly type: ResourceOutputValueCastType;
|
|
7
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-field-builder.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"resource-field-builder.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/resource/resource-field-builder.ts"],"mappings":";;;;cAaa,oBAAA;EAAA,mBAwD2B,IAAA,EAAM,2BAAA;EAxDjC;;;EAAA,UAID,UAAA;EAuCkB;;;;EAAA,UAjClB,UAAA;EAmS0B;;;;EAAA,UA7R1B,YAAA;EAZA;;;EAAA,UAiBA,YAAA;EAKA;;;EAAA,UAAA,UAAA;EAiBkB;;;EAAA,UAZlB,aAAA;EAkCI;;;EAAA,UA7BJ,SAAA;EAsDS;;;;;EAAA,UA/CT,gBAAA,EAAkB,qCAAA;EAwFrB;;;cA3E+B,IAAA,EAAM,2BAAA;EA8FrC;;;;;EAAA,OArFO,YAAA,CAAa,QAAA,WAAmB,oBAAA;EAgHpC;;;;EAvFH,WAAA,CAAY,GAAA;EA2IK;;;EAlIjB,IAAA,CAAK,SAAA;EA0MiB;;;EAlMtB,QAAA;;;;;EASA,KAAA;;;;EAQA,WAAA;;;;EAOA,OAAA,CAAQ,KAAA;;;;EASR,MAAA,CAAO,MAAA;;;;;EAUP,WAAA,CAAY,OAAA,EAAS,qCAAA;;;;;EAUrB,SAAA,CAAU,KAAA,OAAY,MAAA;;;;YAiBnB,oBAAA,CAAqB,KAAA,OAAY,MAAA;;;;YAoDjC,aAAA,CAAc,KAAA,WAAgB,IAAA,EAAM,MAAA;;;;YAwEpC,kBAAA,CAAmB,KAAA,EAAO,eAAA,aAA4B,MAAA;AAAA"}
|
|
@@ -5,7 +5,7 @@ import { isObject } from "@mongez/supportive-is";
|
|
|
5
5
|
import dayjs from "dayjs";
|
|
6
6
|
import relativeTime from "dayjs/plugin/relativeTime.js";
|
|
7
7
|
|
|
8
|
-
//#region
|
|
8
|
+
//#region ../@warlock.js/core/src/resource/resource-field-builder.ts
|
|
9
9
|
dayjs.extend(relativeTime);
|
|
10
10
|
var ResourceFieldBuilder = class ResourceFieldBuilder {
|
|
11
11
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-field-builder.mjs","names":[],"sources":["../../../../../../@warlock.js/core/src/resource/resource-field-builder.ts"],"sourcesContent":["import { isObject } from \"@mongez/supportive-is\";\nimport dayjs from \"dayjs\";\nimport relativeTime from \"dayjs/plugin/relativeTime.js\";\nimport { storage } from \"../storage\";\n\n// `humanTime` date options call dayjs(...).fromNow(), which lives in the\n// relativeTime plugin. dayjs.extend is idempotent (a plugin registers itself\n// once), so extending here at module load is safe to repeat.\ndayjs.extend(relativeTime);\nimport { uploadsUrl, url } from \"../utils/urls\";\nimport { type LocalizedObject } from \"./../utils/get-localized\";\nimport { ResourceFieldBuilderDateOutputOptions, type ResourceOutputValueCastType } from \"./types\";\n\nexport class ResourceFieldBuilder {\n /**\n * Field value\n */\n protected fieldValue?: unknown;\n\n /**\n * Whether the value is nullable\n * If set to false and value is null, it will be returned as undefined\n */\n protected isNullable = false;\n\n /**\n * Whether this field is an array\n * When true, transform() maps over each element using the base type\n */\n protected isArrayField = false;\n\n /**\n * Default value\n */\n protected defaultValue?: unknown;\n\n /**\n * Date format\n */\n protected dateFormat = \"DD-MM-YYYY hh:mm:ss A\";\n\n /**\n * Input key\n */\n protected inputKeyToUse?: string;\n\n /**\n * Add a condition before transforming the value\n */\n protected condition?: () => boolean;\n\n /**\n * Define how date fields are returned\n * If type of the date options is string then it will be returned as a string\n * otherwise it will be returned as an object contains the date options\n */\n protected dateOptionsInput: ResourceFieldBuilderDateOutputOptions = {\n format: true,\n timestamp: true,\n timezone: false,\n locale: false,\n offset: false,\n humanTime: true,\n iso: true,\n };\n\n /**\n * Constructor\n */\n public constructor(protected readonly type: ResourceOutputValueCastType) {\n //\n }\n\n /**\n * Parse a cast type string (including suffixes) into a configured builder.\n * Suffix order: [] before ? (e.g. \"string[]?\")\n * Parsing strips right-to-left: ? first, then [].\n */\n public static fromCastType(castType: string): ResourceFieldBuilder {\n let baseType = castType;\n let nullable = false;\n let isArray = false;\n\n if (baseType.endsWith(\"?\")) {\n nullable = true;\n baseType = baseType.slice(0, -1);\n }\n\n if (baseType.endsWith(\"[]\")) {\n isArray = true;\n baseType = baseType.slice(0, -2);\n }\n\n const builder = new ResourceFieldBuilder(baseType as ResourceOutputValueCastType);\n if (nullable) builder.nullable();\n if (isArray) builder.array();\n return builder;\n }\n\n /**\n * Set input key\n * Will be used in transformation if provided\n */\n public setInputKey(key: string) {\n this.inputKeyToUse = key;\n\n return this;\n }\n\n /**\n * Add a condition before transforming the value\n */\n public when(condition: () => boolean) {\n this.condition = condition;\n return this;\n }\n\n /**\n * Set whether the value is nullable\n */\n public nullable() {\n this.isNullable = true;\n return this;\n }\n\n /**\n * Mark this field as an array\n * transform() will map over each element using the base type\n */\n public array() {\n this.isArrayField = true;\n return this;\n }\n\n /**\n * Get input key\n */\n public getInputKey() {\n return this.inputKeyToUse;\n }\n\n /**\n * Set default value\n */\n public default(value: unknown) {\n this.defaultValue = value;\n\n return this;\n }\n\n /**\n * Set field format\n */\n public format(format: string) {\n this.dateFormat = format;\n\n return this;\n }\n\n /**\n * Set date options\n * This will override current date options\n */\n public dateOptions(options: ResourceFieldBuilderDateOutputOptions) {\n this.dateOptionsInput = options;\n\n return this;\n }\n\n /**\n * Transform the value.\n * When isArrayField is true, maps over each element using transformSingleValue.\n */\n public transform(value: any, locale?: string) {\n if (this.isArrayField) {\n if (!Array.isArray(value)) {\n return this.isNullable ? null : [];\n }\n\n return value\n .map((item) => this.transformSingleValue(item, locale))\n .filter((v) => v !== undefined);\n }\n\n return this.transformSingleValue(value, locale);\n }\n\n /**\n * Transform a single value according to the base type.\n */\n protected transformSingleValue(value: any, locale?: string) {\n if (value === undefined || value === null) {\n return this.isNullable ? null : this.defaultValue;\n }\n\n if (this.condition && !this.condition()) {\n return this.isNullable ? null : this.defaultValue;\n }\n\n switch (this.type) {\n case \"string\":\n return String(value);\n case \"number\": {\n const num = Number(value);\n return isNaN(num) ? (this.isNullable ? null : undefined) : num;\n }\n case \"boolean\":\n return Boolean(value);\n case \"float\": {\n const float = parseFloat(value);\n return isNaN(float) ? (this.isNullable ? null : undefined) : float;\n }\n\n case \"int\": {\n const int = parseInt(value);\n return isNaN(int) ? (this.isNullable ? null : undefined) : int;\n }\n\n case \"date\":\n return this.transformDate(value as string | Date, locale);\n case \"localized\":\n return this.transformLocalized(value as LocalizedObject[], locale);\n case \"url\":\n return url(value as string);\n case \"uploadsUrl\":\n return uploadsUrl(value as string);\n case \"storageUrl\":\n return storage.url(value as string);\n case \"object\":\n return isObject(value) && !Array.isArray(value) && Object.keys(value).length > 0\n ? value\n : this.isNullable\n ? null\n : undefined;\n case \"array\":\n return Array.isArray(value) ? value : this.isNullable ? null : undefined;\n }\n }\n\n /**\n * Transform date value\n */\n protected transformDate(value: string | Date, locale?: string) {\n if (typeof this.dateOptionsInput === \"string\") {\n if (this.dateOptionsInput === \"format\") {\n return dayjs(value).format(this.dateFormat);\n }\n\n if (this.dateOptionsInput === \"iso\") {\n return dayjs(value).toISOString();\n }\n\n if (this.dateOptionsInput === \"timestamp\") {\n return dayjs(value).valueOf();\n }\n\n if (this.dateOptionsInput === \"humanTime\") {\n return (dayjs as any)(value).fromNow();\n }\n\n if (this.dateOptionsInput === \"locale\") {\n if (!locale) {\n return dayjs(value).format(this.dateFormat);\n }\n\n return dayjs(value).locale(locale).format(this.dateFormat);\n }\n }\n\n // now manage it as an object based on date options what's marked as true\n const output: {\n format?: string;\n timestamp?: number;\n humanTime?: string;\n locale?: string;\n iso?: string;\n } = {};\n\n let dayjsObject = dayjs((value as any)?.iso || value);\n\n if (locale) {\n dayjsObject = dayjsObject.locale(locale);\n }\n\n if (this.dateOptionsInput.iso) {\n output.iso = dayjsObject.toISOString();\n }\n\n if (this.dateOptionsInput.format) {\n output.format = dayjsObject.format(this.dateFormat);\n }\n\n if (this.dateOptionsInput.timestamp) {\n output.timestamp = dayjsObject.valueOf();\n }\n\n if (this.dateOptionsInput.humanTime) {\n output.humanTime = (dayjsObject as any).fromNow();\n }\n\n if (this.dateOptionsInput.locale) {\n output.locale = dayjsObject.format(this.dateFormat);\n }\n\n if (this.dateOptionsInput.iso) {\n output.iso = dayjsObject.toISOString();\n }\n\n return output;\n }\n\n /**\n * Transform localized value\n */\n protected transformLocalized(value: LocalizedObject[] | string, locale?: string) {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (!locale) {\n return value[0]?.value || value;\n }\n\n return value.find((item) => item.localeCode === locale)?.value;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resource-field-builder.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/resource/resource-field-builder.ts"],"sourcesContent":["import { isObject } from \"@mongez/supportive-is\";\nimport dayjs from \"dayjs\";\nimport relativeTime from \"dayjs/plugin/relativeTime.js\";\nimport { storage } from \"../storage\";\n\n// `humanTime` date options call dayjs(...).fromNow(), which lives in the\n// relativeTime plugin. dayjs.extend is idempotent (a plugin registers itself\n// once), so extending here at module load is safe to repeat.\ndayjs.extend(relativeTime);\nimport { uploadsUrl, url } from \"../utils/urls\";\nimport { type LocalizedObject } from \"./../utils/get-localized\";\nimport { ResourceFieldBuilderDateOutputOptions, type ResourceOutputValueCastType } from \"./types\";\n\nexport class ResourceFieldBuilder {\n /**\n * Field value\n */\n protected fieldValue?: unknown;\n\n /**\n * Whether the value is nullable\n * If set to false and value is null, it will be returned as undefined\n */\n protected isNullable = false;\n\n /**\n * Whether this field is an array\n * When true, transform() maps over each element using the base type\n */\n protected isArrayField = false;\n\n /**\n * Default value\n */\n protected defaultValue?: unknown;\n\n /**\n * Date format\n */\n protected dateFormat = \"DD-MM-YYYY hh:mm:ss A\";\n\n /**\n * Input key\n */\n protected inputKeyToUse?: string;\n\n /**\n * Add a condition before transforming the value\n */\n protected condition?: () => boolean;\n\n /**\n * Define how date fields are returned\n * If type of the date options is string then it will be returned as a string\n * otherwise it will be returned as an object contains the date options\n */\n protected dateOptionsInput: ResourceFieldBuilderDateOutputOptions = {\n format: true,\n timestamp: true,\n timezone: false,\n locale: false,\n offset: false,\n humanTime: true,\n iso: true,\n };\n\n /**\n * Constructor\n */\n public constructor(protected readonly type: ResourceOutputValueCastType) {\n //\n }\n\n /**\n * Parse a cast type string (including suffixes) into a configured builder.\n * Suffix order: [] before ? (e.g. \"string[]?\")\n * Parsing strips right-to-left: ? first, then [].\n */\n public static fromCastType(castType: string): ResourceFieldBuilder {\n let baseType = castType;\n let nullable = false;\n let isArray = false;\n\n if (baseType.endsWith(\"?\")) {\n nullable = true;\n baseType = baseType.slice(0, -1);\n }\n\n if (baseType.endsWith(\"[]\")) {\n isArray = true;\n baseType = baseType.slice(0, -2);\n }\n\n const builder = new ResourceFieldBuilder(baseType as ResourceOutputValueCastType);\n if (nullable) builder.nullable();\n if (isArray) builder.array();\n return builder;\n }\n\n /**\n * Set input key\n * Will be used in transformation if provided\n */\n public setInputKey(key: string) {\n this.inputKeyToUse = key;\n\n return this;\n }\n\n /**\n * Add a condition before transforming the value\n */\n public when(condition: () => boolean) {\n this.condition = condition;\n return this;\n }\n\n /**\n * Set whether the value is nullable\n */\n public nullable() {\n this.isNullable = true;\n return this;\n }\n\n /**\n * Mark this field as an array\n * transform() will map over each element using the base type\n */\n public array() {\n this.isArrayField = true;\n return this;\n }\n\n /**\n * Get input key\n */\n public getInputKey() {\n return this.inputKeyToUse;\n }\n\n /**\n * Set default value\n */\n public default(value: unknown) {\n this.defaultValue = value;\n\n return this;\n }\n\n /**\n * Set field format\n */\n public format(format: string) {\n this.dateFormat = format;\n\n return this;\n }\n\n /**\n * Set date options\n * This will override current date options\n */\n public dateOptions(options: ResourceFieldBuilderDateOutputOptions) {\n this.dateOptionsInput = options;\n\n return this;\n }\n\n /**\n * Transform the value.\n * When isArrayField is true, maps over each element using transformSingleValue.\n */\n public transform(value: any, locale?: string) {\n if (this.isArrayField) {\n if (!Array.isArray(value)) {\n return this.isNullable ? null : [];\n }\n\n return value\n .map((item) => this.transformSingleValue(item, locale))\n .filter((v) => v !== undefined);\n }\n\n return this.transformSingleValue(value, locale);\n }\n\n /**\n * Transform a single value according to the base type.\n */\n protected transformSingleValue(value: any, locale?: string) {\n if (value === undefined || value === null) {\n return this.isNullable ? null : this.defaultValue;\n }\n\n if (this.condition && !this.condition()) {\n return this.isNullable ? null : this.defaultValue;\n }\n\n switch (this.type) {\n case \"string\":\n return String(value);\n case \"number\": {\n const num = Number(value);\n return isNaN(num) ? (this.isNullable ? null : undefined) : num;\n }\n case \"boolean\":\n return Boolean(value);\n case \"float\": {\n const float = parseFloat(value);\n return isNaN(float) ? (this.isNullable ? null : undefined) : float;\n }\n\n case \"int\": {\n const int = parseInt(value);\n return isNaN(int) ? (this.isNullable ? null : undefined) : int;\n }\n\n case \"date\":\n return this.transformDate(value as string | Date, locale);\n case \"localized\":\n return this.transformLocalized(value as LocalizedObject[], locale);\n case \"url\":\n return url(value as string);\n case \"uploadsUrl\":\n return uploadsUrl(value as string);\n case \"storageUrl\":\n return storage.url(value as string);\n case \"object\":\n return isObject(value) && !Array.isArray(value) && Object.keys(value).length > 0\n ? value\n : this.isNullable\n ? null\n : undefined;\n case \"array\":\n return Array.isArray(value) ? value : this.isNullable ? null : undefined;\n }\n }\n\n /**\n * Transform date value\n */\n protected transformDate(value: string | Date, locale?: string) {\n if (typeof this.dateOptionsInput === \"string\") {\n if (this.dateOptionsInput === \"format\") {\n return dayjs(value).format(this.dateFormat);\n }\n\n if (this.dateOptionsInput === \"iso\") {\n return dayjs(value).toISOString();\n }\n\n if (this.dateOptionsInput === \"timestamp\") {\n return dayjs(value).valueOf();\n }\n\n if (this.dateOptionsInput === \"humanTime\") {\n return (dayjs as any)(value).fromNow();\n }\n\n if (this.dateOptionsInput === \"locale\") {\n if (!locale) {\n return dayjs(value).format(this.dateFormat);\n }\n\n return dayjs(value).locale(locale).format(this.dateFormat);\n }\n }\n\n // now manage it as an object based on date options what's marked as true\n const output: {\n format?: string;\n timestamp?: number;\n humanTime?: string;\n locale?: string;\n iso?: string;\n } = {};\n\n let dayjsObject = dayjs((value as any)?.iso || value);\n\n if (locale) {\n dayjsObject = dayjsObject.locale(locale);\n }\n\n if (this.dateOptionsInput.iso) {\n output.iso = dayjsObject.toISOString();\n }\n\n if (this.dateOptionsInput.format) {\n output.format = dayjsObject.format(this.dateFormat);\n }\n\n if (this.dateOptionsInput.timestamp) {\n output.timestamp = dayjsObject.valueOf();\n }\n\n if (this.dateOptionsInput.humanTime) {\n output.humanTime = (dayjsObject as any).fromNow();\n }\n\n if (this.dateOptionsInput.locale) {\n output.locale = dayjsObject.format(this.dateFormat);\n }\n\n if (this.dateOptionsInput.iso) {\n output.iso = dayjsObject.toISOString();\n }\n\n return output;\n }\n\n /**\n * Transform localized value\n */\n protected transformLocalized(value: LocalizedObject[] | string, locale?: string) {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (!locale) {\n return value[0]?.value || value;\n }\n\n return value.find((item) => item.localeCode === locale)?.value;\n }\n}\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { ResourceArraySchema, ResourceFieldConfig, ResourceOutputValueCastType,
|
|
|
3
3
|
import { Model } from "@warlock.js/cascade";
|
|
4
4
|
import { GenericObject } from "@mongez/reinforcements";
|
|
5
5
|
|
|
6
|
-
//#region
|
|
6
|
+
//#region ../@warlock.js/core/src/resource/resource.d.ts
|
|
7
7
|
/**
|
|
8
8
|
* Resource contract
|
|
9
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"resource.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/resource/resource.ts"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { ResourceFieldBuilder } from "./resource-field-builder.mjs";
|
|
|
3
3
|
import { Model } from "@warlock.js/cascade";
|
|
4
4
|
import { get, isLazy, set } from "@mongez/reinforcements";
|
|
5
5
|
|
|
6
|
-
//#region
|
|
6
|
+
//#region ../@warlock.js/core/src/resource/resource.ts
|
|
7
7
|
/**
|
|
8
8
|
* Maximum recursion depth for self-referencing fields.
|
|
9
9
|
* Prevents runaway serialization on deep trees or circular data.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.mjs","names":[],"sources":["../../../../../../@warlock.js/core/src/resource/resource.ts"],"sourcesContent":["import { get, isLazy, set, type GenericObject } from \"@mongez/reinforcements\";\r\nimport { Model } from \"@warlock.js/cascade\";\r\nimport { useRequestStore } from \"../http/context/request-context\";\r\nimport { ResourceFieldBuilder } from \"./resource-field-builder\";\r\nimport {\r\n ResourceArraySchema,\r\n ResourceFieldConfig,\r\n ResourceOutputValueCastType,\r\n ResourceSchema,\r\n} from \"./types\";\r\n\r\n/**\r\n * Maximum recursion depth for self-referencing fields.\r\n * Prevents runaway serialization on deep trees or circular data.\r\n */\r\nconst MAX_SELF_DEPTH = 10;\r\n\r\n/**\r\n * Resource contract\r\n */\r\nexport interface ResourceContract {\r\n /**\r\n * Resource data\r\n */\r\n resource: GenericObject;\r\n\r\n /**\r\n * Resource final output\r\n */\r\n data: GenericObject;\r\n\r\n /**\r\n * Original data\r\n */\r\n originalData: GenericObject;\r\n\r\n /**\r\n * Convert resource to JSON\r\n */\r\n toJSON(): GenericObject;\r\n\r\n /**\r\n * Transform the given value with given type\r\n */\r\n transform(value: any, type: ResourceOutputValueCastType, locale?: string): any;\r\n\r\n /**\r\n * Get a input value for the given key\r\n */\r\n get(key: string, defaultValue?: any): any;\r\n\r\n /**\r\n * Set the given value for the given field\r\n */\r\n set(key: string, value: any): ResourceContract;\r\n\r\n /**\r\n * Create an array schema for transforming array items\r\n */\r\n arrayOf(schema: Record<string, ResourceFieldConfig>): ResourceArraySchema;\r\n\r\n /**\r\n * Get a string field builder\r\n */\r\n string(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a date field builder\r\n */\r\n date(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a localized field builder\r\n */\r\n localized(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a url field builder\r\n */\r\n url(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a uploadsUrl field builder\r\n */\r\n uploadsUrl(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a number field builder\r\n */\r\n number(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a boolean field builder\r\n */\r\n boolean(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a float field builder\r\n */\r\n float(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a int field builder\r\n */\r\n int(inputKey?: string): ResourceFieldBuilder;\r\n}\r\n\r\n/**\r\n * Resource constructor\r\n */\r\nexport interface ResourceConstructor {\r\n new (originalData: GenericObject | Resource | Model): ResourceContract;\r\n}\r\n\r\nexport class Resource implements ResourceContract {\r\n /**\r\n * Resource data\r\n */\r\n public resource: GenericObject = {};\r\n\r\n /**\r\n * Resource final output\r\n */\r\n public data: GenericObject = {};\r\n\r\n /**\r\n * Tracks visited object identities during self-reference recursion.\r\n * Prevents infinite loops on circular data (e.g. A.parent → B, B.parent → A).\r\n */\r\n protected _selfSeen?: Set<unknown>;\r\n\r\n /**\r\n * Raw resource schema — field declarations as written by the developer.\r\n * Used by doc generators for introspection.\r\n */\r\n public static schema: ResourceSchema = {};\r\n\r\n /**\r\n * Normalized schema — all string cast types and tuples converted to\r\n * ResourceFieldBuilder instances at definition time. Used by transformOutput at runtime.\r\n */\r\n public static parsedSchema: Record<string, ResourceFieldConfig> = {};\r\n\r\n /**\r\n * Normalize a raw schema into parsedSchema.\r\n * Converts string cast types (including suffixes) and tuples into pre-built builders.\r\n * Other entry types (ResourceConstructor, resolver functions, ResourceArraySchema) are kept as-is.\r\n */\r\n public static normalizeSchema(schema: ResourceSchema): Record<string, ResourceFieldConfig> {\r\n const parsed: Record<string, ResourceFieldConfig> = {};\r\n\r\n for (const [key, value] of Object.entries(schema)) {\r\n if (value === \"self\" || value === \"self[]\") {\r\n // Keep self-references as-is — resolved lazily in transformValue\r\n parsed[key] = value;\r\n } else if (isLazy<ResourceConstructor>(value)) {\r\n // Keep Lazy<ResourceConstructor> as-is — resolved at transform\r\n // time so cyclic resource refs (A embeds B embeds A) compose\r\n // without import-graph cycles.\r\n parsed[key] = value;\r\n } else if (typeof value === \"string\") {\r\n parsed[key] = ResourceFieldBuilder.fromCastType(value);\r\n } else if (Array.isArray(value) && value.length === 2 && typeof value[0] === \"string\") {\r\n const builder = ResourceFieldBuilder.fromCastType(value[1] as string);\r\n builder.setInputKey(value[0]);\r\n parsed[key] = builder;\r\n } else {\r\n parsed[key] = value;\r\n }\r\n }\r\n\r\n return parsed;\r\n }\r\n\r\n /**\r\n * Constructor\r\n */\r\n public constructor(public originalData: GenericObject | Resource | Model) {\r\n if (this.originalData instanceof Model) {\r\n this.resource = this.originalData.data;\r\n } else if (this.originalData instanceof Resource) {\r\n this.resource = this.originalData.data;\r\n } else {\r\n this.resource = this.originalData;\r\n }\r\n }\r\n\r\n /**\r\n * Convert resource to JSON\r\n */\r\n public toJSON() {\r\n this.boot();\r\n this.transformOutput();\r\n this.extend();\r\n\r\n return this.data;\r\n }\r\n\r\n /**\r\n * Boot method\r\n * Called before transforming the resource\r\n */\r\n protected boot() {\r\n //\r\n }\r\n\r\n /**\r\n * Transform resource to output using the pre-normalized parsedSchema.\r\n * Builders handle their own array/nullable logic internally.\r\n * ResourceConstructor and ResourceArraySchema handle arrays in transformValue.\r\n */\r\n protected transformOutput() {\r\n const localeCode = useRequestStore()?.request?.locale;\r\n const parsedSchema = (this.constructor as typeof Resource).parsedSchema;\r\n\r\n for (const [outputKey, outputSettings] of Object.entries(parsedSchema)) {\r\n const inputValue = this.get(outputKey);\r\n const outputValue = this.transformValue(inputValue, outputSettings, localeCode);\r\n\r\n if (outputValue !== undefined) {\r\n this.set(outputKey, outputValue);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Transform the given value with given type\r\n */\r\n public transform(value: any, type: ResourceOutputValueCastType, locale?: string) {\r\n return new ResourceFieldBuilder(type).transform(value, locale);\r\n }\r\n\r\n /**\r\n * Transform the given value for the given output setting.\r\n * After normalization, string cast types no longer reach here — they are pre-converted to builders.\r\n */\r\n protected transformValue(value: any, outputSettings: ResourceFieldConfig, locale?: string): any {\r\n let outputValue: any;\r\n\r\n if (isLazy<ResourceConstructor>(outputSettings)) {\r\n // Resolve the lazy ref now (cyclic resource imports are fully loaded\r\n // by serialization time) and recurse — the resolved constructor is\r\n // handled by the ResourceConstructor branch below.\r\n return this.transformValue(value, outputSettings.resolve(), locale);\r\n }\r\n\r\n if (outputSettings === \"self\" || outputSettings === \"self[]\") {\r\n // Self-reference — resolve using the same resource class with cycle detection\r\n outputValue = this.transformSelfReference(value, outputSettings === \"self[]\");\r\n } else if (\r\n typeof outputSettings === \"function\" &&\r\n outputSettings.prototype instanceof Resource\r\n ) {\r\n if (!value) return;\r\n // Nested resource — handle both single and array values\r\n if (Array.isArray(value)) {\r\n if (value.length === 0) return;\r\n outputValue = value\r\n .map((item) => new (outputSettings as typeof Resource)(item).toJSON())\r\n .filter((v) => v !== undefined);\r\n } else {\r\n outputValue = new (outputSettings as typeof Resource)(value).toJSON();\r\n }\r\n } else if (typeof outputSettings === \"function\") {\r\n // Resolver function - bind to Resource instance for access to this.get(), etc.\r\n outputValue = (outputSettings as Function).call(this, value, this);\r\n } else if (outputSettings instanceof ResourceFieldBuilder) {\r\n // Builder — handles array mapping and nullable internally via isArrayField\r\n const inputKey = outputSettings.getInputKey();\r\n outputValue = outputSettings.transform(inputKey ? this.get(inputKey) : value, locale);\r\n } else if (\r\n typeof outputSettings === \"object\" &&\r\n outputSettings !== null &&\r\n \"__type\" in outputSettings &&\r\n outputSettings.__type === \"arrayOf\"\r\n ) {\r\n // ResourceArraySchema — structured array items with their own sub-schema\r\n if (Array.isArray(value)) {\r\n outputValue = value\r\n .map((item) => this.transformArrayItem(item, outputSettings.schema, locale))\r\n .filter((v) => v !== undefined);\r\n } else {\r\n outputValue = this.transformArrayItem(value, outputSettings.schema, locale);\r\n }\r\n }\r\n\r\n return outputValue;\r\n }\r\n\r\n /**\r\n * Extend the resource output\r\n */\r\n protected extend() {\r\n //\r\n }\r\n\r\n /**\r\n * Transform a self-referencing field value.\r\n *\r\n * @example\r\n * // Single: parent: \"self\"\r\n * // Array: children: \"self[]\"\r\n */\r\n protected transformSelfReference(value: any, isArray: boolean): any {\r\n if (isArray) {\r\n return Array.isArray(value)\r\n ? value.map((item) => this.resolveSelf(item)).filter((v) => v !== undefined)\r\n : undefined;\r\n }\r\n\r\n return this.resolveSelf(value);\r\n }\r\n\r\n /**\r\n * Resolve a single self-reference value.\r\n * Uses identity-based cycle detection (id/_id) and a max depth guard.\r\n */\r\n protected resolveSelf(value: any): any {\r\n if (!value) return undefined;\r\n\r\n const identity = value.id ?? value._id ?? value;\r\n const seen = this._selfSeen ?? new Set();\r\n\r\n // Circular reference or depth limit reached — stop recursion\r\n if (seen.has(identity) || seen.size >= MAX_SELF_DEPTH) {\r\n return undefined;\r\n }\r\n\r\n seen.add(identity);\r\n\r\n const SelfConstructor = this.constructor as typeof Resource;\r\n const child = new SelfConstructor(value);\r\n child._selfSeen = seen;\r\n\r\n return child.toJSON();\r\n }\r\n\r\n /**\r\n * Transform a single array item according to the given schema\r\n */\r\n protected transformArrayItem(\r\n item: any,\r\n schema: Record<string, ResourceFieldConfig>,\r\n locale?: string,\r\n ) {\r\n const transformedItem: GenericObject = {};\r\n\r\n for (const [outputKey, outputSettings] of Object.entries(schema)) {\r\n let fieldKey = outputKey;\r\n let valueTransformType = outputSettings as ResourceFieldConfig;\r\n\r\n if (Array.isArray(outputSettings)) {\r\n fieldKey = outputSettings[0];\r\n valueTransformType = outputSettings[1];\r\n }\r\n\r\n const inputValue = get(item, fieldKey);\r\n const outputValue = this.transformValue(inputValue, valueTransformType, locale);\r\n\r\n if (outputValue !== undefined) {\r\n set(transformedItem, outputKey, outputValue);\r\n }\r\n }\r\n\r\n return transformedItem;\r\n }\r\n\r\n /**\r\n * Get a input value for the given key\r\n */\r\n public get(key: string, defaultValue?: any) {\r\n return get(this.resource, key, defaultValue);\r\n }\r\n\r\n /**\r\n * Set the given value for the given field\r\n */\r\n public set(key: string, value: any): ResourceContract {\r\n set(this.data, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Create an array schema for transforming array items\r\n */\r\n public arrayOf(schema: Record<string, ResourceFieldConfig>): ResourceArraySchema {\r\n return {\r\n __type: \"arrayOf\",\r\n schema,\r\n };\r\n }\r\n\r\n /**\r\n * Get a string field builder\r\n */\r\n public string(inputKey?: string) {\r\n return this.fieldBuilder(\"string\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a date field builder\r\n */\r\n public date(inputKey?: string) {\r\n return this.fieldBuilder(\"date\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a localized field builder\r\n */\r\n public localized(inputKey?: string) {\r\n return this.fieldBuilder(\"localized\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a url field builder\r\n */\r\n public url(inputKey?: string) {\r\n return this.fieldBuilder(\"url\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a uploadsUrl field builder\r\n */\r\n public uploadsUrl(inputKey?: string) {\r\n return this.fieldBuilder(\"uploadsUrl\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a number field builder\r\n */\r\n public number(inputKey?: string) {\r\n return this.fieldBuilder(\"number\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a boolean field builder\r\n */\r\n public boolean(inputKey?: string) {\r\n return this.fieldBuilder(\"boolean\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a float field builder\r\n */\r\n public float(inputKey?: string) {\r\n return this.fieldBuilder(\"float\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a int field builder\r\n */\r\n public int(inputKey?: string) {\r\n return this.fieldBuilder(\"int\", inputKey);\r\n }\r\n\r\n /**\r\n * New field builder\r\n */\r\n protected fieldBuilder(type: ResourceOutputValueCastType, inputKey?: string) {\r\n const builder = new ResourceFieldBuilder(type);\r\n\r\n if (inputKey) {\r\n builder.setInputKey(inputKey);\r\n }\r\n\r\n return builder;\r\n }\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resource.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/resource/resource.ts"],"sourcesContent":["import { get, isLazy, set, type GenericObject } from \"@mongez/reinforcements\";\r\nimport { Model } from \"@warlock.js/cascade\";\r\nimport { useRequestStore } from \"../http/context/request-context\";\r\nimport { ResourceFieldBuilder } from \"./resource-field-builder\";\r\nimport {\r\n ResourceArraySchema,\r\n ResourceFieldConfig,\r\n ResourceOutputValueCastType,\r\n ResourceSchema,\r\n} from \"./types\";\r\n\r\n/**\r\n * Maximum recursion depth for self-referencing fields.\r\n * Prevents runaway serialization on deep trees or circular data.\r\n */\r\nconst MAX_SELF_DEPTH = 10;\r\n\r\n/**\r\n * Resource contract\r\n */\r\nexport interface ResourceContract {\r\n /**\r\n * Resource data\r\n */\r\n resource: GenericObject;\r\n\r\n /**\r\n * Resource final output\r\n */\r\n data: GenericObject;\r\n\r\n /**\r\n * Original data\r\n */\r\n originalData: GenericObject;\r\n\r\n /**\r\n * Convert resource to JSON\r\n */\r\n toJSON(): GenericObject;\r\n\r\n /**\r\n * Transform the given value with given type\r\n */\r\n transform(value: any, type: ResourceOutputValueCastType, locale?: string): any;\r\n\r\n /**\r\n * Get a input value for the given key\r\n */\r\n get(key: string, defaultValue?: any): any;\r\n\r\n /**\r\n * Set the given value for the given field\r\n */\r\n set(key: string, value: any): ResourceContract;\r\n\r\n /**\r\n * Create an array schema for transforming array items\r\n */\r\n arrayOf(schema: Record<string, ResourceFieldConfig>): ResourceArraySchema;\r\n\r\n /**\r\n * Get a string field builder\r\n */\r\n string(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a date field builder\r\n */\r\n date(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a localized field builder\r\n */\r\n localized(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a url field builder\r\n */\r\n url(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a uploadsUrl field builder\r\n */\r\n uploadsUrl(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a number field builder\r\n */\r\n number(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a boolean field builder\r\n */\r\n boolean(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a float field builder\r\n */\r\n float(inputKey?: string): ResourceFieldBuilder;\r\n\r\n /**\r\n * Get a int field builder\r\n */\r\n int(inputKey?: string): ResourceFieldBuilder;\r\n}\r\n\r\n/**\r\n * Resource constructor\r\n */\r\nexport interface ResourceConstructor {\r\n new (originalData: GenericObject | Resource | Model): ResourceContract;\r\n}\r\n\r\nexport class Resource implements ResourceContract {\r\n /**\r\n * Resource data\r\n */\r\n public resource: GenericObject = {};\r\n\r\n /**\r\n * Resource final output\r\n */\r\n public data: GenericObject = {};\r\n\r\n /**\r\n * Tracks visited object identities during self-reference recursion.\r\n * Prevents infinite loops on circular data (e.g. A.parent → B, B.parent → A).\r\n */\r\n protected _selfSeen?: Set<unknown>;\r\n\r\n /**\r\n * Raw resource schema — field declarations as written by the developer.\r\n * Used by doc generators for introspection.\r\n */\r\n public static schema: ResourceSchema = {};\r\n\r\n /**\r\n * Normalized schema — all string cast types and tuples converted to\r\n * ResourceFieldBuilder instances at definition time. Used by transformOutput at runtime.\r\n */\r\n public static parsedSchema: Record<string, ResourceFieldConfig> = {};\r\n\r\n /**\r\n * Normalize a raw schema into parsedSchema.\r\n * Converts string cast types (including suffixes) and tuples into pre-built builders.\r\n * Other entry types (ResourceConstructor, resolver functions, ResourceArraySchema) are kept as-is.\r\n */\r\n public static normalizeSchema(schema: ResourceSchema): Record<string, ResourceFieldConfig> {\r\n const parsed: Record<string, ResourceFieldConfig> = {};\r\n\r\n for (const [key, value] of Object.entries(schema)) {\r\n if (value === \"self\" || value === \"self[]\") {\r\n // Keep self-references as-is — resolved lazily in transformValue\r\n parsed[key] = value;\r\n } else if (isLazy<ResourceConstructor>(value)) {\r\n // Keep Lazy<ResourceConstructor> as-is — resolved at transform\r\n // time so cyclic resource refs (A embeds B embeds A) compose\r\n // without import-graph cycles.\r\n parsed[key] = value;\r\n } else if (typeof value === \"string\") {\r\n parsed[key] = ResourceFieldBuilder.fromCastType(value);\r\n } else if (Array.isArray(value) && value.length === 2 && typeof value[0] === \"string\") {\r\n const builder = ResourceFieldBuilder.fromCastType(value[1] as string);\r\n builder.setInputKey(value[0]);\r\n parsed[key] = builder;\r\n } else {\r\n parsed[key] = value;\r\n }\r\n }\r\n\r\n return parsed;\r\n }\r\n\r\n /**\r\n * Constructor\r\n */\r\n public constructor(public originalData: GenericObject | Resource | Model) {\r\n if (this.originalData instanceof Model) {\r\n this.resource = this.originalData.data;\r\n } else if (this.originalData instanceof Resource) {\r\n this.resource = this.originalData.data;\r\n } else {\r\n this.resource = this.originalData;\r\n }\r\n }\r\n\r\n /**\r\n * Convert resource to JSON\r\n */\r\n public toJSON() {\r\n this.boot();\r\n this.transformOutput();\r\n this.extend();\r\n\r\n return this.data;\r\n }\r\n\r\n /**\r\n * Boot method\r\n * Called before transforming the resource\r\n */\r\n protected boot() {\r\n //\r\n }\r\n\r\n /**\r\n * Transform resource to output using the pre-normalized parsedSchema.\r\n * Builders handle their own array/nullable logic internally.\r\n * ResourceConstructor and ResourceArraySchema handle arrays in transformValue.\r\n */\r\n protected transformOutput() {\r\n const localeCode = useRequestStore()?.request?.locale;\r\n const parsedSchema = (this.constructor as typeof Resource).parsedSchema;\r\n\r\n for (const [outputKey, outputSettings] of Object.entries(parsedSchema)) {\r\n const inputValue = this.get(outputKey);\r\n const outputValue = this.transformValue(inputValue, outputSettings, localeCode);\r\n\r\n if (outputValue !== undefined) {\r\n this.set(outputKey, outputValue);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Transform the given value with given type\r\n */\r\n public transform(value: any, type: ResourceOutputValueCastType, locale?: string) {\r\n return new ResourceFieldBuilder(type).transform(value, locale);\r\n }\r\n\r\n /**\r\n * Transform the given value for the given output setting.\r\n * After normalization, string cast types no longer reach here — they are pre-converted to builders.\r\n */\r\n protected transformValue(value: any, outputSettings: ResourceFieldConfig, locale?: string): any {\r\n let outputValue: any;\r\n\r\n if (isLazy<ResourceConstructor>(outputSettings)) {\r\n // Resolve the lazy ref now (cyclic resource imports are fully loaded\r\n // by serialization time) and recurse — the resolved constructor is\r\n // handled by the ResourceConstructor branch below.\r\n return this.transformValue(value, outputSettings.resolve(), locale);\r\n }\r\n\r\n if (outputSettings === \"self\" || outputSettings === \"self[]\") {\r\n // Self-reference — resolve using the same resource class with cycle detection\r\n outputValue = this.transformSelfReference(value, outputSettings === \"self[]\");\r\n } else if (\r\n typeof outputSettings === \"function\" &&\r\n outputSettings.prototype instanceof Resource\r\n ) {\r\n if (!value) return;\r\n // Nested resource — handle both single and array values\r\n if (Array.isArray(value)) {\r\n if (value.length === 0) return;\r\n outputValue = value\r\n .map((item) => new (outputSettings as typeof Resource)(item).toJSON())\r\n .filter((v) => v !== undefined);\r\n } else {\r\n outputValue = new (outputSettings as typeof Resource)(value).toJSON();\r\n }\r\n } else if (typeof outputSettings === \"function\") {\r\n // Resolver function - bind to Resource instance for access to this.get(), etc.\r\n outputValue = (outputSettings as Function).call(this, value, this);\r\n } else if (outputSettings instanceof ResourceFieldBuilder) {\r\n // Builder — handles array mapping and nullable internally via isArrayField\r\n const inputKey = outputSettings.getInputKey();\r\n outputValue = outputSettings.transform(inputKey ? this.get(inputKey) : value, locale);\r\n } else if (\r\n typeof outputSettings === \"object\" &&\r\n outputSettings !== null &&\r\n \"__type\" in outputSettings &&\r\n outputSettings.__type === \"arrayOf\"\r\n ) {\r\n // ResourceArraySchema — structured array items with their own sub-schema\r\n if (Array.isArray(value)) {\r\n outputValue = value\r\n .map((item) => this.transformArrayItem(item, outputSettings.schema, locale))\r\n .filter((v) => v !== undefined);\r\n } else {\r\n outputValue = this.transformArrayItem(value, outputSettings.schema, locale);\r\n }\r\n }\r\n\r\n return outputValue;\r\n }\r\n\r\n /**\r\n * Extend the resource output\r\n */\r\n protected extend() {\r\n //\r\n }\r\n\r\n /**\r\n * Transform a self-referencing field value.\r\n *\r\n * @example\r\n * // Single: parent: \"self\"\r\n * // Array: children: \"self[]\"\r\n */\r\n protected transformSelfReference(value: any, isArray: boolean): any {\r\n if (isArray) {\r\n return Array.isArray(value)\r\n ? value.map((item) => this.resolveSelf(item)).filter((v) => v !== undefined)\r\n : undefined;\r\n }\r\n\r\n return this.resolveSelf(value);\r\n }\r\n\r\n /**\r\n * Resolve a single self-reference value.\r\n * Uses identity-based cycle detection (id/_id) and a max depth guard.\r\n */\r\n protected resolveSelf(value: any): any {\r\n if (!value) return undefined;\r\n\r\n const identity = value.id ?? value._id ?? value;\r\n const seen = this._selfSeen ?? new Set();\r\n\r\n // Circular reference or depth limit reached — stop recursion\r\n if (seen.has(identity) || seen.size >= MAX_SELF_DEPTH) {\r\n return undefined;\r\n }\r\n\r\n seen.add(identity);\r\n\r\n const SelfConstructor = this.constructor as typeof Resource;\r\n const child = new SelfConstructor(value);\r\n child._selfSeen = seen;\r\n\r\n return child.toJSON();\r\n }\r\n\r\n /**\r\n * Transform a single array item according to the given schema\r\n */\r\n protected transformArrayItem(\r\n item: any,\r\n schema: Record<string, ResourceFieldConfig>,\r\n locale?: string,\r\n ) {\r\n const transformedItem: GenericObject = {};\r\n\r\n for (const [outputKey, outputSettings] of Object.entries(schema)) {\r\n let fieldKey = outputKey;\r\n let valueTransformType = outputSettings as ResourceFieldConfig;\r\n\r\n if (Array.isArray(outputSettings)) {\r\n fieldKey = outputSettings[0];\r\n valueTransformType = outputSettings[1];\r\n }\r\n\r\n const inputValue = get(item, fieldKey);\r\n const outputValue = this.transformValue(inputValue, valueTransformType, locale);\r\n\r\n if (outputValue !== undefined) {\r\n set(transformedItem, outputKey, outputValue);\r\n }\r\n }\r\n\r\n return transformedItem;\r\n }\r\n\r\n /**\r\n * Get a input value for the given key\r\n */\r\n public get(key: string, defaultValue?: any) {\r\n return get(this.resource, key, defaultValue);\r\n }\r\n\r\n /**\r\n * Set the given value for the given field\r\n */\r\n public set(key: string, value: any): ResourceContract {\r\n set(this.data, key, value);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Create an array schema for transforming array items\r\n */\r\n public arrayOf(schema: Record<string, ResourceFieldConfig>): ResourceArraySchema {\r\n return {\r\n __type: \"arrayOf\",\r\n schema,\r\n };\r\n }\r\n\r\n /**\r\n * Get a string field builder\r\n */\r\n public string(inputKey?: string) {\r\n return this.fieldBuilder(\"string\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a date field builder\r\n */\r\n public date(inputKey?: string) {\r\n return this.fieldBuilder(\"date\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a localized field builder\r\n */\r\n public localized(inputKey?: string) {\r\n return this.fieldBuilder(\"localized\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a url field builder\r\n */\r\n public url(inputKey?: string) {\r\n return this.fieldBuilder(\"url\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a uploadsUrl field builder\r\n */\r\n public uploadsUrl(inputKey?: string) {\r\n return this.fieldBuilder(\"uploadsUrl\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a number field builder\r\n */\r\n public number(inputKey?: string) {\r\n return this.fieldBuilder(\"number\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a boolean field builder\r\n */\r\n public boolean(inputKey?: string) {\r\n return this.fieldBuilder(\"boolean\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a float field builder\r\n */\r\n public float(inputKey?: string) {\r\n return this.fieldBuilder(\"float\", inputKey);\r\n }\r\n\r\n /**\r\n * Get a int field builder\r\n */\r\n public int(inputKey?: string) {\r\n return this.fieldBuilder(\"int\", inputKey);\r\n }\r\n\r\n /**\r\n * New field builder\r\n */\r\n protected fieldBuilder(type: ResourceOutputValueCastType, inputKey?: string) {\r\n const builder = new ResourceFieldBuilder(type);\r\n\r\n if (inputKey) {\r\n builder.setInputKey(inputKey);\r\n }\r\n\r\n return builder;\r\n }\r\n}\r\n"],"mappings":"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"}
|
package/esm/resource/types.d.mts
CHANGED
|
@@ -3,7 +3,7 @@ import { ResourceFieldBuilder } from "./resource-field-builder.mjs";
|
|
|
3
3
|
import { ResourceConstructor, ResourceContract } from "./resource.mjs";
|
|
4
4
|
import { Lazy } from "@mongez/reinforcements";
|
|
5
5
|
|
|
6
|
-
//#region
|
|
6
|
+
//#region ../@warlock.js/core/src/resource/types.d.ts
|
|
7
7
|
type ResourceOutputValueCastType = "string" | "number" | "date" | "localized" | "boolean" | "url" | "float" | "int" | "object" | "array" | "uploadsUrl"
|
|
8
8
|
/**
|
|
9
9
|
* Storage url means the value will be generated using current storage.url method
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/resource/types.ts"],"mappings":";;;;;;KAKY,2BAAA;;;AAAZ;;;;AAAuC;AAsBvC;;KAAY,qBAAA;;AAAqB;AAQjC;;;;KAAY,gBAAA,GACR,2BAAA,MACG,2BAAA,UACA,2BAAA,SACA,2BAAA;AAAA,KAEK,mBAAA;EACV,MAAA;EACA,MAAA,EAAQ,MAAM,SAAS,mBAAA;AAAA;AAAA,KAGb,mBAAA,GACR,gBAAA,GACA,mBAAA,GACA,qBAAA,GACA,IAAA,CAAK,mBAAA,aACI,gBAAA,IACT,oBAAA,GACA,mBAAA,KACE,KAAA,OAAY,QAAA,EAAU,gBAAA;AAAA,KAEhB,cAAA,GAAiB,MAAM,SAAS,mBAAA;AAAA,KAEhC,qCAAA;EAnBL;;AAA2B;EAwB5B,MAAA;EAtByB;;;EA0BzB,SAAA;EAxBJ;;;EA4BI,SAAA;EA5BsC;AAG5C;;EA6BM,QAAA;EA5BF;;;EAgCE,MAAA;EA7BF;;;EAiCE,MAAA;EA7BsB;;;EAiCtB,GAAA;AAAA;;;;;;;KAcM,iBAAA,GACR,2BAAA,GACA,mBAAA,IACC,mBAAA;;;;AAlDuC;KAwDhC,cAAA,oBACK,cAAA;EACb,IAAA,EAAM,MAAA,SAAe,iBAAA;AAAA"}
|
|
@@ -4,7 +4,7 @@ import { RestfulMiddleware, RouteResource } from "../router/types.mjs";
|
|
|
4
4
|
import { RepositoryManager } from "../repositories/repository.manager.mjs";
|
|
5
5
|
import { Model } from "@warlock.js/cascade";
|
|
6
6
|
|
|
7
|
-
//#region
|
|
7
|
+
//#region ../@warlock.js/core/src/restful/restful.d.ts
|
|
8
8
|
declare abstract class Restful<T extends Model> implements RouteResource {
|
|
9
9
|
/**
|
|
10
10
|
* Middleware for each method
|
|
@@ -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":"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"}
|
|
@@ -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
|