@warlock.js/core 4.0.48 → 4.0.59
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/application.d.ts +27 -0
- package/esm/application.d.ts.map +1 -0
- package/esm/bootstrap/setup.d.ts +2 -0
- package/esm/bootstrap/setup.d.ts.map +1 -0
- package/esm/bootstrap/setup.js +14 -0
- package/esm/bootstrap/setup.js.map +1 -0
- package/esm/bootstrap.d.ts +2 -0
- package/esm/bootstrap.d.ts.map +1 -0
- package/esm/bootstrap.js +5 -0
- package/esm/bootstrap.js.map +1 -0
- package/esm/cache/database-cache-driver.d.ts +56 -0
- package/esm/cache/database-cache-driver.d.ts.map +1 -0
- package/esm/cache/database-cache-driver.js +112 -0
- package/esm/cache/database-cache-driver.js.map +1 -0
- package/esm/cache/index.d.ts +3 -0
- package/esm/cache/index.d.ts.map +1 -0
- package/esm/cache/index.js +1 -0
- package/esm/cache/index.js.map +1 -0
- package/esm/cli/cli-command.d.ts +115 -0
- package/esm/cli/cli-command.d.ts.map +1 -0
- package/esm/cli/cli-command.js +227 -0
- package/esm/cli/cli-command.js.map +1 -0
- package/esm/cli/cli-commands.manager.d.ts +71 -0
- package/esm/cli/cli-commands.manager.d.ts.map +1 -0
- package/esm/cli/cli-commands.manager.js +348 -0
- package/esm/cli/cli-commands.manager.js.map +1 -0
- package/esm/cli/cli-commands.utils.d.ts +73 -0
- package/esm/cli/cli-commands.utils.d.ts.map +1 -0
- package/esm/cli/cli-commands.utils.js +195 -0
- package/esm/cli/cli-commands.utils.js.map +1 -0
- package/esm/cli/commands/add.command.d.ts +2 -0
- package/esm/cli/commands/add.command.d.ts.map +1 -0
- package/esm/cli/commands/add.command.js +15 -0
- package/esm/cli/commands/add.command.js.map +1 -0
- package/esm/cli/commands/build.command.d.ts +2 -0
- package/esm/cli/commands/build.command.d.ts.map +1 -0
- package/esm/cli/commands/build.command.js +8 -0
- package/esm/cli/commands/build.command.js.map +1 -0
- package/esm/cli/commands/dev-server.command.d.ts +2 -0
- package/esm/cli/commands/dev-server.command.d.ts.map +1 -0
- package/esm/cli/commands/dev-server.command.js +16 -0
- package/esm/cli/commands/dev-server.command.js.map +1 -0
- package/esm/cli/commands/migrate.command.d.ts +2 -0
- package/esm/cli/commands/migrate.command.d.ts.map +1 -0
- package/esm/cli/commands/migrate.command.js +37 -0
- package/esm/cli/commands/migrate.command.js.map +1 -0
- package/esm/cli/commands/seed.command.d.ts +2 -0
- package/esm/cli/commands/seed.command.d.ts.map +1 -0
- package/esm/cli/commands/seed.command.js +17 -0
- package/esm/cli/commands/seed.command.js.map +1 -0
- package/esm/cli/commands/start-production.command.d.ts +2 -0
- package/esm/cli/commands/start-production.command.d.ts.map +1 -0
- package/esm/cli/commands/start-production.command.js +65 -0
- package/esm/cli/commands/start-production.command.js.map +1 -0
- package/esm/cli/commands/typings-generator.command.d.ts +2 -0
- package/esm/cli/commands/typings-generator.command.d.ts.map +1 -0
- package/esm/cli/commands/typings-generator.command.js +37 -0
- package/esm/cli/commands/typings-generator.command.js.map +1 -0
- package/esm/cli/commands-loader.d.ts +18 -0
- package/esm/cli/commands-loader.d.ts.map +1 -0
- package/esm/cli/commands-loader.js +45 -0
- package/esm/cli/commands-loader.js.map +1 -0
- package/esm/cli/framework-cli-commands.d.ts +2 -0
- package/esm/cli/framework-cli-commands.d.ts.map +1 -0
- package/esm/cli/framework-cli-commands.js +11 -0
- package/esm/cli/framework-cli-commands.js.map +1 -0
- package/esm/cli/index.d.ts +3 -0
- package/esm/cli/index.d.ts.map +1 -0
- package/esm/cli/index.js +1 -4
- package/esm/cli/index.js.map +1 -1
- package/esm/cli/parse-cli-args.d.ts +18 -0
- package/esm/cli/parse-cli-args.d.ts.map +1 -0
- package/esm/cli/parse-cli-args.js +82 -0
- package/esm/cli/parse-cli-args.js.map +1 -0
- package/esm/cli/start.d.ts +2 -0
- package/esm/cli/start.d.ts.map +1 -0
- package/esm/cli/start.js +2 -6
- package/esm/cli/start.js.map +1 -1
- package/esm/cli/string-similarity.d.ts +44 -0
- package/esm/cli/string-similarity.d.ts.map +1 -0
- package/esm/cli/string-similarity.js +57 -0
- package/esm/cli/string-similarity.js.map +1 -0
- package/esm/cli/types.d.ts +206 -0
- package/esm/cli/types.d.ts.map +1 -0
- package/esm/config/config-getter.d.ts +35 -0
- package/esm/config/config-getter.d.ts.map +1 -0
- package/esm/config/config-getter.js +21 -0
- package/esm/config/config-getter.js.map +1 -0
- package/esm/config/config-handlers.d.ts +19 -0
- package/esm/config/config-handlers.d.ts.map +1 -0
- package/esm/config/config-handlers.js +47 -0
- package/esm/config/config-handlers.js.map +1 -0
- package/esm/config/config-loader.d.ts +37 -0
- package/esm/config/config-loader.d.ts.map +1 -0
- package/esm/config/config-loader.js +85 -0
- package/esm/config/config-loader.js.map +1 -0
- package/esm/config/config-manager.d.ts +22 -0
- package/esm/config/config-manager.d.ts.map +1 -0
- package/esm/config/config-manager.js +25 -0
- package/esm/config/config-manager.js.map +1 -0
- package/esm/config/config-special-handlers.d.ts +17 -0
- package/esm/config/config-special-handlers.d.ts.map +1 -0
- package/esm/config/config-special-handlers.js +23 -0
- package/esm/config/config-special-handlers.js.map +1 -0
- package/esm/config/index.d.ts +5 -0
- package/esm/config/index.d.ts.map +1 -0
- package/esm/config/load-config-files.d.ts +6 -0
- package/esm/config/load-config-files.d.ts.map +1 -0
- package/esm/config/load-config-files.js +19 -0
- package/esm/config/load-config-files.js.map +1 -0
- package/esm/config/types.d.ts +52 -0
- package/esm/config/types.d.ts.map +1 -0
- package/esm/database/index.d.ts +4 -0
- package/esm/database/index.d.ts.map +1 -0
- package/esm/database/migrate-action.d.ts +8 -0
- package/esm/database/migrate-action.d.ts.map +1 -0
- package/esm/database/migrate-action.js +95 -0
- package/esm/database/migrate-action.js.map +1 -0
- package/esm/database/models/database-log/database-log.d.ts +16 -0
- package/esm/database/models/database-log/database-log.d.ts.map +1 -0
- package/esm/database/models/database-log/database-log.js +17 -0
- package/esm/database/models/database-log/database-log.js.map +1 -0
- package/esm/database/models/database-log/index.d.ts +2 -0
- package/esm/database/models/database-log/index.d.ts.map +1 -0
- package/esm/database/seed-command-action.d.ts +3 -0
- package/esm/database/seed-command-action.d.ts.map +1 -0
- package/esm/database/seed-command-action.js +36 -0
- package/esm/database/seed-command-action.js.map +1 -0
- package/esm/database/seeds/index.d.ts +3 -0
- package/esm/database/seeds/index.d.ts.map +1 -0
- package/esm/database/seeds/seeder.d.ts +36 -0
- package/esm/database/seeds/seeder.d.ts.map +1 -0
- package/esm/database/seeds/seeder.js +6 -0
- package/esm/database/seeds/seeder.js.map +1 -0
- package/esm/database/seeds/seeders.manager.d.ts +47 -0
- package/esm/database/seeds/seeders.manager.d.ts.map +1 -0
- package/esm/database/seeds/seeders.manager.js +137 -0
- package/esm/database/seeds/seeders.manager.js.map +1 -0
- package/esm/database/seeds/seeds-table-migration.d.ts +8 -0
- package/esm/database/seeds/seeds-table-migration.d.ts.map +1 -0
- package/esm/database/seeds/seeds-table-migration.js +18 -0
- package/esm/database/seeds/seeds-table-migration.js.map +1 -0
- package/esm/database/seeds/types.d.ts +13 -0
- package/esm/database/seeds/types.d.ts.map +1 -0
- package/esm/database/seeds/utils.d.ts +2 -0
- package/esm/database/seeds/utils.d.ts.map +1 -0
- package/esm/database/seeds/utils.js +1 -0
- package/esm/database/seeds/utils.js.map +1 -0
- package/esm/database/utils.d.ts +18 -0
- package/esm/database/utils.d.ts.map +1 -0
- package/esm/database/utils.js +30 -0
- package/esm/database/utils.js.map +1 -0
- package/esm/dev2-server/connectors/base-connector.d.ts +49 -0
- package/esm/dev2-server/connectors/base-connector.d.ts.map +1 -0
- package/esm/dev2-server/connectors/base-connector.js +48 -0
- package/esm/dev2-server/connectors/base-connector.js.map +1 -0
- package/esm/dev2-server/connectors/cache-connector.d.ts +23 -0
- package/esm/dev2-server/connectors/cache-connector.d.ts.map +1 -0
- package/esm/dev2-server/connectors/cache-connector.js +35 -0
- package/esm/dev2-server/connectors/cache-connector.js.map +1 -0
- package/esm/dev2-server/connectors/connectors-manager.d.ts +38 -0
- package/esm/dev2-server/connectors/connectors-manager.d.ts.map +1 -0
- package/esm/dev2-server/connectors/connectors-manager.js +81 -0
- package/esm/dev2-server/connectors/connectors-manager.js.map +1 -0
- package/esm/dev2-server/connectors/database-connector.d.ts +23 -0
- package/esm/dev2-server/connectors/database-connector.d.ts.map +1 -0
- package/esm/dev2-server/connectors/database-connector.js +51 -0
- package/esm/dev2-server/connectors/database-connector.js.map +1 -0
- package/esm/dev2-server/connectors/http-connector.d.ts +29 -0
- package/esm/dev2-server/connectors/http-connector.d.ts.map +1 -0
- package/esm/dev2-server/connectors/http-connector.js +69 -0
- package/esm/dev2-server/connectors/http-connector.js.map +1 -0
- package/esm/dev2-server/connectors/index.d.ts +12 -0
- package/esm/dev2-server/connectors/index.d.ts.map +1 -0
- package/esm/dev2-server/connectors/storage.connector.d.ts +23 -0
- package/esm/dev2-server/connectors/storage.connector.d.ts.map +1 -0
- package/esm/dev2-server/connectors/storage.connector.js +29 -0
- package/esm/dev2-server/connectors/storage.connector.js.map +1 -0
- package/esm/dev2-server/connectors/types.d.ts +51 -0
- package/esm/dev2-server/connectors/types.d.ts.map +1 -0
- package/esm/dev2-server/connectors/types.js +10 -0
- package/esm/dev2-server/connectors/types.js.map +1 -0
- package/esm/dev2-server/create-worker.d.ts +34 -0
- package/esm/dev2-server/create-worker.d.ts.map +1 -0
- package/esm/dev2-server/create-worker.js +37 -0
- package/esm/dev2-server/create-worker.js.map +1 -0
- package/esm/dev2-server/dependency-graph.d.ts +93 -0
- package/esm/dev2-server/dependency-graph.d.ts.map +1 -0
- package/esm/dev2-server/dependency-graph.js +266 -0
- package/esm/dev2-server/dependency-graph.js.map +1 -0
- package/esm/dev2-server/dev-logger.d.ts +14 -0
- package/esm/dev2-server/dev-logger.d.ts.map +1 -0
- package/esm/dev2-server/dev-logger.js +130 -0
- package/esm/dev2-server/dev-logger.js.map +1 -0
- package/esm/dev2-server/development-server.d.ts +47 -0
- package/esm/dev2-server/development-server.d.ts.map +1 -0
- package/esm/dev2-server/development-server.js +149 -0
- package/esm/dev2-server/development-server.js.map +1 -0
- package/esm/dev2-server/events.d.ts +5 -0
- package/esm/dev2-server/events.d.ts.map +1 -0
- package/esm/dev2-server/events.js +4 -0
- package/esm/dev2-server/events.js.map +1 -0
- package/esm/dev2-server/export-analyzer.d.ts +84 -0
- package/esm/dev2-server/export-analyzer.d.ts.map +1 -0
- package/esm/dev2-server/export-analyzer.js +206 -0
- package/esm/dev2-server/export-analyzer.js.map +1 -0
- package/esm/dev2-server/file-event-handler.d.ts +156 -0
- package/esm/dev2-server/file-event-handler.d.ts.map +1 -0
- package/esm/dev2-server/file-event-handler.js +300 -0
- package/esm/dev2-server/file-event-handler.js.map +1 -0
- package/esm/dev2-server/file-manager.d.ts +385 -0
- package/esm/dev2-server/file-manager.d.ts.map +1 -0
- package/esm/dev2-server/file-manager.js +580 -0
- package/esm/dev2-server/file-manager.js.map +1 -0
- package/esm/dev2-server/file-operations.d.ts +203 -0
- package/esm/dev2-server/file-operations.d.ts.map +1 -0
- package/esm/dev2-server/file-operations.js +365 -0
- package/esm/dev2-server/file-operations.js.map +1 -0
- package/esm/dev2-server/files-orchestrator.d.ts +146 -0
- package/esm/dev2-server/files-orchestrator.d.ts.map +1 -0
- package/esm/dev2-server/files-orchestrator.js +314 -0
- package/esm/dev2-server/files-orchestrator.js.map +1 -0
- package/esm/dev2-server/files-watcher.d.ts +67 -0
- package/esm/dev2-server/files-watcher.d.ts.map +1 -0
- package/esm/dev2-server/files-watcher.js +95 -0
- package/esm/dev2-server/files-watcher.js.map +1 -0
- package/esm/dev2-server/flags.d.ts +10 -0
- package/esm/dev2-server/flags.d.ts.map +1 -0
- package/esm/dev2-server/flags.js +9 -0
- package/esm/dev2-server/flags.js.map +1 -0
- package/esm/dev2-server/health-checker/checkers/base-health-checker.d.ts +52 -0
- package/esm/dev2-server/health-checker/checkers/base-health-checker.d.ts.map +1 -0
- package/esm/dev2-server/health-checker/checkers/base-health-checker.js +71 -0
- package/esm/dev2-server/health-checker/checkers/base-health-checker.js.map +1 -0
- package/esm/dev2-server/health-checker/checkers/eslint-health-checker.d.ts +40 -0
- package/esm/dev2-server/health-checker/checkers/eslint-health-checker.d.ts.map +1 -0
- package/esm/dev2-server/health-checker/checkers/eslint-health-checker.js +217 -0
- package/esm/dev2-server/health-checker/checkers/eslint-health-checker.js.map +1 -0
- package/esm/dev2-server/health-checker/checkers/typescript-health-checker.d.ts +56 -0
- package/esm/dev2-server/health-checker/checkers/typescript-health-checker.d.ts.map +1 -0
- package/esm/dev2-server/health-checker/checkers/typescript-health-checker.js +279 -0
- package/esm/dev2-server/health-checker/checkers/typescript-health-checker.js.map +1 -0
- package/esm/dev2-server/health-checker/file-health-checker.contract.d.ts +59 -0
- package/esm/dev2-server/health-checker/file-health-checker.contract.d.ts.map +1 -0
- package/esm/dev2-server/health-checker/file-health-result.d.ts +68 -0
- package/esm/dev2-server/health-checker/file-health-result.d.ts.map +1 -0
- package/esm/dev2-server/health-checker/file-health-result.js +40 -0
- package/esm/dev2-server/health-checker/file-health-result.js.map +1 -0
- package/esm/dev2-server/health-checker/files-healthcare.manager.d.ts +115 -0
- package/esm/dev2-server/health-checker/files-healthcare.manager.d.ts.map +1 -0
- package/esm/dev2-server/health-checker/files-healthcare.manager.js +422 -0
- package/esm/dev2-server/health-checker/files-healthcare.manager.js.map +1 -0
- package/esm/dev2-server/health-checker/index.d.ts +6 -0
- package/esm/dev2-server/health-checker/index.d.ts.map +1 -0
- package/esm/dev2-server/health-checker/workers/eslint-health.worker.d.ts +2 -0
- package/esm/dev2-server/health-checker/workers/eslint-health.worker.d.ts.map +1 -0
- package/esm/dev2-server/health-checker/workers/eslint-health.worker.js +214 -0
- package/esm/dev2-server/health-checker/workers/eslint-health.worker.js.map +1 -0
- package/esm/dev2-server/health-checker/workers/ts-health.worker.d.ts +2 -0
- package/esm/dev2-server/health-checker/workers/ts-health.worker.d.ts.map +1 -0
- package/esm/dev2-server/health-checker/workers/ts-health.worker.js +261 -0
- package/esm/dev2-server/health-checker/workers/ts-health.worker.js.map +1 -0
- package/esm/dev2-server/import-transformer.d.ts +17 -0
- package/esm/dev2-server/import-transformer.d.ts.map +1 -0
- package/esm/dev2-server/import-transformer.js +280 -0
- package/esm/dev2-server/import-transformer.js.map +1 -0
- package/esm/dev2-server/index.d.ts +1 -0
- package/esm/dev2-server/index.d.ts.map +1 -0
- package/esm/dev2-server/layer-executor.d.ts +61 -0
- package/esm/dev2-server/layer-executor.d.ts.map +1 -0
- package/esm/dev2-server/layer-executor.js +314 -0
- package/esm/dev2-server/layer-executor.js.map +1 -0
- package/esm/dev2-server/manifest-manager.d.ts +80 -0
- package/esm/dev2-server/manifest-manager.d.ts.map +1 -0
- package/esm/dev2-server/manifest-manager.js +107 -0
- package/esm/dev2-server/manifest-manager.js.map +1 -0
- package/esm/dev2-server/module-loader.d.ts +108 -0
- package/esm/dev2-server/module-loader.d.ts.map +1 -0
- package/esm/dev2-server/module-loader.js +266 -0
- package/esm/dev2-server/module-loader.js.map +1 -0
- package/esm/dev2-server/package-json-manager.d.ts +16 -0
- package/esm/dev2-server/package-json-manager.d.ts.map +1 -0
- package/esm/dev2-server/package-json-manager.js +20 -0
- package/esm/dev2-server/package-json-manager.js.map +1 -0
- package/esm/dev2-server/parse-imports.d.ts +13 -0
- package/esm/dev2-server/parse-imports.d.ts.map +1 -0
- package/esm/dev2-server/parse-imports.js +329 -0
- package/esm/dev2-server/parse-imports.js.map +1 -0
- package/esm/dev2-server/path.d.ts +39 -0
- package/esm/dev2-server/path.d.ts.map +1 -0
- package/esm/dev2-server/path.js +56 -0
- package/esm/dev2-server/path.js.map +1 -0
- package/esm/dev2-server/runtime-import-helper.d.ts +8 -0
- package/esm/dev2-server/runtime-import-helper.d.ts.map +1 -0
- package/esm/dev2-server/runtime-import-helper.js +157 -0
- package/esm/dev2-server/runtime-import-helper.js.map +1 -0
- package/esm/dev2-server/special-files-collector.d.ts +114 -0
- package/esm/dev2-server/special-files-collector.d.ts.map +1 -0
- package/esm/dev2-server/special-files-collector.js +212 -0
- package/esm/dev2-server/special-files-collector.js.map +1 -0
- package/esm/dev2-server/start-development-server.d.ts +7 -0
- package/esm/dev2-server/start-development-server.d.ts.map +1 -0
- package/esm/dev2-server/start-development-server.js +21 -0
- package/esm/dev2-server/start-development-server.js.map +1 -0
- package/esm/dev2-server/transpile-file.d.ts +11 -0
- package/esm/dev2-server/transpile-file.d.ts.map +1 -0
- package/esm/dev2-server/transpile-file.js +21 -0
- package/esm/dev2-server/transpile-file.js.map +1 -0
- package/esm/dev2-server/tsconfig-manager.d.ts +45 -0
- package/esm/dev2-server/tsconfig-manager.d.ts.map +1 -0
- package/esm/dev2-server/tsconfig-manager.js +107 -0
- package/esm/dev2-server/tsconfig-manager.js.map +1 -0
- package/esm/dev2-server/type-generator.d.ts +115 -0
- package/esm/dev2-server/type-generator.d.ts.map +1 -0
- package/esm/dev2-server/type-generator.js +566 -0
- package/esm/dev2-server/type-generator.js.map +1 -0
- package/esm/dev2-server/types.d.ts +30 -0
- package/esm/dev2-server/types.d.ts.map +1 -0
- package/esm/dev2-server/utils.d.ts +15 -0
- package/esm/dev2-server/utils.d.ts.map +1 -0
- package/esm/dev2-server/utils.js +40 -0
- package/esm/dev2-server/utils.js.map +1 -0
- package/esm/generations/add-command.action.d.ts +3 -0
- package/esm/generations/add-command.action.d.ts.map +1 -0
- package/esm/generations/add-command.action.js +154 -0
- package/esm/generations/add-command.action.js.map +1 -0
- package/esm/http/config.d.ts +10 -0
- package/esm/http/config.d.ts.map +1 -0
- package/esm/http/config.js +22 -0
- package/esm/http/config.js.map +1 -0
- package/esm/http/context/request-context.d.ts +47 -0
- package/esm/http/context/request-context.d.ts.map +1 -0
- package/esm/http/context/request-context.js +52 -0
- package/esm/http/context/request-context.js.map +1 -0
- package/esm/http/createHttpApplication.d.ts +3 -0
- package/esm/http/createHttpApplication.d.ts.map +1 -0
- package/esm/http/createHttpApplication.js +28 -0
- package/esm/http/createHttpApplication.js.map +1 -0
- package/esm/http/database/RequestLog.d.ts +16 -0
- package/esm/http/database/RequestLog.d.ts.map +1 -0
- package/esm/http/database/RequestLog.js +26 -0
- package/esm/http/database/RequestLog.js.map +1 -0
- package/esm/http/errors/index.d.ts +2 -0
- package/esm/http/errors/index.d.ts.map +1 -0
- package/esm/http/errors/resource-not-found.error.d.ts +21 -0
- package/esm/http/errors/resource-not-found.error.d.ts.map +1 -0
- package/esm/http/errors/resource-not-found.error.js +40 -0
- package/esm/http/errors/resource-not-found.error.js.map +1 -0
- package/esm/http/events.d.ts +4 -0
- package/esm/http/events.d.ts.map +1 -0
- package/esm/http/events.js +26 -0
- package/esm/http/events.js.map +1 -0
- package/esm/http/index.d.ts +17 -0
- package/esm/http/index.d.ts.map +1 -0
- package/esm/http/middleware/cache-response-middleware.d.ts +34 -0
- package/esm/http/middleware/cache-response-middleware.d.ts.map +1 -0
- package/esm/http/middleware/cache-response-middleware.js +45 -0
- package/esm/http/middleware/cache-response-middleware.js.map +1 -0
- package/esm/http/middleware/index.d.ts +3 -0
- package/esm/http/middleware/index.d.ts.map +1 -0
- package/esm/http/middleware/inject-request-context.d.ts +21 -0
- package/esm/http/middleware/inject-request-context.d.ts.map +1 -0
- package/esm/http/middleware/inject-request-context.js +105 -0
- package/esm/http/middleware/inject-request-context.js.map +1 -0
- package/esm/http/plugins/index.d.ts +3 -0
- package/esm/http/plugins/index.d.ts.map +1 -0
- package/esm/http/plugins.d.ts +3 -0
- package/esm/http/plugins.d.ts.map +1 -0
- package/esm/http/plugins.js +31 -0
- package/esm/http/plugins.js.map +1 -0
- package/esm/http/request-controller.d.ts +11 -0
- package/esm/http/request-controller.d.ts.map +1 -0
- package/esm/http/request-controller.js +9 -0
- package/esm/http/request-controller.js.map +1 -0
- package/esm/http/request.d.ts +380 -0
- package/esm/http/request.d.ts.map +1 -0
- package/esm/http/request.js +733 -0
- package/esm/http/request.js.map +1 -0
- package/esm/http/response.js +914 -0
- package/esm/http/response.js.map +1 -0
- package/esm/http/server.d.ts +8 -0
- package/esm/http/server.d.ts.map +1 -0
- package/esm/http/server.js +15 -0
- package/esm/http/server.js.map +1 -0
- package/esm/http/types.d.ts +174 -0
- package/esm/http/types.d.ts.map +1 -0
- package/esm/http/uploaded-file.d.ts +459 -0
- package/esm/http/uploaded-file.d.ts.map +1 -0
- package/esm/http/uploaded-file.js +709 -0
- package/esm/http/uploaded-file.js.map +1 -0
- package/esm/http/uploads-config.d.ts +26 -0
- package/esm/http/uploads-config.d.ts.map +1 -0
- package/esm/http/uploads-config.js +35 -0
- package/esm/http/uploads-config.js.map +1 -0
- package/esm/http/uploads-types.d.ts +236 -0
- package/esm/http/uploads-types.d.ts.map +1 -0
- package/esm/image/image.d.ts +388 -0
- package/esm/image/image.d.ts.map +1 -0
- package/esm/image/image.js +602 -0
- package/esm/image/image.js.map +1 -0
- package/esm/image/index.d.ts +2 -0
- package/esm/image/index.d.ts.map +1 -0
- package/esm/index.d.ts +28 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +1 -28
- package/esm/index.js.map +1 -1
- package/esm/logger/index.d.ts +3 -0
- package/esm/logger/index.d.ts.map +1 -0
- package/esm/logger/logger.d.ts +3 -0
- package/esm/logger/logger.d.ts.map +1 -0
- package/esm/logger/logger.js +16 -0
- package/esm/logger/logger.js.map +1 -0
- package/esm/logger/types.d.ts +39 -0
- package/esm/logger/types.d.ts.map +1 -0
- package/esm/mail/config.d.ts +83 -0
- package/esm/mail/config.d.ts.map +1 -0
- package/esm/mail/config.js +152 -0
- package/esm/mail/config.js.map +1 -0
- package/esm/mail/events.d.ts +96 -0
- package/esm/mail/events.d.ts.map +1 -0
- package/esm/mail/events.js +123 -0
- package/esm/mail/events.js.map +1 -0
- package/esm/mail/index.d.ts +10 -0
- package/esm/mail/index.d.ts.map +1 -0
- package/esm/mail/mail.d.ts +175 -0
- package/esm/mail/mail.d.ts.map +1 -0
- package/esm/mail/mail.js +286 -0
- package/esm/mail/mail.js.map +1 -0
- package/esm/mail/mailer-pool.d.ts +27 -0
- package/esm/mail/mailer-pool.d.ts.map +1 -0
- package/esm/mail/mailer-pool.js +143 -0
- package/esm/mail/mailer-pool.js.map +1 -0
- package/esm/mail/react-mail.d.ts +9 -0
- package/esm/mail/react-mail.d.ts.map +1 -0
- package/esm/mail/react-mail.js +28 -0
- package/esm/mail/react-mail.js.map +1 -0
- package/esm/mail/send-mail.d.ts +33 -0
- package/esm/mail/send-mail.d.ts.map +1 -0
- package/esm/mail/send-mail.js +309 -0
- package/esm/mail/send-mail.js.map +1 -0
- package/esm/mail/test-mailbox.d.ts +110 -0
- package/esm/mail/test-mailbox.d.ts.map +1 -0
- package/esm/mail/test-mailbox.js +143 -0
- package/esm/mail/test-mailbox.js.map +1 -0
- package/esm/mail/types.d.ts +245 -0
- package/esm/mail/types.d.ts.map +1 -0
- package/esm/mail/types.js +13 -0
- package/esm/mail/types.js.map +1 -0
- package/esm/manifest/manifest-manager.d.ts +74 -0
- package/esm/manifest/manifest-manager.d.ts.map +1 -0
- package/esm/manifest/manifest-manager.js +88 -0
- package/esm/manifest/manifest-manager.js.map +1 -0
- package/esm/production/build-app-production.d.ts +6 -0
- package/esm/production/build-app-production.d.ts.map +1 -0
- package/esm/production/build-app-production.js +8 -0
- package/esm/production/build-app-production.js.map +1 -0
- package/esm/production/esbuild-plugins.d.ts +5 -0
- package/esm/production/esbuild-plugins.d.ts.map +1 -0
- package/esm/production/esbuild-plugins.js +23 -0
- package/esm/production/esbuild-plugins.js.map +1 -0
- package/esm/production/production-builder.d.ts +76 -0
- package/esm/production/production-builder.d.ts.map +1 -0
- package/esm/production/production-builder.js +247 -0
- package/esm/production/production-builder.js.map +1 -0
- package/esm/react/index.d.ts +14 -0
- package/esm/react/index.d.ts.map +1 -0
- package/esm/react/index.js +65 -0
- package/esm/react/index.js.map +1 -0
- package/esm/repositories/adapters/cascade/cascade-adapter.d.ts +85 -0
- package/esm/repositories/adapters/cascade/cascade-adapter.d.ts.map +1 -0
- package/esm/repositories/adapters/cascade/cascade-adapter.js +179 -0
- package/esm/repositories/adapters/cascade/cascade-adapter.js.map +1 -0
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.ts +124 -0
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.ts.map +1 -0
- package/esm/repositories/adapters/cascade/cascade-query-builder.js +267 -0
- package/esm/repositories/adapters/cascade/cascade-query-builder.js.map +1 -0
- package/esm/repositories/adapters/cascade/filter-applicator.d.ts +62 -0
- package/esm/repositories/adapters/cascade/filter-applicator.d.ts.map +1 -0
- package/esm/repositories/adapters/cascade/filter-applicator.js +423 -0
- package/esm/repositories/adapters/cascade/filter-applicator.js.map +1 -0
- package/esm/repositories/adapters/cascade/index.d.ts +7 -0
- package/esm/repositories/adapters/cascade/index.d.ts.map +1 -0
- package/esm/repositories/contracts/index.d.ts +8 -0
- package/esm/repositories/contracts/index.d.ts.map +1 -0
- package/esm/repositories/contracts/query-builder.contract.d.ts +279 -0
- package/esm/repositories/contracts/query-builder.contract.d.ts.map +1 -0
- package/esm/repositories/contracts/repository-adapter.contract.d.ts +183 -0
- package/esm/repositories/contracts/repository-adapter.contract.d.ts.map +1 -0
- package/esm/repositories/contracts/types.d.ts +278 -0
- package/esm/repositories/contracts/types.d.ts.map +1 -0
- package/esm/repositories/index.d.ts +8 -0
- package/esm/repositories/index.d.ts.map +1 -0
- package/esm/repositories/repository.manager.d.ts +619 -0
- package/esm/repositories/repository.manager.d.ts.map +1 -0
- package/esm/repositories/repository.manager.js +978 -0
- package/esm/repositories/repository.manager.js.map +1 -0
- package/esm/resource/define-resource.js +58 -0
- package/esm/resource/define-resource.js.map +1 -0
- package/esm/resource/index.d.ts +5 -0
- package/esm/resource/index.d.ts.map +1 -0
- package/esm/resource/resource-field-builder.d.ts +83 -0
- package/esm/resource/resource-field-builder.d.ts.map +1 -0
- package/esm/resource/resource-field-builder.js +189 -0
- package/esm/resource/resource-field-builder.js.map +1 -0
- package/esm/resource/resource.d.ts +105 -0
- package/esm/resource/resource.d.ts.map +1 -0
- package/esm/resource/resource.js +231 -0
- package/esm/resource/resource.js.map +1 -0
- package/esm/resource/types.d.ts +40 -0
- package/esm/resource/types.d.ts.map +1 -0
- package/esm/restful/index.d.ts +2 -0
- package/esm/restful/index.d.ts.map +1 -0
- package/esm/restful/restful.d.ts +110 -0
- package/esm/restful/restful.d.ts.map +1 -0
- package/esm/restful/restful.js +317 -0
- package/esm/restful/restful.js.map +1 -0
- package/esm/router/index.d.ts +4 -0
- package/esm/router/index.d.ts.map +1 -0
- package/esm/router/route-registry.d.ts +30 -0
- package/esm/router/route-registry.d.ts.map +1 -0
- package/esm/router/route-registry.js +67 -0
- package/esm/router/route-registry.js.map +1 -0
- package/esm/router/route.d.ts +34 -0
- package/esm/router/route.d.ts.map +1 -0
- package/esm/router/router.d.ts +169 -0
- package/esm/router/router.d.ts.map +1 -0
- package/esm/router/router.js +578 -0
- package/esm/router/router.js.map +1 -0
- package/esm/router/types.d.ts +267 -0
- package/esm/router/types.d.ts.map +1 -0
- package/esm/router/utils.d.ts +5 -0
- package/esm/router/utils.d.ts.map +1 -0
- package/esm/router/utils.js +6 -0
- package/esm/router/utils.js.map +1 -0
- package/esm/storage/config.d.ts +15 -0
- package/esm/storage/config.d.ts.map +1 -0
- package/esm/storage/config.js +32 -0
- package/esm/storage/config.js.map +1 -0
- package/esm/storage/context/storage-driver-context.d.ts +69 -0
- package/esm/storage/context/storage-driver-context.d.ts.map +1 -0
- package/esm/storage/context/storage-driver-context.js +80 -0
- package/esm/storage/context/storage-driver-context.js.map +1 -0
- package/esm/storage/drivers/cloud-driver.d.ts +196 -0
- package/esm/storage/drivers/cloud-driver.d.ts.map +1 -0
- package/esm/storage/drivers/cloud-driver.js +697 -0
- package/esm/storage/drivers/cloud-driver.js.map +1 -0
- package/esm/storage/drivers/do-spaces-driver.d.ts +43 -0
- package/esm/storage/drivers/do-spaces-driver.d.ts.map +1 -0
- package/esm/storage/drivers/do-spaces-driver.js +50 -0
- package/esm/storage/drivers/do-spaces-driver.js.map +1 -0
- package/esm/storage/drivers/local-driver.d.ts +151 -0
- package/esm/storage/drivers/local-driver.d.ts.map +1 -0
- package/esm/storage/drivers/local-driver.js +448 -0
- package/esm/storage/drivers/local-driver.js.map +1 -0
- package/esm/storage/drivers/r2-driver.d.ts +47 -0
- package/esm/storage/drivers/r2-driver.d.ts.map +1 -0
- package/esm/storage/drivers/r2-driver.js +60 -0
- package/esm/storage/drivers/r2-driver.js.map +1 -0
- package/esm/storage/drivers/s3-driver.d.ts +32 -0
- package/esm/storage/drivers/s3-driver.d.ts.map +1 -0
- package/esm/storage/drivers/s3-driver.js +37 -0
- package/esm/storage/drivers/s3-driver.js.map +1 -0
- package/esm/storage/index.d.ts +13 -0
- package/esm/storage/index.d.ts.map +1 -0
- package/esm/storage/scoped-storage.d.ts +514 -0
- package/esm/storage/scoped-storage.d.ts.map +1 -0
- package/esm/storage/scoped-storage.js +656 -0
- package/esm/storage/scoped-storage.js.map +1 -0
- package/esm/storage/storage-file.d.ts +216 -0
- package/esm/storage/storage-file.d.ts.map +1 -0
- package/esm/storage/storage-file.js +358 -0
- package/esm/storage/storage-file.js.map +1 -0
- package/esm/storage/storage.d.ts +583 -0
- package/esm/storage/storage.d.ts.map +1 -0
- package/esm/storage/storage.js +945 -0
- package/esm/storage/storage.js.map +1 -0
- package/esm/storage/types.d.ts +909 -0
- package/esm/storage/types.d.ts.map +1 -0
- package/esm/storage/utils/mime.d.ts +33 -0
- package/esm/storage/utils/mime.d.ts.map +1 -0
- package/esm/storage/utils/mime.js +45 -0
- package/esm/storage/utils/mime.js.map +1 -0
- package/esm/store/index.d.ts +25 -0
- package/esm/store/index.d.ts.map +1 -0
- package/esm/store/index.js +52 -0
- package/esm/store/index.js.map +1 -0
- package/esm/utils/app-log.d.ts +8 -0
- package/esm/utils/app-log.d.ts.map +1 -0
- package/esm/utils/app-log.js +7 -0
- package/esm/utils/app-log.js.map +1 -0
- package/esm/utils/cleanup-temp-files.d.ts +5 -0
- package/esm/utils/cleanup-temp-files.d.ts.map +1 -0
- package/esm/utils/database-log.d.ts +25 -0
- package/esm/utils/database-log.d.ts.map +1 -0
- package/esm/utils/database-log.js +43 -0
- package/esm/utils/database-log.js.map +1 -0
- package/esm/utils/download-file.d.ts +3 -0
- package/esm/utils/download-file.d.ts.map +1 -0
- package/esm/utils/environment.d.ts +4 -0
- package/esm/utils/environment.d.ts.map +1 -0
- package/esm/utils/environment.js +6 -0
- package/esm/utils/environment.js.map +1 -0
- package/esm/utils/get-localized.d.ts +10 -0
- package/esm/utils/get-localized.d.ts.map +1 -0
- package/esm/utils/get-localized.js +15 -0
- package/esm/utils/get-localized.js.map +1 -0
- package/esm/utils/index.d.ts +12 -0
- package/esm/utils/index.d.ts.map +1 -0
- package/esm/utils/internal.d.ts +4 -0
- package/esm/utils/internal.d.ts.map +1 -0
- package/esm/utils/paths.d.ts +55 -0
- package/esm/utils/paths.d.ts.map +1 -0
- package/esm/utils/paths.js +89 -0
- package/esm/utils/paths.js.map +1 -0
- package/esm/utils/promise-all-object.d.ts +8 -0
- package/esm/utils/promise-all-object.d.ts.map +1 -0
- package/esm/utils/promise-all-object.js +12 -0
- package/esm/utils/promise-all-object.js.map +1 -0
- package/esm/utils/queue.d.ts +49 -0
- package/esm/utils/queue.d.ts.map +1 -0
- package/esm/utils/queue.js +89 -0
- package/esm/utils/queue.js.map +1 -0
- package/esm/utils/sleep.d.ts +2 -0
- package/esm/utils/sleep.d.ts.map +1 -0
- package/esm/utils/sleep.js +3 -0
- package/esm/utils/sleep.js.map +1 -0
- package/esm/utils/sluggable.d.ts +5 -0
- package/esm/utils/sluggable.d.ts.map +1 -0
- package/esm/utils/sluggable.js +15 -0
- package/esm/utils/sluggable.js.map +1 -0
- package/esm/utils/to-json.d.ts +2 -0
- package/esm/utils/to-json.d.ts.map +1 -0
- package/esm/utils/to-json.js +26 -0
- package/esm/utils/to-json.js.map +1 -0
- package/esm/utils/types.d.ts +22 -0
- package/esm/utils/types.d.ts.map +1 -0
- package/esm/utils/urls.d.ts +21 -0
- package/esm/utils/urls.d.ts.map +1 -0
- package/esm/utils/urls.js +31 -0
- package/esm/utils/urls.js.map +1 -0
- package/esm/validation/database/exists-except-current-id.d.ts +7 -0
- package/esm/validation/database/exists-except-current-id.d.ts.map +1 -0
- package/esm/validation/database/exists-except-current-id.js +23 -0
- package/esm/validation/database/exists-except-current-id.js.map +1 -0
- package/esm/validation/database/exists-except-current-user.d.ts +7 -0
- package/esm/validation/database/exists-except-current-user.d.ts.map +1 -0
- package/esm/validation/database/exists-except-current-user.js +25 -0
- package/esm/validation/database/exists-except-current-user.js.map +1 -0
- package/esm/validation/database/exists.d.ts +7 -0
- package/esm/validation/database/exists.d.ts.map +1 -0
- package/esm/validation/database/exists.js +21 -0
- package/esm/validation/database/exists.js.map +1 -0
- package/esm/validation/database/index.d.ts +12 -0
- package/esm/validation/database/index.d.ts.map +1 -0
- package/esm/validation/database/types.d.ts +68 -0
- package/esm/validation/database/types.d.ts.map +1 -0
- package/esm/validation/database/unique-except-current-id.d.ts +7 -0
- package/esm/validation/database/unique-except-current-id.d.ts.map +1 -0
- package/esm/validation/database/unique-except-current-id.js +23 -0
- package/esm/validation/database/unique-except-current-id.js.map +1 -0
- package/esm/validation/database/unique-except-current-user.d.ts +7 -0
- package/esm/validation/database/unique-except-current-user.d.ts.map +1 -0
- package/esm/validation/database/unique-except-current-user.js +25 -0
- package/esm/validation/database/unique-except-current-user.js.map +1 -0
- package/esm/validation/database/unique.d.ts +7 -0
- package/esm/validation/database/unique.d.ts.map +1 -0
- package/esm/validation/database/unique.js +30 -0
- package/esm/validation/database/unique.js.map +1 -0
- package/esm/validation/file/file.d.ts +22 -0
- package/esm/validation/file/file.d.ts.map +1 -0
- package/esm/validation/file/file.js +60 -0
- package/esm/validation/file/file.js.map +1 -0
- package/esm/validation/file/index.d.ts +6 -0
- package/esm/validation/file/index.d.ts.map +1 -0
- package/esm/validation/index.d.ts +16 -0
- package/esm/validation/index.d.ts.map +1 -0
- package/esm/validation/init.d.ts +7 -0
- package/esm/validation/init.d.ts.map +1 -0
- package/esm/validation/init.js +36 -0
- package/esm/validation/init.js.map +1 -0
- package/esm/validation/plugins/database-plugin.d.ts +14 -0
- package/esm/validation/plugins/database-plugin.d.ts.map +1 -0
- package/esm/validation/plugins/database-plugin.js +95 -0
- package/esm/validation/plugins/database-plugin.js.map +1 -0
- package/esm/validation/plugins/file-plugin.d.ts +11 -0
- package/esm/validation/plugins/file-plugin.d.ts.map +1 -0
- package/esm/validation/plugins/file-plugin.js +17 -0
- package/esm/validation/plugins/file-plugin.js.map +1 -0
- package/esm/validation/plugins/index.d.ts +9 -0
- package/esm/validation/plugins/index.d.ts.map +1 -0
- package/esm/validation/plugins/localized-plugin.d.ts +11 -0
- package/esm/validation/plugins/localized-plugin.d.ts.map +1 -0
- package/esm/validation/plugins/localized-plugin.js +19 -0
- package/esm/validation/plugins/localized-plugin.js.map +1 -0
- package/esm/validation/types.d.ts +87 -0
- package/esm/validation/types.d.ts.map +1 -0
- package/esm/validation/validateAll.d.ts +7 -0
- package/esm/validation/validateAll.d.ts.map +1 -0
- package/esm/validation/validateAll.js +60 -0
- package/esm/validation/validateAll.js.map +1 -0
- package/esm/validation/validators/file-validator.d.ts +46 -0
- package/esm/validation/validators/file-validator.d.ts.map +1 -0
- package/esm/validation/validators/file-validator.js +112 -0
- package/esm/validation/validators/file-validator.js.map +1 -0
- package/esm/validation/validators/index.d.ts +7 -0
- package/esm/validation/validators/index.d.ts.map +1 -0
- package/esm/warlock-config/default-configurations.d.ts +3 -0
- package/esm/warlock-config/default-configurations.d.ts.map +1 -0
- package/esm/warlock-config/default-configurations.js +8 -0
- package/esm/warlock-config/default-configurations.js.map +1 -0
- package/esm/warlock-config/define-config.d.ts +3 -0
- package/esm/warlock-config/define-config.d.ts.map +1 -0
- package/esm/warlock-config/define-config.js +3 -0
- package/esm/warlock-config/define-config.js.map +1 -0
- package/esm/warlock-config/index.d.ts +4 -0
- package/esm/warlock-config/index.d.ts.map +1 -0
- package/esm/warlock-config/types.d.ts +79 -0
- package/esm/warlock-config/types.d.ts.map +1 -0
- package/esm/warlock-config/warlock-config.manager.d.ts +83 -0
- package/esm/warlock-config/warlock-config.manager.d.ts.map +1 -0
- package/esm/warlock-config/warlock-config.manager.js +141 -0
- package/esm/warlock-config/warlock-config.manager.js.map +1 -0
- package/package.json +66 -71
|
@@ -0,0 +1,697 @@
|
|
|
1
|
+
import crypto from'crypto';import {storageDriverContext}from'../context/storage-driver-context.js';import {getMimeType}from'../utils/mime.js';// ============================================================
|
|
2
|
+
// Lazy-loaded S3 SDK Types
|
|
3
|
+
// ============================================================
|
|
4
|
+
/**
|
|
5
|
+
* Cached S3 SDK modules (loaded once, reused)
|
|
6
|
+
*/
|
|
7
|
+
let S3Client;
|
|
8
|
+
let S3Storage;
|
|
9
|
+
let S3Presigner;
|
|
10
|
+
let isModuleExists = null;
|
|
11
|
+
/**
|
|
12
|
+
* Installation instructions for S3 SDK packages
|
|
13
|
+
*/
|
|
14
|
+
const S3_INSTALL_INSTRUCTIONS = `
|
|
15
|
+
Cloud storage requires the AWS S3 SDK packages.
|
|
16
|
+
Install them with:
|
|
17
|
+
|
|
18
|
+
npm install @aws-sdk/client-s3 @aws-sdk/lib-storage @aws-sdk/s3-request-presigner
|
|
19
|
+
|
|
20
|
+
Or with your preferred package manager:
|
|
21
|
+
|
|
22
|
+
pnpm add @aws-sdk/client-s3 @aws-sdk/lib-storage @aws-sdk/s3-request-presigner
|
|
23
|
+
yarn add @aws-sdk/client-s3 @aws-sdk/lib-storage @aws-sdk/s3-request-presigner
|
|
24
|
+
`.trim();
|
|
25
|
+
/**
|
|
26
|
+
*/
|
|
27
|
+
async function loadS3() {
|
|
28
|
+
try {
|
|
29
|
+
// load @aws-sdk/client-s3
|
|
30
|
+
S3Client = await import('@aws-sdk/client-s3');
|
|
31
|
+
// load @aws-sdk/lib-storage
|
|
32
|
+
S3Storage = await import('@aws-sdk/lib-storage');
|
|
33
|
+
// load @aws-sdk/s3-request-presigner
|
|
34
|
+
S3Presigner = await import('@aws-sdk/s3-request-presigner');
|
|
35
|
+
isModuleExists = true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
isModuleExists = false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
loadS3();
|
|
42
|
+
// ============================================================
|
|
43
|
+
// CloudDriver Base Class
|
|
44
|
+
// ============================================================
|
|
45
|
+
/**
|
|
46
|
+
* Base abstract class for all S3-compatible cloud storage drivers
|
|
47
|
+
*
|
|
48
|
+
* This class contains all shared logic for S3-compatible storage services
|
|
49
|
+
* including AWS S3, Cloudflare R2, DigitalOcean Spaces, and others.
|
|
50
|
+
*
|
|
51
|
+
* **Important:** S3 SDK packages are lazy-loaded on first use.
|
|
52
|
+
* Users must install them separately:
|
|
53
|
+
* ```
|
|
54
|
+
* npm install @aws-sdk/client-s3 @aws-sdk/lib-storage @aws-sdk/s3-request-presigner
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* Subclasses must implement:
|
|
58
|
+
* - `name`: Driver identifier (e.g., "s3", "r2", "spaces")
|
|
59
|
+
* - `url()`: Returns the public URL for a file (provider-specific format)
|
|
60
|
+
*/
|
|
61
|
+
class CloudDriver {
|
|
62
|
+
options;
|
|
63
|
+
/**
|
|
64
|
+
* S3-compatible client (lazy-loaded)
|
|
65
|
+
*/
|
|
66
|
+
client;
|
|
67
|
+
/**
|
|
68
|
+
* Retry configuration
|
|
69
|
+
*/
|
|
70
|
+
retryConfig;
|
|
71
|
+
constructor(options) {
|
|
72
|
+
this.options = options;
|
|
73
|
+
if (!isModuleExists) {
|
|
74
|
+
throw new Error(S3_INSTALL_INSTRUCTIONS);
|
|
75
|
+
}
|
|
76
|
+
this.client = new S3Client.S3Client({
|
|
77
|
+
region: this.options.region,
|
|
78
|
+
credentials: {
|
|
79
|
+
accessKeyId: this.options.accessKeyId,
|
|
80
|
+
secretAccessKey: this.options.secretAccessKey,
|
|
81
|
+
},
|
|
82
|
+
...(this.getEndpoint() && { endpoint: this.getEndpoint() }),
|
|
83
|
+
});
|
|
84
|
+
// Initialize retry configuration
|
|
85
|
+
this.retryConfig = {
|
|
86
|
+
maxRetries: this.options.retry?.maxRetries ?? 3,
|
|
87
|
+
initialDelayMs: this.options.retry?.initialDelayMs ?? 1000,
|
|
88
|
+
maxDelayMs: this.options.retry?.maxDelayMs ?? 10000,
|
|
89
|
+
backoffMultiplier: this.options.retry?.backoffMultiplier ?? 2,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get endpoint URL
|
|
94
|
+
* Can be overridden by subclasses for provider-specific endpoints
|
|
95
|
+
*/
|
|
96
|
+
getEndpoint() {
|
|
97
|
+
return this.options.endpoint;
|
|
98
|
+
}
|
|
99
|
+
// ============================================================
|
|
100
|
+
// Helper Methods
|
|
101
|
+
// ============================================================
|
|
102
|
+
/**
|
|
103
|
+
* Apply prefix to location path
|
|
104
|
+
*
|
|
105
|
+
* Priority: context prefix > driver options prefix > no prefix
|
|
106
|
+
* This allows multi-tenant scenarios where context overrides driver config.
|
|
107
|
+
*
|
|
108
|
+
* @param location - Original location path
|
|
109
|
+
* @returns Location with prefix applied if one exists
|
|
110
|
+
*/
|
|
111
|
+
applyPrefix(location) {
|
|
112
|
+
// Check context prefix first (highest priority)
|
|
113
|
+
const contextPrefix = storageDriverContext.getPrefix();
|
|
114
|
+
const prefix = contextPrefix || this.options.prefix;
|
|
115
|
+
if (!prefix) {
|
|
116
|
+
return location;
|
|
117
|
+
}
|
|
118
|
+
const cleanPrefix = prefix.replace(/\/+$/, "");
|
|
119
|
+
const cleanLocation = location.replace(/^\/+/, "");
|
|
120
|
+
// Avoid double-prefixing
|
|
121
|
+
if (cleanLocation.startsWith(cleanPrefix + "/") || cleanLocation === cleanPrefix) {
|
|
122
|
+
return cleanLocation;
|
|
123
|
+
}
|
|
124
|
+
return `${cleanPrefix}/${cleanLocation}`;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Normalize storage path (remove double slashes, sanitize)
|
|
128
|
+
* @internal
|
|
129
|
+
*/
|
|
130
|
+
normalizePath(path) {
|
|
131
|
+
return path
|
|
132
|
+
.replace(/\/+/g, "/") // Remove multiple slashes
|
|
133
|
+
.replace(/^\//, "") // Remove leading slash
|
|
134
|
+
.trim();
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Execute an operation with retry logic
|
|
138
|
+
*
|
|
139
|
+
* Retries on transient errors with exponential backoff.
|
|
140
|
+
*
|
|
141
|
+
* @param operation - Async operation to execute
|
|
142
|
+
* @param operationName - Name for logging
|
|
143
|
+
* @returns Result of the operation
|
|
144
|
+
* @internal
|
|
145
|
+
*/
|
|
146
|
+
async withRetry(operation, operationName = "operation") {
|
|
147
|
+
const { maxRetries, initialDelayMs, backoffMultiplier, maxDelayMs } = this.retryConfig;
|
|
148
|
+
let lastError;
|
|
149
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
150
|
+
try {
|
|
151
|
+
return await operation();
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
lastError = error;
|
|
155
|
+
// Don't retry on the last attempt
|
|
156
|
+
if (attempt === maxRetries - 1) {
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
// Check if error is retryable
|
|
160
|
+
if (!this.isRetryableError(error)) {
|
|
161
|
+
throw error; // Non-retryable error, fail immediately
|
|
162
|
+
}
|
|
163
|
+
// Calculate delay with exponential backoff
|
|
164
|
+
const delayMs = Math.min(initialDelayMs * Math.pow(backoffMultiplier, attempt), maxDelayMs);
|
|
165
|
+
// Wait before retrying
|
|
166
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
throw new Error(`${operationName} failed after ${maxRetries} attempts: ${lastError?.message}`);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Check if an error is retryable
|
|
173
|
+
*
|
|
174
|
+
* Retries on:
|
|
175
|
+
* - Network errors
|
|
176
|
+
* - 5xx server errors
|
|
177
|
+
* - Rate limiting (429)
|
|
178
|
+
* - Timeout errors
|
|
179
|
+
*
|
|
180
|
+
* Does NOT retry on:
|
|
181
|
+
* - 4xx client errors (except 429)
|
|
182
|
+
* - Authentication errors
|
|
183
|
+
* - Not found errors
|
|
184
|
+
*
|
|
185
|
+
* @param error - Error to check
|
|
186
|
+
* @returns true if error is retryable
|
|
187
|
+
* @internal
|
|
188
|
+
*/
|
|
189
|
+
isRetryableError(error) {
|
|
190
|
+
// Network errors
|
|
191
|
+
if (error.code === "ECONNRESET" || error.code === "ETIMEDOUT" || error.code === "ENOTFOUND") {
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
// S3 SDK errors
|
|
195
|
+
if (error.name === "NetworkingError" || error.name === "TimeoutError") {
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
// HTTP status codes
|
|
199
|
+
const statusCode = error.$metadata?.httpStatusCode || error.statusCode;
|
|
200
|
+
if (statusCode) {
|
|
201
|
+
// 5xx server errors are retryable
|
|
202
|
+
if (statusCode >= 500 && statusCode < 600) {
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
// 429 Too Many Requests is retryable
|
|
206
|
+
if (statusCode === 429) {
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
// ============================================================
|
|
213
|
+
// Core File Operations
|
|
214
|
+
// ============================================================
|
|
215
|
+
/**
|
|
216
|
+
* Put file to cloud storage
|
|
217
|
+
*/
|
|
218
|
+
async put(file, location, options) {
|
|
219
|
+
return this.withRetry(async () => {
|
|
220
|
+
const { PutObjectCommand } = S3Client;
|
|
221
|
+
// Apply storage prefix
|
|
222
|
+
location = this.applyPrefix(location);
|
|
223
|
+
const hash = this.calculateHash(file);
|
|
224
|
+
const mimeType = options?.mimeType || this.guessMimeType(location);
|
|
225
|
+
const command = new PutObjectCommand({
|
|
226
|
+
Bucket: this.options.bucket,
|
|
227
|
+
Key: location,
|
|
228
|
+
Body: file,
|
|
229
|
+
ContentType: mimeType,
|
|
230
|
+
CacheControl: options?.cacheControl,
|
|
231
|
+
ContentDisposition: options?.contentDisposition,
|
|
232
|
+
Metadata: options?.metadata,
|
|
233
|
+
ACL: options?.visibility === "public" ? "public-read" : undefined,
|
|
234
|
+
});
|
|
235
|
+
const result = await this.client.send(command);
|
|
236
|
+
return {
|
|
237
|
+
path: location,
|
|
238
|
+
url: this.url(location),
|
|
239
|
+
size: file.length,
|
|
240
|
+
hash,
|
|
241
|
+
mimeType,
|
|
242
|
+
driver: this.name,
|
|
243
|
+
bucket: this.options.bucket,
|
|
244
|
+
region: this.options.region,
|
|
245
|
+
etag: result.ETag,
|
|
246
|
+
versionId: result.VersionId,
|
|
247
|
+
};
|
|
248
|
+
}, "put");
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Put file from a readable stream (for large files)
|
|
252
|
+
* Uses S3 multipart upload for efficient streaming
|
|
253
|
+
*/
|
|
254
|
+
async putStream(stream, location, options) {
|
|
255
|
+
return this.withRetry(async () => {
|
|
256
|
+
const { Upload } = S3Storage;
|
|
257
|
+
// Apply storage prefix
|
|
258
|
+
location = this.applyPrefix(location);
|
|
259
|
+
const mimeType = options?.mimeType || this.guessMimeType(location);
|
|
260
|
+
const upload = new Upload({
|
|
261
|
+
client: this.client,
|
|
262
|
+
params: {
|
|
263
|
+
Bucket: this.options.bucket,
|
|
264
|
+
Key: location,
|
|
265
|
+
Body: stream,
|
|
266
|
+
ContentType: mimeType,
|
|
267
|
+
CacheControl: options?.cacheControl,
|
|
268
|
+
ContentDisposition: options?.contentDisposition,
|
|
269
|
+
Metadata: options?.metadata,
|
|
270
|
+
ACL: options?.visibility === "public" ? "public-read" : undefined,
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
const result = await upload.done();
|
|
274
|
+
// Get file info for size and hash
|
|
275
|
+
const info = await this.getInfo(location);
|
|
276
|
+
return {
|
|
277
|
+
path: location,
|
|
278
|
+
url: this.url(location),
|
|
279
|
+
size: info.size,
|
|
280
|
+
hash: info.etag?.replace(/"/g, "") || "",
|
|
281
|
+
mimeType,
|
|
282
|
+
driver: this.name,
|
|
283
|
+
bucket: this.options.bucket,
|
|
284
|
+
region: this.options.region,
|
|
285
|
+
etag: result.ETag,
|
|
286
|
+
versionId: result.VersionId,
|
|
287
|
+
};
|
|
288
|
+
}, "putStream");
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Get file contents as Buffer
|
|
292
|
+
*/
|
|
293
|
+
async get(location) {
|
|
294
|
+
return this.withRetry(async () => {
|
|
295
|
+
const { GetObjectCommand } = S3Client;
|
|
296
|
+
// Apply storage prefix
|
|
297
|
+
location = this.applyPrefix(location);
|
|
298
|
+
const command = new GetObjectCommand({
|
|
299
|
+
Bucket: this.options.bucket,
|
|
300
|
+
Key: location,
|
|
301
|
+
});
|
|
302
|
+
const result = await this.client.send(command);
|
|
303
|
+
if (!result.Body) {
|
|
304
|
+
throw new Error(`File not found: ${location}`);
|
|
305
|
+
}
|
|
306
|
+
return Buffer.from(await result.Body.transformToByteArray());
|
|
307
|
+
}, "get");
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Get file as a readable stream (for large files)
|
|
311
|
+
*/
|
|
312
|
+
async getStream(location) {
|
|
313
|
+
return this.withRetry(async () => {
|
|
314
|
+
const { GetObjectCommand } = S3Client;
|
|
315
|
+
// Apply storage prefix
|
|
316
|
+
location = this.applyPrefix(location);
|
|
317
|
+
const command = new GetObjectCommand({
|
|
318
|
+
Bucket: this.options.bucket,
|
|
319
|
+
Key: location,
|
|
320
|
+
});
|
|
321
|
+
const result = await this.client.send(command);
|
|
322
|
+
if (!result.Body) {
|
|
323
|
+
throw new Error(`File not found: ${location}`);
|
|
324
|
+
}
|
|
325
|
+
return result.Body;
|
|
326
|
+
}, "getStream");
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Delete a file
|
|
330
|
+
*/
|
|
331
|
+
async delete(location) {
|
|
332
|
+
return this.withRetry(async () => {
|
|
333
|
+
const { DeleteObjectCommand } = S3Client;
|
|
334
|
+
// Apply storage prefix
|
|
335
|
+
location = this.applyPrefix(location);
|
|
336
|
+
const command = new DeleteObjectCommand({
|
|
337
|
+
Bucket: this.options.bucket,
|
|
338
|
+
Key: location,
|
|
339
|
+
});
|
|
340
|
+
await this.client.send(command);
|
|
341
|
+
return true;
|
|
342
|
+
}, "delete");
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Delete multiple files at once (uses batch delete for efficiency)
|
|
346
|
+
*/
|
|
347
|
+
async deleteMany(locations) {
|
|
348
|
+
if (locations.length === 0) {
|
|
349
|
+
return [];
|
|
350
|
+
}
|
|
351
|
+
return this.withRetry(async () => {
|
|
352
|
+
const { DeleteObjectsCommand } = S3Client;
|
|
353
|
+
// Apply storage prefix to all locations
|
|
354
|
+
const prefixedLocations = locations.map((loc) => this.applyPrefix(loc));
|
|
355
|
+
const command = new DeleteObjectsCommand({
|
|
356
|
+
Bucket: this.options.bucket,
|
|
357
|
+
Delete: {
|
|
358
|
+
Objects: prefixedLocations.map((Key) => ({ Key })),
|
|
359
|
+
Quiet: false,
|
|
360
|
+
},
|
|
361
|
+
});
|
|
362
|
+
const result = await this.client.send(command);
|
|
363
|
+
const results = [];
|
|
364
|
+
// Process successful deletes
|
|
365
|
+
for (const deleted of result.Deleted || []) {
|
|
366
|
+
if (deleted.Key) {
|
|
367
|
+
results.push({ location: deleted.Key, deleted: true });
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
// Process errors
|
|
371
|
+
for (const error of result.Errors || []) {
|
|
372
|
+
if (error.Key) {
|
|
373
|
+
results.push({
|
|
374
|
+
location: error.Key,
|
|
375
|
+
deleted: false,
|
|
376
|
+
error: error.Message || "Unknown error",
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return results;
|
|
381
|
+
}, "deleteMany");
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Delete directory (recursively deletes all objects with matching prefix)
|
|
385
|
+
*
|
|
386
|
+
* S3/R2 doesn't have true directories - only key prefixes.
|
|
387
|
+
* This method lists all objects with the prefix and deletes them in batches.
|
|
388
|
+
*
|
|
389
|
+
* @param directoryPath - Directory prefix to delete
|
|
390
|
+
* @returns true when all objects are deleted
|
|
391
|
+
*/
|
|
392
|
+
async deleteDirectory(directoryPath) {
|
|
393
|
+
// Apply storage prefix
|
|
394
|
+
directoryPath = this.applyPrefix(directoryPath);
|
|
395
|
+
// Ensure directory path ends with / for proper prefix matching
|
|
396
|
+
const prefix = directoryPath.endsWith("/") ? directoryPath : `${directoryPath}/`;
|
|
397
|
+
let hasMore = true;
|
|
398
|
+
while (hasMore) {
|
|
399
|
+
// List up to 1000 objects (S3/R2 max per request)
|
|
400
|
+
const objects = await this.list(prefix, {
|
|
401
|
+
limit: 1000,
|
|
402
|
+
recursive: true,
|
|
403
|
+
});
|
|
404
|
+
if (objects.length === 0) {
|
|
405
|
+
break;
|
|
406
|
+
}
|
|
407
|
+
// Filter out directories (we only delete files)
|
|
408
|
+
const filePaths = objects.filter((obj) => !obj.isDirectory).map((obj) => obj.path);
|
|
409
|
+
if (filePaths.length === 0) {
|
|
410
|
+
break;
|
|
411
|
+
}
|
|
412
|
+
// Delete batch (deleteMany already has prefix applied, so paths already have it)
|
|
413
|
+
// Note: We pass the paths as-is since they already include the prefix from list()
|
|
414
|
+
await this.deleteMany(filePaths);
|
|
415
|
+
// Continue if we got full batch (might be more)
|
|
416
|
+
hasMore = objects.length >= 1000;
|
|
417
|
+
}
|
|
418
|
+
return true;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Check if file exists
|
|
422
|
+
*/
|
|
423
|
+
async exists(location) {
|
|
424
|
+
// No retry for exists - it should be fast and failure means non-existent
|
|
425
|
+
try {
|
|
426
|
+
const { HeadObjectCommand } = S3Client;
|
|
427
|
+
// Apply storage prefix
|
|
428
|
+
location = this.applyPrefix(location);
|
|
429
|
+
const command = new HeadObjectCommand({
|
|
430
|
+
Bucket: this.options.bucket,
|
|
431
|
+
Key: location,
|
|
432
|
+
});
|
|
433
|
+
await this.client.send(command);
|
|
434
|
+
return true;
|
|
435
|
+
}
|
|
436
|
+
catch {
|
|
437
|
+
return false;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
// ============================================================
|
|
441
|
+
// URL Operations
|
|
442
|
+
// ============================================================
|
|
443
|
+
/**
|
|
444
|
+
* Get a temporary presigned URL (alias for getPresignedUrl)
|
|
445
|
+
*/
|
|
446
|
+
async temporaryUrl(location, expiresIn = 3600) {
|
|
447
|
+
return this.getPresignedUrl(location, { expiresIn });
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Get presigned URL for downloading
|
|
451
|
+
*/
|
|
452
|
+
async getPresignedUrl(location, options) {
|
|
453
|
+
return this.withRetry(async () => {
|
|
454
|
+
const { GetObjectCommand } = S3Client;
|
|
455
|
+
const { getSignedUrl } = S3Presigner;
|
|
456
|
+
// Apply storage prefix
|
|
457
|
+
location = this.applyPrefix(location);
|
|
458
|
+
const command = new GetObjectCommand({
|
|
459
|
+
Bucket: this.options.bucket,
|
|
460
|
+
Key: location,
|
|
461
|
+
});
|
|
462
|
+
return getSignedUrl(this.client, command, {
|
|
463
|
+
expiresIn: options?.expiresIn || 3600,
|
|
464
|
+
});
|
|
465
|
+
}, "getPresignedUrl");
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Get presigned URL for uploading
|
|
469
|
+
*/
|
|
470
|
+
async getPresignedUploadUrl(location, options) {
|
|
471
|
+
return this.withRetry(async () => {
|
|
472
|
+
const { PutObjectCommand } = S3Client;
|
|
473
|
+
const { getSignedUrl } = S3Presigner;
|
|
474
|
+
// Apply storage prefix
|
|
475
|
+
location = this.applyPrefix(location);
|
|
476
|
+
const command = new PutObjectCommand({
|
|
477
|
+
Bucket: this.options.bucket,
|
|
478
|
+
Key: location,
|
|
479
|
+
ContentType: options?.contentType,
|
|
480
|
+
Metadata: options?.metadata,
|
|
481
|
+
});
|
|
482
|
+
return getSignedUrl(this.client, command, {
|
|
483
|
+
expiresIn: options?.expiresIn || 3600,
|
|
484
|
+
});
|
|
485
|
+
}, "getPresignedUploadUrl");
|
|
486
|
+
}
|
|
487
|
+
// ============================================================
|
|
488
|
+
// Metadata Operations
|
|
489
|
+
// ============================================================
|
|
490
|
+
/**
|
|
491
|
+
* Get file info/metadata without downloading
|
|
492
|
+
*/
|
|
493
|
+
async getInfo(location) {
|
|
494
|
+
return this.withRetry(async () => {
|
|
495
|
+
const { HeadObjectCommand } = S3Client;
|
|
496
|
+
// Apply storage prefix
|
|
497
|
+
location = this.applyPrefix(location);
|
|
498
|
+
const command = new HeadObjectCommand({
|
|
499
|
+
Bucket: this.options.bucket,
|
|
500
|
+
Key: location,
|
|
501
|
+
});
|
|
502
|
+
const result = await this.client.send(command);
|
|
503
|
+
const name = location.split("/").pop() || "";
|
|
504
|
+
return {
|
|
505
|
+
path: location,
|
|
506
|
+
name,
|
|
507
|
+
size: result.ContentLength || 0,
|
|
508
|
+
isDirectory: false,
|
|
509
|
+
lastModified: result.LastModified,
|
|
510
|
+
mimeType: result.ContentType || this.guessMimeType(location),
|
|
511
|
+
etag: result.ETag,
|
|
512
|
+
storageClass: result.StorageClass,
|
|
513
|
+
};
|
|
514
|
+
}, "getInfo");
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* Get file size in bytes (shortcut for getInfo().size)
|
|
518
|
+
*/
|
|
519
|
+
async size(location) {
|
|
520
|
+
const info = await this.getInfo(location);
|
|
521
|
+
return info.size;
|
|
522
|
+
}
|
|
523
|
+
// ============================================================
|
|
524
|
+
// File Operations
|
|
525
|
+
// ============================================================
|
|
526
|
+
/**
|
|
527
|
+
* Copy file to a new location
|
|
528
|
+
*/
|
|
529
|
+
async copy(from, to) {
|
|
530
|
+
return this.withRetry(async () => {
|
|
531
|
+
const { CopyObjectCommand, HeadObjectCommand } = S3Client;
|
|
532
|
+
// Apply storage prefix to both paths
|
|
533
|
+
from = this.applyPrefix(from);
|
|
534
|
+
to = this.applyPrefix(to);
|
|
535
|
+
const command = new CopyObjectCommand({
|
|
536
|
+
Bucket: this.options.bucket,
|
|
537
|
+
CopySource: `${this.options.bucket}/${from}`,
|
|
538
|
+
Key: to,
|
|
539
|
+
});
|
|
540
|
+
const result = await this.client.send(command);
|
|
541
|
+
// Get file metadata
|
|
542
|
+
const headCommand = new HeadObjectCommand({
|
|
543
|
+
Bucket: this.options.bucket,
|
|
544
|
+
Key: to,
|
|
545
|
+
});
|
|
546
|
+
const headResult = await this.client.send(headCommand);
|
|
547
|
+
return {
|
|
548
|
+
path: to,
|
|
549
|
+
url: this.url(to),
|
|
550
|
+
size: headResult.ContentLength || 0,
|
|
551
|
+
hash: headResult.ETag?.replace(/"/g, "") || "",
|
|
552
|
+
mimeType: headResult.ContentType || this.guessMimeType(to),
|
|
553
|
+
driver: this.name,
|
|
554
|
+
bucket: this.options.bucket,
|
|
555
|
+
region: this.options.region,
|
|
556
|
+
etag: result.CopyObjectResult?.ETag,
|
|
557
|
+
versionId: result.VersionId,
|
|
558
|
+
};
|
|
559
|
+
}, "copy");
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Move file to a new location
|
|
563
|
+
*/
|
|
564
|
+
async move(from, to) {
|
|
565
|
+
const file = await this.copy(from, to);
|
|
566
|
+
await this.delete(from);
|
|
567
|
+
return file;
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* List files in a directory
|
|
571
|
+
*/
|
|
572
|
+
async list(directory, options) {
|
|
573
|
+
return this.withRetry(async () => {
|
|
574
|
+
const { ListObjectsV2Command } = S3Client;
|
|
575
|
+
// Apply storage prefix
|
|
576
|
+
directory = this.applyPrefix(directory);
|
|
577
|
+
const command = new ListObjectsV2Command({
|
|
578
|
+
Bucket: this.options.bucket,
|
|
579
|
+
Prefix: directory,
|
|
580
|
+
MaxKeys: options?.limit,
|
|
581
|
+
ContinuationToken: options?.cursor,
|
|
582
|
+
Delimiter: options?.recursive ? undefined : "/",
|
|
583
|
+
});
|
|
584
|
+
const result = await this.client.send(command);
|
|
585
|
+
const files = [];
|
|
586
|
+
// Add files
|
|
587
|
+
for (const object of result.Contents || []) {
|
|
588
|
+
if (!object.Key)
|
|
589
|
+
continue;
|
|
590
|
+
files.push({
|
|
591
|
+
path: object.Key,
|
|
592
|
+
name: object.Key.split("/").pop() || "",
|
|
593
|
+
size: object.Size || 0,
|
|
594
|
+
isDirectory: false,
|
|
595
|
+
lastModified: object.LastModified,
|
|
596
|
+
etag: object.ETag,
|
|
597
|
+
storageClass: object.StorageClass,
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
// Add directories
|
|
601
|
+
for (const prefix of result.CommonPrefixes || []) {
|
|
602
|
+
if (!prefix.Prefix)
|
|
603
|
+
continue;
|
|
604
|
+
files.push({
|
|
605
|
+
path: prefix.Prefix,
|
|
606
|
+
name: prefix.Prefix.split("/").filter(Boolean).pop() || "",
|
|
607
|
+
size: 0,
|
|
608
|
+
isDirectory: true,
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
return files;
|
|
612
|
+
}, "list");
|
|
613
|
+
}
|
|
614
|
+
// ============================================================
|
|
615
|
+
// Cloud-Specific Operations
|
|
616
|
+
// ============================================================
|
|
617
|
+
/**
|
|
618
|
+
* Get bucket name
|
|
619
|
+
*/
|
|
620
|
+
getBucket() {
|
|
621
|
+
return this.options.bucket;
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Get region
|
|
625
|
+
*/
|
|
626
|
+
getRegion() {
|
|
627
|
+
return this.options.region;
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Set storage class (e.g., STANDARD, GLACIER, etc.)
|
|
631
|
+
*/
|
|
632
|
+
async setStorageClass(location, storageClass) {
|
|
633
|
+
return this.withRetry(async () => {
|
|
634
|
+
const { CopyObjectCommand } = S3Client;
|
|
635
|
+
// Apply storage prefix
|
|
636
|
+
location = this.applyPrefix(location);
|
|
637
|
+
const command = new CopyObjectCommand({
|
|
638
|
+
Bucket: this.options.bucket,
|
|
639
|
+
CopySource: `${this.options.bucket}/${location}`,
|
|
640
|
+
Key: location,
|
|
641
|
+
StorageClass: storageClass,
|
|
642
|
+
MetadataDirective: "COPY",
|
|
643
|
+
});
|
|
644
|
+
await this.client.send(command);
|
|
645
|
+
}, "setStorageClass");
|
|
646
|
+
}
|
|
647
|
+
/**
|
|
648
|
+
* Set file visibility (public or private)
|
|
649
|
+
*/
|
|
650
|
+
async setVisibility(location, visibility) {
|
|
651
|
+
return this.withRetry(async () => {
|
|
652
|
+
const { PutObjectAclCommand } = S3Client;
|
|
653
|
+
// Apply storage prefix
|
|
654
|
+
location = this.applyPrefix(location);
|
|
655
|
+
const command = new PutObjectAclCommand({
|
|
656
|
+
Bucket: this.options.bucket,
|
|
657
|
+
Key: location,
|
|
658
|
+
ACL: visibility === "public" ? "public-read" : "private",
|
|
659
|
+
});
|
|
660
|
+
await this.client.send(command);
|
|
661
|
+
}, "setVisibility");
|
|
662
|
+
}
|
|
663
|
+
/**
|
|
664
|
+
* Get file visibility
|
|
665
|
+
*/
|
|
666
|
+
async getVisibility(location) {
|
|
667
|
+
return this.withRetry(async () => {
|
|
668
|
+
const { GetObjectAclCommand } = S3Client;
|
|
669
|
+
// Apply storage prefix
|
|
670
|
+
location = this.applyPrefix(location);
|
|
671
|
+
const command = new GetObjectAclCommand({
|
|
672
|
+
Bucket: this.options.bucket,
|
|
673
|
+
Key: location,
|
|
674
|
+
});
|
|
675
|
+
const result = await this.client.send(command);
|
|
676
|
+
// Check if any grant allows public read
|
|
677
|
+
const hasPublicRead = result.Grants?.some((grant) => grant.Grantee?.URI === "http://acs.amazonaws.com/groups/global/AllUsers" &&
|
|
678
|
+
grant.Permission === "READ");
|
|
679
|
+
return hasPublicRead ? "public" : "private";
|
|
680
|
+
}, "getVisibility");
|
|
681
|
+
}
|
|
682
|
+
// ============================================================
|
|
683
|
+
// Utilities
|
|
684
|
+
// ============================================================
|
|
685
|
+
/**
|
|
686
|
+
* Calculate SHA-256 hash
|
|
687
|
+
*/
|
|
688
|
+
calculateHash(buffer) {
|
|
689
|
+
return crypto.createHash("sha256").update(new Uint8Array(buffer)).digest("hex");
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* Guess MIME type from file extension
|
|
693
|
+
*/
|
|
694
|
+
guessMimeType(location) {
|
|
695
|
+
return getMimeType(location);
|
|
696
|
+
}
|
|
697
|
+
}export{CloudDriver};//# sourceMappingURL=cloud-driver.js.map
|