@camstack/core 0.1.14 → 0.1.16
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/dist/addon/addon-api-factory.d.ts +36 -0
- package/dist/addon/addon-api-factory.d.ts.map +1 -0
- package/dist/addon-routes/addon-route-registry.d.ts +38 -0
- package/dist/addon-routes/addon-route-registry.d.ts.map +1 -0
- package/dist/auth/api-key-manager.d.ts +27 -0
- package/dist/auth/api-key-manager.d.ts.map +1 -0
- package/dist/auth/auth-manager.d.ts +47 -0
- package/dist/auth/auth-manager.d.ts.map +1 -0
- package/dist/auth/parse-record.d.ts +19 -0
- package/dist/auth/parse-record.d.ts.map +1 -0
- package/dist/auth/scoped-token-manager.d.ts +18 -0
- package/dist/auth/scoped-token-manager.d.ts.map +1 -0
- package/dist/auth/user-manager.d.ts +34 -0
- package/dist/auth/user-manager.d.ts.map +1 -0
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts +54 -0
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts.map +1 -0
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +226 -0
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js.map +1 -0
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +218 -0
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs.map +1 -0
- package/dist/builtins/addon-pages-aggregator/index.d.ts +2 -0
- package/dist/builtins/addon-pages-aggregator/index.d.ts.map +1 -0
- package/dist/builtins/addon-pages-aggregator/index.js +7 -0
- package/dist/builtins/addon-pages-aggregator/index.mjs +2 -0
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts +33 -0
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts.map +1 -0
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +202 -0
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js.map +1 -0
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +194 -0
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs.map +1 -0
- package/dist/builtins/addon-widgets-aggregator/index.d.ts +2 -0
- package/dist/builtins/addon-widgets-aggregator/index.d.ts.map +1 -0
- package/dist/builtins/addon-widgets-aggregator/index.js +7 -0
- package/dist/builtins/addon-widgets-aggregator/index.mjs +2 -0
- package/dist/builtins/alerts/alerts.addon.d.ts +82 -0
- package/dist/builtins/alerts/alerts.addon.d.ts.map +1 -0
- package/dist/builtins/alerts/alerts.addon.js +603 -0
- package/dist/builtins/alerts/alerts.addon.js.map +1 -0
- package/dist/builtins/alerts/alerts.addon.mjs +597 -0
- package/dist/builtins/alerts/alerts.addon.mjs.map +1 -0
- package/dist/builtins/alerts/index.d.ts +2 -0
- package/dist/builtins/alerts/index.d.ts.map +1 -0
- package/dist/builtins/alerts/index.js +3 -0
- package/dist/builtins/alerts/index.mjs +2 -0
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.d.ts +8 -0
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.js +56 -0
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.js.map +1 -0
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.mjs +50 -0
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/auth-orchestrator/index.d.ts +2 -0
- package/dist/builtins/auth-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/auth-orchestrator/index.js +7 -0
- package/dist/builtins/auth-orchestrator/index.mjs +2 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts +148 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +7639 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js.map +1 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +7627 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/backup-orchestrator/cron-helpers.d.ts +24 -0
- package/dist/builtins/backup-orchestrator/cron-helpers.d.ts.map +1 -0
- package/dist/builtins/backup-orchestrator/destination-policy.d.ts +73 -0
- package/dist/builtins/backup-orchestrator/destination-policy.d.ts.map +1 -0
- package/dist/builtins/backup-orchestrator/download-helpers.d.ts +13 -0
- package/dist/builtins/backup-orchestrator/download-helpers.d.ts.map +1 -0
- package/dist/builtins/backup-orchestrator/index.d.ts +3 -0
- package/dist/builtins/backup-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/backup-orchestrator/index.js +7 -0
- package/dist/builtins/backup-orchestrator/index.mjs +2 -0
- package/dist/builtins/backup-orchestrator/manifest-store.d.ts +78 -0
- package/dist/builtins/backup-orchestrator/manifest-store.d.ts.map +1 -0
- package/dist/builtins/console-logging/console-destination.d.ts +14 -0
- package/dist/builtins/console-logging/console-destination.d.ts.map +1 -0
- package/dist/builtins/console-logging/console-logging.addon.d.ts +26 -0
- package/dist/builtins/console-logging/console-logging.addon.d.ts.map +1 -0
- package/dist/builtins/console-logging/index.d.ts +4 -0
- package/dist/builtins/console-logging/index.d.ts.map +1 -0
- package/dist/builtins/console-logging/index.js +106 -0
- package/dist/builtins/console-logging/index.js.map +1 -0
- package/dist/builtins/console-logging/index.mjs +97 -0
- package/dist/builtins/console-logging/index.mjs.map +1 -0
- package/dist/builtins/device-manager/device-event-propagator.d.ts +27 -0
- package/dist/builtins/device-manager/device-event-propagator.d.ts.map +1 -0
- package/dist/builtins/device-manager/device-manager.addon.d.ts +259 -0
- package/dist/builtins/device-manager/device-manager.addon.d.ts.map +1 -0
- package/dist/builtins/device-manager/device-manager.addon.js +2153 -0
- package/dist/builtins/device-manager/device-manager.addon.js.map +1 -0
- package/dist/builtins/device-manager/device-manager.addon.mjs +2147 -0
- package/dist/builtins/device-manager/device-manager.addon.mjs.map +1 -0
- package/dist/builtins/device-manager/index.d.ts +3 -0
- package/dist/builtins/device-manager/index.d.ts.map +1 -0
- package/dist/builtins/device-manager/index.js +7 -0
- package/dist/builtins/device-manager/index.mjs +2 -0
- package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts +45 -0
- package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts.map +1 -0
- package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts +16 -0
- package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts.map +1 -0
- package/dist/builtins/hub-forwarder/index.d.ts +4 -0
- package/dist/builtins/hub-forwarder/index.d.ts.map +1 -0
- package/dist/builtins/hub-forwarder/index.js +156 -0
- package/dist/builtins/hub-forwarder/index.js.map +1 -0
- package/dist/builtins/hub-forwarder/index.mjs +147 -0
- package/dist/builtins/hub-forwarder/index.mjs.map +1 -0
- package/dist/builtins/local-auth/auth-schema.d.ts +12 -0
- package/dist/builtins/local-auth/auth-schema.d.ts.map +1 -0
- package/dist/builtins/local-auth/index.d.ts +2 -0
- package/dist/builtins/local-auth/index.d.ts.map +1 -0
- package/dist/builtins/local-auth/index.js +3 -0
- package/dist/builtins/local-auth/index.mjs +2 -0
- package/dist/builtins/local-auth/local-auth.addon.d.ts +17 -0
- package/dist/builtins/local-auth/local-auth.addon.d.ts.map +1 -0
- package/dist/builtins/local-auth/local-auth.addon.js +6895 -0
- package/dist/builtins/local-auth/local-auth.addon.js.map +1 -0
- package/dist/builtins/local-auth/local-auth.addon.mjs +6885 -0
- package/dist/builtins/local-auth/local-auth.addon.mjs.map +1 -0
- package/dist/builtins/local-network/index.d.ts +3 -0
- package/dist/builtins/local-network/index.d.ts.map +1 -0
- package/dist/builtins/local-network/index.js +9 -0
- package/dist/builtins/local-network/index.mjs +2 -0
- package/dist/builtins/local-network/local-network.addon.d.ts +102 -0
- package/dist/builtins/local-network/local-network.addon.d.ts.map +1 -0
- package/dist/builtins/local-network/local-network.addon.js +404 -0
- package/dist/builtins/local-network/local-network.addon.js.map +1 -0
- package/dist/builtins/local-network/local-network.addon.mjs +392 -0
- package/dist/builtins/local-network/local-network.addon.mjs.map +1 -0
- package/dist/builtins/mesh-orchestrator/index.d.ts +2 -0
- package/dist/builtins/mesh-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/mesh-orchestrator/index.js +7 -0
- package/dist/builtins/mesh-orchestrator/index.mjs +2 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.d.ts +9 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.js +83 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.js.map +1 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.mjs +77 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/native-metrics/index.d.ts +3 -0
- package/dist/builtins/native-metrics/index.d.ts.map +1 -0
- package/dist/builtins/native-metrics/native-metrics-provider.d.ts +49 -0
- package/dist/builtins/native-metrics/native-metrics-provider.d.ts.map +1 -0
- package/dist/builtins/native-metrics/native-metrics.addon.d.ts +74 -0
- package/dist/builtins/native-metrics/native-metrics.addon.d.ts.map +1 -0
- package/dist/builtins/native-metrics/native-metrics.addon.js +924 -0
- package/dist/builtins/native-metrics/native-metrics.addon.js.map +1 -0
- package/dist/builtins/native-metrics/native-metrics.addon.mjs +916 -0
- package/dist/builtins/native-metrics/native-metrics.addon.mjs.map +1 -0
- package/dist/builtins/platform-probe/index.d.ts +12 -0
- package/dist/builtins/platform-probe/index.d.ts.map +1 -0
- package/dist/builtins/platform-probe/index.js +539 -0
- package/dist/builtins/platform-probe/index.js.map +1 -0
- package/dist/builtins/platform-probe/index.mjs +530 -0
- package/dist/builtins/platform-probe/index.mjs.map +1 -0
- package/dist/builtins/platform-probe/inference-config-resolver.d.ts +30 -0
- package/dist/builtins/platform-probe/inference-config-resolver.d.ts.map +1 -0
- package/dist/builtins/platform-probe/platform-scorer.d.ts +22 -0
- package/dist/builtins/platform-probe/platform-scorer.d.ts.map +1 -0
- package/dist/builtins/remote-access-orchestrator/index.d.ts +2 -0
- package/dist/builtins/remote-access-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/remote-access-orchestrator/index.js +7 -0
- package/dist/builtins/remote-access-orchestrator/index.mjs +2 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts +9 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +72 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js.map +1 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +66 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/snapshot/index.d.ts +3 -0
- package/dist/builtins/snapshot/index.d.ts.map +1 -0
- package/dist/builtins/snapshot/index.js +494 -0
- package/dist/builtins/snapshot/index.js.map +1 -0
- package/dist/builtins/snapshot/index.mjs +488 -0
- package/dist/builtins/snapshot/index.mjs.map +1 -0
- package/dist/builtins/snapshot/snapshot.addon.d.ts +121 -0
- package/dist/builtins/snapshot/snapshot.addon.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/config-store.d.ts +9 -0
- package/dist/builtins/sqlite-storage/config-store.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/device-store.d.ts +24 -0
- package/dist/builtins/sqlite-storage/device-store.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts +87 -0
- package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts +32 -2
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +311 -205
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js.map +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +305 -7
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs.map +1 -1
- package/dist/builtins/sqlite-storage/index.d.ts +12 -4
- package/dist/builtins/sqlite-storage/index.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/index.js +258 -1097
- package/dist/builtins/sqlite-storage/index.js.map +1 -1
- package/dist/builtins/sqlite-storage/index.mjs +268 -28
- package/dist/builtins/sqlite-storage/index.mjs.map +1 -1
- package/dist/builtins/sqlite-storage/integration-registry.d.ts +28 -0
- package/dist/builtins/sqlite-storage/integration-registry.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/settings-store.d.ts +40 -0
- package/dist/builtins/sqlite-storage/settings-store.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/sql-schema.d.ts +33 -0
- package/dist/builtins/sqlite-storage/sql-schema.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +94 -0
- package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +15 -2
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +588 -417
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js.map +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +582 -7
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs.map +1 -1
- package/dist/builtins/storage-orchestrator/index.d.ts +7 -0
- package/dist/builtins/storage-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/storage-orchestrator/index.js +9 -0
- package/dist/builtins/storage-orchestrator/index.mjs +2 -0
- package/dist/builtins/storage-orchestrator/location-store.d.ts +50 -0
- package/dist/builtins/storage-orchestrator/location-store.d.ts.map +1 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +60 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +755 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js.map +1 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +746 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts +121 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts.map +1 -0
- package/dist/builtins/system-backup/system-backup.service.d.ts +138 -0
- package/dist/builtins/system-backup/system-backup.service.d.ts.map +1 -0
- package/dist/builtins/system-config/index.d.ts +2 -0
- package/dist/builtins/system-config/index.d.ts.map +1 -0
- package/dist/builtins/system-config/index.js +7 -0
- package/dist/builtins/system-config/index.mjs +2 -0
- package/dist/builtins/system-config/system-config.addon.d.ts +11 -0
- package/dist/builtins/system-config/system-config.addon.d.ts.map +1 -0
- package/dist/builtins/system-config/system-config.addon.js +234 -0
- package/dist/builtins/system-config/system-config.addon.js.map +1 -0
- package/dist/builtins/system-config/system-config.addon.mjs +228 -0
- package/dist/builtins/system-config/system-config.addon.mjs.map +1 -0
- package/dist/builtins/turn-orchestrator/index.d.ts +2 -0
- package/dist/builtins/turn-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/turn-orchestrator/index.js +7 -0
- package/dist/builtins/turn-orchestrator/index.mjs +2 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.d.ts +10 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.js +78 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.js.map +1 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.mjs +72 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/winston-logging/index.d.ts +4 -30
- package/dist/builtins/winston-logging/index.d.ts.map +1 -0
- package/dist/builtins/winston-logging/index.js +153 -180
- package/dist/builtins/winston-logging/index.js.map +1 -1
- package/dist/builtins/winston-logging/index.mjs +144 -8
- package/dist/builtins/winston-logging/index.mjs.map +1 -1
- package/dist/builtins/winston-logging/winston-destination.d.ts +22 -0
- package/dist/builtins/winston-logging/winston-destination.d.ts.map +1 -0
- package/dist/builtins/winston-logging/winston-logging.addon.d.ts +20 -0
- package/dist/builtins/winston-logging/winston-logging.addon.d.ts.map +1 -0
- package/dist/chunk-C13QxCFV.js +50 -0
- package/dist/chunk-hT5z_Zn9.mjs +35 -0
- package/dist/download/model-download-service.d.ts +42 -0
- package/dist/download/model-download-service.d.ts.map +1 -0
- package/dist/download/model-downloader.d.ts +32 -0
- package/dist/download/model-downloader.d.ts.map +1 -0
- package/dist/events/event-bus.d.ts +11 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/system-event-bus.d.ts +15 -0
- package/dist/events/system-event-bus.d.ts.map +1 -0
- package/dist/feature/feature-manager.d.ts +12 -0
- package/dist/feature/feature-manager.d.ts.map +1 -0
- package/dist/formatter-C-5An4Bl.mjs +164 -0
- package/dist/formatter-C-5An4Bl.mjs.map +1 -0
- package/dist/formatter-Dr_6NNZc.js +169 -0
- package/dist/formatter-Dr_6NNZc.js.map +1 -0
- package/dist/index.d.ts +76 -1137
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7761 -7017
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7699 -3798
- package/dist/index.mjs.map +1 -1
- package/dist/lifecycle/lifecycle-state-machine.d.ts +29 -0
- package/dist/lifecycle/lifecycle-state-machine.d.ts.map +1 -0
- package/dist/logging/formatter.d.ts +31 -0
- package/dist/logging/formatter.d.ts.map +1 -0
- package/dist/logging/log-manager.d.ts +52 -0
- package/dist/logging/log-manager.d.ts.map +1 -0
- package/dist/logging/log-ring-buffer.d.ts +48 -0
- package/dist/logging/log-ring-buffer.d.ts.map +1 -0
- package/dist/logging/scoped-logger.d.ts +18 -0
- package/dist/logging/scoped-logger.d.ts.map +1 -0
- package/dist/network/network-quality.d.ts +12 -0
- package/dist/network/network-quality.d.ts.map +1 -0
- package/dist/notification/notification-service.d.ts +38 -0
- package/dist/notification/notification-service.d.ts.map +1 -0
- package/dist/notification/toast-service.d.ts +23 -0
- package/dist/notification/toast-service.d.ts.map +1 -0
- package/dist/pipeline/engine-manager-resolver.d.ts +16 -0
- package/dist/pipeline/engine-manager-resolver.d.ts.map +1 -0
- package/dist/pipeline/pipeline-runner.d.ts +9 -0
- package/dist/pipeline/pipeline-runner.d.ts.map +1 -0
- package/dist/pipeline/pipeline-validator.d.ts +14 -0
- package/dist/pipeline/pipeline-validator.d.ts.map +1 -0
- package/dist/process/resource-monitor.d.ts +12 -0
- package/dist/process/resource-monitor.d.ts.map +1 -0
- package/dist/python/python-env-manager.d.ts +13 -0
- package/dist/python/python-env-manager.d.ts.map +1 -0
- package/dist/repl/interfaces.d.ts +32 -0
- package/dist/repl/interfaces.d.ts.map +1 -0
- package/dist/repl/repl-engine.d.ts +9 -0
- package/dist/repl/repl-engine.d.ts.map +1 -0
- package/dist/resource-monitor-CmuWlmap.js +76 -0
- package/dist/resource-monitor-CmuWlmap.js.map +1 -0
- package/dist/resource-monitor-DcQdKGYU.mjs +59 -0
- package/dist/resource-monitor-DcQdKGYU.mjs.map +1 -0
- package/dist/storage/fs-storage-backend.d.ts +41 -0
- package/dist/storage/fs-storage-backend.d.ts.map +1 -0
- package/dist/storage/storage-location-manager.d.ts +24 -0
- package/dist/storage/storage-location-manager.d.ts.map +1 -0
- package/dist/storage/storage-manager.d.ts +77 -0
- package/dist/storage/storage-manager.d.ts.map +1 -0
- package/dist/tls/cert-manager.d.ts +27 -0
- package/dist/tls/cert-manager.d.ts.map +1 -0
- package/dist/tls/index.d.ts +2 -0
- package/dist/tls/index.d.ts.map +1 -0
- package/package.json +230 -13
- package/dist/builtins/local-backup/index.d.mts +0 -42
- package/dist/builtins/local-backup/index.d.ts +0 -42
- package/dist/builtins/local-backup/index.js +0 -188
- package/dist/builtins/local-backup/index.js.map +0 -1
- package/dist/builtins/local-backup/index.mjs +0 -10
- package/dist/builtins/local-backup/index.mjs.map +0 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.mts +0 -2
- package/dist/builtins/sqlite-storage/index.d.mts +0 -4
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.mts +0 -2
- package/dist/builtins/winston-logging/index.d.mts +0 -30
- package/dist/chunk-2F3XZYRW.mjs +0 -89
- package/dist/chunk-2F3XZYRW.mjs.map +0 -1
- package/dist/chunk-LQFPAEQF.mjs +0 -147
- package/dist/chunk-LQFPAEQF.mjs.map +0 -1
- package/dist/chunk-R3DIIBBX.mjs +0 -532
- package/dist/chunk-R3DIIBBX.mjs.map +0 -1
- package/dist/chunk-SMNR44VG.mjs +0 -386
- package/dist/chunk-SMNR44VG.mjs.map +0 -1
- package/dist/chunk-SO4LROOT.mjs +0 -150
- package/dist/chunk-SO4LROOT.mjs.map +0 -1
- package/dist/chunk-SPA4JBKN.mjs +0 -175
- package/dist/chunk-SPA4JBKN.mjs.map +0 -1
- package/dist/dist-3BY63UQ5.mjs +0 -2151
- package/dist/dist-3BY63UQ5.mjs.map +0 -1
- package/dist/filesystem-storage.addon-C42r589X.d.mts +0 -57
- package/dist/filesystem-storage.addon-C42r589X.d.ts +0 -57
- package/dist/index.d.mts +0 -1137
- package/dist/sql-schema-CKz78rId.d.mts +0 -97
- package/dist/sql-schema-CKz78rId.d.ts +0 -97
- package/dist/sqlite-settings.addon-KwG-uKMP.d.mts +0 -79
- package/dist/sqlite-settings.addon-KwG-uKMP.d.ts +0 -79
- package/dist/storage-location-manager-KKDQNAKA.mjs +0 -7
- package/dist/storage-location-manager-KKDQNAKA.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup-orchestrator.addon.js","names":["EE","Stream","SD","EE","Stream","SD","assert","Buffer","path","parse","fs","path","fs","path","EE","EE","fs","fs","path","path","fs","path","fs","dirname","dirname","fs","fs","path","fs","path","assert","fs","path"],"sources":["../../../../../node_modules/tar/lib/high-level-opt.js","../../../../../node_modules/tar/node_modules/minipass/index.js","../../../../../node_modules/minizlib/constants.js","../../../../../node_modules/minizlib/node_modules/minipass/index.js","../../../../../node_modules/minizlib/index.js","../../../../../node_modules/tar/lib/normalize-windows-path.js","../../../../../node_modules/tar/lib/read-entry.js","../../../../../node_modules/tar/lib/types.js","../../../../../node_modules/tar/lib/large-numbers.js","../../../../../node_modules/tar/lib/header.js","../../../../../node_modules/tar/lib/pax.js","../../../../../node_modules/tar/lib/strip-trailing-slashes.js","../../../../../node_modules/tar/lib/warn-mixin.js","../../../../../node_modules/tar/lib/winchars.js","../../../../../node_modules/tar/lib/strip-absolute-path.js","../../../../../node_modules/tar/lib/mode-fix.js","../../../../../node_modules/tar/lib/write-entry.js","../../../../../node_modules/tar/node_modules/yallist/iterator.js","../../../../../node_modules/tar/node_modules/yallist/yallist.js","../../../../../node_modules/tar/lib/pack.js","../../../../../node_modules/fs-minipass/node_modules/minipass/index.js","../../../../../node_modules/fs-minipass/index.js","../../../../../node_modules/tar/lib/parse.js","../../../../../node_modules/tar/lib/list.js","../../../../../node_modules/tar/lib/create.js","../../../../../node_modules/tar/lib/replace.js","../../../../../node_modules/tar/lib/update.js","../../../../../node_modules/mkdirp/lib/opts-arg.js","../../../../../node_modules/mkdirp/lib/path-arg.js","../../../../../node_modules/mkdirp/lib/find-made.js","../../../../../node_modules/mkdirp/lib/mkdirp-manual.js","../../../../../node_modules/mkdirp/lib/mkdirp-native.js","../../../../../node_modules/mkdirp/lib/use-native.js","../../../../../node_modules/mkdirp/index.js","../../../../../node_modules/tar/node_modules/chownr/chownr.js","../../../../../node_modules/tar/lib/mkdir.js","../../../../../node_modules/tar/lib/normalize-unicode.js","../../../../../node_modules/tar/lib/path-reservations.js","../../../../../node_modules/tar/lib/get-write-flag.js","../../../../../node_modules/tar/lib/unpack.js","../../../../../node_modules/tar/lib/extract.js","../../../../../node_modules/tar/index.js","../../../src/builtins/system-backup/system-backup.service.ts","../../../src/builtins/backup-orchestrator/destination-policy.ts","../../../src/builtins/backup-orchestrator/manifest-store.ts","../../../src/builtins/backup-orchestrator/download-helpers.ts","../../../../../node_modules/croner/dist/croner.js","../../../src/builtins/backup-orchestrator/cron-helpers.ts","../../../src/builtins/backup-orchestrator/backup-orchestrator.addon.ts"],"sourcesContent":["'use strict'\n\n// turn tar(1) style args like `C` into the more verbose things like `cwd`\n\nconst argmap = new Map([\n ['C', 'cwd'],\n ['f', 'file'],\n ['z', 'gzip'],\n ['P', 'preservePaths'],\n ['U', 'unlink'],\n ['strip-components', 'strip'],\n ['stripComponents', 'strip'],\n ['keep-newer', 'newer'],\n ['keepNewer', 'newer'],\n ['keep-newer-files', 'newer'],\n ['keepNewerFiles', 'newer'],\n ['k', 'keep'],\n ['keep-existing', 'keep'],\n ['keepExisting', 'keep'],\n ['m', 'noMtime'],\n ['no-mtime', 'noMtime'],\n ['p', 'preserveOwner'],\n ['L', 'follow'],\n ['h', 'follow'],\n])\n\nmodule.exports = opt => opt ? Object.keys(opt).map(k => [\n argmap.has(k) ? argmap.get(k) : k, opt[k],\n]).reduce((set, kv) => (set[kv[0]] = kv[1], set), Object.create(null)) : {}\n","'use strict'\nconst proc =\n typeof process === 'object' && process\n ? process\n : {\n stdout: null,\n stderr: null,\n }\nconst EE = require('events')\nconst Stream = require('stream')\nconst stringdecoder = require('string_decoder')\nconst SD = stringdecoder.StringDecoder\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFER = Symbol('buffer')\nconst PIPES = Symbol('pipes')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed')\n// internal event when stream has an error\nconst ERROR = Symbol('error')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\nconst ABORT = Symbol('abort')\nconst ABORTED = Symbol('aborted')\nconst SIGNAL = Symbol('signal')\n\nconst defer = fn => Promise.resolve().then(fn)\n\n// TODO remove when Node v8 support drops\nconst doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1'\nconst ASYNCITERATOR =\n (doIter && Symbol.asyncIterator) || Symbol('asyncIterator not implemented')\nconst ITERATOR =\n (doIter && Symbol.iterator) || Symbol('iterator not implemented')\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\nconst isEndish = ev => ev === 'end' || ev === 'finish' || ev === 'prefinish'\n\nconst isArrayBuffer = b =>\n b instanceof ArrayBuffer ||\n (typeof b === 'object' &&\n b.constructor &&\n b.constructor.name === 'ArrayBuffer' &&\n b.byteLength >= 0)\n\nconst isArrayBufferView = b => !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\nclass Pipe {\n constructor(src, dest, opts) {\n this.src = src\n this.dest = dest\n this.opts = opts\n this.ondrain = () => src[RESUME]()\n dest.on('drain', this.ondrain)\n }\n unpipe() {\n this.dest.removeListener('drain', this.ondrain)\n }\n // istanbul ignore next - only here for the prototype\n proxyErrors() {}\n end() {\n this.unpipe()\n if (this.opts.end) this.dest.end()\n }\n}\n\nclass PipeProxyErrors extends Pipe {\n unpipe() {\n this.src.removeListener('error', this.proxyErrors)\n super.unpipe()\n }\n constructor(src, dest, opts) {\n super(src, dest, opts)\n this.proxyErrors = er => dest.emit('error', er)\n src.on('error', this.proxyErrors)\n }\n}\n\nclass Minipass extends Stream {\n constructor(options) {\n super()\n this[FLOWING] = false\n // whether we're explicitly paused\n this[PAUSED] = false\n this[PIPES] = []\n this[BUFFER] = []\n this[OBJECTMODE] = (options && options.objectMode) || false\n if (this[OBJECTMODE]) this[ENCODING] = null\n else this[ENCODING] = (options && options.encoding) || null\n if (this[ENCODING] === 'buffer') this[ENCODING] = null\n this[ASYNC] = (options && !!options.async) || false\n this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null\n this[EOF] = false\n this[EMITTED_END] = false\n this[EMITTING_END] = false\n this[CLOSED] = false\n this[EMITTED_ERROR] = null\n this.writable = true\n this.readable = true\n this[BUFFERLENGTH] = 0\n this[DESTROYED] = false\n if (options && options.debugExposeBuffer === true) {\n Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] })\n }\n if (options && options.debugExposePipes === true) {\n Object.defineProperty(this, 'pipes', { get: () => this[PIPES] })\n }\n this[SIGNAL] = options && options.signal\n this[ABORTED] = false\n if (this[SIGNAL]) {\n this[SIGNAL].addEventListener('abort', () => this[ABORT]())\n if (this[SIGNAL].aborted) {\n this[ABORT]()\n }\n }\n }\n\n get bufferLength() {\n return this[BUFFERLENGTH]\n }\n\n get encoding() {\n return this[ENCODING]\n }\n set encoding(enc) {\n if (this[OBJECTMODE]) throw new Error('cannot set encoding in objectMode')\n\n if (\n this[ENCODING] &&\n enc !== this[ENCODING] &&\n ((this[DECODER] && this[DECODER].lastNeed) || this[BUFFERLENGTH])\n )\n throw new Error('cannot change encoding')\n\n if (this[ENCODING] !== enc) {\n this[DECODER] = enc ? new SD(enc) : null\n if (this[BUFFER].length)\n this[BUFFER] = this[BUFFER].map(chunk => this[DECODER].write(chunk))\n }\n\n this[ENCODING] = enc\n }\n\n setEncoding(enc) {\n this.encoding = enc\n }\n\n get objectMode() {\n return this[OBJECTMODE]\n }\n set objectMode(om) {\n this[OBJECTMODE] = this[OBJECTMODE] || !!om\n }\n\n get ['async']() {\n return this[ASYNC]\n }\n set ['async'](a) {\n this[ASYNC] = this[ASYNC] || !!a\n }\n\n // drop everything and get out of the flow completely\n [ABORT]() {\n this[ABORTED] = true\n this.emit('abort', this[SIGNAL].reason)\n this.destroy(this[SIGNAL].reason)\n }\n\n get aborted() {\n return this[ABORTED]\n }\n set aborted(_) {}\n\n write(chunk, encoding, cb) {\n if (this[ABORTED]) return false\n if (this[EOF]) throw new Error('write after end')\n\n if (this[DESTROYED]) {\n this.emit(\n 'error',\n Object.assign(\n new Error('Cannot call write after a stream was destroyed'),\n { code: 'ERR_STREAM_DESTROYED' }\n )\n )\n return true\n }\n\n if (typeof encoding === 'function') (cb = encoding), (encoding = 'utf8')\n\n if (!encoding) encoding = 'utf8'\n\n const fn = this[ASYNC] ? defer : f => f()\n\n // convert array buffers and typed array views into buffers\n // at some point in the future, we may want to do the opposite!\n // leave strings and buffers as-is\n // anything else switches us into object mode\n if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n if (isArrayBufferView(chunk))\n chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n else if (isArrayBuffer(chunk)) chunk = Buffer.from(chunk)\n else if (typeof chunk !== 'string')\n // use the setter so we throw if we have encoding set\n this.objectMode = true\n }\n\n // handle object mode up front, since it's simpler\n // this yields better performance, fewer checks later.\n if (this[OBJECTMODE]) {\n /* istanbul ignore if - maybe impossible? */\n if (this.flowing && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n if (this.flowing) this.emit('data', chunk)\n else this[BUFFERPUSH](chunk)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this.flowing\n }\n\n // at this point the chunk is a buffer or string\n // don't buffer it up or send it to the decoder\n if (!chunk.length) {\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n if (cb) fn(cb)\n return this.flowing\n }\n\n // fast-path writing strings of same encoding to a stream with\n // an empty buffer, skipping the buffer/decoder dance\n if (\n typeof chunk === 'string' &&\n // unless it is a string already ready for us to use\n !(encoding === this[ENCODING] && !this[DECODER].lastNeed)\n ) {\n chunk = Buffer.from(chunk, encoding)\n }\n\n if (Buffer.isBuffer(chunk) && this[ENCODING])\n chunk = this[DECODER].write(chunk)\n\n // Note: flushing CAN potentially switch us into not-flowing mode\n if (this.flowing && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n if (this.flowing) this.emit('data', chunk)\n else this[BUFFERPUSH](chunk)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this.flowing\n }\n\n read(n) {\n if (this[DESTROYED]) return null\n\n if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) {\n this[MAYBE_EMIT_END]()\n return null\n }\n\n if (this[OBJECTMODE]) n = null\n\n if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n if (this.encoding) this[BUFFER] = [this[BUFFER].join('')]\n else this[BUFFER] = [Buffer.concat(this[BUFFER], this[BUFFERLENGTH])]\n }\n\n const ret = this[READ](n || null, this[BUFFER][0])\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [READ](n, chunk) {\n if (n === chunk.length || n === null) this[BUFFERSHIFT]()\n else {\n this[BUFFER][0] = chunk.slice(n)\n chunk = chunk.slice(0, n)\n this[BUFFERLENGTH] -= n\n }\n\n this.emit('data', chunk)\n\n if (!this[BUFFER].length && !this[EOF]) this.emit('drain')\n\n return chunk\n }\n\n end(chunk, encoding, cb) {\n if (typeof chunk === 'function') (cb = chunk), (chunk = null)\n if (typeof encoding === 'function') (cb = encoding), (encoding = 'utf8')\n if (chunk) this.write(chunk, encoding)\n if (cb) this.once('end', cb)\n this[EOF] = true\n this.writable = false\n\n // if we haven't written anything, then go ahead and emit,\n // even if we're not reading.\n // we'll re-emit if a new 'end' listener is added anyway.\n // This makes MP more suitable to write-only use cases.\n if (this.flowing || !this[PAUSED]) this[MAYBE_EMIT_END]()\n return this\n }\n\n // don't let the internal resume be overwritten\n [RESUME]() {\n if (this[DESTROYED]) return\n\n this[PAUSED] = false\n this[FLOWING] = true\n this.emit('resume')\n if (this[BUFFER].length) this[FLUSH]()\n else if (this[EOF]) this[MAYBE_EMIT_END]()\n else this.emit('drain')\n }\n\n resume() {\n return this[RESUME]()\n }\n\n pause() {\n this[FLOWING] = false\n this[PAUSED] = true\n }\n\n get destroyed() {\n return this[DESTROYED]\n }\n\n get flowing() {\n return this[FLOWING]\n }\n\n get paused() {\n return this[PAUSED]\n }\n\n [BUFFERPUSH](chunk) {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1\n else this[BUFFERLENGTH] += chunk.length\n this[BUFFER].push(chunk)\n }\n\n [BUFFERSHIFT]() {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1\n else this[BUFFERLENGTH] -= this[BUFFER][0].length\n return this[BUFFER].shift()\n }\n\n [FLUSH](noDrain) {\n do {} while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) && this[BUFFER].length)\n\n if (!noDrain && !this[BUFFER].length && !this[EOF]) this.emit('drain')\n }\n\n [FLUSHCHUNK](chunk) {\n this.emit('data', chunk)\n return this.flowing\n }\n\n pipe(dest, opts) {\n if (this[DESTROYED]) return\n\n const ended = this[EMITTED_END]\n opts = opts || {}\n if (dest === proc.stdout || dest === proc.stderr) opts.end = false\n else opts.end = opts.end !== false\n opts.proxyErrors = !!opts.proxyErrors\n\n // piping an ended stream ends immediately\n if (ended) {\n if (opts.end) dest.end()\n } else {\n this[PIPES].push(\n !opts.proxyErrors\n ? new Pipe(this, dest, opts)\n : new PipeProxyErrors(this, dest, opts)\n )\n if (this[ASYNC]) defer(() => this[RESUME]())\n else this[RESUME]()\n }\n\n return dest\n }\n\n unpipe(dest) {\n const p = this[PIPES].find(p => p.dest === dest)\n if (p) {\n this[PIPES].splice(this[PIPES].indexOf(p), 1)\n p.unpipe()\n }\n }\n\n addListener(ev, fn) {\n return this.on(ev, fn)\n }\n\n on(ev, fn) {\n const ret = super.on(ev, fn)\n if (ev === 'data' && !this[PIPES].length && !this.flowing) this[RESUME]()\n else if (ev === 'readable' && this[BUFFERLENGTH] !== 0)\n super.emit('readable')\n else if (isEndish(ev) && this[EMITTED_END]) {\n super.emit(ev)\n this.removeAllListeners(ev)\n } else if (ev === 'error' && this[EMITTED_ERROR]) {\n if (this[ASYNC]) defer(() => fn.call(this, this[EMITTED_ERROR]))\n else fn.call(this, this[EMITTED_ERROR])\n }\n return ret\n }\n\n get emittedEnd() {\n return this[EMITTED_END]\n }\n\n [MAYBE_EMIT_END]() {\n if (\n !this[EMITTING_END] &&\n !this[EMITTED_END] &&\n !this[DESTROYED] &&\n this[BUFFER].length === 0 &&\n this[EOF]\n ) {\n this[EMITTING_END] = true\n this.emit('end')\n this.emit('prefinish')\n this.emit('finish')\n if (this[CLOSED]) this.emit('close')\n this[EMITTING_END] = false\n }\n }\n\n emit(ev, data, ...extra) {\n // error and close are only events allowed after calling destroy()\n if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED])\n return\n else if (ev === 'data') {\n return !this[OBJECTMODE] && !data\n ? false\n : this[ASYNC]\n ? defer(() => this[EMITDATA](data))\n : this[EMITDATA](data)\n } else if (ev === 'end') {\n return this[EMITEND]()\n } else if (ev === 'close') {\n this[CLOSED] = true\n // don't emit close before 'end' and 'finish'\n if (!this[EMITTED_END] && !this[DESTROYED]) return\n const ret = super.emit('close')\n this.removeAllListeners('close')\n return ret\n } else if (ev === 'error') {\n this[EMITTED_ERROR] = data\n super.emit(ERROR, data)\n const ret =\n !this[SIGNAL] || this.listeners('error').length\n ? super.emit('error', data)\n : false\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'resume') {\n const ret = super.emit('resume')\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'finish' || ev === 'prefinish') {\n const ret = super.emit(ev)\n this.removeAllListeners(ev)\n return ret\n }\n\n // Some other unknown event\n const ret = super.emit(ev, data, ...extra)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITDATA](data) {\n for (const p of this[PIPES]) {\n if (p.dest.write(data) === false) this.pause()\n }\n const ret = super.emit('data', data)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITEND]() {\n if (this[EMITTED_END]) return\n\n this[EMITTED_END] = true\n this.readable = false\n if (this[ASYNC]) defer(() => this[EMITEND2]())\n else this[EMITEND2]()\n }\n\n [EMITEND2]() {\n if (this[DECODER]) {\n const data = this[DECODER].end()\n if (data) {\n for (const p of this[PIPES]) {\n p.dest.write(data)\n }\n super.emit('data', data)\n }\n }\n\n for (const p of this[PIPES]) {\n p.end()\n }\n const ret = super.emit('end')\n this.removeAllListeners('end')\n return ret\n }\n\n // const all = await stream.collect()\n collect() {\n const buf = []\n if (!this[OBJECTMODE]) buf.dataLength = 0\n // set the promise first, in case an error is raised\n // by triggering the flow here.\n const p = this.promise()\n this.on('data', c => {\n buf.push(c)\n if (!this[OBJECTMODE]) buf.dataLength += c.length\n })\n return p.then(() => buf)\n }\n\n // const data = await stream.concat()\n concat() {\n return this[OBJECTMODE]\n ? Promise.reject(new Error('cannot concat in objectMode'))\n : this.collect().then(buf =>\n this[OBJECTMODE]\n ? Promise.reject(new Error('cannot concat in objectMode'))\n : this[ENCODING]\n ? buf.join('')\n : Buffer.concat(buf, buf.dataLength)\n )\n }\n\n // stream.promise().then(() => done, er => emitted error)\n promise() {\n return new Promise((resolve, reject) => {\n this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n this.on('error', er => reject(er))\n this.on('end', () => resolve())\n })\n }\n\n // for await (let chunk of stream)\n [ASYNCITERATOR]() {\n let stopped = false\n const stop = () => {\n this.pause()\n stopped = true\n return Promise.resolve({ done: true })\n }\n const next = () => {\n if (stopped) return stop()\n const res = this.read()\n if (res !== null) return Promise.resolve({ done: false, value: res })\n\n if (this[EOF]) return stop()\n\n let resolve = null\n let reject = null\n const onerr = er => {\n this.removeListener('data', ondata)\n this.removeListener('end', onend)\n this.removeListener(DESTROYED, ondestroy)\n stop()\n reject(er)\n }\n const ondata = value => {\n this.removeListener('error', onerr)\n this.removeListener('end', onend)\n this.removeListener(DESTROYED, ondestroy)\n this.pause()\n resolve({ value: value, done: !!this[EOF] })\n }\n const onend = () => {\n this.removeListener('error', onerr)\n this.removeListener('data', ondata)\n this.removeListener(DESTROYED, ondestroy)\n stop()\n resolve({ done: true })\n }\n const ondestroy = () => onerr(new Error('stream destroyed'))\n return new Promise((res, rej) => {\n reject = rej\n resolve = res\n this.once(DESTROYED, ondestroy)\n this.once('error', onerr)\n this.once('end', onend)\n this.once('data', ondata)\n })\n }\n\n return {\n next,\n throw: stop,\n return: stop,\n [ASYNCITERATOR]() {\n return this\n },\n }\n }\n\n // for (let chunk of stream)\n [ITERATOR]() {\n let stopped = false\n const stop = () => {\n this.pause()\n this.removeListener(ERROR, stop)\n this.removeListener(DESTROYED, stop)\n this.removeListener('end', stop)\n stopped = true\n return { done: true }\n }\n\n const next = () => {\n if (stopped) return stop()\n const value = this.read()\n return value === null ? stop() : { value }\n }\n this.once('end', stop)\n this.once(ERROR, stop)\n this.once(DESTROYED, stop)\n\n return {\n next,\n throw: stop,\n return: stop,\n [ITERATOR]() {\n return this\n },\n }\n }\n\n destroy(er) {\n if (this[DESTROYED]) {\n if (er) this.emit('error', er)\n else this.emit(DESTROYED)\n return this\n }\n\n this[DESTROYED] = true\n\n // throw away all buffered data, it's never coming out\n this[BUFFER].length = 0\n this[BUFFERLENGTH] = 0\n\n if (typeof this.close === 'function' && !this[CLOSED]) this.close()\n\n if (er) this.emit('error', er)\n // if no error to emit, still reject pending promises\n else this.emit(DESTROYED)\n\n return this\n }\n\n static isStream(s) {\n return (\n !!s &&\n (s instanceof Minipass ||\n s instanceof Stream ||\n (s instanceof EE &&\n // readable\n (typeof s.pipe === 'function' ||\n // writable\n (typeof s.write === 'function' && typeof s.end === 'function'))))\n )\n }\n}\n\nexports.Minipass = Minipass\n","// Update with any zlib constants that are added or changed in the future.\n// Node v6 didn't export this, so we just hard code the version and rely\n// on all the other hard-coded values from zlib v4736. When node v6\n// support drops, we can just export the realZlibConstants object.\nconst realZlibConstants = require('zlib').constants ||\n /* istanbul ignore next */ { ZLIB_VERNUM: 4736 }\n\nmodule.exports = Object.freeze(Object.assign(Object.create(null), {\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n Z_VERSION_ERROR: -6,\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n DEFLATE: 1,\n INFLATE: 2,\n GZIP: 3,\n GUNZIP: 4,\n DEFLATERAW: 5,\n INFLATERAW: 6,\n UNZIP: 7,\n BROTLI_DECODE: 8,\n BROTLI_ENCODE: 9,\n Z_MIN_WINDOWBITS: 8,\n Z_MAX_WINDOWBITS: 15,\n Z_DEFAULT_WINDOWBITS: 15,\n Z_MIN_CHUNK: 64,\n Z_MAX_CHUNK: Infinity,\n Z_DEFAULT_CHUNK: 16384,\n Z_MIN_MEMLEVEL: 1,\n Z_MAX_MEMLEVEL: 9,\n Z_DEFAULT_MEMLEVEL: 8,\n Z_MIN_LEVEL: -1,\n Z_MAX_LEVEL: 9,\n Z_DEFAULT_LEVEL: -1,\n BROTLI_OPERATION_PROCESS: 0,\n BROTLI_OPERATION_FLUSH: 1,\n BROTLI_OPERATION_FINISH: 2,\n BROTLI_OPERATION_EMIT_METADATA: 3,\n BROTLI_MODE_GENERIC: 0,\n BROTLI_MODE_TEXT: 1,\n BROTLI_MODE_FONT: 2,\n BROTLI_DEFAULT_MODE: 0,\n BROTLI_MIN_QUALITY: 0,\n BROTLI_MAX_QUALITY: 11,\n BROTLI_DEFAULT_QUALITY: 11,\n BROTLI_MIN_WINDOW_BITS: 10,\n BROTLI_MAX_WINDOW_BITS: 24,\n BROTLI_LARGE_MAX_WINDOW_BITS: 30,\n BROTLI_DEFAULT_WINDOW: 22,\n BROTLI_MIN_INPUT_BLOCK_BITS: 16,\n BROTLI_MAX_INPUT_BLOCK_BITS: 24,\n BROTLI_PARAM_MODE: 0,\n BROTLI_PARAM_QUALITY: 1,\n BROTLI_PARAM_LGWIN: 2,\n BROTLI_PARAM_LGBLOCK: 3,\n BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,\n BROTLI_PARAM_SIZE_HINT: 5,\n BROTLI_PARAM_LARGE_WINDOW: 6,\n BROTLI_PARAM_NPOSTFIX: 7,\n BROTLI_PARAM_NDIRECT: 8,\n BROTLI_DECODER_RESULT_ERROR: 0,\n BROTLI_DECODER_RESULT_SUCCESS: 1,\n BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,\n BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,\n BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,\n BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,\n BROTLI_DECODER_NO_ERROR: 0,\n BROTLI_DECODER_SUCCESS: 1,\n BROTLI_DECODER_NEEDS_MORE_INPUT: 2,\n BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,\n BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,\n BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,\n BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,\n BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,\n BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,\n BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,\n BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,\n BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,\n BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,\n BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,\n BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,\n BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,\n BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,\n BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,\n BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,\n BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,\n BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,\n BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,\n BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,\n BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,\n BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,\n BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,\n BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,\n BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,\n BROTLI_DECODER_ERROR_UNREACHABLE: -31,\n}, realZlibConstants))\n","'use strict'\nconst proc = typeof process === 'object' && process ? process : {\n stdout: null,\n stderr: null,\n}\nconst EE = require('events')\nconst Stream = require('stream')\nconst SD = require('string_decoder').StringDecoder\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\nconst DESTROYED = Symbol('destroyed')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\n\nconst defer = fn => Promise.resolve().then(fn)\n\n// TODO remove when Node v8 support drops\nconst doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1'\nconst ASYNCITERATOR = doIter && Symbol.asyncIterator\n || Symbol('asyncIterator not implemented')\nconst ITERATOR = doIter && Symbol.iterator\n || Symbol('iterator not implemented')\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\nconst isEndish = ev =>\n ev === 'end' ||\n ev === 'finish' ||\n ev === 'prefinish'\n\nconst isArrayBuffer = b => b instanceof ArrayBuffer ||\n typeof b === 'object' &&\n b.constructor &&\n b.constructor.name === 'ArrayBuffer' &&\n b.byteLength >= 0\n\nconst isArrayBufferView = b => !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\nclass Pipe {\n constructor (src, dest, opts) {\n this.src = src\n this.dest = dest\n this.opts = opts\n this.ondrain = () => src[RESUME]()\n dest.on('drain', this.ondrain)\n }\n unpipe () {\n this.dest.removeListener('drain', this.ondrain)\n }\n // istanbul ignore next - only here for the prototype\n proxyErrors () {}\n end () {\n this.unpipe()\n if (this.opts.end)\n this.dest.end()\n }\n}\n\nclass PipeProxyErrors extends Pipe {\n unpipe () {\n this.src.removeListener('error', this.proxyErrors)\n super.unpipe()\n }\n constructor (src, dest, opts) {\n super(src, dest, opts)\n this.proxyErrors = er => dest.emit('error', er)\n src.on('error', this.proxyErrors)\n }\n}\n\nmodule.exports = class Minipass extends Stream {\n constructor (options) {\n super()\n this[FLOWING] = false\n // whether we're explicitly paused\n this[PAUSED] = false\n this.pipes = []\n this.buffer = []\n this[OBJECTMODE] = options && options.objectMode || false\n if (this[OBJECTMODE])\n this[ENCODING] = null\n else\n this[ENCODING] = options && options.encoding || null\n if (this[ENCODING] === 'buffer')\n this[ENCODING] = null\n this[ASYNC] = options && !!options.async || false\n this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null\n this[EOF] = false\n this[EMITTED_END] = false\n this[EMITTING_END] = false\n this[CLOSED] = false\n this[EMITTED_ERROR] = null\n this.writable = true\n this.readable = true\n this[BUFFERLENGTH] = 0\n this[DESTROYED] = false\n }\n\n get bufferLength () { return this[BUFFERLENGTH] }\n\n get encoding () { return this[ENCODING] }\n set encoding (enc) {\n if (this[OBJECTMODE])\n throw new Error('cannot set encoding in objectMode')\n\n if (this[ENCODING] && enc !== this[ENCODING] &&\n (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH]))\n throw new Error('cannot change encoding')\n\n if (this[ENCODING] !== enc) {\n this[DECODER] = enc ? new SD(enc) : null\n if (this.buffer.length)\n this.buffer = this.buffer.map(chunk => this[DECODER].write(chunk))\n }\n\n this[ENCODING] = enc\n }\n\n setEncoding (enc) {\n this.encoding = enc\n }\n\n get objectMode () { return this[OBJECTMODE] }\n set objectMode (om) { this[OBJECTMODE] = this[OBJECTMODE] || !!om }\n\n get ['async'] () { return this[ASYNC] }\n set ['async'] (a) { this[ASYNC] = this[ASYNC] || !!a }\n\n write (chunk, encoding, cb) {\n if (this[EOF])\n throw new Error('write after end')\n\n if (this[DESTROYED]) {\n this.emit('error', Object.assign(\n new Error('Cannot call write after a stream was destroyed'),\n { code: 'ERR_STREAM_DESTROYED' }\n ))\n return true\n }\n\n if (typeof encoding === 'function')\n cb = encoding, encoding = 'utf8'\n\n if (!encoding)\n encoding = 'utf8'\n\n const fn = this[ASYNC] ? defer : f => f()\n\n // convert array buffers and typed array views into buffers\n // at some point in the future, we may want to do the opposite!\n // leave strings and buffers as-is\n // anything else switches us into object mode\n if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n if (isArrayBufferView(chunk))\n chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n else if (isArrayBuffer(chunk))\n chunk = Buffer.from(chunk)\n else if (typeof chunk !== 'string')\n // use the setter so we throw if we have encoding set\n this.objectMode = true\n }\n\n // handle object mode up front, since it's simpler\n // this yields better performance, fewer checks later.\n if (this[OBJECTMODE]) {\n /* istanbul ignore if - maybe impossible? */\n if (this.flowing && this[BUFFERLENGTH] !== 0)\n this[FLUSH](true)\n\n if (this.flowing)\n this.emit('data', chunk)\n else\n this[BUFFERPUSH](chunk)\n\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable')\n\n if (cb)\n fn(cb)\n\n return this.flowing\n }\n\n // at this point the chunk is a buffer or string\n // don't buffer it up or send it to the decoder\n if (!chunk.length) {\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable')\n if (cb)\n fn(cb)\n return this.flowing\n }\n\n // fast-path writing strings of same encoding to a stream with\n // an empty buffer, skipping the buffer/decoder dance\n if (typeof chunk === 'string' &&\n // unless it is a string already ready for us to use\n !(encoding === this[ENCODING] && !this[DECODER].lastNeed)) {\n chunk = Buffer.from(chunk, encoding)\n }\n\n if (Buffer.isBuffer(chunk) && this[ENCODING])\n chunk = this[DECODER].write(chunk)\n\n // Note: flushing CAN potentially switch us into not-flowing mode\n if (this.flowing && this[BUFFERLENGTH] !== 0)\n this[FLUSH](true)\n\n if (this.flowing)\n this.emit('data', chunk)\n else\n this[BUFFERPUSH](chunk)\n\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable')\n\n if (cb)\n fn(cb)\n\n return this.flowing\n }\n\n read (n) {\n if (this[DESTROYED])\n return null\n\n if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) {\n this[MAYBE_EMIT_END]()\n return null\n }\n\n if (this[OBJECTMODE])\n n = null\n\n if (this.buffer.length > 1 && !this[OBJECTMODE]) {\n if (this.encoding)\n this.buffer = [this.buffer.join('')]\n else\n this.buffer = [Buffer.concat(this.buffer, this[BUFFERLENGTH])]\n }\n\n const ret = this[READ](n || null, this.buffer[0])\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [READ] (n, chunk) {\n if (n === chunk.length || n === null)\n this[BUFFERSHIFT]()\n else {\n this.buffer[0] = chunk.slice(n)\n chunk = chunk.slice(0, n)\n this[BUFFERLENGTH] -= n\n }\n\n this.emit('data', chunk)\n\n if (!this.buffer.length && !this[EOF])\n this.emit('drain')\n\n return chunk\n }\n\n end (chunk, encoding, cb) {\n if (typeof chunk === 'function')\n cb = chunk, chunk = null\n if (typeof encoding === 'function')\n cb = encoding, encoding = 'utf8'\n if (chunk)\n this.write(chunk, encoding)\n if (cb)\n this.once('end', cb)\n this[EOF] = true\n this.writable = false\n\n // if we haven't written anything, then go ahead and emit,\n // even if we're not reading.\n // we'll re-emit if a new 'end' listener is added anyway.\n // This makes MP more suitable to write-only use cases.\n if (this.flowing || !this[PAUSED])\n this[MAYBE_EMIT_END]()\n return this\n }\n\n // don't let the internal resume be overwritten\n [RESUME] () {\n if (this[DESTROYED])\n return\n\n this[PAUSED] = false\n this[FLOWING] = true\n this.emit('resume')\n if (this.buffer.length)\n this[FLUSH]()\n else if (this[EOF])\n this[MAYBE_EMIT_END]()\n else\n this.emit('drain')\n }\n\n resume () {\n return this[RESUME]()\n }\n\n pause () {\n this[FLOWING] = false\n this[PAUSED] = true\n }\n\n get destroyed () {\n return this[DESTROYED]\n }\n\n get flowing () {\n return this[FLOWING]\n }\n\n get paused () {\n return this[PAUSED]\n }\n\n [BUFFERPUSH] (chunk) {\n if (this[OBJECTMODE])\n this[BUFFERLENGTH] += 1\n else\n this[BUFFERLENGTH] += chunk.length\n this.buffer.push(chunk)\n }\n\n [BUFFERSHIFT] () {\n if (this.buffer.length) {\n if (this[OBJECTMODE])\n this[BUFFERLENGTH] -= 1\n else\n this[BUFFERLENGTH] -= this.buffer[0].length\n }\n return this.buffer.shift()\n }\n\n [FLUSH] (noDrain) {\n do {} while (this[FLUSHCHUNK](this[BUFFERSHIFT]()))\n\n if (!noDrain && !this.buffer.length && !this[EOF])\n this.emit('drain')\n }\n\n [FLUSHCHUNK] (chunk) {\n return chunk ? (this.emit('data', chunk), this.flowing) : false\n }\n\n pipe (dest, opts) {\n if (this[DESTROYED])\n return\n\n const ended = this[EMITTED_END]\n opts = opts || {}\n if (dest === proc.stdout || dest === proc.stderr)\n opts.end = false\n else\n opts.end = opts.end !== false\n opts.proxyErrors = !!opts.proxyErrors\n\n // piping an ended stream ends immediately\n if (ended) {\n if (opts.end)\n dest.end()\n } else {\n this.pipes.push(!opts.proxyErrors ? new Pipe(this, dest, opts)\n : new PipeProxyErrors(this, dest, opts))\n if (this[ASYNC])\n defer(() => this[RESUME]())\n else\n this[RESUME]()\n }\n\n return dest\n }\n\n unpipe (dest) {\n const p = this.pipes.find(p => p.dest === dest)\n if (p) {\n this.pipes.splice(this.pipes.indexOf(p), 1)\n p.unpipe()\n }\n }\n\n addListener (ev, fn) {\n return this.on(ev, fn)\n }\n\n on (ev, fn) {\n const ret = super.on(ev, fn)\n if (ev === 'data' && !this.pipes.length && !this.flowing)\n this[RESUME]()\n else if (ev === 'readable' && this[BUFFERLENGTH] !== 0)\n super.emit('readable')\n else if (isEndish(ev) && this[EMITTED_END]) {\n super.emit(ev)\n this.removeAllListeners(ev)\n } else if (ev === 'error' && this[EMITTED_ERROR]) {\n if (this[ASYNC])\n defer(() => fn.call(this, this[EMITTED_ERROR]))\n else\n fn.call(this, this[EMITTED_ERROR])\n }\n return ret\n }\n\n get emittedEnd () {\n return this[EMITTED_END]\n }\n\n [MAYBE_EMIT_END] () {\n if (!this[EMITTING_END] &&\n !this[EMITTED_END] &&\n !this[DESTROYED] &&\n this.buffer.length === 0 &&\n this[EOF]) {\n this[EMITTING_END] = true\n this.emit('end')\n this.emit('prefinish')\n this.emit('finish')\n if (this[CLOSED])\n this.emit('close')\n this[EMITTING_END] = false\n }\n }\n\n emit (ev, data, ...extra) {\n // error and close are only events allowed after calling destroy()\n if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED])\n return\n else if (ev === 'data') {\n return !data ? false\n : this[ASYNC] ? defer(() => this[EMITDATA](data))\n : this[EMITDATA](data)\n } else if (ev === 'end') {\n return this[EMITEND]()\n } else if (ev === 'close') {\n this[CLOSED] = true\n // don't emit close before 'end' and 'finish'\n if (!this[EMITTED_END] && !this[DESTROYED])\n return\n const ret = super.emit('close')\n this.removeAllListeners('close')\n return ret\n } else if (ev === 'error') {\n this[EMITTED_ERROR] = data\n const ret = super.emit('error', data)\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'resume') {\n const ret = super.emit('resume')\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'finish' || ev === 'prefinish') {\n const ret = super.emit(ev)\n this.removeAllListeners(ev)\n return ret\n }\n\n // Some other unknown event\n const ret = super.emit(ev, data, ...extra)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITDATA] (data) {\n for (const p of this.pipes) {\n if (p.dest.write(data) === false)\n this.pause()\n }\n const ret = super.emit('data', data)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITEND] () {\n if (this[EMITTED_END])\n return\n\n this[EMITTED_END] = true\n this.readable = false\n if (this[ASYNC])\n defer(() => this[EMITEND2]())\n else\n this[EMITEND2]()\n }\n\n [EMITEND2] () {\n if (this[DECODER]) {\n const data = this[DECODER].end()\n if (data) {\n for (const p of this.pipes) {\n p.dest.write(data)\n }\n super.emit('data', data)\n }\n }\n\n for (const p of this.pipes) {\n p.end()\n }\n const ret = super.emit('end')\n this.removeAllListeners('end')\n return ret\n }\n\n // const all = await stream.collect()\n collect () {\n const buf = []\n if (!this[OBJECTMODE])\n buf.dataLength = 0\n // set the promise first, in case an error is raised\n // by triggering the flow here.\n const p = this.promise()\n this.on('data', c => {\n buf.push(c)\n if (!this[OBJECTMODE])\n buf.dataLength += c.length\n })\n return p.then(() => buf)\n }\n\n // const data = await stream.concat()\n concat () {\n return this[OBJECTMODE]\n ? Promise.reject(new Error('cannot concat in objectMode'))\n : this.collect().then(buf =>\n this[OBJECTMODE]\n ? Promise.reject(new Error('cannot concat in objectMode'))\n : this[ENCODING] ? buf.join('') : Buffer.concat(buf, buf.dataLength))\n }\n\n // stream.promise().then(() => done, er => emitted error)\n promise () {\n return new Promise((resolve, reject) => {\n this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n this.on('error', er => reject(er))\n this.on('end', () => resolve())\n })\n }\n\n // for await (let chunk of stream)\n [ASYNCITERATOR] () {\n const next = () => {\n const res = this.read()\n if (res !== null)\n return Promise.resolve({ done: false, value: res })\n\n if (this[EOF])\n return Promise.resolve({ done: true })\n\n let resolve = null\n let reject = null\n const onerr = er => {\n this.removeListener('data', ondata)\n this.removeListener('end', onend)\n reject(er)\n }\n const ondata = value => {\n this.removeListener('error', onerr)\n this.removeListener('end', onend)\n this.pause()\n resolve({ value: value, done: !!this[EOF] })\n }\n const onend = () => {\n this.removeListener('error', onerr)\n this.removeListener('data', ondata)\n resolve({ done: true })\n }\n const ondestroy = () => onerr(new Error('stream destroyed'))\n return new Promise((res, rej) => {\n reject = rej\n resolve = res\n this.once(DESTROYED, ondestroy)\n this.once('error', onerr)\n this.once('end', onend)\n this.once('data', ondata)\n })\n }\n\n return { next }\n }\n\n // for (let chunk of stream)\n [ITERATOR] () {\n const next = () => {\n const value = this.read()\n const done = value === null\n return { value, done }\n }\n return { next }\n }\n\n destroy (er) {\n if (this[DESTROYED]) {\n if (er)\n this.emit('error', er)\n else\n this.emit(DESTROYED)\n return this\n }\n\n this[DESTROYED] = true\n\n // throw away all buffered data, it's never coming out\n this.buffer.length = 0\n this[BUFFERLENGTH] = 0\n\n if (typeof this.close === 'function' && !this[CLOSED])\n this.close()\n\n if (er)\n this.emit('error', er)\n else // if no error to emit, still reject pending promises\n this.emit(DESTROYED)\n\n return this\n }\n\n static isStream (s) {\n return !!s && (s instanceof Minipass || s instanceof Stream ||\n s instanceof EE && (\n typeof s.pipe === 'function' || // readable\n (typeof s.write === 'function' && typeof s.end === 'function') // writable\n ))\n }\n}\n","'use strict'\n\nconst assert = require('assert')\nconst Buffer = require('buffer').Buffer\nconst realZlib = require('zlib')\n\nconst constants = exports.constants = require('./constants.js')\nconst Minipass = require('minipass')\n\nconst OriginalBufferConcat = Buffer.concat\n\nconst _superWrite = Symbol('_superWrite')\nclass ZlibError extends Error {\n constructor (err) {\n super('zlib: ' + err.message)\n this.code = err.code\n this.errno = err.errno\n /* istanbul ignore if */\n if (!this.code)\n this.code = 'ZLIB_ERROR'\n\n this.message = 'zlib: ' + err.message\n Error.captureStackTrace(this, this.constructor)\n }\n\n get name () {\n return 'ZlibError'\n }\n}\n\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\nconst _opts = Symbol('opts')\nconst _flushFlag = Symbol('flushFlag')\nconst _finishFlushFlag = Symbol('finishFlushFlag')\nconst _fullFlushFlag = Symbol('fullFlushFlag')\nconst _handle = Symbol('handle')\nconst _onError = Symbol('onError')\nconst _sawError = Symbol('sawError')\nconst _level = Symbol('level')\nconst _strategy = Symbol('strategy')\nconst _ended = Symbol('ended')\nconst _defaultFullFlush = Symbol('_defaultFullFlush')\n\nclass ZlibBase extends Minipass {\n constructor (opts, mode) {\n if (!opts || typeof opts !== 'object')\n throw new TypeError('invalid options for ZlibBase constructor')\n\n super(opts)\n this[_sawError] = false\n this[_ended] = false\n this[_opts] = opts\n\n this[_flushFlag] = opts.flush\n this[_finishFlushFlag] = opts.finishFlush\n // this will throw if any options are invalid for the class selected\n try {\n this[_handle] = new realZlib[mode](opts)\n } catch (er) {\n // make sure that all errors get decorated properly\n throw new ZlibError(er)\n }\n\n this[_onError] = (err) => {\n // no sense raising multiple errors, since we abort on the first one.\n if (this[_sawError])\n return\n\n this[_sawError] = true\n\n // there is no way to cleanly recover.\n // continuing only obscures problems.\n this.close()\n this.emit('error', err)\n }\n\n this[_handle].on('error', er => this[_onError](new ZlibError(er)))\n this.once('end', () => this.close)\n }\n\n close () {\n if (this[_handle]) {\n this[_handle].close()\n this[_handle] = null\n this.emit('close')\n }\n }\n\n reset () {\n if (!this[_sawError]) {\n assert(this[_handle], 'zlib binding closed')\n return this[_handle].reset()\n }\n }\n\n flush (flushFlag) {\n if (this.ended)\n return\n\n if (typeof flushFlag !== 'number')\n flushFlag = this[_fullFlushFlag]\n this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag }))\n }\n\n end (chunk, encoding, cb) {\n if (chunk)\n this.write(chunk, encoding)\n this.flush(this[_finishFlushFlag])\n this[_ended] = true\n return super.end(null, null, cb)\n }\n\n get ended () {\n return this[_ended]\n }\n\n write (chunk, encoding, cb) {\n // process the chunk using the sync process\n // then super.write() all the outputted chunks\n if (typeof encoding === 'function')\n cb = encoding, encoding = 'utf8'\n\n if (typeof chunk === 'string')\n chunk = Buffer.from(chunk, encoding)\n\n if (this[_sawError])\n return\n assert(this[_handle], 'zlib binding closed')\n\n // _processChunk tries to .close() the native handle after it's done, so we\n // intercept that by temporarily making it a no-op.\n const nativeHandle = this[_handle]._handle\n const originalNativeClose = nativeHandle.close\n nativeHandle.close = () => {}\n const originalClose = this[_handle].close\n this[_handle].close = () => {}\n // It also calls `Buffer.concat()` at the end, which may be convenient\n // for some, but which we are not interested in as it slows us down.\n Buffer.concat = (args) => args\n let result\n try {\n const flushFlag = typeof chunk[_flushFlag] === 'number'\n ? chunk[_flushFlag] : this[_flushFlag]\n result = this[_handle]._processChunk(chunk, flushFlag)\n // if we don't throw, reset it back how it was\n Buffer.concat = OriginalBufferConcat\n } catch (err) {\n // or if we do, put Buffer.concat() back before we emit error\n // Error events call into user code, which may call Buffer.concat()\n Buffer.concat = OriginalBufferConcat\n this[_onError](new ZlibError(err))\n } finally {\n if (this[_handle]) {\n // Core zlib resets `_handle` to null after attempting to close the\n // native handle. Our no-op handler prevented actual closure, but we\n // need to restore the `._handle` property.\n this[_handle]._handle = nativeHandle\n nativeHandle.close = originalNativeClose\n this[_handle].close = originalClose\n // `_processChunk()` adds an 'error' listener. If we don't remove it\n // after each call, these handlers start piling up.\n this[_handle].removeAllListeners('error')\n // make sure OUR error listener is still attached tho\n }\n }\n\n if (this[_handle])\n this[_handle].on('error', er => this[_onError](new ZlibError(er)))\n\n let writeReturn\n if (result) {\n if (Array.isArray(result) && result.length > 0) {\n // The first buffer is always `handle._outBuffer`, which would be\n // re-used for later invocations; so, we always have to copy that one.\n writeReturn = this[_superWrite](Buffer.from(result[0]))\n for (let i = 1; i < result.length; i++) {\n writeReturn = this[_superWrite](result[i])\n }\n } else {\n writeReturn = this[_superWrite](Buffer.from(result))\n }\n }\n\n if (cb)\n cb()\n return writeReturn\n }\n\n [_superWrite] (data) {\n return super.write(data)\n }\n}\n\nclass Zlib extends ZlibBase {\n constructor (opts, mode) {\n opts = opts || {}\n\n opts.flush = opts.flush || constants.Z_NO_FLUSH\n opts.finishFlush = opts.finishFlush || constants.Z_FINISH\n super(opts, mode)\n\n this[_fullFlushFlag] = constants.Z_FULL_FLUSH\n this[_level] = opts.level\n this[_strategy] = opts.strategy\n }\n\n params (level, strategy) {\n if (this[_sawError])\n return\n\n if (!this[_handle])\n throw new Error('cannot switch params when binding is closed')\n\n // no way to test this without also not supporting params at all\n /* istanbul ignore if */\n if (!this[_handle].params)\n throw new Error('not supported in this implementation')\n\n if (this[_level] !== level || this[_strategy] !== strategy) {\n this.flush(constants.Z_SYNC_FLUSH)\n assert(this[_handle], 'zlib binding closed')\n // .params() calls .flush(), but the latter is always async in the\n // core zlib. We override .flush() temporarily to intercept that and\n // flush synchronously.\n const origFlush = this[_handle].flush\n this[_handle].flush = (flushFlag, cb) => {\n this.flush(flushFlag)\n cb()\n }\n try {\n this[_handle].params(level, strategy)\n } finally {\n this[_handle].flush = origFlush\n }\n /* istanbul ignore else */\n if (this[_handle]) {\n this[_level] = level\n this[_strategy] = strategy\n }\n }\n }\n}\n\n// minimal 2-byte header\nclass Deflate extends Zlib {\n constructor (opts) {\n super(opts, 'Deflate')\n }\n}\n\nclass Inflate extends Zlib {\n constructor (opts) {\n super(opts, 'Inflate')\n }\n}\n\n// gzip - bigger header, same deflate compression\nconst _portable = Symbol('_portable')\nclass Gzip extends Zlib {\n constructor (opts) {\n super(opts, 'Gzip')\n this[_portable] = opts && !!opts.portable\n }\n\n [_superWrite] (data) {\n if (!this[_portable])\n return super[_superWrite](data)\n\n // we'll always get the header emitted in one first chunk\n // overwrite the OS indicator byte with 0xFF\n this[_portable] = false\n data[9] = 255\n return super[_superWrite](data)\n }\n}\n\nclass Gunzip extends Zlib {\n constructor (opts) {\n super(opts, 'Gunzip')\n }\n}\n\n// raw - no header\nclass DeflateRaw extends Zlib {\n constructor (opts) {\n super(opts, 'DeflateRaw')\n }\n}\n\nclass InflateRaw extends Zlib {\n constructor (opts) {\n super(opts, 'InflateRaw')\n }\n}\n\n// auto-detect header.\nclass Unzip extends Zlib {\n constructor (opts) {\n super(opts, 'Unzip')\n }\n}\n\nclass Brotli extends ZlibBase {\n constructor (opts, mode) {\n opts = opts || {}\n\n opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS\n opts.finishFlush = opts.finishFlush || constants.BROTLI_OPERATION_FINISH\n\n super(opts, mode)\n\n this[_fullFlushFlag] = constants.BROTLI_OPERATION_FLUSH\n }\n}\n\nclass BrotliCompress extends Brotli {\n constructor (opts) {\n super(opts, 'BrotliCompress')\n }\n}\n\nclass BrotliDecompress extends Brotli {\n constructor (opts) {\n super(opts, 'BrotliDecompress')\n }\n}\n\nexports.Deflate = Deflate\nexports.Inflate = Inflate\nexports.Gzip = Gzip\nexports.Gunzip = Gunzip\nexports.DeflateRaw = DeflateRaw\nexports.InflateRaw = InflateRaw\nexports.Unzip = Unzip\n/* istanbul ignore else */\nif (typeof realZlib.BrotliCompress === 'function') {\n exports.BrotliCompress = BrotliCompress\n exports.BrotliDecompress = BrotliDecompress\n} else {\n exports.BrotliCompress = exports.BrotliDecompress = class {\n constructor () {\n throw new Error('Brotli is not supported in this version of Node.js')\n }\n }\n}\n","// on windows, either \\ or / are valid directory separators.\n// on unix, \\ is a valid character in filenames.\n// so, on windows, and only on windows, we replace all \\ chars with /,\n// so that we can use / as our one and only directory separator char.\n\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\nmodule.exports = platform !== 'win32' ? p => p\n : p => p && p.replace(/\\\\/g, '/')\n","'use strict'\nconst { Minipass } = require('minipass')\nconst normPath = require('./normalize-windows-path.js')\n\nconst SLURP = Symbol('slurp')\nmodule.exports = class ReadEntry extends Minipass {\n constructor (header, ex, gex) {\n super()\n // read entries always start life paused. this is to avoid the\n // situation where Minipass's auto-ending empty streams results\n // in an entry ending before we're ready for it.\n this.pause()\n this.extended = ex\n this.globalExtended = gex\n this.header = header\n this.startBlockSize = 512 * Math.ceil(header.size / 512)\n this.blockRemain = this.startBlockSize\n this.remain = header.size\n this.type = header.type\n this.meta = false\n this.ignore = false\n switch (this.type) {\n case 'File':\n case 'OldFile':\n case 'Link':\n case 'SymbolicLink':\n case 'CharacterDevice':\n case 'BlockDevice':\n case 'Directory':\n case 'FIFO':\n case 'ContiguousFile':\n case 'GNUDumpDir':\n break\n\n case 'NextFileHasLongLinkpath':\n case 'NextFileHasLongPath':\n case 'OldGnuLongPath':\n case 'GlobalExtendedHeader':\n case 'ExtendedHeader':\n case 'OldExtendedHeader':\n this.meta = true\n break\n\n // NOTE: gnutar and bsdtar treat unrecognized types as 'File'\n // it may be worth doing the same, but with a warning.\n default:\n this.ignore = true\n }\n\n this.path = normPath(header.path)\n this.mode = header.mode\n if (this.mode) {\n this.mode = this.mode & 0o7777\n }\n this.uid = header.uid\n this.gid = header.gid\n this.uname = header.uname\n this.gname = header.gname\n this.size = header.size\n this.mtime = header.mtime\n this.atime = header.atime\n this.ctime = header.ctime\n this.linkpath = normPath(header.linkpath)\n this.uname = header.uname\n this.gname = header.gname\n\n if (ex) {\n this[SLURP](ex)\n }\n if (gex) {\n this[SLURP](gex, true)\n }\n }\n\n write (data) {\n const writeLen = data.length\n if (writeLen > this.blockRemain) {\n throw new Error('writing more to entry than is appropriate')\n }\n\n const r = this.remain\n const br = this.blockRemain\n this.remain = Math.max(0, r - writeLen)\n this.blockRemain = Math.max(0, br - writeLen)\n if (this.ignore) {\n return true\n }\n\n if (r >= writeLen) {\n return super.write(data)\n }\n\n // r < writeLen\n return super.write(data.slice(0, r))\n }\n\n [SLURP] (ex, global) {\n for (const k in ex) {\n // we slurp in everything except for the path attribute in\n // a global extended header, because that's weird.\n if (ex[k] !== null && ex[k] !== undefined &&\n !(global && k === 'path')) {\n this[k] = k === 'path' || k === 'linkpath' ? normPath(ex[k]) : ex[k]\n }\n }\n }\n}\n","'use strict'\n// map types from key to human-friendly name\nexports.name = new Map([\n ['0', 'File'],\n // same as File\n ['', 'OldFile'],\n ['1', 'Link'],\n ['2', 'SymbolicLink'],\n // Devices and FIFOs aren't fully supported\n // they are parsed, but skipped when unpacking\n ['3', 'CharacterDevice'],\n ['4', 'BlockDevice'],\n ['5', 'Directory'],\n ['6', 'FIFO'],\n // same as File\n ['7', 'ContiguousFile'],\n // pax headers\n ['g', 'GlobalExtendedHeader'],\n ['x', 'ExtendedHeader'],\n // vendor-specific stuff\n // skip\n ['A', 'SolarisACL'],\n // like 5, but with data, which should be skipped\n ['D', 'GNUDumpDir'],\n // metadata only, skip\n ['I', 'Inode'],\n // data = link path of next file\n ['K', 'NextFileHasLongLinkpath'],\n // data = path of next file\n ['L', 'NextFileHasLongPath'],\n // skip\n ['M', 'ContinuationFile'],\n // like L\n ['N', 'OldGnuLongPath'],\n // skip\n ['S', 'SparseFile'],\n // skip\n ['V', 'TapeVolumeHeader'],\n // like x\n ['X', 'OldExtendedHeader'],\n])\n\n// map the other direction\nexports.code = new Map(Array.from(exports.name).map(kv => [kv[1], kv[0]]))\n","'use strict'\n// Tar can encode large and negative numbers using a leading byte of\n// 0xff for negative, and 0x80 for positive.\n\nconst encode = (num, buf) => {\n if (!Number.isSafeInteger(num)) {\n // The number is so large that javascript cannot represent it with integer\n // precision.\n throw Error('cannot encode number outside of javascript safe integer range')\n } else if (num < 0) {\n encodeNegative(num, buf)\n } else {\n encodePositive(num, buf)\n }\n return buf\n}\n\nconst encodePositive = (num, buf) => {\n buf[0] = 0x80\n\n for (var i = buf.length; i > 1; i--) {\n buf[i - 1] = num & 0xff\n num = Math.floor(num / 0x100)\n }\n}\n\nconst encodeNegative = (num, buf) => {\n buf[0] = 0xff\n var flipped = false\n num = num * -1\n for (var i = buf.length; i > 1; i--) {\n var byte = num & 0xff\n num = Math.floor(num / 0x100)\n if (flipped) {\n buf[i - 1] = onesComp(byte)\n } else if (byte === 0) {\n buf[i - 1] = 0\n } else {\n flipped = true\n buf[i - 1] = twosComp(byte)\n }\n }\n}\n\nconst parse = (buf) => {\n const pre = buf[0]\n const value = pre === 0x80 ? pos(buf.slice(1, buf.length))\n : pre === 0xff ? twos(buf)\n : null\n if (value === null) {\n throw Error('invalid base256 encoding')\n }\n\n if (!Number.isSafeInteger(value)) {\n // The number is so large that javascript cannot represent it with integer\n // precision.\n throw Error('parsed number outside of javascript safe integer range')\n }\n\n return value\n}\n\nconst twos = (buf) => {\n var len = buf.length\n var sum = 0\n var flipped = false\n for (var i = len - 1; i > -1; i--) {\n var byte = buf[i]\n var f\n if (flipped) {\n f = onesComp(byte)\n } else if (byte === 0) {\n f = byte\n } else {\n flipped = true\n f = twosComp(byte)\n }\n if (f !== 0) {\n sum -= f * Math.pow(256, len - i - 1)\n }\n }\n return sum\n}\n\nconst pos = (buf) => {\n var len = buf.length\n var sum = 0\n for (var i = len - 1; i > -1; i--) {\n var byte = buf[i]\n if (byte !== 0) {\n sum += byte * Math.pow(256, len - i - 1)\n }\n }\n return sum\n}\n\nconst onesComp = byte => (0xff ^ byte) & 0xff\n\nconst twosComp = byte => ((0xff ^ byte) + 1) & 0xff\n\nmodule.exports = {\n encode,\n parse,\n}\n","'use strict'\n// parse a 512-byte header block to a data object, or vice-versa\n// encode returns `true` if a pax extended header is needed, because\n// the data could not be faithfully encoded in a simple header.\n// (Also, check header.needPax to see if it needs a pax header.)\n\nconst types = require('./types.js')\nconst pathModule = require('path').posix\nconst large = require('./large-numbers.js')\n\nconst SLURP = Symbol('slurp')\nconst TYPE = Symbol('type')\n\nclass Header {\n constructor (data, off, ex, gex) {\n this.cksumValid = false\n this.needPax = false\n this.nullBlock = false\n\n this.block = null\n this.path = null\n this.mode = null\n this.uid = null\n this.gid = null\n this.size = null\n this.mtime = null\n this.cksum = null\n this[TYPE] = '0'\n this.linkpath = null\n this.uname = null\n this.gname = null\n this.devmaj = 0\n this.devmin = 0\n this.atime = null\n this.ctime = null\n\n if (Buffer.isBuffer(data)) {\n this.decode(data, off || 0, ex, gex)\n } else if (data) {\n this.set(data)\n }\n }\n\n decode (buf, off, ex, gex) {\n if (!off) {\n off = 0\n }\n\n if (!buf || !(buf.length >= off + 512)) {\n throw new Error('need 512 bytes for header')\n }\n\n this.path = decString(buf, off, 100)\n this.mode = decNumber(buf, off + 100, 8)\n this.uid = decNumber(buf, off + 108, 8)\n this.gid = decNumber(buf, off + 116, 8)\n this.size = decNumber(buf, off + 124, 12)\n this.mtime = decDate(buf, off + 136, 12)\n this.cksum = decNumber(buf, off + 148, 12)\n\n // if we have extended or global extended headers, apply them now\n // See https://github.com/npm/node-tar/pull/187\n this[SLURP](ex)\n this[SLURP](gex, true)\n\n // old tar versions marked dirs as a file with a trailing /\n this[TYPE] = decString(buf, off + 156, 1)\n if (this[TYPE] === '') {\n this[TYPE] = '0'\n }\n if (this[TYPE] === '0' && this.path.slice(-1) === '/') {\n this[TYPE] = '5'\n }\n\n // tar implementations sometimes incorrectly put the stat(dir).size\n // as the size in the tarball, even though Directory entries are\n // not able to have any body at all. In the very rare chance that\n // it actually DOES have a body, we weren't going to do anything with\n // it anyway, and it'll just be a warning about an invalid header.\n if (this[TYPE] === '5') {\n this.size = 0\n }\n\n this.linkpath = decString(buf, off + 157, 100)\n if (buf.slice(off + 257, off + 265).toString() === 'ustar\\u000000') {\n this.uname = decString(buf, off + 265, 32)\n this.gname = decString(buf, off + 297, 32)\n this.devmaj = decNumber(buf, off + 329, 8)\n this.devmin = decNumber(buf, off + 337, 8)\n if (buf[off + 475] !== 0) {\n // definitely a prefix, definitely >130 chars.\n const prefix = decString(buf, off + 345, 155)\n this.path = prefix + '/' + this.path\n } else {\n const prefix = decString(buf, off + 345, 130)\n if (prefix) {\n this.path = prefix + '/' + this.path\n }\n this.atime = decDate(buf, off + 476, 12)\n this.ctime = decDate(buf, off + 488, 12)\n }\n }\n\n let sum = 8 * 0x20\n for (let i = off; i < off + 148; i++) {\n sum += buf[i]\n }\n\n for (let i = off + 156; i < off + 512; i++) {\n sum += buf[i]\n }\n\n this.cksumValid = sum === this.cksum\n if (this.cksum === null && sum === 8 * 0x20) {\n this.nullBlock = true\n }\n }\n\n [SLURP] (ex, global) {\n for (const k in ex) {\n // we slurp in everything except for the path attribute in\n // a global extended header, because that's weird.\n if (ex[k] !== null && ex[k] !== undefined &&\n !(global && k === 'path')) {\n this[k] = ex[k]\n }\n }\n }\n\n encode (buf, off) {\n if (!buf) {\n buf = this.block = Buffer.alloc(512)\n off = 0\n }\n\n if (!off) {\n off = 0\n }\n\n if (!(buf.length >= off + 512)) {\n throw new Error('need 512 bytes for header')\n }\n\n const prefixSize = this.ctime || this.atime ? 130 : 155\n const split = splitPrefix(this.path || '', prefixSize)\n const path = split[0]\n const prefix = split[1]\n this.needPax = split[2]\n\n this.needPax = encString(buf, off, 100, path) || this.needPax\n this.needPax = encNumber(buf, off + 100, 8, this.mode) || this.needPax\n this.needPax = encNumber(buf, off + 108, 8, this.uid) || this.needPax\n this.needPax = encNumber(buf, off + 116, 8, this.gid) || this.needPax\n this.needPax = encNumber(buf, off + 124, 12, this.size) || this.needPax\n this.needPax = encDate(buf, off + 136, 12, this.mtime) || this.needPax\n buf[off + 156] = this[TYPE].charCodeAt(0)\n this.needPax = encString(buf, off + 157, 100, this.linkpath) || this.needPax\n buf.write('ustar\\u000000', off + 257, 8)\n this.needPax = encString(buf, off + 265, 32, this.uname) || this.needPax\n this.needPax = encString(buf, off + 297, 32, this.gname) || this.needPax\n this.needPax = encNumber(buf, off + 329, 8, this.devmaj) || this.needPax\n this.needPax = encNumber(buf, off + 337, 8, this.devmin) || this.needPax\n this.needPax = encString(buf, off + 345, prefixSize, prefix) || this.needPax\n if (buf[off + 475] !== 0) {\n this.needPax = encString(buf, off + 345, 155, prefix) || this.needPax\n } else {\n this.needPax = encString(buf, off + 345, 130, prefix) || this.needPax\n this.needPax = encDate(buf, off + 476, 12, this.atime) || this.needPax\n this.needPax = encDate(buf, off + 488, 12, this.ctime) || this.needPax\n }\n\n let sum = 8 * 0x20\n for (let i = off; i < off + 148; i++) {\n sum += buf[i]\n }\n\n for (let i = off + 156; i < off + 512; i++) {\n sum += buf[i]\n }\n\n this.cksum = sum\n encNumber(buf, off + 148, 8, this.cksum)\n this.cksumValid = true\n\n return this.needPax\n }\n\n set (data) {\n for (const i in data) {\n if (data[i] !== null && data[i] !== undefined) {\n this[i] = data[i]\n }\n }\n }\n\n get type () {\n return types.name.get(this[TYPE]) || this[TYPE]\n }\n\n get typeKey () {\n return this[TYPE]\n }\n\n set type (type) {\n if (types.code.has(type)) {\n this[TYPE] = types.code.get(type)\n } else {\n this[TYPE] = type\n }\n }\n}\n\nconst splitPrefix = (p, prefixSize) => {\n const pathSize = 100\n let pp = p\n let prefix = ''\n let ret\n const root = pathModule.parse(p).root || '.'\n\n if (Buffer.byteLength(pp) < pathSize) {\n ret = [pp, prefix, false]\n } else {\n // first set prefix to the dir, and path to the base\n prefix = pathModule.dirname(pp)\n pp = pathModule.basename(pp)\n\n do {\n if (Buffer.byteLength(pp) <= pathSize &&\n Buffer.byteLength(prefix) <= prefixSize) {\n // both fit!\n ret = [pp, prefix, false]\n } else if (Buffer.byteLength(pp) > pathSize &&\n Buffer.byteLength(prefix) <= prefixSize) {\n // prefix fits in prefix, but path doesn't fit in path\n ret = [pp.slice(0, pathSize - 1), prefix, true]\n } else {\n // make path take a bit from prefix\n pp = pathModule.join(pathModule.basename(prefix), pp)\n prefix = pathModule.dirname(prefix)\n }\n } while (prefix !== root && !ret)\n\n // at this point, found no resolution, just truncate\n if (!ret) {\n ret = [p.slice(0, pathSize - 1), '', true]\n }\n }\n return ret\n}\n\nconst decString = (buf, off, size) =>\n buf.slice(off, off + size).toString('utf8').replace(/\\0.*/, '')\n\nconst decDate = (buf, off, size) =>\n numToDate(decNumber(buf, off, size))\n\nconst numToDate = num => num === null ? null : new Date(num * 1000)\n\nconst decNumber = (buf, off, size) =>\n buf[off] & 0x80 ? large.parse(buf.slice(off, off + size))\n : decSmallNumber(buf, off, size)\n\nconst nanNull = value => isNaN(value) ? null : value\n\nconst decSmallNumber = (buf, off, size) =>\n nanNull(parseInt(\n buf.slice(off, off + size)\n .toString('utf8').replace(/\\0.*$/, '').trim(), 8))\n\n// the maximum encodable as a null-terminated octal, by field size\nconst MAXNUM = {\n 12: 0o77777777777,\n 8: 0o7777777,\n}\n\nconst encNumber = (buf, off, size, number) =>\n number === null ? false :\n number > MAXNUM[size] || number < 0\n ? (large.encode(number, buf.slice(off, off + size)), true)\n : (encSmallNumber(buf, off, size, number), false)\n\nconst encSmallNumber = (buf, off, size, number) =>\n buf.write(octalString(number, size), off, size, 'ascii')\n\nconst octalString = (number, size) =>\n padOctal(Math.floor(number).toString(8), size)\n\nconst padOctal = (string, size) =>\n (string.length === size - 1 ? string\n : new Array(size - string.length - 1).join('0') + string + ' ') + '\\0'\n\nconst encDate = (buf, off, size, date) =>\n date === null ? false :\n encNumber(buf, off, size, date.getTime() / 1000)\n\n// enough to fill the longest string we've got\nconst NULLS = new Array(156).join('\\0')\n// pad with nulls, return true if it's longer or non-ascii\nconst encString = (buf, off, size, string) =>\n string === null ? false :\n (buf.write(string + NULLS, off, size, 'utf8'),\n string.length !== Buffer.byteLength(string) || string.length > size)\n\nmodule.exports = Header\n","'use strict'\nconst Header = require('./header.js')\nconst path = require('path')\n\nclass Pax {\n constructor (obj, global) {\n this.atime = obj.atime || null\n this.charset = obj.charset || null\n this.comment = obj.comment || null\n this.ctime = obj.ctime || null\n this.gid = obj.gid || null\n this.gname = obj.gname || null\n this.linkpath = obj.linkpath || null\n this.mtime = obj.mtime || null\n this.path = obj.path || null\n this.size = obj.size || null\n this.uid = obj.uid || null\n this.uname = obj.uname || null\n this.dev = obj.dev || null\n this.ino = obj.ino || null\n this.nlink = obj.nlink || null\n this.global = global || false\n }\n\n encode () {\n const body = this.encodeBody()\n if (body === '') {\n return null\n }\n\n const bodyLen = Buffer.byteLength(body)\n // round up to 512 bytes\n // add 512 for header\n const bufLen = 512 * Math.ceil(1 + bodyLen / 512)\n const buf = Buffer.allocUnsafe(bufLen)\n\n // 0-fill the header section, it might not hit every field\n for (let i = 0; i < 512; i++) {\n buf[i] = 0\n }\n\n new Header({\n // XXX split the path\n // then the path should be PaxHeader + basename, but less than 99,\n // prepend with the dirname\n path: ('PaxHeader/' + path.basename(this.path)).slice(0, 99),\n mode: this.mode || 0o644,\n uid: this.uid || null,\n gid: this.gid || null,\n size: bodyLen,\n mtime: this.mtime || null,\n type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader',\n linkpath: '',\n uname: this.uname || '',\n gname: this.gname || '',\n devmaj: 0,\n devmin: 0,\n atime: this.atime || null,\n ctime: this.ctime || null,\n }).encode(buf)\n\n buf.write(body, 512, bodyLen, 'utf8')\n\n // null pad after the body\n for (let i = bodyLen + 512; i < buf.length; i++) {\n buf[i] = 0\n }\n\n return buf\n }\n\n encodeBody () {\n return (\n this.encodeField('path') +\n this.encodeField('ctime') +\n this.encodeField('atime') +\n this.encodeField('dev') +\n this.encodeField('ino') +\n this.encodeField('nlink') +\n this.encodeField('charset') +\n this.encodeField('comment') +\n this.encodeField('gid') +\n this.encodeField('gname') +\n this.encodeField('linkpath') +\n this.encodeField('mtime') +\n this.encodeField('size') +\n this.encodeField('uid') +\n this.encodeField('uname')\n )\n }\n\n encodeField (field) {\n if (this[field] === null || this[field] === undefined) {\n return ''\n }\n const v = this[field] instanceof Date ? this[field].getTime() / 1000\n : this[field]\n const s = ' ' +\n (field === 'dev' || field === 'ino' || field === 'nlink'\n ? 'SCHILY.' : '') +\n field + '=' + v + '\\n'\n const byteLen = Buffer.byteLength(s)\n // the digits includes the length of the digits in ascii base-10\n // so if it's 9 characters, then adding 1 for the 9 makes it 10\n // which makes it 11 chars.\n let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1\n if (byteLen + digits >= Math.pow(10, digits)) {\n digits += 1\n }\n const len = digits + byteLen\n return len + s\n }\n}\n\nPax.parse = (string, ex, g) => new Pax(merge(parseKV(string), ex), g)\n\nconst merge = (a, b) =>\n b ? Object.keys(a).reduce((s, k) => (s[k] = a[k], s), b) : a\n\nconst parseKV = string =>\n string\n .replace(/\\n$/, '')\n .split('\\n')\n .reduce(parseKVLine, Object.create(null))\n\nconst parseKVLine = (set, line) => {\n const n = parseInt(line, 10)\n\n // XXX Values with \\n in them will fail this.\n // Refactor to not be a naive line-by-line parse.\n if (n !== Buffer.byteLength(line) + 1) {\n return set\n }\n\n line = line.slice((n + ' ').length)\n const kv = line.split('=')\n const k = kv.shift().replace(/^SCHILY\\.(dev|ino|nlink)/, '$1')\n if (!k) {\n return set\n }\n\n const v = kv.join('=')\n set[k] = /^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(k)\n ? new Date(v * 1000)\n : /^[0-9]+$/.test(v) ? +v\n : v\n return set\n}\n\nmodule.exports = Pax\n","// warning: extremely hot code path.\n// This has been meticulously optimized for use\n// within npm install on large package trees.\n// Do not edit without careful benchmarking.\nmodule.exports = str => {\n let i = str.length - 1\n let slashesStart = -1\n while (i > -1 && str.charAt(i) === '/') {\n slashesStart = i\n i--\n }\n return slashesStart === -1 ? str : str.slice(0, slashesStart)\n}\n","'use strict'\nmodule.exports = Base => class extends Base {\n warn (code, message, data = {}) {\n if (this.file) {\n data.file = this.file\n }\n if (this.cwd) {\n data.cwd = this.cwd\n }\n data.code = message instanceof Error && message.code || code\n data.tarCode = code\n if (!this.strict && data.recoverable !== false) {\n if (message instanceof Error) {\n data = Object.assign(message, data)\n message = message.message\n }\n this.emit('warn', data.tarCode, message, data)\n } else if (message instanceof Error) {\n this.emit('error', Object.assign(message, data))\n } else {\n this.emit('error', Object.assign(new Error(`${code}: ${message}`), data))\n }\n }\n}\n","'use strict'\n\n// When writing files on Windows, translate the characters to their\n// 0xf000 higher-encoded versions.\n\nconst raw = [\n '|',\n '<',\n '>',\n '?',\n ':',\n]\n\nconst win = raw.map(char =>\n String.fromCharCode(0xf000 + char.charCodeAt(0)))\n\nconst toWin = new Map(raw.map((char, i) => [char, win[i]]))\nconst toRaw = new Map(win.map((char, i) => [char, raw[i]]))\n\nmodule.exports = {\n encode: s => raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s),\n decode: s => win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s),\n}\n","// unix absolute paths are also absolute on win32, so we use this for both\nconst { isAbsolute, parse } = require('path').win32\n\n// returns [root, stripped]\n// Note that windows will think that //x/y/z/a has a \"root\" of //x/y, and in\n// those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip /\n// explicitly if it's the first character.\n// drive-specific relative paths on Windows get their root stripped off even\n// though they are not absolute, so `c:../foo` becomes ['c:', '../foo']\nmodule.exports = path => {\n let r = ''\n\n let parsed = parse(path)\n while (isAbsolute(path) || parsed.root) {\n // windows will think that //x/y/z has a \"root\" of //x/y/\n // but strip the //?/C:/ off of //?/C:/path\n const root = path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ? '/'\n : parsed.root\n path = path.slice(root.length)\n r += root\n parsed = parse(path)\n }\n return [r, path]\n}\n","'use strict'\nmodule.exports = (mode, isDir, portable) => {\n mode &= 0o7777\n\n // in portable mode, use the minimum reasonable umask\n // if this system creates files with 0o664 by default\n // (as some linux distros do), then we'll write the\n // archive with 0o644 instead. Also, don't ever create\n // a file that is not readable/writable by the owner.\n if (portable) {\n mode = (mode | 0o600) & ~0o22\n }\n\n // if dirs are readable, then they should be listable\n if (isDir) {\n if (mode & 0o400) {\n mode |= 0o100\n }\n if (mode & 0o40) {\n mode |= 0o10\n }\n if (mode & 0o4) {\n mode |= 0o1\n }\n }\n return mode\n}\n","'use strict'\nconst { Minipass } = require('minipass')\nconst Pax = require('./pax.js')\nconst Header = require('./header.js')\nconst fs = require('fs')\nconst path = require('path')\nconst normPath = require('./normalize-windows-path.js')\nconst stripSlash = require('./strip-trailing-slashes.js')\n\nconst prefixPath = (path, prefix) => {\n if (!prefix) {\n return normPath(path)\n }\n path = normPath(path).replace(/^\\.(\\/|$)/, '')\n return stripSlash(prefix) + '/' + path\n}\n\nconst maxReadSize = 16 * 1024 * 1024\nconst PROCESS = Symbol('process')\nconst FILE = Symbol('file')\nconst DIRECTORY = Symbol('directory')\nconst SYMLINK = Symbol('symlink')\nconst HARDLINK = Symbol('hardlink')\nconst HEADER = Symbol('header')\nconst READ = Symbol('read')\nconst LSTAT = Symbol('lstat')\nconst ONLSTAT = Symbol('onlstat')\nconst ONREAD = Symbol('onread')\nconst ONREADLINK = Symbol('onreadlink')\nconst OPENFILE = Symbol('openfile')\nconst ONOPENFILE = Symbol('onopenfile')\nconst CLOSE = Symbol('close')\nconst MODE = Symbol('mode')\nconst AWAITDRAIN = Symbol('awaitDrain')\nconst ONDRAIN = Symbol('ondrain')\nconst PREFIX = Symbol('prefix')\nconst HAD_ERROR = Symbol('hadError')\nconst warner = require('./warn-mixin.js')\nconst winchars = require('./winchars.js')\nconst stripAbsolutePath = require('./strip-absolute-path.js')\n\nconst modeFix = require('./mode-fix.js')\n\nconst WriteEntry = warner(class WriteEntry extends Minipass {\n constructor (p, opt) {\n opt = opt || {}\n super(opt)\n if (typeof p !== 'string') {\n throw new TypeError('path is required')\n }\n this.path = normPath(p)\n // suppress atime, ctime, uid, gid, uname, gname\n this.portable = !!opt.portable\n // until node has builtin pwnam functions, this'll have to do\n this.myuid = process.getuid && process.getuid() || 0\n this.myuser = process.env.USER || ''\n this.maxReadSize = opt.maxReadSize || maxReadSize\n this.linkCache = opt.linkCache || new Map()\n this.statCache = opt.statCache || new Map()\n this.preservePaths = !!opt.preservePaths\n this.cwd = normPath(opt.cwd || process.cwd())\n this.strict = !!opt.strict\n this.noPax = !!opt.noPax\n this.noMtime = !!opt.noMtime\n this.mtime = opt.mtime || null\n this.prefix = opt.prefix ? normPath(opt.prefix) : null\n\n this.fd = null\n this.blockLen = null\n this.blockRemain = null\n this.buf = null\n this.offset = null\n this.length = null\n this.pos = null\n this.remain = null\n\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn)\n }\n\n let pathWarn = false\n if (!this.preservePaths) {\n const [root, stripped] = stripAbsolutePath(this.path)\n if (root) {\n this.path = stripped\n pathWarn = root\n }\n }\n\n this.win32 = !!opt.win32 || process.platform === 'win32'\n if (this.win32) {\n // force the \\ to / normalization, since we might not *actually*\n // be on windows, but want \\ to be considered a path separator.\n this.path = winchars.decode(this.path.replace(/\\\\/g, '/'))\n p = p.replace(/\\\\/g, '/')\n }\n\n this.absolute = normPath(opt.absolute || path.resolve(this.cwd, p))\n\n if (this.path === '') {\n this.path = './'\n }\n\n if (pathWarn) {\n this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {\n entry: this,\n path: pathWarn + this.path,\n })\n }\n\n if (this.statCache.has(this.absolute)) {\n this[ONLSTAT](this.statCache.get(this.absolute))\n } else {\n this[LSTAT]()\n }\n }\n\n emit (ev, ...data) {\n if (ev === 'error') {\n this[HAD_ERROR] = true\n }\n return super.emit(ev, ...data)\n }\n\n [LSTAT] () {\n fs.lstat(this.absolute, (er, stat) => {\n if (er) {\n return this.emit('error', er)\n }\n this[ONLSTAT](stat)\n })\n }\n\n [ONLSTAT] (stat) {\n this.statCache.set(this.absolute, stat)\n this.stat = stat\n if (!stat.isFile()) {\n stat.size = 0\n }\n this.type = getType(stat)\n this.emit('stat', stat)\n this[PROCESS]()\n }\n\n [PROCESS] () {\n switch (this.type) {\n case 'File': return this[FILE]()\n case 'Directory': return this[DIRECTORY]()\n case 'SymbolicLink': return this[SYMLINK]()\n // unsupported types are ignored.\n default: return this.end()\n }\n }\n\n [MODE] (mode) {\n return modeFix(mode, this.type === 'Directory', this.portable)\n }\n\n [PREFIX] (path) {\n return prefixPath(path, this.prefix)\n }\n\n [HEADER] () {\n if (this.type === 'Directory' && this.portable) {\n this.noMtime = true\n }\n\n this.header = new Header({\n path: this[PREFIX](this.path),\n // only apply the prefix to hard links.\n linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath)\n : this.linkpath,\n // only the permissions and setuid/setgid/sticky bitflags\n // not the higher-order bits that specify file type\n mode: this[MODE](this.stat.mode),\n uid: this.portable ? null : this.stat.uid,\n gid: this.portable ? null : this.stat.gid,\n size: this.stat.size,\n mtime: this.noMtime ? null : this.mtime || this.stat.mtime,\n type: this.type,\n uname: this.portable ? null :\n this.stat.uid === this.myuid ? this.myuser : '',\n atime: this.portable ? null : this.stat.atime,\n ctime: this.portable ? null : this.stat.ctime,\n })\n\n if (this.header.encode() && !this.noPax) {\n super.write(new Pax({\n atime: this.portable ? null : this.header.atime,\n ctime: this.portable ? null : this.header.ctime,\n gid: this.portable ? null : this.header.gid,\n mtime: this.noMtime ? null : this.mtime || this.header.mtime,\n path: this[PREFIX](this.path),\n linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath)\n : this.linkpath,\n size: this.header.size,\n uid: this.portable ? null : this.header.uid,\n uname: this.portable ? null : this.header.uname,\n dev: this.portable ? null : this.stat.dev,\n ino: this.portable ? null : this.stat.ino,\n nlink: this.portable ? null : this.stat.nlink,\n }).encode())\n }\n super.write(this.header.block)\n }\n\n [DIRECTORY] () {\n if (this.path.slice(-1) !== '/') {\n this.path += '/'\n }\n this.stat.size = 0\n this[HEADER]()\n this.end()\n }\n\n [SYMLINK] () {\n fs.readlink(this.absolute, (er, linkpath) => {\n if (er) {\n return this.emit('error', er)\n }\n this[ONREADLINK](linkpath)\n })\n }\n\n [ONREADLINK] (linkpath) {\n this.linkpath = normPath(linkpath)\n this[HEADER]()\n this.end()\n }\n\n [HARDLINK] (linkpath) {\n this.type = 'Link'\n this.linkpath = normPath(path.relative(this.cwd, linkpath))\n this.stat.size = 0\n this[HEADER]()\n this.end()\n }\n\n [FILE] () {\n if (this.stat.nlink > 1) {\n const linkKey = this.stat.dev + ':' + this.stat.ino\n if (this.linkCache.has(linkKey)) {\n const linkpath = this.linkCache.get(linkKey)\n if (linkpath.indexOf(this.cwd) === 0) {\n return this[HARDLINK](linkpath)\n }\n }\n this.linkCache.set(linkKey, this.absolute)\n }\n\n this[HEADER]()\n if (this.stat.size === 0) {\n return this.end()\n }\n\n this[OPENFILE]()\n }\n\n [OPENFILE] () {\n fs.open(this.absolute, 'r', (er, fd) => {\n if (er) {\n return this.emit('error', er)\n }\n this[ONOPENFILE](fd)\n })\n }\n\n [ONOPENFILE] (fd) {\n this.fd = fd\n if (this[HAD_ERROR]) {\n return this[CLOSE]()\n }\n\n this.blockLen = 512 * Math.ceil(this.stat.size / 512)\n this.blockRemain = this.blockLen\n const bufLen = Math.min(this.blockLen, this.maxReadSize)\n this.buf = Buffer.allocUnsafe(bufLen)\n this.offset = 0\n this.pos = 0\n this.remain = this.stat.size\n this.length = this.buf.length\n this[READ]()\n }\n\n [READ] () {\n const { fd, buf, offset, length, pos } = this\n fs.read(fd, buf, offset, length, pos, (er, bytesRead) => {\n if (er) {\n // ignoring the error from close(2) is a bad practice, but at\n // this point we already have an error, don't need another one\n return this[CLOSE](() => this.emit('error', er))\n }\n this[ONREAD](bytesRead)\n })\n }\n\n [CLOSE] (cb) {\n fs.close(this.fd, cb)\n }\n\n [ONREAD] (bytesRead) {\n if (bytesRead <= 0 && this.remain > 0) {\n const er = new Error('encountered unexpected EOF')\n er.path = this.absolute\n er.syscall = 'read'\n er.code = 'EOF'\n return this[CLOSE](() => this.emit('error', er))\n }\n\n if (bytesRead > this.remain) {\n const er = new Error('did not encounter expected EOF')\n er.path = this.absolute\n er.syscall = 'read'\n er.code = 'EOF'\n return this[CLOSE](() => this.emit('error', er))\n }\n\n // null out the rest of the buffer, if we could fit the block padding\n // at the end of this loop, we've incremented bytesRead and this.remain\n // to be incremented up to the blockRemain level, as if we had expected\n // to get a null-padded file, and read it until the end. then we will\n // decrement both remain and blockRemain by bytesRead, and know that we\n // reached the expected EOF, without any null buffer to append.\n if (bytesRead === this.remain) {\n for (let i = bytesRead; i < this.length && bytesRead < this.blockRemain; i++) {\n this.buf[i + this.offset] = 0\n bytesRead++\n this.remain++\n }\n }\n\n const writeBuf = this.offset === 0 && bytesRead === this.buf.length ?\n this.buf : this.buf.slice(this.offset, this.offset + bytesRead)\n\n const flushed = this.write(writeBuf)\n if (!flushed) {\n this[AWAITDRAIN](() => this[ONDRAIN]())\n } else {\n this[ONDRAIN]()\n }\n }\n\n [AWAITDRAIN] (cb) {\n this.once('drain', cb)\n }\n\n write (writeBuf) {\n if (this.blockRemain < writeBuf.length) {\n const er = new Error('writing more data than expected')\n er.path = this.absolute\n return this.emit('error', er)\n }\n this.remain -= writeBuf.length\n this.blockRemain -= writeBuf.length\n this.pos += writeBuf.length\n this.offset += writeBuf.length\n return super.write(writeBuf)\n }\n\n [ONDRAIN] () {\n if (!this.remain) {\n if (this.blockRemain) {\n super.write(Buffer.alloc(this.blockRemain))\n }\n return this[CLOSE](er => er ? this.emit('error', er) : this.end())\n }\n\n if (this.offset >= this.length) {\n // if we only have a smaller bit left to read, alloc a smaller buffer\n // otherwise, keep it the same length it was before.\n this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length))\n this.offset = 0\n }\n this.length = this.buf.length - this.offset\n this[READ]()\n }\n})\n\nclass WriteEntrySync extends WriteEntry {\n [LSTAT] () {\n this[ONLSTAT](fs.lstatSync(this.absolute))\n }\n\n [SYMLINK] () {\n this[ONREADLINK](fs.readlinkSync(this.absolute))\n }\n\n [OPENFILE] () {\n this[ONOPENFILE](fs.openSync(this.absolute, 'r'))\n }\n\n [READ] () {\n let threw = true\n try {\n const { fd, buf, offset, length, pos } = this\n const bytesRead = fs.readSync(fd, buf, offset, length, pos)\n this[ONREAD](bytesRead)\n threw = false\n } finally {\n // ignoring the error from close(2) is a bad practice, but at\n // this point we already have an error, don't need another one\n if (threw) {\n try {\n this[CLOSE](() => {})\n } catch (er) {}\n }\n }\n }\n\n [AWAITDRAIN] (cb) {\n cb()\n }\n\n [CLOSE] (cb) {\n fs.closeSync(this.fd)\n cb()\n }\n}\n\nconst WriteEntryTar = warner(class WriteEntryTar extends Minipass {\n constructor (readEntry, opt) {\n opt = opt || {}\n super(opt)\n this.preservePaths = !!opt.preservePaths\n this.portable = !!opt.portable\n this.strict = !!opt.strict\n this.noPax = !!opt.noPax\n this.noMtime = !!opt.noMtime\n\n this.readEntry = readEntry\n this.type = readEntry.type\n if (this.type === 'Directory' && this.portable) {\n this.noMtime = true\n }\n\n this.prefix = opt.prefix || null\n\n this.path = normPath(readEntry.path)\n this.mode = this[MODE](readEntry.mode)\n this.uid = this.portable ? null : readEntry.uid\n this.gid = this.portable ? null : readEntry.gid\n this.uname = this.portable ? null : readEntry.uname\n this.gname = this.portable ? null : readEntry.gname\n this.size = readEntry.size\n this.mtime = this.noMtime ? null : opt.mtime || readEntry.mtime\n this.atime = this.portable ? null : readEntry.atime\n this.ctime = this.portable ? null : readEntry.ctime\n this.linkpath = normPath(readEntry.linkpath)\n\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn)\n }\n\n let pathWarn = false\n if (!this.preservePaths) {\n const [root, stripped] = stripAbsolutePath(this.path)\n if (root) {\n this.path = stripped\n pathWarn = root\n }\n }\n\n this.remain = readEntry.size\n this.blockRemain = readEntry.startBlockSize\n\n this.header = new Header({\n path: this[PREFIX](this.path),\n linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath)\n : this.linkpath,\n // only the permissions and setuid/setgid/sticky bitflags\n // not the higher-order bits that specify file type\n mode: this.mode,\n uid: this.portable ? null : this.uid,\n gid: this.portable ? null : this.gid,\n size: this.size,\n mtime: this.noMtime ? null : this.mtime,\n type: this.type,\n uname: this.portable ? null : this.uname,\n atime: this.portable ? null : this.atime,\n ctime: this.portable ? null : this.ctime,\n })\n\n if (pathWarn) {\n this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {\n entry: this,\n path: pathWarn + this.path,\n })\n }\n\n if (this.header.encode() && !this.noPax) {\n super.write(new Pax({\n atime: this.portable ? null : this.atime,\n ctime: this.portable ? null : this.ctime,\n gid: this.portable ? null : this.gid,\n mtime: this.noMtime ? null : this.mtime,\n path: this[PREFIX](this.path),\n linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath)\n : this.linkpath,\n size: this.size,\n uid: this.portable ? null : this.uid,\n uname: this.portable ? null : this.uname,\n dev: this.portable ? null : this.readEntry.dev,\n ino: this.portable ? null : this.readEntry.ino,\n nlink: this.portable ? null : this.readEntry.nlink,\n }).encode())\n }\n\n super.write(this.header.block)\n readEntry.pipe(this)\n }\n\n [PREFIX] (path) {\n return prefixPath(path, this.prefix)\n }\n\n [MODE] (mode) {\n return modeFix(mode, this.type === 'Directory', this.portable)\n }\n\n write (data) {\n const writeLen = data.length\n if (writeLen > this.blockRemain) {\n throw new Error('writing more to entry than is appropriate')\n }\n this.blockRemain -= writeLen\n return super.write(data)\n }\n\n end () {\n if (this.blockRemain) {\n super.write(Buffer.alloc(this.blockRemain))\n }\n return super.end()\n }\n})\n\nWriteEntry.Sync = WriteEntrySync\nWriteEntry.Tar = WriteEntryTar\n\nconst getType = stat =>\n stat.isFile() ? 'File'\n : stat.isDirectory() ? 'Directory'\n : stat.isSymbolicLink() ? 'SymbolicLink'\n : 'Unsupported'\n\nmodule.exports = WriteEntry\n","'use strict'\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value\n }\n }\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n\n return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n if (start > this.length) {\n start = this.length - 1\n }\n if (start < 0) {\n start = this.length + start;\n }\n\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next\n }\n\n var ret = []\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value)\n walker = this.removeNode(walker)\n }\n if (walker === null) {\n walker = this.tail\n }\n\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev\n }\n\n for (var i = 0; i < nodes.length; i++) {\n walker = insert(this, walker, nodes[i])\n }\n return ret;\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction insert (self, node, value) {\n var inserted = node === self.head ?\n new Node(value, null, node, self) :\n new Node(value, node, node.next, self)\n\n if (inserted.next === null) {\n self.tail = inserted\n }\n if (inserted.prev === null) {\n self.head = inserted\n }\n\n self.length++\n\n return inserted\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist)\n} catch (er) {}\n","'use strict'\n\n// A readable tar stream creator\n// Technically, this is a transform stream that you write paths into,\n// and tar format comes out of.\n// The `add()` method is like `write()` but returns this,\n// and end() return `this` as well, so you can\n// do `new Pack(opt).add('files').add('dir').end().pipe(output)\n// You could also do something like:\n// streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar'))\n\nclass PackJob {\n constructor (path, absolute) {\n this.path = path || './'\n this.absolute = absolute\n this.entry = null\n this.stat = null\n this.readdir = null\n this.pending = false\n this.ignore = false\n this.piped = false\n }\n}\n\nconst { Minipass } = require('minipass')\nconst zlib = require('minizlib')\nconst ReadEntry = require('./read-entry.js')\nconst WriteEntry = require('./write-entry.js')\nconst WriteEntrySync = WriteEntry.Sync\nconst WriteEntryTar = WriteEntry.Tar\nconst Yallist = require('yallist')\nconst EOF = Buffer.alloc(1024)\nconst ONSTAT = Symbol('onStat')\nconst ENDED = Symbol('ended')\nconst QUEUE = Symbol('queue')\nconst CURRENT = Symbol('current')\nconst PROCESS = Symbol('process')\nconst PROCESSING = Symbol('processing')\nconst PROCESSJOB = Symbol('processJob')\nconst JOBS = Symbol('jobs')\nconst JOBDONE = Symbol('jobDone')\nconst ADDFSENTRY = Symbol('addFSEntry')\nconst ADDTARENTRY = Symbol('addTarEntry')\nconst STAT = Symbol('stat')\nconst READDIR = Symbol('readdir')\nconst ONREADDIR = Symbol('onreaddir')\nconst PIPE = Symbol('pipe')\nconst ENTRY = Symbol('entry')\nconst ENTRYOPT = Symbol('entryOpt')\nconst WRITEENTRYCLASS = Symbol('writeEntryClass')\nconst WRITE = Symbol('write')\nconst ONDRAIN = Symbol('ondrain')\n\nconst fs = require('fs')\nconst path = require('path')\nconst warner = require('./warn-mixin.js')\nconst normPath = require('./normalize-windows-path.js')\n\nconst Pack = warner(class Pack extends Minipass {\n constructor (opt) {\n super(opt)\n opt = opt || Object.create(null)\n this.opt = opt\n this.file = opt.file || ''\n this.cwd = opt.cwd || process.cwd()\n this.maxReadSize = opt.maxReadSize\n this.preservePaths = !!opt.preservePaths\n this.strict = !!opt.strict\n this.noPax = !!opt.noPax\n this.prefix = normPath(opt.prefix || '')\n this.linkCache = opt.linkCache || new Map()\n this.statCache = opt.statCache || new Map()\n this.readdirCache = opt.readdirCache || new Map()\n\n this[WRITEENTRYCLASS] = WriteEntry\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn)\n }\n\n this.portable = !!opt.portable\n this.zip = null\n\n if (opt.gzip || opt.brotli) {\n if (opt.gzip && opt.brotli) {\n throw new TypeError('gzip and brotli are mutually exclusive')\n }\n if (opt.gzip) {\n if (typeof opt.gzip !== 'object') {\n opt.gzip = {}\n }\n if (this.portable) {\n opt.gzip.portable = true\n }\n this.zip = new zlib.Gzip(opt.gzip)\n }\n if (opt.brotli) {\n if (typeof opt.brotli !== 'object') {\n opt.brotli = {}\n }\n this.zip = new zlib.BrotliCompress(opt.brotli)\n }\n this.zip.on('data', chunk => super.write(chunk))\n this.zip.on('end', _ => super.end())\n this.zip.on('drain', _ => this[ONDRAIN]())\n this.on('resume', _ => this.zip.resume())\n } else {\n this.on('drain', this[ONDRAIN])\n }\n\n this.noDirRecurse = !!opt.noDirRecurse\n this.follow = !!opt.follow\n this.noMtime = !!opt.noMtime\n this.mtime = opt.mtime || null\n\n this.filter = typeof opt.filter === 'function' ? opt.filter : _ => true\n\n this[QUEUE] = new Yallist()\n this[JOBS] = 0\n this.jobs = +opt.jobs || 4\n this[PROCESSING] = false\n this[ENDED] = false\n }\n\n [WRITE] (chunk) {\n return super.write(chunk)\n }\n\n add (path) {\n this.write(path)\n return this\n }\n\n end (path) {\n if (path) {\n this.write(path)\n }\n this[ENDED] = true\n this[PROCESS]()\n return this\n }\n\n write (path) {\n if (this[ENDED]) {\n throw new Error('write after end')\n }\n\n if (path instanceof ReadEntry) {\n this[ADDTARENTRY](path)\n } else {\n this[ADDFSENTRY](path)\n }\n return this.flowing\n }\n\n [ADDTARENTRY] (p) {\n const absolute = normPath(path.resolve(this.cwd, p.path))\n // in this case, we don't have to wait for the stat\n if (!this.filter(p.path, p)) {\n p.resume()\n } else {\n const job = new PackJob(p.path, absolute, false)\n job.entry = new WriteEntryTar(p, this[ENTRYOPT](job))\n job.entry.on('end', _ => this[JOBDONE](job))\n this[JOBS] += 1\n this[QUEUE].push(job)\n }\n\n this[PROCESS]()\n }\n\n [ADDFSENTRY] (p) {\n const absolute = normPath(path.resolve(this.cwd, p))\n this[QUEUE].push(new PackJob(p, absolute))\n this[PROCESS]()\n }\n\n [STAT] (job) {\n job.pending = true\n this[JOBS] += 1\n const stat = this.follow ? 'stat' : 'lstat'\n fs[stat](job.absolute, (er, stat) => {\n job.pending = false\n this[JOBS] -= 1\n if (er) {\n this.emit('error', er)\n } else {\n this[ONSTAT](job, stat)\n }\n })\n }\n\n [ONSTAT] (job, stat) {\n this.statCache.set(job.absolute, stat)\n job.stat = stat\n\n // now we have the stat, we can filter it.\n if (!this.filter(job.path, stat)) {\n job.ignore = true\n }\n\n this[PROCESS]()\n }\n\n [READDIR] (job) {\n job.pending = true\n this[JOBS] += 1\n fs.readdir(job.absolute, (er, entries) => {\n job.pending = false\n this[JOBS] -= 1\n if (er) {\n return this.emit('error', er)\n }\n this[ONREADDIR](job, entries)\n })\n }\n\n [ONREADDIR] (job, entries) {\n this.readdirCache.set(job.absolute, entries)\n job.readdir = entries\n this[PROCESS]()\n }\n\n [PROCESS] () {\n if (this[PROCESSING]) {\n return\n }\n\n this[PROCESSING] = true\n for (let w = this[QUEUE].head;\n w !== null && this[JOBS] < this.jobs;\n w = w.next) {\n this[PROCESSJOB](w.value)\n if (w.value.ignore) {\n const p = w.next\n this[QUEUE].removeNode(w)\n w.next = p\n }\n }\n\n this[PROCESSING] = false\n\n if (this[ENDED] && !this[QUEUE].length && this[JOBS] === 0) {\n if (this.zip) {\n this.zip.end(EOF)\n } else {\n super.write(EOF)\n super.end()\n }\n }\n }\n\n get [CURRENT] () {\n return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value\n }\n\n [JOBDONE] (job) {\n this[QUEUE].shift()\n this[JOBS] -= 1\n this[PROCESS]()\n }\n\n [PROCESSJOB] (job) {\n if (job.pending) {\n return\n }\n\n if (job.entry) {\n if (job === this[CURRENT] && !job.piped) {\n this[PIPE](job)\n }\n return\n }\n\n if (!job.stat) {\n if (this.statCache.has(job.absolute)) {\n this[ONSTAT](job, this.statCache.get(job.absolute))\n } else {\n this[STAT](job)\n }\n }\n if (!job.stat) {\n return\n }\n\n // filtered out!\n if (job.ignore) {\n return\n }\n\n if (!this.noDirRecurse && job.stat.isDirectory() && !job.readdir) {\n if (this.readdirCache.has(job.absolute)) {\n this[ONREADDIR](job, this.readdirCache.get(job.absolute))\n } else {\n this[READDIR](job)\n }\n if (!job.readdir) {\n return\n }\n }\n\n // we know it doesn't have an entry, because that got checked above\n job.entry = this[ENTRY](job)\n if (!job.entry) {\n job.ignore = true\n return\n }\n\n if (job === this[CURRENT] && !job.piped) {\n this[PIPE](job)\n }\n }\n\n [ENTRYOPT] (job) {\n return {\n onwarn: (code, msg, data) => this.warn(code, msg, data),\n noPax: this.noPax,\n cwd: this.cwd,\n absolute: job.absolute,\n preservePaths: this.preservePaths,\n maxReadSize: this.maxReadSize,\n strict: this.strict,\n portable: this.portable,\n linkCache: this.linkCache,\n statCache: this.statCache,\n noMtime: this.noMtime,\n mtime: this.mtime,\n prefix: this.prefix,\n }\n }\n\n [ENTRY] (job) {\n this[JOBS] += 1\n try {\n return new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job))\n .on('end', () => this[JOBDONE](job))\n .on('error', er => this.emit('error', er))\n } catch (er) {\n this.emit('error', er)\n }\n }\n\n [ONDRAIN] () {\n if (this[CURRENT] && this[CURRENT].entry) {\n this[CURRENT].entry.resume()\n }\n }\n\n // like .pipe() but using super, because our write() is special\n [PIPE] (job) {\n job.piped = true\n\n if (job.readdir) {\n job.readdir.forEach(entry => {\n const p = job.path\n const base = p === './' ? '' : p.replace(/\\/*$/, '/')\n this[ADDFSENTRY](base + entry)\n })\n }\n\n const source = job.entry\n const zip = this.zip\n\n if (zip) {\n source.on('data', chunk => {\n if (!zip.write(chunk)) {\n source.pause()\n }\n })\n } else {\n source.on('data', chunk => {\n if (!super.write(chunk)) {\n source.pause()\n }\n })\n }\n }\n\n pause () {\n if (this.zip) {\n this.zip.pause()\n }\n return super.pause()\n }\n})\n\nclass PackSync extends Pack {\n constructor (opt) {\n super(opt)\n this[WRITEENTRYCLASS] = WriteEntrySync\n }\n\n // pause/resume are no-ops in sync streams.\n pause () {}\n resume () {}\n\n [STAT] (job) {\n const stat = this.follow ? 'statSync' : 'lstatSync'\n this[ONSTAT](job, fs[stat](job.absolute))\n }\n\n [READDIR] (job, stat) {\n this[ONREADDIR](job, fs.readdirSync(job.absolute))\n }\n\n // gotta get it all in this tick\n [PIPE] (job) {\n const source = job.entry\n const zip = this.zip\n\n if (job.readdir) {\n job.readdir.forEach(entry => {\n const p = job.path\n const base = p === './' ? '' : p.replace(/\\/*$/, '/')\n this[ADDFSENTRY](base + entry)\n })\n }\n\n if (zip) {\n source.on('data', chunk => {\n zip.write(chunk)\n })\n } else {\n source.on('data', chunk => {\n super[WRITE](chunk)\n })\n }\n }\n}\n\nPack.Sync = PackSync\n\nmodule.exports = Pack\n","'use strict'\nconst proc = typeof process === 'object' && process ? process : {\n stdout: null,\n stderr: null,\n}\nconst EE = require('events')\nconst Stream = require('stream')\nconst SD = require('string_decoder').StringDecoder\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\nconst DESTROYED = Symbol('destroyed')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\n\nconst defer = fn => Promise.resolve().then(fn)\n\n// TODO remove when Node v8 support drops\nconst doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1'\nconst ASYNCITERATOR = doIter && Symbol.asyncIterator\n || Symbol('asyncIterator not implemented')\nconst ITERATOR = doIter && Symbol.iterator\n || Symbol('iterator not implemented')\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\nconst isEndish = ev =>\n ev === 'end' ||\n ev === 'finish' ||\n ev === 'prefinish'\n\nconst isArrayBuffer = b => b instanceof ArrayBuffer ||\n typeof b === 'object' &&\n b.constructor &&\n b.constructor.name === 'ArrayBuffer' &&\n b.byteLength >= 0\n\nconst isArrayBufferView = b => !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\nclass Pipe {\n constructor (src, dest, opts) {\n this.src = src\n this.dest = dest\n this.opts = opts\n this.ondrain = () => src[RESUME]()\n dest.on('drain', this.ondrain)\n }\n unpipe () {\n this.dest.removeListener('drain', this.ondrain)\n }\n // istanbul ignore next - only here for the prototype\n proxyErrors () {}\n end () {\n this.unpipe()\n if (this.opts.end)\n this.dest.end()\n }\n}\n\nclass PipeProxyErrors extends Pipe {\n unpipe () {\n this.src.removeListener('error', this.proxyErrors)\n super.unpipe()\n }\n constructor (src, dest, opts) {\n super(src, dest, opts)\n this.proxyErrors = er => dest.emit('error', er)\n src.on('error', this.proxyErrors)\n }\n}\n\nmodule.exports = class Minipass extends Stream {\n constructor (options) {\n super()\n this[FLOWING] = false\n // whether we're explicitly paused\n this[PAUSED] = false\n this.pipes = []\n this.buffer = []\n this[OBJECTMODE] = options && options.objectMode || false\n if (this[OBJECTMODE])\n this[ENCODING] = null\n else\n this[ENCODING] = options && options.encoding || null\n if (this[ENCODING] === 'buffer')\n this[ENCODING] = null\n this[ASYNC] = options && !!options.async || false\n this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null\n this[EOF] = false\n this[EMITTED_END] = false\n this[EMITTING_END] = false\n this[CLOSED] = false\n this[EMITTED_ERROR] = null\n this.writable = true\n this.readable = true\n this[BUFFERLENGTH] = 0\n this[DESTROYED] = false\n }\n\n get bufferLength () { return this[BUFFERLENGTH] }\n\n get encoding () { return this[ENCODING] }\n set encoding (enc) {\n if (this[OBJECTMODE])\n throw new Error('cannot set encoding in objectMode')\n\n if (this[ENCODING] && enc !== this[ENCODING] &&\n (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH]))\n throw new Error('cannot change encoding')\n\n if (this[ENCODING] !== enc) {\n this[DECODER] = enc ? new SD(enc) : null\n if (this.buffer.length)\n this.buffer = this.buffer.map(chunk => this[DECODER].write(chunk))\n }\n\n this[ENCODING] = enc\n }\n\n setEncoding (enc) {\n this.encoding = enc\n }\n\n get objectMode () { return this[OBJECTMODE] }\n set objectMode (om) { this[OBJECTMODE] = this[OBJECTMODE] || !!om }\n\n get ['async'] () { return this[ASYNC] }\n set ['async'] (a) { this[ASYNC] = this[ASYNC] || !!a }\n\n write (chunk, encoding, cb) {\n if (this[EOF])\n throw new Error('write after end')\n\n if (this[DESTROYED]) {\n this.emit('error', Object.assign(\n new Error('Cannot call write after a stream was destroyed'),\n { code: 'ERR_STREAM_DESTROYED' }\n ))\n return true\n }\n\n if (typeof encoding === 'function')\n cb = encoding, encoding = 'utf8'\n\n if (!encoding)\n encoding = 'utf8'\n\n const fn = this[ASYNC] ? defer : f => f()\n\n // convert array buffers and typed array views into buffers\n // at some point in the future, we may want to do the opposite!\n // leave strings and buffers as-is\n // anything else switches us into object mode\n if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n if (isArrayBufferView(chunk))\n chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n else if (isArrayBuffer(chunk))\n chunk = Buffer.from(chunk)\n else if (typeof chunk !== 'string')\n // use the setter so we throw if we have encoding set\n this.objectMode = true\n }\n\n // handle object mode up front, since it's simpler\n // this yields better performance, fewer checks later.\n if (this[OBJECTMODE]) {\n /* istanbul ignore if - maybe impossible? */\n if (this.flowing && this[BUFFERLENGTH] !== 0)\n this[FLUSH](true)\n\n if (this.flowing)\n this.emit('data', chunk)\n else\n this[BUFFERPUSH](chunk)\n\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable')\n\n if (cb)\n fn(cb)\n\n return this.flowing\n }\n\n // at this point the chunk is a buffer or string\n // don't buffer it up or send it to the decoder\n if (!chunk.length) {\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable')\n if (cb)\n fn(cb)\n return this.flowing\n }\n\n // fast-path writing strings of same encoding to a stream with\n // an empty buffer, skipping the buffer/decoder dance\n if (typeof chunk === 'string' &&\n // unless it is a string already ready for us to use\n !(encoding === this[ENCODING] && !this[DECODER].lastNeed)) {\n chunk = Buffer.from(chunk, encoding)\n }\n\n if (Buffer.isBuffer(chunk) && this[ENCODING])\n chunk = this[DECODER].write(chunk)\n\n // Note: flushing CAN potentially switch us into not-flowing mode\n if (this.flowing && this[BUFFERLENGTH] !== 0)\n this[FLUSH](true)\n\n if (this.flowing)\n this.emit('data', chunk)\n else\n this[BUFFERPUSH](chunk)\n\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable')\n\n if (cb)\n fn(cb)\n\n return this.flowing\n }\n\n read (n) {\n if (this[DESTROYED])\n return null\n\n if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) {\n this[MAYBE_EMIT_END]()\n return null\n }\n\n if (this[OBJECTMODE])\n n = null\n\n if (this.buffer.length > 1 && !this[OBJECTMODE]) {\n if (this.encoding)\n this.buffer = [this.buffer.join('')]\n else\n this.buffer = [Buffer.concat(this.buffer, this[BUFFERLENGTH])]\n }\n\n const ret = this[READ](n || null, this.buffer[0])\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [READ] (n, chunk) {\n if (n === chunk.length || n === null)\n this[BUFFERSHIFT]()\n else {\n this.buffer[0] = chunk.slice(n)\n chunk = chunk.slice(0, n)\n this[BUFFERLENGTH] -= n\n }\n\n this.emit('data', chunk)\n\n if (!this.buffer.length && !this[EOF])\n this.emit('drain')\n\n return chunk\n }\n\n end (chunk, encoding, cb) {\n if (typeof chunk === 'function')\n cb = chunk, chunk = null\n if (typeof encoding === 'function')\n cb = encoding, encoding = 'utf8'\n if (chunk)\n this.write(chunk, encoding)\n if (cb)\n this.once('end', cb)\n this[EOF] = true\n this.writable = false\n\n // if we haven't written anything, then go ahead and emit,\n // even if we're not reading.\n // we'll re-emit if a new 'end' listener is added anyway.\n // This makes MP more suitable to write-only use cases.\n if (this.flowing || !this[PAUSED])\n this[MAYBE_EMIT_END]()\n return this\n }\n\n // don't let the internal resume be overwritten\n [RESUME] () {\n if (this[DESTROYED])\n return\n\n this[PAUSED] = false\n this[FLOWING] = true\n this.emit('resume')\n if (this.buffer.length)\n this[FLUSH]()\n else if (this[EOF])\n this[MAYBE_EMIT_END]()\n else\n this.emit('drain')\n }\n\n resume () {\n return this[RESUME]()\n }\n\n pause () {\n this[FLOWING] = false\n this[PAUSED] = true\n }\n\n get destroyed () {\n return this[DESTROYED]\n }\n\n get flowing () {\n return this[FLOWING]\n }\n\n get paused () {\n return this[PAUSED]\n }\n\n [BUFFERPUSH] (chunk) {\n if (this[OBJECTMODE])\n this[BUFFERLENGTH] += 1\n else\n this[BUFFERLENGTH] += chunk.length\n this.buffer.push(chunk)\n }\n\n [BUFFERSHIFT] () {\n if (this.buffer.length) {\n if (this[OBJECTMODE])\n this[BUFFERLENGTH] -= 1\n else\n this[BUFFERLENGTH] -= this.buffer[0].length\n }\n return this.buffer.shift()\n }\n\n [FLUSH] (noDrain) {\n do {} while (this[FLUSHCHUNK](this[BUFFERSHIFT]()))\n\n if (!noDrain && !this.buffer.length && !this[EOF])\n this.emit('drain')\n }\n\n [FLUSHCHUNK] (chunk) {\n return chunk ? (this.emit('data', chunk), this.flowing) : false\n }\n\n pipe (dest, opts) {\n if (this[DESTROYED])\n return\n\n const ended = this[EMITTED_END]\n opts = opts || {}\n if (dest === proc.stdout || dest === proc.stderr)\n opts.end = false\n else\n opts.end = opts.end !== false\n opts.proxyErrors = !!opts.proxyErrors\n\n // piping an ended stream ends immediately\n if (ended) {\n if (opts.end)\n dest.end()\n } else {\n this.pipes.push(!opts.proxyErrors ? new Pipe(this, dest, opts)\n : new PipeProxyErrors(this, dest, opts))\n if (this[ASYNC])\n defer(() => this[RESUME]())\n else\n this[RESUME]()\n }\n\n return dest\n }\n\n unpipe (dest) {\n const p = this.pipes.find(p => p.dest === dest)\n if (p) {\n this.pipes.splice(this.pipes.indexOf(p), 1)\n p.unpipe()\n }\n }\n\n addListener (ev, fn) {\n return this.on(ev, fn)\n }\n\n on (ev, fn) {\n const ret = super.on(ev, fn)\n if (ev === 'data' && !this.pipes.length && !this.flowing)\n this[RESUME]()\n else if (ev === 'readable' && this[BUFFERLENGTH] !== 0)\n super.emit('readable')\n else if (isEndish(ev) && this[EMITTED_END]) {\n super.emit(ev)\n this.removeAllListeners(ev)\n } else if (ev === 'error' && this[EMITTED_ERROR]) {\n if (this[ASYNC])\n defer(() => fn.call(this, this[EMITTED_ERROR]))\n else\n fn.call(this, this[EMITTED_ERROR])\n }\n return ret\n }\n\n get emittedEnd () {\n return this[EMITTED_END]\n }\n\n [MAYBE_EMIT_END] () {\n if (!this[EMITTING_END] &&\n !this[EMITTED_END] &&\n !this[DESTROYED] &&\n this.buffer.length === 0 &&\n this[EOF]) {\n this[EMITTING_END] = true\n this.emit('end')\n this.emit('prefinish')\n this.emit('finish')\n if (this[CLOSED])\n this.emit('close')\n this[EMITTING_END] = false\n }\n }\n\n emit (ev, data, ...extra) {\n // error and close are only events allowed after calling destroy()\n if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED])\n return\n else if (ev === 'data') {\n return !data ? false\n : this[ASYNC] ? defer(() => this[EMITDATA](data))\n : this[EMITDATA](data)\n } else if (ev === 'end') {\n return this[EMITEND]()\n } else if (ev === 'close') {\n this[CLOSED] = true\n // don't emit close before 'end' and 'finish'\n if (!this[EMITTED_END] && !this[DESTROYED])\n return\n const ret = super.emit('close')\n this.removeAllListeners('close')\n return ret\n } else if (ev === 'error') {\n this[EMITTED_ERROR] = data\n const ret = super.emit('error', data)\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'resume') {\n const ret = super.emit('resume')\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'finish' || ev === 'prefinish') {\n const ret = super.emit(ev)\n this.removeAllListeners(ev)\n return ret\n }\n\n // Some other unknown event\n const ret = super.emit(ev, data, ...extra)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITDATA] (data) {\n for (const p of this.pipes) {\n if (p.dest.write(data) === false)\n this.pause()\n }\n const ret = super.emit('data', data)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITEND] () {\n if (this[EMITTED_END])\n return\n\n this[EMITTED_END] = true\n this.readable = false\n if (this[ASYNC])\n defer(() => this[EMITEND2]())\n else\n this[EMITEND2]()\n }\n\n [EMITEND2] () {\n if (this[DECODER]) {\n const data = this[DECODER].end()\n if (data) {\n for (const p of this.pipes) {\n p.dest.write(data)\n }\n super.emit('data', data)\n }\n }\n\n for (const p of this.pipes) {\n p.end()\n }\n const ret = super.emit('end')\n this.removeAllListeners('end')\n return ret\n }\n\n // const all = await stream.collect()\n collect () {\n const buf = []\n if (!this[OBJECTMODE])\n buf.dataLength = 0\n // set the promise first, in case an error is raised\n // by triggering the flow here.\n const p = this.promise()\n this.on('data', c => {\n buf.push(c)\n if (!this[OBJECTMODE])\n buf.dataLength += c.length\n })\n return p.then(() => buf)\n }\n\n // const data = await stream.concat()\n concat () {\n return this[OBJECTMODE]\n ? Promise.reject(new Error('cannot concat in objectMode'))\n : this.collect().then(buf =>\n this[OBJECTMODE]\n ? Promise.reject(new Error('cannot concat in objectMode'))\n : this[ENCODING] ? buf.join('') : Buffer.concat(buf, buf.dataLength))\n }\n\n // stream.promise().then(() => done, er => emitted error)\n promise () {\n return new Promise((resolve, reject) => {\n this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n this.on('error', er => reject(er))\n this.on('end', () => resolve())\n })\n }\n\n // for await (let chunk of stream)\n [ASYNCITERATOR] () {\n const next = () => {\n const res = this.read()\n if (res !== null)\n return Promise.resolve({ done: false, value: res })\n\n if (this[EOF])\n return Promise.resolve({ done: true })\n\n let resolve = null\n let reject = null\n const onerr = er => {\n this.removeListener('data', ondata)\n this.removeListener('end', onend)\n reject(er)\n }\n const ondata = value => {\n this.removeListener('error', onerr)\n this.removeListener('end', onend)\n this.pause()\n resolve({ value: value, done: !!this[EOF] })\n }\n const onend = () => {\n this.removeListener('error', onerr)\n this.removeListener('data', ondata)\n resolve({ done: true })\n }\n const ondestroy = () => onerr(new Error('stream destroyed'))\n return new Promise((res, rej) => {\n reject = rej\n resolve = res\n this.once(DESTROYED, ondestroy)\n this.once('error', onerr)\n this.once('end', onend)\n this.once('data', ondata)\n })\n }\n\n return { next }\n }\n\n // for (let chunk of stream)\n [ITERATOR] () {\n const next = () => {\n const value = this.read()\n const done = value === null\n return { value, done }\n }\n return { next }\n }\n\n destroy (er) {\n if (this[DESTROYED]) {\n if (er)\n this.emit('error', er)\n else\n this.emit(DESTROYED)\n return this\n }\n\n this[DESTROYED] = true\n\n // throw away all buffered data, it's never coming out\n this.buffer.length = 0\n this[BUFFERLENGTH] = 0\n\n if (typeof this.close === 'function' && !this[CLOSED])\n this.close()\n\n if (er)\n this.emit('error', er)\n else // if no error to emit, still reject pending promises\n this.emit(DESTROYED)\n\n return this\n }\n\n static isStream (s) {\n return !!s && (s instanceof Minipass || s instanceof Stream ||\n s instanceof EE && (\n typeof s.pipe === 'function' || // readable\n (typeof s.write === 'function' && typeof s.end === 'function') // writable\n ))\n }\n}\n","'use strict'\nconst MiniPass = require('minipass')\nconst EE = require('events').EventEmitter\nconst fs = require('fs')\n\nlet writev = fs.writev\n/* istanbul ignore next */\nif (!writev) {\n // This entire block can be removed if support for earlier than Node.js\n // 12.9.0 is not needed.\n const binding = process.binding('fs')\n const FSReqWrap = binding.FSReqWrap || binding.FSReqCallback\n\n writev = (fd, iovec, pos, cb) => {\n const done = (er, bw) => cb(er, bw, iovec)\n const req = new FSReqWrap()\n req.oncomplete = done\n binding.writeBuffers(fd, iovec, pos, req)\n }\n}\n\nconst _autoClose = Symbol('_autoClose')\nconst _close = Symbol('_close')\nconst _ended = Symbol('_ended')\nconst _fd = Symbol('_fd')\nconst _finished = Symbol('_finished')\nconst _flags = Symbol('_flags')\nconst _flush = Symbol('_flush')\nconst _handleChunk = Symbol('_handleChunk')\nconst _makeBuf = Symbol('_makeBuf')\nconst _mode = Symbol('_mode')\nconst _needDrain = Symbol('_needDrain')\nconst _onerror = Symbol('_onerror')\nconst _onopen = Symbol('_onopen')\nconst _onread = Symbol('_onread')\nconst _onwrite = Symbol('_onwrite')\nconst _open = Symbol('_open')\nconst _path = Symbol('_path')\nconst _pos = Symbol('_pos')\nconst _queue = Symbol('_queue')\nconst _read = Symbol('_read')\nconst _readSize = Symbol('_readSize')\nconst _reading = Symbol('_reading')\nconst _remain = Symbol('_remain')\nconst _size = Symbol('_size')\nconst _write = Symbol('_write')\nconst _writing = Symbol('_writing')\nconst _defaultFlag = Symbol('_defaultFlag')\nconst _errored = Symbol('_errored')\n\nclass ReadStream extends MiniPass {\n constructor (path, opt) {\n opt = opt || {}\n super(opt)\n\n this.readable = true\n this.writable = false\n\n if (typeof path !== 'string')\n throw new TypeError('path must be a string')\n\n this[_errored] = false\n this[_fd] = typeof opt.fd === 'number' ? opt.fd : null\n this[_path] = path\n this[_readSize] = opt.readSize || 16*1024*1024\n this[_reading] = false\n this[_size] = typeof opt.size === 'number' ? opt.size : Infinity\n this[_remain] = this[_size]\n this[_autoClose] = typeof opt.autoClose === 'boolean' ?\n opt.autoClose : true\n\n if (typeof this[_fd] === 'number')\n this[_read]()\n else\n this[_open]()\n }\n\n get fd () { return this[_fd] }\n get path () { return this[_path] }\n\n write () {\n throw new TypeError('this is a readable stream')\n }\n\n end () {\n throw new TypeError('this is a readable stream')\n }\n\n [_open] () {\n fs.open(this[_path], 'r', (er, fd) => this[_onopen](er, fd))\n }\n\n [_onopen] (er, fd) {\n if (er)\n this[_onerror](er)\n else {\n this[_fd] = fd\n this.emit('open', fd)\n this[_read]()\n }\n }\n\n [_makeBuf] () {\n return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain]))\n }\n\n [_read] () {\n if (!this[_reading]) {\n this[_reading] = true\n const buf = this[_makeBuf]()\n /* istanbul ignore if */\n if (buf.length === 0)\n return process.nextTick(() => this[_onread](null, 0, buf))\n fs.read(this[_fd], buf, 0, buf.length, null, (er, br, buf) =>\n this[_onread](er, br, buf))\n }\n }\n\n [_onread] (er, br, buf) {\n this[_reading] = false\n if (er)\n this[_onerror](er)\n else if (this[_handleChunk](br, buf))\n this[_read]()\n }\n\n [_close] () {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd]\n this[_fd] = null\n fs.close(fd, er => er ? this.emit('error', er) : this.emit('close'))\n }\n }\n\n [_onerror] (er) {\n this[_reading] = true\n this[_close]()\n this.emit('error', er)\n }\n\n [_handleChunk] (br, buf) {\n let ret = false\n // no effect if infinite\n this[_remain] -= br\n if (br > 0)\n ret = super.write(br < buf.length ? buf.slice(0, br) : buf)\n\n if (br === 0 || this[_remain] <= 0) {\n ret = false\n this[_close]()\n super.end()\n }\n\n return ret\n }\n\n emit (ev, data) {\n switch (ev) {\n case 'prefinish':\n case 'finish':\n break\n\n case 'drain':\n if (typeof this[_fd] === 'number')\n this[_read]()\n break\n\n case 'error':\n if (this[_errored])\n return\n this[_errored] = true\n return super.emit(ev, data)\n\n default:\n return super.emit(ev, data)\n }\n }\n}\n\nclass ReadStreamSync extends ReadStream {\n [_open] () {\n let threw = true\n try {\n this[_onopen](null, fs.openSync(this[_path], 'r'))\n threw = false\n } finally {\n if (threw)\n this[_close]()\n }\n }\n\n [_read] () {\n let threw = true\n try {\n if (!this[_reading]) {\n this[_reading] = true\n do {\n const buf = this[_makeBuf]()\n /* istanbul ignore next */\n const br = buf.length === 0 ? 0\n : fs.readSync(this[_fd], buf, 0, buf.length, null)\n if (!this[_handleChunk](br, buf))\n break\n } while (true)\n this[_reading] = false\n }\n threw = false\n } finally {\n if (threw)\n this[_close]()\n }\n }\n\n [_close] () {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd]\n this[_fd] = null\n fs.closeSync(fd)\n this.emit('close')\n }\n }\n}\n\nclass WriteStream extends EE {\n constructor (path, opt) {\n opt = opt || {}\n super(opt)\n this.readable = false\n this.writable = true\n this[_errored] = false\n this[_writing] = false\n this[_ended] = false\n this[_needDrain] = false\n this[_queue] = []\n this[_path] = path\n this[_fd] = typeof opt.fd === 'number' ? opt.fd : null\n this[_mode] = opt.mode === undefined ? 0o666 : opt.mode\n this[_pos] = typeof opt.start === 'number' ? opt.start : null\n this[_autoClose] = typeof opt.autoClose === 'boolean' ?\n opt.autoClose : true\n\n // truncating makes no sense when writing into the middle\n const defaultFlag = this[_pos] !== null ? 'r+' : 'w'\n this[_defaultFlag] = opt.flags === undefined\n this[_flags] = this[_defaultFlag] ? defaultFlag : opt.flags\n\n if (this[_fd] === null)\n this[_open]()\n }\n\n emit (ev, data) {\n if (ev === 'error') {\n if (this[_errored])\n return\n this[_errored] = true\n }\n return super.emit(ev, data)\n }\n\n\n get fd () { return this[_fd] }\n get path () { return this[_path] }\n\n [_onerror] (er) {\n this[_close]()\n this[_writing] = true\n this.emit('error', er)\n }\n\n [_open] () {\n fs.open(this[_path], this[_flags], this[_mode],\n (er, fd) => this[_onopen](er, fd))\n }\n\n [_onopen] (er, fd) {\n if (this[_defaultFlag] &&\n this[_flags] === 'r+' &&\n er && er.code === 'ENOENT') {\n this[_flags] = 'w'\n this[_open]()\n } else if (er)\n this[_onerror](er)\n else {\n this[_fd] = fd\n this.emit('open', fd)\n this[_flush]()\n }\n }\n\n end (buf, enc) {\n if (buf)\n this.write(buf, enc)\n\n this[_ended] = true\n\n // synthetic after-write logic, where drain/finish live\n if (!this[_writing] && !this[_queue].length &&\n typeof this[_fd] === 'number')\n this[_onwrite](null, 0)\n return this\n }\n\n write (buf, enc) {\n if (typeof buf === 'string')\n buf = Buffer.from(buf, enc)\n\n if (this[_ended]) {\n this.emit('error', new Error('write() after end()'))\n return false\n }\n\n if (this[_fd] === null || this[_writing] || this[_queue].length) {\n this[_queue].push(buf)\n this[_needDrain] = true\n return false\n }\n\n this[_writing] = true\n this[_write](buf)\n return true\n }\n\n [_write] (buf) {\n fs.write(this[_fd], buf, 0, buf.length, this[_pos], (er, bw) =>\n this[_onwrite](er, bw))\n }\n\n [_onwrite] (er, bw) {\n if (er)\n this[_onerror](er)\n else {\n if (this[_pos] !== null)\n this[_pos] += bw\n if (this[_queue].length)\n this[_flush]()\n else {\n this[_writing] = false\n\n if (this[_ended] && !this[_finished]) {\n this[_finished] = true\n this[_close]()\n this.emit('finish')\n } else if (this[_needDrain]) {\n this[_needDrain] = false\n this.emit('drain')\n }\n }\n }\n }\n\n [_flush] () {\n if (this[_queue].length === 0) {\n if (this[_ended])\n this[_onwrite](null, 0)\n } else if (this[_queue].length === 1)\n this[_write](this[_queue].pop())\n else {\n const iovec = this[_queue]\n this[_queue] = []\n writev(this[_fd], iovec, this[_pos],\n (er, bw) => this[_onwrite](er, bw))\n }\n }\n\n [_close] () {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd]\n this[_fd] = null\n fs.close(fd, er => er ? this.emit('error', er) : this.emit('close'))\n }\n }\n}\n\nclass WriteStreamSync extends WriteStream {\n [_open] () {\n let fd\n // only wrap in a try{} block if we know we'll retry, to avoid\n // the rethrow obscuring the error's source frame in most cases.\n if (this[_defaultFlag] && this[_flags] === 'r+') {\n try {\n fd = fs.openSync(this[_path], this[_flags], this[_mode])\n } catch (er) {\n if (er.code === 'ENOENT') {\n this[_flags] = 'w'\n return this[_open]()\n } else\n throw er\n }\n } else\n fd = fs.openSync(this[_path], this[_flags], this[_mode])\n\n this[_onopen](null, fd)\n }\n\n [_close] () {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd]\n this[_fd] = null\n fs.closeSync(fd)\n this.emit('close')\n }\n }\n\n [_write] (buf) {\n // throw the original, but try to close if it fails\n let threw = true\n try {\n this[_onwrite](null,\n fs.writeSync(this[_fd], buf, 0, buf.length, this[_pos]))\n threw = false\n } finally {\n if (threw)\n try { this[_close]() } catch (_) {}\n }\n }\n}\n\nexports.ReadStream = ReadStream\nexports.ReadStreamSync = ReadStreamSync\n\nexports.WriteStream = WriteStream\nexports.WriteStreamSync = WriteStreamSync\n","'use strict'\n\n// this[BUFFER] is the remainder of a chunk if we're waiting for\n// the full 512 bytes of a header to come in. We will Buffer.concat()\n// it to the next write(), which is a mem copy, but a small one.\n//\n// this[QUEUE] is a Yallist of entries that haven't been emitted\n// yet this can only get filled up if the user keeps write()ing after\n// a write() returns false, or does a write() with more than one entry\n//\n// We don't buffer chunks, we always parse them and either create an\n// entry, or push it into the active entry. The ReadEntry class knows\n// to throw data away if .ignore=true\n//\n// Shift entry off the buffer when it emits 'end', and emit 'entry' for\n// the next one in the list.\n//\n// At any time, we're pushing body chunks into the entry at WRITEENTRY,\n// and waiting for 'end' on the entry at READENTRY\n//\n// ignored entries get .resume() called on them straight away\n\nconst warner = require('./warn-mixin.js')\nconst Header = require('./header.js')\nconst EE = require('events')\nconst Yallist = require('yallist')\nconst maxMetaEntrySize = 1024 * 1024\nconst Entry = require('./read-entry.js')\nconst Pax = require('./pax.js')\nconst zlib = require('minizlib')\nconst { nextTick } = require('process')\n\nconst gzipHeader = Buffer.from([0x1f, 0x8b])\nconst STATE = Symbol('state')\nconst WRITEENTRY = Symbol('writeEntry')\nconst READENTRY = Symbol('readEntry')\nconst NEXTENTRY = Symbol('nextEntry')\nconst PROCESSENTRY = Symbol('processEntry')\nconst EX = Symbol('extendedHeader')\nconst GEX = Symbol('globalExtendedHeader')\nconst META = Symbol('meta')\nconst EMITMETA = Symbol('emitMeta')\nconst BUFFER = Symbol('buffer')\nconst QUEUE = Symbol('queue')\nconst ENDED = Symbol('ended')\nconst EMITTEDEND = Symbol('emittedEnd')\nconst EMIT = Symbol('emit')\nconst UNZIP = Symbol('unzip')\nconst CONSUMECHUNK = Symbol('consumeChunk')\nconst CONSUMECHUNKSUB = Symbol('consumeChunkSub')\nconst CONSUMEBODY = Symbol('consumeBody')\nconst CONSUMEMETA = Symbol('consumeMeta')\nconst CONSUMEHEADER = Symbol('consumeHeader')\nconst CONSUMING = Symbol('consuming')\nconst BUFFERCONCAT = Symbol('bufferConcat')\nconst MAYBEEND = Symbol('maybeEnd')\nconst WRITING = Symbol('writing')\nconst ABORTED = Symbol('aborted')\nconst DONE = Symbol('onDone')\nconst SAW_VALID_ENTRY = Symbol('sawValidEntry')\nconst SAW_NULL_BLOCK = Symbol('sawNullBlock')\nconst SAW_EOF = Symbol('sawEOF')\nconst CLOSESTREAM = Symbol('closeStream')\n\nconst noop = _ => true\n\nmodule.exports = warner(class Parser extends EE {\n constructor (opt) {\n opt = opt || {}\n super(opt)\n\n this.file = opt.file || ''\n\n // set to boolean false when an entry starts. 1024 bytes of \\0\n // is technically a valid tarball, albeit a boring one.\n this[SAW_VALID_ENTRY] = null\n\n // these BADARCHIVE errors can't be detected early. listen on DONE.\n this.on(DONE, _ => {\n if (this[STATE] === 'begin' || this[SAW_VALID_ENTRY] === false) {\n // either less than 1 block of data, or all entries were invalid.\n // Either way, probably not even a tarball.\n this.warn('TAR_BAD_ARCHIVE', 'Unrecognized archive format')\n }\n })\n\n if (opt.ondone) {\n this.on(DONE, opt.ondone)\n } else {\n this.on(DONE, _ => {\n this.emit('prefinish')\n this.emit('finish')\n this.emit('end')\n })\n }\n\n this.strict = !!opt.strict\n this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize\n this.filter = typeof opt.filter === 'function' ? opt.filter : noop\n // Unlike gzip, brotli doesn't have any magic bytes to identify it\n // Users need to explicitly tell us they're extracting a brotli file\n // Or we infer from the file extension\n const isTBR = (opt.file && (\n opt.file.endsWith('.tar.br') || opt.file.endsWith('.tbr')))\n // if it's a tbr file it MIGHT be brotli, but we don't know until\n // we look at it and verify it's not a valid tar file.\n this.brotli = !opt.gzip && opt.brotli !== undefined ? opt.brotli\n : isTBR ? undefined\n : false\n\n // have to set this so that streams are ok piping into it\n this.writable = true\n this.readable = false\n\n this[QUEUE] = new Yallist()\n this[BUFFER] = null\n this[READENTRY] = null\n this[WRITEENTRY] = null\n this[STATE] = 'begin'\n this[META] = ''\n this[EX] = null\n this[GEX] = null\n this[ENDED] = false\n this[UNZIP] = null\n this[ABORTED] = false\n this[SAW_NULL_BLOCK] = false\n this[SAW_EOF] = false\n\n this.on('end', () => this[CLOSESTREAM]())\n\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn)\n }\n if (typeof opt.onentry === 'function') {\n this.on('entry', opt.onentry)\n }\n }\n\n [CONSUMEHEADER] (chunk, position) {\n if (this[SAW_VALID_ENTRY] === null) {\n this[SAW_VALID_ENTRY] = false\n }\n let header\n try {\n header = new Header(chunk, position, this[EX], this[GEX])\n } catch (er) {\n return this.warn('TAR_ENTRY_INVALID', er)\n }\n\n if (header.nullBlock) {\n if (this[SAW_NULL_BLOCK]) {\n this[SAW_EOF] = true\n // ending an archive with no entries. pointless, but legal.\n if (this[STATE] === 'begin') {\n this[STATE] = 'header'\n }\n this[EMIT]('eof')\n } else {\n this[SAW_NULL_BLOCK] = true\n this[EMIT]('nullBlock')\n }\n } else {\n this[SAW_NULL_BLOCK] = false\n if (!header.cksumValid) {\n this.warn('TAR_ENTRY_INVALID', 'checksum failure', { header })\n } else if (!header.path) {\n this.warn('TAR_ENTRY_INVALID', 'path is required', { header })\n } else {\n const type = header.type\n if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) {\n this.warn('TAR_ENTRY_INVALID', 'linkpath required', { header })\n } else if (!/^(Symbolic)?Link$/.test(type) && header.linkpath) {\n this.warn('TAR_ENTRY_INVALID', 'linkpath forbidden', { header })\n } else {\n const entry = this[WRITEENTRY] = new Entry(header, this[EX], this[GEX])\n\n // we do this for meta & ignored entries as well, because they\n // are still valid tar, or else we wouldn't know to ignore them\n if (!this[SAW_VALID_ENTRY]) {\n if (entry.remain) {\n // this might be the one!\n const onend = () => {\n if (!entry.invalid) {\n this[SAW_VALID_ENTRY] = true\n }\n }\n entry.on('end', onend)\n } else {\n this[SAW_VALID_ENTRY] = true\n }\n }\n\n if (entry.meta) {\n if (entry.size > this.maxMetaEntrySize) {\n entry.ignore = true\n this[EMIT]('ignoredEntry', entry)\n this[STATE] = 'ignore'\n entry.resume()\n } else if (entry.size > 0) {\n this[META] = ''\n entry.on('data', c => this[META] += c)\n this[STATE] = 'meta'\n }\n } else {\n this[EX] = null\n entry.ignore = entry.ignore || !this.filter(entry.path, entry)\n\n if (entry.ignore) {\n // probably valid, just not something we care about\n this[EMIT]('ignoredEntry', entry)\n this[STATE] = entry.remain ? 'ignore' : 'header'\n entry.resume()\n } else {\n if (entry.remain) {\n this[STATE] = 'body'\n } else {\n this[STATE] = 'header'\n entry.end()\n }\n\n if (!this[READENTRY]) {\n this[QUEUE].push(entry)\n this[NEXTENTRY]()\n } else {\n this[QUEUE].push(entry)\n }\n }\n }\n }\n }\n }\n }\n\n [CLOSESTREAM] () {\n nextTick(() => this.emit('close'))\n }\n\n [PROCESSENTRY] (entry) {\n let go = true\n\n if (!entry) {\n this[READENTRY] = null\n go = false\n } else if (Array.isArray(entry)) {\n this.emit.apply(this, entry)\n } else {\n this[READENTRY] = entry\n this.emit('entry', entry)\n if (!entry.emittedEnd) {\n entry.on('end', _ => this[NEXTENTRY]())\n go = false\n }\n }\n\n return go\n }\n\n [NEXTENTRY] () {\n do {} while (this[PROCESSENTRY](this[QUEUE].shift()))\n\n if (!this[QUEUE].length) {\n // At this point, there's nothing in the queue, but we may have an\n // entry which is being consumed (readEntry).\n // If we don't, then we definitely can handle more data.\n // If we do, and either it's flowing, or it has never had any data\n // written to it, then it needs more.\n // The only other possibility is that it has returned false from a\n // write() call, so we wait for the next drain to continue.\n const re = this[READENTRY]\n const drainNow = !re || re.flowing || re.size === re.remain\n if (drainNow) {\n if (!this[WRITING]) {\n this.emit('drain')\n }\n } else {\n re.once('drain', _ => this.emit('drain'))\n }\n }\n }\n\n [CONSUMEBODY] (chunk, position) {\n // write up to but no more than writeEntry.blockRemain\n const entry = this[WRITEENTRY]\n const br = entry.blockRemain\n const c = (br >= chunk.length && position === 0) ? chunk\n : chunk.slice(position, position + br)\n\n entry.write(c)\n\n if (!entry.blockRemain) {\n this[STATE] = 'header'\n this[WRITEENTRY] = null\n entry.end()\n }\n\n return c.length\n }\n\n [CONSUMEMETA] (chunk, position) {\n const entry = this[WRITEENTRY]\n const ret = this[CONSUMEBODY](chunk, position)\n\n // if we finished, then the entry is reset\n if (!this[WRITEENTRY]) {\n this[EMITMETA](entry)\n }\n\n return ret\n }\n\n [EMIT] (ev, data, extra) {\n if (!this[QUEUE].length && !this[READENTRY]) {\n this.emit(ev, data, extra)\n } else {\n this[QUEUE].push([ev, data, extra])\n }\n }\n\n [EMITMETA] (entry) {\n this[EMIT]('meta', this[META])\n switch (entry.type) {\n case 'ExtendedHeader':\n case 'OldExtendedHeader':\n this[EX] = Pax.parse(this[META], this[EX], false)\n break\n\n case 'GlobalExtendedHeader':\n this[GEX] = Pax.parse(this[META], this[GEX], true)\n break\n\n case 'NextFileHasLongPath':\n case 'OldGnuLongPath':\n this[EX] = this[EX] || Object.create(null)\n this[EX].path = this[META].replace(/\\0.*/, '')\n break\n\n case 'NextFileHasLongLinkpath':\n this[EX] = this[EX] || Object.create(null)\n this[EX].linkpath = this[META].replace(/\\0.*/, '')\n break\n\n /* istanbul ignore next */\n default: throw new Error('unknown meta: ' + entry.type)\n }\n }\n\n abort (error) {\n this[ABORTED] = true\n this.emit('abort', error)\n // always throws, even in non-strict mode\n this.warn('TAR_ABORT', error, { recoverable: false })\n }\n\n write (chunk) {\n if (this[ABORTED]) {\n return\n }\n\n // first write, might be gzipped\n const needSniff = this[UNZIP] === null ||\n this.brotli === undefined && this[UNZIP] === false\n if (needSniff && chunk) {\n if (this[BUFFER]) {\n chunk = Buffer.concat([this[BUFFER], chunk])\n this[BUFFER] = null\n }\n if (chunk.length < gzipHeader.length) {\n this[BUFFER] = chunk\n return true\n }\n\n // look for gzip header\n for (let i = 0; this[UNZIP] === null && i < gzipHeader.length; i++) {\n if (chunk[i] !== gzipHeader[i]) {\n this[UNZIP] = false\n }\n }\n\n const maybeBrotli = this.brotli === undefined\n if (this[UNZIP] === false && maybeBrotli) {\n // read the first header to see if it's a valid tar file. If so,\n // we can safely assume that it's not actually brotli, despite the\n // .tbr or .tar.br file extension.\n // if we ended before getting a full chunk, yes, def brotli\n if (chunk.length < 512) {\n if (this[ENDED]) {\n this.brotli = true\n } else {\n this[BUFFER] = chunk\n return true\n }\n } else {\n // if it's tar, it's pretty reliably not brotli, chances of\n // that happening are astronomical.\n try {\n new Header(chunk.slice(0, 512))\n this.brotli = false\n } catch (_) {\n this.brotli = true\n }\n }\n }\n\n if (this[UNZIP] === null || (this[UNZIP] === false && this.brotli)) {\n const ended = this[ENDED]\n this[ENDED] = false\n this[UNZIP] = this[UNZIP] === null\n ? new zlib.Unzip()\n : new zlib.BrotliDecompress()\n this[UNZIP].on('data', chunk => this[CONSUMECHUNK](chunk))\n this[UNZIP].on('error', er => this.abort(er))\n this[UNZIP].on('end', _ => {\n this[ENDED] = true\n this[CONSUMECHUNK]()\n })\n this[WRITING] = true\n const ret = this[UNZIP][ended ? 'end' : 'write'](chunk)\n this[WRITING] = false\n return ret\n }\n }\n\n this[WRITING] = true\n if (this[UNZIP]) {\n this[UNZIP].write(chunk)\n } else {\n this[CONSUMECHUNK](chunk)\n }\n this[WRITING] = false\n\n // return false if there's a queue, or if the current entry isn't flowing\n const ret =\n this[QUEUE].length ? false :\n this[READENTRY] ? this[READENTRY].flowing :\n true\n\n // if we have no queue, then that means a clogged READENTRY\n if (!ret && !this[QUEUE].length) {\n this[READENTRY].once('drain', _ => this.emit('drain'))\n }\n\n return ret\n }\n\n [BUFFERCONCAT] (c) {\n if (c && !this[ABORTED]) {\n this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c\n }\n }\n\n [MAYBEEND] () {\n if (this[ENDED] &&\n !this[EMITTEDEND] &&\n !this[ABORTED] &&\n !this[CONSUMING]) {\n this[EMITTEDEND] = true\n const entry = this[WRITEENTRY]\n if (entry && entry.blockRemain) {\n // truncated, likely a damaged file\n const have = this[BUFFER] ? this[BUFFER].length : 0\n this.warn('TAR_BAD_ARCHIVE', `Truncated input (needed ${\n entry.blockRemain} more bytes, only ${have} available)`, { entry })\n if (this[BUFFER]) {\n entry.write(this[BUFFER])\n }\n entry.end()\n }\n this[EMIT](DONE)\n }\n }\n\n [CONSUMECHUNK] (chunk) {\n if (this[CONSUMING]) {\n this[BUFFERCONCAT](chunk)\n } else if (!chunk && !this[BUFFER]) {\n this[MAYBEEND]()\n } else {\n this[CONSUMING] = true\n if (this[BUFFER]) {\n this[BUFFERCONCAT](chunk)\n const c = this[BUFFER]\n this[BUFFER] = null\n this[CONSUMECHUNKSUB](c)\n } else {\n this[CONSUMECHUNKSUB](chunk)\n }\n\n while (this[BUFFER] &&\n this[BUFFER].length >= 512 &&\n !this[ABORTED] &&\n !this[SAW_EOF]) {\n const c = this[BUFFER]\n this[BUFFER] = null\n this[CONSUMECHUNKSUB](c)\n }\n this[CONSUMING] = false\n }\n\n if (!this[BUFFER] || this[ENDED]) {\n this[MAYBEEND]()\n }\n }\n\n [CONSUMECHUNKSUB] (chunk) {\n // we know that we are in CONSUMING mode, so anything written goes into\n // the buffer. Advance the position and put any remainder in the buffer.\n let position = 0\n const length = chunk.length\n while (position + 512 <= length && !this[ABORTED] && !this[SAW_EOF]) {\n switch (this[STATE]) {\n case 'begin':\n case 'header':\n this[CONSUMEHEADER](chunk, position)\n position += 512\n break\n\n case 'ignore':\n case 'body':\n position += this[CONSUMEBODY](chunk, position)\n break\n\n case 'meta':\n position += this[CONSUMEMETA](chunk, position)\n break\n\n /* istanbul ignore next */\n default:\n throw new Error('invalid state: ' + this[STATE])\n }\n }\n\n if (position < length) {\n if (this[BUFFER]) {\n this[BUFFER] = Buffer.concat([chunk.slice(position), this[BUFFER]])\n } else {\n this[BUFFER] = chunk.slice(position)\n }\n }\n }\n\n end (chunk) {\n if (!this[ABORTED]) {\n if (this[UNZIP]) {\n this[UNZIP].end(chunk)\n } else {\n this[ENDED] = true\n if (this.brotli === undefined) chunk = chunk || Buffer.alloc(0)\n this.write(chunk)\n }\n }\n }\n})\n","'use strict'\n\n// XXX: This shares a lot in common with extract.js\n// maybe some DRY opportunity here?\n\n// tar -t\nconst hlo = require('./high-level-opt.js')\nconst Parser = require('./parse.js')\nconst fs = require('fs')\nconst fsm = require('fs-minipass')\nconst path = require('path')\nconst stripSlash = require('./strip-trailing-slashes.js')\n\nmodule.exports = (opt_, files, cb) => {\n if (typeof opt_ === 'function') {\n cb = opt_, files = null, opt_ = {}\n } else if (Array.isArray(opt_)) {\n files = opt_, opt_ = {}\n }\n\n if (typeof files === 'function') {\n cb = files, files = null\n }\n\n if (!files) {\n files = []\n } else {\n files = Array.from(files)\n }\n\n const opt = hlo(opt_)\n\n if (opt.sync && typeof cb === 'function') {\n throw new TypeError('callback not supported for sync tar functions')\n }\n\n if (!opt.file && typeof cb === 'function') {\n throw new TypeError('callback only supported with file option')\n }\n\n if (files.length) {\n filesFilter(opt, files)\n }\n\n if (!opt.noResume) {\n onentryFunction(opt)\n }\n\n return opt.file && opt.sync ? listFileSync(opt)\n : opt.file ? listFile(opt, cb)\n : list(opt)\n}\n\nconst onentryFunction = opt => {\n const onentry = opt.onentry\n opt.onentry = onentry ? e => {\n onentry(e)\n e.resume()\n } : e => e.resume()\n}\n\n// construct a filter that limits the file entries listed\n// include child entries if a dir is included\nconst filesFilter = (opt, files) => {\n const map = new Map(files.map(f => [stripSlash(f), true]))\n const filter = opt.filter\n\n const mapHas = (file, r) => {\n const root = r || path.parse(file).root || '.'\n const ret = file === root ? false\n : map.has(file) ? map.get(file)\n : mapHas(path.dirname(file), root)\n\n map.set(file, ret)\n return ret\n }\n\n opt.filter = filter\n ? (file, entry) => filter(file, entry) && mapHas(stripSlash(file))\n : file => mapHas(stripSlash(file))\n}\n\nconst listFileSync = opt => {\n const p = list(opt)\n const file = opt.file\n let threw = true\n let fd\n try {\n const stat = fs.statSync(file)\n const readSize = opt.maxReadSize || 16 * 1024 * 1024\n if (stat.size < readSize) {\n p.end(fs.readFileSync(file))\n } else {\n let pos = 0\n const buf = Buffer.allocUnsafe(readSize)\n fd = fs.openSync(file, 'r')\n while (pos < stat.size) {\n const bytesRead = fs.readSync(fd, buf, 0, readSize, pos)\n pos += bytesRead\n p.write(buf.slice(0, bytesRead))\n }\n p.end()\n }\n threw = false\n } finally {\n if (threw && fd) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n }\n }\n}\n\nconst listFile = (opt, cb) => {\n const parse = new Parser(opt)\n const readSize = opt.maxReadSize || 16 * 1024 * 1024\n\n const file = opt.file\n const p = new Promise((resolve, reject) => {\n parse.on('error', reject)\n parse.on('end', resolve)\n\n fs.stat(file, (er, stat) => {\n if (er) {\n reject(er)\n } else {\n const stream = new fsm.ReadStream(file, {\n readSize: readSize,\n size: stat.size,\n })\n stream.on('error', reject)\n stream.pipe(parse)\n }\n })\n })\n return cb ? p.then(cb, cb) : p\n}\n\nconst list = opt => new Parser(opt)\n","'use strict'\n\n// tar -c\nconst hlo = require('./high-level-opt.js')\n\nconst Pack = require('./pack.js')\nconst fsm = require('fs-minipass')\nconst t = require('./list.js')\nconst path = require('path')\n\nmodule.exports = (opt_, files, cb) => {\n if (typeof files === 'function') {\n cb = files\n }\n\n if (Array.isArray(opt_)) {\n files = opt_, opt_ = {}\n }\n\n if (!files || !Array.isArray(files) || !files.length) {\n throw new TypeError('no files or directories specified')\n }\n\n files = Array.from(files)\n\n const opt = hlo(opt_)\n\n if (opt.sync && typeof cb === 'function') {\n throw new TypeError('callback not supported for sync tar functions')\n }\n\n if (!opt.file && typeof cb === 'function') {\n throw new TypeError('callback only supported with file option')\n }\n\n return opt.file && opt.sync ? createFileSync(opt, files)\n : opt.file ? createFile(opt, files, cb)\n : opt.sync ? createSync(opt, files)\n : create(opt, files)\n}\n\nconst createFileSync = (opt, files) => {\n const p = new Pack.Sync(opt)\n const stream = new fsm.WriteStreamSync(opt.file, {\n mode: opt.mode || 0o666,\n })\n p.pipe(stream)\n addFilesSync(p, files)\n}\n\nconst createFile = (opt, files, cb) => {\n const p = new Pack(opt)\n const stream = new fsm.WriteStream(opt.file, {\n mode: opt.mode || 0o666,\n })\n p.pipe(stream)\n\n const promise = new Promise((res, rej) => {\n stream.on('error', rej)\n stream.on('close', res)\n p.on('error', rej)\n })\n\n addFilesAsync(p, files)\n\n return cb ? promise.then(cb, cb) : promise\n}\n\nconst addFilesSync = (p, files) => {\n files.forEach(file => {\n if (file.charAt(0) === '@') {\n t({\n file: path.resolve(p.cwd, file.slice(1)),\n sync: true,\n noResume: true,\n onentry: entry => p.add(entry),\n })\n } else {\n p.add(file)\n }\n })\n p.end()\n}\n\nconst addFilesAsync = (p, files) => {\n while (files.length) {\n const file = files.shift()\n if (file.charAt(0) === '@') {\n return t({\n file: path.resolve(p.cwd, file.slice(1)),\n noResume: true,\n onentry: entry => p.add(entry),\n }).then(_ => addFilesAsync(p, files))\n } else {\n p.add(file)\n }\n }\n p.end()\n}\n\nconst createSync = (opt, files) => {\n const p = new Pack.Sync(opt)\n addFilesSync(p, files)\n return p\n}\n\nconst create = (opt, files) => {\n const p = new Pack(opt)\n addFilesAsync(p, files)\n return p\n}\n","'use strict'\n\n// tar -r\nconst hlo = require('./high-level-opt.js')\nconst Pack = require('./pack.js')\nconst fs = require('fs')\nconst fsm = require('fs-minipass')\nconst t = require('./list.js')\nconst path = require('path')\n\n// starting at the head of the file, read a Header\n// If the checksum is invalid, that's our position to start writing\n// If it is, jump forward by the specified size (round up to 512)\n// and try again.\n// Write the new Pack stream starting there.\n\nconst Header = require('./header.js')\n\nmodule.exports = (opt_, files, cb) => {\n const opt = hlo(opt_)\n\n if (!opt.file) {\n throw new TypeError('file is required')\n }\n\n if (opt.gzip || opt.brotli || opt.file.endsWith('.br') || opt.file.endsWith('.tbr')) {\n throw new TypeError('cannot append to compressed archives')\n }\n\n if (!files || !Array.isArray(files) || !files.length) {\n throw new TypeError('no files or directories specified')\n }\n\n files = Array.from(files)\n\n return opt.sync ? replaceSync(opt, files)\n : replace(opt, files, cb)\n}\n\nconst replaceSync = (opt, files) => {\n const p = new Pack.Sync(opt)\n\n let threw = true\n let fd\n let position\n\n try {\n try {\n fd = fs.openSync(opt.file, 'r+')\n } catch (er) {\n if (er.code === 'ENOENT') {\n fd = fs.openSync(opt.file, 'w+')\n } else {\n throw er\n }\n }\n\n const st = fs.fstatSync(fd)\n const headBuf = Buffer.alloc(512)\n\n POSITION: for (position = 0; position < st.size; position += 512) {\n for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) {\n bytes = fs.readSync(\n fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos\n )\n\n if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) {\n throw new Error('cannot append to compressed archives')\n }\n\n if (!bytes) {\n break POSITION\n }\n }\n\n const h = new Header(headBuf)\n if (!h.cksumValid) {\n break\n }\n const entryBlockSize = 512 * Math.ceil(h.size / 512)\n if (position + entryBlockSize + 512 > st.size) {\n break\n }\n // the 512 for the header we just parsed will be added as well\n // also jump ahead all the blocks for the body\n position += entryBlockSize\n if (opt.mtimeCache) {\n opt.mtimeCache.set(h.path, h.mtime)\n }\n }\n threw = false\n\n streamSync(opt, p, position, fd, files)\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n }\n }\n}\n\nconst streamSync = (opt, p, position, fd, files) => {\n const stream = new fsm.WriteStreamSync(opt.file, {\n fd: fd,\n start: position,\n })\n p.pipe(stream)\n addFilesSync(p, files)\n}\n\nconst replace = (opt, files, cb) => {\n files = Array.from(files)\n const p = new Pack(opt)\n\n const getPos = (fd, size, cb_) => {\n const cb = (er, pos) => {\n if (er) {\n fs.close(fd, _ => cb_(er))\n } else {\n cb_(null, pos)\n }\n }\n\n let position = 0\n if (size === 0) {\n return cb(null, 0)\n }\n\n let bufPos = 0\n const headBuf = Buffer.alloc(512)\n const onread = (er, bytes) => {\n if (er) {\n return cb(er)\n }\n bufPos += bytes\n if (bufPos < 512 && bytes) {\n return fs.read(\n fd, headBuf, bufPos, headBuf.length - bufPos,\n position + bufPos, onread\n )\n }\n\n if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) {\n return cb(new Error('cannot append to compressed archives'))\n }\n\n // truncated header\n if (bufPos < 512) {\n return cb(null, position)\n }\n\n const h = new Header(headBuf)\n if (!h.cksumValid) {\n return cb(null, position)\n }\n\n const entryBlockSize = 512 * Math.ceil(h.size / 512)\n if (position + entryBlockSize + 512 > size) {\n return cb(null, position)\n }\n\n position += entryBlockSize + 512\n if (position >= size) {\n return cb(null, position)\n }\n\n if (opt.mtimeCache) {\n opt.mtimeCache.set(h.path, h.mtime)\n }\n bufPos = 0\n fs.read(fd, headBuf, 0, 512, position, onread)\n }\n fs.read(fd, headBuf, 0, 512, position, onread)\n }\n\n const promise = new Promise((resolve, reject) => {\n p.on('error', reject)\n let flag = 'r+'\n const onopen = (er, fd) => {\n if (er && er.code === 'ENOENT' && flag === 'r+') {\n flag = 'w+'\n return fs.open(opt.file, flag, onopen)\n }\n\n if (er) {\n return reject(er)\n }\n\n fs.fstat(fd, (er, st) => {\n if (er) {\n return fs.close(fd, () => reject(er))\n }\n\n getPos(fd, st.size, (er, position) => {\n if (er) {\n return reject(er)\n }\n const stream = new fsm.WriteStream(opt.file, {\n fd: fd,\n start: position,\n })\n p.pipe(stream)\n stream.on('error', reject)\n stream.on('close', resolve)\n addFilesAsync(p, files)\n })\n })\n }\n fs.open(opt.file, flag, onopen)\n })\n\n return cb ? promise.then(cb, cb) : promise\n}\n\nconst addFilesSync = (p, files) => {\n files.forEach(file => {\n if (file.charAt(0) === '@') {\n t({\n file: path.resolve(p.cwd, file.slice(1)),\n sync: true,\n noResume: true,\n onentry: entry => p.add(entry),\n })\n } else {\n p.add(file)\n }\n })\n p.end()\n}\n\nconst addFilesAsync = (p, files) => {\n while (files.length) {\n const file = files.shift()\n if (file.charAt(0) === '@') {\n return t({\n file: path.resolve(p.cwd, file.slice(1)),\n noResume: true,\n onentry: entry => p.add(entry),\n }).then(_ => addFilesAsync(p, files))\n } else {\n p.add(file)\n }\n }\n p.end()\n}\n","'use strict'\n\n// tar -u\n\nconst hlo = require('./high-level-opt.js')\nconst r = require('./replace.js')\n// just call tar.r with the filter and mtimeCache\n\nmodule.exports = (opt_, files, cb) => {\n const opt = hlo(opt_)\n\n if (!opt.file) {\n throw new TypeError('file is required')\n }\n\n if (opt.gzip || opt.brotli || opt.file.endsWith('.br') || opt.file.endsWith('.tbr')) {\n throw new TypeError('cannot append to compressed archives')\n }\n\n if (!files || !Array.isArray(files) || !files.length) {\n throw new TypeError('no files or directories specified')\n }\n\n files = Array.from(files)\n\n mtimeFilter(opt)\n return r(opt, files, cb)\n}\n\nconst mtimeFilter = opt => {\n const filter = opt.filter\n\n if (!opt.mtimeCache) {\n opt.mtimeCache = new Map()\n }\n\n opt.filter = filter ? (path, stat) =>\n filter(path, stat) && !(opt.mtimeCache.get(path) > stat.mtime)\n : (path, stat) => !(opt.mtimeCache.get(path) > stat.mtime)\n}\n","const { promisify } = require('util')\nconst fs = require('fs')\nconst optsArg = opts => {\n if (!opts)\n opts = { mode: 0o777, fs }\n else if (typeof opts === 'object')\n opts = { mode: 0o777, fs, ...opts }\n else if (typeof opts === 'number')\n opts = { mode: opts, fs }\n else if (typeof opts === 'string')\n opts = { mode: parseInt(opts, 8), fs }\n else\n throw new TypeError('invalid options argument')\n\n opts.mkdir = opts.mkdir || opts.fs.mkdir || fs.mkdir\n opts.mkdirAsync = promisify(opts.mkdir)\n opts.stat = opts.stat || opts.fs.stat || fs.stat\n opts.statAsync = promisify(opts.stat)\n opts.statSync = opts.statSync || opts.fs.statSync || fs.statSync\n opts.mkdirSync = opts.mkdirSync || opts.fs.mkdirSync || fs.mkdirSync\n return opts\n}\nmodule.exports = optsArg\n","const platform = process.env.__TESTING_MKDIRP_PLATFORM__ || process.platform\nconst { resolve, parse } = require('path')\nconst pathArg = path => {\n if (/\\0/.test(path)) {\n // simulate same failure that node raises\n throw Object.assign(\n new TypeError('path must be a string without null bytes'),\n {\n path,\n code: 'ERR_INVALID_ARG_VALUE',\n }\n )\n }\n\n path = resolve(path)\n if (platform === 'win32') {\n const badWinChars = /[*|\"<>?:]/\n const {root} = parse(path)\n if (badWinChars.test(path.substr(root.length))) {\n throw Object.assign(new Error('Illegal characters in path.'), {\n path,\n code: 'EINVAL',\n })\n }\n }\n\n return path\n}\nmodule.exports = pathArg\n","const {dirname} = require('path')\n\nconst findMade = (opts, parent, path = undefined) => {\n // we never want the 'made' return value to be a root directory\n if (path === parent)\n return Promise.resolve()\n\n return opts.statAsync(parent).then(\n st => st.isDirectory() ? path : undefined, // will fail later\n er => er.code === 'ENOENT'\n ? findMade(opts, dirname(parent), parent)\n : undefined\n )\n}\n\nconst findMadeSync = (opts, parent, path = undefined) => {\n if (path === parent)\n return undefined\n\n try {\n return opts.statSync(parent).isDirectory() ? path : undefined\n } catch (er) {\n return er.code === 'ENOENT'\n ? findMadeSync(opts, dirname(parent), parent)\n : undefined\n }\n}\n\nmodule.exports = {findMade, findMadeSync}\n","const {dirname} = require('path')\n\nconst mkdirpManual = (path, opts, made) => {\n opts.recursive = false\n const parent = dirname(path)\n if (parent === path) {\n return opts.mkdirAsync(path, opts).catch(er => {\n // swallowed by recursive implementation on posix systems\n // any other error is a failure\n if (er.code !== 'EISDIR')\n throw er\n })\n }\n\n return opts.mkdirAsync(path, opts).then(() => made || path, er => {\n if (er.code === 'ENOENT')\n return mkdirpManual(parent, opts)\n .then(made => mkdirpManual(path, opts, made))\n if (er.code !== 'EEXIST' && er.code !== 'EROFS')\n throw er\n return opts.statAsync(path).then(st => {\n if (st.isDirectory())\n return made\n else\n throw er\n }, () => { throw er })\n })\n}\n\nconst mkdirpManualSync = (path, opts, made) => {\n const parent = dirname(path)\n opts.recursive = false\n\n if (parent === path) {\n try {\n return opts.mkdirSync(path, opts)\n } catch (er) {\n // swallowed by recursive implementation on posix systems\n // any other error is a failure\n if (er.code !== 'EISDIR')\n throw er\n else\n return\n }\n }\n\n try {\n opts.mkdirSync(path, opts)\n return made || path\n } catch (er) {\n if (er.code === 'ENOENT')\n return mkdirpManualSync(path, opts, mkdirpManualSync(parent, opts, made))\n if (er.code !== 'EEXIST' && er.code !== 'EROFS')\n throw er\n try {\n if (!opts.statSync(path).isDirectory())\n throw er\n } catch (_) {\n throw er\n }\n }\n}\n\nmodule.exports = {mkdirpManual, mkdirpManualSync}\n","const {dirname} = require('path')\nconst {findMade, findMadeSync} = require('./find-made.js')\nconst {mkdirpManual, mkdirpManualSync} = require('./mkdirp-manual.js')\n\nconst mkdirpNative = (path, opts) => {\n opts.recursive = true\n const parent = dirname(path)\n if (parent === path)\n return opts.mkdirAsync(path, opts)\n\n return findMade(opts, path).then(made =>\n opts.mkdirAsync(path, opts).then(() => made)\n .catch(er => {\n if (er.code === 'ENOENT')\n return mkdirpManual(path, opts)\n else\n throw er\n }))\n}\n\nconst mkdirpNativeSync = (path, opts) => {\n opts.recursive = true\n const parent = dirname(path)\n if (parent === path)\n return opts.mkdirSync(path, opts)\n\n const made = findMadeSync(opts, path)\n try {\n opts.mkdirSync(path, opts)\n return made\n } catch (er) {\n if (er.code === 'ENOENT')\n return mkdirpManualSync(path, opts)\n else\n throw er\n }\n}\n\nmodule.exports = {mkdirpNative, mkdirpNativeSync}\n","const fs = require('fs')\n\nconst version = process.env.__TESTING_MKDIRP_NODE_VERSION__ || process.version\nconst versArr = version.replace(/^v/, '').split('.')\nconst hasNative = +versArr[0] > 10 || +versArr[0] === 10 && +versArr[1] >= 12\n\nconst useNative = !hasNative ? () => false : opts => opts.mkdir === fs.mkdir\nconst useNativeSync = !hasNative ? () => false : opts => opts.mkdirSync === fs.mkdirSync\n\nmodule.exports = {useNative, useNativeSync}\n","const optsArg = require('./lib/opts-arg.js')\nconst pathArg = require('./lib/path-arg.js')\n\nconst {mkdirpNative, mkdirpNativeSync} = require('./lib/mkdirp-native.js')\nconst {mkdirpManual, mkdirpManualSync} = require('./lib/mkdirp-manual.js')\nconst {useNative, useNativeSync} = require('./lib/use-native.js')\n\n\nconst mkdirp = (path, opts) => {\n path = pathArg(path)\n opts = optsArg(opts)\n return useNative(opts)\n ? mkdirpNative(path, opts)\n : mkdirpManual(path, opts)\n}\n\nconst mkdirpSync = (path, opts) => {\n path = pathArg(path)\n opts = optsArg(opts)\n return useNativeSync(opts)\n ? mkdirpNativeSync(path, opts)\n : mkdirpManualSync(path, opts)\n}\n\nmkdirp.sync = mkdirpSync\nmkdirp.native = (path, opts) => mkdirpNative(pathArg(path), optsArg(opts))\nmkdirp.manual = (path, opts) => mkdirpManual(pathArg(path), optsArg(opts))\nmkdirp.nativeSync = (path, opts) => mkdirpNativeSync(pathArg(path), optsArg(opts))\nmkdirp.manualSync = (path, opts) => mkdirpManualSync(pathArg(path), optsArg(opts))\n\nmodule.exports = mkdirp\n","'use strict'\nconst fs = require('fs')\nconst path = require('path')\n\n/* istanbul ignore next */\nconst LCHOWN = fs.lchown ? 'lchown' : 'chown'\n/* istanbul ignore next */\nconst LCHOWNSYNC = fs.lchownSync ? 'lchownSync' : 'chownSync'\n\n/* istanbul ignore next */\nconst needEISDIRHandled = fs.lchown &&\n !process.version.match(/v1[1-9]+\\./) &&\n !process.version.match(/v10\\.[6-9]/)\n\nconst lchownSync = (path, uid, gid) => {\n try {\n return fs[LCHOWNSYNC](path, uid, gid)\n } catch (er) {\n if (er.code !== 'ENOENT')\n throw er\n }\n}\n\n/* istanbul ignore next */\nconst chownSync = (path, uid, gid) => {\n try {\n return fs.chownSync(path, uid, gid)\n } catch (er) {\n if (er.code !== 'ENOENT')\n throw er\n }\n}\n\n/* istanbul ignore next */\nconst handleEISDIR =\n needEISDIRHandled ? (path, uid, gid, cb) => er => {\n // Node prior to v10 had a very questionable implementation of\n // fs.lchown, which would always try to call fs.open on a directory\n // Fall back to fs.chown in those cases.\n if (!er || er.code !== 'EISDIR')\n cb(er)\n else\n fs.chown(path, uid, gid, cb)\n }\n : (_, __, ___, cb) => cb\n\n/* istanbul ignore next */\nconst handleEISDirSync =\n needEISDIRHandled ? (path, uid, gid) => {\n try {\n return lchownSync(path, uid, gid)\n } catch (er) {\n if (er.code !== 'EISDIR')\n throw er\n chownSync(path, uid, gid)\n }\n }\n : (path, uid, gid) => lchownSync(path, uid, gid)\n\n// fs.readdir could only accept an options object as of node v6\nconst nodeVersion = process.version\nlet readdir = (path, options, cb) => fs.readdir(path, options, cb)\nlet readdirSync = (path, options) => fs.readdirSync(path, options)\n/* istanbul ignore next */\nif (/^v4\\./.test(nodeVersion))\n readdir = (path, options, cb) => fs.readdir(path, cb)\n\nconst chown = (cpath, uid, gid, cb) => {\n fs[LCHOWN](cpath, uid, gid, handleEISDIR(cpath, uid, gid, er => {\n // Skip ENOENT error\n cb(er && er.code !== 'ENOENT' ? er : null)\n }))\n}\n\nconst chownrKid = (p, child, uid, gid, cb) => {\n if (typeof child === 'string')\n return fs.lstat(path.resolve(p, child), (er, stats) => {\n // Skip ENOENT error\n if (er)\n return cb(er.code !== 'ENOENT' ? er : null)\n stats.name = child\n chownrKid(p, stats, uid, gid, cb)\n })\n\n if (child.isDirectory()) {\n chownr(path.resolve(p, child.name), uid, gid, er => {\n if (er)\n return cb(er)\n const cpath = path.resolve(p, child.name)\n chown(cpath, uid, gid, cb)\n })\n } else {\n const cpath = path.resolve(p, child.name)\n chown(cpath, uid, gid, cb)\n }\n}\n\n\nconst chownr = (p, uid, gid, cb) => {\n readdir(p, { withFileTypes: true }, (er, children) => {\n // any error other than ENOTDIR or ENOTSUP means it's not readable,\n // or doesn't exist. give up.\n if (er) {\n if (er.code === 'ENOENT')\n return cb()\n else if (er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP')\n return cb(er)\n }\n if (er || !children.length)\n return chown(p, uid, gid, cb)\n\n let len = children.length\n let errState = null\n const then = er => {\n if (errState)\n return\n if (er)\n return cb(errState = er)\n if (-- len === 0)\n return chown(p, uid, gid, cb)\n }\n\n children.forEach(child => chownrKid(p, child, uid, gid, then))\n })\n}\n\nconst chownrKidSync = (p, child, uid, gid) => {\n if (typeof child === 'string') {\n try {\n const stats = fs.lstatSync(path.resolve(p, child))\n stats.name = child\n child = stats\n } catch (er) {\n if (er.code === 'ENOENT')\n return\n else\n throw er\n }\n }\n\n if (child.isDirectory())\n chownrSync(path.resolve(p, child.name), uid, gid)\n\n handleEISDirSync(path.resolve(p, child.name), uid, gid)\n}\n\nconst chownrSync = (p, uid, gid) => {\n let children\n try {\n children = readdirSync(p, { withFileTypes: true })\n } catch (er) {\n if (er.code === 'ENOENT')\n return\n else if (er.code === 'ENOTDIR' || er.code === 'ENOTSUP')\n return handleEISDirSync(p, uid, gid)\n else\n throw er\n }\n\n if (children && children.length)\n children.forEach(child => chownrKidSync(p, child, uid, gid))\n\n return handleEISDirSync(p, uid, gid)\n}\n\nmodule.exports = chownr\nchownr.sync = chownrSync\n","'use strict'\n// wrapper around mkdirp for tar's needs.\n\n// TODO: This should probably be a class, not functionally\n// passing around state in a gazillion args.\n\nconst mkdirp = require('mkdirp')\nconst fs = require('fs')\nconst path = require('path')\nconst chownr = require('chownr')\nconst normPath = require('./normalize-windows-path.js')\n\nclass SymlinkError extends Error {\n constructor (symlink, path) {\n super('Cannot extract through symbolic link')\n this.path = path\n this.symlink = symlink\n }\n\n get name () {\n return 'SylinkError'\n }\n}\n\nclass CwdError extends Error {\n constructor (path, code) {\n super(code + ': Cannot cd into \\'' + path + '\\'')\n this.path = path\n this.code = code\n }\n\n get name () {\n return 'CwdError'\n }\n}\n\nconst cGet = (cache, key) => cache.get(normPath(key))\nconst cSet = (cache, key, val) => cache.set(normPath(key), val)\n\nconst checkCwd = (dir, cb) => {\n fs.stat(dir, (er, st) => {\n if (er || !st.isDirectory()) {\n er = new CwdError(dir, er && er.code || 'ENOTDIR')\n }\n cb(er)\n })\n}\n\nmodule.exports = (dir, opt, cb) => {\n dir = normPath(dir)\n\n // if there's any overlap between mask and mode,\n // then we'll need an explicit chmod\n const umask = opt.umask\n const mode = opt.mode | 0o0700\n const needChmod = (mode & umask) !== 0\n\n const uid = opt.uid\n const gid = opt.gid\n const doChown = typeof uid === 'number' &&\n typeof gid === 'number' &&\n (uid !== opt.processUid || gid !== opt.processGid)\n\n const preserve = opt.preserve\n const unlink = opt.unlink\n const cache = opt.cache\n const cwd = normPath(opt.cwd)\n\n const done = (er, created) => {\n if (er) {\n cb(er)\n } else {\n cSet(cache, dir, true)\n if (created && doChown) {\n chownr(created, uid, gid, er => done(er))\n } else if (needChmod) {\n fs.chmod(dir, mode, cb)\n } else {\n cb()\n }\n }\n }\n\n if (cache && cGet(cache, dir) === true) {\n return done()\n }\n\n if (dir === cwd) {\n return checkCwd(dir, done)\n }\n\n if (preserve) {\n return mkdirp(dir, { mode }).then(made => done(null, made), done)\n }\n\n const sub = normPath(path.relative(cwd, dir))\n const parts = sub.split('/')\n mkdir_(cwd, parts, mode, cache, unlink, cwd, null, done)\n}\n\nconst mkdir_ = (base, parts, mode, cache, unlink, cwd, created, cb) => {\n if (!parts.length) {\n return cb(null, created)\n }\n const p = parts.shift()\n const part = normPath(path.resolve(base + '/' + p))\n if (cGet(cache, part)) {\n return mkdir_(part, parts, mode, cache, unlink, cwd, created, cb)\n }\n fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb))\n}\n\nconst onmkdir = (part, parts, mode, cache, unlink, cwd, created, cb) => er => {\n if (er) {\n fs.lstat(part, (statEr, st) => {\n if (statEr) {\n statEr.path = statEr.path && normPath(statEr.path)\n cb(statEr)\n } else if (st.isDirectory()) {\n mkdir_(part, parts, mode, cache, unlink, cwd, created, cb)\n } else if (unlink) {\n fs.unlink(part, er => {\n if (er) {\n return cb(er)\n }\n fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb))\n })\n } else if (st.isSymbolicLink()) {\n return cb(new SymlinkError(part, part + '/' + parts.join('/')))\n } else {\n cb(er)\n }\n })\n } else {\n created = created || part\n mkdir_(part, parts, mode, cache, unlink, cwd, created, cb)\n }\n}\n\nconst checkCwdSync = dir => {\n let ok = false\n let code = 'ENOTDIR'\n try {\n ok = fs.statSync(dir).isDirectory()\n } catch (er) {\n code = er.code\n } finally {\n if (!ok) {\n throw new CwdError(dir, code)\n }\n }\n}\n\nmodule.exports.sync = (dir, opt) => {\n dir = normPath(dir)\n // if there's any overlap between mask and mode,\n // then we'll need an explicit chmod\n const umask = opt.umask\n const mode = opt.mode | 0o0700\n const needChmod = (mode & umask) !== 0\n\n const uid = opt.uid\n const gid = opt.gid\n const doChown = typeof uid === 'number' &&\n typeof gid === 'number' &&\n (uid !== opt.processUid || gid !== opt.processGid)\n\n const preserve = opt.preserve\n const unlink = opt.unlink\n const cache = opt.cache\n const cwd = normPath(opt.cwd)\n\n const done = (created) => {\n cSet(cache, dir, true)\n if (created && doChown) {\n chownr.sync(created, uid, gid)\n }\n if (needChmod) {\n fs.chmodSync(dir, mode)\n }\n }\n\n if (cache && cGet(cache, dir) === true) {\n return done()\n }\n\n if (dir === cwd) {\n checkCwdSync(cwd)\n return done()\n }\n\n if (preserve) {\n return done(mkdirp.sync(dir, mode))\n }\n\n const sub = normPath(path.relative(cwd, dir))\n const parts = sub.split('/')\n let created = null\n for (let p = parts.shift(), part = cwd;\n p && (part += '/' + p);\n p = parts.shift()) {\n part = normPath(path.resolve(part))\n if (cGet(cache, part)) {\n continue\n }\n\n try {\n fs.mkdirSync(part, mode)\n created = created || part\n cSet(cache, part, true)\n } catch (er) {\n const st = fs.lstatSync(part)\n if (st.isDirectory()) {\n cSet(cache, part, true)\n continue\n } else if (unlink) {\n fs.unlinkSync(part)\n fs.mkdirSync(part, mode)\n created = created || part\n cSet(cache, part, true)\n continue\n } else if (st.isSymbolicLink()) {\n return new SymlinkError(part, part + '/' + parts.join('/'))\n }\n }\n }\n\n return done(created)\n}\n","// warning: extremely hot code path.\n// This has been meticulously optimized for use\n// within npm install on large package trees.\n// Do not edit without careful benchmarking.\nconst normalizeCache = Object.create(null)\nconst { hasOwnProperty } = Object.prototype\nmodule.exports = s => {\n if (!hasOwnProperty.call(normalizeCache, s)) {\n normalizeCache[s] = s.normalize('NFD')\n }\n return normalizeCache[s]\n}\n","// A path exclusive reservation system\n// reserve([list, of, paths], fn)\n// When the fn is first in line for all its paths, it\n// is called with a cb that clears the reservation.\n//\n// Used by async unpack to avoid clobbering paths in use,\n// while still allowing maximal safe parallelization.\n\nconst assert = require('assert')\nconst normalize = require('./normalize-unicode.js')\nconst stripSlashes = require('./strip-trailing-slashes.js')\nconst { join } = require('path')\n\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\nconst isWindows = platform === 'win32'\n\nmodule.exports = () => {\n // path => [function or Set]\n // A Set object means a directory reservation\n // A fn is a direct reservation on that path\n const queues = new Map()\n\n // fn => {paths:[path,...], dirs:[path, ...]}\n const reservations = new Map()\n\n // return a set of parent dirs for a given path\n // '/a/b/c/d' -> ['/', '/a', '/a/b', '/a/b/c', '/a/b/c/d']\n const getDirs = path => {\n const dirs = path.split('/').slice(0, -1).reduce((set, path) => {\n if (set.length) {\n path = join(set[set.length - 1], path)\n }\n set.push(path || '/')\n return set\n }, [])\n return dirs\n }\n\n // functions currently running\n const running = new Set()\n\n // return the queues for each path the function cares about\n // fn => {paths, dirs}\n const getQueues = fn => {\n const res = reservations.get(fn)\n /* istanbul ignore if - unpossible */\n if (!res) {\n throw new Error('function does not have any path reservations')\n }\n return {\n paths: res.paths.map(path => queues.get(path)),\n dirs: [...res.dirs].map(path => queues.get(path)),\n }\n }\n\n // check if fn is first in line for all its paths, and is\n // included in the first set for all its dir queues\n const check = fn => {\n const { paths, dirs } = getQueues(fn)\n return paths.every(q => q[0] === fn) &&\n dirs.every(q => q[0] instanceof Set && q[0].has(fn))\n }\n\n // run the function if it's first in line and not already running\n const run = fn => {\n if (running.has(fn) || !check(fn)) {\n return false\n }\n running.add(fn)\n fn(() => clear(fn))\n return true\n }\n\n const clear = fn => {\n if (!running.has(fn)) {\n return false\n }\n\n const { paths, dirs } = reservations.get(fn)\n const next = new Set()\n\n paths.forEach(path => {\n const q = queues.get(path)\n assert.equal(q[0], fn)\n if (q.length === 1) {\n queues.delete(path)\n } else {\n q.shift()\n if (typeof q[0] === 'function') {\n next.add(q[0])\n } else {\n q[0].forEach(fn => next.add(fn))\n }\n }\n })\n\n dirs.forEach(dir => {\n const q = queues.get(dir)\n assert(q[0] instanceof Set)\n if (q[0].size === 1 && q.length === 1) {\n queues.delete(dir)\n } else if (q[0].size === 1) {\n q.shift()\n\n // must be a function or else the Set would've been reused\n next.add(q[0])\n } else {\n q[0].delete(fn)\n }\n })\n running.delete(fn)\n\n next.forEach(fn => run(fn))\n return true\n }\n\n const reserve = (paths, fn) => {\n // collide on matches across case and unicode normalization\n // On windows, thanks to the magic of 8.3 shortnames, it is fundamentally\n // impossible to determine whether two paths refer to the same thing on\n // disk, without asking the kernel for a shortname.\n // So, we just pretend that every path matches every other path here,\n // effectively removing all parallelization on windows.\n paths = isWindows ? ['win32 parallelization disabled'] : paths.map(p => {\n // don't need normPath, because we skip this entirely for windows\n return stripSlashes(join(normalize(p))).toLowerCase()\n })\n\n const dirs = new Set(\n paths.map(path => getDirs(path)).reduce((a, b) => a.concat(b))\n )\n reservations.set(fn, { dirs, paths })\n paths.forEach(path => {\n const q = queues.get(path)\n if (!q) {\n queues.set(path, [fn])\n } else {\n q.push(fn)\n }\n })\n dirs.forEach(dir => {\n const q = queues.get(dir)\n if (!q) {\n queues.set(dir, [new Set([fn])])\n } else if (q[q.length - 1] instanceof Set) {\n q[q.length - 1].add(fn)\n } else {\n q.push(new Set([fn]))\n }\n })\n\n return run(fn)\n }\n\n return { check, reserve }\n}\n","// Get the appropriate flag to use for creating files\n// We use fmap on Windows platforms for files less than\n// 512kb. This is a fairly low limit, but avoids making\n// things slower in some cases. Since most of what this\n// library is used for is extracting tarballs of many\n// relatively small files in npm packages and the like,\n// it can be a big boost on Windows platforms.\n// Only supported in Node v12.9.0 and above.\nconst platform = process.env.__FAKE_PLATFORM__ || process.platform\nconst isWindows = platform === 'win32'\nconst fs = global.__FAKE_TESTING_FS__ || require('fs')\n\n/* istanbul ignore next */\nconst { O_CREAT, O_TRUNC, O_WRONLY, UV_FS_O_FILEMAP = 0 } = fs.constants\n\nconst fMapEnabled = isWindows && !!UV_FS_O_FILEMAP\nconst fMapLimit = 512 * 1024\nconst fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY\nmodule.exports = !fMapEnabled ? () => 'w'\n : size => size < fMapLimit ? fMapFlag : 'w'\n","'use strict'\n\n// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet.\n// but the path reservations are required to avoid race conditions where\n// parallelized unpack ops may mess with one another, due to dependencies\n// (like a Link depending on its target) or destructive operations (like\n// clobbering an fs object to create one of a different type.)\n\nconst assert = require('assert')\nconst Parser = require('./parse.js')\nconst fs = require('fs')\nconst fsm = require('fs-minipass')\nconst path = require('path')\nconst mkdir = require('./mkdir.js')\nconst wc = require('./winchars.js')\nconst pathReservations = require('./path-reservations.js')\nconst stripAbsolutePath = require('./strip-absolute-path.js')\nconst normPath = require('./normalize-windows-path.js')\nconst stripSlash = require('./strip-trailing-slashes.js')\nconst normalize = require('./normalize-unicode.js')\n\nconst ONENTRY = Symbol('onEntry')\nconst CHECKFS = Symbol('checkFs')\nconst CHECKFS2 = Symbol('checkFs2')\nconst PRUNECACHE = Symbol('pruneCache')\nconst ISREUSABLE = Symbol('isReusable')\nconst MAKEFS = Symbol('makeFs')\nconst FILE = Symbol('file')\nconst DIRECTORY = Symbol('directory')\nconst LINK = Symbol('link')\nconst SYMLINK = Symbol('symlink')\nconst HARDLINK = Symbol('hardlink')\nconst UNSUPPORTED = Symbol('unsupported')\nconst CHECKPATH = Symbol('checkPath')\nconst MKDIR = Symbol('mkdir')\nconst ONERROR = Symbol('onError')\nconst PENDING = Symbol('pending')\nconst PEND = Symbol('pend')\nconst UNPEND = Symbol('unpend')\nconst ENDED = Symbol('ended')\nconst MAYBECLOSE = Symbol('maybeClose')\nconst SKIP = Symbol('skip')\nconst DOCHOWN = Symbol('doChown')\nconst UID = Symbol('uid')\nconst GID = Symbol('gid')\nconst CHECKED_CWD = Symbol('checkedCwd')\nconst crypto = require('crypto')\nconst getFlag = require('./get-write-flag.js')\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform\nconst isWindows = platform === 'win32'\nconst DEFAULT_MAX_DEPTH = 1024\n\n// Unlinks on Windows are not atomic.\n//\n// This means that if you have a file entry, followed by another\n// file entry with an identical name, and you cannot re-use the file\n// (because it's a hardlink, or because unlink:true is set, or it's\n// Windows, which does not have useful nlink values), then the unlink\n// will be committed to the disk AFTER the new file has been written\n// over the old one, deleting the new file.\n//\n// To work around this, on Windows systems, we rename the file and then\n// delete the renamed file. It's a sloppy kludge, but frankly, I do not\n// know of a better way to do this, given windows' non-atomic unlink\n// semantics.\n//\n// See: https://github.com/npm/node-tar/issues/183\n/* istanbul ignore next */\nconst unlinkFile = (path, cb) => {\n if (!isWindows) {\n return fs.unlink(path, cb)\n }\n\n const name = path + '.DELETE.' + crypto.randomBytes(16).toString('hex')\n fs.rename(path, name, er => {\n if (er) {\n return cb(er)\n }\n fs.unlink(name, cb)\n })\n}\n\n/* istanbul ignore next */\nconst unlinkFileSync = path => {\n if (!isWindows) {\n return fs.unlinkSync(path)\n }\n\n const name = path + '.DELETE.' + crypto.randomBytes(16).toString('hex')\n fs.renameSync(path, name)\n fs.unlinkSync(name)\n}\n\n// this.gid, entry.gid, this.processUid\nconst uint32 = (a, b, c) =>\n a === a >>> 0 ? a\n : b === b >>> 0 ? b\n : c\n\n// clear the cache if it's a case-insensitive unicode-squashing match.\n// we can't know if the current file system is case-sensitive or supports\n// unicode fully, so we check for similarity on the maximally compatible\n// representation. Err on the side of pruning, since all it's doing is\n// preventing lstats, and it's not the end of the world if we get a false\n// positive.\n// Note that on windows, we always drop the entire cache whenever a\n// symbolic link is encountered, because 8.3 filenames are impossible\n// to reason about, and collisions are hazards rather than just failures.\nconst cacheKeyNormalize = path => stripSlash(normPath(normalize(path)))\n .toLowerCase()\n\nconst pruneCache = (cache, abs) => {\n abs = cacheKeyNormalize(abs)\n for (const path of cache.keys()) {\n const pnorm = cacheKeyNormalize(path)\n if (pnorm === abs || pnorm.indexOf(abs + '/') === 0) {\n cache.delete(path)\n }\n }\n}\n\nconst dropCache = cache => {\n for (const key of cache.keys()) {\n cache.delete(key)\n }\n}\n\nclass Unpack extends Parser {\n constructor (opt) {\n if (!opt) {\n opt = {}\n }\n\n opt.ondone = _ => {\n this[ENDED] = true\n this[MAYBECLOSE]()\n }\n\n super(opt)\n\n this[CHECKED_CWD] = false\n\n this.reservations = pathReservations()\n\n this.transform = typeof opt.transform === 'function' ? opt.transform : null\n\n this.writable = true\n this.readable = false\n\n this[PENDING] = 0\n this[ENDED] = false\n\n this.dirCache = opt.dirCache || new Map()\n\n if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {\n // need both or neither\n if (typeof opt.uid !== 'number' || typeof opt.gid !== 'number') {\n throw new TypeError('cannot set owner without number uid and gid')\n }\n if (opt.preserveOwner) {\n throw new TypeError(\n 'cannot preserve owner in archive and also set owner explicitly')\n }\n this.uid = opt.uid\n this.gid = opt.gid\n this.setOwner = true\n } else {\n this.uid = null\n this.gid = null\n this.setOwner = false\n }\n\n // default true for root\n if (opt.preserveOwner === undefined && typeof opt.uid !== 'number') {\n this.preserveOwner = process.getuid && process.getuid() === 0\n } else {\n this.preserveOwner = !!opt.preserveOwner\n }\n\n this.processUid = (this.preserveOwner || this.setOwner) && process.getuid ?\n process.getuid() : null\n this.processGid = (this.preserveOwner || this.setOwner) && process.getgid ?\n process.getgid() : null\n\n // prevent excessively deep nesting of subfolders\n // set to `Infinity` to remove this restriction\n this.maxDepth = typeof opt.maxDepth === 'number'\n ? opt.maxDepth\n : DEFAULT_MAX_DEPTH\n\n // mostly just for testing, but useful in some cases.\n // Forcibly trigger a chown on every entry, no matter what\n this.forceChown = opt.forceChown === true\n\n // turn ><?| in filenames into 0xf000-higher encoded forms\n this.win32 = !!opt.win32 || isWindows\n\n // do not unpack over files that are newer than what's in the archive\n this.newer = !!opt.newer\n\n // do not unpack over ANY files\n this.keep = !!opt.keep\n\n // do not set mtime/atime of extracted entries\n this.noMtime = !!opt.noMtime\n\n // allow .., absolute path entries, and unpacking through symlinks\n // without this, warn and skip .., relativize absolutes, and error\n // on symlinks in extraction path\n this.preservePaths = !!opt.preservePaths\n\n // unlink files and links before writing. This breaks existing hard\n // links, and removes symlink directories rather than erroring\n this.unlink = !!opt.unlink\n\n this.cwd = normPath(path.resolve(opt.cwd || process.cwd()))\n this.strip = +opt.strip || 0\n // if we're not chmodding, then we don't need the process umask\n this.processUmask = opt.noChmod ? 0 : process.umask()\n this.umask = typeof opt.umask === 'number' ? opt.umask : this.processUmask\n\n // default mode for dirs created as parents\n this.dmode = opt.dmode || (0o0777 & (~this.umask))\n this.fmode = opt.fmode || (0o0666 & (~this.umask))\n\n this.on('entry', entry => this[ONENTRY](entry))\n }\n\n // a bad or damaged archive is a warning for Parser, but an error\n // when extracting. Mark those errors as unrecoverable, because\n // the Unpack contract cannot be met.\n warn (code, msg, data = {}) {\n if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') {\n data.recoverable = false\n }\n return super.warn(code, msg, data)\n }\n\n [MAYBECLOSE] () {\n if (this[ENDED] && this[PENDING] === 0) {\n this.emit('prefinish')\n this.emit('finish')\n this.emit('end')\n }\n }\n\n [CHECKPATH] (entry) {\n const p = normPath(entry.path)\n const parts = p.split('/')\n\n if (this.strip) {\n if (parts.length < this.strip) {\n return false\n }\n if (entry.type === 'Link') {\n const linkparts = normPath(entry.linkpath).split('/')\n if (linkparts.length >= this.strip) {\n entry.linkpath = linkparts.slice(this.strip).join('/')\n } else {\n return false\n }\n }\n parts.splice(0, this.strip)\n entry.path = parts.join('/')\n }\n\n if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {\n this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {\n entry,\n path: p,\n depth: parts.length,\n maxDepth: this.maxDepth,\n })\n return false\n }\n\n if (!this.preservePaths) {\n if (parts.includes('..') || isWindows && /^[a-z]:\\.\\.$/i.test(parts[0])) {\n this.warn('TAR_ENTRY_ERROR', `path contains '..'`, {\n entry,\n path: p,\n })\n return false\n }\n\n // strip off the root\n const [root, stripped] = stripAbsolutePath(p)\n if (root) {\n entry.path = stripped\n this.warn('TAR_ENTRY_INFO', `stripping ${root} from absolute path`, {\n entry,\n path: p,\n })\n }\n }\n\n if (path.isAbsolute(entry.path)) {\n entry.absolute = normPath(path.resolve(entry.path))\n } else {\n entry.absolute = normPath(path.resolve(this.cwd, entry.path))\n }\n\n // if we somehow ended up with a path that escapes the cwd, and we are\n // not in preservePaths mode, then something is fishy! This should have\n // been prevented above, so ignore this for coverage.\n /* istanbul ignore if - defense in depth */\n if (!this.preservePaths &&\n entry.absolute.indexOf(this.cwd + '/') !== 0 &&\n entry.absolute !== this.cwd) {\n this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', {\n entry,\n path: normPath(entry.path),\n resolvedPath: entry.absolute,\n cwd: this.cwd,\n })\n return false\n }\n\n // an archive can set properties on the extraction directory, but it\n // may not replace the cwd with a different kind of thing entirely.\n if (entry.absolute === this.cwd &&\n entry.type !== 'Directory' &&\n entry.type !== 'GNUDumpDir') {\n return false\n }\n\n // only encode : chars that aren't drive letter indicators\n if (this.win32) {\n const { root: aRoot } = path.win32.parse(entry.absolute)\n entry.absolute = aRoot + wc.encode(entry.absolute.slice(aRoot.length))\n const { root: pRoot } = path.win32.parse(entry.path)\n entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length))\n }\n\n return true\n }\n\n [ONENTRY] (entry) {\n if (!this[CHECKPATH](entry)) {\n return entry.resume()\n }\n\n assert.equal(typeof entry.absolute, 'string')\n\n switch (entry.type) {\n case 'Directory':\n case 'GNUDumpDir':\n if (entry.mode) {\n entry.mode = entry.mode | 0o700\n }\n\n // eslint-disable-next-line no-fallthrough\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n case 'Link':\n case 'SymbolicLink':\n return this[CHECKFS](entry)\n\n case 'CharacterDevice':\n case 'BlockDevice':\n case 'FIFO':\n default:\n return this[UNSUPPORTED](entry)\n }\n }\n\n [ONERROR] (er, entry) {\n // Cwd has to exist, or else nothing works. That's serious.\n // Other errors are warnings, which raise the error in strict\n // mode, but otherwise continue on.\n if (er.name === 'CwdError') {\n this.emit('error', er)\n } else {\n this.warn('TAR_ENTRY_ERROR', er, { entry })\n this[UNPEND]()\n entry.resume()\n }\n }\n\n [MKDIR] (dir, mode, cb) {\n mkdir(normPath(dir), {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cache: this.dirCache,\n cwd: this.cwd,\n mode: mode,\n noChmod: this.noChmod,\n }, cb)\n }\n\n [DOCHOWN] (entry) {\n // in preserve owner mode, chown if the entry doesn't match process\n // in set owner mode, chown if setting doesn't match process\n return this.forceChown ||\n this.preserveOwner &&\n (typeof entry.uid === 'number' && entry.uid !== this.processUid ||\n typeof entry.gid === 'number' && entry.gid !== this.processGid)\n ||\n (typeof this.uid === 'number' && this.uid !== this.processUid ||\n typeof this.gid === 'number' && this.gid !== this.processGid)\n }\n\n [UID] (entry) {\n return uint32(this.uid, entry.uid, this.processUid)\n }\n\n [GID] (entry) {\n return uint32(this.gid, entry.gid, this.processGid)\n }\n\n [FILE] (entry, fullyDone) {\n const mode = entry.mode & 0o7777 || this.fmode\n const stream = new fsm.WriteStream(entry.absolute, {\n flags: getFlag(entry.size),\n mode: mode,\n autoClose: false,\n })\n stream.on('error', er => {\n if (stream.fd) {\n fs.close(stream.fd, () => {})\n }\n\n // flush all the data out so that we aren't left hanging\n // if the error wasn't actually fatal. otherwise the parse\n // is blocked, and we never proceed.\n stream.write = () => true\n this[ONERROR](er, entry)\n fullyDone()\n })\n\n let actions = 1\n const done = er => {\n if (er) {\n /* istanbul ignore else - we should always have a fd by now */\n if (stream.fd) {\n fs.close(stream.fd, () => {})\n }\n\n this[ONERROR](er, entry)\n fullyDone()\n return\n }\n\n if (--actions === 0) {\n fs.close(stream.fd, er => {\n if (er) {\n this[ONERROR](er, entry)\n } else {\n this[UNPEND]()\n }\n fullyDone()\n })\n }\n }\n\n stream.on('finish', _ => {\n // if futimes fails, try utimes\n // if utimes fails, fail with the original error\n // same for fchown/chown\n const abs = entry.absolute\n const fd = stream.fd\n\n if (entry.mtime && !this.noMtime) {\n actions++\n const atime = entry.atime || new Date()\n const mtime = entry.mtime\n fs.futimes(fd, atime, mtime, er =>\n er ? fs.utimes(abs, atime, mtime, er2 => done(er2 && er))\n : done())\n }\n\n if (this[DOCHOWN](entry)) {\n actions++\n const uid = this[UID](entry)\n const gid = this[GID](entry)\n fs.fchown(fd, uid, gid, er =>\n er ? fs.chown(abs, uid, gid, er2 => done(er2 && er))\n : done())\n }\n\n done()\n })\n\n const tx = this.transform ? this.transform(entry) || entry : entry\n if (tx !== entry) {\n tx.on('error', er => {\n this[ONERROR](er, entry)\n fullyDone()\n })\n entry.pipe(tx)\n }\n tx.pipe(stream)\n }\n\n [DIRECTORY] (entry, fullyDone) {\n const mode = entry.mode & 0o7777 || this.dmode\n this[MKDIR](entry.absolute, mode, er => {\n if (er) {\n this[ONERROR](er, entry)\n fullyDone()\n return\n }\n\n let actions = 1\n const done = _ => {\n if (--actions === 0) {\n fullyDone()\n this[UNPEND]()\n entry.resume()\n }\n }\n\n if (entry.mtime && !this.noMtime) {\n actions++\n fs.utimes(entry.absolute, entry.atime || new Date(), entry.mtime, done)\n }\n\n if (this[DOCHOWN](entry)) {\n actions++\n fs.chown(entry.absolute, this[UID](entry), this[GID](entry), done)\n }\n\n done()\n })\n }\n\n [UNSUPPORTED] (entry) {\n entry.unsupported = true\n this.warn('TAR_ENTRY_UNSUPPORTED',\n `unsupported entry type: ${entry.type}`, { entry })\n entry.resume()\n }\n\n [SYMLINK] (entry, done) {\n this[LINK](entry, entry.linkpath, 'symlink', done)\n }\n\n [HARDLINK] (entry, done) {\n const linkpath = normPath(path.resolve(this.cwd, entry.linkpath))\n this[LINK](entry, linkpath, 'link', done)\n }\n\n [PEND] () {\n this[PENDING]++\n }\n\n [UNPEND] () {\n this[PENDING]--\n this[MAYBECLOSE]()\n }\n\n [SKIP] (entry) {\n this[UNPEND]()\n entry.resume()\n }\n\n // Check if we can reuse an existing filesystem entry safely and\n // overwrite it, rather than unlinking and recreating\n // Windows doesn't report a useful nlink, so we just never reuse entries\n [ISREUSABLE] (entry, st) {\n return entry.type === 'File' &&\n !this.unlink &&\n st.isFile() &&\n st.nlink <= 1 &&\n !isWindows\n }\n\n // check if a thing is there, and if so, try to clobber it\n [CHECKFS] (entry) {\n this[PEND]()\n const paths = [entry.path]\n if (entry.linkpath) {\n paths.push(entry.linkpath)\n }\n this.reservations.reserve(paths, done => this[CHECKFS2](entry, done))\n }\n\n [PRUNECACHE] (entry) {\n // if we are not creating a directory, and the path is in the dirCache,\n // then that means we are about to delete the directory we created\n // previously, and it is no longer going to be a directory, and neither\n // is any of its children.\n // If a symbolic link is encountered, all bets are off. There is no\n // reasonable way to sanitize the cache in such a way we will be able to\n // avoid having filesystem collisions. If this happens with a non-symlink\n // entry, it'll just fail to unpack, but a symlink to a directory, using an\n // 8.3 shortname or certain unicode attacks, can evade detection and lead\n // to arbitrary writes to anywhere on the system.\n if (entry.type === 'SymbolicLink') {\n dropCache(this.dirCache)\n } else if (entry.type !== 'Directory') {\n pruneCache(this.dirCache, entry.absolute)\n }\n }\n\n [CHECKFS2] (entry, fullyDone) {\n this[PRUNECACHE](entry)\n\n const done = er => {\n this[PRUNECACHE](entry)\n fullyDone(er)\n }\n\n const checkCwd = () => {\n this[MKDIR](this.cwd, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n this[CHECKED_CWD] = true\n start()\n })\n }\n\n const start = () => {\n if (entry.absolute !== this.cwd) {\n const parent = normPath(path.dirname(entry.absolute))\n if (parent !== this.cwd) {\n return this[MKDIR](parent, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n afterMakeParent()\n })\n }\n }\n afterMakeParent()\n }\n\n const afterMakeParent = () => {\n fs.lstat(entry.absolute, (lstatEr, st) => {\n if (st && (this.keep || this.newer && st.mtime > entry.mtime)) {\n this[SKIP](entry)\n done()\n return\n }\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry, done)\n }\n\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod = !this.noChmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode\n const afterChmod = er => this[MAKEFS](er, entry, done)\n if (!needChmod) {\n return afterChmod()\n }\n return fs.chmod(entry.absolute, entry.mode, afterChmod)\n }\n // Not a dir entry, have to remove it.\n // NB: the only way to end up with an entry that is the cwd\n // itself, in such a way that == does not detect, is a\n // tricky windows absolute path with UNC or 8.3 parts (and\n // preservePaths:true, or else it will have been stripped).\n // In that case, the user has opted out of path protections\n // explicitly, so if they blow away the cwd, c'est la vie.\n if (entry.absolute !== this.cwd) {\n return fs.rmdir(entry.absolute, er =>\n this[MAKEFS](er, entry, done))\n }\n }\n\n // not a dir, and not reusable\n // don't remove if the cwd, we want that error\n if (entry.absolute === this.cwd) {\n return this[MAKEFS](null, entry, done)\n }\n\n unlinkFile(entry.absolute, er =>\n this[MAKEFS](er, entry, done))\n })\n }\n\n if (this[CHECKED_CWD]) {\n start()\n } else {\n checkCwd()\n }\n }\n\n [MAKEFS] (er, entry, done) {\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n\n switch (entry.type) {\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n return this[FILE](entry, done)\n\n case 'Link':\n return this[HARDLINK](entry, done)\n\n case 'SymbolicLink':\n return this[SYMLINK](entry, done)\n\n case 'Directory':\n case 'GNUDumpDir':\n return this[DIRECTORY](entry, done)\n }\n }\n\n [LINK] (entry, linkpath, link, done) {\n // XXX: get the type ('symlink' or 'junction') for windows\n fs[link](linkpath, entry.absolute, er => {\n if (er) {\n this[ONERROR](er, entry)\n } else {\n this[UNPEND]()\n entry.resume()\n }\n done()\n })\n }\n}\n\nconst callSync = fn => {\n try {\n return [null, fn()]\n } catch (er) {\n return [er, null]\n }\n}\nclass UnpackSync extends Unpack {\n [MAKEFS] (er, entry) {\n return super[MAKEFS](er, entry, () => {})\n }\n\n [CHECKFS] (entry) {\n this[PRUNECACHE](entry)\n\n if (!this[CHECKED_CWD]) {\n const er = this[MKDIR](this.cwd, this.dmode)\n if (er) {\n return this[ONERROR](er, entry)\n }\n this[CHECKED_CWD] = true\n }\n\n // don't bother to make the parent if the current entry is the cwd,\n // we've already checked it.\n if (entry.absolute !== this.cwd) {\n const parent = normPath(path.dirname(entry.absolute))\n if (parent !== this.cwd) {\n const mkParent = this[MKDIR](parent, this.dmode)\n if (mkParent) {\n return this[ONERROR](mkParent, entry)\n }\n }\n }\n\n const [lstatEr, st] = callSync(() => fs.lstatSync(entry.absolute))\n if (st && (this.keep || this.newer && st.mtime > entry.mtime)) {\n return this[SKIP](entry)\n }\n\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry)\n }\n\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod = !this.noChmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode\n const [er] = needChmod ? callSync(() => {\n fs.chmodSync(entry.absolute, entry.mode)\n }) : []\n return this[MAKEFS](er, entry)\n }\n // not a dir entry, have to remove it\n const [er] = callSync(() => fs.rmdirSync(entry.absolute))\n this[MAKEFS](er, entry)\n }\n\n // not a dir, and not reusable.\n // don't remove if it's the cwd, since we want that error.\n const [er] = entry.absolute === this.cwd ? []\n : callSync(() => unlinkFileSync(entry.absolute))\n this[MAKEFS](er, entry)\n }\n\n [FILE] (entry, done) {\n const mode = entry.mode & 0o7777 || this.fmode\n\n const oner = er => {\n let closeError\n try {\n fs.closeSync(fd)\n } catch (e) {\n closeError = e\n }\n if (er || closeError) {\n this[ONERROR](er || closeError, entry)\n }\n done()\n }\n\n let fd\n try {\n fd = fs.openSync(entry.absolute, getFlag(entry.size), mode)\n } catch (er) {\n return oner(er)\n }\n const tx = this.transform ? this.transform(entry) || entry : entry\n if (tx !== entry) {\n tx.on('error', er => this[ONERROR](er, entry))\n entry.pipe(tx)\n }\n\n tx.on('data', chunk => {\n try {\n fs.writeSync(fd, chunk, 0, chunk.length)\n } catch (er) {\n oner(er)\n }\n })\n\n tx.on('end', _ => {\n let er = null\n // try both, falling futimes back to utimes\n // if either fails, handle the first error\n if (entry.mtime && !this.noMtime) {\n const atime = entry.atime || new Date()\n const mtime = entry.mtime\n try {\n fs.futimesSync(fd, atime, mtime)\n } catch (futimeser) {\n try {\n fs.utimesSync(entry.absolute, atime, mtime)\n } catch (utimeser) {\n er = futimeser\n }\n }\n }\n\n if (this[DOCHOWN](entry)) {\n const uid = this[UID](entry)\n const gid = this[GID](entry)\n\n try {\n fs.fchownSync(fd, uid, gid)\n } catch (fchowner) {\n try {\n fs.chownSync(entry.absolute, uid, gid)\n } catch (chowner) {\n er = er || fchowner\n }\n }\n }\n\n oner(er)\n })\n }\n\n [DIRECTORY] (entry, done) {\n const mode = entry.mode & 0o7777 || this.dmode\n const er = this[MKDIR](entry.absolute, mode)\n if (er) {\n this[ONERROR](er, entry)\n done()\n return\n }\n if (entry.mtime && !this.noMtime) {\n try {\n fs.utimesSync(entry.absolute, entry.atime || new Date(), entry.mtime)\n } catch (er) {}\n }\n if (this[DOCHOWN](entry)) {\n try {\n fs.chownSync(entry.absolute, this[UID](entry), this[GID](entry))\n } catch (er) {}\n }\n done()\n entry.resume()\n }\n\n [MKDIR] (dir, mode) {\n try {\n return mkdir.sync(normPath(dir), {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cache: this.dirCache,\n cwd: this.cwd,\n mode: mode,\n })\n } catch (er) {\n return er\n }\n }\n\n [LINK] (entry, linkpath, link, done) {\n try {\n fs[link + 'Sync'](linkpath, entry.absolute)\n done()\n entry.resume()\n } catch (er) {\n return this[ONERROR](er, entry)\n }\n }\n}\n\nUnpack.Sync = UnpackSync\nmodule.exports = Unpack\n","'use strict'\n\n// tar -x\nconst hlo = require('./high-level-opt.js')\nconst Unpack = require('./unpack.js')\nconst fs = require('fs')\nconst fsm = require('fs-minipass')\nconst path = require('path')\nconst stripSlash = require('./strip-trailing-slashes.js')\n\nmodule.exports = (opt_, files, cb) => {\n if (typeof opt_ === 'function') {\n cb = opt_, files = null, opt_ = {}\n } else if (Array.isArray(opt_)) {\n files = opt_, opt_ = {}\n }\n\n if (typeof files === 'function') {\n cb = files, files = null\n }\n\n if (!files) {\n files = []\n } else {\n files = Array.from(files)\n }\n\n const opt = hlo(opt_)\n\n if (opt.sync && typeof cb === 'function') {\n throw new TypeError('callback not supported for sync tar functions')\n }\n\n if (!opt.file && typeof cb === 'function') {\n throw new TypeError('callback only supported with file option')\n }\n\n if (files.length) {\n filesFilter(opt, files)\n }\n\n return opt.file && opt.sync ? extractFileSync(opt)\n : opt.file ? extractFile(opt, cb)\n : opt.sync ? extractSync(opt)\n : extract(opt)\n}\n\n// construct a filter that limits the file entries listed\n// include child entries if a dir is included\nconst filesFilter = (opt, files) => {\n const map = new Map(files.map(f => [stripSlash(f), true]))\n const filter = opt.filter\n\n const mapHas = (file, r) => {\n const root = r || path.parse(file).root || '.'\n const ret = file === root ? false\n : map.has(file) ? map.get(file)\n : mapHas(path.dirname(file), root)\n\n map.set(file, ret)\n return ret\n }\n\n opt.filter = filter\n ? (file, entry) => filter(file, entry) && mapHas(stripSlash(file))\n : file => mapHas(stripSlash(file))\n}\n\nconst extractFileSync = opt => {\n const u = new Unpack.Sync(opt)\n\n const file = opt.file\n const stat = fs.statSync(file)\n // This trades a zero-byte read() syscall for a stat\n // However, it will usually result in less memory allocation\n const readSize = opt.maxReadSize || 16 * 1024 * 1024\n const stream = new fsm.ReadStreamSync(file, {\n readSize: readSize,\n size: stat.size,\n })\n stream.pipe(u)\n}\n\nconst extractFile = (opt, cb) => {\n const u = new Unpack(opt)\n const readSize = opt.maxReadSize || 16 * 1024 * 1024\n\n const file = opt.file\n const p = new Promise((resolve, reject) => {\n u.on('error', reject)\n u.on('close', resolve)\n\n // This trades a zero-byte read() syscall for a stat\n // However, it will usually result in less memory allocation\n fs.stat(file, (er, stat) => {\n if (er) {\n reject(er)\n } else {\n const stream = new fsm.ReadStream(file, {\n readSize: readSize,\n size: stat.size,\n })\n stream.on('error', reject)\n stream.pipe(u)\n }\n })\n })\n return cb ? p.then(cb, cb) : p\n}\n\nconst extractSync = opt => new Unpack.Sync(opt)\n\nconst extract = opt => new Unpack(opt)\n","'use strict'\n\n// high-level commands\nexports.c = exports.create = require('./lib/create.js')\nexports.r = exports.replace = require('./lib/replace.js')\nexports.t = exports.list = require('./lib/list.js')\nexports.u = exports.update = require('./lib/update.js')\nexports.x = exports.extract = require('./lib/extract.js')\n\n// classes\nexports.Pack = require('./lib/pack.js')\nexports.Unpack = require('./lib/unpack.js')\nexports.Parse = require('./lib/parse.js')\nexports.ReadEntry = require('./lib/read-entry.js')\nexports.WriteEntry = require('./lib/write-entry.js')\nexports.Header = require('./lib/header.js')\nexports.Pax = require('./lib/pax.js')\nexports.types = require('./lib/types.js')\n","// =============================================================================\n// SystemBackupService — stateless primitives for archive creation /\n// extraction / restore-marker scheduling.\n//\n// Owned by the server-backend (not by an addon). Storage policy\n// (where to put the archive, retention, schedule) is the\n// responsibility of the caller — typically the `local-backup` addon\n// or a future `s3-backup` / `rsync-backup`. The primitives below have\n// zero state and zero scheduling logic; they're pure I/O.\n// =============================================================================\n\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport * as zlib from 'node:zlib'\nimport * as tar from 'tar'\nimport type { IScopedLogger } from '@camstack/types'\n\n/**\n * Default set of paths considered part of a \"system backup\". Includes\n * everything that isn't pure backend code — config, sqlite, addons\n * (runtime overlay), addons-data (per-addon private dir), TLS certs,\n * auto-update marker.\n *\n * Excluded by default: recordings/, media/, models/, logs/, cache/\n * (too large or fully recreatable).\n */\n// `db` was the legacy location for the sqlite-settings DB\n// (`<dataDir>/db/camstack.db`). After the storage-unification refactor\n// every addon — including sqlite-settings — keeps its private state\n// under `<dataDir>/addons-data/<addonId>/`, which is captured by the\n// `addons-data` entry below. The empty orphan `<dataDir>/db/` folder\n// is no longer worth checking; dropping it from the default set\n// keeps the Create Backup modal honest (operators were seeing\n// \"0 B · 0 files\" on a row that captures nothing).\nexport const DEFAULT_BACKUP_LOCATIONS = [\n 'config.yaml',\n 'addons',\n 'addons-data',\n 'tls',\n 'auto-update.json',\n] as const\n\n/** Path of the manifest file embedded inside every archive. */\nexport const ARCHIVE_MANIFEST_NAME = '.camstack-backup-manifest.json'\n\nexport type ArchiveEntryKind = 'file' | 'dir' | 'symlink'\n\nexport interface ArchiveEntry {\n /** Path relative to the archive root (== relative to dataDir). */\n readonly path: string\n readonly kind: ArchiveEntryKind\n /** Content bytes. 0 for dirs / symlinks. */\n readonly sizeBytes: number\n /** ms epoch from filesystem mtime. */\n readonly mtime: number\n}\n\nexport interface ArchiveManifest {\n archiveVersion: 1\n createdAt: number\n dataDir: string\n /**\n * Mutable arrays — same shape as the zod-inferred type returned by\n * `ArchiveManifestSchema.parse()`. `BaseAddon` providers receive\n * this exact type via cap inputs, so making the interface readonly\n * here would force callers to clone before forwarding.\n */\n locations: string[]\n entries: ArchiveEntry[]\n /** Sum of file `sizeBytes` (uncompressed). */\n totalBytes: number\n totalFiles: number\n}\n\nexport interface CreateArchiveResult {\n archivePath: string\n includedLocations: readonly string[]\n /** Archive size in bytes (compressed, on disk). */\n sizeBytes: number\n /** Embedded manifest — same shape as `getArchiveManifest()`. */\n manifest: ArchiveManifest\n}\n\nexport interface RestoreMarker {\n archivePath: string\n requestedAt: number\n /** Caller-supplied identifier (e.g. backup id) for traceability. */\n source: string\n /**\n * Optional whitelist of top-level locations to restore from the\n * archive. When omitted the boot-time hook applies everything in\n * the archive (full restore — same as the legacy behavior).\n */\n locations?: readonly string[]\n}\n\nexport interface LocationStat {\n readonly name: string\n readonly sizeBytes: number\n readonly fileCount: number\n /** False when the location doesn't exist under dataDir. */\n readonly present: boolean\n}\n\n/**\n * System-level archive primitives. Construct one per server boot;\n * methods are pure I/O.\n */\nexport class SystemBackupService {\n constructor(\n private readonly dataDir: string,\n private readonly logger: IScopedLogger,\n ) {}\n\n /**\n * Snapshot the current size + file count of each well-known\n * location. Used by the admin UI to render an opt-in checklist\n * before triggering a backup, and by `createArchive` to derive the\n * embedded manifest.\n */\n statLocations(locations: readonly string[] = DEFAULT_BACKUP_LOCATIONS): readonly LocationStat[] {\n return locations.map((loc) => {\n const abs = path.isAbsolute(loc) ? loc : path.join(this.dataDir, loc)\n if (!fs.existsSync(abs)) {\n return { name: loc, sizeBytes: 0, fileCount: 0, present: false }\n }\n const walked = walkAbs(abs, abs)\n const totalBytes = walked.reduce((acc, e) => acc + e.sizeBytes, 0)\n const fileCount = walked.filter((e) => e.kind === 'file').length\n return { name: loc, sizeBytes: totalBytes, fileCount, present: true }\n })\n }\n\n /**\n * Create a tar.gz of the given locations. Uses the `tar` npm package\n * (used by npm itself) instead of shelling out — gives us:\n *\n * - Symlink dereference (`follow: true`) so dev mode's\n * `addons/<name> → packages/<name>` overlay archives content,\n * not just link stubs.\n * - Programmatic walk → we build a manifest of every entry while\n * copying so the archive can self-describe.\n *\n * Locations that don't exist are silently skipped. Throws if zero\n * locations would be included.\n */\n async createArchive(opts: {\n archivePath: string\n locations?: readonly string[]\n }): Promise<CreateArchiveResult> {\n const requested = opts.locations ?? DEFAULT_BACKUP_LOCATIONS\n const present: string[] = []\n for (const loc of requested) {\n const abs = path.isAbsolute(loc) ? loc : path.join(this.dataDir, loc)\n if (fs.existsSync(abs)) {\n present.push(loc)\n } else {\n this.logger.debug('createArchive: skipping missing location', {\n meta: { location: loc },\n })\n }\n }\n if (present.length === 0) {\n throw new Error(\n `createArchive: no locations from {${requested.join(', ')}} exist under ${this.dataDir}`,\n )\n }\n fs.mkdirSync(path.dirname(opts.archivePath), { recursive: true })\n\n // 1. Walk every included location and derive the manifest.\n const entries: ArchiveEntry[] = []\n for (const loc of present) {\n const abs = path.join(this.dataDir, loc)\n const stat = fs.statSync(abs)\n if (stat.isDirectory()) {\n for (const e of walkAbs(abs, this.dataDir)) entries.push(e)\n } else {\n entries.push(toArchiveEntry(abs, this.dataDir, stat))\n }\n }\n const manifest: ArchiveManifest = {\n archiveVersion: 1,\n createdAt: Date.now(),\n dataDir: this.dataDir,\n locations: present,\n entries,\n totalBytes: entries.reduce((acc, e) => acc + e.sizeBytes, 0),\n totalFiles: entries.filter((e) => e.kind === 'file').length,\n }\n\n // 2. Stage the manifest as a real file so tar can include it.\n // The temp file lives next to the archive (same fs, atomic\n // rename on cleanup) and is removed in `finally`.\n const manifestStagePath = `${opts.archivePath}.${process.pid}.manifest.json`\n fs.writeFileSync(manifestStagePath, JSON.stringify(manifest, null, 2), 'utf-8')\n\n this.logger.info('createArchive: tarring', {\n meta: {\n archivePath: opts.archivePath,\n locations: present,\n totalFiles: manifest.totalFiles,\n totalBytes: manifest.totalBytes,\n },\n })\n try {\n // 3. Tar.create with two roots:\n // - the staged manifest file (renamed inside the archive\n // via the `transform`-equivalent: we copy it next to\n // dataDir under the canonical name first).\n // - every present location relative to dataDir.\n //\n // `follow: true` is the npm package's symlink dereference —\n // matches `tar -h` semantics. `portable: true` strips the\n // user/group/atime fields so archives are reproducible\n // across machines.\n const stagedInDataDir = path.join(this.dataDir, ARCHIVE_MANIFEST_NAME)\n fs.copyFileSync(manifestStagePath, stagedInDataDir)\n try {\n await tar.create(\n {\n file: opts.archivePath,\n gzip: true,\n cwd: this.dataDir,\n follow: true,\n portable: true,\n },\n [ARCHIVE_MANIFEST_NAME, ...present],\n )\n } finally {\n try { fs.rmSync(stagedInDataDir, { force: true }) } catch { /* best-effort */ }\n }\n } finally {\n try { fs.rmSync(manifestStagePath, { force: true }) } catch { /* best-effort */ }\n }\n\n const sizeBytes = fs.statSync(opts.archivePath).size\n return {\n archivePath: opts.archivePath,\n includedLocations: present,\n sizeBytes,\n manifest,\n }\n }\n\n /**\n * Read the embedded manifest from a previously-created archive\n * without extracting payload files. Streams the tar.gz, parses the\n * one entry we care about, then aborts.\n */\n async readArchiveManifest(archivePath: string): Promise<ArchiveManifest | null> {\n if (!fs.existsSync(archivePath)) {\n throw new Error(`readArchiveManifest: ${archivePath} does not exist`)\n }\n return new Promise<ArchiveManifest | null>((resolve, reject) => {\n const chunks: Buffer[] = []\n let found = false\n let resolved = false\n const parser = new tar.Parse({\n onentry: (entry) => {\n if (entry.path === ARCHIVE_MANIFEST_NAME && !found) {\n found = true\n entry.on('data', (chunk: Buffer) => chunks.push(chunk))\n entry.on('end', () => {\n try {\n const json = Buffer.concat(chunks).toString('utf-8')\n const parsed = JSON.parse(json) as ArchiveManifest\n resolved = true\n resolve(parsed)\n } catch (err) {\n resolved = true\n reject(err instanceof Error ? err : new Error(String(err)))\n }\n })\n } else {\n entry.resume()\n }\n },\n })\n // Errors propagate via the gunzip stream — `tar.Parse`'s public\n // `.on()` types only declare `'entry' | 'close' | 'end'`, but\n // the upstream gunzip emits `'error'` for both gzip and\n // downstream tar parse failures (which it surfaces as an\n // unpipe + error). Catching it there keeps us within the\n // declared API.\n parser.on('end', () => {\n if (!resolved) resolve(found ? null : null)\n })\n const gunzip = zlib.createGunzip()\n gunzip.on('error', (err) => {\n if (!resolved) {\n resolved = true\n reject(err)\n }\n })\n const reader = fs.createReadStream(archivePath)\n reader.on('error', (err) => {\n if (!resolved) {\n resolved = true\n reject(err)\n }\n })\n reader.pipe(gunzip).pipe(parser)\n })\n }\n\n /**\n * Extract a previously-created archive over `targetDir`. Used at boot\n * by the restore hook — never call from a running server (would\n * corrupt sqlite mid-run).\n *\n * `locations` is an optional whitelist: only entries whose path\n * starts with one of the locations get extracted. Used by the\n * partial-restore flow where the operator picks a subset of the\n * archive contents to apply (e.g. \"restore my devices but keep\n * my current TLS certs\").\n */\n async extractArchive(opts: {\n archivePath: string\n targetDir: string\n locations?: readonly string[]\n }): Promise<void> {\n if (!fs.existsSync(opts.archivePath)) {\n throw new Error(`extractArchive: ${opts.archivePath} does not exist`)\n }\n fs.mkdirSync(opts.targetDir, { recursive: true })\n this.logger.info('extractArchive: untarring', {\n meta: { archivePath: opts.archivePath, targetDir: opts.targetDir, locations: opts.locations },\n })\n const allowedPrefixes = opts.locations\n ? opts.locations.map(normalizeLocation)\n : null\n await tar.extract({\n file: opts.archivePath,\n cwd: opts.targetDir,\n filter: (p) => {\n // Skip our self-describing manifest on extract — it's\n // metadata, not part of the runtime tree.\n if (p === ARCHIVE_MANIFEST_NAME || p === `./${ARCHIVE_MANIFEST_NAME}`) return false\n if (!allowedPrefixes) return true\n const normalized = p.replace(/^\\.\\//, '')\n return allowedPrefixes.some((prefix) => entryMatchesLocation(normalized, prefix))\n },\n })\n }\n\n /**\n * Schedule a restore for the next boot by writing a marker file.\n * `locations` (optional) carries through to the boot-time\n * extractArchive call so the operator's \"restore only X and Y\"\n * choice survives the process restart.\n */\n scheduleRestoreMarker(opts: {\n archivePath: string\n source: string\n locations?: readonly string[]\n }): string {\n if (!fs.existsSync(opts.archivePath)) {\n throw new Error(`scheduleRestoreMarker: ${opts.archivePath} missing`)\n }\n const markerPath = this.getRestoreMarkerPath()\n const marker: RestoreMarker = {\n archivePath: opts.archivePath,\n requestedAt: Date.now(),\n source: opts.source,\n ...(opts.locations ? { locations: [...opts.locations] } : {}),\n }\n fs.mkdirSync(path.dirname(markerPath), { recursive: true })\n fs.writeFileSync(markerPath, JSON.stringify(marker, null, 2), {\n mode: 0o600,\n })\n return markerPath\n }\n\n /** Read the pending-restore marker if one is present. */\n readPendingMarker(): RestoreMarker | null {\n const markerPath = this.getRestoreMarkerPath()\n if (!fs.existsSync(markerPath)) return null\n try {\n const raw = fs.readFileSync(markerPath, 'utf-8')\n const parsed: unknown = JSON.parse(raw)\n if (\n typeof parsed === 'object' &&\n parsed != null &&\n typeof (parsed as { archivePath?: unknown }).archivePath === 'string'\n ) {\n return parsed as RestoreMarker\n }\n } catch (err) {\n this.logger.warn('readPendingMarker: malformed marker — ignoring', {\n meta: { error: err instanceof Error ? err.message : String(err) },\n })\n }\n return null\n }\n\n /** Drop the marker after a successful boot-time restore. */\n clearPendingMarker(): void {\n const markerPath = this.getRestoreMarkerPath()\n if (fs.existsSync(markerPath)) fs.rmSync(markerPath, { force: true })\n }\n\n private getRestoreMarkerPath(): string {\n return path.join(this.dataDir, '.pending-restore.json')\n }\n}\n\n// ─── helpers ───────────────────────────────────────────────────────────────\n\n/**\n * Recursively walk a directory and produce one `ArchiveEntry` per\n * filesystem node. `dataDir` is used to compute the archive-relative\n * path. Symlinks are dereferenced (matches the `follow: true` flag we\n * pass to tar.create).\n */\nfunction walkAbs(absRoot: string, dataDir: string): ArchiveEntry[] {\n const out: ArchiveEntry[] = []\n walkRec(absRoot, dataDir, out)\n return out\n}\n\nfunction walkRec(abs: string, dataDir: string, out: ArchiveEntry[]): void {\n let stat: fs.Stats\n try {\n stat = fs.statSync(abs)\n } catch {\n // Broken symlink target — skip silently.\n return\n }\n out.push(toArchiveEntry(abs, dataDir, stat))\n if (stat.isDirectory()) {\n let children: string[]\n try {\n children = fs.readdirSync(abs)\n } catch {\n return\n }\n for (const child of children) {\n walkRec(path.join(abs, child), dataDir, out)\n }\n }\n}\n\nfunction toArchiveEntry(abs: string, dataDir: string, stat: fs.Stats): ArchiveEntry {\n const rel = path.relative(dataDir, abs).replace(/\\\\/g, '/')\n const kind: ArchiveEntryKind = stat.isDirectory() ? 'dir' : stat.isSymbolicLink() ? 'symlink' : 'file'\n return {\n path: rel || path.basename(abs),\n kind,\n sizeBytes: kind === 'file' ? stat.size : 0,\n mtime: stat.mtimeMs,\n }\n}\n\n/**\n * Strip leading `./` and trailing `/` so location prefix matching is\n * order-of-comparison invariant. Same shape on both sides of the\n * `entry.path.startsWith(prefix)` test in the extract filter.\n */\nfunction normalizeLocation(loc: string): string {\n return loc.replace(/^\\.\\//, '').replace(/\\/+$/, '')\n}\n\n/**\n * Match an archive entry path against a location whitelist prefix.\n * `addons` matches `addons` (file) and `addons/foo/bar.txt` (path\n * inside the dir). The trailing `/` test is what prevents `addons`\n * from spuriously matching `addons-data`.\n */\nfunction entryMatchesLocation(entryPath: string, prefix: string): boolean {\n return entryPath === prefix || entryPath.startsWith(`${prefix}/`)\n}\n","/**\n * Per-destination policy storage for the backup orchestrator\n * (Task 9 of the storage-unification refactor — backup arch carry-over).\n *\n * Each row is keyed by `locationId` (the `<type>:<slug>` id of a\n * `backups`-typed `StorageLocation`). The orchestrator now reads the\n * authoritative list of destinations from the storage cap\n * (`api.storage.listLocations({ type: 'backups' })`) and joins it with\n * this table to produce the wire-shape `BackupDestinationInfo` consumed\n * by the admin UI. There is no longer a `backup-destination` cap call\n * in the path.\n *\n * Contract mirror of `SqliteLocationStore` (storage-orchestrator):\n * - Lazy `ensureTable` so the constructor stays sync.\n * - Tests pass an in-memory fake `ISettingsBackend` (Map-backed).\n * - The cap-router surface (`ctx.api.settingsStore.*`) does NOT expose\n * the `tableXxx` methods — they're only on the raw `ISettingsBackend`.\n * Callers obtain the backend via\n * `kernel.capabilityRegistry.getSingleton<ISettingsBackend>('settings-store')`.\n */\nimport type { ISettingsBackend, TableSchema } from '@camstack/types'\n\n/**\n * Per-`backups`-location policy. `locationId` is the foreign-key into\n * the storage orchestrator's `storage_locations` table.\n *\n * `enabled` gates whether scheduled / unspecified-target backups fan out\n * to this destination; operators can disable a destination temporarily\n * without deleting the underlying `StorageLocation`.\n *\n * `retentionCount` is independent per destination — destination A may\n * keep 3 archives while B keeps 30.\n *\n * `label` is an optional operator-defined display string. When omitted\n * the orchestrator falls back to the `StorageLocation.displayName`.\n */\nexport interface BackupDestinationPolicy {\n readonly locationId: string\n readonly enabled: boolean\n readonly retentionCount: number\n readonly label?: string\n /**\n * Cron expression for scheduled backups to this destination. When\n * undefined / empty the destination only receives backups from\n * manual `runNow()` calls. Each destination has its own cadence —\n * an offsite SFTP can run weekly while local stays nightly. The\n * orchestrator parses with `cron-parser` (5-field POSIX cron, no\n * seconds field).\n */\n readonly cron?: string\n /** ms-epoch of the last successful backup completion to this destination. */\n readonly lastRunAt?: number\n}\n\nconst TABLE_NAME = 'backup_destination_policies'\n\nexport const BACKUP_DESTINATION_POLICIES_SCHEMA: TableSchema = {\n columns: [\n { name: 'location_id', type: 'TEXT', primaryKey: true },\n { name: 'enabled', type: 'INTEGER', notNull: true, defaultValue: 1 },\n { name: 'retention_count', type: 'INTEGER', notNull: true, defaultValue: 7 },\n { name: 'label', type: 'TEXT' },\n { name: 'cron', type: 'TEXT' },\n { name: 'last_run_at', type: 'INTEGER' },\n ],\n}\n\nexport class BackupDestinationPolicyService {\n private tableEnsured = false\n\n constructor(private readonly backend: ISettingsBackend) {}\n\n /**\n * Lazy `ensureTable` — called from every read/write path. The\n * settings backend's own `ensureTable` is idempotent (additive\n * migration), so repeated calls collapse to a no-op after the first.\n * This keeps the constructor synchronous and avoids a separate\n * `initialize()` step that callers could forget.\n */\n async initialize(): Promise<void> {\n await this.ensureTable()\n }\n\n private async ensureTable(): Promise<void> {\n if (this.tableEnsured) return\n if (!this.backend.ensureTable) {\n throw new Error(\n 'BackupDestinationPolicyService: settings backend does not implement ensureTable — '\n + 'expected the SQLite settings backend, got a backend without structured-table support',\n )\n }\n await this.backend.ensureTable(TABLE_NAME, BACKUP_DESTINATION_POLICIES_SCHEMA)\n this.tableEnsured = true\n }\n\n async list(): Promise<readonly BackupDestinationPolicy[]> {\n await this.ensureTable()\n if (!this.backend.tableQuery) return []\n const rows = await this.backend.tableQuery(TABLE_NAME, {\n orderBy: { field: 'location_id', direction: 'asc' },\n })\n const out: BackupDestinationPolicy[] = []\n for (const row of rows) {\n const mapped = mapRowToPolicy(row)\n if (mapped) out.push(mapped)\n }\n return out\n }\n\n async get(locationId: string): Promise<BackupDestinationPolicy | null> {\n await this.ensureTable()\n if (!this.backend.tableGet) return null\n const row = await this.backend.tableGet(TABLE_NAME, { location_id: locationId })\n return row ? mapRowToPolicy(row) : null\n }\n\n /**\n * Replace-or-insert. Implemented as `delete` + `insert` (mirrors the\n * `SqliteLocationStore` contract) so backends that don't surface\n * `tableUpdate` still work.\n */\n async upsert(p: BackupDestinationPolicy): Promise<void> {\n await this.ensureTable()\n if (!this.backend.tableDelete || !this.backend.tableInsert) {\n throw new Error('BackupDestinationPolicyService: backend missing tableDelete/tableInsert')\n }\n await this.backend.tableDelete(TABLE_NAME, { location_id: p.locationId })\n await this.backend.tableInsert(TABLE_NAME, mapPolicyToRow(p))\n }\n\n async delete(locationId: string): Promise<void> {\n await this.ensureTable()\n if (!this.backend.tableDelete) {\n throw new Error('BackupDestinationPolicyService: backend missing tableDelete')\n }\n await this.backend.tableDelete(TABLE_NAME, { location_id: locationId })\n }\n\n /**\n * Auto-create a default policy for a `backups` location seen for the\n * first time (returns the existing policy unchanged when present).\n * The orchestrator calls this lazily on the first `listDestinations`\n * pass so newly-added storage locations are surfaced as enabled\n * destinations without an explicit configuration step.\n *\n * Defaults are passed by the orchestrator (currently:\n * `retentionCount=7` + `cron='0 3 * * *'`) so a fresh destination\n * starts running daily at 03:00 with 7 archives kept. Operator can\n * tune both inline on the destinations table.\n */\n async ensureDefault(\n locationId: string,\n defaults: { retentionCount: number; cron?: string },\n ): Promise<BackupDestinationPolicy> {\n const existing = await this.get(locationId)\n if (existing) return existing\n const fresh: BackupDestinationPolicy = {\n locationId,\n enabled: true,\n retentionCount: defaults.retentionCount,\n ...(defaults.cron !== undefined ? { cron: defaults.cron } : {}),\n }\n await this.upsert(fresh)\n return fresh\n }\n}\n\n// ── Row ↔ record mapping ────────────────────────────────────────────────\n\nfunction mapPolicyToRow(p: BackupDestinationPolicy): Record<string, unknown> {\n return {\n location_id: p.locationId,\n enabled: p.enabled ? 1 : 0,\n retention_count: p.retentionCount,\n label: p.label ?? null,\n cron: p.cron ?? null,\n last_run_at: p.lastRunAt ?? null,\n }\n}\n\n/**\n * Decode a row pulled from the structured table. Defensive against\n * schema drift / partial migrations: returns `null` on missing\n * `location_id` so corrupt rows skip the result list rather than\n * throwing the whole orchestrator down at boot.\n */\nfunction mapRowToPolicy(row: Record<string, unknown>): BackupDestinationPolicy | null {\n const locationId = String(row['location_id'] ?? '')\n if (!locationId) return null\n const labelRaw = row['label']\n const label = typeof labelRaw === 'string' && labelRaw.length > 0 ? labelRaw : undefined\n const cronRaw = row['cron']\n const cron = typeof cronRaw === 'string' && cronRaw.length > 0 ? cronRaw : undefined\n const lastRunRaw = row['last_run_at']\n const lastRunAt = typeof lastRunRaw === 'number' && lastRunRaw > 0 ? lastRunRaw : undefined\n return {\n locationId,\n enabled: row['enabled'] === 1 || row['enabled'] === true,\n retentionCount: Number(row['retention_count'] ?? 0),\n ...(label !== undefined ? { label } : {}),\n ...(cron !== undefined ? { cron } : {}),\n ...(lastRunAt !== undefined ? { lastRunAt } : {}),\n }\n}\n","/**\n * Per-location backup manifest persistence (Task 10 of the storage-\n * unification refactor).\n *\n * Each `backups`-typed `StorageLocation` carries a single\n * `manifests.json` file at its root. The orchestrator reads/appends/\n * writes this file via the consumer-facing `storage` cap — there is\n * no on-disk path coupling, the storage provider (filesystem, SFTP,\n * S3, …) handles dispatch.\n *\n * Concurrency: the orchestrator serializes per-location reads/writes\n * through `withLocationLock` so a fan-out of N parallel destination\n * uploads can't interleave manifest mutations within the same\n * location. Across locations, mutations run in parallel.\n *\n * Wire shape mirrors the spec: each archive entry carries an inline\n * snapshot of the embedded `ArchiveManifest` so `getEntries` can\n * serve the contents preview without re-reading the tarball.\n */\nimport type { AddonApi } from '@camstack/types'\nimport type { ArchiveManifest } from '../system-backup/system-backup.service.js'\n\n/** File path (relative to the location root) where the index lives. */\nexport const MANIFESTS_FILENAME = 'manifests.json'\n\nexport interface ManifestArchiveEntry {\n readonly id: string\n /** Filename inside the location (e.g. `<id>.tar.gz`). */\n readonly filename: string\n readonly createdAt: number\n readonly sizeBytes: number\n readonly label?: string\n /** Snapshot of the embedded `.camstack-backup-manifest.json`. */\n readonly manifest: ArchiveManifest\n}\n\nexport interface LocationBackupManifest {\n readonly version: 1\n readonly archives: readonly ManifestArchiveEntry[]\n}\n\n/** Subset of `AddonApi['storage']` the manifest store consumes. */\nexport type ManifestStorageApi = Pick<AddonApi['storage'], 'read' | 'write' | 'exists'>\n\n/**\n * Subset of `AddonApi['storage']` consumed by the chunked-download\n * helper. Sourced from the same generated type so the contract stays\n * in lockstep with the live cap surface.\n */\nexport type ChunkedDownloadApi = Pick<AddonApi['storage'], 'beginDownload' | 'readChunk' | 'endDownload'>\n\n/**\n * Read the per-location manifest. Returns an empty manifest on first\n * use (when `manifests.json` doesn't exist) or when the file is\n * unreadable / corrupt — operators see destination state degrade\n * gracefully rather than the orchestrator crashing.\n */\nexport async function readLocationManifest(\n api: ManifestStorageApi,\n locationId: string,\n): Promise<LocationBackupManifest> {\n // `exists` may throw if the storage location config is broken — we\n // treat that the same as `false` and fall through to the empty\n // manifest. Operators see destination state degrade gracefully rather\n // than the orchestrator crashing on a bad backend config.\n const exists = await api.exists\n .query({ location: locationId, relativePath: MANIFESTS_FILENAME })\n .catch(() => false)\n if (!exists) return EMPTY_MANIFEST\n let bytes: Uint8Array\n try {\n bytes = await api.read.query({ location: locationId, relativePath: MANIFESTS_FILENAME })\n } catch {\n return EMPTY_MANIFEST\n }\n return parseManifestBytes(bytes)\n}\n\nexport async function writeLocationManifest(\n api: ManifestStorageApi,\n locationId: string,\n manifest: LocationBackupManifest,\n): Promise<void> {\n const json = JSON.stringify(manifest, null, 2)\n const bytes = new TextEncoder().encode(json)\n await api.write.mutate({\n location: locationId,\n relativePath: MANIFESTS_FILENAME,\n data: bytes,\n })\n}\n\n/**\n * Decode the raw bytes of `manifests.json`. Falls back to an empty\n * manifest on JSON-parse / shape-validation failure — same defensive\n * stance as the legacy `LocalBackupService.ensureManifestsLoaded`.\n */\nexport function parseManifestBytes(bytes: Uint8Array): LocationBackupManifest {\n try {\n const text = new TextDecoder().decode(bytes)\n if (text.trim().length === 0) return EMPTY_MANIFEST\n const parsed: unknown = JSON.parse(text)\n return normalizeManifest(parsed)\n } catch {\n return EMPTY_MANIFEST\n }\n}\n\n/**\n * Coerce an arbitrary parsed JSON shape into the canonical manifest\n * type. Bogus archive entries are silently dropped (a corrupt row\n * shouldn't lock the whole location out of operator visibility).\n */\nfunction normalizeManifest(raw: unknown): LocationBackupManifest {\n if (typeof raw !== 'object' || raw == null) return EMPTY_MANIFEST\n const obj = raw as { version?: unknown; archives?: unknown }\n const archives: ManifestArchiveEntry[] = []\n if (Array.isArray(obj.archives)) {\n for (const a of obj.archives) {\n if (typeof a !== 'object' || a == null) continue\n const cand = a as Record<string, unknown>\n if (typeof cand['id'] !== 'string' || typeof cand['filename'] !== 'string') continue\n if (typeof cand['createdAt'] !== 'number' || typeof cand['sizeBytes'] !== 'number') continue\n const manifest = cand['manifest']\n if (typeof manifest !== 'object' || manifest == null) continue\n const entry: ManifestArchiveEntry = {\n id: String(cand['id']),\n filename: String(cand['filename']),\n createdAt: Number(cand['createdAt']),\n sizeBytes: Number(cand['sizeBytes']),\n ...(typeof cand['label'] === 'string' ? { label: cand['label'] } : {}),\n manifest: manifest as ArchiveManifest,\n }\n archives.push(entry)\n }\n }\n return { version: 1, archives }\n}\n\nconst EMPTY_MANIFEST: LocationBackupManifest = { version: 1, archives: [] }\n\n/**\n * Build a `ManifestArchiveEntry` from the raw inputs collected during\n * a successful upload. Pure transform — no I/O — kept here so the\n * triggerBackup path stays terse.\n */\nexport function buildArchiveEntry(input: {\n id: string\n filename: string\n createdAt: number\n sizeBytes: number\n label?: string\n manifest: ArchiveManifest\n}): ManifestArchiveEntry {\n return {\n id: input.id,\n filename: input.filename,\n createdAt: input.createdAt,\n sizeBytes: input.sizeBytes,\n ...(input.label !== undefined ? { label: input.label } : {}),\n manifest: input.manifest,\n }\n}\n\n/**\n * Pure retention split: given an archive list and the operator's\n * `retentionCount`, return `{ keep, drop }` where `keep` is the most-\n * recent N archives (newest first) and `drop` is the older overflow.\n *\n * `retentionCount <= 0` is treated as \"no pruning\" — defensive against\n * a config value that would otherwise wipe every archive on the next\n * write.\n */\nexport function applyRetention(\n archives: readonly ManifestArchiveEntry[],\n retentionCount: number,\n): { readonly keep: readonly ManifestArchiveEntry[]; readonly drop: readonly ManifestArchiveEntry[] } {\n if (retentionCount <= 0) return { keep: archives, drop: [] }\n const sorted = [...archives].sort((a, b) => b.createdAt - a.createdAt)\n if (sorted.length <= retentionCount) {\n return { keep: sorted, drop: [] }\n }\n return {\n keep: sorted.slice(0, retentionCount),\n drop: sorted.slice(retentionCount),\n }\n}\n\n/**\n * Per-location async mutex. The orchestrator owns one instance and\n * funnels every read-modify-write of `manifests.json` through it so\n * parallel destination uploads (within the same location) commit in\n * arrival order. Across locations the operations run in parallel —\n * each location keys its own promise chain.\n */\nexport class LocationManifestLock {\n private readonly chains = new Map<string, Promise<void>>()\n\n async run<T>(locationId: string, fn: () => Promise<T>): Promise<T> {\n const previous = this.chains.get(locationId) ?? Promise.resolve()\n let resolveNext!: () => void\n const next = new Promise<void>((res) => { resolveNext = res })\n // Ensure the chain entry is updated atomically before awaiting.\n this.chains.set(locationId, previous.then(() => next))\n try {\n await previous\n return await fn()\n } finally {\n resolveNext()\n // Drop the chain entry once it settles to keep the map bounded.\n // We compare identity with `next` so a later run can reset the\n // tail without us clearing it from under them.\n const tail = this.chains.get(locationId)\n if (tail) {\n // Re-walk: if our `next` is the active tail, drop it; otherwise\n // leave the tail in place.\n Promise.resolve(tail).then(() => {\n if (this.chains.get(locationId) === tail) {\n this.chains.delete(locationId)\n }\n }).catch(() => { /* best-effort cleanup */ })\n }\n }\n }\n}\n","/**\n * Chunked-download helper for the backup orchestrator (Task 12 of\n * the storage-unification refactor).\n *\n * Streams an archive from a destination `StorageLocation` into a\n * local filesystem path via the consumer-facing `storage` cap. Pulled\n * out of `backup-orchestrator.addon.ts` so it can be unit-tested with\n * an in-memory fake `AddonApi['storage']` slice — the addon is hard\n * to bootstrap in vitest because of the BaseAddon ceremony.\n *\n * Cleanup contract:\n * - Successful run leaves the cache file in place + calls\n * `endDownload`.\n * - Mid-stream failure destroys the writeStream, removes the\n * partial cache file, and best-effort calls `endDownload` so the\n * storage provider's session bookkeeping doesn't leak.\n */\nimport * as fs from 'node:fs'\nimport * as fsp from 'node:fs/promises'\nimport type { IScopedLogger } from '@camstack/types'\nimport type { ChunkedDownloadApi } from './manifest-store.js'\n\nexport interface DownloadArchiveInput {\n readonly api: ChunkedDownloadApi\n readonly locationId: string\n readonly filename: string\n readonly cachePath: string\n /** Per-chunk byte budget. Matches the upload helper's 8 MiB. */\n readonly chunkBytes: number\n readonly logger: IScopedLogger\n}\n\nexport async function downloadArchiveToCache(input: DownloadArchiveInput): Promise<void> {\n const { downloadId, sizeBytes } = await input.api.beginDownload.mutate({\n location: input.locationId,\n relativePath: input.filename,\n })\n const writeStream = fs.createWriteStream(input.cachePath)\n let offset = 0\n try {\n while (offset < sizeBytes) {\n const remaining = sizeBytes - offset\n const length = Math.min(input.chunkBytes, remaining)\n const chunk = await input.api.readChunk.query({\n downloadId,\n offset,\n length,\n })\n if (chunk.byteLength === 0) {\n // Remote reported `sizeBytes` but stopped delivering — treat\n // as a truncated source rather than spinning forever.\n throw new Error(\n `backup restore: empty chunk at offset ${offset}/${sizeBytes} from \"${input.locationId}/${input.filename}\"`,\n )\n }\n writeStream.write(chunk)\n offset += chunk.byteLength\n }\n await new Promise<void>((resolve, reject) => {\n writeStream.end((err: Error | null | undefined) => {\n if (err) reject(err); else resolve()\n })\n })\n try {\n await input.api.endDownload.mutate({ downloadId })\n } catch (err) {\n // endDownload is bookkeeping; tolerate failure so an already-\n // finished download still produces a usable cache file.\n input.logger.warn('backup restore: endDownload failed (ignoring)', {\n meta: { downloadId, error: err instanceof Error ? err.message : String(err) },\n })\n }\n } catch (err) {\n // Wait for the writeStream to fully close BEFORE deleting the\n // partial cache file — otherwise pending OS-level buffered writes\n // can race the rm and re-create the file. We swallow the\n // close-side error (the throw below carries the meaningful one).\n await new Promise<void>((resolve) => {\n writeStream.once('close', () => resolve())\n writeStream.destroy()\n })\n try {\n await fsp.rm(input.cachePath, { force: true })\n } catch { /* best-effort */ }\n try {\n await input.api.endDownload.mutate({ downloadId })\n } catch { /* ignore */ }\n throw err\n }\n}\n","function T(s){return Date.UTC(s.y,s.m-1,s.d,s.h,s.i,s.s)}function D(s,e){return s.y===e.y&&s.m===e.m&&s.d===e.d&&s.h===e.h&&s.i===e.i&&s.s===e.s}function A(s,e){let t=new Date(Date.parse(s));if(isNaN(t))throw new Error(\"Invalid ISO8601 passed to timezone parser.\");let r=s.substring(9);return r.includes(\"Z\")||r.includes(\"+\")||r.includes(\"-\")?b(t.getUTCFullYear(),t.getUTCMonth()+1,t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),\"Etc/UTC\"):b(t.getFullYear(),t.getMonth()+1,t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),e)}function v(s,e,t){return k(A(s,e),t)}function k(s,e){let t=new Date(T(s)),r=g(t,s.tz),n=T(s),i=T(r),a=n-i,o=new Date(t.getTime()+a),h=g(o,s.tz);if(D(h,s)){let u=new Date(o.getTime()-36e5),d=g(u,s.tz);return D(d,s)?u:o}let l=new Date(o.getTime()+T(s)-T(h)),y=g(l,s.tz);if(D(y,s))return l;if(e)throw new Error(\"Invalid date passed to fromTZ()\");return o.getTime()>l.getTime()?o:l}function g(s,e){let t,r;try{t=new Intl.DateTimeFormat(\"en-US\",{timeZone:e,year:\"numeric\",month:\"numeric\",day:\"numeric\",hour:\"numeric\",minute:\"numeric\",second:\"numeric\",hour12:!1}),r=t.formatToParts(s)}catch(i){let a=i instanceof Error?i.message:String(i);throw new RangeError(`toTZ: Invalid timezone '${e}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${a}`)}let n={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let i of r)(i.type===\"year\"||i.type===\"month\"||i.type===\"day\"||i.type===\"hour\"||i.type===\"minute\"||i.type===\"second\")&&(n[i.type]=parseInt(i.value,10));if(isNaN(n.year)||isNaN(n.month)||isNaN(n.day)||isNaN(n.hour)||isNaN(n.minute)||isNaN(n.second))throw new Error(`toTZ: Failed to parse all date components from timezone '${e}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(n)}`);return n.hour===24&&(n.hour=0),{y:n.year,m:n.month,d:n.day,h:n.hour,i:n.minute,s:n.second,tz:e}}function b(s,e,t,r,n,i,a){return{y:s,m:e,d:t,h:r,i:n,s:i,tz:a}}var O=[1,2,4,8,16],C=class{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;constructor(e,t,r){this.pattern=e,this.timezone=t,this.mode=r?.mode??\"auto\",this.alternativeWeekdays=r?.alternativeWeekdays??!1,this.sloppyRanges=r?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.parse()}parse(){if(!(typeof this.pattern==\"string\"||this.pattern instanceof String))throw new TypeError(\"CronPattern: Pattern has to be of type string.\");this.pattern.indexOf(\"@\")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\\S+/g)||[\"\"],t=e.length;if(e.length<5||e.length>7)throw new TypeError(\"CronPattern: invalid configuration format ('\"+this.pattern+\"'), exactly five, six, or seven space separated parts are required.\");if(this.mode!==\"auto\"){let n;switch(this.mode){case\"5-part\":n=5;break;case\"6-part\":n=6;break;case\"7-part\":n=7;break;case\"5-or-6-parts\":n=[5,6];break;case\"6-or-7-parts\":n=[6,7];break;default:n=0}if(!(Array.isArray(n)?n.includes(t):t===n)){let a=Array.isArray(n)?n.join(\" or \"):n.toString();throw new TypeError(`CronPattern: mode '${this.mode}' requires exactly ${a} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift(\"0\"),e.length===6&&e.push(\"*\"),e[3].toUpperCase()===\"LW\"?(this.lastWeekday=!0,e[3]=\"\"):e[3].toUpperCase().indexOf(\"L\")>=0&&(e[3]=e[3].replace(/L/gi,\"\"),this.lastDayOfMonth=!0),e[3]==\"*\"&&(this.starDOM=!0),e[6]==\"*\"&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlphaMonths(e[4])),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlphaDaysQuartz(e[5]):this.replaceAlphaDays(e[5])),e[5].startsWith(\"+\")&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===\"\"))throw new TypeError(\"CronPattern: Day-of-week field cannot be empty after '+' modifier.\");switch(e[5]==\"*\"&&(this.starDOW=!0),this.pattern.indexOf(\"?\")>=0&&(e[0]=e[0].replace(/\\?/g,\"*\"),e[1]=e[1].replace(/\\?/g,\"*\"),e[2]=e[2].replace(/\\?/g,\"*\"),e[3]=e[3].replace(/\\?/g,\"*\"),e[4]=e[4].replace(/\\?/g,\"*\"),e[5]=e[5].replace(/\\?/g,\"*\"),e[6]&&(e[6]=e[6].replace(/\\?/g,\"*\"))),this.mode){case\"5-part\":e[0]=\"0\",e[6]=\"*\";break;case\"6-part\":e[6]=\"*\";break;case\"5-or-6-parts\":e[6]=\"*\";break;case\"6-or-7-parts\":break;case\"7-part\":case\"auto\":break}this.throwAtIllegalCharacters(e),this.partToArray(\"second\",e[0],0,1),this.partToArray(\"minute\",e[1],0,1),this.partToArray(\"hour\",e[2],0,1),this.partToArray(\"day\",e[3],-1,1),this.partToArray(\"month\",e[4],-1,1);let r=this.alternativeWeekdays?-1:0;this.partToArray(\"dayOfWeek\",e[5],r,63),this.partToArray(\"year\",e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(e,t,r,n){let i=this[e],a=e===\"day\"&&this.lastDayOfMonth,o=e===\"day\"&&this.lastWeekday;if(t===\"\"&&!a&&!o)throw new TypeError(\"CronPattern: configuration entry \"+e+\" (\"+t+\") is empty, check for trailing spaces.\");if(t===\"*\")return i.fill(n);let h=t.split(\",\");if(h.length>1)for(let l=0;l<h.length;l++)this.partToArray(e,h[l],r,n);else t.indexOf(\"-\")!==-1&&t.indexOf(\"/\")!==-1?this.handleRangeWithStepping(t,e,r,n):t.indexOf(\"-\")!==-1?this.handleRange(t,e,r,n):t.indexOf(\"/\")!==-1?this.handleStepping(t,e,r,n):t!==\"\"&&this.handleNumber(t,e,r,n)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\\-WwLl]+/:t===5?/[^/*0-9,\\-#Ll]+/:/[^/*0-9,\\-]+/).test(e[t]))throw new TypeError(\"CronPattern: configuration entry \"+t+\" (\"+e[t]+\") contains illegal characters.\")}handleNumber(e,t,r,n){let i=this.extractNth(e,t),a=e.toUpperCase().includes(\"W\");if(t!==\"day\"&&a)throw new TypeError(\"CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.\");a&&(t=\"nearestWeekdays\");let o=parseInt(i[0],10)+r;if(isNaN(o))throw new TypeError(\"CronPattern: \"+t+\" is not a number: '\"+e+\"'\");this.setPart(t,o,i[1]||n)}setPart(e,t,r){if(!Object.prototype.hasOwnProperty.call(this,e))throw new TypeError(\"CronPattern: Invalid part specified: \"+e);if(e===\"dayOfWeek\"){if(t===7&&(t=0),t<0||t>6)throw new RangeError(\"CronPattern: Invalid value for dayOfWeek: \"+t);this.setNthWeekdayOfMonth(t,r);return}if(e===\"second\"||e===\"minute\"){if(t<0||t>=60)throw new RangeError(\"CronPattern: Invalid value for \"+e+\": \"+t)}else if(e===\"hour\"){if(t<0||t>=24)throw new RangeError(\"CronPattern: Invalid value for \"+e+\": \"+t)}else if(e===\"day\"||e===\"nearestWeekdays\"){if(t<0||t>=31)throw new RangeError(\"CronPattern: Invalid value for \"+e+\": \"+t)}else if(e===\"month\"){if(t<0||t>=12)throw new RangeError(\"CronPattern: Invalid value for \"+e+\": \"+t)}else if(e===\"year\"&&(t<1||t>=1e4))throw new RangeError(\"CronPattern: Invalid value for \"+e+\": \"+t+\" (supported range: 1-9999)\");this[e][t]=r}validateNotNaN(e,t){if(isNaN(e))throw new TypeError(t)}validateRange(e,t,r,n,i){if(e>t)throw new TypeError(\"CronPattern: From value is larger than to value: '\"+i+\"'\");if(r!==void 0){if(r===0)throw new TypeError(\"CronPattern: Syntax error, illegal stepping: 0\");if(r>this[n].length)throw new TypeError(\"CronPattern: Syntax error, steps cannot be greater than maximum value of part (\"+this[n].length+\")\")}}handleRangeWithStepping(e,t,r,n){if(e.toUpperCase().includes(\"W\"))throw new TypeError(\"CronPattern: Syntax error, W is not allowed in ranges with stepping.\");let i=this.extractNth(e,t),a=i[0].match(/^(\\d+)-(\\d+)\\/(\\d+)$/);if(a===null)throw new TypeError(\"CronPattern: Syntax error, illegal range with stepping: '\"+e+\"'\");let[,o,h,l]=a,y=parseInt(o,10)+r,u=parseInt(h,10)+r,d=parseInt(l,10);this.validateNotNaN(y,\"CronPattern: Syntax error, illegal lower range (NaN)\"),this.validateNotNaN(u,\"CronPattern: Syntax error, illegal upper range (NaN)\"),this.validateNotNaN(d,\"CronPattern: Syntax error, illegal stepping: (NaN)\"),this.validateRange(y,u,d,t,e);for(let c=y;c<=u;c+=d)this.setPart(t,c,i[1]||n)}extractNth(e,t){let r=e,n;if(r.includes(\"#\")){if(t!==\"dayOfWeek\")throw new Error(\"CronPattern: nth (#) only allowed in day-of-week field\");n=r.split(\"#\")[1],r=r.split(\"#\")[0]}else if(r.toUpperCase().endsWith(\"L\")){if(t!==\"dayOfWeek\")throw new Error(\"CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)\");n=\"L\",r=r.slice(0,-1)}return[r,n]}handleRange(e,t,r,n){if(e.toUpperCase().includes(\"W\"))throw new TypeError(\"CronPattern: Syntax error, W is not allowed in a range.\");let i=this.extractNth(e,t),a=i[0].split(\"-\");if(a.length!==2)throw new TypeError(\"CronPattern: Syntax error, illegal range: '\"+e+\"'\");let o=parseInt(a[0],10)+r,h=parseInt(a[1],10)+r;this.validateNotNaN(o,\"CronPattern: Syntax error, illegal lower range (NaN)\"),this.validateNotNaN(h,\"CronPattern: Syntax error, illegal upper range (NaN)\"),this.validateRange(o,h,void 0,t,e);for(let l=o;l<=h;l++)this.setPart(t,l,i[1]||n)}handleStepping(e,t,r,n){if(e.toUpperCase().includes(\"W\"))throw new TypeError(\"CronPattern: Syntax error, W is not allowed in parts with stepping.\");let i=this.extractNth(e,t),a=i[0].split(\"/\");if(a.length!==2)throw new TypeError(\"CronPattern: Syntax error, illegal stepping: '\"+e+\"'\");if(this.sloppyRanges)a[0]===\"\"&&(a[0]=\"*\");else{if(a[0]===\"\")throw new TypeError(\"CronPattern: Syntax error, stepping with missing prefix ('\"+e+\"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.\");if(a[0]!==\"*\")throw new TypeError(\"CronPattern: Syntax error, stepping with numeric prefix ('\"+e+\"') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.\")}let o=0;a[0]!==\"*\"&&(o=parseInt(a[0],10)+r);let h=parseInt(a[1],10);this.validateNotNaN(h,\"CronPattern: Syntax error, illegal stepping: (NaN)\"),this.validateRange(0,this[t].length-1,h,t,e);for(let l=o;l<this[t].length;l+=h)this.setPart(t,l,i[1]||n)}replaceAlphaDays(e){return e.replace(/-sun/gi,\"-7\").replace(/sun/gi,\"0\").replace(/mon/gi,\"1\").replace(/tue/gi,\"2\").replace(/wed/gi,\"3\").replace(/thu/gi,\"4\").replace(/fri/gi,\"5\").replace(/sat/gi,\"6\")}replaceAlphaDaysQuartz(e){return e.replace(/sun/gi,\"1\").replace(/mon/gi,\"2\").replace(/tue/gi,\"3\").replace(/wed/gi,\"4\").replace(/thu/gi,\"5\").replace(/fri/gi,\"6\").replace(/sat/gi,\"7\")}replaceAlphaMonths(e){return e.replace(/jan/gi,\"1\").replace(/feb/gi,\"2\").replace(/mar/gi,\"3\").replace(/apr/gi,\"4\").replace(/may/gi,\"5\").replace(/jun/gi,\"6\").replace(/jul/gi,\"7\").replace(/aug/gi,\"8\").replace(/sep/gi,\"9\").replace(/oct/gi,\"10\").replace(/nov/gi,\"11\").replace(/dec/gi,\"12\")}handleNicknames(e){let t=e.trim().toLowerCase();if(t===\"@yearly\"||t===\"@annually\")return\"0 0 1 1 *\";if(t===\"@monthly\")return\"0 0 1 * *\";if(t===\"@weekly\")return\"0 0 * * 0\";if(t===\"@daily\"||t===\"@midnight\")return\"0 0 * * *\";if(t===\"@hourly\")return\"0 * * * *\";if(t===\"@reboot\")throw new TypeError(\"CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.\");return e}setNthWeekdayOfMonth(e,t){if(typeof t!=\"number\"&&t.toUpperCase()===\"L\")this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|O[t-1];else throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}};var P=[31,28,31,30,31,30,31,31,30,31,30,31],f=[[\"month\",\"year\",0],[\"day\",\"month\",-1],[\"hour\",\"day\",0],[\"minute\",\"hour\",0],[\"second\",\"minute\",0]],m=class s{tz;ms;second;minute;hour;day;month;year;constructor(e,t){if(this.tz=t,e&&e instanceof Date)if(!isNaN(e))this.fromDate(e);else throw new TypeError(\"CronDate: Invalid date passed to CronDate constructor\");else if(e==null)this.fromDate(new Date);else if(e&&typeof e==\"string\")this.fromString(e);else if(e instanceof s)this.fromCronDate(e);else throw new TypeError(\"CronDate: Invalid type (\"+typeof e+\") passed to CronDate constructor\")}getLastDayOfMonth(e,t){return t!==1?P[t]:new Date(Date.UTC(e,t+1,0)).getUTCDate()}getLastWeekday(e,t){let r=this.getLastDayOfMonth(e,t),i=new Date(Date.UTC(e,t,r)).getUTCDay();return i===0?r-2:i===6?r-1:r}getNearestWeekday(e,t,r){let n=this.getLastDayOfMonth(e,t);if(r>n)return-1;let a=new Date(Date.UTC(e,t,r)).getUTCDay();return a===0?r===n?r-2:r+1:a===6?r===1?r+2:r-1:r}isNthWeekdayOfMonth(e,t,r,n){let a=new Date(Date.UTC(e,t,r)).getUTCDay(),o=0;for(let h=1;h<=r;h++)new Date(Date.UTC(e,t,h)).getUTCDay()===a&&o++;if(n&63&&O[o-1]&n)return!0;if(n&32){let h=this.getLastDayOfMonth(e,t);for(let l=r+1;l<=h;l++)if(new Date(Date.UTC(e,t,l)).getUTCDay()===a)return!1;return!0}return!1}fromDate(e){if(this.tz!==void 0)if(typeof this.tz==\"number\")this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes()+this.tz,this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),this.apply();else try{let t=g(e,this.tz);this.ms=e.getMilliseconds(),this.second=t.s,this.minute=t.i,this.hour=t.h,this.day=t.d,this.month=t.m-1,this.year=t.y}catch(t){let r=t instanceof Error?t.message:String(t);throw new TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${r}`)}else this.ms=e.getMilliseconds(),this.second=e.getSeconds(),this.minute=e.getMinutes(),this.hour=e.getHours(),this.day=e.getDate(),this.month=e.getMonth(),this.year=e.getFullYear()}fromCronDate(e){this.tz=e.tz,this.year=e.year,this.month=e.month,this.day=e.day,this.hour=e.hour,this.minute=e.minute,this.second=e.second,this.ms=e.ms}apply(){if(this.month>11||this.month<0||this.day>P[this.month]||this.day<1||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let e=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes(),this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),!0}else return!1}fromString(e){if(typeof this.tz==\"number\"){let t=v(e);this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply()}else return this.fromDate(v(e,this.tz))}findNext(e,t,r,n){return this._findMatch(e,t,r,n,1)}_findMatch(e,t,r,n,i){let a=this[t],o;r.lastDayOfMonth&&(o=this.getLastDayOfMonth(this.year,this.month));let h=!r.starDOW&&t==\"day\"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0,l=this[t]+n,y=i===1?u=>u<r[t].length:u=>u>=0;for(let u=l;y(u);u+=i){let d=r[t][u];if(t===\"day\"&&!d){for(let c=0;c<r.nearestWeekdays.length;c++)if(r.nearestWeekdays[c]){let M=this.getNearestWeekday(this.year,this.month,c-n);if(M===-1)continue;if(M===u-n){d=1;break}}}if(t===\"day\"&&r.lastWeekday){let c=this.getLastWeekday(this.year,this.month);u-n===c&&(d=1)}if(t===\"day\"&&r.lastDayOfMonth&&u-n==o&&(d=1),t===\"day\"&&!r.starDOW){let c=r.dayOfWeek[(h+(u-n-1))%7];if(c&&c&63)c=this.isNthWeekdayOfMonth(this.year,this.month,u-n,c)?1:0;else if(c)throw new Error(`CronDate: Invalid value for dayOfWeek encountered. ${c}`);r.useAndLogic?d=d&&c:!e.domAndDow&&!r.starDOM?d=d||c:d=d&&c}if(d)return this[t]=u-n,a!==this[t]?2:1}return 3}recurse(e,t,r){if(r===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let i=-1;for(let a=this.year+1;a<e.year.length&&a<1e4;a++)if(e.year[a]===1){i=a;break}if(i===-1)return null;this.year=i,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let n=this.findNext(t,f[r][0],e,f[r][2]);if(n>1){let i=r+1;for(;i<f.length;)this[f[i][0]]=-f[i][2],i++;if(n===3){if(this[f[r][1]]++,this[f[r][0]]=-f[r][2],this.apply(),r===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=e.year.length)return null}return this.recurse(e,t,0)}else if(this.apply())return this.recurse(e,t,r-1)}return r+=1,r>=f.length?this:(e.starYear?this.year>=3e3:this.year>=1e4)?null:this.recurse(e,t,r)}increment(e,t,r){return this.second+=t.interval!==void 0&&t.interval>1&&r?t.interval:1,this.ms=0,this.apply(),this.recurse(e,t,0)}decrement(e,t){return this.second-=t.interval!==void 0&&t.interval>1?t.interval:1,this.ms=0,this.apply(),this.recurseBackward(e,t,0,0)}recurseBackward(e,t,r,n=0){if(n>1e4)return null;if(r===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let a=-1;for(let o=this.year-1;o>=0;o--)if(e.year[o]===1){a=o;break}if(a===-1)return null;this.year=a,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let i=this.findPrevious(t,f[r][0],e,f[r][2]);if(i>1){let a=r+1;for(;a<f.length;){let o=f[a][0],h=f[a][2],l=this.getMaxPatternValue(o,e,h);this[o]=l,a++}if(i===3){if(this[f[r][1]]--,r===0){let y=this.getLastDayOfMonth(this.year,this.month);this.day>y&&(this.day=y)}if(r===1)if(this.day<=0)this.day=1;else{let y=this.year,u=this.month;for(;u<0;)u+=12,y--;for(;u>11;)u-=12,y++;let d=u!==1?P[u]:new Date(Date.UTC(y,u+1,0)).getUTCDate();this.day>d&&(this.day=d)}this.apply();let o=f[r][0],h=f[r][2],l=this.getMaxPatternValue(o,e,h);if(o===\"day\"){let y=this.getLastDayOfMonth(this.year,this.month);this[o]=Math.min(l,y)}else this[o]=l;if(this.apply(),r===0){let y=f[1][2],u=this.getMaxPatternValue(\"day\",e,y),d=this.getLastDayOfMonth(this.year,this.month),c=Math.min(u,d);c!==this.day&&(this.day=c,this.hour=this.getMaxPatternValue(\"hour\",e,f[2][2]),this.minute=this.getMaxPatternValue(\"minute\",e,f[3][2]),this.second=this.getMaxPatternValue(\"second\",e,f[4][2]))}if(r===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0;)this.year--;if(this.year<0)return null}return this.recurseBackward(e,t,0,n+1)}else if(this.apply())return this.recurseBackward(e,t,r-1,n+1)}return r+=1,r>=f.length?this:this.year<0?null:this.recurseBackward(e,t,r,n+1)}getMaxPatternValue(e,t,r){if(e===\"day\"&&t.lastDayOfMonth)return this.getLastDayOfMonth(this.year,this.month);if(e===\"day\"&&!t.starDOW)return this.getLastDayOfMonth(this.year,this.month);for(let n=t[e].length-1;n>=0;n--)if(t[e][n])return n-r;return t[e].length-1-r}findPrevious(e,t,r,n){return this._findMatch(e,t,r,n,-1)}getDate(e){return e||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz==\"number\"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):k(b(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(e,t){if(!e.starYear&&(this.year<0||this.year>=e.year.length||e.year[this.year]===0))return!1;for(let r=0;r<f.length;r++){let n=f[r][0],i=f[r][2],a=this[n];if(a+i<0||a+i>=e[n].length)return!1;let o=e[n][a+i];if(n===\"day\"){if(!o){for(let h=0;h<e.nearestWeekdays.length;h++)if(e.nearestWeekdays[h]){let l=this.getNearestWeekday(this.year,this.month,h-i);if(l!==-1&&l===a){o=1;break}}}if(e.lastWeekday){let h=this.getLastWeekday(this.year,this.month);a===h&&(o=1)}if(e.lastDayOfMonth){let h=this.getLastDayOfMonth(this.year,this.month);a===h&&(o=1)}if(!e.starDOW){let h=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),l=e.dayOfWeek[(h+(a-1))%7];l&&l&63&&(l=this.isNthWeekdayOfMonth(this.year,this.month,a,l)?1:0),e.useAndLogic?o=o&&l:!t.domAndDow&&!e.starDOM?o=o||l:o=o&&l}}if(!o)return!1}return!0}};function R(s){if(s===void 0&&(s={}),delete s.name,s.legacyMode!==void 0&&s.domAndDow===void 0?s.domAndDow=!s.legacyMode:s.domAndDow===void 0&&(s.domAndDow=!1),s.legacyMode=!s.domAndDow,s.paused=s.paused===void 0?!1:s.paused,s.maxRuns=s.maxRuns===void 0?1/0:s.maxRuns,s.catch=s.catch===void 0?!1:s.catch,s.interval=s.interval===void 0?0:parseInt(s.interval.toString(),10),s.utcOffset=s.utcOffset===void 0?void 0:parseInt(s.utcOffset.toString(),10),s.dayOffset=s.dayOffset===void 0?0:parseInt(s.dayOffset.toString(),10),s.unref=s.unref===void 0?!1:s.unref,s.mode=s.mode===void 0?\"auto\":s.mode,s.alternativeWeekdays=s.alternativeWeekdays===void 0?!1:s.alternativeWeekdays,s.sloppyRanges=s.sloppyRanges===void 0?!1:s.sloppyRanges,![\"auto\",\"5-part\",\"6-part\",\"7-part\",\"5-or-6-parts\",\"6-or-7-parts\"].includes(s.mode))throw new Error(\"CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.\");if(s.startAt&&(s.startAt=new m(s.startAt,s.timezone)),s.stopAt&&(s.stopAt=new m(s.stopAt,s.timezone)),s.interval!==null){if(isNaN(s.interval))throw new Error(\"CronOptions: Supplied value for interval is not a number\");if(s.interval<0)throw new Error(\"CronOptions: Supplied value for interval can not be negative\")}if(s.utcOffset!==void 0){if(isNaN(s.utcOffset))throw new Error(\"CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.\");if(s.utcOffset<-870||s.utcOffset>870)throw new Error(\"CronOptions: utcOffset out of bounds.\");if(s.utcOffset!==void 0&&s.timezone)throw new Error(\"CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.\")}if(s.unref!==!0&&s.unref!==!1)throw new Error(\"CronOptions: Unref should be either true, false or undefined(false).\");if(s.dayOffset!==void 0&&s.dayOffset!==0&&isNaN(s.dayOffset))throw new Error(\"CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.\");return s}function p(s){return Object.prototype.toString.call(s)===\"[object Function]\"||typeof s==\"function\"||s instanceof Function}function _(s){return p(s)}function x(s){typeof Deno<\"u\"&&typeof Deno.unrefTimer<\"u\"?Deno.unrefTimer(s):s&&typeof s.unref<\"u\"&&s.unref()}var W=30*1e3,w=[],E=class{name;options;_states;fn;getTz(){return this.options.timezone||this.options.utcOffset}applyDayOffset(e){if(this.options.dayOffset!==void 0&&this.options.dayOffset!==0){let t=this.options.dayOffset*24*60*60*1e3;return new Date(e.getTime()+t)}return e}constructor(e,t,r){let n,i;if(p(t))i=t;else if(typeof t==\"object\")n=t;else if(t!==void 0)throw new Error(\"Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).\");if(p(r))i=r;else if(typeof r==\"object\")n=r;else if(r!==void 0)throw new Error(\"Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).\");if(this.name=n?.name,this.options=R(n),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:n?n.maxRuns:void 0,paused:n?n.paused:!1,pattern:new C(\"* * * * *\",void 0,{mode:\"auto\"})},e&&(e instanceof Date||typeof e==\"string\"&&e.indexOf(\":\")>0)?this._states.once=new m(e,this.getTz()):this._states.pattern=new C(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(w.find(o=>o.name===this.name))throw new Error(\"Cron: Tried to initialize new named job '\"+this.name+\"', but name already taken.\");w.push(this)}return i!==void 0&&_(i)&&(this.fn=i,this.schedule()),this}nextRun(e){let t=this._next(e);return t?this.applyDayOffset(t.getDate(!1)):null}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let r=t||this._states.currentRun||void 0;return this._enumerateRuns(e,r,\"next\")}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,\"previous\")}_enumerateRuns(e,t,r){let n=[],i=t?new m(t,this.getTz()):null,a=r===\"next\"?this._next:this._previous;for(;e--;){let o=a.call(this,i);if(!o)break;let h=o.getDate(!1);n.push(this.applyDayOffset(h)),i=o}return n}match(e){if(this._states.once){let r=new m(e,this.getTz());r.ms=0;let n=new m(this._states.once,this.getTz());return n.ms=0,r.getTime()===n.getTime()}let t=new m(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){let e=this.nextRun(this._states.currentRun),t=!this._states.paused,r=this.fn!==void 0,n=!this._states.kill;return t&&r&&n&&e!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=this._next(e);return t?e instanceof m||e instanceof Date?t.getTime()-e.getTime():t.getTime()-new m(e).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=w.indexOf(this);e>=0&&w.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){if(e&&this.fn)throw new Error(\"Cron: It is not allowed to schedule two functions using the same Croner instance.\");e&&(this.fn=e);let t=this.msToNext(),r=this.nextRun(this._states.currentRun);return t==null||isNaN(t)||r===null?this:(t>W&&(t=W),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(r),t),this._states.currentTimeout&&this.options.unref&&x(this._states.currentTimeout),this)}async _trigger(e){this._states.blocking=!0,this._states.currentRun=new m(void 0,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(t){if(p(this.options.catch))try{this.options.catch(t,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new m(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,r=!this._states.paused&&t.getTime()>=e.getTime(),n=this._states.blocking&&this.options.protect;r&&!n?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):r&&n&&p(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(e){let t=!!(e||this._states.currentRun),r=!1;!e&&this.options.startAt&&this.options.interval&&([e,t]=this._calculatePreviousRun(e,t),r=!e),e=new m(e,this.getTz()),this.options.startAt&&e&&e.getTime()<this.options.startAt.getTime()&&(e=this.options.startAt);let n=this._states.once||new m(e,this.getTz());return!r&&n!==this._states.once&&(n=n.increment(this._states.pattern,this.options,t)),this._states.once&&this._states.once.getTime()<=e.getTime()||n===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&n.getTime()>=this.options.stopAt.getTime()?null:n}_previous(e){let t=new m(e,this.getTz());this.options.stopAt&&t.getTime()>this.options.stopAt.getTime()&&(t=this.options.stopAt);let r=new m(t,this.getTz());return this._states.once?this._states.once.getTime()<t.getTime()?this._states.once:null:(r=r.decrement(this._states.pattern,this.options),r===null||this.options.startAt&&r.getTime()<this.options.startAt.getTime()?null:r)}_calculatePreviousRun(e,t){let r=new m(void 0,this.getTz()),n=e;if(this.options.startAt.getTime()<=r.getTime()){n=this.options.startAt;let i=n.getTime()+this.options.interval*1e3;for(;i<=r.getTime();)n=new m(n,this.getTz()).increment(this._states.pattern,this.options,!0),i=n.getTime()+this.options.interval*1e3;t=!0}return n===null&&(n=void 0),[n,t]}};export{E as Cron,m as CronDate,C as CronPattern,w as scheduledJobs};\n","/**\n * Cron helpers — wraps `croner` so the orchestrator + the `previewNextRuns`\n * cap method share one validation + next-run-computation surface.\n *\n * `croner` is the opinionated node cron library we standardize on\n * server-side: pure JS, native TypeScript types, supports the full\n * 5-field POSIX cron grammar plus seconds (6-field), DST-aware, and\n * exposes `nextRun()` / `nextRuns(N)` for peeking without scheduling.\n * The orchestrator uses the peeking API (it has its own polling\n * loop); future surfaces (e.g. event-driven retention sweeps) can\n * register an actual scheduled `Cron(pattern, fn)` and let croner\n * own the timer.\n */\nimport { Cron } from 'croner'\n\n/**\n * Validate a cron expression and return its next firing time strictly\n * after `after`, expressed as ms-epoch. Returns `null` when the\n * expression has no future runs (croner returns null e.g. for\n * fully-bounded patterns that have already elapsed). Throws when the\n * expression is syntactically invalid — callers are expected to\n * surface that to the operator.\n */\nexport function computeNextDue(cron: string, after: number): number | null {\n const job = new Cron(cron, { paused: true })\n const next = job.nextRun(new Date(after))\n return next ? next.getTime() : null\n}\n\n/**\n * Validate without computing — returns true when `cron` parses, false\n * otherwise. Used by the cap-router input zod schema's `.refine`\n * callback to reject malformed expressions at the boundary instead\n * of at scheduler-tick time.\n */\nexport function isValidCron(cron: string): boolean {\n try {\n new Cron(cron, { paused: true })\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Peek the next N firing times after `after` (default: now). Used by\n * the admin UI's CronEditor preview pane — operators see the next\n * 3–5 runs as they edit the expression so a wrong pattern is\n * obvious before save.\n */\nexport function previewNextRuns(cron: string, count: number, after?: number): readonly number[] {\n const job = new Cron(cron, { paused: true })\n const baseline = after !== undefined ? new Date(after) : new Date()\n const out: number[] = []\n let cursor: Date | null = baseline\n for (let i = 0; i < count; i++) {\n cursor = job.nextRun(cursor)\n if (!cursor) break\n out.push(cursor.getTime())\n }\n return out\n}\n","/**\n * `backup-orchestrator` builtin — singleton owner of the `backup` cap.\n *\n * Responsibilities:\n * - Schedule (cron-like timer at top of hour, daily/weekly cadence)\n * - Per-destination policy (enable/disable, retention count, label)\n * persisted in `backup_destination_policies` (this builtin owns\n * the table).\n * - Archive build (one tar.gz with embedded manifest, fanned out to\n * every selected `backups`-typed `StorageLocation` via the\n * consumer-facing `storage` cap's chunked upload protocol).\n * - Aggregate listing/restore/delete across destinations — operates\n * on the per-location `manifests.json` index file, not the\n * archives directly.\n *\n * Storage routing: destinations are\n * `api.storage.listLocations({ type: 'backups' })` — every operator-\n * visible `backups` location IS a destination. The orchestrator joins\n * that list with the `backup_destination_policies` table to surface\n * `enabled` / `retentionCount` / `label`. The actual archive bytes\n * travel through `api.storage.beginUpload` / `writeChunk` /\n * `finalizeUpload`, with the staging archive built into the `cache`\n * location.\n */\nimport { randomUUID } from 'node:crypto'\nimport * as fs from 'node:fs'\nimport * as fsp from 'node:fs/promises'\nimport {\n BaseAddon,\n EventCategory,\n backupCapability,\n} from '@camstack/types'\nimport type {\n ProviderRegistration,\n ISettingsBackend,\n StorageLocation,\n} from '@camstack/types'\nimport {\n SystemBackupService,\n type ArchiveManifest,\n} from '../system-backup/system-backup.service.js'\nimport {\n BackupDestinationPolicyService,\n type BackupDestinationPolicy,\n} from './destination-policy.js'\nimport {\n readLocationManifest,\n writeLocationManifest,\n buildArchiveEntry,\n applyRetention,\n LocationManifestLock,\n type ManifestStorageApi,\n type LocationBackupManifest,\n type ManifestArchiveEntry,\n} from './manifest-store.js'\nimport { downloadArchiveToCache } from './download-helpers.js'\nimport { computeNextDue, isValidCron, previewNextRuns } from './cron-helpers.js'\n\n/**\n * Hardcoded seed for newly-discovered `backups` locations. Operators\n * tune retention per-destination after creation via the destinations\n * table. Promoted from a configurable global to a constant when the\n * orchestrator's settings panel was retired (per-destination cron +\n * inline retention input on the destinations row replaces every knob\n * the panel used to expose).\n */\nconst DEFAULT_RETENTION_COUNT = 7\n\n/**\n * Default cron stamped on a freshly-discovered `backups` location.\n * Operators can edit it from the destination row; setting empty in\n * the editor flips the destination back to manual-only. Daily 03:00\n * server-local mirrors the previous global default.\n */\nconst DEFAULT_CRON = '0 3 * * *'\n\nconst SCHEDULE_TICK_MS = 60_000\n\n/**\n * Chunk size for the read-stream that feeds the chunked upload pipe.\n * 8 MiB matches Scrypted's prebuffer block size and stays well under\n * the WS frame limit (16 MiB on tRPC) with headroom.\n */\nconst UPLOAD_CHUNK_BYTES = 8 * 1024 * 1024\n\ninterface BackupEntryWire {\n readonly id: string\n readonly destinationId?: string\n readonly label?: string\n readonly createdAt: number\n readonly sizeBytes: number\n readonly locations?: string[]\n}\n\n/**\n * Wire shape returned by `backup.listDestinations`. Defined locally\n * (not imported from the cap module) because this addon is the\n * authoritative producer of the shape — keeping the literal here makes\n * the field set obvious at the producer site. Stays in lockstep with\n * `BackupDestinationInfoSchema` in `backup.cap.ts`.\n */\ninterface BackupDestinationInfoWire {\n readonly id: string\n readonly addonId: string\n readonly subId: string\n readonly displayName: string\n readonly kind: string\n readonly triggerSupported: boolean\n readonly restoreSupported: boolean\n /** Per-destination policy from `backup_destination_policies`. */\n readonly enabled: boolean\n readonly retentionCount: number\n readonly label?: string\n /** Newest-archive metadata from `manifests.json` (when one exists). */\n readonly lastSuccessAt?: number\n readonly lastSuccessSizeBytes?: number\n /** Per-destination cron expression (empty when manual-only). */\n readonly cron?: string\n /** ms-epoch of next computed firing for this destination's cron. */\n readonly nextRunAt?: number\n /** ms-epoch of last successful scheduled run (mirrors policy.lastRunAt). */\n readonly lastRunAt?: number\n}\n\ninterface BackupArchiveEntryWire {\n readonly id: string\n readonly filename: string\n readonly createdAt: number\n readonly sizeBytes: number\n readonly label?: string\n readonly locations: readonly string[]\n}\n\ninterface OrchestratorProvider {\n listDestinations(): Promise<readonly BackupDestinationInfoWire[]>\n list(): Promise<readonly BackupEntryWire[]>\n listLocations(): readonly unknown[]\n trigger(input?: { destinations?: string[]; locations?: string[]; label?: string }): Promise<readonly BackupEntryWire[]>\n getEntries(input: { destinationId: string; backupId: string }): Promise<unknown>\n restore(input: { destinationId: string; backupId: string; locations?: string[] }): Promise<void>\n delete(input: { destinationId: string; backupId: string }): Promise<void>\n listArchives(input: { destinationId: string }): Promise<readonly BackupArchiveEntryWire[]>\n upsertDestinationPolicy(input: {\n locationId: string\n enabled: boolean\n retentionCount: number\n label?: string\n cron?: string\n }): Promise<void>\n previewSchedule(input: {\n cron: string\n count?: number\n }): Promise<{ ok: boolean; error?: string; nextRuns: readonly number[] }>\n}\n\n/** Manifest id this addon registers under (must match `package.json`). */\nconst ORCHESTRATOR_ADDON_ID = 'backup-orchestrator'\n\nexport class BackupOrchestratorAddon extends BaseAddon<Record<string, never>> {\n private systemBackup: SystemBackupService | null = null\n private policies: BackupDestinationPolicyService | null = null\n private dataDir = ''\n private scheduleTimer: NodeJS.Timeout | null = null\n /**\n * Baseline used as the \"after\" anchor when a policy has a cron but\n * has never run yet (no `lastRunAt`). Set on orchestrator boot so a\n * pattern that fires every minute doesn't immediately replay every\n * historical \"missed\" run from epoch 0.\n */\n private scheduleBaselineAt = Date.now()\n private readonly manifestLock = new LocationManifestLock()\n\n constructor() {\n super({})\n }\n\n protected async onInitialize(): Promise<ProviderRegistration[]> {\n // Resolution order: env first, then fall back to the parent of\n // the `data` storage location.\n const envDataPath = process.env['CAMSTACK_DATA']\n const fallbackLocation = await this.ctx.api.storage.resolve\n .query({ location: 'data', relativePath: '' })\n .catch(() => null)\n this.dataDir = envDataPath\n ?? (fallbackLocation ? parentDir(fallbackLocation) : 'camstack-data')\n this.systemBackup = new SystemBackupService(this.dataDir, this.ctx.logger)\n\n // Wire the per-destination policy table. Same pattern as\n // SqliteLocationStore in storage-orchestrator: pull the live\n // settings backend out of the registry; skip persistence (and run\n // in-memory only) if it's not available.\n this.policies = this.resolvePolicyService()\n if (this.policies) {\n try {\n await this.policies.initialize()\n } catch (err) {\n this.ctx.logger.error('backup-orchestrator: policy table init failed', {\n meta: { error: err instanceof Error ? err.message : String(err) },\n })\n this.policies = null\n }\n }\n\n const provider: OrchestratorProvider = {\n listDestinations: () => this.listDestinations(),\n list: () => this.aggregatedList(),\n listLocations: () => this.systemBackup!.statLocations(),\n trigger: (input) => this.triggerBackup(input),\n getEntries: (input) => this.getEntries(input),\n restore: (input) => this.scheduleRestore(input),\n delete: (input) => this.deleteArchive(input),\n listArchives: (input) => this.listArchives(input),\n upsertDestinationPolicy: (input) => this.upsertDestinationPolicy(input),\n previewSchedule: (input) => this.previewSchedule(input),\n }\n\n this.startScheduleTimer()\n\n this.ctx.logger.info('Backup orchestrator initialized', {\n meta: {\n dataDir: this.dataDir,\n policies: this.policies !== null,\n },\n })\n return [{ capability: backupCapability, provider: provider as never }]\n }\n\n protected async onShutdown(): Promise<void> {\n this.stopScheduleTimer()\n this.systemBackup = null\n this.policies = null\n }\n\n // ─── Public surface ─────────────────────────────────────────────────\n\n /**\n * Aggregate destinations from `api.storage.listLocations({ type: 'backups' })`\n * joined with the per-destination policy table. New locations get an\n * `ensureDefault` policy seeded transparently (enabled=true,\n * retentionCount=defaultRetentionCount). Pre-existing operator-edited\n * policies are preserved by the `ensureDefault` idempotency.\n */\n private async listDestinations(): Promise<readonly BackupDestinationInfoWire[]> {\n const locations = await this.fetchBackupLocations()\n const policies = await this.loadPoliciesIndexed(locations.map(l => l.id))\n // Hydrate lastSuccess from each location's manifest. Failures are\n // logged inside readLocationManifest's caller — `latestArchiveOf`\n // tolerates missing/corrupt manifests by returning undefined so\n // the table still renders the destination row.\n const lastSuccess = await Promise.all(\n locations.map(async (loc): Promise<readonly [string, ManifestArchiveEntry | undefined]> => {\n try {\n const manifest = await readLocationManifest(this.storageApi(), loc.id)\n return [loc.id, latestArchiveOf(manifest)]\n } catch {\n return [loc.id, undefined]\n }\n }),\n )\n const lastSuccessByLoc = new Map(lastSuccess)\n return locations.map(loc => this.toDestinationWire(loc, policies.get(loc.id), lastSuccessByLoc.get(loc.id)))\n }\n\n private async fetchBackupLocations(): Promise<readonly StorageLocation[]> {\n try {\n const out = await this.ctx.api.storage.listLocations.query({ type: 'backups' })\n return out\n } catch (err) {\n this.ctx.logger.error('backup-orchestrator: listLocations failed', {\n meta: { error: err instanceof Error ? err.message : String(err) },\n })\n return []\n }\n }\n\n /**\n * Load every persisted policy and key it by `locationId`, while\n * lazily seeding a default for any `locationId` we haven't seen\n * before. Idempotent — `ensureDefault` no-ops on already-persisted\n * rows. Falls back to the in-memory default policy when the policy\n * service isn't wired (no settings-store backend available).\n */\n private async loadPoliciesIndexed(\n locationIds: readonly string[],\n ): Promise<ReadonlyMap<string, BackupDestinationPolicy>> {\n const out = new Map<string, BackupDestinationPolicy>()\n if (!this.policies) {\n // No persistence available — fabricate enabled defaults so the UI\n // still surfaces every backups location as a destination.\n for (const id of locationIds) {\n out.set(id, this.fallbackPolicy(id))\n }\n return out\n }\n const persisted = await this.policies.list().catch((err): readonly BackupDestinationPolicy[] => {\n this.ctx.logger.warn('backup-orchestrator: policy list failed — using defaults', {\n meta: { error: err instanceof Error ? err.message : String(err) },\n })\n return []\n })\n for (const p of persisted) {\n out.set(p.locationId, p)\n }\n // Seed defaults for previously-unseen locations.\n for (const id of locationIds) {\n if (out.has(id)) continue\n try {\n const fresh = await this.policies.ensureDefault(id, {\n retentionCount: DEFAULT_RETENTION_COUNT,\n cron: DEFAULT_CRON,\n })\n out.set(id, fresh)\n } catch (err) {\n this.ctx.logger.warn('backup-orchestrator: ensureDefault failed', {\n meta: { locationId: id, error: err instanceof Error ? err.message : String(err) },\n })\n out.set(id, this.fallbackPolicy(id))\n }\n }\n return out\n }\n\n private fallbackPolicy(locationId: string): BackupDestinationPolicy {\n return {\n locationId,\n enabled: true,\n retentionCount: DEFAULT_RETENTION_COUNT,\n cron: DEFAULT_CRON,\n }\n }\n\n private toDestinationWire(\n loc: StorageLocation,\n policy: BackupDestinationPolicy | undefined,\n latest: ManifestArchiveEntry | undefined,\n ): BackupDestinationInfoWire {\n const effective = policy ?? this.fallbackPolicy(loc.id)\n const subId = extractSlug(loc.id)\n const displayName = effective.label && effective.label.length > 0 ? effective.label : loc.displayName\n return {\n id: loc.id,\n // The orchestrator builtin is now the addon-of-record for every\n // `backups` location — there's no per-destination addon owner.\n // The Settings button on a destination card opens the\n // orchestrator's panel.\n addonId: ORCHESTRATOR_ADDON_ID,\n subId,\n displayName,\n kind: kindFromProviderId(loc.providerId),\n // policy.enabled gates participation in scheduled / default-target\n // fan-out — `resolveTargets` filters on `triggerSupported !== false`.\n triggerSupported: effective.enabled,\n restoreSupported: true,\n enabled: effective.enabled,\n retentionCount: effective.retentionCount,\n ...(effective.label !== undefined ? { label: effective.label } : {}),\n ...(latest !== undefined ? { lastSuccessAt: latest.createdAt } : {}),\n ...(latest !== undefined ? { lastSuccessSizeBytes: latest.sizeBytes } : {}),\n ...(effective.cron !== undefined ? { cron: effective.cron } : {}),\n ...(effective.lastRunAt !== undefined ? { lastRunAt: effective.lastRunAt } : {}),\n ...(effective.cron !== undefined && effective.cron.trim().length > 0\n ? { nextRunAt: this.safeNextDue(effective.cron, effective.lastRunAt) }\n : {}),\n }\n }\n\n /**\n * Compute next-due ms-epoch for a cron, or `undefined` on parse error.\n * Catches so a single malformed cron doesn't blank out the whole\n * destinations list at the cap surface.\n */\n private safeNextDue(cron: string, after: number | undefined): number | undefined {\n try {\n const next = computeNextDue(cron, after ?? this.scheduleBaselineAt)\n return next ?? undefined\n } catch {\n return undefined\n }\n }\n\n /**\n * Aggregate listing — read every `backups` location's `manifests.json`\n * and return one wire entry per archive, tagged with `destinationId`.\n * Failures on individual locations are logged and skipped so a single\n * unreachable destination doesn't blank out the whole UI.\n */\n private async aggregatedList(): Promise<readonly BackupEntryWire[]> {\n const locations = await this.fetchBackupLocations()\n const out: BackupEntryWire[] = []\n for (const loc of locations) {\n let manifest: LocationBackupManifest\n try {\n manifest = await readLocationManifest(this.storageApi(), loc.id)\n } catch (err) {\n this.ctx.logger.warn('backup list: manifest read failed', {\n meta: { locationId: loc.id, error: err instanceof Error ? err.message : String(err) },\n })\n continue\n }\n for (const a of manifest.archives) {\n const entry: BackupEntryWire = {\n id: a.id,\n destinationId: loc.id,\n createdAt: a.createdAt,\n sizeBytes: a.sizeBytes,\n ...(a.label !== undefined ? { label: a.label } : {}),\n locations: [...a.manifest.locations],\n }\n out.push(entry)\n }\n }\n return out\n }\n\n /**\n * Build a single archive in the `cache` storage location, then push\n * it to every selected destination via the storage cap's chunked\n * upload protocol. Per-destination errors are logged and counted\n * via allSettled semantics — one bad sink doesn't kill the run. The\n * cache file is deleted in `finally` so a crash mid-fanout doesn't\n * leak.\n */\n private async triggerBackup(input?: {\n destinations?: string[]\n locations?: string[]\n label?: string\n }): Promise<readonly BackupEntryWire[]> {\n if (!this.systemBackup) throw new Error('orchestrator not initialized')\n const targets = await this.resolveTargets(input?.destinations)\n if (targets.length === 0) {\n this.ctx.logger.warn('backup trigger: no destinations selected')\n return []\n }\n // Load per-destination retention up-front so each upload doesn't\n // re-walk the policy table. The policy index is keyed by\n // locationId; missing entries fall back to defaultRetentionCount.\n const policies = await this.loadPoliciesIndexed(targets.map(t => t.id))\n const archiveId = randomUUID()\n const archiveFilename = `${archiveId}.tar.gz`\n const cacheRelativePath = `${archiveId}.tar.gz`\n const cachePath = await this.ctx.api.storage.resolve.query({\n location: 'cache',\n relativePath: cacheRelativePath,\n })\n const result = await this.systemBackup.createArchive({\n archivePath: cachePath,\n ...(input?.locations ? { locations: input.locations } : {}),\n })\n try {\n const entries: BackupEntryWire[] = []\n // Fan out sequentially — destinations are typically few (≤ 5)\n // and the read-stream feeds each destination's chunked upload\n // back-to-back. Parallelizing risks blowing the WS frame budget.\n for (const dest of targets) {\n try {\n const policy = policies.get(dest.id) ?? this.fallbackPolicy(dest.id)\n const stored = await this.uploadAndIndex({\n locationId: dest.id,\n archiveId,\n archiveFilename,\n cachePath,\n sizeBytes: result.sizeBytes,\n archiveManifest: result.manifest,\n retentionCount: policy.retentionCount,\n ...(input?.label !== undefined ? { label: input.label } : {}),\n })\n entries.push(stored)\n this.ctx.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'addon', id: 'backup-orchestrator' },\n category: EventCategory.BackupCompleted,\n data: {\n destinationId: dest.id,\n backupId: stored.id,\n sizeMB: Math.round((stored.sizeBytes ?? 0) / (1024 * 1024)),\n },\n })\n } catch (err) {\n this.ctx.logger.error('backup trigger: destination failed', {\n meta: {\n destinationId: dest.id,\n error: err instanceof Error ? err.message : String(err),\n },\n })\n }\n }\n return entries\n } finally {\n try { await fsp.rm(cachePath, { force: true }) } catch { /* best-effort */ }\n }\n }\n\n /**\n * Push the staged archive to a single destination via chunked\n * upload, then update the per-location manifest. Applies the\n * destination's retention policy as part of the same lock-protected\n * manifest mutation so the deletes never race with a concurrent\n * append.\n *\n * Throws on upload / manifest failure — caller logs and continues to\n * the next destination so a single bad sink doesn't fail the run.\n */\n private async uploadAndIndex(input: {\n locationId: string\n archiveId: string\n archiveFilename: string\n cachePath: string\n sizeBytes: number\n archiveManifest: ArchiveManifest\n retentionCount: number\n label?: string\n }): Promise<BackupEntryWire> {\n const { uploadId } = await this.ctx.api.storage.beginUpload.mutate({\n location: input.locationId,\n relativePath: input.archiveFilename,\n sizeBytes: input.sizeBytes,\n })\n try {\n let offset = 0\n const stream = fs.createReadStream(input.cachePath, { highWaterMark: UPLOAD_CHUNK_BYTES })\n for await (const rawChunk of stream) {\n // `createReadStream` (no `encoding` option) yields `Buffer`,\n // which is a `Uint8Array` subclass. We copy into a tight\n // `Uint8Array<ArrayBuffer>` because `Buffer.buffer` may be\n // backed by `SharedArrayBuffer` in some Node configurations\n // and the cap input schema requires a non-shared backing\n // buffer.\n const chunk = toBufferChunk(rawChunk)\n const data = new Uint8Array(chunk.byteLength)\n data.set(chunk)\n await this.ctx.api.storage.writeChunk.mutate({ uploadId, offset, data })\n offset += data.byteLength\n }\n await this.ctx.api.storage.finalizeUpload.mutate({ uploadId })\n } catch (err) {\n // Best-effort abort — surface the original error to the caller.\n try {\n await this.ctx.api.storage.abortUpload.mutate({ uploadId })\n } catch { /* ignore */ }\n throw err\n }\n\n const createdAt = Date.now()\n const entry: ManifestArchiveEntry = buildArchiveEntry({\n id: input.archiveId,\n filename: input.archiveFilename,\n createdAt,\n sizeBytes: input.sizeBytes,\n ...(input.label !== undefined ? { label: input.label } : {}),\n manifest: input.archiveManifest,\n })\n\n await this.manifestLock.run(input.locationId, async () => {\n const manifest = await readLocationManifest(this.storageApi(), input.locationId)\n const appended = [...manifest.archives, entry]\n const { keep, drop } = applyRetention(appended, input.retentionCount)\n // Best-effort delete of overflow files before rewriting the\n // manifest. We tolerate per-file failures (logged) so a missing\n // archive on a remote sink doesn't block the manifest update —\n // the manifest is the source of truth for \"what's kept\".\n for (const stale of drop) {\n try {\n await this.ctx.api.storage.delete.mutate({\n location: input.locationId,\n relativePath: stale.filename,\n })\n } catch (err) {\n this.ctx.logger.warn('backup retention: storage delete failed (continuing)', {\n meta: {\n destinationId: input.locationId,\n backupId: stale.id,\n filename: stale.filename,\n error: err instanceof Error ? err.message : String(err),\n },\n })\n }\n }\n const next: LocationBackupManifest = { version: 1, archives: keep }\n await writeLocationManifest(this.storageApi(), input.locationId, next)\n })\n\n return {\n id: input.archiveId,\n destinationId: input.locationId,\n createdAt,\n sizeBytes: input.sizeBytes,\n ...(input.label !== undefined ? { label: input.label } : {}),\n locations: [...input.archiveManifest.locations],\n }\n }\n\n /**\n * List archives at a single destination — newest-first. Reads only\n * the per-location `manifests.json` (no per-archive tarball read);\n * the orchestrator already snapshots each archive's locations into\n * the manifest at upload time.\n */\n private async listArchives(input: { destinationId: string }): Promise<readonly BackupArchiveEntryWire[]> {\n let manifest: LocationBackupManifest\n try {\n manifest = await readLocationManifest(this.storageApi(), input.destinationId)\n } catch (err) {\n this.ctx.logger.warn('backup listArchives: manifest read failed', {\n meta: {\n destinationId: input.destinationId,\n error: err instanceof Error ? err.message : String(err),\n },\n })\n return []\n }\n const sorted = [...manifest.archives].sort((a, b) => b.createdAt - a.createdAt)\n return sorted.map((a): BackupArchiveEntryWire => ({\n id: a.id,\n filename: a.filename,\n createdAt: a.createdAt,\n sizeBytes: a.sizeBytes,\n ...(a.label !== undefined ? { label: a.label } : {}),\n locations: [...a.manifest.locations],\n }))\n }\n\n /**\n * Upsert the per-destination policy row. Used by the admin-UI\n * destinations table — toggle enabled / change retention / set\n * label / set cron schedule. No-ops with a logged warning if the\n * settings backend lacks structured-table support (no persistence\n * available).\n *\n * Validates `cron` server-side: a malformed expression rejects the\n * upsert with an actionable error so the operator sees the problem\n * at save time instead of at scheduler-tick time. Empty / undefined\n * `cron` clears any prior schedule (manual-only).\n */\n private async upsertDestinationPolicy(input: {\n locationId: string\n enabled: boolean\n retentionCount: number\n label?: string\n cron?: string\n }): Promise<void> {\n if (!this.policies) {\n this.ctx.logger.warn('backup upsertDestinationPolicy: no settings-store backend — change will not persist', {\n meta: { locationId: input.locationId },\n })\n return\n }\n const cron = typeof input.cron === 'string' ? input.cron.trim() : ''\n if (cron.length > 0 && !isValidCron(cron)) {\n throw new Error(`Invalid cron expression: \"${cron}\"`)\n }\n // Preserve `lastRunAt` across edits — operators changing the label\n // shouldn't reset the schedule baseline.\n const existing = await this.policies.get(input.locationId).catch(() => null)\n await this.policies.upsert({\n locationId: input.locationId,\n enabled: input.enabled,\n retentionCount: input.retentionCount,\n ...(input.label !== undefined ? { label: input.label } : {}),\n ...(cron.length > 0 ? { cron } : {}),\n ...(existing?.lastRunAt !== undefined ? { lastRunAt: existing.lastRunAt } : {}),\n })\n }\n\n /**\n * Validate a cron expression and peek the next N firing times. The\n * admin UI's CronEditor calls this on every keystroke (debounced)\n * to render a live \"next-run\" preview — invalid expressions surface\n * the parse error inline instead of waiting for save.\n */\n private async previewSchedule(input: {\n cron: string\n count?: number\n }): Promise<{ ok: boolean; error?: string; nextRuns: readonly number[] }> {\n const trimmed = input.cron.trim()\n if (trimmed.length === 0) {\n return { ok: false, error: 'Cron expression is empty', nextRuns: [] }\n }\n try {\n const count = input.count ?? 5\n const nextRuns = previewNextRuns(trimmed, count)\n return { ok: true, nextRuns }\n } catch (err) {\n return {\n ok: false,\n error: err instanceof Error ? err.message : 'Invalid cron expression',\n nextRuns: [],\n }\n }\n }\n\n private async getEntries(input: { destinationId: string; backupId: string }): Promise<unknown> {\n try {\n const manifest = await readLocationManifest(this.storageApi(), input.destinationId)\n const found = manifest.archives.find(a => a.id === input.backupId)\n return found?.manifest ?? null\n } catch (err) {\n this.ctx.logger.warn('backup getEntries: manifest read failed', {\n meta: {\n destinationId: input.destinationId,\n backupId: input.backupId,\n error: err instanceof Error ? err.message : String(err),\n },\n })\n return null\n }\n }\n\n private async deleteArchive(input: { destinationId: string; backupId: string }): Promise<void> {\n await this.manifestLock.run(input.destinationId, async () => {\n const manifest = await readLocationManifest(this.storageApi(), input.destinationId)\n const target = manifest.archives.find(a => a.id === input.backupId)\n if (!target) {\n throw new Error(`backup delete: backup \"${input.backupId}\" not found at \"${input.destinationId}\"`)\n }\n try {\n await this.ctx.api.storage.delete.mutate({\n location: input.destinationId,\n relativePath: target.filename,\n })\n } catch (err) {\n this.ctx.logger.warn('backup delete: storage delete failed (continuing manifest cleanup)', {\n meta: {\n destinationId: input.destinationId,\n filename: target.filename,\n error: err instanceof Error ? err.message : String(err),\n },\n })\n }\n const next: LocationBackupManifest = {\n version: 1,\n archives: manifest.archives.filter(a => a.id !== input.backupId),\n }\n await writeLocationManifest(this.storageApi(), input.destinationId, next)\n })\n }\n\n /**\n * Schedule a restore for the next boot. Pulls the archive bytes\n * down from the destination's storage location via the chunked-\n * download protocol into the `cache` location, then writes the\n * usual restore marker against the cached path so the boot-time\n * apply hook (in server-backend launcher) extracts before any\n * addon starts.\n *\n * `locations` (optional) is propagated into the marker as a\n * whitelist — only those top-level locations get extracted.\n */\n private async scheduleRestore(input: {\n destinationId: string\n backupId: string\n locations?: string[]\n }): Promise<void> {\n if (!this.systemBackup) throw new Error('orchestrator not initialized')\n const manifest = await readLocationManifest(this.storageApi(), input.destinationId)\n const entry = manifest.archives.find(a => a.id === input.backupId)\n if (!entry) {\n throw new Error(\n `backup restore: backup \"${input.backupId}\" not found at location \"${input.destinationId}\"`,\n )\n }\n\n const cachePath = await this.ctx.api.storage.resolve.query({\n location: 'cache',\n relativePath: `restore-${input.backupId}.tar.gz`,\n })\n await downloadArchiveToCache({\n api: this.ctx.api.storage,\n locationId: input.destinationId,\n filename: entry.filename,\n cachePath,\n chunkBytes: UPLOAD_CHUNK_BYTES,\n logger: this.ctx.logger,\n })\n\n this.systemBackup.scheduleRestoreMarker({\n archivePath: cachePath,\n source: input.backupId,\n ...(input.locations ? { locations: input.locations } : {}),\n })\n this.ctx.eventBus.emit({\n id: randomUUID(),\n timestamp: new Date(),\n source: { type: 'addon', id: 'backup-orchestrator' },\n category: EventCategory.BackupRestored,\n data: { backupId: input.backupId, destinationId: input.destinationId },\n })\n }\n\n\n // ─── Destination resolution ─────────────────────────────────────────\n\n /**\n * Resolve a target destination set: caller-provided list wins;\n * otherwise fall back to every destination flagged as enabled in\n * its policy row (`triggerSupported !== false` after the policy\n * join). The old \"global enabledDestinations override\" was retired\n * along with the orchestrator settings panel — per-destination\n * `enabled` toggles in the destinations table are now the only\n * routing knob.\n */\n private async resolveTargets(requested?: string[]): Promise<readonly { id: string }[]> {\n const all = await this.listDestinations()\n if (requested && requested.length > 0) {\n return all.filter((d) => requested.includes(d.id))\n }\n return all.filter((d) => d.triggerSupported !== false)\n }\n\n // ─── Schedule timer ─────────────────────────────────────────────────\n\n private startScheduleTimer(): void {\n if (this.scheduleTimer) return\n this.scheduleTimer = setInterval(() => {\n void this.onScheduleTick()\n }, SCHEDULE_TICK_MS)\n }\n\n private stopScheduleTimer(): void {\n if (!this.scheduleTimer) return\n clearInterval(this.scheduleTimer)\n this.scheduleTimer = null\n }\n\n /**\n * Per-destination cron-based scheduling. Walks every enabled\n * destination policy that carries a `cron` expression, computes the\n * next due time after `lastRunAt` (or the orchestrator's first-tick\n * baseline if never run), and fires a backup targeting that single\n * destination when due. Each destination keeps its own cadence —\n * an offsite SFTP can run weekly while local stays nightly without\n * any global setting.\n *\n * Errors per destination are isolated; one misconfigured cron\n * doesn't block the others. The policy's `lastRunAt` is updated\n * BEFORE the trigger to dedupe (the tick runs every\n * SCHEDULE_TICK_MS — without the up-front update a long-running\n * upload could overlap with the next tick's same-due check).\n */\n private async onScheduleTick(): Promise<void> {\n if (!this.policies) return\n const policies = await this.policies.list()\n const now = Date.now()\n for (const p of policies) {\n if (!p.enabled || !p.cron || p.cron.trim().length === 0) continue\n let due: number | null\n try {\n due = computeNextDue(p.cron, p.lastRunAt ?? this.scheduleBaselineAt)\n } catch (err) {\n this.ctx.logger.warn('Invalid cron — skipping destination', {\n meta: { locationId: p.locationId, cron: p.cron, error: err instanceof Error ? err.message : String(err) },\n })\n continue\n }\n if (due === null || due > now) continue\n // Stamp before firing — dedupes if the upload outlives the tick.\n const stamped: BackupDestinationPolicy = { ...p, lastRunAt: now }\n try {\n await this.policies.upsert(stamped)\n } catch (err) {\n this.ctx.logger.warn('Failed to persist scheduled-run timestamp', {\n meta: { locationId: p.locationId, error: err instanceof Error ? err.message : String(err) },\n })\n }\n try {\n this.ctx.logger.info('Scheduled backup firing for destination', {\n meta: { locationId: p.locationId, cron: p.cron, dueAt: due },\n })\n await this.triggerBackup({\n destinations: [p.locationId],\n label: `auto-${p.cron.replace(/\\s+/g, '_')}`,\n })\n } catch (err) {\n this.ctx.logger.error('Scheduled backup failed', {\n meta: { locationId: p.locationId, error: err instanceof Error ? err.message : String(err) },\n })\n }\n }\n }\n\n // ─── Persistence wiring ──────────────────────────────────────────────\n\n private resolvePolicyService(): BackupDestinationPolicyService | null {\n const reg = this.ctx.kernel.capabilityRegistry\n if (!reg) return null\n const backend = reg.getSingleton<ISettingsBackend>('settings-store')\n if (!backend) {\n this.ctx.logger.warn(\n 'backup-orchestrator: no settings-store provider — destination policies will not persist',\n )\n return null\n }\n if (!backend.ensureTable || !backend.tableInsert) {\n this.ctx.logger.warn(\n 'backup-orchestrator: settings backend lacks structured-table support — destination policies will not persist',\n )\n return null\n }\n return new BackupDestinationPolicyService(backend)\n }\n\n /**\n * Narrow `ctx.api.storage` to the subset the manifest helpers need.\n * Lets the helpers be unit-tested with a Map-backed fake without\n * pulling in the full `AddonApi` shape.\n */\n private storageApi(): ManifestStorageApi {\n return this.ctx.api.storage\n }\n\n // The orchestrator has no operator-tunable global settings: every\n // knob (enabled, retention, cron) lives per-destination on each\n // policy row. The settings panel has been retired.\n}\n\n// ── helpers ──────────────────────────────────────────────────────────────\n\n/**\n * Map a `storage-provider` providerId to an operator-friendly `kind`\n * the admin UI uses for destination cards. Falls back to the raw\n * provider id so unknown providers still surface (operator sees\n * `webdav-storage` instead of a blank slot).\n */\nfunction kindFromProviderId(providerId: string): string {\n switch (providerId) {\n case 'filesystem-storage': return 'local'\n case 's3-storage': return 's3'\n case 'sftp-storage': return 'sftp'\n case 'webdav-storage': return 'webdav'\n default: return providerId\n }\n}\n\n/**\n * Extract the slug part of a `<type>:<slug>` storage-location id.\n * Defensive: if the id doesn't contain a colon (shouldn't happen given\n * the regex on `StorageLocationSchema.id`) we return the whole string.\n */\nfunction extractSlug(id: string): string {\n const colon = id.indexOf(':')\n return colon < 0 ? id : id.slice(colon + 1)\n}\n\n/**\n * Narrow a `for await` chunk from `fs.createReadStream` to a\n * `Buffer`. The stream yields `string | Buffer` per its public type\n * even though the no-encoding overload always emits `Buffer`. The\n * runtime check + clear error keeps eslint's no-unsafe-* rules happy\n * without resorting to `as Buffer`.\n */\nfunction toBufferChunk(value: unknown): Uint8Array {\n if (Buffer.isBuffer(value)) return value\n if (value instanceof Uint8Array) return value\n throw new Error('backup upload: unexpected non-binary chunk from read stream')\n}\n\n/**\n * Return the most-recent archive in a location manifest, or undefined\n * when the location has no archives yet. Pure transform — no I/O.\n */\nfunction latestArchiveOf(manifest: LocationBackupManifest): ManifestArchiveEntry | undefined {\n if (manifest.archives.length === 0) return undefined\n let newest = manifest.archives[0]!\n for (const a of manifest.archives) {\n if (a.createdAt > newest.createdAt) newest = a\n }\n return newest\n}\n\n/**\n * Tiny `path.dirname`-equivalent that only depends on `/` and `\\`.\n * Avoids a `node:path` import in this module purely so the\n * destination-policy.ts and manifest-store.ts neighbours stay node-\n * builtin-free at the import surface.\n */\nfunction parentDir(p: string): string {\n const sep = p.includes('/') ? '/' : '\\\\'\n const i = p.lastIndexOf(sep)\n return i <= 0 ? '' : p.slice(0, i)\n}\n\nexport default BackupOrchestratorAddon\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,46],"mappings":"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"}
|