@warlock.js/core 4.0.31 → 4.0.39
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/esm/cli/index.js +2 -1
- package/esm/cli/index.js.map +1 -1
- package/esm/cli/start.js +132 -2
- package/esm/cli/start.js.map +1 -1
- package/esm/index.js +72 -1
- package/esm/index.js.map +1 -1
- package/package.json +71 -65
- package/esm/application.d.ts +0 -27
- package/esm/application.d.ts.map +0 -1
- package/esm/bootstrap/setup.d.ts +0 -7
- package/esm/bootstrap/setup.d.ts.map +0 -1
- package/esm/bootstrap/setup.js +0 -38
- package/esm/bootstrap/setup.js.map +0 -1
- package/esm/bootstrap.d.ts +0 -2
- package/esm/bootstrap.d.ts.map +0 -1
- package/esm/bootstrap.js +0 -5
- package/esm/bootstrap.js.map +0 -1
- package/esm/cache/database-cache-driver.d.ts +0 -56
- package/esm/cache/database-cache-driver.d.ts.map +0 -1
- package/esm/cache/database-cache-driver.js +0 -96
- package/esm/cache/database-cache-driver.js.map +0 -1
- package/esm/cache/index.d.ts +0 -3
- package/esm/cache/index.d.ts.map +0 -1
- package/esm/cache/index.js +0 -1
- package/esm/cache/index.js.map +0 -1
- package/esm/cli/cli-command.d.ts +0 -115
- package/esm/cli/cli-command.d.ts.map +0 -1
- package/esm/cli/cli-command.js +0 -224
- package/esm/cli/cli-command.js.map +0 -1
- package/esm/cli/cli-commands.manager.d.ts +0 -71
- package/esm/cli/cli-commands.manager.d.ts.map +0 -1
- package/esm/cli/cli-commands.manager.js +0 -345
- package/esm/cli/cli-commands.manager.js.map +0 -1
- package/esm/cli/cli-commands.utils.d.ts +0 -68
- package/esm/cli/cli-commands.utils.d.ts.map +0 -1
- package/esm/cli/cli-commands.utils.js +0 -182
- package/esm/cli/cli-commands.utils.js.map +0 -1
- package/esm/cli/commands/build.command.d.ts +0 -2
- package/esm/cli/commands/build.command.d.ts.map +0 -1
- package/esm/cli/commands/build.command.js +0 -8
- package/esm/cli/commands/build.command.js.map +0 -1
- package/esm/cli/commands/dev-server.command.d.ts +0 -2
- package/esm/cli/commands/dev-server.command.d.ts.map +0 -1
- package/esm/cli/commands/dev-server.command.js +0 -16
- package/esm/cli/commands/dev-server.command.js.map +0 -1
- package/esm/cli/commands/start-production.command.d.ts +0 -2
- package/esm/cli/commands/start-production.command.d.ts.map +0 -1
- package/esm/cli/commands/start-production.command.js +0 -65
- package/esm/cli/commands/start-production.command.js.map +0 -1
- package/esm/cli/commands/typings-generator.command.d.ts +0 -2
- package/esm/cli/commands/typings-generator.command.d.ts.map +0 -1
- package/esm/cli/commands/typings-generator.command.js +0 -40
- package/esm/cli/commands/typings-generator.command.js.map +0 -1
- package/esm/cli/commands-loader.d.ts +0 -18
- package/esm/cli/commands-loader.d.ts.map +0 -1
- package/esm/cli/commands-loader.js +0 -45
- package/esm/cli/commands-loader.js.map +0 -1
- package/esm/cli/framework-cli-commands.d.ts +0 -2
- package/esm/cli/framework-cli-commands.d.ts.map +0 -1
- package/esm/cli/framework-cli-commands.js +0 -6
- package/esm/cli/framework-cli-commands.js.map +0 -1
- package/esm/cli/index.d.ts +0 -3
- package/esm/cli/index.d.ts.map +0 -1
- package/esm/cli/parse-cli-args.d.ts +0 -18
- package/esm/cli/parse-cli-args.d.ts.map +0 -1
- package/esm/cli/parse-cli-args.js +0 -82
- package/esm/cli/parse-cli-args.js.map +0 -1
- package/esm/cli/start.d.ts +0 -2
- package/esm/cli/start.d.ts.map +0 -1
- package/esm/cli/string-similarity.d.ts +0 -44
- package/esm/cli/string-similarity.d.ts.map +0 -1
- package/esm/cli/string-similarity.js +0 -57
- package/esm/cli/string-similarity.js.map +0 -1
- package/esm/cli/types.d.ts +0 -201
- package/esm/cli/types.d.ts.map +0 -1
- package/esm/config/config-getter.d.ts +0 -35
- package/esm/config/config-getter.d.ts.map +0 -1
- package/esm/config/config-getter.js +0 -21
- package/esm/config/config-getter.js.map +0 -1
- package/esm/config/config-handlers.d.ts +0 -19
- package/esm/config/config-handlers.d.ts.map +0 -1
- package/esm/config/config-handlers.js +0 -47
- package/esm/config/config-handlers.js.map +0 -1
- package/esm/config/config-loader.d.ts +0 -37
- package/esm/config/config-loader.d.ts.map +0 -1
- package/esm/config/config-loader.js +0 -83
- package/esm/config/config-loader.js.map +0 -1
- package/esm/config/config-manager.d.ts +0 -22
- package/esm/config/config-manager.d.ts.map +0 -1
- package/esm/config/config-manager.js +0 -25
- package/esm/config/config-manager.js.map +0 -1
- package/esm/config/config-special-handlers.d.ts +0 -17
- package/esm/config/config-special-handlers.d.ts.map +0 -1
- package/esm/config/config-special-handlers.js +0 -23
- package/esm/config/config-special-handlers.js.map +0 -1
- package/esm/config/index.d.ts +0 -5
- package/esm/config/index.d.ts.map +0 -1
- package/esm/config/load-config-files.d.ts +0 -6
- package/esm/config/load-config-files.d.ts.map +0 -1
- package/esm/config/load-config-files.js +0 -19
- package/esm/config/load-config-files.js.map +0 -1
- package/esm/config/types.d.ts +0 -52
- package/esm/config/types.d.ts.map +0 -1
- package/esm/database/decorators/index.d.ts +0 -2
- package/esm/database/decorators/index.d.ts.map +0 -1
- package/esm/database/decorators/sluggable.d.ts +0 -2
- package/esm/database/decorators/sluggable.d.ts.map +0 -1
- package/esm/database/decorators/sluggable.js +0 -8
- package/esm/database/decorators/sluggable.js.map +0 -1
- package/esm/database/index.d.ts +0 -3
- package/esm/database/index.d.ts.map +0 -1
- package/esm/database/models/database-log/database-log.d.ts +0 -13
- package/esm/database/models/database-log/database-log.d.ts.map +0 -1
- package/esm/database/models/database-log/database-log.js +0 -16
- package/esm/database/models/database-log/database-log.js.map +0 -1
- package/esm/database/models/database-log/index.d.ts +0 -2
- package/esm/database/models/database-log/index.d.ts.map +0 -1
- package/esm/dev2-server/config-handlers.d.ts +0 -8
- package/esm/dev2-server/config-handlers.d.ts.map +0 -1
- package/esm/dev2-server/config-loader.d.ts +0 -61
- package/esm/dev2-server/config-loader.d.ts.map +0 -1
- package/esm/dev2-server/connectors/base-connector.d.ts +0 -49
- package/esm/dev2-server/connectors/base-connector.d.ts.map +0 -1
- package/esm/dev2-server/connectors/base-connector.js +0 -48
- package/esm/dev2-server/connectors/base-connector.js.map +0 -1
- package/esm/dev2-server/connectors/cache-connector.d.ts +0 -23
- package/esm/dev2-server/connectors/cache-connector.d.ts.map +0 -1
- package/esm/dev2-server/connectors/cache-connector.js +0 -35
- package/esm/dev2-server/connectors/cache-connector.js.map +0 -1
- package/esm/dev2-server/connectors/connectors-manager.d.ts +0 -38
- package/esm/dev2-server/connectors/connectors-manager.d.ts.map +0 -1
- package/esm/dev2-server/connectors/connectors-manager.js +0 -80
- package/esm/dev2-server/connectors/connectors-manager.js.map +0 -1
- package/esm/dev2-server/connectors/database-connector.d.ts +0 -23
- package/esm/dev2-server/connectors/database-connector.d.ts.map +0 -1
- package/esm/dev2-server/connectors/database-connector.js +0 -42
- package/esm/dev2-server/connectors/database-connector.js.map +0 -1
- package/esm/dev2-server/connectors/http-connector.d.ts +0 -29
- package/esm/dev2-server/connectors/http-connector.d.ts.map +0 -1
- package/esm/dev2-server/connectors/http-connector.js +0 -69
- package/esm/dev2-server/connectors/http-connector.js.map +0 -1
- package/esm/dev2-server/connectors/index.d.ts +0 -11
- package/esm/dev2-server/connectors/index.d.ts.map +0 -1
- package/esm/dev2-server/connectors/types.d.ts +0 -49
- package/esm/dev2-server/connectors/types.d.ts.map +0 -1
- package/esm/dev2-server/connectors/types.js +0 -9
- package/esm/dev2-server/connectors/types.js.map +0 -1
- package/esm/dev2-server/create-worker.d.ts +0 -34
- package/esm/dev2-server/create-worker.d.ts.map +0 -1
- package/esm/dev2-server/create-worker.js +0 -37
- package/esm/dev2-server/create-worker.js.map +0 -1
- package/esm/dev2-server/dependency-graph.d.ts +0 -93
- package/esm/dev2-server/dependency-graph.d.ts.map +0 -1
- package/esm/dev2-server/dependency-graph.js +0 -266
- package/esm/dev2-server/dependency-graph.js.map +0 -1
- package/esm/dev2-server/dev-logger.d.ts +0 -14
- package/esm/dev2-server/dev-logger.d.ts.map +0 -1
- package/esm/dev2-server/dev-logger.js +0 -130
- package/esm/dev2-server/dev-logger.js.map +0 -1
- package/esm/dev2-server/development-server.d.ts +0 -47
- package/esm/dev2-server/development-server.d.ts.map +0 -1
- package/esm/dev2-server/development-server.js +0 -135
- package/esm/dev2-server/development-server.js.map +0 -1
- package/esm/dev2-server/events.d.ts +0 -5
- package/esm/dev2-server/events.d.ts.map +0 -1
- package/esm/dev2-server/events.js +0 -4
- package/esm/dev2-server/events.js.map +0 -1
- package/esm/dev2-server/file-event-handler.d.ts +0 -156
- package/esm/dev2-server/file-event-handler.d.ts.map +0 -1
- package/esm/dev2-server/file-event-handler.js +0 -300
- package/esm/dev2-server/file-event-handler.js.map +0 -1
- package/esm/dev2-server/file-manager.d.ts +0 -385
- package/esm/dev2-server/file-manager.d.ts.map +0 -1
- package/esm/dev2-server/file-manager.js +0 -580
- package/esm/dev2-server/file-manager.js.map +0 -1
- package/esm/dev2-server/file-operations.d.ts +0 -203
- package/esm/dev2-server/file-operations.d.ts.map +0 -1
- package/esm/dev2-server/file-operations.js +0 -365
- package/esm/dev2-server/file-operations.js.map +0 -1
- package/esm/dev2-server/files-orchestrator.d.ts +0 -146
- package/esm/dev2-server/files-orchestrator.d.ts.map +0 -1
- package/esm/dev2-server/files-orchestrator.js +0 -314
- package/esm/dev2-server/files-orchestrator.js.map +0 -1
- package/esm/dev2-server/files-watcher.d.ts +0 -67
- package/esm/dev2-server/files-watcher.d.ts.map +0 -1
- package/esm/dev2-server/files-watcher.js +0 -95
- package/esm/dev2-server/files-watcher.js.map +0 -1
- package/esm/dev2-server/flags.d.ts +0 -10
- package/esm/dev2-server/flags.d.ts.map +0 -1
- package/esm/dev2-server/flags.js +0 -9
- package/esm/dev2-server/flags.js.map +0 -1
- package/esm/dev2-server/health-checker/checkers/base-health-checker.d.ts +0 -52
- package/esm/dev2-server/health-checker/checkers/base-health-checker.d.ts.map +0 -1
- package/esm/dev2-server/health-checker/checkers/base-health-checker.js +0 -71
- package/esm/dev2-server/health-checker/checkers/base-health-checker.js.map +0 -1
- package/esm/dev2-server/health-checker/checkers/eslint-health-checker.d.ts +0 -40
- package/esm/dev2-server/health-checker/checkers/eslint-health-checker.d.ts.map +0 -1
- package/esm/dev2-server/health-checker/checkers/eslint-health-checker.js +0 -217
- package/esm/dev2-server/health-checker/checkers/eslint-health-checker.js.map +0 -1
- package/esm/dev2-server/health-checker/checkers/typescript-health-checker.d.ts +0 -56
- package/esm/dev2-server/health-checker/checkers/typescript-health-checker.d.ts.map +0 -1
- package/esm/dev2-server/health-checker/checkers/typescript-health-checker.js +0 -279
- package/esm/dev2-server/health-checker/checkers/typescript-health-checker.js.map +0 -1
- package/esm/dev2-server/health-checker/file-health-checker.contract.d.ts +0 -59
- package/esm/dev2-server/health-checker/file-health-checker.contract.d.ts.map +0 -1
- package/esm/dev2-server/health-checker/file-health-result.d.ts +0 -68
- package/esm/dev2-server/health-checker/file-health-result.d.ts.map +0 -1
- package/esm/dev2-server/health-checker/file-health-result.js +0 -40
- package/esm/dev2-server/health-checker/file-health-result.js.map +0 -1
- package/esm/dev2-server/health-checker/files-healthcare.manager.d.ts +0 -115
- package/esm/dev2-server/health-checker/files-healthcare.manager.d.ts.map +0 -1
- package/esm/dev2-server/health-checker/files-healthcare.manager.js +0 -422
- package/esm/dev2-server/health-checker/files-healthcare.manager.js.map +0 -1
- package/esm/dev2-server/health-checker/index.d.ts +0 -6
- package/esm/dev2-server/health-checker/index.d.ts.map +0 -1
- package/esm/dev2-server/health-checker/workers/eslint-health.worker.d.ts +0 -2
- package/esm/dev2-server/health-checker/workers/eslint-health.worker.d.ts.map +0 -1
- package/esm/dev2-server/health-checker/workers/eslint-health.worker.js +0 -214
- package/esm/dev2-server/health-checker/workers/eslint-health.worker.js.map +0 -1
- package/esm/dev2-server/health-checker/workers/ts-health.worker.d.ts +0 -2
- package/esm/dev2-server/health-checker/workers/ts-health.worker.d.ts.map +0 -1
- package/esm/dev2-server/health-checker/workers/ts-health.worker.js +0 -261
- package/esm/dev2-server/health-checker/workers/ts-health.worker.js.map +0 -1
- package/esm/dev2-server/import-transformer.d.ts +0 -17
- package/esm/dev2-server/import-transformer.d.ts.map +0 -1
- package/esm/dev2-server/import-transformer.js +0 -236
- package/esm/dev2-server/import-transformer.js.map +0 -1
- package/esm/dev2-server/index.d.ts +0 -1
- package/esm/dev2-server/index.d.ts.map +0 -1
- package/esm/dev2-server/layer-executor.d.ts +0 -60
- package/esm/dev2-server/layer-executor.d.ts.map +0 -1
- package/esm/dev2-server/layer-executor.js +0 -309
- package/esm/dev2-server/layer-executor.js.map +0 -1
- package/esm/dev2-server/manifest-manager.d.ts +0 -80
- package/esm/dev2-server/manifest-manager.d.ts.map +0 -1
- package/esm/dev2-server/manifest-manager.js +0 -107
- package/esm/dev2-server/manifest-manager.js.map +0 -1
- package/esm/dev2-server/module-loader.d.ts +0 -104
- package/esm/dev2-server/module-loader.d.ts.map +0 -1
- package/esm/dev2-server/module-loader.js +0 -251
- package/esm/dev2-server/module-loader.js.map +0 -1
- package/esm/dev2-server/package-json-manager.d.ts +0 -16
- package/esm/dev2-server/package-json-manager.d.ts.map +0 -1
- package/esm/dev2-server/package-json-manager.js +0 -20
- package/esm/dev2-server/package-json-manager.js.map +0 -1
- package/esm/dev2-server/parse-imports.d.ts +0 -13
- package/esm/dev2-server/parse-imports.d.ts.map +0 -1
- package/esm/dev2-server/parse-imports.js +0 -329
- package/esm/dev2-server/parse-imports.js.map +0 -1
- package/esm/dev2-server/path.d.ts +0 -39
- package/esm/dev2-server/path.d.ts.map +0 -1
- package/esm/dev2-server/path.js +0 -56
- package/esm/dev2-server/path.js.map +0 -1
- package/esm/dev2-server/runtime-import-helper.d.ts +0 -9
- package/esm/dev2-server/runtime-import-helper.d.ts.map +0 -1
- package/esm/dev2-server/runtime-import-helper.js +0 -150
- package/esm/dev2-server/runtime-import-helper.js.map +0 -1
- package/esm/dev2-server/special-files-collector.d.ts +0 -114
- package/esm/dev2-server/special-files-collector.d.ts.map +0 -1
- package/esm/dev2-server/special-files-collector.js +0 -212
- package/esm/dev2-server/special-files-collector.js.map +0 -1
- package/esm/dev2-server/start-development-server.d.ts +0 -7
- package/esm/dev2-server/start-development-server.d.ts.map +0 -1
- package/esm/dev2-server/start-development-server.js +0 -21
- package/esm/dev2-server/start-development-server.js.map +0 -1
- package/esm/dev2-server/transpile-file.d.ts +0 -11
- package/esm/dev2-server/transpile-file.d.ts.map +0 -1
- package/esm/dev2-server/transpile-file.js +0 -21
- package/esm/dev2-server/transpile-file.js.map +0 -1
- package/esm/dev2-server/tsconfig-manager.d.ts +0 -45
- package/esm/dev2-server/tsconfig-manager.d.ts.map +0 -1
- package/esm/dev2-server/tsconfig-manager.js +0 -107
- package/esm/dev2-server/tsconfig-manager.js.map +0 -1
- package/esm/dev2-server/type-generator.d.ts +0 -115
- package/esm/dev2-server/type-generator.d.ts.map +0 -1
- package/esm/dev2-server/type-generator.js +0 -566
- package/esm/dev2-server/type-generator.js.map +0 -1
- package/esm/dev2-server/types.d.ts +0 -30
- package/esm/dev2-server/types.d.ts.map +0 -1
- package/esm/dev2-server/utils.d.ts +0 -15
- package/esm/dev2-server/utils.d.ts.map +0 -1
- package/esm/dev2-server/utils.js +0 -40
- package/esm/dev2-server/utils.js.map +0 -1
- package/esm/http/config.d.ts +0 -10
- package/esm/http/config.d.ts.map +0 -1
- package/esm/http/config.js +0 -22
- package/esm/http/config.js.map +0 -1
- package/esm/http/createHttpApplication.d.ts +0 -3
- package/esm/http/createHttpApplication.d.ts.map +0 -1
- package/esm/http/createHttpApplication.js +0 -28
- package/esm/http/createHttpApplication.js.map +0 -1
- package/esm/http/database/RequestLog.d.ts +0 -13
- package/esm/http/database/RequestLog.d.ts.map +0 -1
- package/esm/http/database/RequestLog.js +0 -25
- package/esm/http/database/RequestLog.js.map +0 -1
- package/esm/http/errors/index.d.ts +0 -2
- package/esm/http/errors/index.d.ts.map +0 -1
- package/esm/http/errors/resource-not-found.error.d.ts +0 -21
- package/esm/http/errors/resource-not-found.error.d.ts.map +0 -1
- package/esm/http/errors/resource-not-found.error.js +0 -40
- package/esm/http/errors/resource-not-found.error.js.map +0 -1
- package/esm/http/events.d.ts +0 -4
- package/esm/http/events.d.ts.map +0 -1
- package/esm/http/events.js +0 -26
- package/esm/http/events.js.map +0 -1
- package/esm/http/index.d.ts +0 -16
- package/esm/http/index.d.ts.map +0 -1
- package/esm/http/middleware/cache-response-middleware.d.ts +0 -34
- package/esm/http/middleware/cache-response-middleware.d.ts.map +0 -1
- package/esm/http/middleware/cache-response-middleware.js +0 -45
- package/esm/http/middleware/cache-response-middleware.js.map +0 -1
- package/esm/http/middleware/index.d.ts +0 -3
- package/esm/http/middleware/index.d.ts.map +0 -1
- package/esm/http/middleware/inject-request-context.d.ts +0 -35
- package/esm/http/middleware/inject-request-context.d.ts.map +0 -1
- package/esm/http/middleware/inject-request-context.js +0 -110
- package/esm/http/middleware/inject-request-context.js.map +0 -1
- package/esm/http/plugins/index.d.ts +0 -3
- package/esm/http/plugins/index.d.ts.map +0 -1
- package/esm/http/plugins.d.ts +0 -3
- package/esm/http/plugins.d.ts.map +0 -1
- package/esm/http/plugins.js +0 -39
- package/esm/http/plugins.js.map +0 -1
- package/esm/http/request-controller.d.ts +0 -11
- package/esm/http/request-controller.d.ts.map +0 -1
- package/esm/http/request-controller.js +0 -9
- package/esm/http/request-controller.js.map +0 -1
- package/esm/http/request.d.ts +0 -376
- package/esm/http/request.d.ts.map +0 -1
- package/esm/http/request.js +0 -729
- package/esm/http/request.js.map +0 -1
- package/esm/http/response.d.ts +0 -271
- package/esm/http/response.d.ts.map +0 -1
- package/esm/http/response.js +0 -574
- package/esm/http/response.js.map +0 -1
- package/esm/http/server.d.ts +0 -8
- package/esm/http/server.d.ts.map +0 -1
- package/esm/http/server.js +0 -15
- package/esm/http/server.js.map +0 -1
- package/esm/http/types.d.ts +0 -174
- package/esm/http/types.d.ts.map +0 -1
- package/esm/http/uploaded-file.d.ts +0 -445
- package/esm/http/uploaded-file.d.ts.map +0 -1
- package/esm/http/uploaded-file.js +0 -694
- package/esm/http/uploaded-file.js.map +0 -1
- package/esm/http/uploads-config.d.ts +0 -26
- package/esm/http/uploads-config.d.ts.map +0 -1
- package/esm/http/uploads-config.js +0 -35
- package/esm/http/uploads-config.js.map +0 -1
- package/esm/http/uploads-types.d.ts +0 -236
- package/esm/http/uploads-types.d.ts.map +0 -1
- package/esm/image/image.d.ts +0 -382
- package/esm/image/image.d.ts.map +0 -1
- package/esm/image/image.js +0 -552
- package/esm/image/image.js.map +0 -1
- package/esm/image/index.d.ts +0 -2
- package/esm/image/index.d.ts.map +0 -1
- package/esm/index.d.ts +0 -29
- package/esm/index.d.ts.map +0 -1
- package/esm/logger/index.d.ts +0 -3
- package/esm/logger/index.d.ts.map +0 -1
- package/esm/logger/logger.d.ts +0 -3
- package/esm/logger/logger.d.ts.map +0 -1
- package/esm/logger/logger.js +0 -16
- package/esm/logger/logger.js.map +0 -1
- package/esm/logger/types.d.ts +0 -39
- package/esm/logger/types.d.ts.map +0 -1
- package/esm/mail/config.d.ts +0 -83
- package/esm/mail/config.d.ts.map +0 -1
- package/esm/mail/config.js +0 -152
- package/esm/mail/config.js.map +0 -1
- package/esm/mail/events.d.ts +0 -96
- package/esm/mail/events.d.ts.map +0 -1
- package/esm/mail/events.js +0 -123
- package/esm/mail/events.js.map +0 -1
- package/esm/mail/index.d.ts +0 -10
- package/esm/mail/index.d.ts.map +0 -1
- package/esm/mail/mail.d.ts +0 -175
- package/esm/mail/mail.d.ts.map +0 -1
- package/esm/mail/mail.js +0 -286
- package/esm/mail/mail.js.map +0 -1
- package/esm/mail/mailer-pool.d.ts +0 -26
- package/esm/mail/mailer-pool.d.ts.map +0 -1
- package/esm/mail/mailer-pool.js +0 -95
- package/esm/mail/mailer-pool.js.map +0 -1
- package/esm/mail/react-mail.d.ts +0 -6
- package/esm/mail/react-mail.d.ts.map +0 -1
- package/esm/mail/react-mail.js +0 -25
- package/esm/mail/react-mail.js.map +0 -1
- package/esm/mail/send-mail.d.ts +0 -33
- package/esm/mail/send-mail.d.ts.map +0 -1
- package/esm/mail/send-mail.js +0 -309
- package/esm/mail/send-mail.js.map +0 -1
- package/esm/mail/test-mailbox.d.ts +0 -110
- package/esm/mail/test-mailbox.d.ts.map +0 -1
- package/esm/mail/test-mailbox.js +0 -143
- package/esm/mail/test-mailbox.js.map +0 -1
- package/esm/mail/types.d.ts +0 -245
- package/esm/mail/types.d.ts.map +0 -1
- package/esm/mail/types.js +0 -13
- package/esm/mail/types.js.map +0 -1
- package/esm/manifest/manifest-manager.d.ts +0 -74
- package/esm/manifest/manifest-manager.d.ts.map +0 -1
- package/esm/manifest/manifest-manager.js +0 -88
- package/esm/manifest/manifest-manager.js.map +0 -1
- package/esm/output/index.d.ts +0 -3
- package/esm/output/index.d.ts.map +0 -1
- package/esm/output/output.d.ts +0 -193
- package/esm/output/output.d.ts.map +0 -1
- package/esm/output/output.js +0 -599
- package/esm/output/output.js.map +0 -1
- package/esm/output/types.d.ts +0 -23
- package/esm/output/types.d.ts.map +0 -1
- package/esm/production/build-app-production.d.ts +0 -6
- package/esm/production/build-app-production.d.ts.map +0 -1
- package/esm/production/build-app-production.js +0 -8
- package/esm/production/build-app-production.js.map +0 -1
- package/esm/production/esbuild-plugins.d.ts +0 -5
- package/esm/production/esbuild-plugins.d.ts.map +0 -1
- package/esm/production/esbuild-plugins.js +0 -23
- package/esm/production/esbuild-plugins.js.map +0 -1
- package/esm/production/production-builder.d.ts +0 -76
- package/esm/production/production-builder.d.ts.map +0 -1
- package/esm/production/production-builder.js +0 -245
- package/esm/production/production-builder.js.map +0 -1
- package/esm/react/index.d.ts +0 -3
- package/esm/react/index.d.ts.map +0 -1
- package/esm/react/index.js +0 -7
- package/esm/react/index.js.map +0 -1
- package/esm/repositories/base-repository-manager.d.ts +0 -47
- package/esm/repositories/base-repository-manager.d.ts.map +0 -1
- package/esm/repositories/base-repository-manager.js +0 -63
- package/esm/repositories/base-repository-manager.js.map +0 -1
- package/esm/repositories/index.d.ts +0 -8
- package/esm/repositories/index.d.ts.map +0 -1
- package/esm/repositories/repository-destroyer-manager.d.ts +0 -21
- package/esm/repositories/repository-destroyer-manager.d.ts.map +0 -1
- package/esm/repositories/repository-destroyer-manager.js +0 -38
- package/esm/repositories/repository-destroyer-manager.js.map +0 -1
- package/esm/repositories/repository-filler-manager.d.ts +0 -60
- package/esm/repositories/repository-filler-manager.d.ts.map +0 -1
- package/esm/repositories/repository-filler-manager.js +0 -102
- package/esm/repositories/repository-filler-manager.js.map +0 -1
- package/esm/repositories/repository-filler.d.ts +0 -26
- package/esm/repositories/repository-filler.d.ts.map +0 -1
- package/esm/repositories/repository-filler.js +0 -63
- package/esm/repositories/repository-filler.js.map +0 -1
- package/esm/repositories/repository-list-manager.d.ts +0 -385
- package/esm/repositories/repository-list-manager.d.ts.map +0 -1
- package/esm/repositories/repository-list-manager.js +0 -812
- package/esm/repositories/repository-list-manager.js.map +0 -1
- package/esm/repositories/repository-listing.d.ts +0 -82
- package/esm/repositories/repository-listing.d.ts.map +0 -1
- package/esm/repositories/repository-listing.js +0 -177
- package/esm/repositories/repository-listing.js.map +0 -1
- package/esm/repositories/repository-manager.d.ts +0 -5
- package/esm/repositories/repository-manager.d.ts.map +0 -1
- package/esm/repositories/repository-manager.js +0 -2
- package/esm/repositories/repository-manager.js.map +0 -1
- package/esm/repositories/types.d.ts +0 -114
- package/esm/repositories/types.d.ts.map +0 -1
- package/esm/repositories/utils.d.ts +0 -3
- package/esm/repositories/utils.d.ts.map +0 -1
- package/esm/repositories/utils.js +0 -7
- package/esm/repositories/utils.js.map +0 -1
- package/esm/restful/index.d.ts +0 -2
- package/esm/restful/index.d.ts.map +0 -1
- package/esm/restful/restful.d.ts +0 -110
- package/esm/restful/restful.d.ts.map +0 -1
- package/esm/restful/restful.js +0 -317
- package/esm/restful/restful.js.map +0 -1
- package/esm/router/index.d.ts +0 -4
- package/esm/router/index.d.ts.map +0 -1
- package/esm/router/route-registry.d.ts +0 -30
- package/esm/router/route-registry.d.ts.map +0 -1
- package/esm/router/route-registry.js +0 -67
- package/esm/router/route-registry.js.map +0 -1
- package/esm/router/route.d.ts +0 -34
- package/esm/router/route.d.ts.map +0 -1
- package/esm/router/router.d.ts +0 -169
- package/esm/router/router.d.ts.map +0 -1
- package/esm/router/router.js +0 -564
- package/esm/router/router.js.map +0 -1
- package/esm/router/types.d.ts +0 -258
- package/esm/router/types.d.ts.map +0 -1
- package/esm/router/utils.d.ts +0 -5
- package/esm/router/utils.d.ts.map +0 -1
- package/esm/router/utils.js +0 -6
- package/esm/router/utils.js.map +0 -1
- package/esm/storage/config.d.ts +0 -8
- package/esm/storage/config.d.ts.map +0 -1
- package/esm/storage/config.js +0 -6
- package/esm/storage/config.js.map +0 -1
- package/esm/storage/drivers/cloud-driver.d.ts +0 -127
- package/esm/storage/drivers/cloud-driver.d.ts.map +0 -1
- package/esm/storage/drivers/cloud-driver.js +0 -406
- package/esm/storage/drivers/cloud-driver.js.map +0 -1
- package/esm/storage/drivers/do-spaces-driver.d.ts +0 -47
- package/esm/storage/drivers/do-spaces-driver.d.ts.map +0 -1
- package/esm/storage/drivers/do-spaces-driver.js +0 -52
- package/esm/storage/drivers/do-spaces-driver.js.map +0 -1
- package/esm/storage/drivers/local-driver.d.ts +0 -136
- package/esm/storage/drivers/local-driver.d.ts.map +0 -1
- package/esm/storage/drivers/local-driver.js +0 -409
- package/esm/storage/drivers/local-driver.js.map +0 -1
- package/esm/storage/drivers/r2-driver.d.ts +0 -50
- package/esm/storage/drivers/r2-driver.d.ts.map +0 -1
- package/esm/storage/drivers/r2-driver.js +0 -59
- package/esm/storage/drivers/r2-driver.js.map +0 -1
- package/esm/storage/drivers/s3-driver.d.ts +0 -32
- package/esm/storage/drivers/s3-driver.d.ts.map +0 -1
- package/esm/storage/drivers/s3-driver.js +0 -34
- package/esm/storage/drivers/s3-driver.js.map +0 -1
- package/esm/storage/index.d.ts +0 -12
- package/esm/storage/index.d.ts.map +0 -1
- package/esm/storage/scoped-storage.d.ts +0 -402
- package/esm/storage/scoped-storage.d.ts.map +0 -1
- package/esm/storage/scoped-storage.js +0 -488
- package/esm/storage/scoped-storage.js.map +0 -1
- package/esm/storage/storage-file.d.ts +0 -216
- package/esm/storage/storage-file.d.ts.map +0 -1
- package/esm/storage/storage-file.js +0 -358
- package/esm/storage/storage-file.js.map +0 -1
- package/esm/storage/storage.d.ts +0 -582
- package/esm/storage/storage.d.ts.map +0 -1
- package/esm/storage/storage.js +0 -941
- package/esm/storage/storage.js.map +0 -1
- package/esm/storage/types.d.ts +0 -728
- package/esm/storage/types.d.ts.map +0 -1
- package/esm/storage/utils/mime.d.ts +0 -33
- package/esm/storage/utils/mime.d.ts.map +0 -1
- package/esm/storage/utils/mime.js +0 -45
- package/esm/storage/utils/mime.js.map +0 -1
- package/esm/store/index.d.ts +0 -25
- package/esm/store/index.d.ts.map +0 -1
- package/esm/store/index.js +0 -52
- package/esm/store/index.js.map +0 -1
- package/esm/tests/boot-testing.d.ts +0 -7
- package/esm/tests/boot-testing.d.ts.map +0 -1
- package/esm/tests/boot-testing.js +0 -23
- package/esm/tests/boot-testing.js.map +0 -1
- package/esm/tests/create-http-test-application.d.ts +0 -25
- package/esm/tests/create-http-test-application.d.ts.map +0 -1
- package/esm/tests/create-http-test-application.js +0 -76
- package/esm/tests/create-http-test-application.js.map +0 -1
- package/esm/tests/http-response-output-test.d.ts +0 -42
- package/esm/tests/http-response-output-test.d.ts.map +0 -1
- package/esm/tests/http-response-output-test.js +0 -53
- package/esm/tests/http-response-output-test.js.map +0 -1
- package/esm/tests/http-test-response.d.ts +0 -75
- package/esm/tests/http-test-response.d.ts.map +0 -1
- package/esm/tests/index.d.ts +0 -4
- package/esm/tests/index.d.ts.map +0 -1
- package/esm/tests/init-testing.d.ts +0 -7
- package/esm/tests/init-testing.d.ts.map +0 -1
- package/esm/tests/types.d.ts +0 -10
- package/esm/tests/types.d.ts.map +0 -1
- package/esm/utils/app-log.d.ts +0 -8
- package/esm/utils/app-log.d.ts.map +0 -1
- package/esm/utils/app-log.js +0 -7
- package/esm/utils/app-log.js.map +0 -1
- package/esm/utils/cleanup-temp-files.d.ts +0 -5
- package/esm/utils/cleanup-temp-files.d.ts.map +0 -1
- package/esm/utils/database-log.d.ts +0 -25
- package/esm/utils/database-log.d.ts.map +0 -1
- package/esm/utils/database-log.js +0 -44
- package/esm/utils/database-log.js.map +0 -1
- package/esm/utils/date-output.d.ts +0 -69
- package/esm/utils/date-output.d.ts.map +0 -1
- package/esm/utils/date-output.js +0 -62
- package/esm/utils/date-output.js.map +0 -1
- package/esm/utils/date-output.test.d.ts +0 -2
- package/esm/utils/date-output.test.d.ts.map +0 -1
- package/esm/utils/download-file.d.ts +0 -3
- package/esm/utils/download-file.d.ts.map +0 -1
- package/esm/utils/environment.d.ts +0 -4
- package/esm/utils/environment.d.ts.map +0 -1
- package/esm/utils/environment.js +0 -6
- package/esm/utils/environment.js.map +0 -1
- package/esm/utils/get-localized.d.ts +0 -10
- package/esm/utils/get-localized.d.ts.map +0 -1
- package/esm/utils/get-localized.js +0 -15
- package/esm/utils/get-localized.js.map +0 -1
- package/esm/utils/get-localized.test.d.ts +0 -2
- package/esm/utils/get-localized.test.d.ts.map +0 -1
- package/esm/utils/index.d.ts +0 -13
- package/esm/utils/index.d.ts.map +0 -1
- package/esm/utils/internal.d.ts +0 -4
- package/esm/utils/internal.d.ts.map +0 -1
- package/esm/utils/paths.d.ts +0 -55
- package/esm/utils/paths.d.ts.map +0 -1
- package/esm/utils/paths.js +0 -89
- package/esm/utils/paths.js.map +0 -1
- package/esm/utils/promise-all-object.d.ts +0 -8
- package/esm/utils/promise-all-object.d.ts.map +0 -1
- package/esm/utils/promise-all-object.js +0 -12
- package/esm/utils/promise-all-object.js.map +0 -1
- package/esm/utils/queue.d.ts +0 -49
- package/esm/utils/queue.d.ts.map +0 -1
- package/esm/utils/queue.js +0 -89
- package/esm/utils/queue.js.map +0 -1
- package/esm/utils/sleep.d.ts +0 -2
- package/esm/utils/sleep.d.ts.map +0 -1
- package/esm/utils/sleep.js +0 -3
- package/esm/utils/sleep.js.map +0 -1
- package/esm/utils/sluggable.d.ts +0 -5
- package/esm/utils/sluggable.d.ts.map +0 -1
- package/esm/utils/sluggable.js +0 -15
- package/esm/utils/sluggable.js.map +0 -1
- package/esm/utils/sluggable.test.d.ts +0 -2
- package/esm/utils/sluggable.test.d.ts.map +0 -1
- package/esm/utils/to-json.d.ts +0 -2
- package/esm/utils/to-json.d.ts.map +0 -1
- package/esm/utils/to-json.js +0 -26
- package/esm/utils/to-json.js.map +0 -1
- package/esm/utils/types.d.ts +0 -22
- package/esm/utils/types.d.ts.map +0 -1
- package/esm/utils/urls.d.ts +0 -21
- package/esm/utils/urls.d.ts.map +0 -1
- package/esm/utils/urls.js +0 -31
- package/esm/utils/urls.js.map +0 -1
- package/esm/validation/database/exists-except-current-id.d.ts +0 -7
- package/esm/validation/database/exists-except-current-id.d.ts.map +0 -1
- package/esm/validation/database/exists-except-current-id.js +0 -23
- package/esm/validation/database/exists-except-current-id.js.map +0 -1
- package/esm/validation/database/exists-except-current-user.d.ts +0 -7
- package/esm/validation/database/exists-except-current-user.d.ts.map +0 -1
- package/esm/validation/database/exists-except-current-user.js +0 -25
- package/esm/validation/database/exists-except-current-user.js.map +0 -1
- package/esm/validation/database/exists.d.ts +0 -7
- package/esm/validation/database/exists.d.ts.map +0 -1
- package/esm/validation/database/exists.js +0 -21
- package/esm/validation/database/exists.js.map +0 -1
- package/esm/validation/database/index.d.ts +0 -12
- package/esm/validation/database/index.d.ts.map +0 -1
- package/esm/validation/database/types.d.ts +0 -68
- package/esm/validation/database/types.d.ts.map +0 -1
- package/esm/validation/database/unique-except-current-id.d.ts +0 -7
- package/esm/validation/database/unique-except-current-id.d.ts.map +0 -1
- package/esm/validation/database/unique-except-current-id.js +0 -23
- package/esm/validation/database/unique-except-current-id.js.map +0 -1
- package/esm/validation/database/unique-except-current-user.d.ts +0 -7
- package/esm/validation/database/unique-except-current-user.d.ts.map +0 -1
- package/esm/validation/database/unique-except-current-user.js +0 -25
- package/esm/validation/database/unique-except-current-user.js.map +0 -1
- package/esm/validation/database/unique.d.ts +0 -7
- package/esm/validation/database/unique.d.ts.map +0 -1
- package/esm/validation/database/unique.js +0 -30
- package/esm/validation/database/unique.js.map +0 -1
- package/esm/validation/file/file.d.ts +0 -22
- package/esm/validation/file/file.d.ts.map +0 -1
- package/esm/validation/file/file.js +0 -60
- package/esm/validation/file/file.js.map +0 -1
- package/esm/validation/file/index.d.ts +0 -6
- package/esm/validation/file/index.d.ts.map +0 -1
- package/esm/validation/index.d.ts +0 -16
- package/esm/validation/index.d.ts.map +0 -1
- package/esm/validation/init.d.ts +0 -7
- package/esm/validation/init.d.ts.map +0 -1
- package/esm/validation/init.js +0 -34
- package/esm/validation/init.js.map +0 -1
- package/esm/validation/plugins/database-plugin.d.ts +0 -14
- package/esm/validation/plugins/database-plugin.d.ts.map +0 -1
- package/esm/validation/plugins/database-plugin.js +0 -95
- package/esm/validation/plugins/database-plugin.js.map +0 -1
- package/esm/validation/plugins/file-plugin.d.ts +0 -11
- package/esm/validation/plugins/file-plugin.d.ts.map +0 -1
- package/esm/validation/plugins/file-plugin.js +0 -17
- package/esm/validation/plugins/file-plugin.js.map +0 -1
- package/esm/validation/plugins/index.d.ts +0 -9
- package/esm/validation/plugins/index.d.ts.map +0 -1
- package/esm/validation/plugins/localized-plugin.d.ts +0 -11
- package/esm/validation/plugins/localized-plugin.d.ts.map +0 -1
- package/esm/validation/plugins/localized-plugin.js +0 -19
- package/esm/validation/plugins/localized-plugin.js.map +0 -1
- package/esm/validation/types.d.ts +0 -87
- package/esm/validation/types.d.ts.map +0 -1
- package/esm/validation/validateAll.d.ts +0 -7
- package/esm/validation/validateAll.d.ts.map +0 -1
- package/esm/validation/validateAll.js +0 -39
- package/esm/validation/validateAll.js.map +0 -1
- package/esm/validation/validators/file-validator.d.ts +0 -40
- package/esm/validation/validators/file-validator.d.ts.map +0 -1
- package/esm/validation/validators/file-validator.js +0 -94
- package/esm/validation/validators/file-validator.js.map +0 -1
- package/esm/validation/validators/index.d.ts +0 -7
- package/esm/validation/validators/index.d.ts.map +0 -1
- package/esm/warlock-config/default-configurations.d.ts +0 -3
- package/esm/warlock-config/default-configurations.d.ts.map +0 -1
- package/esm/warlock-config/default-configurations.js +0 -8
- package/esm/warlock-config/default-configurations.js.map +0 -1
- package/esm/warlock-config/define-config.d.ts +0 -3
- package/esm/warlock-config/define-config.d.ts.map +0 -1
- package/esm/warlock-config/define-config.js +0 -3
- package/esm/warlock-config/define-config.js.map +0 -1
- package/esm/warlock-config/index.d.ts +0 -4
- package/esm/warlock-config/index.d.ts.map +0 -1
- package/esm/warlock-config/types.d.ts +0 -79
- package/esm/warlock-config/types.d.ts.map +0 -1
- package/esm/warlock-config/warlock-config.manager.d.ts +0 -83
- package/esm/warlock-config/warlock-config.manager.d.ts.map +0 -1
- package/esm/warlock-config/warlock-config.manager.js +0 -141
- package/esm/warlock-config/warlock-config.manager.js.map +0 -1
package/esm/cli/index.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export{CLICommand,command}
|
|
1
|
+
var s=class{constructor(t,i){this.name=t;return i&&(this.commandDescription=i),this}commandSource;commandAction;commandPreAction;commandPreload;commandDescription;commandOptions=[];commandRelativePath;isPersistent=false;commandAlias;source(t){return this.commandSource=t,this}description(t){return this.commandDescription=t,this}persistent(t=true){return this.isPersistent=t,this}alias(t){return this.commandAlias=t,this}action(t){return this.commandAction=t,this}preAction(t){return this.commandPreAction=t,this}options(t){return t.map(i=>this.option(i)),this}$relativePath(t){return this.commandRelativePath=t,this}option(...t){let i;return t.length===1?i=t[0]:i={text:t[0],description:t[1],...t[2],name:""},this.commandOptions.push(this.parseOption(i)),this}parseOption(t){let o=t.text.trim().split(",").map(m=>m.trim()),e="",a="";if(o.length===1)e=this.extractOptionName(o[0]);else if(o.length===2){let m=o[0],r=o[1];m.startsWith("--")?(e=this.extractOptionName(m),a=this.extractOptionName(r)):(e=this.extractOptionName(r),a=this.extractOptionName(m));}if(a==="h"||e==="help")throw new Error("Help option is not allowed, it's reserved for displaying command help");return {...t,name:e,alias:a}}extractOptionName(t){let i=t.replace(/^-+/,""),o=i.indexOf("=");o!==-1&&(i=i.slice(0,o));let e=i.indexOf(" ");return e!==-1&&(i=i.slice(0,e)),i.trim()}preload(t){return this.commandPreload=t,this}async execute(t){if(!this.commandAction)throw new Error(`Command "${this.name}" has no action defined`);await this.commandAction(t);}};function c(n){let t=new s(n.name,n.description);return n.preload&&t.preload(n.preload),n.persistent&&t.persistent(n.persistent),n.alias&&t.alias(n.alias),t.action(n.action),n.options&&t.options(n.options),n.preAction&&t.preAction(n.preAction),t}export{s as CLICommand,c as command};//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
package/esm/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../warlock.js/core/src/cli/cli-command.ts"],"names":["CLICommand","name","description","source","isPersistent","alias","action","options","option","relativePath","args","parts","part","first","second","text","equalIndex","spaceIndex","data","command","commandInstnace"],"mappings":"AAUO,IAAMA,EAAN,KAAiB,CAoDf,YACEC,CAAAA,CACPC,CAAAA,CACA,CAFO,IAAA,CAAA,IAAA,CAAAD,CAAAA,CAGP,OAAIC,CAAAA,GACF,KAAK,kBAAA,CAAqBA,CAAAA,CAAAA,CAGrB,IACT,CAzDO,aAAA,CAKA,cAMA,gBAAA,CAKA,cAAA,CAKA,kBAAA,CAKA,cAAA,CAA6C,EAAC,CAO9C,mBAAA,CAKA,aAAwB,KAAA,CAKxB,YAAA,CAmBA,OAAOC,CAAAA,CAAgC,CAC5C,YAAK,aAAA,CAAgBA,CAAAA,CACd,IACT,CAKO,WAAA,CAAYD,EAA2B,CAC5C,OAAA,IAAA,CAAK,mBAAqBA,CAAAA,CACnB,IACT,CAKO,UAAA,CAAWE,EAAe,IAAA,CAAY,CAC3C,YAAK,YAAA,CAAeA,CAAAA,CACb,IACT,CAMO,KAAA,CAAMC,CAAAA,CAAqB,CAChC,YAAK,YAAA,CAAeA,CAAAA,CACb,IACT,CAKO,MAAA,CAAOC,EAAgC,CAC5C,OAAA,IAAA,CAAK,aAAA,CAAgBA,CAAAA,CACd,IACT,CAMO,SAAA,CAAUA,EAAgC,CAC/C,OAAA,IAAA,CAAK,iBAAmBA,CAAAA,CACjB,IACT,CAKO,OAAA,CAAQC,CAAAA,CAAmC,CAChD,OAAAA,CAAAA,CAAQ,IAAKC,CAAAA,EAAW,IAAA,CAAK,OAAOA,CAAM,CAAC,CAAA,CAEpC,IACT,CAKO,aAAA,CAAcC,CAAAA,CAAsB,CACzC,OAAA,IAAA,CAAK,mBAAA,CAAsBA,EACpB,IACT,CAOO,MAAA,CAAA,GACFC,CAAAA,CACG,CACN,IAAIF,CAAAA,CACJ,OAAIE,CAAAA,CAAK,MAAA,GAAW,EAClBF,CAAAA,CAASE,CAAAA,CAAK,CAAC,CAAA,CAEfF,EAAS,CACP,IAAA,CAAME,EAAK,CAAC,CAAA,CACZ,YAAaA,CAAAA,CAAK,CAAC,EACnB,GAAGA,CAAAA,CAAK,CAAC,CAAA,CACT,IAAA,CAAM,EACR,CAAA,CAGF,IAAA,CAAK,eAAe,IAAA,CAAK,IAAA,CAAK,WAAA,CAAYF,CAAM,CAAC,CAAA,CAE1C,IACT,CAWU,WAAA,CAAYA,CAAAA,CAAoD,CAIxE,IAAMG,CAAAA,CAHOH,CAAAA,CAAO,IAAA,CAAK,MAAK,CAGX,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAKI,GAASA,CAAAA,CAAK,IAAA,EAAM,CAAA,CAEnDX,EAAO,EAAA,CACPI,CAAAA,CAAQ,GAEZ,GAAIM,CAAAA,CAAM,SAAW,CAAA,CAEnBV,CAAAA,CAAO,KAAK,iBAAA,CAAkBU,CAAAA,CAAM,CAAC,CAAC,CAAA,CAAA,KAAA,GAC7BA,EAAM,MAAA,GAAW,CAAA,CAAG,CAE7B,IAAME,CAAAA,CAAQF,CAAAA,CAAM,CAAC,EACfG,CAAAA,CAASH,CAAAA,CAAM,CAAC,CAAA,CAGlBE,CAAAA,CAAM,WAAW,IAAI,CAAA,EACvBZ,CAAAA,CAAO,IAAA,CAAK,kBAAkBY,CAAK,CAAA,CACnCR,EAAQ,IAAA,CAAK,iBAAA,CAAkBS,CAAM,CAAA,GAErCb,CAAAA,CAAO,IAAA,CAAK,iBAAA,CAAkBa,CAAM,CAAA,CACpCT,CAAAA,CAAQ,KAAK,iBAAA,CAAkBQ,CAAK,GAExC,CAEA,GAAIR,IAAU,GAAA,EAAOJ,CAAAA,GAAS,OAC5B,MAAM,IAAI,MAAM,uEAAuE,CAAA,CAGzF,OAAO,CACL,GAAGO,CAAAA,CACH,IAAA,CAAAP,EACA,KAAA,CAAAI,CACF,CACF,CAUQ,iBAAA,CAAkBU,EAAsB,CAE9C,IAAId,CAAAA,CAAOc,CAAAA,CAAK,QAAQ,KAAA,CAAO,EAAE,EAG3BC,CAAAA,CAAaf,CAAAA,CAAK,QAAQ,GAAG,CAAA,CAC/Be,CAAAA,GAAe,EAAA,GACjBf,EAAOA,CAAAA,CAAK,KAAA,CAAM,EAAGe,CAAU,CAAA,CAAA,CAIjC,IAAMC,CAAAA,CAAahB,CAAAA,CAAK,QAAQ,GAAG,CAAA,CACnC,OAAIgB,CAAAA,GAAe,EAAA,GACjBhB,EAAOA,CAAAA,CAAK,KAAA,CAAM,EAAGgB,CAAU,CAAA,CAAA,CAG1BhB,CAAAA,CAAK,IAAA,EACd,CAKO,OAAA,CAAQM,EAA4B,CACzC,OAAA,IAAA,CAAK,eAAiBA,CAAAA,CACf,IACT,CAKA,MAAa,QAAQW,CAAAA,CAAyB,CAC5C,GAAI,CAAC,IAAA,CAAK,cACR,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,KAAK,IAAI,CAAA,uBAAA,CAAyB,EAGhE,MAAM,IAAA,CAAK,cAAcA,CAAI,EAC/B,CACF,EAEO,SAASC,EAAQZ,CAAAA,CAA4B,CAClD,IAAMa,CAAAA,CAAkB,IAAIpB,EAAWO,CAAAA,CAAQ,IAAA,CAAMA,CAAAA,CAAQ,WAAW,EAExE,OAAIA,CAAAA,CAAQ,SACVa,CAAAA,CAAgB,OAAA,CAAQb,EAAQ,OAAO,CAAA,CAGrCA,EAAQ,UAAA,EACVa,CAAAA,CAAgB,WAAWb,CAAAA,CAAQ,UAAU,EAG3CA,CAAAA,CAAQ,KAAA,EACVa,EAAgB,KAAA,CAAMb,CAAAA,CAAQ,KAAK,CAAA,CAGrCa,EAAgB,MAAA,CAAOb,CAAAA,CAAQ,MAAM,CAAA,CAEjCA,CAAAA,CAAQ,SACVa,CAAAA,CAAgB,OAAA,CAAQb,EAAQ,OAAO,CAAA,CAGrCA,EAAQ,SAAA,EACVa,CAAAA,CAAgB,UAAUb,CAAAA,CAAQ,SAAS,EAGtCa,CACT","file":"index.js","sourcesContent":["import type {\r\n CLICommandAction,\r\n CLICommandOption,\r\n CLICommandOptions,\r\n CLICommandPreload,\r\n CLICommandSource,\r\n CommandActionData,\r\n ResolvedCLICommandOption,\r\n} from \"./types\";\r\n\r\nexport class CLICommand {\r\n /**\r\n * Command source\r\n */\r\n public commandSource?: CLICommandSource;\r\n\r\n /**\r\n * Command action\r\n */\r\n public commandAction?: CLICommandAction;\r\n\r\n /**\r\n * Command pre action\r\n * This will be executed before loading preloaders\r\n */\r\n public commandPreAction?: CLICommandAction;\r\n\r\n /**\r\n * Command preload\r\n */\r\n public commandPreload?: CLICommandPreload;\r\n\r\n /**\r\n * Command description\r\n */\r\n public commandDescription?: string;\r\n\r\n /**\r\n * Command options\r\n */\r\n public commandOptions: ResolvedCLICommandOption[] = [];\r\n\r\n /**\r\n * Command relative path\r\n * Available only for project commands\r\n * Auto injected by the framework itself\r\n */\r\n public commandRelativePath?: string;\r\n\r\n /**\r\n * Determine if the command is persistent\r\n */\r\n public isPersistent: boolean = false;\r\n\r\n /**\r\n * Command alias (short name)\r\n */\r\n public commandAlias?: string;\r\n\r\n /**\r\n * Constructor\r\n */\r\n public constructor(\r\n public name: string,\r\n description?: string,\r\n ) {\r\n if (description) {\r\n this.commandDescription = description;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add command source\r\n */\r\n public source(source: CLICommandSource): this {\r\n this.commandSource = source;\r\n return this;\r\n }\r\n\r\n /**\r\n * Set command description\r\n */\r\n public description(description: string): this {\r\n this.commandDescription = description;\r\n return this;\r\n }\r\n\r\n /**\r\n * Determine if the command is persistent\r\n */\r\n public persistent(isPersistent = true): this {\r\n this.isPersistent = isPersistent;\r\n return this;\r\n }\r\n\r\n /**\r\n * Set command alias (short name)\r\n * @example .alias(\"m\") for \"migrate\"\r\n */\r\n public alias(alias: string): this {\r\n this.commandAlias = alias;\r\n return this;\r\n }\r\n\r\n /**\r\n * Command action\r\n */\r\n public action(action: CLICommandAction): this {\r\n this.commandAction = action;\r\n return this;\r\n }\r\n\r\n /**\r\n * Command pre action\r\n * This will be executed before loading preloaders\r\n */\r\n public preAction(action: CLICommandAction): this {\r\n this.commandPreAction = action;\r\n return this;\r\n }\r\n\r\n /**\r\n * Add command options\r\n */\r\n public options(options: CLICommandOption[]): this {\r\n options.map((option) => this.option(option));\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add command relative path\r\n */\r\n public $relativePath(relativePath: string) {\r\n this.commandRelativePath = relativePath;\r\n return this;\r\n }\r\n\r\n /**\r\n * Add command option\r\n */\r\n public option(option: CLICommandOption): this;\r\n public option(name: string, description?: string, options?: Omit<CLICommandOption, \"name\">): this;\r\n public option(\r\n ...args: [CLICommandOption] | [string, string?, Omit<CLICommandOption, \"name\">?]\r\n ): this {\r\n let option: CLICommandOption;\r\n if (args.length === 1) {\r\n option = args[0] as CLICommandOption;\r\n } else {\r\n option = {\r\n text: args[0],\r\n description: args[1],\r\n ...args[2],\r\n name: \"\",\r\n };\r\n }\r\n\r\n this.commandOptions.push(this.parseOption(option));\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Parse option name and alias if exists\r\n *\r\n * Supports formats:\r\n * - \"--port, -p\" → name: \"port\", alias: \"p\"\r\n * - \"-p, --port\" → name: \"port\", alias: \"p\"\r\n * - \"--port\" → name: \"port\", alias: undefined\r\n * - \"-p\" → name: \"p\", alias: undefined\r\n */\r\n protected parseOption(option: CLICommandOption): ResolvedCLICommandOption {\r\n const text = option.text.trim();\r\n\r\n // Split by comma to check for alias\r\n const parts = text.split(\",\").map((part) => part.trim());\r\n\r\n let name = \"\";\r\n let alias = \"\";\r\n\r\n if (parts.length === 1) {\r\n // Single option: \"--port\" or \"-p\"\r\n name = this.extractOptionName(parts[0]);\r\n } else if (parts.length === 2) {\r\n // Two options: \"--port, -p\" or \"-p, --port\"\r\n const first = parts[0];\r\n const second = parts[1];\r\n\r\n // Determine which is the long form (name) and which is short (alias)\r\n if (first.startsWith(\"--\")) {\r\n name = this.extractOptionName(first);\r\n alias = this.extractOptionName(second);\r\n } else {\r\n name = this.extractOptionName(second);\r\n alias = this.extractOptionName(first);\r\n }\r\n }\r\n\r\n if (alias === \"h\" || name === \"help\") {\r\n throw new Error(\"Help option is not allowed, it's reserved for displaying command help\");\r\n }\r\n\r\n return {\r\n ...option,\r\n name,\r\n alias,\r\n };\r\n }\r\n\r\n /**\r\n * Extract option name from text (removes -- or -)\r\n *\r\n * @example\r\n * extractOptionName(\"--port\") → \"port\"\r\n * extractOptionName(\"-p\") → \"p\"\r\n * extractOptionName(\"--port=3000\") → \"port\"\r\n */\r\n private extractOptionName(text: string): string {\r\n // Remove leading dashes\r\n let name = text.replace(/^-+/, \"\");\r\n\r\n // Remove value assignment if exists (e.g., \"--port=3000\" → \"port\")\r\n const equalIndex = name.indexOf(\"=\");\r\n if (equalIndex !== -1) {\r\n name = name.slice(0, equalIndex);\r\n }\r\n\r\n // Remove angle brackets if exists (e.g., \"--port <number>\" → \"port\")\r\n const spaceIndex = name.indexOf(\" \");\r\n if (spaceIndex !== -1) {\r\n name = name.slice(0, spaceIndex);\r\n }\r\n\r\n return name.trim();\r\n }\r\n\r\n /**\r\n * Command preload\r\n */\r\n public preload(options: CLICommandPreload) {\r\n this.commandPreload = options;\r\n return this;\r\n }\r\n\r\n /**\r\n * Execute the command\r\n */\r\n public async execute(data: CommandActionData) {\r\n if (!this.commandAction) {\r\n throw new Error(`Command \"${this.name}\" has no action defined`);\r\n }\r\n\r\n await this.commandAction(data);\r\n }\r\n}\r\n\r\nexport function command(options: CLICommandOptions) {\r\n const commandInstnace = new CLICommand(options.name, options.description);\r\n\r\n if (options.preload) {\r\n commandInstnace.preload(options.preload);\r\n }\r\n\r\n if (options.persistent) {\r\n commandInstnace.persistent(options.persistent);\r\n }\r\n\r\n if (options.alias) {\r\n commandInstnace.alias(options.alias);\r\n }\r\n\r\n commandInstnace.action(options.action);\r\n\r\n if (options.options) {\r\n commandInstnace.options(options.options);\r\n }\r\n\r\n if (options.preAction) {\r\n commandInstnace.preAction(options.preAction);\r\n }\r\n\r\n return commandInstnace;\r\n}\r\n"]}
|
package/esm/cli/start.js
CHANGED
|
@@ -1,2 +1,132 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {colors}from'@mongez/copper';import {loadEnv,env}from'@mongez/dotenv';import {ensureDirectoryAsync,fileExistsAsync,unlinkAsync,removeDirectoryAsync,getJsonFileAsync,putJsonFileAsync,getFileAsync,putFileAsync,createDirectoryAsync,lastModifiedAsync,isDirectoryAsync}from'@mongez/fs';import {initializeDayjs}from'@mongez/time-wizard';import {logger,captureAnyUnhandledRejection,log}from'@warlock.js/logger';import {init,parse}from'es-module-lexer';import {ltrim,toCamelCase,get,rtrim,trim,merge,Random,debounce,set,only,except,unset}from'@mongez/reinforcements';import {pathToFileURL,fileURLToPath}from'url';import os from'dayjs';import X,{basename,extname,dirname,join,resolve}from'path';import {connectToDatabase,dataSourceRegistry,migrationRunner,Migration,DatabaseWriterValidationError}from'@warlock.js/cascade';import {v}from'@warlock.js/seal';import {contextManager,Context}from'@warlock.js/context';import Ft from'@mongez/config';import'@mongez/slug';import {isEmpty,isScalar,isIterable,isPlainObject}from'@mongez/supportive-is';import Xo,{transform}from'esbuild';import w from'typescript';import Jt from'@mongez/events';import pt from'crypto';import Dr from'fast-glob';import en from'chokidar';import {ESLint}from'eslint';import Qt,{createWriteStream,createReadStream,constants}from'fs';import {Worker}from'worker_threads';import bo from'@fastify/http-proxy';import Di from'@fastify/static';import ki from'@mongez/concat-route';import {trans,transFrom}from'@mongez/localization';import vn from'mime';import wn from'axios';import Un,{writeFile,stat,readFile,copyFile,rename,readdir,access}from'fs/promises';import {pipeline}from'stream/promises';import yo from'find-my-way';import {cache}from'@warlock.js/cache';import Bo from'@fastify/multipart';import Ho from'fastify';import {spawn,execSync}from'child_process';var Ar=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});async function Ir(){await loadEnv(),initializeDayjs(),captureAnyUnhandledRejection();}var m=class{static toRelative(e){return this.normalize(X.relative(process.cwd(),e))}static relative(e){return this.normalize(X.relative(process.cwd(),e))}static toNormalizedAbsolute(e){return this.normalize(X.resolve(process.cwd(),e))}static toAbsolute(e){return this.normalize(X.resolve(process.cwd(),e))}static normalize(e){return e.replace(/\\/g,"/")}static join(...e){return this.normalize(X.join(...e))}static dirname(e){return this.normalize(X.dirname(e))}static basename(e,t){return X.basename(e,t)}static extname(e){return X.extname(e)}};function Z(){return colors.dim(`${os().format("HH:mm:ss A")}`)}function Ps(n){console.log(`${Z()} ${n}`);}function z(n){console.log(`${Z()} ${colors.green("\u2713")} ${colors.green(n)}`);}function q(n,e){if(console.log(`${Z()} ${colors.red("\u2717")} ${colors.red(n)}`),e&&e.stack){let t=Ss(e.stack);console.log(colors.dim(t));}}function Nr(n){console.log(`${Z()} ${colors.yellow("\u26A0")} ${colors.yellow(n)}`);}function ee(n){console.log(`${Z()} ${colors.cyan(n)}`);}function Be(n){console.log(`${Z()} ${colors.dim(n)}`);}function Lr(n,e){let t=m.toRelative(n),r=e?colors.dim(` +${e} module${e>1?"s":""}`):"";console.log(`${Z()} \u{1F525} ${colors.green("hmr update")} ${colors.dim(t)}${r}`);}function _r(n){console.log(`
|
|
2
|
+
${Z()} ${colors.green("\u279C")} ${colors.bold(n)}`);}function Br(n){console.log(`
|
|
3
|
+
${Z()} ${colors.bold(colors.cyan(n))}`);}function Ss(n){return n.split(`
|
|
4
|
+
`).map(r=>{let i=r;i=i.replace(/\.warlock[\\\/]cache[\\\/]/g,""),i=i.replace(/([a-zA-Z0-9_-]+(?:-[a-zA-Z0-9_-]+)+)\.js/g,(s,a)=>a.replace(/-/g,"/")+".ts");try{let s=i.match(/([A-Z]:\\[^:]+|\/[^:]+)(?=:|\))/);if(s){let a=s[1],o=m.toRelative(a);i=i.replace(a,o);}}catch{}return i}).join(`
|
|
5
|
+
`)}function Lt(n,e){let t=n.message,r=t.match(/Cannot find module '([^']+)' imported from '([^']+)'/);if(r){let[,i,s]=r,a=i.replace(/\.warlock[\\\/]cache[\\\/]/,"").replace(/([a-zA-Z0-9_-]+(?:-[a-zA-Z0-9_-]+)+)\.js/,(u,d)=>d.replace(/-/g,"/")+".ts"),o=s.replace(/\.warlock[\\\/]cache[\\\/]/,"").replace(/([a-zA-Z0-9_-]+(?:-[a-zA-Z0-9_-]+)+)\.js/,(u,d)=>d.replace(/-/g,"/")+".ts"),l=m.toRelative(a),c=m.toRelative(o),p=["",`${colors.red("\u274C MODULE NOT FOUND")}`,"",`${colors.dim("Cannot find:")} ${colors.cyan(l)}`,"",`${colors.dim("Imported by:")}`,` ${colors.yellow("\u2192")} ${colors.white(c)}`];return p.push(""),p.join(`
|
|
6
|
+
`)}return t}function U(n){Ps(n);}v.object({module:v.string(),action:v.string(),message:v.string(),trace:v.record(v.any()),level:v.string()});function je(){return process.env.NODE_ENV||"development"}var _t=class extends Context{getRequest(){return this.get("request")}getResponse(){return this.get("response")}getUser(){return this.getRequest()?.user}buildStore(e){return {request:e?.request,response:e?.response}}},jr=new _t;contextManager.register("request",jr);function I(...n){return X.resolve(process.cwd(),...n)}function k(...n){return I("src",...n)}function Hr(n=""){return I("storage",n)}function Bt(n=""){return I("src/app",n)}var ks=/[<>:"/\\|?*]/g;function zr(n){return n.replace(ks,"")}function E(...n){return I(".warlock",...n)}var Ur="";function Wr(n){Ur=n;}function qr(n=""){return rtrim(Ur,"/")+"/"+ltrim(n,"/")}var jt=class{aliases={};baseUrl=".";tsconfig;init(){if(this.tsconfig)return;let e=w.readConfigFile(m.toAbsolute("tsconfig.json"),w.sys.readFile);this.tsconfig=e.config,this.aliases=e.config?.compilerOptions?.paths||{},this.baseUrl=e.config?.compilerOptions?.baseUrl||".";}isAlias(e){return this.tsconfig||this.init(),Object.keys(this.aliases).some(t=>{let r=t.replace("/*","");if(!e.startsWith(r))return false;let i=this.aliases[t];return !(!Array.isArray(i)||i.length===0||r.startsWith("@"))})}getMatchingAlias(e){return Object.keys(this.aliases).find(r=>{let i=r.replace("/*","");return e.startsWith(i)})||null}resolveAliasPath(e){let t=this.getMatchingAlias(e);if(!t)return null;let r=this.aliases[t];if(!Array.isArray(r)||r.length===0)return null;let i=r[0],s=t.replace("/*",""),a=i.replace("/*",""),o=e.substring(s.length).replace(/^[/\\]/,""),l=X.join(a,o);return m.normalize(l)}resolveAliasToAbsolute(e){let t=this.resolveAliasPath(e);return t?m.normalize(m.toAbsolute(t)):null}},D=new jt;async function Ht(n){return zt(n.source,n.absolutePath)}async function zt(n,e){let{code:t}=await transform(n,{loader:e.endsWith(".tsx")?"tsx":"ts",format:"esm",sourcemap:"inline",target:"es2022",sourcefile:e,tsconfigRaw:D.tsconfig});return t}var Ut=class{config;loading;async load(){return this.config?this.config:this.loading?this.loading:(this.loading=this.doLoad(),this.config=await this.loading,this.loading=void 0,this.config)}async doLoad(){let e=E("cache/warlock-config.js");if(!await fileExistsAsync(e)&&!await this.compile()){Nr("warlock.config.ts is missing, it's highly recommended to create it, run warlock init to create it");return}let t=pathToFileURL(e).href;try{return (await import(t)).default}catch(r){throw new Error(`Failed to load warlock.config.js from ${t}. Make sure the config has been compiled. Error: ${r}`)}}async compile(){let e=I("warlock.config.ts");if(!await fileExistsAsync(e))return false;let t=await getFileAsync(e),r=await zt(t,e);return await putFileAsync(E("cache/warlock-config.js"),r),true}get(e,t){if(!this.config)throw new Error("WarlockConfig not loaded. Call load() first or use lazyGet().");return get(this.config,e,t)}async lazyGet(e,t){return await this.load(),this.get(e,t)}get isLoaded(){return this.config!==void 0}getAll(){if(!this.config)throw new Error("WarlockConfig not loaded. Call load() first or use lazyGet().");return this.config}async reload(){this.config=void 0,this.loading=void 0,await this.load();}},V=new Ut;var He=class{dependencies=new Map;dependents=new Map;build(e){this.dependencies.clear(),this.dependents.clear();for(let[r,i]of e){this.dependencies.has(r)||this.dependencies.set(r,new Set),this.dependents.has(r)||this.dependents.set(r,new Set);for(let s of i.dependencies)this.addDependency(r,s);}let t=this.detectCircularDependencies();t.length>0&&this.displayCircularDependencyWarnings(t);}addDependency(e,t){this.dependencies.has(e)||this.dependencies.set(e,new Set),this.dependents.has(t)||this.dependents.set(t,new Set),this.dependencies.get(e).add(t),this.dependents.get(t).add(e);}removeDependency(e,t){this.dependencies.get(e)?.delete(t),this.dependents.get(t)?.delete(e);}removeFile(e){let t=this.dependencies.get(e);if(t)for(let i of t)this.dependents.get(i)?.delete(e);let r=this.dependents.get(e);if(r)for(let i of r)this.dependencies.get(i)?.delete(e);this.dependencies.delete(e),this.dependents.delete(e);}updateFile(e,t){let r=this.dependencies.get(e)||new Set;for(let i of r)t.has(i)||this.removeDependency(e,i);for(let i of t)r.has(i)||this.addDependency(e,i);}getDependencies(e){return this.dependencies.get(e)||new Set}getDependents(e){return this.dependents.get(e)||new Set}getInvalidationChain(e){let t=[e],r=new Set([e]),i=s=>{let a=this.getDependents(s);for(let o of a)r.has(o)||(r.add(o),t.push(o),i(o));};return i(e),t}detectCircularDependencies(){let e=[],t=new Set,r=new Set,i=(s,a)=>{t.add(s),r.add(s),a.push(s);let o=this.getDependencies(s);for(let l of o)if(!t.has(l))i(l,[...a]);else if(r.has(l)){let c=a.indexOf(l),p=[...a.slice(c),l];e.push(p);}r.delete(s);};for(let s of this.dependencies.keys())t.has(s)||i(s,[]);return e}displayCircularDependencyWarnings(e){let t={yellow:r=>`\x1B[33m${r}\x1B[0m`,cyan:r=>`\x1B[36m${r}\x1B[0m`,dim:r=>`\x1B[2m${r}\x1B[0m`,bold:r=>`\x1B[1m${r}\x1B[0m`};console.log(""),console.log(t.yellow("\u26A0\uFE0F Circular Dependencies Detected")),console.log(t.dim("\u2501".repeat(60))),console.log(""),console.log(t.dim(`Found ${t.bold(e.length.toString())} circular dependency chain${e.length>1?"s":""}`)),console.log(""),e.forEach((r,i)=>{console.log(t.cyan(` ${i+1}. Cycle with ${r.length-1} files:`)),console.log(""),r.forEach((s,a)=>{let o=a===r.length-1,l=o?t.dim(" \u2514\u2500\u2192 "):t.dim(" \u251C\u2500\u2192 "),c=s.split("/").pop()||s,p=t.dim(s.replace(c,""));console.log(o?l+t.yellow(`${p}${t.bold(c)} (cycle completes)`):l+p+t.bold(c));}),console.log("");}),console.log(t.dim("\u2501".repeat(60))),console.log(t.yellow("\u{1F4A1} Recommendation:")),console.log(t.dim(" Refactor your code to remove circular dependencies for better")),console.log(t.dim(" maintainability and HMR performance.")),console.log("");}getStats(){let e=0,t=0,r=0,i="",s="";for(let[a,o]of this.dependencies)e+=o.size,o.size>t&&(t=o.size,s=a);for(let[a,o]of this.dependents)o.size>r&&(r=o.size,i=a);return {totalFiles:this.dependencies.size,totalDependencies:e,avgDependenciesPerFile:e/this.dependencies.size||0,maxDependencies:t,maxDependents:r,mostDependingFile:s,mostDependedFile:i}}};var ze=E("manifest.json"),ye=500;function zs(n){let e=[],t=new Set,r=p=>{let u=p.trim();return u.startsWith("import type ")||!!u.match(/^import\s+type\s+[\{\*]/)},i=p=>{let u=p.trim();if(r(u))return false;let d=u.match(/import\s+\{([^}]+)\}/);return d?!d[1].split(",").map(C=>C.trim()).every(C=>/^type\s+\w+/.test(C)):true},s=/import\s+(?:type\s+)?(\{[\s\S]*?\}|\*\s+as\s+\w+|\w+(?:\s*,\s*\{[\s\S]*?\})?)\s+from\s+['"]([^'"]+)['"]/g,a;for(;(a=s.exec(n))!==null;){let p=a[0];a[1];let d=a[2];p.match(/^import\s+type\s+/)||i(p)&&d&&!t.has(d)&&(t.add(d),e.push({path:d,originalLine:p}));}let o=/import\s+['"]([^'"]+)['"]/g;for(;(a=o.exec(n))!==null;){let p=a[1];p&&!t.has(p)&&(t.add(p),e.push({path:p,originalLine:a[0]}));}let l=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;for(;(a=l.exec(n))!==null;){let p=a[1];p&&!t.has(p)&&(t.add(p),e.push({path:p,originalLine:a[0]}));}let c=/export\s+(?:\{[^}]*\}|\*|\w+)\s+from\s+['"]([^'"]+)['"]/g;for(;(a=c.exec(n))!==null;){let p=a[0];if(/^export\s+type\s+/.test(p))continue;let u=a[1];u&&!t.has(u)&&(t.add(u),e.push({path:u,originalLine:p}));}return e}async function De(n,e){try{if(e.endsWith(".d.ts"))return new Map;try{let[i]=await parse(n);if(i&&i.length>0)return await Us(i,e)}catch{}let t=zs(n),r=new Map;for(let{path:i}of t){if(Qr(i)||!i.startsWith(".")&&!D.isAlias(i))continue;let s=null;D.isAlias(i)?s=await Gr(i):i.startsWith(".")&&(s=await Jr(i,e)),s&&r.set(i,s);}return r}catch(t){return console.error(`Error parsing imports for ${e}:`,t),new Map}}async function Us(n,e){let t=new Map;for(let r of n){let i=r.n;if(!i||Qr(i)||!i.startsWith(".")&&!D.isAlias(i))continue;let s=null;D.isAlias(i)?s=await Gr(i):i.startsWith(".")&&(s=await Jr(i,e)),s&&t.set(i,s);}return t}async function Gr(n){let e=D.resolveAliasToAbsolute(n);return e?await Zr(e):null}async function Jr(n,e){let t=X.dirname(e),r=m.normalize(X.resolve(t,n));return await Zr(r)}var Ue=new Map;function Yr(){Ue.clear();}async function Wt(n){if(Ue.has(n))return Ue.get(n);let e=await fileExistsAsync(n);return Ue.set(n,e),e}async function Zr(n){let e=m.normalize(n),t=[".ts",".tsx",".js",".jsx",".mjs",".cjs"],r=new Set(t),i=X.extname(e);if(i&&r.has(i))return await Wt(e)?e:null;let s=t.map(o=>e+o),a=await Promise.all(s.map(async o=>({path:o,exists:await Wt(o)})));for(let o of a)if(o.exists)return o.path;if(await isDirectoryAsync(e)){let o=t.map(c=>m.join(e,`index${c}`)),l=await Promise.all(o.map(async c=>({path:c,exists:await Wt(c)})));for(let c of l)if(c.exists)return c.path}return null}function Qr(n){let e=["fs","path","http","https","crypto","stream","util","events","buffer","child_process","os","url","querystring","zlib","net","tls","dns","dgram","cluster","worker_threads","perf_hooks","async_hooks","timers","readline","repl","vm","assert","console","process","v8"];if(n.startsWith("node:"))return true;let t=n.split("/")[0];return e.includes(t)}var We=class{constructor(e,t,r,i){this.fileOperations=e;this.manifest=t;this.dependencyGraph=r;this.files=i;}pendingChanges=new Set;pendingAdds=new Set;pendingDeletes=new Set;processPendingEvents=debounce(async()=>{await this.processBatch();},150);handleFileChange(e){let t=m.toRelative(e);this.pendingChanges.add(t),this.processPendingEvents();}handleFileAdd(e){let t=m.toRelative(e);this.pendingAdds.add(t),this.processPendingEvents();}handleFileDelete(e){let t=m.toRelative(e);this.pendingDeletes.add(t),this.processPendingEvents();}async processBatch(){let e=Array.from(this.pendingChanges),t=Array.from(this.pendingAdds),r=Array.from(this.pendingDeletes);if(this.pendingChanges.clear(),this.pendingAdds.clear(),this.pendingDeletes.clear(),e.length===0&&t.length===0&&r.length===0)return;t.length+e.length>1&&(await new Promise(s=>setTimeout(s,500)),Yr()),await this.processBatchAdds(t),await this.processBatchChanges(e),await this.processBatchDeletes(r),this.fileOperations.updateFileDependents(),this.fileOperations.syncFilesToManifest(),await this.manifest.save(),Jt.trigger("dev-server:batch-complete",{added:t,changed:e,deleted:r});}async processBatchChanges(e){if(e.length===0)return;let t=ye;for(let r=0;r<e.length;r+=t){let i=e.slice(r,r+t);await Promise.all(i.map(async s=>{await this.fileOperations.updateFile(s);}));}}async processBatchAdds(e){if(e.length===0)return;let t=new Set(e),i=(await Promise.all(e.map(async a=>{try{return await this.fileOperations.parseNewFile(a)}catch{return null}}))).filter(a=>a!==null),s=this.topologicalSort(i,t);for(let a of s)try{await this.fileOperations.finalizeNewFile(a),z(`Added file: ${a.relativePath}`);}catch(o){console.error(`Failed to add file ${a.relativePath}:`,o);}}topologicalSort(e,t){let r=new Map,i=new Map,s=new Map;for(let l of e)r.set(l.relativePath,l),i.set(l.relativePath,0),s.set(l.relativePath,[]);for(let l of e)for(let c of l.dependencies)t.has(c)&&r.has(c)&&(s.get(c).push(l.relativePath),i.set(l.relativePath,(i.get(l.relativePath)||0)+1));let a=[];for(let l of e)i.get(l.relativePath)===0&&a.push(l);let o=[];for(;a.length>0;){let l=a.shift();o.push(l);for(let c of s.get(l.relativePath)||[]){let p=(i.get(c)||0)-1;if(i.set(c,p),p===0){let u=r.get(c);u&&a.push(u);}}}for(let l of e)o.includes(l)||o.push(l);return o}async processBatchDeletes(e){if(e.length!==0)for(let t of e)await this.fileOperations.deleteFile(t),z(`Deleted file: ${t}`);}};var be={MANIFEST_NOT_FOUND:"dev-server.manifest.not-found",FILE_READY:"dev-server.file.ready"};var Vt=class{cache=new Map;analyzeExports(e){let t=e.relativePath;if(this.cache.has(t))return this.cache.get(t);let r=this.parseExports(e);return this.cache.set(t,r),r}parseExports(e){let t={namedExports:[],hasDefaultExport:false,reExports:[]};try{let r=e.source;if(!r)return t;let i=w.createSourceFile(e.absolutePath,r,w.ScriptTarget.Latest,!0),s=a=>{w.isExportDeclaration(a)?this.handleExportDeclaration(a,t):w.isExportAssignment(a)?a.isExportEquals||(t.hasDefaultExport=!0):w.isVariableStatement(a)?this.handleVariableStatement(a,t):w.isFunctionDeclaration(a)?this.handleFunctionDeclaration(a,t):w.isClassDeclaration(a)?this.handleClassDeclaration(a,t):w.isEnumDeclaration(a)&&this.handleEnumDeclaration(a,t),w.forEachChild(a,s);};s(i);}catch(r){console.error(`Failed to parse exports from ${e.relativePath}:`,r);}return t}handleExportDeclaration(e,t){if(e.moduleSpecifier&&w.isStringLiteral(e.moduleSpecifier)){let r=e.moduleSpecifier.text;if(!e.exportClause)t.reExports.push(r);else if(w.isNamedExports(e.exportClause))for(let i of e.exportClause.elements){let s=i.name.text;t.namedExports.push(s);}}else if(e.exportClause&&w.isNamedExports(e.exportClause))for(let r of e.exportClause.elements){let i=r.name.text;t.namedExports.push(i);}}handleVariableStatement(e,t){if(this.hasExportModifier(e))for(let r of e.declarationList.declarations)w.isIdentifier(r.name)&&t.namedExports.push(r.name.text);}handleFunctionDeclaration(e,t){this.hasExportModifier(e)&&(this.hasDefaultModifier(e)?t.hasDefaultExport=true:e.name&&t.namedExports.push(e.name.text));}handleClassDeclaration(e,t){this.hasExportModifier(e)&&(this.hasDefaultModifier(e)?t.hasDefaultExport=true:e.name&&t.namedExports.push(e.name.text));}handleEnumDeclaration(e,t){this.hasExportModifier(e)&&t.namedExports.push(e.name.text);}hasExportModifier(e){return w.canHaveModifiers(e)&&w.getModifiers(e)?.some(t=>t.kind===w.SyntaxKind.ExportKeyword)===true}hasDefaultModifier(e){return w.canHaveModifiers(e)&&w.getModifiers(e)?.some(t=>t.kind===w.SyntaxKind.DefaultKeyword)===true}clearCache(e){this.cache.delete(e);}clearAllCache(){this.cache.clear();}getCacheStats(){return {size:this.cache.size,files:Array.from(this.cache.keys())}}},te=new Vt;function Gt(n){let e=n.transpiled,t=/import\s+(\{[\s\S]*?\}|\*\s+as\s+\w+|\w+(?:\s*,\s*\{[\s\S]*?\})?)\s+from\s+["']([^"']+)["'];?/gm,r=/import\s+["']([^"']+)["'];?/g,i=/export\s+((?:\*|\{[^}]*\}))\s+from\s+["']([^"']+)["'];?/g,s=e,a=[],o=Array.from(e.matchAll(t));for(let p=o.length-1;p>=0;p--){let u=o[p],d=u[0],y=u[1],b=u[2],v=b.startsWith(".")||b.startsWith("/"),C=D.isAlias(b);if(!v&&!C||!n.importMap.has(b))continue;let S=Kt(b,n);if(!S){a.push(b);continue}let M=Vs(y,S),$=u.index,B=$+d.length;s=s.slice(0,$)+M+s.slice(B);}let l=Array.from(s.matchAll(r));for(let p=l.length-1;p>=0;p--){let u=l[p],d=u[0],y=u[1],b=y.startsWith(".")||y.startsWith("/"),v=D.isAlias(y);if(!b&&!v||!n.importMap.has(y))continue;let C=Kt(y,n);if(!C){a.push(y);continue}let S=`await __import("./${C}")`,M=u.index,$=M+d.length;s=s.slice(0,M)+S+s.slice($);}let c=Array.from(s.matchAll(i));for(let p=c.length-1;p>=0;p--){let u=c[p],d=u[0],y=u[1],b=u[2],v=b.startsWith(".")||b.startsWith("/"),C=D.isAlias(b);if(!v&&!C||!n.importMap.has(b))continue;let S=Kt(b,n);if(!S){a.push(b);continue}if(y==="*"){let M=n.importMap.get(b);if(!M){a.push(b);continue}let $=m.toRelative(M),B=f.files.get($);if(!B){let j=`export * from "./${S}"`,H=u.index,ce=H+d.length;s=s.slice(0,H)+j+s.slice(ce);continue}let A=te.analyzeExports(B);if(A.namedExports.length>0||A.hasDefaultExport){let j=`__reexport_${p}`,H=[];H.push(`const ${j} = await __import("./${S}");`);for(let Or of A.namedExports)H.push(`export const ${Or} = ${j}.${Or};`);A.hasDefaultExport&&H.push(`export default ${j}.default;`);let ce=H.join(`
|
|
7
|
+
`),pe=u.index,vs=pe+d.length;s=s.slice(0,pe)+ce+s.slice(vs);}else {let j=`export * from "./${S}"`,H=u.index,ce=H+d.length;s=s.slice(0,H)+j+s.slice(ce);}}else {let M=`__module_${p}`,A=(y.match(/\{([^}]+)\}/)?.[1]?.split(",").map(pe=>pe.trim())||[]).map(pe=>`export const ${pe} = ${M}.${pe};`).join(`
|
|
8
|
+
`),j=`const ${M} = await __import("./${S}");
|
|
9
|
+
${A}`,H=u.index,ce=H+d.length;s=s.slice(0,H)+j+s.slice(ce);}}return a.length>0?(q(`Failed to transform imports in ${n.relativePath}:
|
|
10
|
+
Unresolved imports: ${a.join(", ")}
|
|
11
|
+
These files may not exist or are not being tracked.`),""):s}function Vs(n,e){let t=n.trim();if(t.startsWith("* as "))return `const ${t.replace("* as ","").trim()} = await __import("./${e}")`;if(t.match(/^(\w+)\s*,\s*\{/)){let i=t.match(/^(\w+)\s*,\s*(\{[\s\S]*?\})/);if(i){let s=i[1],a=i[2],o=`__module_${Math.random().toString(36).slice(2,8)}`;a=a.replace(/\s+/g," ").trim();let l=a.replace(/default\s+as\s+/g,"default: ");return `const ${o} = await __import("./${e}");
|
|
12
|
+
const ${s} = ${o}?.default ?? ${o};
|
|
13
|
+
const ${l} = ${o};`}}if(t.startsWith("{"))return `const ${t.replace(/\s+/g," ").trim().replace(/default\s+as\s+/g,"default: ")} = await __import("./${e}")`;let r=`__module_${Math.random().toString(36).slice(2,8)}`;return `const ${r} = await __import("./${e}");
|
|
14
|
+
const ${t} = ${r}?.default ?? ${r};`}function Kt(n,e){let t=e.importMap.get(n);return t?m.toRelative(t).replace(/\//g,"-").replace(/\.(ts|tsx)$/,".js"):null}async function Xr(){let n=E("cache");try{await removeDirectoryAsync(n);}catch{}await createDirectoryAsync(n,{recursive:true});}async function O(n=k(),e="**/*.{ts,tsx}"){return (await Dr(`${m.normalize(n)}/${e}`,{absolute:true})).map(r=>m.normalize(r))}async function ei(n,e){return O(n,"("+e.join("|")+").{ts,tsx}")}function W(n){return `${E("cache")}/${n}`}function ti(n,e){if(n.size!==e.size)return false;for(let t of n)if(!e.has(t))return false;return true}var Q=class{constructor(e,t,r){this.absolutePath=e;this.files=t;this.fileOperations=r;}relativePath="";lastModified=0;hash="";source="";transpiled="";dependencies=new Set;importMap=new Map;dependents=new Set;version=0;type;layer;cachePath="";cleanup;importsTransformed=false;isTypeOnlyFile=false;state="idle";async init(e){this.relativePath=m.toRelative(this.absolutePath),this.cachePath=this.relativePath.replace(/\//g,"-").replace(/\.(ts|tsx)$/,".js"),this.detectFileTypeAndLayer(),e?await this.initFromManifest(e):await this.process();}get cachePathUrl(){return this.cachePath?pathToFileURL(W(this.cachePath)).href:""}async process(e={}){let{force:t=false,transformImports:r=true,saveToCache:i=true}=e;this.relativePath||(this.relativePath=m.toRelative(this.absolutePath)),this.cachePath||(this.cachePath=this.relativePath.replace(/\//g,"-").replace(/\.(ts|tsx)$/,".js")),this.type||this.detectFileTypeAndLayer(),this.state="loading";let s;try{s=await getFileAsync(this.absolutePath);}catch{return this.state="deleted",false}let a=pt.createHash("sha256").update(s).digest("hex");return !t&&a===this.hash&&this.transpiled&&this.importsTransformed?(this.state="ready",false):(this.source=s,this.hash=a,this.lastModified=(await lastModifiedAsync(this.absolutePath)).getTime(),this.version++,this.state="parsed",this.importMap=await De(this.source,this.absolutePath),this.dependencies=new Set(Array.from(this.importMap.values()).map(o=>m.toRelative(o))),this.state="transpiled",this.transpiled=await Ht(this),r&&this.dependencies.size>0?(this.transpiled=Gt(this),this.importsTransformed=true):this.importsTransformed=false,i&&await putFileAsync(W(this.cachePath),this.transpiled),this.state="ready",Jt.trigger(be.FILE_READY,this),true)}async parse(){this.state="loading",this.source=await getFileAsync(this.absolutePath),this.hash=pt.createHash("sha256").update(this.source).digest("hex"),this.relativePath=m.toRelative(this.absolutePath),this.lastModified=(await lastModifiedAsync(this.absolutePath)).getTime(),this.version=0,this.cachePath=this.relativePath.replace(/\//g,"-").replace(/\.(ts|tsx)$/,".js"),this.detectFileTypeAndLayer(),this.importMap=await De(this.source,this.absolutePath),this.dependencies=new Set(Array.from(this.importMap.values()).map(e=>m.toRelative(e))),this.state="parsed";}async complete(){if(this.state!=="parsed")throw new Error(`Cannot complete file in state "${this.state}". Call parse() first.`);this.state="transpiled",this.transpiled=await Ht(this),this.dependencies.size>0&&(this.transpiled=Gt(this)),this.importsTransformed=true,await putFileAsync(W(this.cachePath),this.transpiled),this.state="ready",Jt.trigger(be.FILE_READY,this);}async update(){return this.process()}async forceReprocess(){await this.process({force:true});}async initFromManifest(e){this.version=e.version||0,this.type=e.type,this.layer=e.layer,this.cachePath=e.cachePath||this.relativePath.replace(/\//g,"-").replace(/\.(ts|tsx)$/,".js"),this.state="loading";try{this.source=await getFileAsync(this.absolutePath);}catch{this.state="deleted";return}let t=pt.createHash("sha256").update(this.source).digest("hex");if(t!==e.hash)this.hash=t,this.lastModified=(await lastModifiedAsync(this.absolutePath)).getTime(),this.version++,await this.process({force:true});else {this.hash=e.hash,this.lastModified=e.lastModified,this.dependencies=new Set(e.dependencies||[]),this.dependents=new Set(e.dependents||[]);try{this.transpiled=await getFileAsync(W(this.cachePath)),this.importsTransformed=!0,this.state="ready",Jt.trigger(be.FILE_READY,this);}catch{await this.process({force:true});}}}detectFileTypeAndLayer(){if(this.relativePath.includes("main.ts")||this.relativePath.includes("main.tsx")){this.type="main",this.layer="HMR";return}if(this.relativePath.startsWith("src/config/")){this.type="config",this.layer="HMR";return}if(this.relativePath.endsWith("routes.ts")||this.relativePath.endsWith("routes.tsx")){this.type="route",this.layer="HMR";return}if(this.relativePath.includes("/events/")){this.type="event",this.layer="HMR";return}if(this.relativePath.includes("controller")){this.type="controller",this.layer="HMR";return}if(this.relativePath.includes("service")){this.type="service",this.layer="HMR";return}if(this.relativePath.includes("model")){this.type="model",this.layer="HMR";return}this.type="other",this.layer="HMR";}toManifest(){return {absolutePath:this.absolutePath,relativePath:this.relativePath,lastModified:this.lastModified,hash:this.hash,dependencies:Array.from(this.dependencies),dependents:Array.from(this.dependents),version:this.version,type:this.type,layer:this.layer,cachePath:this.cachePath}}};var Ve=class{constructor(e,t,r,i){this.files=e;this.dependencyGraph=t;this.manifest=r;this.specialFilesCollector=i;}async addFile(e){if(this.files.has(e))return this.files.get(e);let t=m.toAbsolute(e),r=new Q(t,this.files,this);this.files.set(e,r),await r.parse();for(let i of r.dependencies)if(!this.files.has(i))try{await this.addFile(i);}catch{}await r.complete();for(let i of r.dependencies)this.dependencyGraph.addDependency(e,i);return this.specialFilesCollector.addFile(r),await this.reloadFilesWaitingForDependency(e),r}async parseNewFile(e){if(this.files.has(e))return this.files.get(e);let t=m.toAbsolute(e),r=new Q(t,this.files,this);return await r.parse(),this.files.set(e,r),r}async finalizeNewFile(e){await e.complete();for(let t of e.dependencies)this.dependencyGraph.addDependency(e.relativePath,t);this.specialFilesCollector.addFile(e),await this.reloadFilesWaitingForDependency(e.relativePath);}async reloadFilesWaitingForDependency(e){let t=[];for(let[r,i]of this.files)if(r!==e&&i.state==="ready")try{let s=await De(i.source,i.absolutePath);for(let[a,o]of s)if(o&&m.toRelative(o)===e){t.push(r);break}}catch{continue}for(let r of t){let i=this.files.get(r);if(i)try{await i.forceReprocess(),this.dependencyGraph.updateFile(r,i.dependencies);}catch{}}}async updateFile(e){let t=this.files.get(e);if(!t)return await this.addFile(e),true;let r=new Set(t.dependencies);try{return await t.update()?(ti(r,t.dependencies)||this.dependencyGraph.updateFile(e,t.dependencies),this.specialFilesCollector.updateFile(t),!0):!1}catch{return false}}async deleteFile(e){let t=this.files.get(e);if(!t)return;let r=this.dependencyGraph.getDependents(e);try{let i=W(t.cachePath);await unlinkAsync(i);}catch{}this.dependencyGraph.removeFile(e),this.specialFilesCollector.removeFile(e),this.manifest.removeFile(e);for(let i of r){let s=this.files.get(i);s&&Jt.trigger(be.FILE_READY,s);}setTimeout(()=>{this.files.delete(e);},300);}updateFileDependents(){for(let[e,t]of this.files){let r=this.dependencyGraph.getDependents(e);t.dependents=r;}}syncFilesToManifest(){for(let[e,t]of this.files)this.manifest.setFile(e,t.toManifest());}};var tn=["**/node_modules/**","**/dist/**","**/.warlock/**","**/.git/**"],Ke=class{id=Random.string();async watch(e){let t=[I(".env"),k()].map(s=>m.normalize(s)),r=[...tn,...e?.exclude||[]],i=en.watch(t,{ignoreInitial:true,ignored:r,persistent:true,usePolling:false,interval:100,binaryInterval:300,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},depth:99});i.on("add",s=>this.triggerEvent("add",s)),i.on("change",s=>this.triggerEvent("change",s)),i.on("unlink",s=>this.triggerEvent("delete",s)),i.on("addDir",s=>this.triggerEvent("addDir",s)),i.on("unlinkDir",s=>this.triggerEvent("unlinkDir",s)),process.on("SIGINT",async()=>{await i.close();});}triggerEvent(e,t,r){Jt.trigger(`file-watcher.${this.id}.${e}`,m.normalize(t),r);}onFileChange(e){return this.on("change",e)}onFileDelete(e){return this.on("delete",e)}onFileAdd(e){return this.on("add",e)}onFileError(e){return this.on("error",e)}onDirectoryAdd(e){return this.on("addDir",e)}onDirectoryRemove(e){return this.on("unlinkDir",e)}on(e,t){return Jt.subscribe(`file-watcher.${this.id}.${e}`,t)}};var Ge=class{result="healthy";messages=[];markAsHealthy(){this.result="healthy";}addErrors(e){this.result="defective",this.messages.push(...e);}addWarnings(e){this.result="defective",this.messages.push(...e);}getStats(){return {state:this.result,errors:this.messages.filter(e=>e.type==="error").length,warnings:this.messages.filter(e=>e.type==="warning").length}}};var ve=class{files=new Map;workerPath;async onFileChanges(e){}removeFile(e){return this.files.delete(e.relativePath),this}async check(e){let t=new Ge;return this.files.set(e.relativePath,{file:e,healthResult:t}),await this.validate(e,t)}async stats(){let e={name:this.name,files:{healthy:0,defective:0},warnings:{total:0,totalFiles:0},errors:{total:0,totalFiles:0}};for(let t of this.files.values()){let i=t.healthResult.getStats(),s=i.state==="healthy";e.files.healthy+=s?1:0,e.files.defective+=s?0:1,e.warnings.total+=i.warnings,e.warnings.totalFiles+=i.warnings>0?1:0,e.errors.total+=i.errors,e.errors.totalFiles+=i.errors>0?1:0;}return e}};var Je=class extends ve{eslint=null;name="ESLint";workerPath="./workers/eslint-health.worker";initialized=false;isLintableFile(e){let t=e.toLowerCase();return t.endsWith(".ts")||t.endsWith(".tsx")||t.endsWith(".js")||t.endsWith(".jsx")}initialize(){try{let e=X.join(process.cwd(),"eslint.config.js"),t=X.join(process.cwd(),"eslint.config.mjs"),r=X.join(process.cwd(),"eslint.config.cjs");if(!(Qt.existsSync(e)||Qt.existsSync(t)||Qt.existsSync(r)))return this.initialized=!0,this;this.eslint=new ESLint({cwd:process.cwd()}),this.initialized=!0;}catch(e){console.warn("ESLint Health Checker: Failed to initialize:",e),this.initialized=true;}return this}displayResults(e,t){let r=t.getStats();if(r.errors===0&&r.warnings===0)return;let i=e.relativePath.replace(/\\/g,"/"),s=r.errors,a=r.warnings,o=e.source?e.source.split(`
|
|
15
|
+
`):[];if(s>0){let c=t.messages.filter(p=>p.type==="error");for(let p of c){let u=colors.redBright("\u2716"),d=colors.redBright(colors.bold("ERROR"));console.log(`
|
|
16
|
+
${u} ${d} ${colors.dim("in")} ${colors.cyanBright(i)}${colors.dim(`(${p.lineNumber},${p.columnNumber})`)}`);let y=p.ruleId||"eslint";if(console.log(` ${colors.magentaBright(y)} ${colors.dim("\u2192")} ${colors.red(p.message)}`),o.length>0&&p.lineNumber>0&&p.lineNumber<=o.length){let b=p.lineNumber-1,v=o[b],C=p.lineNumber.toString().padStart(4," "),S=p.length||1,M=p.columnNumber-1;console.log(` ${colors.dim(C)} ${colors.dim("\u2502")} ${v||""}`);let $=C.length+3,B=" ".repeat(M),A=colors.redBright("~".repeat(Math.max(1,S)));console.log(` ${colors.dim(" ".repeat($))}${B}${A}`);}}}if(a>0){let c=t.messages.filter(p=>p.type==="warning");for(let p of c){let u=colors.yellowBright("\u26A0"),d=colors.yellowBright(colors.bold("WARNING"));console.log(`
|
|
17
|
+
${u} ${d} ${colors.dim("in")} ${colors.cyanBright(i)}${colors.dim(`(${p.lineNumber},${p.columnNumber})`)}`);let y=p.ruleId||"eslint";if(console.log(` ${colors.magentaBright(y)} ${colors.dim("\u2192")} ${colors.yellow(p.message)}`),o.length>0&&p.lineNumber>0&&p.lineNumber<=o.length){let b=p.lineNumber-1,v=o[b],C=p.lineNumber.toString().padStart(4," "),S=p.length||1,M=p.columnNumber-1;console.log(` ${colors.dim(C)} ${colors.dim("\u2502")} ${v||""}`);let $=C.length+3,B=" ".repeat(M),A=colors.yellowBright("~".repeat(Math.max(1,S)));console.log(` ${colors.dim(" ".repeat($))}${B}${A}`);}}}let l=[];s>0&&l.push(colors.red(`${s} error${s>1?"s":""}`)),a>0&&l.push(colors.yellow(`${a} warning${a>1?"s":""}`));}async validate(e,t){if(!this.isLintableFile(e.absolutePath)||!this.eslint)return t.markAsHealthy(),t;try{let r=await this.eslint.lintText(e.source,{filePath:e.absolutePath});if(r.length===0)return console.log("No lint results",e.relativePath),t.markAsHealthy(),t;let i=r[0],s=[],a=[];for(let o of i.messages){let l=o.severity===2,c=o.severity===1;l?s.push({message:o.message,type:"error",lineNumber:o.line||1,columnNumber:o.column||1,length:o.endColumn&&o.column?o.endColumn-o.column:1,ruleId:o.ruleId||void 0}):c&&a.push({message:o.message,type:"warning",lineNumber:o.line||1,columnNumber:o.column||1,length:o.endColumn&&o.column?o.endColumn-o.column:1,ruleId:o.ruleId||void 0});}s.length>0&&t.addErrors(s),a.length>0&&t.addWarnings(a),s.length===0&&a.length===0?t.markAsHealthy():this.displayResults(e,t);}catch(r){console.log("ESlint Error:",r),t.markAsHealthy();}return t}};var Ye=class extends ve{program=null;parsedConfig=null;name="TypeScript";workerPath="./workers/ts-health.worker";initialized=false;isTypeScriptFile(e){let t=e.toLowerCase();return t.endsWith(".ts")||t.endsWith(".tsx")}getDiagnosticLocation(e){if(e.file&&e.start!==void 0){let{line:t,character:r}=e.file.getLineAndCharacterOfPosition(e.start);return {lineNumber:t+1,columnNumber:r+1}}return {lineNumber:1,columnNumber:1}}formatDiagnosticMessage(e){return e.file&&e.start!==void 0?w.formatDiagnostic(e,{getCurrentDirectory:()=>process.cwd(),getCanonicalFileName:t=>t,getNewLine:()=>`
|
|
18
|
+
`}):e.messageText.toString()}displayResults(e,t){let r=t.getStats();if(r.errors===0&&r.warnings===0)return;let i=e.relativePath.replace(/\\/g,"/"),s=r.errors,a=r.warnings,o=e.source?e.source.split(`
|
|
19
|
+
`):[];if(s>0){let c=t.messages.filter(p=>p.type==="error");for(let p of c){let u=colors.redBright("\u2716"),d=colors.redBright(colors.bold("ERROR"));console.log(`
|
|
20
|
+
${u} ${d} ${colors.dim("in")} ${colors.cyanBright(i)}${colors.dim(`(${p.lineNumber},${p.columnNumber})`)}`);let b=p.message.split(`
|
|
21
|
+
`).map(v=>v.replace(/^[^:]+:\d+:\d+ - /,"").trim()).filter(v=>v.length>0).join(`
|
|
22
|
+
`);if(console.log(` ${colors.dim("\u2192")} ${colors.red(b)}`),o.length>0&&p.lineNumber>0&&p.lineNumber<=o.length){let v=p.lineNumber-1,C=o[v],S=p.lineNumber.toString().padStart(4," "),M=p.length||1,$=p.columnNumber-1;console.log(` ${colors.dim(S)} ${colors.dim("\u2502")} ${C||""}`);let B=S.length+3,A=" ".repeat($),j=colors.redBright("~".repeat(Math.max(1,M)));console.log(` ${colors.dim(" ".repeat(B))}${A}${j}`);}}}if(a>0){let c=t.messages.filter(p=>p.type==="warning");for(let p of c){let u=colors.yellowBright("\u26A0"),d=colors.yellowBright(colors.bold("WARNING"));console.log(`
|
|
23
|
+
${u} ${d} ${colors.dim("in")} ${colors.cyanBright(i)}${colors.dim(`(${p.lineNumber},${p.columnNumber})`)}`);let b=p.message.split(`
|
|
24
|
+
`).map(v=>v.replace(/^[^:]+:\d+:\d+ - /,"").trim()).filter(v=>v.length>0).join(`
|
|
25
|
+
`);if(console.log(` ${colors.dim("\u2192")} ${colors.yellow(b)}`),o.length>0&&p.lineNumber>0&&p.lineNumber<=o.length){let v=p.lineNumber-1,C=o[v],S=p.lineNumber.toString().padStart(4," "),M=p.length||1,$=p.columnNumber-1;console.log(` ${colors.dim(S)} ${colors.dim("\u2502")} ${C||""}`);let B=S.length+3,A=" ".repeat($),j=colors.yellowBright("~".repeat(Math.max(1,M)));console.log(` ${colors.dim(" ".repeat(B))}${A}${j}`);}}}let l=[];s>0&&l.push(colors.red(`${s} error${s>1?"s":""}`)),a>0&&l.push(colors.yellow(`${a} warning${a>1?"s":""}`));}async onFileChanges(e){this.parsedConfig&&(this.program=w.createProgram(e.map(t=>t.absolutePath),{...this.parsedConfig.options,incremental:true},void 0,this.program));}initialize(){try{if(!D.tsconfig||Object.keys(D.tsconfig).length===0)return this.initialized=!0,this;this.parsedConfig=w.parseJsonConfigFileContent(D.tsconfig,w.sys,process.cwd()),this.parsedConfig.errors.length>0&&console.warn("TypeScript Health Checker: tsconfig.json has errors:",this.parsedConfig.errors.map(e=>w.formatDiagnostic(e,w.createCompilerHost({})))),this.program=w.createProgram(this.parsedConfig.fileNames,this.parsedConfig.options),this.initialized=!0;}catch(e){console.warn("TypeScript Health Checker: Failed to initialize:",e),this.initialized=true;}return this}async validate(e,t){if(!this.isTypeScriptFile(e.absolutePath)||!this.parsedConfig)return t.markAsHealthy(),t;try{this.program||(this.program=w.createProgram(this.parsedConfig.fileNames,this.parsedConfig.options));let r=this.program.getSourceFile(e.absolutePath);if(!r)return t.markAsHealthy(),t;let i=this.program.getSyntacticDiagnostics(r),s=this.program.getSemanticDiagnostics(r),a=[...i,...s],o=[],l=[];for(let c of a){let p=this.getDiagnosticLocation(c),u=this.formatDiagnosticMessage(c),d=c.length||1;c.category===w.DiagnosticCategory.Error?o.push({message:u,type:"error",lineNumber:p.lineNumber,columnNumber:p.columnNumber,length:d}):c.category===w.DiagnosticCategory.Warning&&l.push({message:u,type:"warning",lineNumber:p.lineNumber,columnNumber:p.columnNumber,length:d});}o.length>0&&t.addErrors(o),l.length>0&&t.addWarnings(l),o.length===0&&l.length===0?t.markAsHealthy():this.displayResults(e,t);}catch(r){console.warn(`TypeScript Health Checker: Error validating file ${e.relativePath}:`,r),t.markAsHealthy();}return t}};function si(n,e,t){let r=env("DEV_SERVER_CORE"),i=r?".ts":".js",s=new URL(`${n}${i}`,e),a=fileURLToPath(s),o={...t};return r&&(o.execArgv=[...t?.execArgv||[],"--import","tsx/esm"]),new Worker(a,o)}var Ze=class{constructor(e){this.files=e;}healthCheckers=[];workers=new Map;workerInitPromises=new Map;checkerStats=new Map;addHealthCheckers(...e){return this.healthCheckers.push(...e),this}setHealthCheckers(e){return this.healthCheckers=e,this}async initialize(){let e=this.healthCheckers.map(async t=>{this.checkerStats.set(t.name,{totalFiles:0,healthyFiles:0,defectiveFiles:0,totalErrors:0,totalWarnings:0,filesWithErrors:0,filesWithWarnings:0}),t.workerPath?await this.spawnWorker(t):t.initialize();});await Promise.all(e);}async spawnWorker(e){if(!e.workerPath)return;let t=si(e.workerPath,import.meta.url,{workerData:{cwd:process.cwd()}});this.workers.set(e.name,t);let r=new Promise(i=>{let s=a=>{a.type==="initialized"&&(t.off("message",s),i(a.success));};t.on("message",s),t.on("error",a=>{console.error(`Health Checker Worker Error (${e.name}):`,a),i(false);}),t.postMessage({type:"init",config:{cwd:process.cwd()}});});this.workerInitPromises.set(e.name,r),await r;}async validateAllFiles(){let e=Array.from(this.files.values());await this.checkFiles(e),await this.displayStats();}async checkFiles(e){let t=this.healthCheckers.map(async i=>i.workerPath?this.runInWorker(i.name,e):this.runInline(i,e)),r=await Promise.all(t);for(let i of r)for(let s of i)s.healthy||this.displayFileResults(s);}async runInWorker(e,t){let r=this.workers.get(e);if(!r)return t.map(a=>({path:a.absolutePath,relativePath:a.relativePath,healthy:true,errors:[],warnings:[]}));let i=this.workerInitPromises.get(e);if(i&&!await i)return t.map(o=>({path:o.absolutePath,relativePath:o.relativePath,healthy:true,errors:[],warnings:[]}));let s=t.map(a=>({path:a.absolutePath,content:a.source,relativePath:a.relativePath}));return new Promise(a=>{let o=l=>{l.type==="results"?(r.off("message",o),this.updateStats(e,l.results),a(l.results)):l.type==="error"&&(r.off("message",o),a(t.map(c=>({path:c.absolutePath,relativePath:c.relativePath,healthy:true,errors:[],warnings:[]}))));};r.on("message",o),r.postMessage({type:"check",files:s});})}async runInline(e,t){let r=[];for(let s of t){let a=await e.check(s),o=a.getStats();r.push({path:s.absolutePath,relativePath:s.relativePath,healthy:o.state==="healthy",errors:a.messages.filter(l=>l.type==="error").map(l=>({type:"error",message:l.message,lineNumber:l.lineNumber,columnNumber:l.columnNumber,length:l.length||1,filePath:s.absolutePath,relativePath:s.relativePath,ruleId:l.ruleId})),warnings:a.messages.filter(l=>l.type==="warning").map(l=>({type:"warning",message:l.message,lineNumber:l.lineNumber,columnNumber:l.columnNumber,length:l.length||1,filePath:s.absolutePath,relativePath:s.relativePath,ruleId:l.ruleId}))});}let i=r;return this.updateStats(e.name,i),r}updateStats(e,t){let r=this.checkerStats.get(e);if(r)for(let i of t)r.totalFiles++,i.healthy?r.healthyFiles++:r.defectiveFiles++,r.totalErrors+=i.errors.length,r.totalWarnings+=i.warnings.length,i.errors.length>0&&r.filesWithErrors++,i.warnings.length>0&&r.filesWithWarnings++;}async onFileChanges(e){let t=e.map(r=>({path:r.absolutePath,content:r.source,relativePath:r.relativePath}));for(let[,r]of this.workers)r.postMessage({type:"fileChanges",files:t});await Promise.all(this.healthCheckers.filter(r=>!r.workerPath).map(r=>r.onFileChanges(e)));}removeFiles(e){if(this.healthCheckers.filter(t=>!t.workerPath).forEach(t=>e.forEach(r=>t.removeFile(r))),e.length>0){let t=e.map(r=>({path:r.absolutePath,relativePath:r.relativePath}));for(let[,r]of this.workers)r.postMessage({type:"filesDeleted",files:t});}}displayFileResults(e){let t=e.relativePath.replace(/\\/g,"/");for(let r of e.errors){let i=colors.redBright("\u2716"),s=colors.redBright(colors.bold("ERROR"));console.log(`
|
|
26
|
+
${i} ${s} ${colors.dim("in")} ${colors.cyanBright(t)}${colors.dim(`(${r.lineNumber},${r.columnNumber})`)}`),r.ruleId?console.log(` ${colors.magentaBright(r.ruleId)} ${colors.dim("\u2192")} ${colors.red(r.message)}`):console.log(` ${colors.dim("\u2192")} ${colors.red(r.message)}`);}for(let r of e.warnings){let i=colors.yellowBright("\u26A0"),s=colors.yellowBright(colors.bold("WARNING"));console.log(`
|
|
27
|
+
${i} ${s} ${colors.dim("in")} ${colors.cyanBright(t)}${colors.dim(`(${r.lineNumber},${r.columnNumber})`)}`),r.ruleId?console.log(` ${colors.magentaBright(r.ruleId)} ${colors.dim("\u2192")} ${colors.yellow(r.message)}`):console.log(` ${colors.dim("\u2192")} ${colors.yellow(r.message)}`);}}async displayStats(){let e=[];for(let t of this.healthCheckers){let r=this.checkerStats.get(t.name);r&&e.push({name:t.name,files:{healthy:r.healthyFiles,defective:r.defectiveFiles},warnings:{total:r.totalWarnings,totalFiles:r.filesWithWarnings},errors:{total:r.totalErrors,totalFiles:r.filesWithErrors}});}console.log(`
|
|
28
|
+
`),console.log(colors.bold(colors.cyan("\u2501".repeat(80)))),ee(colors.bold(" \u{1F4CA} Health Checker Statistics")),console.log(colors.bold(colors.cyan("\u2501".repeat(80)))),console.log(""),e.forEach((t,r)=>{let i=t.files.healthy+t.files.defective,s=t.files.defective>0,a=s?"\u26A0\uFE0F":"\u2705";console.log(colors.bold(` ${a} ${t.name}`)),console.log(colors.dim(" "+"\u2500".repeat(76)));let o=` Files: ${colors.white(i.toString())} total \u2502 ${colors.green("\u2713 "+t.files.healthy)} healthy \u2502 ${s?colors.red("\u2717 "+t.files.defective):colors.dim("\u2717 0")} defective`;console.log(o);let l=t.warnings.total>0?colors.yellow(`\u26A0 ${t.warnings.total} warnings`):colors.dim("\u26A0 0 warnings"),c=t.errors.total>0?colors.red(`\u2717 ${t.errors.total} errors`):colors.dim("\u2717 0 errors");console.log(` Issues: ${l} \u2502 ${c}`),r<e.length-1&&console.log("");}),console.log(""),console.log(colors.bold(colors.cyan("\u2501".repeat(80)))),console.log("");}async shutdown(){for(let[e,t]of this.workers)try{t.postMessage({type:"shutdown"}),await t.terminate();}catch{}this.workers.clear(),this.workerInitPromises.clear(),this.checkerStats.clear();}};var Qe=class{constructor(e){this.files=e;}manifest={version:"1.0.0",lastBuildTime:Date.now(),stats:{totalFiles:0,totalDependencies:0},files:{}};async init(){return await fileExistsAsync(ze)?(this.manifest=await getJsonFileAsync(ze),true):false}async save(){this.manifest.stats.totalFiles=Object.keys(this.manifest.files).length,this.manifest.stats.totalDependencies=this.calculateTotalDependencies(),this.manifest.lastBuildTime=Date.now(),await putFileAsync(ze,JSON.stringify(this.manifest,null,2));}getFile(e){return this.manifest.files[e]}hasFile(e){return e in this.manifest.files}setFile(e,t){this.manifest.files[e]=t;}removeFile(e){delete this.manifest.files[e];}getAllFilePaths(){return Object.keys(this.manifest.files)}getAllFiles(){return this.manifest.files}getMetadata(){return {version:this.manifest.version,lastBuildTime:this.manifest.lastBuildTime,projectHash:this.manifest.projectHash,stats:this.manifest.stats}}calculateTotalDependencies(){return Object.values(this.manifest.files).reduce((e,t)=>e+(t.dependencies?.length||0),0)}clear(){this.manifest.files={},this.manifest.stats={totalFiles:0,totalDependencies:0};}};var re={key(n,e){return Ft.get(n,e)},get(n,e){return Ft.get(n,e)}};function dn(n,e){if(!n||n.length===0)return e.allExceptParams();let t={};for(let r of n)r==="body"&&(t=merge(t,e.body)),r==="query"&&(t=merge(t,e.query)),r==="params"&&(t=merge(t,e.params)),r==="headers"&&(t=merge(t,e.headers));return t}async function oi(n,e,t){if(n){if(log.info("validation","started","Start validating the request"),n.schema){log.info("validation","schema","Validating request schema");try{let r=dn(n.validating,e),i=await v.validate(n.schema,r);if(i.data&&i.isValid&&e.setValidatedData(i.data),!i.isValid)return log.warn("validation","schema","Schema Validation failed"),t.failedSchema(i);log.success("validation","schema","Schema Validation passed");}catch(r){throw log.warn("app.validation","error",r),r}}if(n.validate){let r=await n.validate(e,t);if(r)return t.statusCode||t.setStatusCode(Ft.get("validation.responseStatus",400)),log.info("validation","failed","Validation failed"),r;log.info("validation","passed","Validation passed");}}}var et=class extends Error{constructor(t,r){super(t);this.payload=r;this.name="ResourceNotFoundError";}},tt=class extends Error{constructor(t,r){super(t);this.payload=r;this.name="UnAuthorizedError";}},rt=class extends Error{constructor(t,r){super(t);this.payload=r;this.name="ForbiddenError";}},it=class extends Error{constructor(t,r){super(t);this.payload=r;this.name="BadRequestError";}},st=class extends Error{constructor(t,r){super(t);this.payload=r;this.name="ServerError";}};function li(n,e){let t=contextManager.buildStores({request:n,response:e});return contextManager.runAll(t,async()=>{try{let r=await n.runMiddleware();if(r)return r;n.trigger("executingAction",n.route);let i=n.getHandler();n.log("Executing Handler","info");let s=await i(n,e);return n.log("Handler Executed Successfully","success"),n.trigger("executedAction",n.route),s}catch(r){return hn(r,e)}})}function hn(n,e){return n instanceof et?e.notFound({error:n.message,...n.payload}):n instanceof tt?e.unauthorized({error:n.message,...n.payload}):n instanceof rt?e.forbidden({error:n.message,...n.payload}):n instanceof it?e.badRequest({error:n.message,...n.payload}):n instanceof DatabaseWriterValidationError?e.badRequest({errors:n.errors}):n instanceof st?e.serverError({error:n.message,...n.payload}):(console.log(n),e.badRequest({error:n.message,...n.payload}))}var gn=`
|
|
29
|
+
React SSR functionality requires React packages.
|
|
30
|
+
Install them with:
|
|
31
|
+
|
|
32
|
+
warlock add react
|
|
33
|
+
|
|
34
|
+
Or manually:
|
|
35
|
+
|
|
36
|
+
npm install react react-dom
|
|
37
|
+
pnpm add react react-dom
|
|
38
|
+
yarn add react react-dom
|
|
39
|
+
`.trim(),er=null,ci,pi;async function fn(){try{ci=await import('react'),pi=await import('react-dom/server'),er=!0;}catch{er=false;}}fn();function nt(n){if(er===false)throw new Error(`react is not installed.
|
|
40
|
+
|
|
41
|
+
${gn}`);return typeof n=="function"&&(n=ci.createElement(n)),pi.renderToString(n)}var we=class n{route;baseResponse;currentStatusCode=200;currentBody;isSending=false;request;events=new Map;parsedBody;get body(){return this.currentBody}set body(e){this.currentBody=e;}onSending(e){return this.events.set("sending",[...this.events.get("sending")||[],e]),this}onSent(e){return this.events.set("sent",[...this.events.get("sent")||[],e]),this}setResponse(e){return this.baseResponse=e,this}reset(){this.route={},this.currentBody=null,this.currentStatusCode=200;}setRoute(e){return this.route=e,this}get contentType(){return this.baseResponse.getHeader("Content-Type")}setContentType(e){return this.baseResponse.header("Content-Type",e),this}get statusCode(){return this.currentStatusCode??this.baseResponse.statusCode}get isOk(){return this.currentStatusCode>=200&&this.currentStatusCode<300}get sent(){return this.baseResponse.sent}static on(e,t){return Jt.subscribe(`response.${e}`,t)}static async trigger(e,...t){return new Promise(r=>{setTimeout(async()=>{await Jt.triggerAllAsync(`response.${e}`,...t),r(true);},0);})}async parseBody(){return await this.parse(this.currentBody)}async parse(e){if(!e||isScalar(e))return e;if(e.toJSON)return e.request=this.request,await e.toJSON();if(isIterable(e)){let t=Array.from(e);return Promise.all(t.map(async r=>await this.parse(r)))}if(!isPlainObject(e))return e;for(let t in e){let r=e[t];e[t]=await this.parse(r);}return e}log(e,t="info"){Ft.get("http.log")&&log({module:"response",action:this.route.method+" "+this.route.path.replace("/*","")+`:${this.request.id}`,message:e,type:t,context:{request:this.request,response:this}});}get isJson(){return this.getHeader("Content-Type")==="application/json"}async send(e,t,r=true){if(t&&(this.currentStatusCode=t),e===this)return this;if(e&&(this.currentBody=e),this.currentStatusCode||(this.currentStatusCode=200),this.log("Sending response"),(Array.isArray(this.currentBody)||isPlainObject(this.currentBody))&&this.setContentType("application/json"),r){await n.trigger("sending",this);for(let i of this.events.get("sending")||[])await i(this);if(this.isJson){await n.trigger("sendingJson",this);for(let i of this.events.get("sendingJson")||[])await i(this);if(this.isOk){await n.trigger("sendingSuccessJson",this);for(let i of this.events.get("sendingSuccessJson")||[])await i(this);}}}if(typeof this.currentBody!="string"?this.parsedBody=await this.parseBody():this.parsedBody=e,this.baseResponse.status(this.currentStatusCode),await this.baseResponse.send(this.parsedBody),this.log("Response sent"),r){n.trigger("sent",this);for(let i of this.events.get("sent")||[])i(this);this.currentStatusCode>=200&&this.currentStatusCode<300&&n.trigger("success",this),this.currentStatusCode===201&&n.trigger("successCreate",this),this.currentStatusCode===400&&n.trigger("badRequest",this),this.currentStatusCode===401&&n.trigger("unauthorized",this),this.currentStatusCode===403&&n.trigger("forbidden",this),this.currentStatusCode===404&&n.trigger("notFound",this),this.currentStatusCode===429&&n.trigger("throttled",this),this.currentStatusCode===500&&n.trigger("serverError",this),this.currentStatusCode>=400&&n.trigger("error",this);}return this}html(e,t){return this.setContentType("text/html").send(e,t)}render(e,t=200){return this.setStatusCode(t).html(nt(e))}xml(e,t){return this.setContentType("text/xml").send(e,t)}text(e,t){return this.setContentType("text/plain").send(e,t)}stream(e="text/plain"){this.setContentType(e),this.header("Transfer-Encoding","chunked"),this.header("Cache-Control","no-cache"),this.header("Connection","keep-alive"),this.header("X-Content-Type-Options","nosniff"),n.trigger("sending",this);for(let i of this.events.get("sending")||[])i(this);this.log("Starting stream");let t=false,r=[];return this.baseResponse.raw.writeHead(this.statusCode,this.getHeaders()),{send:i=>{if(t)throw new Error("Cannot send data: stream has already ended");return this.baseResponse.raw.write(i),this},render:i=>{if(t)throw new Error("Cannot render: stream has already ended");let s=nt(i);return r.push(s),this.baseResponse.raw.write(s),this},end:()=>{if(t)return this;t=true,this.currentBody=r,this.parsedBody=r,this.baseResponse.raw.end(),this.log("Stream ended"),n.trigger("sent",this);for(let i of this.events.get("sent")||[])i(this);return this.isOk&&n.trigger("success",this),this.currentStatusCode===201&&n.trigger("successCreate",this),this},get ended(){return t}}}sse(){this.setContentType("text/event-stream"),this.header("Cache-Control","no-cache, no-store, must-revalidate"),this.header("Connection","keep-alive"),this.header("X-Accel-Buffering","no"),n.trigger("sending",this);for(let r of this.events.get("sending")||[])r(this);this.log("Starting SSE stream");let e=false,t=[];return this.baseResponse.raw.writeHead(this.statusCode,this.getHeaders()),{send:(r,i,s)=>{if(e)throw new Error("Cannot send event: SSE stream has already ended");let a="";return s&&(a+=`id: ${s}
|
|
42
|
+
`),a+=`event: ${r}
|
|
43
|
+
`,a+=`data: ${JSON.stringify(i)}
|
|
44
|
+
|
|
45
|
+
`,t.push({event:r,data:i,id:s}),this.baseResponse.raw.write(a),this},comment:r=>{if(e)throw new Error("Cannot send comment: SSE stream has already ended");return this.baseResponse.raw.write(`: ${r}
|
|
46
|
+
|
|
47
|
+
`),this},end:()=>{if(!e){e=true,this.currentBody=t,this.parsedBody=t,this.baseResponse.raw.end(),this.log("SSE stream ended"),n.trigger("sent",this);for(let r of this.events.get("sent")||[])r(this);this.isOk&&n.trigger("success",this);}},get ended(){return e}}}setStatusCode(e){return this.currentStatusCode=e,this}redirect(e,t=302){return this.baseResponse.redirect(e,t),this}permanentRedirect(e){return this.baseResponse.redirect(e,301),this}getResponseTime(){return this.baseResponse.elapsedTime}removeHeader(e){return this.baseResponse.removeHeader(e),this}getHeader(e){return this.baseResponse.getHeader(e)}getHeaders(){return this.baseResponse.getHeaders()}headers(e){return this.baseResponse.headers(e),this}header(e,t){return this.baseResponse.header(e,t),this}setHeader(e,t){return this.header(e,t)}serverError(e){return this.send(e,500)}forbidden(e={error:"You are not allowed to access this resource, FORBIDDEN"}){return this.send(e,403)}serviceUnavailable(e){return this.send(e,503)}unauthorized(e={error:"unauthorized"}){return this.send(e,401)}notFound(e={error:"notFound"}){return this.send(e,404)}badRequest(e){return this.send(e,400)}successCreate(e){return this.send(e,201)}success(e={success:true}){return this.send(e)}noContent(){return this.baseResponse.status(204).send()}accepted(e={message:"Request accepted for processing"}){return this.send(e,202)}conflict(e={error:"Resource conflict"}){return this.send(e,409)}unprocessableEntity(e){return this.send(e,422)}applyResponseOptions(e,t){if(e.contentType&&this.baseResponse.type(e.contentType),e.cacheTime){let r=e.immutable?`public, max-age=${e.cacheTime}, immutable`:`public, max-age=${e.cacheTime}`;this.header("Cache-Control",r),this.header("Expires",new Date(Date.now()+e.cacheTime*1e3).toUTCString());}if(e.etag){this.header("ETag",e.etag);let r=this.request.header("if-none-match");if(r&&r===e.etag)return this.log("Content not modified (ETag match), sending 304"),this.baseResponse.status(304).send(),true}if(e.inline!==void 0||e.filename){let r=e.inline?"inline":"attachment",i=e.filename||t||"file";this.header("Content-Disposition",`${r}; filename="${i}"`);}return false}async sendFile(e,t){if(this.log(`Sending file: ${e}`),!await fileExistsAsync(e))return this.notFound({error:"File Not Found"});try{let r=typeof t=="number"?{cacheTime:t}:t||{},i=await Qt.promises.stat(e),s=i.mtime,a=`"${i.size}-${i.mtime.getTime()}"`;this.header("Last-Modified",s.toUTCString()),this.header("ETag",a);let o=this.getFileContentType(e);this.baseResponse.type(o);let l=X.basename(e);if(this.applyResponseOptions({...r,etag:a,contentType:o},l))return this.baseResponse;let p=this.request.header("if-none-match"),u=this.request.header("if-modified-since");if(p&&p===a)return this.log("File not modified (ETag match), sending 304"),this.baseResponse.status(304).send();if(u){let y=new Date(u);if(s.getTime()<=y.getTime())return this.log("File not modified (Last-Modified check), sending 304"),this.baseResponse.status(304).send()}let d=Qt.createReadStream(e);return d.on("error",y=>{this.log(`Error reading file: ${y.message}`,"error"),this.baseResponse.sent||this.serverError({error:"Error reading file",message:y.message});}),this.baseResponse.send(d)}catch(r){return this.log(`Error sending file: ${r.message}`,"error"),this.serverError({error:"Error sending file",message:r.message})}}sendBuffer(e,t){this.log("Sending buffer");let r=typeof t=="number"?{cacheTime:t}:t||{};return this.applyResponseOptions(r)?this.baseResponse:this.baseResponse.send(e)}async sendImage(e,t){this.log("Sending image");let r=typeof t=="number"?{cacheTime:t}:t||{},i=await e.metadata(),s=i.format||"jpeg",a=await e.toBuffer(),o=r.contentType||`image/${s}`;if(!r.etag){let c=i.width||0,p=i.height||0;r.etag=`"${s}-${c}x${p}-${a.length}"`;}return this.applyResponseOptions({...r,contentType:o})?this.baseResponse:this.baseResponse.send(a)}sendCachedFile(e,t=31536e3){return this.sendFile(e,t)}download(e,t){return this.downloadFile(e,t)}async downloadFile(e,t){if(!await fileExistsAsync(e))return this.notFound({error:"File Not Found"});try{t||(t=X.basename(e)),this.baseResponse.header("Content-Disposition",`attachment; filename="${t}"`),this.baseResponse.header("Content-Type","application/octet-stream");let r=Qt.createReadStream(e);return r.on("error",i=>{this.log(`Error reading file for download: ${i.message}`,"error"),this.baseResponse.sent||this.serverError({error:"Error reading file",message:i.message});}),this.baseResponse.send(r)}catch(r){return this.log(`Error downloading file: ${r.message}`,"error"),this.serverError({error:"Error downloading file",message:r.message})}}getFileContentType(e){return vn.getType(e)||"application/octet-stream"}failedSchema(e){let{errors:t,inputKey:r,inputError:i,status:s}=Ft.get("validation.response",{errors:"errors",inputKey:"input",inputError:"error",status:400});return log.error("request","validation",`${this.request.id} - Validation failed`),this.send({[t]:e.errors.map(a=>({[r]:a.input,[i]:a.error}))},s)}};var Cn=`
|
|
48
|
+
Image processing requires the sharp package.
|
|
49
|
+
Install it with:
|
|
50
|
+
|
|
51
|
+
warlock add image
|
|
52
|
+
|
|
53
|
+
Or manually:
|
|
54
|
+
|
|
55
|
+
npm install sharp
|
|
56
|
+
pnpm add sharp
|
|
57
|
+
yarn add sharp
|
|
58
|
+
`.trim(),rr=null,ir;async function xn(){try{ir=(await import('sharp')).default,rr=!0;}catch{rr=false;}}xn();var Ce=class n{options={};operations=[];cachedMetadata=null;pipelineExecuted=false;image;static QUALITY_FORMATS=["jpeg","jpg","webp","avif","tiff","heif"];constructor(e){if(rr===false)throw new Error(`sharp is not installed.
|
|
59
|
+
|
|
60
|
+
${Cn}`);e instanceof Object&&"clone"in e&&typeof e.clone=="function"?this.image=e:this.image=ir(e);}static fromFile(e){return new n(e)}static fromBuffer(e){return new n(e)}static async fromUrl(e){try{let t=await wn.get(e,{responseType:"arraybuffer"});if(!t.data)throw new Error("Empty response received");let r=Buffer.from(t.data,"binary");return new n(r)}catch(t){let r=t instanceof Error?t.message:"Unknown error";throw new Error(`Failed to load image from URL "${e}": ${r}`)}}addOperation(e){return this.operations.push(e),this}apply(e){if(e.resize&&this.resize(e.resize),e.crop&&this.crop(e.crop),e.rotate!==void 0&&this.rotate(e.rotate),e.flip&&this.flip(),e.flop&&this.flop(),(e.blackAndWhite||e.grayscale)&&this.blackAndWhite(),e.blur!==void 0&&this.blur(e.blur),e.sharpen){let t=typeof e.sharpen=="boolean"?void 0:e.sharpen;this.sharpen(t);}if(e.tint&&this.tint(e.tint),e.negate){let t=typeof e.negate=="boolean"?void 0:e.negate;this.negate(t);}if(e.trim){let t=typeof e.trim=="boolean"?void 0:e.trim;this.trim(t);}return e.watermark&&this.watermark(e.watermark.image,e.watermark.options),e.watermarks&&this.watermarks(e.watermarks),e.opacity!==void 0&&this.opacity(e.opacity),e.format&&this.format(e.format),e.quality!==void 0&&this.quality(e.quality),this}opacity(e){if(e<0||e>100)throw new Error("Opacity must be between 0 and 100");return this.addOperation({type:"opacity",value:e})}blackAndWhite(){return this.addOperation({type:"blackAndWhite"})}grayscale(){return this.blackAndWhite()}async dimensions(){let e=await this.metadata();return {width:e.width,height:e.height}}async metadata(){return this.cachedMetadata||(this.cachedMetadata=await this.image.metadata()),this.cachedMetadata}async refreshMetadata(){return this.cachedMetadata=await this.image.metadata(),this.cachedMetadata}clearMetadataCache(){return this.cachedMetadata=null,this}resize(e){return this.addOperation({type:"resize",options:e})}crop(e){return this.addOperation({type:"crop",options:e})}quality(e){if(e<1||e>100)throw new Error("Quality must be between 1 and 100");return this.options.quality=e,this}async executePipeline(){if(this.pipelineExecuted)return this.image;for(let e of this.operations)await this.executeOperation(this.image,e);return await this.applyFormatAndQuality(this.image),this.pipelineExecuted=true,this.image}async executeOperation(e,t){switch(t.type){case "resize":e.resize(t.options);break;case "crop":e.extract(t.options);break;case "rotate":e.rotate(t.angle);break;case "flip":e.flip();break;case "flop":e.flop();break;case "blur":e.blur(t.sigma);break;case "sharpen":e.sharpen(t.options);break;case "blackAndWhite":e.toColourspace("b-w");break;case "opacity":{let r=Math.round(t.value/100*255),i=Buffer.from([255,255,255,r]);e.composite([{blend:"dest-in",input:i}]);break}case "negate":e.negate(t.options);break;case "tint":e.tint(t.color);break;case "trim":e.trim(t.options);break;case "watermark":{let r=await this.resolveImageBuffer(t.config.image);e.composite([{input:r,...t.config.options}]);break}case "watermarks":{let r=await Promise.all(t.configs.map(i=>this.resolveImageBuffer(i.image)));e.composite(t.configs.map((i,s)=>({input:r[s],...i.options})));break}}}async resolveImageBuffer(e){return e instanceof n?e.image.toBuffer():ir(e).toBuffer()}async applyFormatAndQuality(e){let{quality:t,format:r}=this.options;if(r){let a=t?{quality:t}:void 0;e.toFormat(r,a);return}if(t===void 0)return;let s=(await this.metadata()).format;if(!s){e.webp({quality:t});return}if(n.QUALITY_FORMATS.includes(s))e.toFormat(s,{quality:t});else if(s==="png"){let a=Math.round(9-t/100*9);e.png({compressionLevel:a});}else s==="gif"&&e.gif();}async save(e){return (await this.executePipeline()).toFile(e)}async saveAsWebp(e){return this.options.format="webp",(await this.executePipeline()).toFile(e)}format(e){return this.options.format=e,this}watermark(e,t={}){return this.addOperation({type:"watermark",config:{image:e,options:t}})}watermarks(e){return this.addOperation({type:"watermarks",configs:e})}rotate(e){return this.addOperation({type:"rotate",angle:e})}flip(){return this.addOperation({type:"flip"})}flop(){return this.addOperation({type:"flop"})}blur(e){if(e<.3)throw new Error("Blur sigma must be at least 0.3");return this.addOperation({type:"blur",sigma:e})}async toBase64(){return (await(await this.executePipeline()).toBuffer()).toString("base64")}async toDataUrl(){let e=await this.metadata(),t=this.options.format||e.format||"png",r=`image/${t==="jpg"?"jpeg":t}`,i=await this.toBase64();return `data:${r};base64,${i}`}sharpen(e){return this.addOperation({type:"sharpen",options:e})}negate(e){return this.addOperation({type:"negate",options:e})}tint(e){return this.addOperation({type:"tint",color:e})}trim(e){return this.addOperation({type:"trim",options:e})}async toBuffer(){return (await this.executePipeline()).toBuffer()}clone(){let e=new n(this.image.clone());return e.options={...this.options},e.operations=[...this.operations],e.cachedMetadata=this.cachedMetadata?{...this.cachedMetadata}:null,e}getOptions(){return {...this.options}}getPendingOperationsCount(){return this.operations.length}resetOptions(){return this.options={},this}clearOperations(){return this.operations=[],this.pipelineExecuted=false,this}reset(){return this.operations=[],this.options={},this.pipelineExecuted=false,this.cachedMetadata=null,this}};function yi(n){let e=[],t=je(),r=n[t]?.channels,i=n.channels;i&&e.push(...i),r&&e.push(...r),logger.configure({channels:e});}function sr(n){}var vi=null,Pn;async function Sn(){try{Pn=(await import('nodemailer')).default,vi=!0;}catch{vi=false;}}Sn();var nr=class{handlers=new Map;register(e,t){this.handlers.set(e,t);}async execute(e,t){let r=this.handlers.get(e);if(r)return r(t)}},xe=new nr;var Nn=async n=>{let e=n.locales||["en"];for(let t of e)if(t!=="en")try{await import(`dayjs/locale/${t}.js`);}catch{console.warn(` \u26A0\uFE0F Failed to load dayjs locale: ${t}`);}};xe.register("app",Nn);var Ln=async n=>{try{yi(n);}catch{console.warn(" \u26A0\uFE0F Could not set log configurations");}};xe.register("log",Ln);var _n=async n=>{try{sr(n);}catch{console.warn(" \u26A0\uFE0F Could not set mail configurations");}};xe.register("mail",_n);function ot(n,e){return n?re.get(`storage.${n}`,e):re.get("storage")}var N=class n{_path;_driver;_data;_deleted=false;constructor(e,t,r){this._path=e,this._driver=t,this._data=r;}get path(){return this._path}get name(){return basename(this._path)}get extension(){return extname(this._path).slice(1).toLowerCase()}get directory(){return dirname(this._path)}get driver(){return this._driver.name}get isDeleted(){return this._deleted}get url(){return this.ensureNotDeleted(),this._data?.url||this._driver.url(this._path)}get absolutePath(){if(this.ensureNotDeleted(),"path"in this._driver&&typeof this._driver.path=="function")return this._driver.path(this._path)}get hash(){return this._data?.hash}async data(){if(this.ensureNotDeleted(),!this._data){let e=await this._driver.getInfo(this._path);this._data={path:e.path,url:this._driver.url(this._path),size:e.size,hash:"",mimeType:e.mimeType||"application/octet-stream",driver:this._driver.name};}return this._data}async size(){return (await this.data()).size}async mimeType(){return (await this.data()).mimeType}async lastModified(){return this.ensureNotDeleted(),(await this._driver.getInfo(this._path)).lastModified}async etag(){return this.ensureNotDeleted(),(await this._driver.getInfo(this._path)).etag}async contents(){return this.ensureNotDeleted(),this._driver.get(this._path)}async stream(){return this.ensureNotDeleted(),this._driver.getStream(this._path)}async text(){return (await this.contents()).toString("utf-8")}async base64(){return (await this.contents()).toString("base64")}async dataUrl(){let[e,t]=await Promise.all([this.contents(),this.data()]);return `data:${t.mimeType};base64,${e.toString("base64")}`}async temporaryUrl(e=3600){return this.ensureNotDeleted(),this._driver.temporaryUrl(this._path,e)}async exists(){return this._deleted?false:this._driver.exists(this._path)}async copy(e){this.ensureNotDeleted();let t=await this._driver.copy(this._path,e);return new n(e,this._driver,t)}async move(e){this.ensureNotDeleted();let t=await this._driver.move(this._path,e);return this._path=e,this._data=t,this}async rename(e){let t=this.directory==="."?e:`${this.directory}/${e}`;return this.move(t)}async delete(){this.ensureNotDeleted();let e=await this._driver.delete(this._path);return this._deleted=true,e}async setVisibility(e){if(this.ensureNotDeleted(),!("setVisibility"in this._driver))throw new Error("setVisibility is only available for cloud storage drivers");return await this._driver.setVisibility(this._path,e),this}async getVisibility(){if(this.ensureNotDeleted(),!("getVisibility"in this._driver))throw new Error("getVisibility is only available for cloud storage drivers");return this._driver.getVisibility(this._path)}async setStorageClass(e){if(this.ensureNotDeleted(),!("setStorageClass"in this._driver))throw new Error("setStorageClass is only available for cloud storage drivers");return await this._driver.setStorageClass(this._path,e),this}ensureNotDeleted(){if(this._deleted)throw new Error(`File "${this._path}" has been deleted`)}static fromData(e,t){return new n(e.path,t,e)}toJSON(){return {path:this._path,name:this.name,extension:this.extension,driver:this._driver.name,url:this._deleted?"":this.url,hash:this._data?.hash}}toString(){return this._path}};var ke=class{_driver;constructor(e){this._driver=e;}get name(){return this.activeDriver.name}get defaultDriver(){return this._driver}get activeDriver(){return this._driver}async put(e,t,r){let i=await this.toBuffer(e),s=await this.activeDriver.put(i,t,r);return N.fromData(s,this.activeDriver)}async putStream(e,t,r){let i=await this.activeDriver.putStream(e,t,r);return N.fromData(i,this.activeDriver)}async putFromUrl(e,t,r){let i=await fetch(e);if(!i.ok)throw new Error(`Failed to fetch file from ${e}: ${i.statusText}`);let s=Buffer.from(await i.arrayBuffer());return this.put(s,t,r)}async putFromBase64(e,t,r){let i=e.match(/^data:([^;]+);base64,(.+)$/);if(!i)throw new Error("Invalid base64 data URL format. Expected: data:mime/type;base64,<data>");let[,s,a]=i,o=Buffer.from(a,"base64");return this.put(o,t,{...r,mimeType:r?.mimeType||s})}async get(e){return this.activeDriver.get(e)}async getStream(e){return this.activeDriver.getStream(e)}async delete(e){let t=typeof e=="string"?e:e.path;return this.activeDriver.delete(t)}async deleteMany(e){return this.activeDriver.deleteMany(e)}async deleteDirectory(e){return await this.activeDriver.deleteDirectory(e)}async exists(e){return this.activeDriver.exists(e)}async copy(e,t){let r=typeof e=="string"?e:e.path,i=await this.activeDriver.copy(r,t);return N.fromData(i,this.activeDriver)}async move(e,t){let r=typeof e=="string"?e:e.path,i=await this.activeDriver.move(r,t);return N.fromData(i,this.activeDriver)}async copyDirectory(e,t,r){let i=r?.concurrency||5,a=(await this.list(e,{recursive:true})).filter(l=>!l.isDirectory),o=0;for(let l=0;l<a.length;l+=i){let c=a.slice(l,l+i);await Promise.all(c.map(async p=>{let u=p.path.substring(e.length).replace(/^\//,""),d=`${t}/${u}`;await this.copy(p.path,d),o++;}));}return o}async moveDirectory(e,t,r){let i=await this.copyDirectory(e,t,r);return await this.deleteDirectory(e),i}async emptyDirectory(e){let r=(await this.list(e,{recursive:true})).filter(i=>!i.isDirectory).map(i=>i.path);return r.length===0?0:(await this.deleteMany(r),r.length)}async list(e,t){return this.activeDriver.list(e||"",t)}url(e){return this.activeDriver.url(e)}async temporaryUrl(e,t){return this.activeDriver.temporaryUrl(e,t)}async getInfo(e){return this.activeDriver.getInfo(e)}async size(e){return this.activeDriver.size(e)}async file(e){return new N(e,this.activeDriver)}async toBuffer(e){return Buffer.isBuffer(e)?e:this.isReadable(e)?this.streamToBuffer(e):typeof e=="string"?await fileExistsAsync(e)?Un.readFile(e):Buffer.from(e):e.buffer()}isReadable(e){return typeof e=="object"&&e!==null&&"pipe"in e&&typeof e.pipe=="function"}async streamToBuffer(e){let t=[];for await(let r of e)t.push(Buffer.isBuffer(r)?r:Buffer.from(r));return Buffer.concat(t)}prepend(e,t){return `${e.replace(/\/$/,"")}/${t.replace(/^\//,"")}`}append(e,t){let r=e.lastIndexOf(".");return r===-1?`${e}${t}`:`${e.substring(0,r)}${t}${e.substring(r)}`}};var or=class extends Context{getDriver(){return this.get("driver")}getPrefix(){return this.get("prefix")}getMetadata(){return this.get("metadata")}setDriver(e,t){this.update({driver:e,prefix:t?.prefix,metadata:t?.metadata});}setPrefix(e){this.update({prefix:e});}clearPrefix(){this.update({prefix:void 0});}buildStore(){return {driver:void 0,prefix:void 0,metadata:void 0}}},me=new or;contextManager.register("storage",me);function at(n){return vn.getType(n)||"application/octet-stream"}var T,wi,ar,lr=null,Gn=`
|
|
61
|
+
Cloud storage requires the AWS S3 SDK packages.
|
|
62
|
+
Install them with:
|
|
63
|
+
|
|
64
|
+
npm install @aws-sdk/client-s3 @aws-sdk/lib-storage @aws-sdk/s3-request-presigner
|
|
65
|
+
|
|
66
|
+
Or with your preferred package manager:
|
|
67
|
+
|
|
68
|
+
pnpm add @aws-sdk/client-s3 @aws-sdk/lib-storage @aws-sdk/s3-request-presigner
|
|
69
|
+
yarn add @aws-sdk/client-s3 @aws-sdk/lib-storage @aws-sdk/s3-request-presigner
|
|
70
|
+
`.trim();async function Jn(){try{T=await import('@aws-sdk/client-s3'),wi=await import('@aws-sdk/lib-storage'),ar=await import('@aws-sdk/s3-request-presigner'),lr=!0;}catch{lr=false;}}Jn();var ie=class{constructor(e){this.options=e;if(!lr)throw new Error(Gn);this.client=new T.S3Client({region:this.options.region,credentials:{accessKeyId:this.options.accessKeyId,secretAccessKey:this.options.secretAccessKey},...this.getEndpoint()&&{endpoint:this.getEndpoint()}}),this.retryConfig={maxRetries:this.options.retry?.maxRetries??3,initialDelayMs:this.options.retry?.initialDelayMs??1e3,maxDelayMs:this.options.retry?.maxDelayMs??1e4,backoffMultiplier:this.options.retry?.backoffMultiplier??2};}client;retryConfig;getEndpoint(){return this.options.endpoint}applyPrefix(e){let r=me.getPrefix()||this.options.prefix;if(!r)return e;let i=r.replace(/\/+$/,""),s=e.replace(/^\/+/,"");return s.startsWith(i+"/")||s===i?s:`${i}/${s}`}normalizePath(e){return e.replace(/\/+/g,"/").replace(/^\//,"").trim()}async withRetry(e,t="operation"){let{maxRetries:r,initialDelayMs:i,backoffMultiplier:s,maxDelayMs:a}=this.retryConfig,o;for(let l=0;l<r;l++)try{return await e()}catch(c){if(o=c,l===r-1)break;if(!this.isRetryableError(c))throw c;let p=Math.min(i*Math.pow(s,l),a);await new Promise(u=>setTimeout(u,p));}throw new Error(`${t} failed after ${r} attempts: ${o?.message}`)}isRetryableError(e){if(e.code==="ECONNRESET"||e.code==="ETIMEDOUT"||e.code==="ENOTFOUND"||e.name==="NetworkingError"||e.name==="TimeoutError")return true;let t=e.$metadata?.httpStatusCode||e.statusCode;return !!(t&&(t>=500&&t<600||t===429))}async put(e,t,r){return this.withRetry(async()=>{let{PutObjectCommand:i}=T;t=this.applyPrefix(t);let s=this.calculateHash(e),a=r?.mimeType||this.guessMimeType(t),o=new i({Bucket:this.options.bucket,Key:t,Body:e,ContentType:a,CacheControl:r?.cacheControl,ContentDisposition:r?.contentDisposition,Metadata:r?.metadata,ACL:r?.visibility==="public"?"public-read":void 0}),l=await this.client.send(o);return {path:t,url:this.url(t),size:e.length,hash:s,mimeType:a,driver:this.name,bucket:this.options.bucket,region:this.options.region,etag:l.ETag,versionId:l.VersionId}},"put")}async putStream(e,t,r){return this.withRetry(async()=>{let{Upload:i}=wi;t=this.applyPrefix(t);let s=r?.mimeType||this.guessMimeType(t),o=await new i({client:this.client,params:{Bucket:this.options.bucket,Key:t,Body:e,ContentType:s,CacheControl:r?.cacheControl,ContentDisposition:r?.contentDisposition,Metadata:r?.metadata,ACL:r?.visibility==="public"?"public-read":void 0}}).done(),l=await this.getInfo(t);return {path:t,url:this.url(t),size:l.size,hash:l.etag?.replace(/"/g,"")||"",mimeType:s,driver:this.name,bucket:this.options.bucket,region:this.options.region,etag:o.ETag,versionId:o.VersionId}},"putStream")}async get(e){return this.withRetry(async()=>{let{GetObjectCommand:t}=T;e=this.applyPrefix(e);let r=new t({Bucket:this.options.bucket,Key:e}),i=await this.client.send(r);if(!i.Body)throw new Error(`File not found: ${e}`);return Buffer.from(await i.Body.transformToByteArray())},"get")}async getStream(e){return this.withRetry(async()=>{let{GetObjectCommand:t}=T;e=this.applyPrefix(e);let r=new t({Bucket:this.options.bucket,Key:e}),i=await this.client.send(r);if(!i.Body)throw new Error(`File not found: ${e}`);return i.Body},"getStream")}async delete(e){return this.withRetry(async()=>{let{DeleteObjectCommand:t}=T;e=this.applyPrefix(e);let r=new t({Bucket:this.options.bucket,Key:e});return await this.client.send(r),true},"delete")}async deleteMany(e){return e.length===0?[]:this.withRetry(async()=>{let{DeleteObjectsCommand:t}=T,r=e.map(o=>this.applyPrefix(o)),i=new t({Bucket:this.options.bucket,Delete:{Objects:r.map(o=>({Key:o})),Quiet:false}}),s=await this.client.send(i),a=[];for(let o of s.Deleted||[])o.Key&&a.push({location:o.Key,deleted:true});for(let o of s.Errors||[])o.Key&&a.push({location:o.Key,deleted:false,error:o.Message||"Unknown error"});return a},"deleteMany")}async deleteDirectory(e){e=this.applyPrefix(e);let t=e.endsWith("/")?e:`${e}/`,r=true;for(;r;){let i=await this.list(t,{limit:1e3,recursive:true});if(i.length===0)break;let s=i.filter(o=>!o.isDirectory).map(o=>o.path);if(s.length===0)break;await this.deleteMany(s);r=i.length>=1e3;}return true}async exists(e){try{let{HeadObjectCommand:t}=T;e=this.applyPrefix(e);let r=new t({Bucket:this.options.bucket,Key:e});return await this.client.send(r),!0}catch{return false}}async temporaryUrl(e,t=3600){return this.getPresignedUrl(e,{expiresIn:t})}async getPresignedUrl(e,t){return this.withRetry(async()=>{let{GetObjectCommand:r}=T,{getSignedUrl:i}=ar;e=this.applyPrefix(e);let s=new r({Bucket:this.options.bucket,Key:e});return i(this.client,s,{expiresIn:t?.expiresIn||3600})},"getPresignedUrl")}async getPresignedUploadUrl(e,t){return this.withRetry(async()=>{let{PutObjectCommand:r}=T,{getSignedUrl:i}=ar;e=this.applyPrefix(e);let s=new r({Bucket:this.options.bucket,Key:e,ContentType:t?.contentType,Metadata:t?.metadata});return i(this.client,s,{expiresIn:t?.expiresIn||3600})},"getPresignedUploadUrl")}async getInfo(e){return this.withRetry(async()=>{let{HeadObjectCommand:t}=T;e=this.applyPrefix(e);let r=new t({Bucket:this.options.bucket,Key:e}),i=await this.client.send(r),s=e.split("/").pop()||"";return {path:e,name:s,size:i.ContentLength||0,isDirectory:false,lastModified:i.LastModified,mimeType:i.ContentType||this.guessMimeType(e),etag:i.ETag,storageClass:i.StorageClass}},"getInfo")}async size(e){return (await this.getInfo(e)).size}async copy(e,t){return this.withRetry(async()=>{let{CopyObjectCommand:r,HeadObjectCommand:i}=T;e=this.applyPrefix(e),t=this.applyPrefix(t);let s=new r({Bucket:this.options.bucket,CopySource:`${this.options.bucket}/${e}`,Key:t}),a=await this.client.send(s),o=new i({Bucket:this.options.bucket,Key:t}),l=await this.client.send(o);return {path:t,url:this.url(t),size:l.ContentLength||0,hash:l.ETag?.replace(/"/g,"")||"",mimeType:l.ContentType||this.guessMimeType(t),driver:this.name,bucket:this.options.bucket,region:this.options.region,etag:a.CopyObjectResult?.ETag,versionId:a.VersionId}},"copy")}async move(e,t){let r=await this.copy(e,t);return await this.delete(e),r}async list(e,t){return this.withRetry(async()=>{let{ListObjectsV2Command:r}=T;e=this.applyPrefix(e);let i=new r({Bucket:this.options.bucket,Prefix:e,MaxKeys:t?.limit,ContinuationToken:t?.cursor,Delimiter:t?.recursive?void 0:"/"}),s=await this.client.send(i),a=[];for(let o of s.Contents||[])o.Key&&a.push({path:o.Key,name:o.Key.split("/").pop()||"",size:o.Size||0,isDirectory:false,lastModified:o.LastModified,etag:o.ETag,storageClass:o.StorageClass});for(let o of s.CommonPrefixes||[])o.Prefix&&a.push({path:o.Prefix,name:o.Prefix.split("/").filter(Boolean).pop()||"",size:0,isDirectory:true});return a},"list")}getBucket(){return this.options.bucket}getRegion(){return this.options.region}async setStorageClass(e,t){return this.withRetry(async()=>{let{CopyObjectCommand:r}=T;e=this.applyPrefix(e);let i=new r({Bucket:this.options.bucket,CopySource:`${this.options.bucket}/${e}`,Key:e,StorageClass:t,MetadataDirective:"COPY"});await this.client.send(i);},"setStorageClass")}async setVisibility(e,t){return this.withRetry(async()=>{let{PutObjectAclCommand:r}=T;e=this.applyPrefix(e);let i=new r({Bucket:this.options.bucket,Key:e,ACL:t==="public"?"public-read":"private"});await this.client.send(i);},"setVisibility")}async getVisibility(e){return this.withRetry(async()=>{let{GetObjectAclCommand:t}=T;e=this.applyPrefix(e);let r=new t({Bucket:this.options.bucket,Key:e});return (await this.client.send(r)).Grants?.some(a=>a.Grantee?.URI==="http://acs.amazonaws.com/groups/global/AllUsers"&&a.Permission==="READ")?"public":"private"},"getVisibility")}calculateHash(e){return pt.createHash("sha256").update(new Uint8Array(e)).digest("hex")}guessMimeType(e){return at(e)}};var lt=class extends ie{name="spaces";getEndpoint(){return this.options.endpoint||`https://${this.options.region}.digitaloceanspaces.com`}url(e){return this.options.urlPrefix?`${this.options.urlPrefix.replace(/\/+$/,"")}/${e}`:`https://${this.options.bucket}.${this.options.region}.cdn.digitaloceanspaces.com/${e}`}};var dt=class{constructor(e={}){this.options=e;this.root=e.root||Hr(),e.urlPrefix&&(this.urlPrefix=e.urlPrefix),this.temporaryUrlPrefix=e.temporaryUrlPrefix||"/temp-files",this.signatureKey=e.signatureKey;}name="local";root;urlPrefix="";temporaryUrlPrefix;signatureKey;applyPrefix(e){let r=me.getPrefix()||this.options.prefix;if(!r)return e;let i=r.replace(/\/+$/,""),s=e.replace(/^\/+/,"");return s.startsWith(i+"/")||s===i?s:`${i}/${s}`}async put(e,t,r){let i=this.getAbsolutePath(t);await ensureDirectoryAsync(dirname(i));let s=await this.toBuffer(e),a=this.calculateHash(s);await writeFile(i,new Uint8Array(s));let o=await stat(i),l=r?.mimeType||this.guessMimeType(t);return {path:t,url:this.url(t),size:o.size,hash:a,mimeType:l,driver:this.name}}async putStream(e,t,r){let i=this.getAbsolutePath(t);await ensureDirectoryAsync(dirname(i));let s=createWriteStream(i);await pipeline(e,s);let a=await readFile(i),o=this.calculateHash(a),l=await stat(i),c=r?.mimeType||this.guessMimeType(t);return {path:t,url:this.url(t),size:l.size,hash:o,mimeType:c,driver:this.name}}async get(e){let t=this.getAbsolutePath(e);if(!await fileExistsAsync(t))throw new Error(`File not found: ${e}`);return readFile(t)}async getStream(e){let t=this.getAbsolutePath(e);if(!await fileExistsAsync(t))throw new Error(`File not found: ${e}`);return createReadStream(t)}async delete(e){let t=this.getAbsolutePath(e);return await fileExistsAsync(t)?(await unlinkAsync(t),true):false}async deleteMany(e){let t=[];for(let r of e)try{let i=await this.delete(r);t.push({location:r,deleted:i});}catch(i){t.push({location:r,deleted:false,error:i instanceof Error?i.message:"Unknown error"});}return t}async deleteDirectory(e){return await removeDirectoryAsync(e),true}async exists(e){let t=this.getAbsolutePath(e);return !!await fileExistsAsync(t)}url(e){return qr(this.urlPrefix+"/"+ltrim(e,"/"))}async temporaryUrl(e,t=3600){if(!this.signatureKey)throw new Error("Temporary URLs require a signatureKey in LocalDriver options. Configure storage.drivers.local.signatureKey in your config.");let r=this.encodeTemporaryToken(e,t);return `${this.temporaryUrlPrefix}/${r}`}encodeTemporaryToken(e,t){if(!this.signatureKey)throw new Error("Temporary tokens require a signatureKey");let r=Math.floor(Date.now()/1e3)+t,i=pt.createHmac("sha256",this.signatureKey).update(`${e}:${r}`).digest("hex"),a=JSON.stringify({path:e,exp:r,sig:i});return Buffer.from(a).toString("base64url")}async validateTemporaryToken(e){if(!this.signatureKey)return {valid:false,error:"missing_key"};let t;try{let p=Buffer.from(e,"base64url").toString("utf-8");t=JSON.parse(p);}catch{return {valid:false,error:"invalid_token"}}if(!t.path||!t.exp||!t.sig)return {valid:false,error:"invalid_token"};let r=Math.floor(Date.now()/1e3);if(t.exp<r)return {valid:false,error:"expired"};let i=pt.createHmac("sha256",this.signatureKey).update(`${t.path}:${t.exp}`).digest("hex"),s=Buffer.from(t.sig,"hex"),a=Buffer.from(i,"hex");if(s.length!==a.length)return {valid:false,error:"invalid_signature"};if(!pt.timingSafeEqual(new Uint8Array(s),new Uint8Array(a)))return {valid:false,error:"invalid_signature"};let l=this.getAbsolutePath(t.path);return await fileExistsAsync(l)?{valid:true,path:t.path,absolutePath:l,expiresAt:new Date(t.exp*1e3),mimeType:this.guessMimeType(t.path),driver:this,getFile:()=>this.get(t.path),getStream:()=>this.getStream(t.path)}:{valid:false,error:"file_not_found"}}async getInfo(e){let t=this.getAbsolutePath(e);if(!await fileExistsAsync(t))throw new Error(`File not found: ${e}`);let r=await stat(t),i=e.split("/").pop()||"";return {path:e,name:i,size:r.size,isDirectory:r.isDirectory(),lastModified:r.mtime,mimeType:this.guessMimeType(e)}}async size(e){let t=this.getAbsolutePath(e);if(!await fileExistsAsync(t))throw new Error(`File not found: ${e}`);return (await stat(t)).size}async copy(e,t){let r=this.getAbsolutePath(e),i=this.getAbsolutePath(t);if(!await fileExistsAsync(r))throw new Error(`Source file not found: ${e}`);await ensureDirectoryAsync(dirname(i)),await copyFile(r,i);let s=await readFile(i),a=this.calculateHash(s),o=await stat(i);return {path:t,url:this.url(t),size:o.size,hash:a,mimeType:this.guessMimeType(t),driver:this.name}}async move(e,t){let r=this.getAbsolutePath(e),i=this.getAbsolutePath(t);if(!await fileExistsAsync(r))throw new Error(`Source file not found: ${e}`);await ensureDirectoryAsync(dirname(i)),await rename(r,i);let s=await readFile(i),a=this.calculateHash(s),o=await stat(i);return {path:t,url:this.url(t),size:o.size,hash:a,mimeType:this.guessMimeType(t),driver:this.name}}async list(e,t){let r=this.getAbsolutePath(e),i=[];if(!await fileExistsAsync(r))return i;let s=await readdir(r,{withFileTypes:true});for(let a of s){let o=join(e,a.name),l=await stat(this.getAbsolutePath(o));if(i.push({path:o,name:a.name,size:l.size,isDirectory:a.isDirectory(),lastModified:l.mtime,mimeType:a.isFile()?this.guessMimeType(a.name):void 0}),t?.recursive&&a.isDirectory()){let c=await this.list(o,t);i.push(...c);}if(t?.limit&&i.length>=t.limit)break}return i}path(e){return this.getAbsolutePath(e)}getRoot(){return this.root}getAbsolutePath(e){let t=this.applyPrefix(e);return join(this.root,t)}async toBuffer(e){return Buffer.isBuffer(e)?e:typeof e=="string"?readFile(e):e.buffer()}calculateHash(e){return pt.createHash("sha256").update(new Uint8Array(e)).digest("hex")}guessMimeType(e){return at(e)}};var mt=class extends ie{name="r2";getEndpoint(){return this.options.endpoint||`https://${this.options.accountId}.r2.cloudflarestorage.com`}url(e){return this.options.urlPrefix?`${this.options.urlPrefix.replace(/\/+$/,"")}/${e}`:this.options.publicDomain?`${this.options.publicDomain.replace(/\/+$/,"")}/${e}`:`https://pub-${this.options.accountId}.r2.dev/${e}`}};var ht=class extends ie{name="s3";url(e){return this.options.urlPrefix?`${this.options.urlPrefix.replace(/\/+$/,"")}/${e}`:`https://${this.options.bucket}.s3.${this.options.region}.amazonaws.com/${e}`}};var pr=class extends ke{drivers=new Map;configs=new Map;defaultDriverName;initialized=false;constructor(){super(null);}async init(){if(this.initialized)return;this.initialized=true;let e=ot("default","local");this.defaultDriverName=e,this.loadDriversFromConfig(),this._driver=this.resolveDriver(this.defaultDriverName);}reset(){this.initialized=false,this.drivers.clear(),this.configs.clear(),this.defaultDriverName=null,this._driver=null;}get activeDriver(){let e=me.getDriver();return e||this._driver}loadDriversFromConfig(){let e=ot("drivers",{});for(let[t,r]of Object.entries(e))this.configs.set(t,r);}use(e){return new ke(this.getDriver(e))}getDriver(e){return this.resolveDriver(e)}root(e){let t=this.activeDriver.options?.root||"";return X.join(t,e||"")}useCloud(e){let t=this.getDriver(e);if(!this.isCloudDriver(t))throw new Error(`Driver "${e}" does not support cloud operations`);return t}register(e,t){return this.configs.set(e,t),this.drivers.delete(e),this}setDefault(e){return this.defaultDriverName=e,this._driver=this.getDriver(e),this}async isCloud(){return this.isCloudDriver(this.activeDriver)}isCloudDriver(e){return "getPresignedUrl"in e}on(e,t){return Jt.subscribe(`storage.${e}`,t)}off(e){return Jt.off(`storage.${e}`),this}async emit(e,t){await Jt.triggerAll(`storage.${e}`,t);}async put(e,t,r){let i=this.activeDriver,s=await this.toBuffer(e);await this.emit("beforePut",{driver:i.name,location:t,timestamp:new Date,size:s.length});let a=await i.put(s,t,r);return await this.emit("afterPut",{driver:i.name,location:t,timestamp:new Date,file:a}),N.fromData(a,i)}async putStream(e,t,r){let i=this.activeDriver;await this.emit("beforePut",{driver:i.name,location:t,timestamp:new Date}),typeof e=="string"&&(e=Qt.createReadStream(e));let s=await i.putStream(e,t,r);return await this.emit("afterPut",{driver:i.name,location:t,timestamp:new Date,file:s}),N.fromData(s,i)}async putFromUrl(e,t,r){let i=await fetch(e);if(!i.ok)throw new Error(`Failed to fetch file from URL: ${i.statusText}`);let s=await i.arrayBuffer(),a=Buffer.from(s),o=r?.mimeType||i.headers.get("content-type")||void 0;return this.put(a,t,{...r,mimeType:o})}async putFromBase64(e,t,r){let i=e,s=r?.mimeType;if(e.startsWith("data:")){let o=e.match(/^data:([^;]+);base64,(.+)$/);o&&(s=s||o[1],i=o[2]);}let a=Buffer.from(i,"base64");return this.put(a,t,{...r,mimeType:s})}async get(e){return this.activeDriver.get(e)}async getJson(e){let t=await this.get(e);return JSON.parse(t.toString())}async getStream(e){return this.activeDriver.getStream(e)}async delete(e){let t=this.activeDriver,r=typeof e=="string"?e:e.path;await this.emit("beforeDelete",{driver:t.name,location:r,timestamp:new Date});let i=await t.delete(r);return await this.emit("afterDelete",{driver:t.name,location:r,timestamp:new Date}),i}async deleteMany(e){return this.activeDriver.deleteMany(e)}async exists(e){return this.activeDriver.exists(e)}async copy(e,t){let r=this.activeDriver,i=typeof e=="string"?e:e.path;await this.emit("beforeCopy",{driver:r.name,location:t,from:i,to:t,timestamp:new Date});let s=await r.copy(i,t);return await this.emit("afterCopy",{driver:r.name,location:t,from:i,to:t,timestamp:new Date,file:s}),N.fromData(s,r)}async move(e,t){let r=this.activeDriver,i=typeof e=="string"?e:e.path;await this.emit("beforeMove",{driver:r.name,location:t,from:i,to:t,timestamp:new Date});let s=await r.move(i,t);return await this.emit("afterMove",{driver:r.name,location:t,from:i,to:t,timestamp:new Date,file:s}),N.fromData(s,r)}async list(e,t){return this.activeDriver.list(e||"",t)}async getInfo(e){return this.activeDriver.getInfo(e)}async size(e){return this.activeDriver.size(e)}async file(e){return new N(e,this.activeDriver)}async path(e){let t=this.activeDriver;if(!("path"in t)||typeof t.path!="function")throw new Error("path() is only available for local storage drivers");return t.path(e)}async getPresignedUrl(e,t){let r=this.activeDriver;if(!this.isCloudDriver(r))throw new Error("Presigned URLs are only available for cloud storage drivers");return r.getPresignedUrl(e,t)}async getPresignedUploadUrl(e,t){let r=this.activeDriver;if(!this.isCloudDriver(r))throw new Error("Presigned upload URLs are only available for cloud storage drivers");return r.getPresignedUploadUrl(e,t)}async getBucket(){let e=this.activeDriver;if(!this.isCloudDriver(e))throw new Error("Bucket information is only available for cloud storage drivers");return e.getBucket()}async getRegion(){let e=this.activeDriver;if(!this.isCloudDriver(e))throw new Error("Region information is only available for cloud storage drivers");return e.getRegion()}async setStorageClass(e,t){let r=this.activeDriver;if(!this.isCloudDriver(r))throw new Error("Storage class is only available for cloud storage drivers");return r.setStorageClass(e,t)}async setVisibility(e,t){let r=this.activeDriver;if(!this.isCloudDriver(r))throw new Error("Visibility is only available for cloud storage drivers");return r.setVisibility(e,t)}async getVisibility(e){let t=this.activeDriver;if(!this.isCloudDriver(t))throw new Error("Visibility is only available for cloud storage drivers");return t.getVisibility(e)}async temporaryUrl(e,t){return this.activeDriver.temporaryUrl(e,t)}async validateTemporaryToken(e){return !("validateTemporaryToken"in this.activeDriver)||typeof this.activeDriver.validateTemporaryToken!="function"?{valid:false,error:"invalid_token"}:this.activeDriver.validateTemporaryToken(e)}parseOptions(e){let{driver:t,...r}=e;switch(t){case "local":return {root:r.root,urlPrefix:r.urlPrefix,signatureKey:r.signatureKey};case "s3":return this.validateCloudConfig(e,"s3"),{...r,bucket:r.bucket,region:r.region,accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,endpoint:r.endpoint,urlPrefix:r.urlPrefix};case "r2":if(this.validateCloudConfig(e,"r2"),!r.accountId)throw new Error('R2 driver requires "accountId" configuration');return {...r,region:r.region||"auto",bucket:r.bucket,accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,endpoint:r.endpoint,urlPrefix:r.urlPrefix,accountId:r.accountId,publicDomain:r.publicDomain};case "spaces":return this.validateCloudConfig(e,"spaces"),{...r,bucket:r.bucket,region:r.region,accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,endpoint:r.endpoint,urlPrefix:r.urlPrefix};default:throw new Error(`Unknown driver type: ${t}`)}}validateCloudConfig(e,t){let r=["bucket","accessKeyId","secretAccessKey"];t!=="r2"&&r.push("region");for(let i of r)if(!e[i])throw new Error(`${t.toUpperCase()} driver requires "${i}" configuration`)}resolveDriver(e){if(this.drivers.has(e))return this.drivers.get(e);let t=this.configs.get(e);if(!t)throw new Error(`Storage driver "${e}" is not configured`);let r=this.parseOptions(t),i;switch(t.driver){case "local":i=new dt(r);break;case "s3":i=new ht(r);break;case "r2":i=new mt(r);break;case "spaces":i=new lt(r);break;default:throw new Error(`Unknown storage driver type: ${t.driver}`)}return this.drivers.set(e,i),i}async resolveDefaultDriver(){let e=ot("resolver");return e?await e()||this.defaultDriverName:this.defaultDriverName}},se=new pr;var lo={name:"random",randomLength:32,prefix:{as:"directory",format:"DD-MM-YYYY"}};function $e(n,e){let t=lo[n];return re.key(`uploads.${n}`,t)}var gt=class{constructor(e){this.fileData=e;if(!e?.filename)throw new Error("Invalid file data: filename is required")}bufferedFileContent;hash="";_storage=se;_storageFile;_imageOptions={};_transformConfig;get name(){return zr(this.fileData.filename)}get mimeType(){return this.fileData.mimetype}get extension(){return X.extname(this.fileData.filename).replace(".","").toLowerCase()}async metadata(){let e={name:this.name,mimeType:this.mimeType,extension:this.extension,size:await this.size()};if(this.isImage){let t=await this.dimensions();e.width=t.width,e.height=t.height;}return e}async size(){return (await this.buffer()).length}async buffer(){return this.bufferedFileContent?this.bufferedFileContent:(this.bufferedFileContent=await this.fileData.toBuffer(),this.bufferedFileContent)}get isImage(){return this.mimeType.startsWith("image")}get isVideo(){return this.mimeType.startsWith("video")}get isAudio(){return this.mimeType.startsWith("audio")}use(e){return this._storage=se.use(e),this}resize(e,t){return this._imageOptions.resize={width:e,height:t},this}quality(e){if(e<1||e>100)throw new Error("Quality must be between 1 and 100");return this._imageOptions.quality=e,this}format(e){return this._imageOptions.format=e,this}rotate(e){return this._imageOptions.rotate=e,this}blur(e=3){if(e<.3)throw new Error("Blur sigma must be at least 0.3");return this._imageOptions.blur=e,this}grayscale(){return this._imageOptions.grayscale=true,this}transform(e){return this._transformConfig=e,this}async toImage(){return new Ce(await this.buffer())}async dimensions(){return this.isImage?new Ce(await this.buffer()).dimensions():{}}async validate(e){let{allowedMimeTypes:t,allowedExtensions:r,maxSize:i}=e;if(t&&!t.includes(this.mimeType))throw new Error(`Invalid file type: ${this.mimeType}. Allowed types: ${t.join(", ")}`);if(r&&!r.includes(this.extension))throw new Error(`Invalid file extension: ${this.extension}. Allowed extensions: ${r.join(", ")}`);if(i){let s=await this.size();if(s>i)throw new Error(`File too large: ${s} bytes. Maximum allowed: ${i} bytes`)}}async save(e,t){t?.validate&&await this.validate(t.validate);let r=this.resolveFilename(t),i=this.resolvePrefix(t?.prefix),s=this.buildLocation(e,i,r);return this.saveToLocation(s,t?.driver)}async saveAs(e,t){return t?.validate&&await this.validate(t.validate),this.saveToLocation(e,t?.driver)}get storageFile(){return this._storageFile}async saveToLocation(e,t){let r=await this.getProcessedContent(),i=this.resolveStorage(t),s=this.adjustLocationForFormat(e);this._storageFile=await i.put(r,s,{mimeType:this.getFinalMimeType()});let a=await this._storageFile.data();return this.hash=a.hash||"",this._storageFile}async getProcessedContent(){let e=await this.buffer();if(!this.isImage||!this.hasTransforms())return e;let t=new Ce(e);return typeof this._transformConfig=="function"?t=this._transformConfig(t):this._transformConfig&&(t=t.apply(this._transformConfig)),t=this.applyImageOptions(t),t.toBuffer()}applyImageOptions(e){let t=this._imageOptions;return t.resize&&(e=e.resize({width:t.resize.width,height:t.resize.height})),t.rotate!==void 0&&(e=e.rotate(t.rotate)),t.blur!==void 0&&(e=e.blur(t.blur)),t.grayscale&&(e=e.grayscale()),t.quality!==void 0&&(e=e.quality(t.quality)),t.format&&(e=e.format(t.format)),e}hasTransforms(){return this._transformConfig!==void 0||Object.keys(this._imageOptions).length>0}resolveStorage(e){return e?se.use(e):this._storage||se}resolveFilename(e){let t=e?.name??$e("name")??"random",r;if(t==="original")r=X.basename(this.name,X.extname(this.name));else if(t==="random"){let s=$e("randomLength");r=Random.string(s);}else r=X.basename(t,X.extname(t));let i=this.getFinalExtension();return `${r}.${i}`}resolvePrefix(e){if(e===false||e===void 0){let s=$e("prefix");if(!s)return "";e=s;}if(e===true){let s=$e("defaultPrefixFormat");return this.formatDatePrefix(s,"file")}if(typeof e=="string")return e;let t=[];e.format&&t.push(this.formatDate(e.format)),e.randomLength&&t.push(Random.string(e.randomLength));let r=t.join("-");return (e.as??"file")==="directory"?r?`${r}/`:"":r?`${r}-`:""}formatDatePrefix(e,t){let r=this.formatDate(e);return t==="directory"?`${r}/`:`${r}-`}formatDate(e){return os().format(e)}buildLocation(e,t,r){let i=e.replace(/\/$/,"");return t.endsWith("/")?`${i}/${t}${r}`:`${i}/${t}${r}`}getFinalExtension(){if(this._imageOptions.format){let e=this._imageOptions.format;return e==="jpeg"?"jpg":e}return this.extension}getFinalMimeType(){if(this._imageOptions.format){let e=this._imageOptions.format;return e==="jpeg"||e==="jpg"?"image/jpeg":`image/${e}`}return this.mimeType}adjustLocationForFormat(e){if(!this._imageOptions.format)return e;let t=this.getFinalExtension(),r=X.extname(e);return r?e.replace(r,`.${t}`):`${e}.${t}`}async toJSON(){return {name:this.name,mimeType:this.mimeType,extension:this.extension,size:await this.size(),isImage:this.isImage,isVideo:this.isVideo,isAudio:this.isAudio,dimensions:this.isImage?await this.dimensions():void 0,base64:(await this.buffer()).toString("base64")}}};var Oe=class{baseRequest;response;route;payload={};user;decodedAccessToken;static current;trans=trans;t=trans;_locale="";validatedData;id=Random.string(32);setRequest(e){this.baseRequest=e,this.parsePayload();let t=this.getLocaleCode();return this.trans=this.t=transFrom.bind(null,t),this}transFrom(e,t,r){return transFrom(e,t,r)}get locale(){return this._locale?this._locale:this.header("translation-locale-code")||this.localized}set locale(e){this._locale=e;}get localized(){return this._locale?this._locale:this._locale=this.header("locale-code")||this.header("locale")||this.query.locale||this.query["locale-code"]}setLocaleCode(e){return this._locale=e,this}getLocaleCode(e=re.key("app.localeCode")||"en"){return this.locale||e}get protocol(){return this.baseRequest.protocol}async validate(e,t){return await v.validate(e,t?this.only(t):this.all())}clearCurrentUser(){this.user=void 0;}header(e,t=null){return this.baseRequest.headers[e.toLocaleLowerCase()]??t}get domain(){return this.baseRequest.hostname.replace(/^www\./,"")}get hostname(){return this.domain}get origin(){return this.baseRequest.headers.origin}get originDomain(){let e=this.origin?new URL(this.origin).hostname:null;return e?.startsWith("www.")?e.replace(/^www\./,""):e}get authorizationValue(){let e=this.header("authorization");if(!e)return "";let[t,r]=e.split(" ");return ["bearer","key"].includes(t.toLowerCase())&&r||""}get accessToken(){let e=this.header("authorization");if(!e)return;let[t,r]=e.split(" ");if(t.toLowerCase()==="bearer")return r}get authorization(){return this.header("authorization")}get method(){return this.baseRequest.method}parsePayload(){this.payload.body=this.parseBody(this.baseRequest.body),this.payload.query=this.parseBody(this.baseRequest.query),this.payload.params={...this.baseRequest.params||{}},this.payload.all={...this.payload.body,...this.payload.query,...this.payload.params};}parseBody(e){try{if(!e)return {};let t={},r={};for(let i in e){let s=e[i],a=!1;if(i.endsWith("[]")&&(a=!0),i=rtrim(i,"[]"),i.includes("[")){if(i.includes("][")){let p=i.split("["),u=p[0];r[u]||(r[u]=[]);let d=p[1].split("]"),y=Number(d[0]);r[u][y]||(r[u][y]={});let v=p[2].split("]")[0];r[u][y][v]=this.parseValue(s);continue}let o=i.split("["),l=o[0],c=o[1].split("]");set(t,l+"."+c[0],Array.isArray(s)?s.map(this.parseValue.bind(this)):this.parseValue(s));continue}if(Array.isArray(s))set(t,i,s.map(this.parseValue.bind(this)));else if(a)if(t[i])t[i].push(this.parseValue(s));else {t[i]=[this.parseValue(s)];continue}else set(t,i,this.parseValue(s));}for(let i in r)t[i]=r[i];return t}catch(t){console.log(t),this.log(t,"error");}}parseValue(e){return e?.file?new gt(e):(e?.value!==void 0&&e?.fields&&e?.type&&(e=e.value),e==="false"?false:e==="true"?true:e==="null"?null:typeof e=="string"?e.trim():e)}setRoute(e){return this.route=e,this.response.setRoute(e),this}trigger(e,...t){return Jt.trigger(`request.${e}`,...t,this)}on(e,t){return this.subscribe(e,t)}log(e,t="info"){re.key("http.log")&&log({module:"request",action:this.route.method+" "+this.route.path.replace("/*","")+`:${this.id}`,message:e,type:t,context:{request:this}});}get path(){return this.baseRequest.url}get url(){return this.baseRequest.url}get fullUrl(){return this.protocol+"://"+this.hostname+this.path}async runMiddleware(){let e=await this.executeMiddleware();if(e!==void 0)return e instanceof we?e:this.response.send(e);let t=this.route.handler;return t.validation?await oi(t.validation,this,this.response):void 0}getHandler(){return this.route.handler}validated(e){return this.validatedData?e?only(this.validatedData,e):this.validatedData:{}}validatedExcept(...e){return except(this.validated(),e)}setValidatedData(e){this.validatedData=e;}async execute(){try{return this.log("Executing the request"),await li(this,this.response)}catch(e){throw this.log(e,"error"),e}}async executeMiddleware(){let e=this.collectMiddlewares();if(e.length!==0){this.log("About to execute request middlewares"),this.trigger("executingMiddleware",e,this.route);for(let t of e){this.log("Executing middleware "+colors.yellowBright(t.name));let r=await t(this,this.response);if(this.log("Executed middleware "+colors.yellowBright(t.name),"success"),r!==void 0)return this.log(colors.yellow("request intercepted by middleware ")+colors.cyanBright(t.name),"warn"),this.trigger("executedMiddleware"),this.log("Request middlewares executed","success"),r}this.log("Request middlewares executed","success"),this.trigger("executedMiddleware",e,this.route);}}collectMiddlewares(){let e=[];return this.route.middleware&&e.push(...this.route.middleware),e}input(e,t){return get(this.payload.all,e,t)}email(e="email",t=""){return this.input(e,t)?.toLowerCase()||t}get(e,t){return this.input(e,t)}has(e){return get(this.payload.all,e,void 0)!==void 0}set(e,t){return set(this.payload.all,e,t),this}setDefault(e,t){return this.has(e)?this:(set(this.payload.all,e,t),this)}unset(...e){return this.payload.all=unset(this.payload.all,e),this}get body(){return this.payload.body}setBody(e,t){return set(this.payload.body,e,t),this}get bodyInputs(){let e=this.payload.body,t={};for(let r in e){let i=e[r];i.file&&i.fieldname||(t[r]=i);}return t}file(e){return this.input(e)}files(e){return this.input(e)||[]}get params(){return this.payload.params}setParam(e,t){return set(this.payload.params,e,t),this}get query(){return this.payload.query}setQuery(e,t){return set(this.payload.query,e,t),this}all(){return this.payload.all}allExceptParams(){return {...this.payload.query,...this.payload.body}}heavyExceptParams(){let e=this.allExceptParams(),t={};for(let r in e){let i=e[r];isEmpty(i)&&i!==null||(t[r]=i);}return t}heavy(){let e=this.all(),t={};for(let r in e){let i=e[r];isEmpty(i)&&i!==null||(t[r]=i);}return t}only(e){return only(this.all(),e)}pluck(e){let t=this.only(e);return this.unset(...e),t}except(e){return except(this.all(),e)}bool(e,t=false){let r=this.input(e,t);return r==="true"?true:r==="false"||r===0?false:!!r}int(e,t=0){let r=this.input(e,t);return parseInt(r)}get idParam(){return this.int("id")}string(e,t=""){let r=this.input(e,t);return String(r)}float(e,t=0){let r=this.input(e,t);return parseFloat(r)||0}number(e,t=0){let r=Number(this.input(e,t));return isNaN(r)?t:r}get ip(){return this.baseRequest.ip}detectIp(){let e=this.header("x-real-ip");return e||this.header("x-forwarded-for")||this.baseRequest.ip}get realIp(){return this.detectIp()}get ips(){return this.baseRequest.ips}get referer(){return this.baseRequest.headers.referer}get userAgent(){return this.baseRequest.headers["user-agent"]}get headers(){return this.baseRequest.headers}};var yt=class{router;constructor(){this.router=yo({ignoreTrailingSlash:true,caseSensitive:false});}register(e){for(let t of e)t.method==="all"?(this.registerRoute({...t,method:"GET"}),this.registerRoute({...t,method:"POST"})):this.registerRoute(t);}registerRoute(e){this.router.on(e.method,e.path,(t,r,i)=>({route:e,params:i}));}find(e,t){let r=t.split("?")[0],i=this.router.find(e,r);return i?i.handler(null,null,i.params,i.store,{}):null}getRouteCount(){return this.router.prettyPrint().split(`
|
|
71
|
+
`).filter(e=>e.trim()).length}};var dr=class n{routes=[];static instance;staticDirectories=[];eventListeners={};stacks={prefix:[],name:[],middleware:[]};static getInstance(){return n.instance||(n.instance=new n),n.instance}constructor(){}beforeScanning(e){return this.eventListeners.beforeScan=[...this.eventListeners.beforeScan||[],e],this}afterScanning(e){return this.eventListeners.afterScanning=[...this.eventListeners.afterScanning||[],e],this}redirect(e,t,r="temporary"){return this.get(e,(i,s)=>{s.redirect(t,r==="temporary"?302:301);})}directory(e){return this.staticDirectories.push(e),this}file(e,t,r){return this.get(e,(i,s)=>{s.sendFile(t,r);})}cachedFile(e,t,r){return this.get(e,(i,s)=>{s.sendCachedFile(t,r);})}files(e,t){for(let[r,i]of Object.entries(e))this.get(r,(s,a)=>{a.sendFile(i,t);});}cachedFiles(e,t){for(let[r,i]of Object.entries(e))this.get(r,(s,a)=>{a.sendCachedFile(i,t);});}proxy(e){return this.beforeScanning((t,r)=>{r.register(bo,e);}),this}add(e,t,r,i={}){if(Array.isArray(t))return t.forEach(c=>this.add(e,c,r,i)),this;let s=this.stacks.prefix.reduce((c,p)=>ki(c,p),""),a=this.stacks.name.reduceRight((c,p)=>trim(p+"."+c,"."),i.name||trim(t.replace(/\//g,"."),"."));if(t=ki(s,t),(i.middlewarePrecedence||"after")==="before"?i.middleware=[...i.middleware||[],...this.stacks.middleware]:i.middleware=[...this.stacks.middleware,...i.middleware||[]],Array.isArray(r)){let[c,p]=r;if(typeof c[p]!="function")throw new Error(`Invalid controller action "${p}" for controller "${c.constructor.name}"`);r=c[p].bind(c),r.validation||(r.validation={},c[`${p}ValidationSchema`]&&(r.validation.schema=c[`${p}ValidationSchema`]()),c[`${p}Validate`]&&(r.validation.validate=c[`${p}Validate`]));}let l={method:e,path:t,handler:r,...i,name:a,rateLimit:i.rateLimit,$prefix:s||"/",$prefixStack:[...this.stacks.prefix],sourceFile:this.stacks.sourceFile||""};if(l.name){let c=this.routes.find(p=>p.name===l.name);if(c){if(c.method===l.method)throw new Error(`Route name "${l.name}" already exists`);l.name+=`.${l.method.toLowerCase()}`;}}return this.routes.push(l),this}any(e,t,r={}){return this.add("all",e,t,r)}get(e,t,r={}){return this.add("GET",e,t,r)}post(e,t,r={}){return this.add("POST",e,t,r)}put(e,t,r={}){return this.add("PUT",e,t,r)}delete(e,t,r={}){return this.add("DELETE",e,t,r)}patch(e,t,r={}){return this.add("PATCH",e,t,r)}head(e,t,r={}){return this.add("HEAD",e,t,r)}options(e,t,r={}){return this.add("OPTIONS",e,t,r)}restfulResource(e,t,r={}){return this.prefix(e,()=>{e="";let i=r.name||toCamelCase(ltrim(e,"/")),s=t,a=o=>!!((!r.except||!r.except.includes(o))&&(!r.only||r.only.includes(o)));if(s.list&&a("list")){let o=i+".list";this.get(e,r.replace?.list||s.list.bind(s),{...r,name:o,restful:true});}if(s.get&&a("get")){let o=i+".single";this.get(e+"/:id",r.replace?.get||s.get.bind(s),{...r,name:o,restful:true});}if(s.create&&a("create")){let o=i+".create",l=r.replace?.create||this.manageValidation(s,"create");this.post(e,l,{...r,name:o,restful:true});}if(s.update&&a("update")){let o=i+".update",l=r.replace?.update||this.manageValidation(s,"update");this.put(e+"/:id",l,{...r,name:o,restful:true});}if(s.patch&&a("patch")){let o=i+".patch",l=r.replace?.patch||this.manageValidation(s,"patch");this.patch(e+"/:id",l,{...r,name:o,restful:true});}if(s.delete&&a("delete")){let o=i+".delete";this.delete(e+"/:id",r.replace?.delete||s.delete.bind(s),{...r,name:o,restful:true});}if(s.bulkDelete&&a("delete")){let o=i+".bulkDelete";this.delete(e,r.replace?.bulkDelete||s.bulkDelete.bind(s),{...r,name:o,restful:true});}return this})}group(e,t){let{prefix:r,name:i=r?trim(r.replace(/\//g,"."),"."):void 0,middleware:s}=e;return r&&this.stacks.prefix.push(r),i&&this.stacks.name.push(i),s&&this.stacks.middleware.push(...s),t(),r&&this.stacks.prefix.pop(),i&&this.stacks.name.pop(),s&&this.stacks.middleware.splice(this.stacks.middleware.length-s.length,s.length),this}prefix(e,t){return this.group({prefix:e},t)}async withSourceFile(e,t){this.stacks.sourceFile=e;try{return await t()}catch(r){console.log("Error in withSourceFile",r);}finally{delete this.stacks.sourceFile;}}removeRoutesBySourceFile(e){this.routes=this.routes.filter(t=>t.sourceFile!==e);}manageValidation(e,t){let r=e[t]?.bind(e),i=e?.validation?.[t];if(t==="patch")return r.validation=i,r.validation?.validate&&(r.validation.validate=r.validation.validate.bind(e)),e.validation?.patch&&(r.validation=merge(e.validation.patch,r.validation)),r;if(!e.validation||!i&&!e.validation.all)return r;if(e.validation.all){let s={all:e?.validation?.all?.validate,[t]:i?.validate},a={};(e.validation.all.schema||i?.schema)&&(!i?.schema&&e.validation.all.schema?a.schema=e.validation.all.schema:i?.schema&&e.validation.all.schema?a.schema=e.validation.all.schema.merge(i.schema):i?.schema&&!e.validation.all.schema&&(a.schema=i.schema)),(s.all||s[t])&&(a.validate=async(o,l)=>{if(s.all){let c=await s.all.call(e,o,l);if(c)return c}if(s[t])return await s[t]?.call(e,o,l)}),isEmpty(a)||(r.validation=a);}else r.validation=e.validation[t],r.validation?.validate&&(r.validation.validate=r.validation.validate.bind(e));return r}list(){return this.routes}scan(e){this.eventListeners.beforeScan?.forEach(t=>t(this,e)),this.routes.forEach(t=>{let r=t.method.toLowerCase(),i=e[r].bind(e),s={...t.serverOptions,config:{...t.serverOptions?.config,...t.rateLimit&&{rateLimit:t.rateLimit}}};i(t.path,s,async(a,o)=>{let{output:l,response:c}=await this.handleRoute(t)(a,o);return l||c.baseResponse});});for(let t of this.staticDirectories)e.register(Di,{...t,decorateReply:false});this.eventListeners.afterScanning?.forEach(t=>t(this,e));}scanDevServer(e){this.eventListeners.beforeScan?.forEach(i=>i(this,e));let t=async(i,s)=>{let a=new yt;a.register(this.routes);let o=a.find(i.method,i.url);if(!o)return s.code(404).send({error:"Route not found",path:i.url,method:i.method});i.params=o.params;try{let{output:l,response:c}=await this.handleRoute(o.route)(i,s);return l||c.baseResponse}catch(l){throw console.log(l),l}},r=["GET","POST","PUT","DELETE","PATCH"];for(let i of r)e.route({method:i,url:"*",handler:t});for(let i of this.staticDirectories)e.register(Di,{...i,decorateReply:false});this.eventListeners.afterScanning?.forEach(i=>i(this,e));}route(e,t={}){let r=this.routes.find(s=>s.name===e);if(!r)throw new Error(`Route name "${e}" not found`);let i=r.path;return r.path.includes(":")&&Object.keys(t).forEach(s=>{i=i.replace(":"+s,t[s]);}),i}handleRoute(e){return async(t,r)=>{let i=new Oe,s=new we;return s.setResponse(r),i.response=s,s.request=i,i.setRequest(t).setRoute(e),Oe.current=i,log.info({module:"route",action:e.method+" "+e.path.replace("/*",""),message:`Starting Request: ${i.id}`,context:{request:i,response:s}}),{output:await i.execute(),response:s,request:i}}}},ge=dr.getInstance();var bt=class{constructor(e){this.specialFilesCollector=e;}loadedModules=new Map;async loadAll(){await this.loadLocaleFiles(),await this.loadEventFiles(),await this.loadMainFiles(),await this.loadRouteFiles();}async loadMainFiles(){let e=this.specialFilesCollector.getMainFiles();if(e.length!==0)for(let t of e)await this.loadModule(t,"main");}async loadLocaleFiles(){let e=this.specialFilesCollector.getLocaleFiles();if(e.length!==0)for(let t of e)await this.loadModule(t,"locale");}async loadEventFiles(){let e=this.specialFilesCollector.getEventFiles();if(e.length!==0)for(let t of e)await this.loadModule(t,"event");}async loadRouteFiles(){let e=this.specialFilesCollector.getRouteFiles();if(e.length!==0)for(let t of e)await this.loadModule(t,"route");}async loadModule(e,t,r=false){if(!e.relativePath.endsWith(".env"))try{if(t==="route")return await ge.withSourceFile(e.relativePath,async()=>{let i=typeof __import<"u"?await __import(e.cachePath):await import(e.cachePathUrl);return this.loadedModules.set(e.absolutePath,i),i?.cleanup&&(e.cleanup=i.cleanup),i});{let i=typeof __import<"u"?await __import(e.cachePath):await import(e.cachePathUrl);return this.loadedModules.set(e.absolutePath,i),i?.cleanup&&(e.cleanup=i.cleanup),i}}catch(i){console.log(i),i.code==="ERR_MODULE_NOT_FOUND"?q(Lt(i)):q(`Failed to load ${t}: ${e.relativePath} - ${i?.message||i}`);}}cleanupFileModule(e){let t=r=>{(r?.unsubscribe||r)();};e.cleanup&&(Array.isArray(e.cleanup)?e.cleanup.forEach(r=>t(r)):t(e.cleanup));}async reloadModule(e){let t=this.specialFilesCollector.getFileType(e.relativePath);if(this.cleanupFileModule(e),!!t)try{t==="route"&&ge.removeRoutesBySourceFile(e.relativePath),this.clearModuleCache(e.absolutePath),__clearModuleVersion(e.cachePath),te.clearCache(e.relativePath),await this.loadModule(e,t,!0);}catch(r){throw r.code==="ERR_MODULE_NOT_FOUND"?q(Lt(r)):q(`Failed to reload module: ${r.message||r}`),r}}clearModuleCache(e){this.loadedModules.delete(e);}cleanupDeletedModule(e){this.clearModuleCache(e.absolutePath),__clearModuleVersion(e.cachePath),te.clearCache(e.relativePath),e.type==="route"&&ge.removeRoutesBySourceFile(e.relativePath),this.cleanupFileModule(e);}clearModuleCacheMultiple(e){for(let t of e)this.clearModuleCache(t);}clearAllModuleCache(){for(let e of this.loadedModules.keys())this.clearModuleCache(e);}getLoadedModule(e){return this.loadedModules.get(e)}isModuleLoaded(e){return this.loadedModules.has(e)}getLoadedModulePaths(){return Array.from(this.loadedModules.keys())}getStats(){return {totalLoaded:this.loadedModules.size,mainFiles:this.specialFilesCollector.getMainFiles().length,routeFiles:this.specialFilesCollector.getRouteFiles().length,eventFiles:this.specialFilesCollector.getEventFiles().length,localeFiles:this.specialFilesCollector.getLocaleFiles().length}}};var mr=class{packageJson={};async init(){this.packageJson=await getJsonFileAsync(m.toAbsolute("package.json"));}isPathPackage(e){return Object.keys(this.packageJson.dependencies||{}).concat(Object.keys(this.packageJson.devDependencies||{})).some(r=>e.startsWith(r))}},Ti=new mr;var Pe=new Map,Ae=new Set,Se=new Map;function hr(n){return n.startsWith("./")?n.slice(2):n}function Mo(n){let e=hr(n);return Pe.has(e)||Pe.set(e,Date.now()),Pe.get(e)}async function Ro(n){let e=hr(n);if(Ae.has(e)){let o=Se.get(e);if(o)return o;throw new Error(`Circular dependency detected: Module "${e}" is being loaded but no promise is cached. This may indicate a timing issue in module loading.`)}let t=Mo(n),r=W(e),a=import(`${pathToFileURL(r).href}?t=${t}`);Se.set(e,a),Ae.add(e);try{let o=await a;if(o){let l=Array.from(f.files.values()).find(c=>c.cachePath===e);if(l)if(o.cleanup)l.cleanup=o.cleanup;else {let c=[];for(let p of Object.values(o)){let u=p?.$cleanup;u&&c.push(u.bind(p));}c.length>0&&(l.cleanup=c);}}return o}catch(o){throw console.log("Error while importing",o),Se.delete(e),o}finally{Ae.delete(e);}}function Eo(n){let e=hr(n);Pe.delete(e),Ae.has(e)||Se.delete(e);}function Do(){Pe.clear();for(let[n]of Se)Ae.has(n)||Se.delete(n);}function ko(n){return Pe.get(n)}function $i(){global.__import=Ro,global.__clearModuleVersion=Eo,global.__clearAllModuleVersions=Do,global.__getModuleVersion=ko;}var vt=class{configFiles=new Map;mainFiles=new Map;routeFiles=new Map;eventFiles=new Map;localeFiles=new Map;collect(e){this.configFiles.clear(),this.mainFiles.clear(),this.routeFiles.clear(),this.eventFiles.clear(),this.localeFiles.clear();for(let[t,r]of e)this.categorizeFile(t,r);}categorizeFile(e,t){if(this.isConfigFile(e)){this.configFiles.set(e,t);return}if(this.isMainFile(e)){this.mainFiles.set(e,t);return}if(this.isRouteFile(e)){this.routeFiles.set(e,t);return}if(this.isEventFile(e)){this.eventFiles.set(e,t);return}if(this.isLocaleFile(e)){this.localeFiles.set(e,t);return}}isConfigFile(e){return /^src\/config\/.*\.(ts|tsx)$/.test(e)}isMainFile(e){return /^src\/app\/[^/]+\/main\.(ts|tsx)$/.test(e)||["src/app/main.ts","src/app/main.tsx"].includes(e)}isRouteFile(e){return /^src\/app\/[^/]+\/routes\.(ts|tsx)$/.test(e)}isEventFile(e){return /^src\/app\/[^/]+\/events\/[^/]+\.(ts|tsx)$/.test(e)}isLocaleFile(e){return /^src\/app\/[^/]+\/utils\/locales\.(ts|tsx)$/.test(e)}addFile(e){let t=e.relativePath;this.categorizeFile(t,e);}removeFile(e){this.configFiles.delete(e),this.mainFiles.delete(e),this.routeFiles.delete(e),this.eventFiles.delete(e),this.localeFiles.delete(e);}updateFile(e){let t=e.relativePath;this.removeFile(t),this.categorizeFile(t,e);}getConfigFiles(){return Array.from(this.configFiles.values())}getMainFiles(){return Array.from(this.mainFiles.values())}getRouteFiles(){return Array.from(this.routeFiles.values()).sort((t,r)=>{let i=t.relativePath,s=r.relativePath;return i.localeCompare(s)})}getEventFiles(){return Array.from(this.eventFiles.values())}getLocaleFiles(){return Array.from(this.localeFiles.values())}getStats(){return {config:this.configFiles.size,main:this.mainFiles.size,route:this.routeFiles.size,event:this.eventFiles.size,locale:this.localeFiles.size}}getFileType(e){return this.configFiles.has(e)?"config":this.mainFiles.has(e)?"main":this.routeFiles.has(e)?"route":this.eventFiles.has(e)?"event":this.localeFiles.has(e)?"locale":null}clear(){this.configFiles.clear(),this.mainFiles.clear(),this.routeFiles.clear(),this.eventFiles.clear(),this.localeFiles.clear();}};var fr=class{filesWatcher=new Ke;files=new Map;manifest=new Qe(this.files);dependencyGraph=new He;healthCheckerManager=new Ze(this.files);fileOperations;eventHandler;specialFilesCollector=new vt;moduleLoader=new bt(this.specialFilesCollector);constructor(){this.fileOperations=new Ve(this.files,this.dependencyGraph,this.manifest,this.specialFilesCollector),this.eventHandler=new We(this.fileOperations,this.manifest,this.dependencyGraph,this.files);}async add(e){return this.fileOperations.addFile(e)}async load(e,t="other"){let r=await this.add(e);return this.moduleLoader.loadModule(r,r.type||t)}getDependencyGraph(){return this.dependencyGraph}getInvalidationChain(e){return this.dependencyGraph.getInvalidationChain(e)}getFiles(){return this.files}getHealthCheckerManager(){return this.healthCheckerManager}async init(){await init,await Promise.all([D.init(),Ti.init()]),$i();}async initiaizeAll(){let[e,t]=await Promise.all([this.getAllFilesFromFilesystem(),this.manifest.init()]);t?await this.reconcileFiles(e):await this.processAllFilesFresh(e),this.dependencyGraph.build(this.files),this.updateFileDependents(),this.syncFilesToManifest(),await this.manifest.save();}async checkHealth(e){let t=e.added.concat(e.changed).map(i=>this.files.get(m.toRelative(i))).filter(i=>!!i),r=e.deleted.map(i=>this.files.get(m.toRelative(i))).filter(i=>!!i);await this.healthCheckerManager.onFileChanges(t),this.healthCheckerManager.removeFiles(r),this.healthCheckerManager.checkFiles(t);}async startCheckingHealth(){Be("Started File Health Checks in the background.");let e=new Ye,t=new Je;await this.healthCheckerManager.setHealthCheckers([e,t]).initialize(),await this.healthCheckerManager.validateAllFiles();}async getAllFilesFromFilesystem(){return (await O()).map(t=>m.toRelative(t))}async processAllFilesFresh(e){Be(`processing ${e.length} files...`),await Xr();let t=ye;for(let r=0;r<e.length;r+=t){let i=e.slice(r,r+t);await Promise.all(i.map(async s=>{let a=m.toAbsolute(s),o=new Q(a,this.files,this.fileOperations);this.files.set(s,o),await o.process();}));}z(`processed ${e.length} files`);}async reconcileFiles(e){let t=new Set(this.manifest.getAllFilePaths()),r=new Set(e),i=e.filter(o=>!t.has(o)),s=Array.from(t).filter(o=>!r.has(o)),a=e.filter(o=>t.has(o));if(i.length>0||s.length>0){let o=i.length>0?colors.green(i.length):0,l=s.length>0?colors.red(s.length):0,c=a.length>0?colors.blue(a.length):0;Be(`reconciling: ${o} new, ${l} deleted, ${c} existing`);}await this.processNewFiles(i),await this.processDeletedFiles(s),await this.processExistingFiles(a);}async processNewFiles(e){if(e.length===0)return;let t=ye;for(let r=0;r<e.length;r+=t){let i=e.slice(r,r+t);await Promise.all(i.map(async s=>{let a=m.toAbsolute(s),o=new Q(a,this.files,this.fileOperations);this.files.set(s,o),await o.process();}));}}async processDeletedFiles(e){if(e.length!==0)for(let t of e){let r=this.manifest.getFile(t);if(r)try{await unlinkAsync(W(r.cachePath));}catch{}this.manifest.removeFile(t),this.files.delete(t);}}async processExistingFiles(e){if(e.length===0)return;let t=ye;for(let r=0;r<e.length;r+=t){let i=e.slice(r,r+t);await Promise.all(i.map(async s=>{let a=this.manifest.getFile(s),o=m.toAbsolute(s),l=new Q(o,this.files,this.fileOperations);this.files.set(s,l),await l.init(a);}));}}updateFileDependents(){for(let[e,t]of this.files){let r=this.dependencyGraph.getDependents(e);t.dependents=r;}}syncFilesToManifest(){for(let[e,t]of this.files)this.manifest.setFile(e,t.toManifest());}async watchFiles(){z("watching for file changes"),this.filesWatcher.onFileChange(t=>{this.eventHandler.handleFileChange(t);}),this.filesWatcher.onFileAdd(t=>{this.eventHandler.handleFileAdd(t);}),this.filesWatcher.onFileDelete(t=>{this.eventHandler.handleFileDelete(t);});let e=V.get("devServer")?.watch;await this.filesWatcher.watch(e);}},f=new fr;var wt=class{async loadAll(e){if(e.length!==0)for(let t of e)await this.loadConfig(t);}async loadConfig(e,t=false){let r=this.getConfigName(e.relativePath);try{let i=typeof __import<"u"?e.cachePath:pathToFileURL(W(e.cachePath)).href;if(t&&typeof __import>"u"){let o=Date.now();i+=`?t=${o}`;}let a=(typeof __import<"u"?await __import(i):await import(i)).default;if(a===void 0){console.log(colors.red("config error: "),`Config file ${colors.yellow(e.relativePath)} does not have a default export`);return}Ft.set(r,a),await xe.execute(r,a);}catch(i){throw i}}async reloadConfig(e){await this.loadConfig(e,true);}getConfigName(e){let t=e.match(/^src\/config\/(.+)\.(ts|tsx)$/);if(!t)throw new Error(`Invalid config file path: ${e}`);return t[1]}};var yr=class{loader=new wt;constructor(){}async loadAll(e){return this.loader.loadAll(e)}async reload(e){return this.loader.reloadConfig(e)}},Ie=new yr;async function Ai(n){let e=[];n===true?e=(await O(k("config"))).map(i=>m.toRelative(i)):e=(await ei(k("config"),n)).map(i=>m.toRelative(i));let t=await Promise.all(e.map(r=>f.add(r)));f.specialFilesCollector.collect(f.files),await Ie.loadAll(t);}var Y=class{active=false;isActive(){return this.active}async restart(){await this.shutdown(),await this.start();}shouldRestart(e){return e.some(t=>this.isWatchedFile(t))}isWatchedFile(e){let t=m.toRelative(e);return this.watchedFiles.some(r=>r===t?true:r.includes("*")?new RegExp("^"+r.replace(/\*/g,".*")+"$").test(t):false)}};var Ct=class extends Y{name="cache";priority=2;watchedFiles=[".env","src/config/cache.ts","src/config/cache.tsx"];async start(){let e=Ft.get("cache");e&&(cache.setCacheConfigurations(e),await cache.init(),this.active=true);}async shutdown(){this.active&&(this.active=false);}};var xt=class extends Y{name="database";priority=1;watchedFiles=[".env","src/config/database.ts","src/config/database.tsx"];async start(){let e=Ft.get("database");if(e)try{await connectToDatabase(e),this.active=!0;}catch(t){throw console.error("Failed to connect to database:",t),t}}async shutdown(){if(this.active)try{let e=dataSourceRegistry.getAllDataSources();for(let t of e)t.driver.isConnected&&await t.driver.disconnect();this.active=!1;}catch(e){throw console.error("Failed to disconnect from database:",e),e}}};var jo={origin:"*",methods:"*"};async function Ni(n){n.register(import('@fastify/rate-limit'),{max:Ft.get("http.rateLimit.max",60),timeWindow:Ft.get("http.rateLimit.duration",60*1e3)});let e={...Ft.get("http.cors",{}),...jo};n.register(import('@fastify/cors'),e),n.register(Bo,{attachFieldsToBody:true,limits:{fileSize:Ft.get("http.fileUploadLimit",10*1024*1024)}}),n.register(import('@fastify/static'),{root:I("public"),prefix:"/public/"});}var Li;function _i(){return Li=Ho({trustProxy:true,bodyLimit:200*1024*1024*1024})}function Bi(){return Li}var Pt=class extends Y{name="http";priority=3;watchedFiles=["src/config/http.ts","src/config/http.tsx"];async start(){let e=Ft.get("http");if(!e)return;let t=e.port;ee("Starting http server on port "+t);let r=_i();await Ni(r),je()==="development"?ge.scanDevServer(r):ge.scan(r);try{await r.listen({port:t,host:e.host||"localhost"});let i=Ft.get("app.baseUrl");Wr(i),z(`Server is listening on ${i}`);}catch(i){q("Error while starting http server",i),process.exit(1);}this.active=true;}async shutdown(){if(!this.active)return;Bi()?.close(),this.active=false;}shouldRestart(e){return e.some(t=>{let r=t.replace(/\\/g,"/");return r==="src/config/http.ts"||r==="src/config/http.tsx"})}};var St=class extends Y{name="storage";priority=4;watchedFiles=[".env","src/config/storage.ts","src/config/storage.tsx"];async start(){await se.init(),this.active=true;}async shutdown(){this.active&&(se.reset(),this.active=false);}};var vr=class{connectors=[];constructor(){this.register(new Pt),this.register(new xt),this.register(new Ct),this.register(new St);}register(e){this.connectors.push(e),this.connectors.sort((t,r)=>t.priority-r.priority);}list(){return this.connectors}async start(e){for(let t of this.connectors)e&&!e.includes(t.name)||await t.start();}async shutdown(){for(let e of this.connectors)try{await e.shutdown();}catch(t){U(colors.redBright(`\u274C Failed to shutdown ${e.name}: ${t}`));}}shutdownOnProcessKill(){let e=false,t=async r=>{e||(e=true,console.log(`
|
|
72
|
+
Exiting...`),await this.shutdown(),process.exit(0));};process.on("SIGINT",()=>t()),process.on("SIGTERM",()=>t()),process.platform==="win32"&&process.on("SIGHUP",()=>t());}},Me=new vr;var wr=class{_commandsJson;_hasChanges=false;_isLoaded=false;get hasChanges(){return this._hasChanges}get isCommandLoaded(){return this._isLoaded}async loadCommands(){if(this._isLoaded)return this._commandsJson;try{return this._commandsJson=await getJsonFileAsync(E("commands.json")),this._isLoaded=!0,this._commandsJson}catch{return}}get commandsJson(){return this._commandsJson}async saveCommands(){await putJsonFileAsync(E("commands.json"),this._commandsJson),this._isLoaded=true,this._hasChanges=false;}addCommandToList(e,t){this._commandsJson||(this._commandsJson={commands:{}}),this._commandsJson.commands[e]=t,this._hasChanges=true;}clearCommandsCache(){this._commandsJson=void 0,this._hasChanges=false,this._isLoaded=false;}async removeCommandsFile(){try{await unlinkAsync(E("commands.json"));}catch{}}},L=new wr;function Mt(n,e){return n.split(" ")[0]===e}var Cr=null;async function xr(){if(Cr)return Cr;let e=(await getJsonFileAsync(X.join(import.meta.dirname,"./../../package.json"))).version.replace(/\^|\~/g,"");return Cr=e,e}async function Hi(){let n=await xr();console.log(`\u26A1 ${colors.bold("Warlock.js")} ${colors.greenBright(`v${n}`)}`);}function Go(n){switch(n){case "development":return colors.yellowBright;case "production":return colors.greenBright;case "test":return colors.blueBright;default:return colors.whiteBright}}async function Rt({environment:n}){let e=await xr(),t=Go(n);console.log(` \u26A1 ${colors.bold(t("Warlock.js"))} ${colors.dim(`v${e}`)}`),console.log();}function zi(n){console.log(` ${colors.cyan("\u203A")} Running ${colors.bold(colors.white(n))}...`),console.log();}function Ui(n,e){console.log(),console.log(` ${colors.red("\u2716")} Command ${colors.magenta(n)} not found`),e&&e.length>0&&(console.log(),console.log(` ${colors.yellow("Did you mean?")}`),e.forEach(t=>{console.log(` ${colors.cyan("\u2192")} ${colors.white(t)}`);})),console.log(),console.log(` ${colors.dim("Run")} ${colors.cyan("warlock --help")} ${colors.dim("to see available commands")}`),console.log();}function Wi(){console.log(),console.log(` ${colors.red("\u2716")} No command specified`),console.log(` ${colors.dim("Run")} ${colors.cyan("warlock --help")} ${colors.dim("to see available commands")}`),console.log();}function qi(n,e){let t=e?colors.dim(` (${e}ms)`):"";console.log(),console.log(` ${colors.green("\u2714")} ${colors.bold(n)} completed successfully${t}`),console.log();}function Vi(n,e){console.log(),console.log(` ${colors.red("\u2716")} ${colors.bold(n)} failed`),console.log(` ${colors.dim(e.message)}`),console.log();}function Ki(n){console.log(),console.log(` ${colors.red("\u2716")} Missing required options:`),n.forEach(e=>{console.log(` ${colors.yellow(e.text)} ${colors.dim(`(--${e.name})`)}`);}),console.log();}async function Fr(n){let e=await xr();console.log(),console.log(` \u26A1 ${colors.bold(colors.yellowBright("Warlock.js"))} CLI ${colors.dim(`v${e}`)}`),console.log(),console.log(` ${colors.bold("Usage:")} ${colors.cyan("warlock")} ${colors.dim("<command>")} ${colors.dim("[options]")}`),console.log();let t={framework:[],plugin:[],project:[]};n.forEach(a=>{t[a.source]?.push(a);});let r={framework:"Framework Commands",plugin:"Plugin Commands",project:"Project Commands"};for(let[a,o]of Object.entries(t)){if(o.length===0)continue;console.log(` ${colors.bold(colors.white(r[a]))}`),console.log();let l=Math.max(...o.map(c=>c.name.length+(c.alias?c.alias.length+4:0)));o.forEach(c=>{let p=c.alias?colors.dim(` (${c.alias})`):"",u=c.name+(c.alias?` (${c.alias})`:""),d=" ".repeat(l-u.length+2),y=c.description||"";console.log(` ${colors.cyan(c.name)}${p}${d}${y}`);}),console.log();}console.log(` ${colors.bold(colors.white("Global Flags"))}`),console.log();let i=[{flag:"--help, -h",description:"Show help for a command"},{flag:"--version, -v",description:"Show Warlock version"},{flag:"--no-cache",description:"Force reload without cache"},{flag:"--warm-cache",description:"Pre-cache all project commands"}],s=Math.max(...i.map(a=>a.flag.length));i.forEach(({flag:a,description:o})=>{let l=" ".repeat(s-a.length+2);console.log(` ${colors.yellow(a)}${l}${o}`);}),console.log(),console.log(` ${colors.dim("Run")} ${colors.cyan("warlock <command> --help")} ${colors.dim("for command-specific help")}`),console.log();}function Gi(n){if(console.log(),console.log(` ${colors.bold(colors.cyan(n.name))}${n.alias?colors.dim(` (${n.alias})`):""}`),n.description&&console.log(` ${n.description}`),console.log(),n.options&&n.options.length>0){console.log(` ${colors.bold("Options:")}`),console.log();let e=Math.max(...n.options.map(t=>t.text.length));n.options.forEach(t=>{let r=" ".repeat(e-t.text.length+2),i=t.required?colors.red(" (required)"):"",s=t.description||"";console.log(` ${colors.green(t.text)}${r}${s}${i}`);}),console.log();}else console.log(` ${colors.dim("No options available")}`),console.log();}var Pr=class{async locate(e){let r=(await O(k("app"),"**/commands/*.{ts,tsx}")).map(i=>m.toRelative(i));for(let i of r){let s=await this.load(i);if(s&&(s.$relativePath(i),Mt(s.name,e)))return s}}async scanAll(){let t=(await O(k("app"),"**/commands/*.{ts,tsx}")).map(i=>m.toRelative(i)),r=[];for(let i of t){let s=await this.load(i);s&&(s.$relativePath(i),r.push(s));}return r}async load(e){return (await f.load(e))?.default}},Ne=new Pr;var Mr={react:{description:"Installs React and React dom for SSR rendering, useful for sending mails using React components as well",dependencies:{react:"^19.2.3","react-dom":"^19.2.3"},devDependencies:{"@types/react":"^19.2.7","@types/react-dom":"^19.2.3"}},image:{description:"Installs sharp for image processing",dependencies:{sharp:"^0.34.5"}},mail:{description:"Installs nodemailer for sending emails",dependencies:{nodemailer:"^6.9.14"},devDependencies:{"@types/nodemailer":"^7.0.4"}},mongodb:{description:"Installs mongodb driver for database driver (Cascade Package)",dependencies:{mongodb:"^7.0.0"}},scheduler:{description:"Installs warlock scheduler for scheduling tasks",dependencies:{"@warlock.js/scheduler":"~4.0.0"}},swagger:{description:"Installs warlock swagger for API documentation",dependencies:{"@warlock.js/swagger":"~4.0.0"}},postman:{description:"Installs warlock postman for API documentation",dependencies:{"@warlock.js/postman":"~4.0.0"}},postgress:{description:"Installs pg for Postgress database (Cascade Package)",dependencies:{pg:"^8.11.0"}},mysql:{description:"Installs mysql2 for MySQL database driver (Cascade Package)",dependencies:{mysql2:"^3.5.0"}},redis:{description:"Installs redis for Redis cache driver (Cache Package)",dependencies:{redis:"^4.6.13"}},s3:{description:"Installs AWS SDK for Cloud storage (Storage Package)",dependencies:{"@aws-sdk/client-s3":"^3.955.0","@aws-sdk/lib-storage":"^3.955.0","@aws-sdk/s3-request-presigner":"^3.955.0"}}},Rr=Object.keys(Mr);async function Yi(n){let e=n.args,{packageManager:t,list:r}=n.options;if(r){console.log("Available Features:");for(let o of Rr)console.log(`- ${colors.yellowBright(o)}: ${colors.green(Mr[o].description)}`);process.exit(0);}Jo(e);let i=await Yo(t),s={},a={};for(let o of e){let l=Mr[o];Object.assign(s,l.dependencies),l.devDependencies&&Object.assign(a,l.devDependencies);}Object.keys(s).length>0&&(console.log(`Installing dependencies ${colors.magenta(Object.keys(s).join(", "))}`),execSync(`${i} ${Object.keys(s).join(" ")}`,{cwd:process.cwd(),stdio:"inherit"}),console.log(`Dependencies installed successfully ${colors.green(Object.keys(s).join(", "))}`)),Object.keys(a).length>0&&(console.log(`Installing dev dependencies ${colors.magenta(Object.keys(a).join(", "))}`),execSync(`${i} ${Object.keys(a).join(" ")}`,{cwd:process.cwd(),stdio:"inherit"}),console.log(`Dev dependencies installed successfully ${colors.green(Object.keys(a).join(", "))}`));}function Jo(n){for(let e of n)Rr.includes(e)||(console.log(`Feature ${colors.redBright(e)} is not allowed, allowed features are: ${colors.green(Rr.join(", "))}`),process.exit(1));}async function Yo(n){if(n||(n=await Zo()),n==="npm")return "npm install";if(n==="yarn")return "yarn add";if(n==="pnpm")return "pnpm add"}async function Zo(){if(await fileExistsAsync(I("package-lock.json")))return "npm";if(await fileExistsAsync(I("yarn.lock")))return "yarn";if(await fileExistsAsync(I("pnpm-lock.yaml")))return "pnpm"}var Er=class{constructor(e,t){this.name=e;return t&&(this.commandDescription=t),this}commandSource;commandAction;commandPreAction;commandPreload;commandDescription;commandOptions=[];commandRelativePath;isPersistent=false;commandAlias;source(e){return this.commandSource=e,this}description(e){return this.commandDescription=e,this}persistent(e=true){return this.isPersistent=e,this}alias(e){return this.commandAlias=e,this}action(e){return this.commandAction=e,this}preAction(e){return this.commandPreAction=e,this}options(e){return e.map(t=>this.option(t)),this}$relativePath(e){return this.commandRelativePath=e,this}option(...e){let t;return e.length===1?t=e[0]:t={text:e[0],description:e[1],...e[2],name:""},this.commandOptions.push(this.parseOption(t)),this}parseOption(e){let r=e.text.trim().split(",").map(a=>a.trim()),i="",s="";if(r.length===1)i=this.extractOptionName(r[0]);else if(r.length===2){let a=r[0],o=r[1];a.startsWith("--")?(i=this.extractOptionName(a),s=this.extractOptionName(o)):(i=this.extractOptionName(o),s=this.extractOptionName(a));}if(s==="h"||i==="help")throw new Error("Help option is not allowed, it's reserved for displaying command help");return {...e,name:i,alias:s}}extractOptionName(e){let t=e.replace(/^-+/,""),r=t.indexOf("=");r!==-1&&(t=t.slice(0,r));let i=t.indexOf(" ");return i!==-1&&(t=t.slice(0,i)),t.trim()}preload(e){return this.commandPreload=e,this}async execute(e){if(!this.commandAction)throw new Error(`Command "${this.name}" has no action defined`);await this.commandAction(e);}};function _(n){let e=new Er(n.name,n.description);return n.preload&&e.preload(n.preload),n.persistent&&e.persistent(n.persistent),n.alias&&e.alias(n.alias),e.action(n.action),n.options&&e.options(n.options),n.preAction&&e.preAction(n.preAction),e}var Zi=_({name:"add <features...>",description:"Add new feature(s) to the project",action:Yi,options:[{text:"--package-manager -pm",description:"Package manager to use, if not passed, it will be detected automatically"},{text:"--list, -l",description:"List available features"}]});var Qi={name:"native-node-modules",setup(n){n.onResolve({filter:/\.node$/,namespace:"file"},t=>({path:Ar.resolve(t.path,{paths:[t.resolveDir]}),namespace:"node-file"})),n.onLoad({filter:/.*/,namespace:"node-file"},t=>({contents:`
|
|
73
|
+
import path from ${JSON.stringify(t.path)}
|
|
74
|
+
try { module.exports = require(path) }
|
|
75
|
+
catch {}
|
|
76
|
+
`})),n.onResolve({filter:/\.node$/,namespace:"node-file"},t=>({path:t.path,namespace:"file"}));let e=n.initialOptions;e.loader=e.loader||{},e.loader[".node"]="file";}};var Dt=class{options;productionDir=E("production");async build(){console.log(colors.cyan(`\u{1F680} Building for production...
|
|
77
|
+
`)),await this.initializeOptions(),await this.generateCombinedFiles(),await this.generateEntryPoint(),await this.bundle(),await removeDirectoryAsync(this.productionDir),console.log(colors.green(`
|
|
78
|
+
\u2705 Build complete!`)),console.log(`Start production server by running ${colors.cyan("warlock start")}`);}async initializeOptions(){this.options=V.get("build"),await ensureDirectoryAsync(this.productionDir);}generatedFiles={locales:false,events:false,main:false,routes:false};async generateCombinedFiles(){console.log(colors.yellow(" Generating production files...")),await this.generateBootstrap(),await this.generateConfigLoader();let[e,t,r,i]=await Promise.all([this.generateLocales(),this.generateEvents(),this.generateMain(),this.generateRoutes()]);this.generatedFiles={locales:e,events:t,main:r,routes:i};}async generateBootstrap(){await putFileAsync(X.join(this.productionDir,"bootstrap.ts"),`import { bootstrap, setEnvironment } from "@warlock.js/core";
|
|
79
|
+
|
|
80
|
+
// Set production environment
|
|
81
|
+
setEnvironment("production");
|
|
82
|
+
|
|
83
|
+
// Bootstrap the application
|
|
84
|
+
bootstrap();
|
|
85
|
+
`);}async globModule(e){let t=`**/${e}.{ts,tsx}`,r=Bt();return (await Dr(t,{cwd:r,absolute:false})).map(s=>"../../src/app/"+s.replace(/\.(ts|tsx)$/,""))}async globModuleDirectory(e){let t=`**/${e}/*.{ts,tsx}`,r=Bt();return (await Dr(t,{cwd:r,absolute:false})).map(s=>"../../src/app/"+s.replace(/\.(ts|tsx)$/,""))}async generateConfigLoader(){let e=X.join(process.cwd(),"src/config"),r=(await Dr("*.{ts,tsx}",{cwd:e,absolute:false})).map(c=>c.replace(/\.(ts|tsx)$/,"")),i=['import config from "@mongez/config";','import { configSpecialHandlers } from "@warlock.js/core";'],s=[],a=[],o=[];for(let c of r){let p=`${c}Config`;s.push(`import ${p} from "../../src/config/${c}";`),a.push(`config.set("${c}", ${p});`),o.push(`await configSpecialHandlers.execute("${c}", ${p});`);}let l=[...i,"","// Config imports",...s,"","// Register configs",...a,"","// Special handlers",...o,""].join(`
|
|
86
|
+
`);await putFileAsync(X.join(this.productionDir,"config-loader.ts"),l);}async generateLocales(){let e=await this.globModule("utils/locales");return e.length===0?false:(await this.generateImportsFile(e,"locales.ts"),true)}async generateEvents(){let e=await this.globModuleDirectory("events");return e.length===0?false:(await this.generateImportsFile(e,"events.ts"),true)}async generateMain(){let e=await this.globModule("main");return e.length===0?false:(await this.generateImportsFile(e,"main.ts"),true)}async generateRoutes(){let e=await this.globModule("routes");return e.length===0?false:(await this.generateImportsFile(e,"routes.ts"),true)}async generateImportsFile(e,t){let i=e.map(s=>`import "${s}";`).join(`
|
|
87
|
+
`)+`
|
|
88
|
+
`;await putFileAsync(X.join(this.productionDir,t),i);}async generateEntryPoint(){console.log(colors.yellow(" Generating entry point..."));let e=["// 1. Bootstrap (loads .env, initializes framework)",'import "./bootstrap";',"","// 2. Load configs",'import "./config-loader";'];e.push("","// 3. Load special files in order"),this.generatedFiles.events&&e.push('import "./events";'),this.generatedFiles.locales&&e.push('import "./locales";'),this.generatedFiles.main&&e.push('import "./main";'),this.generatedFiles.routes&&e.push('import "./routes";'),e.push("","// 4. Start connectors (database, cache, http)",'import { connectorsManager } from "@warlock.js/core";',"await connectorsManager.start();","connectorsManager.shutdownOnProcessKill();");let t=e.join(`
|
|
89
|
+
`)+`
|
|
90
|
+
`;await putFileAsync(X.join(this.productionDir,"app.ts"),t);}async bundle(){console.log(colors.magenta(" Bundling with esbuild..."));let e=X.join(this.productionDir,"app.ts"),t=X.resolve(this.options.outDirectory,this.options.outFile);await ensureDirectoryAsync(this.options.outDirectory),await Xo.build({platform:"node",entryPoints:[e],bundle:true,packages:"external",minify:this.options.minify,sourcemap:this.options.sourcemap===true?"linked":this.options.sourcemap,format:"esm",target:["esnext"],outfile:t,plugins:[Qi]});}};async function es(){await new Dt().build();}var ts=_({name:"build",description:"Build the project for production",action:es,preload:{warlockConfig:true}});var kt=class{constructor(e,t,r){this.dependencyGraph=e;this.specialFilesCollector=t;this.moduleLoader=r;}async executeBatchReload(e,t,r){if(e.length===0){r.length>0&&r.forEach(o=>{let l=t.get(o);l&&this.moduleLoader.cleanupDeletedModule(l);});return}let i=new Set,s=[],a=[];for(let o of e){if(!t.get(o))continue;let c=this.dependencyGraph.getInvalidationChain(o);c.forEach(u=>i.add(u)),this.determineReloadStrategy(c,t)==="FSR"?s.push(o):a.push(o);}try{a.forEach(o=>{let l=this.dependencyGraph.getInvalidationChain(o).length-1,c=t.get(o);c&&(this.moduleLoader.clearModuleCache(c.absolutePath),this.moduleLoader.cleanupFileModule(c),__clearModuleVersion(c.cachePath),te.clearCache(c.relativePath)),Lr(o,l>0?l:void 0);});}catch(o){console.log("ERRor in devLogHMR: ",o);}try{let o=Array.from(i),l=t.get(a[0]);await this.executeHotModuleReplacement(l,o,t,a);}catch(o){console.log("Error in execute HotModuleReplacement: ",o);}try{r.forEach(o=>{let l=t.get(o);l&&this.moduleLoader.cleanupDeletedModule(l);});}catch(o){console.log("ERRor in deleteFiles: ",o);}}determineReloadStrategy(e,t){for(let r of e){let i=t.get(r);if(i&&i.layer==="FSR")return "FSR"}return "HMR"}async executeFullServerRestart(e,t,r){let i=t.map(s=>r.get(s)).filter(s=>s!==void 0&&s.type==="config");if(i.length>0){for(let s of i)await Ie.reload(s);await this.restartAffectedConnectors(t),await this.clearModuleCacheForChain(t,r),await this.reloadAffectedSpecialFiles(t);return}await this.restartAffectedConnectors(t),await this.clearModuleCacheForChain(t,r),await this.reloadAffectedSpecialFiles(t);}async executeHotModuleReplacement(e,t,r,i){await this.clearModuleCacheForChain(t,r),await this.reloadAffectedModules(t,r),await this.restartAffectedConnectors(i);}async restartAffectedConnectors(e){let t=Me.list().filter(r=>r.shouldRestart(e));if(t.length!==0)for(let r of t)r.restart();}async clearModuleCacheForChain(e,t){for(let r of e){let i=t.get(r);i&&(this.moduleLoader.clearModuleCache(i.absolutePath),__clearModuleVersion(`./${i.cachePath}`),te.clearCache(i.relativePath),await i.process({force:true,saveToCache:true}));}}async reloadAffectedSpecialFiles(e){let t=o=>{if(e.includes(o.relativePath))return true;for(let l of o.dependencies)if(e.includes(l))return true;return false},r=this.specialFilesCollector.getMainFiles().filter(t),i=this.specialFilesCollector.getRouteFiles().filter(t),s=this.specialFilesCollector.getEventFiles().filter(t),a=this.specialFilesCollector.getLocaleFiles().filter(t);if(r.length>0)for(let o of r)await this.moduleLoader.reloadModule(o);if(a.length>0)for(let o of a)await this.moduleLoader.reloadModule(o);if(s.length>0)for(let o of s)await this.moduleLoader.reloadModule(o);if(i.length>0)for(let o of i)await this.moduleLoader.reloadModule(o);}async reloadAffectedModules(e,t){let r=u=>{if(e.includes(u.relativePath))return true;for(let d of u.dependencies)if(e.includes(d))return true;return false},i=e.some(u=>u.endsWith(".env"));i&&await loadEnv();let s=this.specialFilesCollector.getMainFiles().filter(r),a=this.specialFilesCollector.getConfigFiles().filter(u=>i?true:r(u)),o=this.specialFilesCollector.getRouteFiles().filter(r),l=this.specialFilesCollector.getEventFiles().filter(r),c=this.specialFilesCollector.getLocaleFiles().filter(r);if(!(s.length>0||o.length>0||l.length>0||c.length>0||a.length>0)){let u=e[e.length-1],d=t.get(u);if(!d)return;await this.moduleLoader.reloadModule(d);return}if(a.length>0)for(let u of a)await Ie.reload(u);if(s.length>0)for(let u of s)await this.moduleLoader.reloadModule(u);if(c.length>0)for(let u of c)await this.moduleLoader.reloadModule(u);if(l.length>0)for(let u of l)await this.moduleLoader.reloadModule(u);if(o.length>0)for(let u of o)await this.moduleLoader.reloadModule(u);}};var Tr=class{outputDir=E("typings");manifestPath=join(this.outputDir,"typings-manifest.json");manifest=null;configCache=new Map;async generateAll(){await this.ensureOutputDir();let e=join(this.outputDir,"storage.d.ts"),t=join(this.outputDir,"config.d.ts"),[r,i,s]=await Promise.all([this.exists(this.manifestPath),this.exists(e),this.exists(t)]);!r||!i||!s?await this.fullGeneration():(await this.loadManifest(),await this.reconcile()),await this.saveManifest();}async fullGeneration(){let e=await this.findConfigFile("storage");e&&this.generateStorageTypes(e),await this.generateConfigTypes();}async reconcile(){let e=f.getFiles(),r=false,i=0;for(let[s,a]of e)if(s.startsWith("src/config/storage")){let o=this.manifest?.storage;(!o||o.sourceHash!==a.hash)&&(await this.generateStorageTypes(s));break}for(let[s,a]of e){if(!s.startsWith("src/config/")||s.includes("index"))continue;let o=s.replace("src/config/","").replace(/\.[^.]+$/,""),l=this.manifest?.config[o];if(!l||l.sourceHash!==a.hash){r=true;let c=await this.extractConfigInfo(a.absolutePath,o);this.configCache.set(o,{sourceHash:a.hash,typeName:c.typeName,importSource:c.importSource,keys:c.keys});}else i++,this.configCache.set(o,l);}r?await this.writeConfigTypesFromCache():ee(`Config types unchanged (${i} configs cached)`);}async generateStorageTypes(e){try{let t=await this.extractStorageDriverKeys(e);if(t.length===0){U("\u26A0\uFE0F No storage drivers found in config");return}let i=f.getFiles().get(e)?.hash||"";this.manifest||(this.manifest=this.createEmptyManifest()),this.manifest.storage={sourceHash:i,drivers:t};let s=t.map(l=>` ${l}: true;`).join(`
|
|
91
|
+
`),a=`// Auto-generated by Warlock.js - DO NOT EDIT
|
|
92
|
+
// Generated from: ${e}
|
|
93
|
+
// Regenerates on dev-server start and when storage config changes
|
|
94
|
+
|
|
95
|
+
import "@warlock.js/core";
|
|
96
|
+
|
|
97
|
+
declare module "@warlock.js/core" {
|
|
98
|
+
interface StorageDriverRegistry {
|
|
99
|
+
${s}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
`,o=join(this.outputDir,"storage.d.ts");await writeFile(o,a,"utf-8"),z(`Generated storage types: ${t.join(", ")}`);}catch(t){U(`\u26A0\uFE0F Failed to generate storage types: ${t}`);}}shouldRegenerateTypes(e){return e.includes("src/config/")||e.includes("config/")}async handleFileChange(e){if(!this.shouldRegenerateTypes(e))return;if(e.includes("config/storage")){await this.generateStorageTypes(e),await this.saveManifest();return}let t=e.match(/config\/([^/]+)\.[^.]+$/);if(!t)return;let r=t[1];if(r==="index")return;ee(`Config changed: ${r}, updating...`);let s=f.getFiles().get(e)?.hash||Date.now().toString(),a=join(process.cwd(),"src/config"),o=join(a,`${r}.ts`),l=await this.extractConfigInfo(o,r);this.configCache.set(r,{sourceHash:s,typeName:l.typeName,importSource:l.importSource,keys:l.keys}),await this.writeConfigTypesFromCache(),await this.saveManifest();}async generateConfigTypes(){try{let e=f.getFiles();this.configCache.clear();for(let[t,r]of e){if(!t.startsWith("src/config/")||t.includes("index"))continue;let i=t.replace("src/config/","").replace(/\.[^.]+$/,""),s=await this.extractConfigInfo(r.absolutePath,i);this.configCache.set(i,{sourceHash:r.hash,typeName:s.typeName,importSource:s.importSource,keys:s.keys});}await this.writeConfigTypesFromCache();}catch(e){U(`\u26A0\uFE0F Failed to generate config types: ${e}`);}}async writeConfigTypesFromCache(){let e=[],t=[];this.manifest||(this.manifest=this.createEmptyManifest()),this.manifest.config={};for(let[c,p]of this.configCache)e.push({name:c,typeName:p.typeName,importSource:p.importSource}),t.push(...p.keys),this.manifest.config[c]=p;let r=new Map;for(let c of e)c.typeName&&c.importSource&&(r.has(c.importSource)||r.set(c.importSource,new Set),r.get(c.importSource).add(c.typeName));let i=Array.from(r.entries()).map(([c,p])=>`import type { ${Array.from(p).join(", ")} } from "${c}";`).join(`
|
|
103
|
+
`),s=e.map(c=>` ${c.name}: ${c.typeName||"unknown"};`).join(`
|
|
104
|
+
`),a=t.map(c=>` "${c}": true;`).join(`
|
|
105
|
+
`),o=`// Auto-generated by Warlock.js - DO NOT EDIT
|
|
106
|
+
// Regenerates on dev-server start and when config files change
|
|
107
|
+
|
|
108
|
+
${i}
|
|
109
|
+
import "@warlock.js/core";
|
|
110
|
+
|
|
111
|
+
declare module "@warlock.js/core" {
|
|
112
|
+
interface ConfigRegistry {
|
|
113
|
+
${s}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
interface ConfigKeyRegistry {
|
|
117
|
+
${a}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
`,l=join(this.outputDir,"config.d.ts");await writeFile(l,o,"utf-8"),z(`Generated config types: ${this.configCache.size} configs, ${t.length} keys`);}async loadManifest(){try{if(await this.exists(this.manifestPath)){let e=await readFile(this.manifestPath,"utf-8");return this.manifest=JSON.parse(e),!0}}catch{}return this.manifest=null,false}async saveManifest(){this.manifest||(this.manifest=this.createEmptyManifest()),this.manifest.lastBuildTime=Date.now(),await writeFile(this.manifestPath,JSON.stringify(this.manifest,null,2),"utf-8");}createEmptyManifest(){return {version:"1.0.0",lastBuildTime:Date.now(),storage:null,config:{}}}async extractConfigInfo(e,t){if(!await this.exists(e))return {typeName:null,importSource:null,keys:[]};let i=w.createProgram([e],{target:w.ScriptTarget.ESNext,module:w.ModuleKind.ESNext,moduleResolution:w.ModuleResolutionKind.NodeJs}).getSourceFile(e);if(!i)return {typeName:null,importSource:null,keys:[]};let s=new Map,a=new Set,o=null,l=[],c=d=>{if(w.isImportDeclaration(d)){let y=d.moduleSpecifier;if(w.isStringLiteral(y)){let b=y.text,v=d.importClause;if(v?.namedBindings&&w.isNamedImports(v.namedBindings))for(let C of v.namedBindings.elements)s.set(C.name.text,b);}}if(w.isTypeAliasDeclaration(d)&&w.getModifiers(d)?.some(b=>b.kind===w.SyntaxKind.ExportKeyword)&&a.add(d.name.text),w.isInterfaceDeclaration(d)&&w.getModifiers(d)?.some(b=>b.kind===w.SyntaxKind.ExportKeyword)&&a.add(d.name.text),w.isVariableDeclaration(d)&&(d.type&&w.isTypeReferenceNode(d.type)&&(o=d.type.typeName.getText(i)),d.initializer&&w.isObjectLiteralExpression(d.initializer))){let y=(b,v)=>{for(let C of b.properties)if(w.isPropertyAssignment(C)&&C.name){let S=C.name.getText(i),M=v?`${v}.${S}`:S;l.push(M),w.isObjectLiteralExpression(C.initializer)&&y(C.initializer,M);}};y(d.initializer,t);}w.forEachChild(d,c);};w.forEachChild(i,c);let p=null,u=null;return o&&(s.has(o)?(p=o,u=s.get(o)):a.has(o)&&(p=o,u=`../../${m.toRelative(e).replace(/\.(ts|tsx)$/,"")}`)),{typeName:p,importSource:u,keys:l}}async extractStorageDriverKeys(e){let t=resolve(e);if(!await this.exists(t))return U(`\u26A0\uFE0F Storage config not found: ${t}`),[];let i=w.createProgram([t],{target:w.ScriptTarget.ESNext,module:w.ModuleKind.ESNext,moduleResolution:w.ModuleResolutionKind.NodeJs}).getSourceFile(t);if(!i)return U(`\u26A0\uFE0F Could not parse storage config: ${t}`),[];let s=[],a=o=>{if(w.isPropertyAssignment(o)&&o.name.getText(i)==="drivers"&&w.isObjectLiteralExpression(o.initializer)){for(let c of o.initializer.properties)if(w.isPropertyAssignment(c)||w.isShorthandPropertyAssignment(c)){let p=c.name?.getText(i);p&&s.push(p);}}w.forEachChild(o,a);};return w.forEachChild(i,a),s}async findConfigFile(e){let t=[`src/config/${e}.ts`,`config/${e}.ts`];for(let r of t){let i=join(process.cwd(),r);if(await this.exists(i))return r}try{let r=f.getFiles();for(let[i]of r)if(i.includes(`config/${e}`))return i}catch{}}async ensureOutputDir(){await ensureDirectoryAsync(this.outputDir);}async exists(e){try{return await access(e,constants.F_OK),!0}catch{return false}}async executeGenerateAllCommand(){ee("Checking for types generation");let e=env("DEV_SERVER_CORE");spawn(e?"yarn":"npx",[e?"cli":"warlock","generate.typings"],{stdio:"inherit",cwd:process.cwd(),shell:true}).on("exit",r=>{r===0?z("Types generated successfully"):q("Failed to generate types");});}async executeTypingsGenerator(e){let r=Array.from(new Set(e)).filter(o=>m.normalize(o).includes("src/config/"));if(r.length===0)return;r.map(o=>"./"+m.toRelative(o));let s=env("DEV_SERVER_CORE");spawn(s?"yarn":"npx",[s?"cli":"warlock","generate.typings"],{stdio:"inherit",cwd:process.cwd(),shell:true}).on("exit",o=>{o===0?z("Types generated successfully"):q("Failed to generate types");});}},Le=new Tr;var Tt=class{moduleLoader;layerExecutor;running=false;constructor(){Br("Starting Development Server...");}async start(){try{let e=performance.now();await f.init(),await f.initiaizeAll(),await f.watchFiles(),f.specialFilesCollector.collect(f.getFiles()),this.setupEventListeners(),await f.moduleLoader.loadAll(),this.layerExecutor=new kt(f.getDependencyGraph(),f.specialFilesCollector,f.moduleLoader),this.running=!0;let t=performance.now()-e;_r(`Development Server is ready in ${colors.greenBright(la(t))}`),Le.executeGenerateAllCommand(),f.startCheckingHealth();}catch(e){throw U(colors.redBright(`\u274C Failed to start Development Server: ${e}`)),await this.shutdown(),e}}setupEventListeners(){Jt.on("dev-server:batch-complete",e=>{this.handleBatchComplete(e);});}async handleBatchComplete(e){if(!(!this.running||!this.layerExecutor||(e.changed.length>0&&(e.changed=(await Promise.all(e.changed.map(async r=>{let i=f.files.get(r);if(!i)return null;let s=await getFileAsync(i.absolutePath);return s.trim()===i.source?null:(i.source=s,r)}))).filter(r=>r!==null)),[...e.added,...e.changed,...e.deleted].length===0)))try{await this.layerExecutor.executeBatchReload([...e.added,...e.changed],f.getFiles(),e.deleted),Le.executeTypingsGenerator([...e.added,...e.changed]),f.checkHealth({added:e.added,changed:e.changed,deleted:e.deleted});}catch(r){U(colors.redBright(`\u274C Failed to execute batch reload: ${r}`));}}async shutdown(){console.log("Shutting down..."),this.running&&(U(colors.redBright("\u{1F6D1} Shutting down Development Server...")),this.running=false,await Me.shutdown(),U(colors.greenBright("\u2705 Development Server stopped")));}isRunning(){return this.running}getModuleLoader(){return this.moduleLoader}};function la(n){return n<1e3?`${n.toFixed(2)}ms`:n>6e4?`${(n/6e4).toFixed(2)}m`:`${(n/1e3).toFixed(2)}s`}async function ss(){let n=new Tt;return process.on("SIGINT",async()=>{console.log(`
|
|
121
|
+
|
|
122
|
+
\u{1F4E1} Received SIGINT signal`),await n.shutdown(),process.exit(0);}),process.on("SIGTERM",async()=>{console.log(`
|
|
123
|
+
|
|
124
|
+
\u{1F4E1} Received SIGTERM signal`),await n.shutdown(),process.exit(0);}),await n.start(),n}var ns=_({name:"dev",description:"Start development server",persistent:true,preload:{config:true,bootstrap:true,connectors:true},preAction:async()=>{await Rt({environment:"development"});},action:async()=>{await ss();}}).option("--fresh","Start Fresh Development server");async function pa(){let n=await migrationRunner.getExecutedMigrations();if(console.log(`
|
|
125
|
+
Total Executed Migrations: ${colors.green(n.length)}
|
|
126
|
+
`),n.length===0){console.log(colors.gray(` No migrations have been executed yet.
|
|
127
|
+
`));return}for(let e of n){let t=os(e.executedAt).format("DD-MM-YYYY hh:mm:ss A"),r=e.createdAt?os(e.createdAt).format("DD-MM-YYYY hh:mm:ss A"):null;console.log(` ${colors.green("\u2714")} ${colors.cyanBright(e.name)}`),console.log(` ${colors.gray("Executed:")} ${colors.white(t)}`),r&&console.log(` ${colors.gray("Created:")} ${colors.yellow(r)}`),console.log("");}}async function ua(){let n=(await cs()).map(e=>m.toRelative(e));console.log(`Total Migration Files: ${colors.green(n.length)}`);for(let e of n)console.log(colors.yellowBright(e));}async function as(n){let{fresh:e,path:t,rollback:r,all:i,list:s}=n.options;if(console.log(n),s)return await pa();if(i)return await ua();t?await ls(m.toAbsolute(t)):await da(),e&&r&&(console.log(colors.redBright("You can't use --fresh and --rollback together")),process.exit(1)),(r||e)&&await migrationRunner.rollbackAll(),!r&&await migrationRunner.runAll();}async function ls(n){let e=m.toRelative(n),t=await f.load(e);if(!t?.default)throw new Error(`${m.toRelative(n)} must have a default export`);let r=t.default;r.migrationName||(r.migrationName=X.basename(n).split(".")[0].replace("-migration","").replace("_migration","")),migrationRunner.register(r);}async function cs(){let n=await O(k("app"),"*/models/*/migrations/*"),e=await O(k("app"),"*/migrations/*");return [...n,...e]}async function da(){let n=await cs();for(let e of n)await ls(e);}var ps=_({action:as,name:"migrate",description:"Run database migrations",preload:{config:["database","log"],env:true,connectors:["database"]},options:[{text:"--fresh, -f",description:"Drop all tables and re-run migrations",type:"boolean"},{text:"--rollback, -r",description:"Rollback migrations, drop all tables",type:"boolean"},{text:"--path, -p",description:"Migration file path, if not provided, all migrations will be wroking",type:"string"},{text:"--list, -l",description:"List all executed migrations",type:"boolean"},{text:"--all, -a",description:"List all migrations files in the app",type:"boolean"}]});var le="_seeds";var Ot=class extends Migration{static migrationName="seeds-table-migration";static table=le;up(){this.createTableIfNotExists(),this.int("id").unique().autoIncrement(),this.string("name").unique(),this.int("runCount").defaultTo(0),this.dateTime("createdAt").defaultToNow(),this.dateTime("firstRunAt").defaultToNow(),this.dateTime("lastRunAt").defaultToNow(),this.int("totalRecordsCreated").defaultTo(0),this.int("lastRunRecordsCreated").defaultTo(0);}down(){this.dropTableIfExists(le);}};var It=class{constructor(e){this.options=e;this.datasource=e?.datasource??dataSourceRegistry.get();}seeders=[];datasource;register(...e){return this.seeders.push(...e),this}async init(){await this.driver.blueprint.tableExists(le)||await migrationRunner.run(Ot);}async run(){await this.init(),this.prepareSeeders(),console.log(`\u{1F331} Running ${this.seeders.length} seeder(s)...
|
|
128
|
+
`);let e=0,t=0,r=0;for(let i of this.seeders){if(i.once&&await this.seederIsExecutedBefore(i)){console.log(`\u23ED\uFE0F Skipping ${colors.yellow(i.name)} (already executed)`),t++;continue}try{console.log(`\u{1F504} Running ${colors.green(i.name)}...`);let s=Date.now(),a=await i.run(),o=Date.now()-s;a&&await this.storeSeedsResults(i,a),console.log(`\u2705 ${colors.green(i.name)} completed (${o}ms, ${a?.recordsCreated??0} records)
|
|
129
|
+
`),e++;}catch(s){let a=s;throw console.error(`\u274C ${colors.red(i.name)} failed:`,a.message),console.error(a.stack),r++,s}}console.log(`
|
|
130
|
+
`+"=".repeat(50)),console.log(`\u2705 Success: ${e}`),t>0&&console.log(`\u23ED\uFE0F Skipped: ${t}`),r>0&&console.log(`\u274C Failed: ${r}`),console.log("=".repeat(50));}prepareSeeders(){this.seeders.sort((e,t)=>{let r=e.order??Number.MAX_SAFE_INTEGER,i=t.order??Number.MAX_SAFE_INTEGER;return r-i});}async storeSeedsResults(e,t){let r=await this.getMetadata(e);console.log(`\u{1F4CA} Total records created: ${t.recordsCreated}`),r?(await this.driver.queryBuilder(le).where("name",e.name).update({runCount:r.runCount+1,lastRunAt:new Date,totalRecordsCreated:r.totalRecordsCreated+t.recordsCreated,lastRunRecordsCreated:t.recordsCreated}),console.log(`\u{1F4CA} Total records created so far: ${r.totalRecordsCreated+t.recordsCreated}`)):await this.driver.insert(le,{name:e.name,createdAt:new Date,firstRunAt:new Date,lastRunAt:new Date,runCount:1,totalRecordsCreated:t.recordsCreated,lastRunRecordsCreated:t.recordsCreated});}getMetadata(e){return this.datasource.driver.queryBuilder(le).where("name",e.name).first()}get driver(){return this.datasource.driver}async seederIsExecutedBefore(e){return !!await this.getMetadata(e)}};async function ya(n){let e=await n.driver.blueprint.getTables();for(let t of e)await n.driver.blueprint.truncateTable(t);}async function us(n){let{path:e,fresh:t}=n.options,r=dataSourceRegistry.get();t&&await ya(r);let i=e?[await ds(m.toAbsolute(e))]:await ba(),s=new It;s.register(...i),await s.run();}async function ba(){let n=await O(k("app"),"*/seeds/*.ts"),e=[];for(let t of n){let r=await ds(t);e.push(r);}return e}async function ds(n){let e=m.toRelative(n),t=await f.load(e);if(!t||!t.default)throw new Error(`Seeder file ${e} does not export a default seeder.`);return t.default}var ms=_({action:us,name:"seed",description:"Run database seeds",preload:{config:["database","log"],env:true,connectors:["database"]},options:[{text:"--fresh, -f",description:"Drop all tables records and run seeds",type:"boolean"}]});var hs=_({name:"start",description:"Start production server",persistent:true,preload:{warlockConfig:true},preAction:async()=>{Rt({environment:"production"});},action:async()=>{let n=V.get("build"),e=n?.outDirectory||"dist",t=n?.outFile||"app.js",r=X.resolve(e,t),i=[];n?.sourcemap!==false&&i.push("--enable-source-maps"),i.push(r);let s=process.argv.findIndex(c=>c==="start");if(s!==-1&&s<process.argv.length-1){let c=process.argv.slice(s+1);i.push(...c);}console.log(`\u{1F680} Starting production server...
|
|
131
|
+
`);let a=spawn("node",i,{stdio:"inherit",cwd:process.cwd(),env:process.env,detached:false}),o=false,l=c=>{o||(o=true,a.kill(c));};process.on("SIGTERM",()=>l("SIGTERM")),process.on("SIGINT",()=>{o=true;}),a.on("exit",c=>{process.exit(c??0);});}});var gs=_({name:"generate.typings",description:"Generate type definitions for the project",options:[{text:"--files, -f",description:"Files to generate typings for, if not passed, it will generate typings for all files"}],action:async({options:n})=>{let e=[];if(n.files){let i=String(n.files).split(",").map(s=>s.startsWith("./")?m.toAbsolute(s):s);i?.length&&e.push(...i);}if(e.length===0){let i=await O(k("config"));e.push(...i);}let r=(await Promise.allSettled(e.map(i=>f.add(m.toRelative(i))))).filter(i=>i.status==="rejected");r.length&&console.warn(`Failed to process ${r.length} files`),await Le.generateAll();}});var fs=[ns,ts,hs,gs,ps,ms,Zi];function ys(n){let e=n[2]||"",t=e.startsWith("-"),r=t?"":e,i=[],s={},a=t?2:3;for(let o=a;o<n.length;o++){let l=n[o];if(l.startsWith("--")){let c=l.slice(2),p=c.indexOf("=");if(p!==-1){let u=toCamelCase(c.slice(0,p)),d=c.slice(p+1);s[u]=d;}else {let u=toCamelCase(c),d=n[o+1];d&&!d.startsWith("-")?(s[u]=d,o++):s[u]=true;}}else if(l.startsWith("-")&&l.length>1){let c=l.slice(1),p=c.indexOf("=");if(p!==-1){let u=toCamelCase(c.slice(0,p)),d=c.slice(p+1);s[u]=d;}else if(c.length===1){let u=n[o+1];u&&!u.startsWith("-")?(s[toCamelCase(c)]=u,o++):s[toCamelCase(c)]=true;}else for(let u of c)s[toCamelCase(u)]=true;}else i.push(l);}return {name:r,args:i,options:s}}function Ca(n,e){let t=n.toLowerCase(),r=e.toLowerCase(),i=t.length,s=r.length,a=Array.from({length:i+1},(o,l)=>Array.from({length:s+1},(c,p)=>l===0?p:p===0?l:0));for(let o=1;o<=i;o++)for(let l=1;l<=s;l++){let c=t[o-1]===r[l-1]?0:1;a[o][l]=Math.min(a[o-1][l]+1,a[o][l-1]+1,a[o-1][l-1]+c);}return a[i][s]}function bs(n,e,t=3,r=3){let i=[];for(let s of e){let a=Ca(n,s);a<=t&&a>0&&i.push({value:s,distance:a});}return i.sort((s,a)=>s.distance-a.distance),i.slice(0,r)}var Nt=class{commands=[];commandsMap=new Map;aliasMap=new Map;register(...e){return this.commands.push(...e),e.forEach(t=>{let r=t.name.split(" ")[0];L.addCommandToList(t.name,{relativePath:t.commandRelativePath,source:t.commandSource||"project",description:t.commandDescription,alias:t.commandAlias,options:t.commandOptions.length>0?t.commandOptions:void 0}),this.commandsMap.set(r,t),t.commandAlias&&this.aliasMap.set(t.commandAlias,r);}),this}getCommand(e){let t=this.commandsMap.get(e);if(t)return t;let r=this.aliasMap.get(e);if(r)return this.commandsMap.get(r)}getAllCommandNames(){let e=[];for(let r of this.commandsMap.keys())e.push(r);for(let r of this.aliasMap.keys())e.push(r);let t=L.commandsJson?.commands||{};for(let r of Object.keys(t)){let i=r.split(" ")[0];e.includes(i)||e.push(i);let s=t[r].alias;s&&!e.includes(s)&&e.push(s);}return e}async start(){let{name:e,options:t,args:r}=ys(process.argv);t.noCache&&(L.clearCommandsCache(),await L.removeCommandsFile()),(t.version||t.v)&&(await Hi(),process.exit(0)),await L.loadCommands(),this.register(...fs.map(a=>(a.commandSource||(a.commandSource="framework"),a))),await ensureDirectoryAsync(E("cache"));let i=t.help||t.h;!e&&i&&(await this.showGlobalHelp(),process.exit(0)),t.warmCache&&(await this.warmCache(),process.exit(0)),e||(Wi(),process.exit(1));let s=await this.lazyGetCommand(e);if(L.hasChanges&&await L.saveCommands(),!s){let a=this.getAllCommandNames(),o=bs(e,a).map(l=>l.value);Ui(e,o),process.exit(1);}i&&(Gi({name:s.name,alias:s.commandAlias,description:s.commandDescription,options:s.commandOptions}),process.exit(0)),await this.execute(s,{options:t,args:r});}async showGlobalHelp(){if(L.isCommandLoaded&&Object.keys(L.commandsJson?.commands||{}).length>0){let r=Object.entries(L.commandsJson?.commands||{}).map(([i,s])=>({name:i,alias:s.alias,description:s.description,source:s.source}));await Fr(r);return}await this.loadPluginsCommands();let e=await Ne.scanAll();this.register(...e),await L.saveCommands();let t=this.commands.map(r=>({name:r.name,alias:r.commandAlias,description:r.commandDescription,source:r.commandSource||"project"}));await Fr(t);}async warmCache(){console.log(),console.log(` ${colors.cyan("\u203A")} Scanning project commands...`);let e=await Ne.scanAll();this.register(...e),await L.saveCommands(),console.log(` ${colors.green("\u2714")} Cached ${colors.bold(String(e.length))} project commands`),console.log();}async loadPluginsCommands(){await V.load(),V.isLoaded&&this.register(...(V.get("cli")?.commands||[]).map(e=>(e.commandSource||(e.commandSource="plugin"),e)));}async lazyGetCommand(e){let t=this.getCommand(e);return t||(await this.loadPluginsCommands(),t=this.getCommand(e),t)||(await this.loadProjectCommands(e),t=this.getCommand(e),t)?t:null}async loadProjectCommands(e){let t=await L.loadCommands();if(t)for(let i in t.commands){let s=t.commands[i];if(Mt(i,e)||s.alias===e){let a=s.relativePath;if(a){let o=await Ne.load(a);if(o){o.$relativePath(a),this.register(o);return}}}}let r=await Ne.locate(e);if(r){this.register(r);return}}validateOptions(e,t){let r=[];return e.commandOptions.forEach(i=>{i.required&&(t[i.name]!==void 0||i.alias&&t[i.alias]!==void 0||r.push(i));}),r}applyDefaultOptions(e,t){let r={...t};return e.commandOptions.forEach(i=>{i.defaultValue!==void 0&&(r[i.name]!==void 0||i.alias&&r[i.alias]!==void 0||(r[i.name]=i.defaultValue)),i.alias!==void 0&&r[i.alias]&&r[i.name]===void 0&&(r[i.name]=r[i.alias]);}),r}async execute(e,t){let r=Date.now(),i=this.validateOptions(e,t.options);i.length>0&&(Ki(i),process.exit(1)),t.options=this.applyDefaultOptions(e,t.options),zi(e.name),e.commandPreAction&&await e.commandPreAction(t),e.commandPreload&&await this.loadPreloaders(e);try{await e.execute(t),e.isPersistent||(qi(e.name,Date.now()-r),process.exit(0));}catch(s){Vi(e.name,s),e.isPersistent||process.exit(1);}}async loadPreloaders(e){let t=e.commandPreload||{};await V.load(),t.env&&!t.bootstrap?await loadEnv():t.bootstrap&&Ir(),t.config&&(await f.init(),await Ai(t.config)),t.connectors&&await Me.start(t.connectors===true?void 0:t.connectors);}};var Pa=new Nt;await Pa.start();//# sourceMappingURL=start.js.map
|
|
132
|
+
//# sourceMappingURL=start.js.map
|