spindb 0.37.2 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/bin.js +9 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/attach.js +102 -0
- package/dist/cli/commands/attach.js.map +1 -0
- package/dist/cli/commands/backup.js +197 -0
- package/dist/cli/commands/backup.js.map +1 -0
- package/dist/cli/commands/backups.js +190 -0
- package/dist/cli/commands/backups.js.map +1 -0
- package/dist/cli/commands/clone.js +119 -0
- package/dist/cli/commands/clone.js.map +1 -0
- package/dist/cli/commands/config.js +276 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/connect.js +559 -0
- package/dist/cli/commands/connect.js.map +1 -0
- package/dist/cli/commands/create.js +952 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/databases.js +485 -0
- package/dist/cli/commands/databases.js.map +1 -0
- package/dist/cli/commands/delete.js +106 -0
- package/dist/cli/commands/delete.js.map +1 -0
- package/dist/cli/commands/deps.js +238 -0
- package/dist/cli/commands/deps.js.map +1 -0
- package/dist/cli/commands/detach.js +81 -0
- package/dist/cli/commands/detach.js.map +1 -0
- package/dist/cli/commands/doctor.js +567 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/duckdb.js +207 -0
- package/dist/cli/commands/duckdb.js.map +1 -0
- package/dist/cli/commands/edit.js +524 -0
- package/dist/cli/commands/edit.js.map +1 -0
- package/dist/cli/commands/engines.js +1414 -0
- package/dist/cli/commands/engines.js.map +1 -0
- package/dist/cli/commands/export.js +383 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/info.js +270 -0
- package/dist/cli/commands/info.js.map +1 -0
- package/dist/cli/commands/list.js +215 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/logs.js +81 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/menu/backup-handlers.js +1202 -0
- package/dist/cli/commands/menu/backup-handlers.js.map +1 -0
- package/dist/cli/commands/menu/container-handlers.js +1788 -0
- package/dist/cli/commands/menu/container-handlers.js.map +1 -0
- package/dist/cli/commands/menu/engine-handlers.js +235 -0
- package/dist/cli/commands/menu/engine-handlers.js.map +1 -0
- package/dist/cli/commands/menu/index.js +266 -0
- package/dist/cli/commands/menu/index.js.map +1 -0
- package/dist/cli/commands/menu/settings-handlers.js +320 -0
- package/dist/cli/commands/menu/settings-handlers.js.map +1 -0
- package/dist/cli/commands/menu/shared.js +13 -0
- package/dist/cli/commands/menu/shared.js.map +1 -0
- package/dist/cli/commands/menu/shell-handlers.js +1573 -0
- package/dist/cli/commands/menu/shell-handlers.js.map +1 -0
- package/dist/cli/commands/menu/sql-handlers.js +185 -0
- package/dist/cli/commands/menu/sql-handlers.js.map +1 -0
- package/dist/cli/commands/menu/update-handlers.js +322 -0
- package/dist/cli/commands/menu/update-handlers.js.map +1 -0
- package/dist/cli/commands/menu/validators.js +9 -0
- package/dist/cli/commands/menu/validators.js.map +1 -0
- package/dist/cli/commands/ports.js +166 -0
- package/dist/cli/commands/ports.js.map +1 -0
- package/dist/cli/commands/pull.js +166 -0
- package/dist/cli/commands/pull.js.map +1 -0
- package/dist/cli/commands/query.js +180 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/restore.js +428 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/run.js +115 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/self-update.js +99 -0
- package/dist/cli/commands/self-update.js.map +1 -0
- package/dist/cli/commands/sqlite.js +207 -0
- package/dist/cli/commands/sqlite.js.map +1 -0
- package/dist/cli/commands/start.js +196 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/stop.js +182 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/url.js +88 -0
- package/dist/cli/commands/url.js.map +1 -0
- package/dist/cli/commands/users.js +189 -0
- package/dist/cli/commands/users.js.map +1 -0
- package/dist/cli/commands/version.js +52 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/commands/which.js +258 -0
- package/dist/cli/commands/which.js.map +1 -0
- package/dist/cli/constants.js +212 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/helpers.js +1120 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/index.js +146 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/prompts.js +1002 -0
- package/dist/cli/ui/prompts.js.map +1 -0
- package/dist/cli/ui/spinner.js +74 -0
- package/dist/cli/ui/spinner.js.map +1 -0
- package/dist/cli/ui/theme.js +99 -0
- package/dist/cli/ui/theme.js.map +1 -0
- package/dist/cli/utils/file-follower.js +79 -0
- package/dist/cli/utils/file-follower.js.map +1 -0
- package/dist/config/backup-formats.js +363 -0
- package/dist/config/backup-formats.js.map +1 -0
- package/dist/config/defaults.js +25 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/engine-defaults.js +303 -0
- package/dist/config/engine-defaults.js.map +1 -0
- package/dist/config/engines-registry.js +103 -0
- package/dist/config/engines-registry.js.map +1 -0
- package/dist/config/os-dependencies.js +767 -0
- package/dist/config/os-dependencies.js.map +1 -0
- package/dist/config/paths.js +156 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/version.js +3 -0
- package/dist/config/version.js.map +1 -0
- package/dist/core/backup-restore.js +219 -0
- package/dist/core/backup-restore.js.map +1 -0
- package/dist/core/base-binary-manager.js +403 -0
- package/dist/core/base-binary-manager.js.map +1 -0
- package/dist/core/base-document-binary-manager.js +364 -0
- package/dist/core/base-document-binary-manager.js.map +1 -0
- package/dist/core/base-embedded-binary-manager.js +364 -0
- package/dist/core/base-embedded-binary-manager.js.map +1 -0
- package/dist/core/base-server-binary-manager.js +368 -0
- package/dist/core/base-server-binary-manager.js.map +1 -0
- package/dist/core/config-manager.js +495 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/container-manager.js +609 -0
- package/dist/core/container-manager.js.map +1 -0
- package/dist/core/credential-generator.js +67 -0
- package/dist/core/credential-generator.js.map +1 -0
- package/dist/core/credential-manager.js +211 -0
- package/dist/core/credential-manager.js.map +1 -0
- package/dist/core/dblab-utils.js +105 -0
- package/dist/core/dblab-utils.js.map +1 -0
- package/dist/core/dependency-manager.js +359 -0
- package/dist/core/dependency-manager.js.map +1 -0
- package/dist/core/docker-exporter.js +1077 -0
- package/dist/core/docker-exporter.js.map +1 -0
- package/dist/core/error-handler.js +295 -0
- package/dist/core/error-handler.js.map +1 -0
- package/dist/core/fs-error-utils.js +74 -0
- package/dist/core/fs-error-utils.js.map +1 -0
- package/dist/core/homebrew-version-manager.js +280 -0
- package/dist/core/homebrew-version-manager.js.map +1 -0
- package/dist/core/hostdb-client.js +252 -0
- package/dist/core/hostdb-client.js.map +1 -0
- package/dist/core/hostdb-metadata.js +243 -0
- package/dist/core/hostdb-metadata.js.map +1 -0
- package/dist/core/hostdb-releases-factory.js +161 -0
- package/dist/core/hostdb-releases-factory.js.map +1 -0
- package/dist/core/library-env.js +88 -0
- package/dist/core/library-env.js.map +1 -0
- package/dist/core/pgweb-utils.js +53 -0
- package/dist/core/pgweb-utils.js.map +1 -0
- package/dist/core/platform-service.js +632 -0
- package/dist/core/platform-service.js.map +1 -0
- package/dist/core/port-manager.js +136 -0
- package/dist/core/port-manager.js.map +1 -0
- package/dist/core/process-manager.js +445 -0
- package/dist/core/process-manager.js.map +1 -0
- package/dist/core/pull-manager.js +418 -0
- package/dist/core/pull-manager.js.map +1 -0
- package/dist/core/query-parser.js +449 -0
- package/dist/core/query-parser.js.map +1 -0
- package/dist/core/spawn-utils.js +90 -0
- package/dist/core/spawn-utils.js.map +1 -0
- package/dist/core/start-with-retry.js +90 -0
- package/dist/core/start-with-retry.js.map +1 -0
- package/dist/core/test-cleanup.js +85 -0
- package/dist/core/test-cleanup.js.map +1 -0
- package/dist/core/tls-generator.js +84 -0
- package/dist/core/tls-generator.js.map +1 -0
- package/dist/core/transaction-manager.js +139 -0
- package/dist/core/transaction-manager.js.map +1 -0
- package/dist/core/update-manager.js +241 -0
- package/dist/core/update-manager.js.map +1 -0
- package/dist/core/version-migration.js +260 -0
- package/dist/core/version-migration.js.map +1 -0
- package/dist/core/version-utils.js +91 -0
- package/dist/core/version-utils.js.map +1 -0
- package/dist/engines/base-engine.js +179 -0
- package/dist/engines/base-engine.js.map +1 -0
- package/dist/engines/clickhouse/backup.js +289 -0
- package/dist/engines/clickhouse/backup.js.map +1 -0
- package/dist/engines/clickhouse/binary-manager.js +145 -0
- package/dist/engines/clickhouse/binary-manager.js.map +1 -0
- package/dist/engines/clickhouse/binary-urls.js +100 -0
- package/dist/engines/clickhouse/binary-urls.js.map +1 -0
- package/dist/engines/clickhouse/cli-utils.js +143 -0
- package/dist/engines/clickhouse/cli-utils.js.map +1 -0
- package/dist/engines/clickhouse/hostdb-releases.js +24 -0
- package/dist/engines/clickhouse/hostdb-releases.js.map +1 -0
- package/dist/engines/clickhouse/index.js +1077 -0
- package/dist/engines/clickhouse/index.js.map +1 -0
- package/dist/engines/clickhouse/restore.js +335 -0
- package/dist/engines/clickhouse/restore.js.map +1 -0
- package/dist/engines/clickhouse/version-maps.js +83 -0
- package/dist/engines/clickhouse/version-maps.js.map +1 -0
- package/dist/engines/clickhouse/version-validator.js +133 -0
- package/dist/engines/clickhouse/version-validator.js.map +1 -0
- package/dist/engines/cockroachdb/backup.js +261 -0
- package/dist/engines/cockroachdb/backup.js.map +1 -0
- package/dist/engines/cockroachdb/binary-manager.js +33 -0
- package/dist/engines/cockroachdb/binary-manager.js.map +1 -0
- package/dist/engines/cockroachdb/binary-urls.js +33 -0
- package/dist/engines/cockroachdb/binary-urls.js.map +1 -0
- package/dist/engines/cockroachdb/cli-utils.js +338 -0
- package/dist/engines/cockroachdb/cli-utils.js.map +1 -0
- package/dist/engines/cockroachdb/hostdb-releases.js +21 -0
- package/dist/engines/cockroachdb/hostdb-releases.js.map +1 -0
- package/dist/engines/cockroachdb/index.js +1016 -0
- package/dist/engines/cockroachdb/index.js.map +1 -0
- package/dist/engines/cockroachdb/restore.js +323 -0
- package/dist/engines/cockroachdb/restore.js.map +1 -0
- package/dist/engines/cockroachdb/version-maps.js +37 -0
- package/dist/engines/cockroachdb/version-maps.js.map +1 -0
- package/dist/engines/couchdb/api-client.js +64 -0
- package/dist/engines/couchdb/api-client.js.map +1 -0
- package/dist/engines/couchdb/backup.js +90 -0
- package/dist/engines/couchdb/backup.js.map +1 -0
- package/dist/engines/couchdb/binary-manager.js +62 -0
- package/dist/engines/couchdb/binary-manager.js.map +1 -0
- package/dist/engines/couchdb/binary-urls.js +92 -0
- package/dist/engines/couchdb/binary-urls.js.map +1 -0
- package/dist/engines/couchdb/hostdb-releases.js +21 -0
- package/dist/engines/couchdb/hostdb-releases.js.map +1 -0
- package/dist/engines/couchdb/index.js +1043 -0
- package/dist/engines/couchdb/index.js.map +1 -0
- package/dist/engines/couchdb/restore.js +198 -0
- package/dist/engines/couchdb/restore.js.map +1 -0
- package/dist/engines/couchdb/version-maps.js +67 -0
- package/dist/engines/couchdb/version-maps.js.map +1 -0
- package/dist/engines/couchdb/version-validator.js +88 -0
- package/dist/engines/couchdb/version-validator.js.map +1 -0
- package/dist/engines/duckdb/binary-manager.js +33 -0
- package/dist/engines/duckdb/binary-manager.js.map +1 -0
- package/{engines/duckdb/binary-urls.ts → dist/engines/duckdb/binary-urls.js} +11 -16
- package/dist/engines/duckdb/binary-urls.js.map +1 -0
- package/dist/engines/duckdb/hostdb-releases.js +21 -0
- package/dist/engines/duckdb/hostdb-releases.js.map +1 -0
- package/dist/engines/duckdb/index.js +594 -0
- package/dist/engines/duckdb/index.js.map +1 -0
- package/dist/engines/duckdb/registry.js +265 -0
- package/dist/engines/duckdb/registry.js.map +1 -0
- package/dist/engines/duckdb/scanner.js +12 -0
- package/dist/engines/duckdb/scanner.js.map +1 -0
- package/dist/engines/duckdb/version-maps.js +67 -0
- package/dist/engines/duckdb/version-maps.js.map +1 -0
- package/dist/engines/duckdb/version-validator.js +62 -0
- package/dist/engines/duckdb/version-validator.js.map +1 -0
- package/dist/engines/ferretdb/backup.js +170 -0
- package/dist/engines/ferretdb/backup.js.map +1 -0
- package/dist/engines/ferretdb/binary-manager.js +765 -0
- package/dist/engines/ferretdb/binary-manager.js.map +1 -0
- package/dist/engines/ferretdb/binary-urls.js +135 -0
- package/dist/engines/ferretdb/binary-urls.js.map +1 -0
- package/dist/engines/ferretdb/index.js +1517 -0
- package/dist/engines/ferretdb/index.js.map +1 -0
- package/dist/engines/ferretdb/restore.js +310 -0
- package/dist/engines/ferretdb/restore.js.map +1 -0
- package/{engines/ferretdb/version-maps.ts → dist/engines/ferretdb/version-maps.js} +62 -79
- package/dist/engines/ferretdb/version-maps.js.map +1 -0
- package/dist/engines/file-based-utils.js +184 -0
- package/dist/engines/file-based-utils.js.map +1 -0
- package/dist/engines/index.js +124 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/influxdb/api-client.js +54 -0
- package/dist/engines/influxdb/api-client.js.map +1 -0
- package/dist/engines/influxdb/backup.js +119 -0
- package/dist/engines/influxdb/backup.js.map +1 -0
- package/dist/engines/influxdb/binary-manager.js +87 -0
- package/dist/engines/influxdb/binary-manager.js.map +1 -0
- package/dist/engines/influxdb/binary-urls.js +56 -0
- package/dist/engines/influxdb/binary-urls.js.map +1 -0
- package/dist/engines/influxdb/hostdb-releases.js +21 -0
- package/dist/engines/influxdb/hostdb-releases.js.map +1 -0
- package/dist/engines/influxdb/index.js +962 -0
- package/dist/engines/influxdb/index.js.map +1 -0
- package/dist/engines/influxdb/restore.js +329 -0
- package/dist/engines/influxdb/restore.js.map +1 -0
- package/dist/engines/influxdb/version-maps.js +64 -0
- package/dist/engines/influxdb/version-maps.js.map +1 -0
- package/dist/engines/influxdb/version-validator.js +109 -0
- package/dist/engines/influxdb/version-validator.js.map +1 -0
- package/dist/engines/mariadb/backup.js +178 -0
- package/dist/engines/mariadb/backup.js.map +1 -0
- package/dist/engines/mariadb/binary-manager.js +33 -0
- package/dist/engines/mariadb/binary-manager.js.map +1 -0
- package/{engines/mariadb/binary-urls.ts → dist/engines/mariadb/binary-urls.js} +38 -55
- package/dist/engines/mariadb/binary-urls.js.map +1 -0
- package/dist/engines/mariadb/hostdb-releases.js +21 -0
- package/dist/engines/mariadb/hostdb-releases.js.map +1 -0
- package/dist/engines/mariadb/index.js +1011 -0
- package/dist/engines/mariadb/index.js.map +1 -0
- package/dist/engines/mariadb/restore.js +322 -0
- package/dist/engines/mariadb/restore.js.map +1 -0
- package/dist/engines/mariadb/version-maps.js +63 -0
- package/dist/engines/mariadb/version-maps.js.map +1 -0
- package/dist/engines/mariadb/version-validator.js +143 -0
- package/dist/engines/mariadb/version-validator.js.map +1 -0
- package/dist/engines/meilisearch/api-client.js +50 -0
- package/dist/engines/meilisearch/api-client.js.map +1 -0
- package/dist/engines/meilisearch/backup.js +167 -0
- package/dist/engines/meilisearch/backup.js.map +1 -0
- package/dist/engines/meilisearch/binary-manager.js +31 -0
- package/dist/engines/meilisearch/binary-manager.js.map +1 -0
- package/dist/engines/meilisearch/binary-urls.js +56 -0
- package/dist/engines/meilisearch/binary-urls.js.map +1 -0
- package/dist/engines/meilisearch/hostdb-releases.js +21 -0
- package/dist/engines/meilisearch/hostdb-releases.js.map +1 -0
- package/dist/engines/meilisearch/index.js +992 -0
- package/dist/engines/meilisearch/index.js.map +1 -0
- package/dist/engines/meilisearch/restore.js +167 -0
- package/dist/engines/meilisearch/restore.js.map +1 -0
- package/dist/engines/meilisearch/version-maps.js +67 -0
- package/dist/engines/meilisearch/version-maps.js.map +1 -0
- package/dist/engines/meilisearch/version-validator.js +109 -0
- package/dist/engines/meilisearch/version-validator.js.map +1 -0
- package/dist/engines/mongodb/backup.js +109 -0
- package/dist/engines/mongodb/backup.js.map +1 -0
- package/dist/engines/mongodb/binary-manager.js +36 -0
- package/dist/engines/mongodb/binary-manager.js.map +1 -0
- package/dist/engines/mongodb/binary-urls.js +46 -0
- package/dist/engines/mongodb/binary-urls.js.map +1 -0
- package/dist/engines/mongodb/cli-utils.js +131 -0
- package/dist/engines/mongodb/cli-utils.js.map +1 -0
- package/dist/engines/mongodb/hostdb-releases.js +77 -0
- package/dist/engines/mongodb/hostdb-releases.js.map +1 -0
- package/dist/engines/mongodb/index.js +873 -0
- package/dist/engines/mongodb/index.js.map +1 -0
- package/dist/engines/mongodb/restore.js +276 -0
- package/dist/engines/mongodb/restore.js.map +1 -0
- package/dist/engines/mongodb/version-maps.js +79 -0
- package/dist/engines/mongodb/version-maps.js.map +1 -0
- package/dist/engines/mongodb/version-validator.js +133 -0
- package/dist/engines/mongodb/version-validator.js.map +1 -0
- package/dist/engines/mysql/backup.js +210 -0
- package/dist/engines/mysql/backup.js.map +1 -0
- package/dist/engines/mysql/binary-detection.js +325 -0
- package/dist/engines/mysql/binary-detection.js.map +1 -0
- package/dist/engines/mysql/binary-manager.js +30 -0
- package/dist/engines/mysql/binary-manager.js.map +1 -0
- package/dist/engines/mysql/binary-urls.js +87 -0
- package/dist/engines/mysql/binary-urls.js.map +1 -0
- package/{engines/mysql/hostdb-releases.ts → dist/engines/mysql/hostdb-releases.js} +20 -23
- package/dist/engines/mysql/hostdb-releases.js.map +1 -0
- package/dist/engines/mysql/index.js +1066 -0
- package/dist/engines/mysql/index.js.map +1 -0
- package/dist/engines/mysql/restore.js +361 -0
- package/dist/engines/mysql/restore.js.map +1 -0
- package/dist/engines/mysql/version-maps.js +79 -0
- package/dist/engines/mysql/version-maps.js.map +1 -0
- package/dist/engines/mysql/version-validator.js +266 -0
- package/dist/engines/mysql/version-validator.js.map +1 -0
- package/dist/engines/postgresql/backup.js +118 -0
- package/dist/engines/postgresql/backup.js.map +1 -0
- package/dist/engines/postgresql/binary-manager.js +85 -0
- package/dist/engines/postgresql/binary-manager.js.map +1 -0
- package/dist/engines/postgresql/binary-urls.js +80 -0
- package/dist/engines/postgresql/binary-urls.js.map +1 -0
- package/dist/engines/postgresql/hostdb-releases.js +21 -0
- package/dist/engines/postgresql/hostdb-releases.js.map +1 -0
- package/dist/engines/postgresql/index.js +852 -0
- package/dist/engines/postgresql/index.js.map +1 -0
- package/dist/engines/postgresql/remote-version.js +109 -0
- package/dist/engines/postgresql/remote-version.js.map +1 -0
- package/dist/engines/postgresql/restore.js +254 -0
- package/dist/engines/postgresql/restore.js.map +1 -0
- package/dist/engines/postgresql/version-maps.js +73 -0
- package/dist/engines/postgresql/version-maps.js.map +1 -0
- package/dist/engines/postgresql/version-validator.js +286 -0
- package/dist/engines/postgresql/version-validator.js.map +1 -0
- package/dist/engines/qdrant/api-client.js +50 -0
- package/dist/engines/qdrant/api-client.js.map +1 -0
- package/dist/engines/qdrant/backup.js +115 -0
- package/dist/engines/qdrant/backup.js.map +1 -0
- package/dist/engines/qdrant/binary-manager.js +31 -0
- package/dist/engines/qdrant/binary-manager.js.map +1 -0
- package/dist/engines/qdrant/binary-urls.js +92 -0
- package/dist/engines/qdrant/binary-urls.js.map +1 -0
- package/dist/engines/qdrant/cli-utils.js +39 -0
- package/dist/engines/qdrant/cli-utils.js.map +1 -0
- package/dist/engines/qdrant/hostdb-releases.js +21 -0
- package/dist/engines/qdrant/hostdb-releases.js.map +1 -0
- package/dist/engines/qdrant/index.js +1002 -0
- package/dist/engines/qdrant/index.js.map +1 -0
- package/dist/engines/qdrant/restore.js +154 -0
- package/dist/engines/qdrant/restore.js.map +1 -0
- package/dist/engines/qdrant/version-maps.js +67 -0
- package/dist/engines/qdrant/version-maps.js.map +1 -0
- package/dist/engines/qdrant/version-validator.js +109 -0
- package/dist/engines/qdrant/version-validator.js.map +1 -0
- package/dist/engines/questdb/backup.js +191 -0
- package/dist/engines/questdb/backup.js.map +1 -0
- package/dist/engines/questdb/binary-manager.js +247 -0
- package/dist/engines/questdb/binary-manager.js.map +1 -0
- package/dist/engines/questdb/binary-urls.js +27 -0
- package/dist/engines/questdb/binary-urls.js.map +1 -0
- package/dist/engines/questdb/hostdb-releases.js +21 -0
- package/dist/engines/questdb/hostdb-releases.js.map +1 -0
- package/dist/engines/questdb/index.js +814 -0
- package/dist/engines/questdb/index.js.map +1 -0
- package/dist/engines/questdb/restore.js +202 -0
- package/dist/engines/questdb/restore.js.map +1 -0
- package/dist/engines/questdb/version-maps.js +33 -0
- package/dist/engines/questdb/version-maps.js.map +1 -0
- package/dist/engines/questdb/version-validator.js +99 -0
- package/dist/engines/questdb/version-validator.js.map +1 -0
- package/dist/engines/redis/backup.js +292 -0
- package/dist/engines/redis/backup.js.map +1 -0
- package/dist/engines/redis/binary-manager.js +32 -0
- package/dist/engines/redis/binary-manager.js.map +1 -0
- package/dist/engines/redis/binary-urls.js +96 -0
- package/dist/engines/redis/binary-urls.js.map +1 -0
- package/dist/engines/redis/cli-utils.js +38 -0
- package/dist/engines/redis/cli-utils.js.map +1 -0
- package/dist/engines/redis/hostdb-releases.js +21 -0
- package/dist/engines/redis/hostdb-releases.js.map +1 -0
- package/dist/engines/redis/index.js +1263 -0
- package/dist/engines/redis/index.js.map +1 -0
- package/dist/engines/redis/restore.js +338 -0
- package/dist/engines/redis/restore.js.map +1 -0
- package/dist/engines/redis/version-maps.js +70 -0
- package/dist/engines/redis/version-maps.js.map +1 -0
- package/dist/engines/redis/version-validator.js +109 -0
- package/dist/engines/redis/version-validator.js.map +1 -0
- package/dist/engines/sqlite/binary-manager.js +39 -0
- package/dist/engines/sqlite/binary-manager.js.map +1 -0
- package/{engines/sqlite/binary-urls.ts → dist/engines/sqlite/binary-urls.js} +11 -16
- package/dist/engines/sqlite/binary-urls.js.map +1 -0
- package/dist/engines/sqlite/hostdb-releases.js +21 -0
- package/dist/engines/sqlite/hostdb-releases.js.map +1 -0
- package/dist/engines/sqlite/index.js +493 -0
- package/dist/engines/sqlite/index.js.map +1 -0
- package/dist/engines/sqlite/registry.js +163 -0
- package/dist/engines/sqlite/registry.js.map +1 -0
- package/dist/engines/sqlite/scanner.js +12 -0
- package/dist/engines/sqlite/scanner.js.map +1 -0
- package/dist/engines/sqlite/version-maps.js +57 -0
- package/dist/engines/sqlite/version-maps.js.map +1 -0
- package/dist/engines/surrealdb/backup.js +97 -0
- package/dist/engines/surrealdb/backup.js.map +1 -0
- package/dist/engines/surrealdb/binary-manager.js +33 -0
- package/dist/engines/surrealdb/binary-manager.js.map +1 -0
- package/dist/engines/surrealdb/binary-urls.js +33 -0
- package/dist/engines/surrealdb/binary-urls.js.map +1 -0
- package/dist/engines/surrealdb/cli-utils.js +147 -0
- package/dist/engines/surrealdb/cli-utils.js.map +1 -0
- package/dist/engines/surrealdb/hostdb-releases.js +21 -0
- package/dist/engines/surrealdb/hostdb-releases.js.map +1 -0
- package/dist/engines/surrealdb/index.js +1022 -0
- package/dist/engines/surrealdb/index.js.map +1 -0
- package/dist/engines/surrealdb/restore.js +224 -0
- package/dist/engines/surrealdb/restore.js.map +1 -0
- package/dist/engines/surrealdb/version-maps.js +36 -0
- package/dist/engines/surrealdb/version-maps.js.map +1 -0
- package/dist/engines/tigerbeetle/backup.js +36 -0
- package/dist/engines/tigerbeetle/backup.js.map +1 -0
- package/dist/engines/tigerbeetle/binary-manager.js +72 -0
- package/dist/engines/tigerbeetle/binary-manager.js.map +1 -0
- package/dist/engines/tigerbeetle/binary-urls.js +49 -0
- package/dist/engines/tigerbeetle/binary-urls.js.map +1 -0
- package/dist/engines/tigerbeetle/hostdb-releases.js +21 -0
- package/dist/engines/tigerbeetle/hostdb-releases.js.map +1 -0
- package/dist/engines/tigerbeetle/index.js +559 -0
- package/dist/engines/tigerbeetle/index.js.map +1 -0
- package/dist/engines/tigerbeetle/restore.js +91 -0
- package/dist/engines/tigerbeetle/restore.js.map +1 -0
- package/{engines/tigerbeetle/version-maps.ts → dist/engines/tigerbeetle/version-maps.js} +22 -31
- package/dist/engines/tigerbeetle/version-maps.js.map +1 -0
- package/dist/engines/tigerbeetle/version-validator.js +108 -0
- package/dist/engines/tigerbeetle/version-validator.js.map +1 -0
- package/dist/engines/typedb/backup.js +129 -0
- package/dist/engines/typedb/backup.js.map +1 -0
- package/dist/engines/typedb/binary-manager.js +151 -0
- package/dist/engines/typedb/binary-manager.js.map +1 -0
- package/dist/engines/typedb/binary-urls.js +33 -0
- package/dist/engines/typedb/binary-urls.js.map +1 -0
- package/dist/engines/typedb/cli-utils.js +163 -0
- package/dist/engines/typedb/cli-utils.js.map +1 -0
- package/dist/engines/typedb/hostdb-releases.js +21 -0
- package/dist/engines/typedb/hostdb-releases.js.map +1 -0
- package/dist/engines/typedb/index.js +1003 -0
- package/dist/engines/typedb/index.js.map +1 -0
- package/dist/engines/typedb/restore.js +279 -0
- package/dist/engines/typedb/restore.js.map +1 -0
- package/dist/engines/typedb/version-maps.js +40 -0
- package/dist/engines/typedb/version-maps.js.map +1 -0
- package/dist/engines/typedb/version-validator.js +103 -0
- package/dist/engines/typedb/version-validator.js.map +1 -0
- package/dist/engines/valkey/backup.js +292 -0
- package/dist/engines/valkey/backup.js.map +1 -0
- package/dist/engines/valkey/binary-manager.js +33 -0
- package/dist/engines/valkey/binary-manager.js.map +1 -0
- package/dist/engines/valkey/binary-urls.js +98 -0
- package/dist/engines/valkey/binary-urls.js.map +1 -0
- package/dist/engines/valkey/cli-utils.js +38 -0
- package/dist/engines/valkey/cli-utils.js.map +1 -0
- package/dist/engines/valkey/hostdb-releases.js +21 -0
- package/dist/engines/valkey/hostdb-releases.js.map +1 -0
- package/dist/engines/valkey/index.js +1257 -0
- package/dist/engines/valkey/index.js.map +1 -0
- package/dist/engines/valkey/restore.js +340 -0
- package/dist/engines/valkey/restore.js.map +1 -0
- package/dist/engines/valkey/version-maps.js +70 -0
- package/dist/engines/valkey/version-maps.js.map +1 -0
- package/dist/engines/valkey/version-validator.js +112 -0
- package/dist/engines/valkey/version-validator.js.map +1 -0
- package/dist/engines/weaviate/api-client.js +50 -0
- package/dist/engines/weaviate/api-client.js.map +1 -0
- package/dist/engines/weaviate/backup.js +95 -0
- package/dist/engines/weaviate/backup.js.map +1 -0
- package/dist/engines/weaviate/binary-manager.js +58 -0
- package/dist/engines/weaviate/binary-manager.js.map +1 -0
- package/dist/engines/weaviate/binary-urls.js +92 -0
- package/dist/engines/weaviate/binary-urls.js.map +1 -0
- package/dist/engines/weaviate/cli-utils.js +39 -0
- package/dist/engines/weaviate/cli-utils.js.map +1 -0
- package/dist/engines/weaviate/hostdb-releases.js +21 -0
- package/dist/engines/weaviate/hostdb-releases.js.map +1 -0
- package/dist/engines/weaviate/index.js +871 -0
- package/dist/engines/weaviate/index.js.map +1 -0
- package/dist/engines/weaviate/restore.js +185 -0
- package/dist/engines/weaviate/restore.js.map +1 -0
- package/dist/engines/weaviate/version-maps.js +67 -0
- package/dist/engines/weaviate/version-maps.js.map +1 -0
- package/dist/engines/weaviate/version-validator.js +109 -0
- package/dist/engines/weaviate/version-validator.js.map +1 -0
- package/dist/types/index.js +102 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +12 -9
- package/bin/cli.js +0 -68
- package/cli/bin.ts +0 -10
- package/cli/commands/attach.ts +0 -139
- package/cli/commands/backup.ts +0 -290
- package/cli/commands/backups.ts +0 -247
- package/cli/commands/clone.ts +0 -159
- package/cli/commands/config.ts +0 -367
- package/cli/commands/connect.ts +0 -684
- package/cli/commands/create.ts +0 -1201
- package/cli/commands/databases.ts +0 -630
- package/cli/commands/delete.ts +0 -133
- package/cli/commands/deps.ts +0 -342
- package/cli/commands/detach.ts +0 -107
- package/cli/commands/doctor.ts +0 -689
- package/cli/commands/duckdb.ts +0 -273
- package/cli/commands/edit.ts +0 -683
- package/cli/commands/engines.ts +0 -1914
- package/cli/commands/export.ts +0 -544
- package/cli/commands/info.ts +0 -340
- package/cli/commands/list.ts +0 -284
- package/cli/commands/logs.ts +0 -102
- package/cli/commands/menu/backup-handlers.ts +0 -1571
- package/cli/commands/menu/container-handlers.ts +0 -2288
- package/cli/commands/menu/engine-handlers.ts +0 -355
- package/cli/commands/menu/index.ts +0 -342
- package/cli/commands/menu/settings-handlers.ts +0 -365
- package/cli/commands/menu/shared.ts +0 -23
- package/cli/commands/menu/shell-handlers.ts +0 -1811
- package/cli/commands/menu/sql-handlers.ts +0 -231
- package/cli/commands/menu/update-handlers.ts +0 -378
- package/cli/commands/menu/validators.ts +0 -8
- package/cli/commands/ports.ts +0 -211
- package/cli/commands/pull.ts +0 -223
- package/cli/commands/query.ts +0 -241
- package/cli/commands/restore.ts +0 -587
- package/cli/commands/run.ts +0 -178
- package/cli/commands/self-update.ts +0 -121
- package/cli/commands/sqlite.ts +0 -273
- package/cli/commands/start.ts +0 -218
- package/cli/commands/stop.ts +0 -241
- package/cli/commands/url.ts +0 -104
- package/cli/commands/users.ts +0 -264
- package/cli/commands/version.ts +0 -55
- package/cli/commands/which.ts +0 -290
- package/cli/constants.ts +0 -233
- package/cli/helpers.ts +0 -1593
- package/cli/index.ts +0 -162
- package/cli/ui/prompts.ts +0 -1525
- package/cli/ui/spinner.ts +0 -88
- package/cli/ui/theme.ts +0 -128
- package/cli/utils/file-follower.ts +0 -93
- package/config/backup-formats.ts +0 -446
- package/config/defaults.ts +0 -56
- package/config/engine-defaults.ts +0 -336
- package/config/engines-registry.ts +0 -150
- package/config/engines.schema.json +0 -135
- package/config/os-dependencies.ts +0 -888
- package/config/paths.ts +0 -200
- package/core/backup-restore.ts +0 -330
- package/core/base-binary-manager.ts +0 -562
- package/core/base-document-binary-manager.ts +0 -523
- package/core/base-embedded-binary-manager.ts +0 -547
- package/core/base-server-binary-manager.ts +0 -523
- package/core/config-manager.ts +0 -652
- package/core/container-manager.ts +0 -787
- package/core/credential-generator.ts +0 -93
- package/core/credential-manager.ts +0 -259
- package/core/dblab-utils.ts +0 -113
- package/core/dependency-manager.ts +0 -512
- package/core/docker-exporter.ts +0 -1345
- package/core/error-handler.ts +0 -419
- package/core/fs-error-utils.ts +0 -82
- package/core/homebrew-version-manager.ts +0 -352
- package/core/hostdb-client.ts +0 -344
- package/core/hostdb-metadata.ts +0 -350
- package/core/hostdb-releases-factory.ts +0 -237
- package/core/library-env.ts +0 -118
- package/core/pgweb-utils.ts +0 -62
- package/core/platform-service.ts +0 -829
- package/core/port-manager.ts +0 -165
- package/core/process-manager.ts +0 -576
- package/core/pull-manager.ts +0 -511
- package/core/query-parser.ts +0 -514
- package/core/spawn-utils.ts +0 -122
- package/core/start-with-retry.ts +0 -130
- package/core/test-cleanup.ts +0 -108
- package/core/tls-generator.ts +0 -116
- package/core/transaction-manager.ts +0 -158
- package/core/update-manager.ts +0 -308
- package/core/version-migration.ts +0 -346
- package/core/version-utils.ts +0 -104
- package/engines/base-engine.ts +0 -340
- package/engines/clickhouse/README.md +0 -231
- package/engines/clickhouse/backup.ts +0 -398
- package/engines/clickhouse/binary-manager.ts +0 -201
- package/engines/clickhouse/binary-urls.ts +0 -125
- package/engines/clickhouse/cli-utils.ts +0 -176
- package/engines/clickhouse/hostdb-releases.ts +0 -30
- package/engines/clickhouse/index.ts +0 -1345
- package/engines/clickhouse/restore.ts +0 -466
- package/engines/clickhouse/version-maps.ts +0 -95
- package/engines/clickhouse/version-validator.ts +0 -154
- package/engines/cockroachdb/README.md +0 -170
- package/engines/cockroachdb/backup.ts +0 -376
- package/engines/cockroachdb/binary-manager.ts +0 -45
- package/engines/cockroachdb/binary-urls.ts +0 -40
- package/engines/cockroachdb/cli-utils.ts +0 -384
- package/engines/cockroachdb/hostdb-releases.ts +0 -26
- package/engines/cockroachdb/index.ts +0 -1276
- package/engines/cockroachdb/restore.ts +0 -455
- package/engines/cockroachdb/version-maps.ts +0 -42
- package/engines/couchdb/README.md +0 -257
- package/engines/couchdb/api-client.ts +0 -81
- package/engines/couchdb/backup.ts +0 -137
- package/engines/couchdb/binary-manager.ts +0 -86
- package/engines/couchdb/binary-urls.ts +0 -115
- package/engines/couchdb/hostdb-releases.ts +0 -23
- package/engines/couchdb/index.ts +0 -1429
- package/engines/couchdb/restore.ts +0 -290
- package/engines/couchdb/version-maps.ts +0 -78
- package/engines/couchdb/version-validator.ts +0 -111
- package/engines/duckdb/README.md +0 -154
- package/engines/duckdb/binary-manager.ts +0 -45
- package/engines/duckdb/hostdb-releases.ts +0 -23
- package/engines/duckdb/index.ts +0 -749
- package/engines/duckdb/registry.ts +0 -303
- package/engines/duckdb/scanner.ts +0 -22
- package/engines/duckdb/version-maps.ts +0 -78
- package/engines/duckdb/version-validator.ts +0 -78
- package/engines/ferretdb/README.md +0 -262
- package/engines/ferretdb/backup.ts +0 -173
- package/engines/ferretdb/binary-manager.ts +0 -1095
- package/engines/ferretdb/binary-urls.ts +0 -183
- package/engines/ferretdb/index.ts +0 -1907
- package/engines/ferretdb/restore.ts +0 -357
- package/engines/file-based-utils.ts +0 -262
- package/engines/index.ts +0 -131
- package/engines/influxdb/README.md +0 -180
- package/engines/influxdb/api-client.ts +0 -64
- package/engines/influxdb/backup.ts +0 -160
- package/engines/influxdb/binary-manager.ts +0 -110
- package/engines/influxdb/binary-urls.ts +0 -69
- package/engines/influxdb/hostdb-releases.ts +0 -23
- package/engines/influxdb/index.ts +0 -1272
- package/engines/influxdb/restore.ts +0 -417
- package/engines/influxdb/version-maps.ts +0 -75
- package/engines/influxdb/version-validator.ts +0 -128
- package/engines/mariadb/README.md +0 -141
- package/engines/mariadb/backup.ts +0 -233
- package/engines/mariadb/binary-manager.ts +0 -45
- package/engines/mariadb/hostdb-releases.ts +0 -23
- package/engines/mariadb/index.ts +0 -1300
- package/engines/mariadb/restore.ts +0 -447
- package/engines/mariadb/version-maps.ts +0 -72
- package/engines/mariadb/version-validator.ts +0 -181
- package/engines/meilisearch/README.md +0 -255
- package/engines/meilisearch/api-client.ts +0 -61
- package/engines/meilisearch/backup.ts +0 -233
- package/engines/meilisearch/binary-manager.ts +0 -43
- package/engines/meilisearch/binary-urls.ts +0 -69
- package/engines/meilisearch/hostdb-releases.ts +0 -26
- package/engines/meilisearch/index.ts +0 -1292
- package/engines/meilisearch/restore.ts +0 -219
- package/engines/meilisearch/version-maps.ts +0 -78
- package/engines/meilisearch/version-validator.ts +0 -128
- package/engines/mongodb/README.md +0 -162
- package/engines/mongodb/backup.ts +0 -127
- package/engines/mongodb/binary-manager.ts +0 -48
- package/engines/mongodb/binary-urls.ts +0 -63
- package/engines/mongodb/cli-utils.ts +0 -171
- package/engines/mongodb/hostdb-releases.ts +0 -91
- package/engines/mongodb/index.ts +0 -1118
- package/engines/mongodb/restore.ts +0 -361
- package/engines/mongodb/version-maps.ts +0 -91
- package/engines/mongodb/version-validator.ts +0 -160
- package/engines/mysql/README.md +0 -142
- package/engines/mysql/backup.ts +0 -270
- package/engines/mysql/binary-detection.ts +0 -408
- package/engines/mysql/binary-manager.ts +0 -42
- package/engines/mysql/binary-urls.ts +0 -104
- package/engines/mysql/index.ts +0 -1361
- package/engines/mysql/restore.ts +0 -500
- package/engines/mysql/version-maps.ts +0 -91
- package/engines/mysql/version-validator.ts +0 -369
- package/engines/postgresql/README.md +0 -158
- package/engines/postgresql/backup.ts +0 -151
- package/engines/postgresql/binary-manager.ts +0 -114
- package/engines/postgresql/binary-urls.ts +0 -99
- package/engines/postgresql/hostdb-releases.ts +0 -26
- package/engines/postgresql/index.ts +0 -1143
- package/engines/postgresql/remote-version.ts +0 -161
- package/engines/postgresql/restore.ts +0 -342
- package/engines/postgresql/version-maps.ts +0 -83
- package/engines/postgresql/version-validator.ts +0 -413
- package/engines/qdrant/README.md +0 -222
- package/engines/qdrant/api-client.ts +0 -61
- package/engines/qdrant/backup.ts +0 -165
- package/engines/qdrant/binary-manager.ts +0 -43
- package/engines/qdrant/binary-urls.ts +0 -115
- package/engines/qdrant/cli-utils.ts +0 -43
- package/engines/qdrant/hostdb-releases.ts +0 -23
- package/engines/qdrant/index.ts +0 -1312
- package/engines/qdrant/restore.ts +0 -203
- package/engines/qdrant/version-maps.ts +0 -78
- package/engines/qdrant/version-validator.ts +0 -128
- package/engines/questdb/README.md +0 -334
- package/engines/questdb/backup.ts +0 -220
- package/engines/questdb/binary-manager.ts +0 -310
- package/engines/questdb/binary-urls.ts +0 -34
- package/engines/questdb/hostdb-releases.ts +0 -23
- package/engines/questdb/index.ts +0 -1023
- package/engines/questdb/restore.ts +0 -260
- package/engines/questdb/version-maps.ts +0 -37
- package/engines/questdb/version-validator.ts +0 -121
- package/engines/redis/README.md +0 -173
- package/engines/redis/backup.ts +0 -389
- package/engines/redis/binary-manager.ts +0 -44
- package/engines/redis/binary-urls.ts +0 -117
- package/engines/redis/cli-utils.ts +0 -42
- package/engines/redis/hostdb-releases.ts +0 -23
- package/engines/redis/index.ts +0 -1583
- package/engines/redis/restore.ts +0 -443
- package/engines/redis/version-maps.ts +0 -81
- package/engines/redis/version-validator.ts +0 -131
- package/engines/sqlite/README.md +0 -162
- package/engines/sqlite/binary-manager.ts +0 -52
- package/engines/sqlite/hostdb-releases.ts +0 -23
- package/engines/sqlite/index.ts +0 -641
- package/engines/sqlite/registry.ts +0 -198
- package/engines/sqlite/scanner.ts +0 -22
- package/engines/sqlite/version-maps.ts +0 -64
- package/engines/surrealdb/README.md +0 -218
- package/engines/surrealdb/backup.ts +0 -131
- package/engines/surrealdb/binary-manager.ts +0 -45
- package/engines/surrealdb/binary-urls.ts +0 -40
- package/engines/surrealdb/cli-utils.ts +0 -173
- package/engines/surrealdb/hostdb-releases.ts +0 -23
- package/engines/surrealdb/index.ts +0 -1246
- package/engines/surrealdb/restore.ts +0 -302
- package/engines/surrealdb/version-maps.ts +0 -41
- package/engines/tigerbeetle/README.md +0 -61
- package/engines/tigerbeetle/backup.ts +0 -49
- package/engines/tigerbeetle/binary-manager.ts +0 -95
- package/engines/tigerbeetle/binary-urls.ts +0 -62
- package/engines/tigerbeetle/hostdb-releases.ts +0 -26
- package/engines/tigerbeetle/index.ts +0 -746
- package/engines/tigerbeetle/restore.ts +0 -130
- package/engines/tigerbeetle/version-validator.ts +0 -126
- package/engines/typedb/backup.ts +0 -167
- package/engines/typedb/binary-manager.ts +0 -200
- package/engines/typedb/binary-urls.ts +0 -40
- package/engines/typedb/cli-utils.ts +0 -210
- package/engines/typedb/hostdb-releases.ts +0 -23
- package/engines/typedb/index.ts +0 -1275
- package/engines/typedb/restore.ts +0 -377
- package/engines/typedb/version-maps.ts +0 -48
- package/engines/typedb/version-validator.ts +0 -127
- package/engines/valkey/README.md +0 -219
- package/engines/valkey/backup.ts +0 -389
- package/engines/valkey/binary-manager.ts +0 -45
- package/engines/valkey/binary-urls.ts +0 -122
- package/engines/valkey/cli-utils.ts +0 -42
- package/engines/valkey/hostdb-releases.ts +0 -23
- package/engines/valkey/index.ts +0 -1585
- package/engines/valkey/restore.ts +0 -446
- package/engines/valkey/version-maps.ts +0 -81
- package/engines/valkey/version-validator.ts +0 -131
- package/engines/weaviate/README.md +0 -302
- package/engines/weaviate/api-client.ts +0 -61
- package/engines/weaviate/backup.ts +0 -145
- package/engines/weaviate/binary-manager.ts +0 -80
- package/engines/weaviate/binary-urls.ts +0 -115
- package/engines/weaviate/cli-utils.ts +0 -43
- package/engines/weaviate/hostdb-releases.ts +0 -23
- package/engines/weaviate/index.ts +0 -1139
- package/engines/weaviate/restore.ts +0 -235
- package/engines/weaviate/version-maps.ts +0 -78
- package/engines/weaviate/version-validator.ts +0 -128
- package/types/index.ts +0 -624
- /package/{config → dist/config}/engines.json +0 -0
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FerretDB restore module
|
|
3
|
-
*
|
|
4
|
-
* Restores backups using pg_restore or psql on the embedded PostgreSQL backend.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { spawn, type SpawnOptions } from 'child_process'
|
|
8
|
-
import { existsSync, statSync } from 'fs'
|
|
9
|
-
import { open } from 'fs/promises'
|
|
10
|
-
import { join } from 'path'
|
|
11
|
-
import { logDebug, logWarning } from '../../core/error-handler'
|
|
12
|
-
import { platformService } from '../../core/platform-service'
|
|
13
|
-
import { ferretdbBinaryManager } from './binary-manager'
|
|
14
|
-
import {
|
|
15
|
-
DEFAULT_DOCUMENTDB_VERSION,
|
|
16
|
-
DEFAULT_V1_POSTGRESQL_VERSION,
|
|
17
|
-
isV1,
|
|
18
|
-
} from './version-maps'
|
|
19
|
-
import type { ContainerConfig, BackupFormat, RestoreResult } from '../../types'
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Resolve the path to a backend binary (pg_restore, psql, etc.)
|
|
23
|
-
* Uses version-aware backend resolution (v1 = plain PostgreSQL, v2 = postgresql-documentdb)
|
|
24
|
-
*/
|
|
25
|
-
function getBackendBinaryFullPath(
|
|
26
|
-
container: ContainerConfig,
|
|
27
|
-
binaryName: string,
|
|
28
|
-
): string {
|
|
29
|
-
const { version, backendVersion } = container
|
|
30
|
-
const { platform, arch } = platformService.getPlatformInfo()
|
|
31
|
-
const v1 = isV1(version)
|
|
32
|
-
|
|
33
|
-
const effectiveBackendVersion = v1
|
|
34
|
-
? backendVersion || DEFAULT_V1_POSTGRESQL_VERSION
|
|
35
|
-
: backendVersion || DEFAULT_DOCUMENTDB_VERSION
|
|
36
|
-
|
|
37
|
-
const backendPath = ferretdbBinaryManager.getBackendBinaryPath(
|
|
38
|
-
version,
|
|
39
|
-
effectiveBackendVersion,
|
|
40
|
-
platform,
|
|
41
|
-
arch,
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
const ext = platformService.getExecutableExtension()
|
|
45
|
-
return join(backendPath, 'bin', `${binaryName}${ext}`)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Get the path to pg_restore from the backend installation
|
|
50
|
-
*/
|
|
51
|
-
function getPgRestorePath(container: ContainerConfig): string {
|
|
52
|
-
return getBackendBinaryFullPath(container, 'pg_restore')
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Get the path to psql from the backend installation
|
|
57
|
-
*/
|
|
58
|
-
function getPsqlPath(container: ContainerConfig): string {
|
|
59
|
-
return getBackendBinaryFullPath(container, 'psql')
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Detect the format of a backup file
|
|
64
|
-
*/
|
|
65
|
-
export async function detectBackupFormat(
|
|
66
|
-
filePath: string,
|
|
67
|
-
): Promise<BackupFormat> {
|
|
68
|
-
if (!existsSync(filePath)) {
|
|
69
|
-
throw new Error(`Backup file not found: ${filePath}`)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const stats = statSync(filePath)
|
|
73
|
-
|
|
74
|
-
if (stats.isDirectory()) {
|
|
75
|
-
return {
|
|
76
|
-
format: 'directory',
|
|
77
|
-
description: 'PostgreSQL directory format backup',
|
|
78
|
-
restoreCommand: `pg_restore -h 127.0.0.1 -p PORT -U postgres -d DATABASE ${filePath}`,
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Check file header to determine format
|
|
83
|
-
try {
|
|
84
|
-
const buffer = Buffer.alloc(256)
|
|
85
|
-
const fd = await open(filePath, 'r')
|
|
86
|
-
let bytesRead = 0
|
|
87
|
-
try {
|
|
88
|
-
const result = await fd.read(buffer, 0, 256, 0)
|
|
89
|
-
bytesRead = result.bytesRead
|
|
90
|
-
} finally {
|
|
91
|
-
await fd.close().catch(() => {})
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// PostgreSQL custom format starts with "PGDMP"
|
|
95
|
-
const header = buffer.toString('ascii', 0, 5)
|
|
96
|
-
if (header === 'PGDMP') {
|
|
97
|
-
return {
|
|
98
|
-
format: 'custom',
|
|
99
|
-
description: 'PostgreSQL custom format backup',
|
|
100
|
-
restoreCommand: `pg_restore -h 127.0.0.1 -p PORT -U postgres -d DATABASE ${filePath}`,
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Check for SQL format using a larger buffer with word-boundary checks
|
|
105
|
-
// Strip BOM (Byte Order Mark) if present to avoid false negatives
|
|
106
|
-
const textHeader = buffer
|
|
107
|
-
.toString('utf8', 0, bytesRead)
|
|
108
|
-
.replace(/^\uFEFF/, '')
|
|
109
|
-
.toLowerCase()
|
|
110
|
-
const isSqlFormat =
|
|
111
|
-
textHeader.startsWith('--') ||
|
|
112
|
-
textHeader.startsWith('/*') ||
|
|
113
|
-
textHeader.includes('\n--') ||
|
|
114
|
-
textHeader.includes('\n/*') ||
|
|
115
|
-
/(?:^|\s)create\s/.test(textHeader) ||
|
|
116
|
-
/(?:^|\s)insert\s/.test(textHeader) ||
|
|
117
|
-
/(?:^|\s)drop\s/.test(textHeader) ||
|
|
118
|
-
textHeader.includes('pg_dump')
|
|
119
|
-
if (isSqlFormat) {
|
|
120
|
-
return {
|
|
121
|
-
format: 'sql',
|
|
122
|
-
description: 'Plain SQL backup',
|
|
123
|
-
restoreCommand: `psql -h 127.0.0.1 -p PORT -U postgres -d DATABASE -f ${filePath}`,
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Check file extension as fallback
|
|
128
|
-
if (filePath.endsWith('.dump')) {
|
|
129
|
-
return {
|
|
130
|
-
format: 'custom',
|
|
131
|
-
description: 'PostgreSQL custom format backup (by extension)',
|
|
132
|
-
restoreCommand: `pg_restore -h 127.0.0.1 -p PORT -U postgres -d DATABASE ${filePath}`,
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
if (filePath.endsWith('.sql')) {
|
|
137
|
-
return {
|
|
138
|
-
format: 'sql',
|
|
139
|
-
description: 'Plain SQL backup (by extension)',
|
|
140
|
-
restoreCommand: `psql -h 127.0.0.1 -p PORT -U postgres -d DATABASE -f ${filePath}`,
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
return {
|
|
145
|
-
format: 'unknown',
|
|
146
|
-
description: 'Unknown format - attempting as custom format',
|
|
147
|
-
restoreCommand: `pg_restore -h 127.0.0.1 -p PORT -U postgres -d DATABASE ${filePath}`,
|
|
148
|
-
}
|
|
149
|
-
} catch {
|
|
150
|
-
return {
|
|
151
|
-
format: 'unknown',
|
|
152
|
-
description: 'Could not detect format',
|
|
153
|
-
restoreCommand: `pg_restore -h 127.0.0.1 -p PORT -U postgres -d DATABASE ${filePath}`,
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// Restore options
|
|
159
|
-
export type RestoreOptions = {
|
|
160
|
-
database: string
|
|
161
|
-
drop?: boolean
|
|
162
|
-
timeoutMs?: number // Timeout in milliseconds (default: 5 minutes)
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// Default timeout for restore operations (5 minutes)
|
|
166
|
-
const DEFAULT_RESTORE_TIMEOUT_MS = 5 * 60 * 1000
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Restore a backup to a FerretDB container
|
|
170
|
-
*
|
|
171
|
-
* Uses pg_restore for custom format backups, psql for SQL format
|
|
172
|
-
*/
|
|
173
|
-
export async function restoreBackup(
|
|
174
|
-
container: ContainerConfig,
|
|
175
|
-
backupPath: string,
|
|
176
|
-
options: RestoreOptions,
|
|
177
|
-
): Promise<RestoreResult> {
|
|
178
|
-
const { backendPort } = container
|
|
179
|
-
const {
|
|
180
|
-
database,
|
|
181
|
-
drop = true,
|
|
182
|
-
timeoutMs = DEFAULT_RESTORE_TIMEOUT_MS,
|
|
183
|
-
} = options
|
|
184
|
-
|
|
185
|
-
if (!backendPort) {
|
|
186
|
-
throw new Error(
|
|
187
|
-
'Backend port not set. Make sure the container is running before restoring.',
|
|
188
|
-
)
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// Detect backup format
|
|
192
|
-
const format = await detectBackupFormat(backupPath)
|
|
193
|
-
logDebug(`Detected backup format: ${format.format}`)
|
|
194
|
-
|
|
195
|
-
// Choose restore tool based on format
|
|
196
|
-
const isSqlFormat = format.format === 'sql'
|
|
197
|
-
const toolPath = isSqlFormat
|
|
198
|
-
? getPsqlPath(container)
|
|
199
|
-
: getPgRestorePath(container)
|
|
200
|
-
|
|
201
|
-
if (!existsSync(toolPath)) {
|
|
202
|
-
const toolName = isSqlFormat ? 'psql' : 'pg_restore'
|
|
203
|
-
const backendName = isV1(container.version)
|
|
204
|
-
? 'PostgreSQL'
|
|
205
|
-
: 'postgresql-documentdb'
|
|
206
|
-
throw new Error(
|
|
207
|
-
`${toolName} not found at ${toolPath}. Make sure ${backendName} is installed.`,
|
|
208
|
-
)
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
const args: string[] = [
|
|
212
|
-
'-h',
|
|
213
|
-
'127.0.0.1',
|
|
214
|
-
'-p',
|
|
215
|
-
String(backendPort),
|
|
216
|
-
'-U',
|
|
217
|
-
'postgres',
|
|
218
|
-
'-d',
|
|
219
|
-
database,
|
|
220
|
-
]
|
|
221
|
-
|
|
222
|
-
if (isSqlFormat) {
|
|
223
|
-
// psql: use -f flag for file input
|
|
224
|
-
args.push('-f', backupPath)
|
|
225
|
-
if (drop) {
|
|
226
|
-
logWarning(
|
|
227
|
-
'SQL format restore: --clean is not supported. ' +
|
|
228
|
-
'If you need to drop existing objects, ensure the SQL dump was created with pg_dump --clean.',
|
|
229
|
-
)
|
|
230
|
-
}
|
|
231
|
-
} else {
|
|
232
|
-
// pg_restore: add options for custom/directory format
|
|
233
|
-
if (drop) {
|
|
234
|
-
args.push('--clean', '--if-exists')
|
|
235
|
-
}
|
|
236
|
-
args.push(backupPath)
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
logDebug(
|
|
240
|
-
`Running ${isSqlFormat ? 'psql' : 'pg_restore'} with args: ${args.join(' ')}`,
|
|
241
|
-
)
|
|
242
|
-
|
|
243
|
-
const spawnOptions: SpawnOptions = {
|
|
244
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
return new Promise((resolve, reject) => {
|
|
248
|
-
const proc = spawn(toolPath, args, spawnOptions)
|
|
249
|
-
|
|
250
|
-
let stdout = ''
|
|
251
|
-
let stderr = ''
|
|
252
|
-
let finished = false
|
|
253
|
-
let timeoutId: ReturnType<typeof setTimeout> | null = null
|
|
254
|
-
|
|
255
|
-
// Helper to clean up and mark finished
|
|
256
|
-
const cleanup = () => {
|
|
257
|
-
if (timeoutId) {
|
|
258
|
-
clearTimeout(timeoutId)
|
|
259
|
-
timeoutId = null
|
|
260
|
-
}
|
|
261
|
-
finished = true
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// Start timeout timer
|
|
265
|
-
timeoutId = setTimeout(() => {
|
|
266
|
-
if (finished) return
|
|
267
|
-
cleanup()
|
|
268
|
-
// Defensively kill the process - it may have already exited between
|
|
269
|
-
// the finished check and this call, so wrap in try-catch
|
|
270
|
-
try {
|
|
271
|
-
if (proc.exitCode === null && !proc.killed) {
|
|
272
|
-
proc.kill('SIGTERM')
|
|
273
|
-
}
|
|
274
|
-
} catch {
|
|
275
|
-
// Process already exited or otherwise not killable - ignore
|
|
276
|
-
}
|
|
277
|
-
reject(
|
|
278
|
-
new Error(
|
|
279
|
-
`Restore timed out after ${timeoutMs}ms. The ${isSqlFormat ? 'psql' : 'pg_restore'} process was killed.`,
|
|
280
|
-
),
|
|
281
|
-
)
|
|
282
|
-
}, timeoutMs)
|
|
283
|
-
|
|
284
|
-
proc.stdout?.on('data', (data: Buffer) => {
|
|
285
|
-
stdout += data.toString()
|
|
286
|
-
})
|
|
287
|
-
proc.stderr?.on('data', (data: Buffer) => {
|
|
288
|
-
stderr += data.toString()
|
|
289
|
-
})
|
|
290
|
-
|
|
291
|
-
proc.on('error', (err) => {
|
|
292
|
-
// Immediately reject and mark finished to prevent race with close handler
|
|
293
|
-
if (finished) return
|
|
294
|
-
cleanup()
|
|
295
|
-
reject(err)
|
|
296
|
-
})
|
|
297
|
-
|
|
298
|
-
proc.on('close', (code) => {
|
|
299
|
-
if (finished) return
|
|
300
|
-
cleanup()
|
|
301
|
-
|
|
302
|
-
if (code === 0) {
|
|
303
|
-
resolve({
|
|
304
|
-
format: format.format,
|
|
305
|
-
stdout,
|
|
306
|
-
stderr,
|
|
307
|
-
code,
|
|
308
|
-
})
|
|
309
|
-
} else {
|
|
310
|
-
// pg_restore may exit with non-zero but still restore some data
|
|
311
|
-
// Only treat as warning-only if ALL non-empty lines match warning patterns
|
|
312
|
-
// This prevents real errors mixed with warnings from being suppressed
|
|
313
|
-
const stderrLines = stderr
|
|
314
|
-
.split('\n')
|
|
315
|
-
.map((line) => line.trim())
|
|
316
|
-
.filter((line) => line.length > 0)
|
|
317
|
-
|
|
318
|
-
const warningPatterns = [
|
|
319
|
-
/\balready exists\b/,
|
|
320
|
-
/^WARNING:/i,
|
|
321
|
-
/^pg_restore: warning:/i,
|
|
322
|
-
]
|
|
323
|
-
|
|
324
|
-
const allLinesAreWarnings =
|
|
325
|
-
stderrLines.length > 0 &&
|
|
326
|
-
stderrLines.every((line) =>
|
|
327
|
-
warningPatterns.some((pattern) => pattern.test(line)),
|
|
328
|
-
)
|
|
329
|
-
|
|
330
|
-
// pg_restore outputs "errors ignored on restore: N" when it completes
|
|
331
|
-
// despite encountering errors - this means the restore finished
|
|
332
|
-
const pgRestoreCompletedWithIgnoredErrors =
|
|
333
|
-
/pg_restore: warning: errors ignored on restore: \d+/i.test(stderr)
|
|
334
|
-
|
|
335
|
-
const isWarningOnly =
|
|
336
|
-
allLinesAreWarnings || pgRestoreCompletedWithIgnoredErrors
|
|
337
|
-
|
|
338
|
-
if (isWarningOnly) {
|
|
339
|
-
logWarning(`Restore completed with warnings: ${stderr}`)
|
|
340
|
-
resolve({
|
|
341
|
-
format: format.format,
|
|
342
|
-
stdout,
|
|
343
|
-
stderr,
|
|
344
|
-
code: code ?? undefined,
|
|
345
|
-
})
|
|
346
|
-
} else {
|
|
347
|
-
reject(
|
|
348
|
-
new Error(
|
|
349
|
-
stderr ||
|
|
350
|
-
`${isSqlFormat ? 'psql' : 'pg_restore'} exited with code ${code}`,
|
|
351
|
-
),
|
|
352
|
-
)
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
})
|
|
356
|
-
})
|
|
357
|
-
}
|
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Centralized utilities for file-based engines (SQLite, DuckDB)
|
|
3
|
-
*
|
|
4
|
-
* This module is the single source of truth for:
|
|
5
|
-
* - Extension → engine mapping
|
|
6
|
-
* - Engine → valid extensions
|
|
7
|
-
* - Engine → registry
|
|
8
|
-
* - Container name derivation from filenames
|
|
9
|
-
* - Scanning for unregistered files
|
|
10
|
-
*
|
|
11
|
-
* All file-based engine behavior should go through this module
|
|
12
|
-
* so that adding a new file-based engine only requires changes here.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import { readdir } from 'fs/promises'
|
|
16
|
-
import { existsSync } from 'fs'
|
|
17
|
-
import { resolve, extname } from 'path'
|
|
18
|
-
import { Engine, isFileBasedEngine } from '../types'
|
|
19
|
-
import { sqliteRegistry } from './sqlite/registry'
|
|
20
|
-
import { duckdbRegistry } from './duckdb/registry'
|
|
21
|
-
|
|
22
|
-
// ============================================================
|
|
23
|
-
// Extension Mapping
|
|
24
|
-
// ============================================================
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Map of file extensions to their corresponding file-based engine.
|
|
28
|
-
* This is the single source of truth for extension → engine detection.
|
|
29
|
-
*/
|
|
30
|
-
const EXTENSION_TO_ENGINE: Record<string, Engine> = {
|
|
31
|
-
'.sqlite': Engine.SQLite,
|
|
32
|
-
'.sqlite3': Engine.SQLite,
|
|
33
|
-
'.db': Engine.SQLite,
|
|
34
|
-
'.duckdb': Engine.DuckDB,
|
|
35
|
-
'.ddb': Engine.DuckDB,
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Valid extensions per engine, derived from the extension map.
|
|
40
|
-
* Used for validation (e.g., ensuring a SQLite container only relocates to a SQLite extension).
|
|
41
|
-
*/
|
|
42
|
-
const ENGINE_EXTENSIONS: Record<Engine.SQLite | Engine.DuckDB, string[]> = {
|
|
43
|
-
[Engine.SQLite]: ['.sqlite', '.sqlite3', '.db'],
|
|
44
|
-
[Engine.DuckDB]: ['.duckdb', '.ddb'],
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Extension regex per engine (for stripping extensions from filenames).
|
|
49
|
-
*/
|
|
50
|
-
const ENGINE_EXTENSION_REGEX: Record<Engine.SQLite | Engine.DuckDB, RegExp> = {
|
|
51
|
-
[Engine.SQLite]: /\.(sqlite3?|db)$/i,
|
|
52
|
-
[Engine.DuckDB]: /\.(duckdb|ddb)$/i,
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Combined regex matching any file-based engine extension.
|
|
57
|
-
*/
|
|
58
|
-
export const FILE_BASED_EXTENSION_REGEX = /\.(sqlite3?|db|duckdb|ddb)$/i
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Detect which file-based engine a file belongs to based on its extension.
|
|
62
|
-
* Returns null if the extension is not recognized as a file-based database.
|
|
63
|
-
*/
|
|
64
|
-
export function detectEngineFromPath(filePath: string): Engine | null {
|
|
65
|
-
const ext = extname(filePath).toLowerCase()
|
|
66
|
-
return EXTENSION_TO_ENGINE[ext] ?? null
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Get the valid file extensions for a file-based engine.
|
|
71
|
-
*/
|
|
72
|
-
export function getExtensionsForEngine(
|
|
73
|
-
engine: Engine.SQLite | Engine.DuckDB,
|
|
74
|
-
): string[] {
|
|
75
|
-
return ENGINE_EXTENSIONS[engine]
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Get all valid file-based database extensions.
|
|
80
|
-
*/
|
|
81
|
-
export function getAllFileBasedExtensions(): string[] {
|
|
82
|
-
return Object.keys(EXTENSION_TO_ENGINE)
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Check if a file path has a valid extension for the given engine.
|
|
87
|
-
*/
|
|
88
|
-
export function isValidExtensionForEngine(
|
|
89
|
-
filePath: string,
|
|
90
|
-
engine: Engine.SQLite | Engine.DuckDB,
|
|
91
|
-
): boolean {
|
|
92
|
-
const ext = extname(filePath).toLowerCase()
|
|
93
|
-
return ENGINE_EXTENSIONS[engine].includes(ext)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Human-readable string of valid extensions for a file-based engine.
|
|
98
|
-
*/
|
|
99
|
-
export function formatExtensionsForEngine(
|
|
100
|
-
engine: Engine.SQLite | Engine.DuckDB,
|
|
101
|
-
): string {
|
|
102
|
-
return ENGINE_EXTENSIONS[engine].join(', ')
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Human-readable string of all valid file-based extensions.
|
|
107
|
-
*/
|
|
108
|
-
export function formatAllExtensions(): string {
|
|
109
|
-
return Object.keys(EXTENSION_TO_ENGINE).join(', ')
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// ============================================================
|
|
113
|
-
// Registry Access
|
|
114
|
-
// ============================================================
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Common interface for file-based engine registries.
|
|
118
|
-
* Both SQLite and DuckDB registries implement this shape.
|
|
119
|
-
*/
|
|
120
|
-
export type FileBasedRegistry = {
|
|
121
|
-
add(entry: { name: string; filePath: string; created: string }): Promise<void>
|
|
122
|
-
get(name: string): Promise<{ name: string; filePath: string } | null>
|
|
123
|
-
remove(name: string): Promise<boolean>
|
|
124
|
-
update(
|
|
125
|
-
name: string,
|
|
126
|
-
updates: { filePath?: string; lastVerified?: string },
|
|
127
|
-
): Promise<boolean>
|
|
128
|
-
exists(name: string): Promise<boolean>
|
|
129
|
-
isPathRegistered(filePath: string): Promise<boolean>
|
|
130
|
-
getByPath(
|
|
131
|
-
filePath: string,
|
|
132
|
-
): Promise<{ name: string; filePath: string } | null>
|
|
133
|
-
isFolderIgnored(folderPath: string): Promise<boolean>
|
|
134
|
-
addIgnoreFolder(folderPath: string): Promise<void>
|
|
135
|
-
removeIgnoreFolder(folderPath: string): Promise<boolean>
|
|
136
|
-
listIgnoredFolders(): Promise<string[]>
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Get the registry for a file-based engine.
|
|
141
|
-
* Throws if the engine is not file-based.
|
|
142
|
-
*/
|
|
143
|
-
export function getRegistryForEngine(engine: Engine): FileBasedRegistry {
|
|
144
|
-
switch (engine) {
|
|
145
|
-
case Engine.SQLite:
|
|
146
|
-
return sqliteRegistry
|
|
147
|
-
case Engine.DuckDB:
|
|
148
|
-
return duckdbRegistry
|
|
149
|
-
default:
|
|
150
|
-
if (isFileBasedEngine(engine)) {
|
|
151
|
-
throw new Error(
|
|
152
|
-
`File-based engine "${engine}" has no registry configured in getRegistryForEngine()`,
|
|
153
|
-
)
|
|
154
|
-
}
|
|
155
|
-
throw new Error(`"${engine}" is not a file-based engine`)
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// ============================================================
|
|
160
|
-
// Container Name Derivation
|
|
161
|
-
// ============================================================
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* Derive a valid container name from a database filename.
|
|
165
|
-
* Removes the engine-specific extension and sanitizes for use as a container name.
|
|
166
|
-
*
|
|
167
|
-
* - Must start with a letter
|
|
168
|
-
* - Can contain letters, numbers, hyphens, underscores
|
|
169
|
-
* - Falls back to engine-specific default if result is empty
|
|
170
|
-
*/
|
|
171
|
-
export function deriveContainerName(
|
|
172
|
-
fileName: string,
|
|
173
|
-
engine: Engine.SQLite | Engine.DuckDB,
|
|
174
|
-
): string {
|
|
175
|
-
const extensionRegex = ENGINE_EXTENSION_REGEX[engine]
|
|
176
|
-
const fallback = engine === Engine.SQLite ? 'sqlite-db' : 'duckdb-db'
|
|
177
|
-
|
|
178
|
-
// Remove extension
|
|
179
|
-
const base = fileName.replace(extensionRegex, '')
|
|
180
|
-
|
|
181
|
-
// If nothing remains after extension removal, return engine-specific fallback
|
|
182
|
-
const sanitizedBase = base
|
|
183
|
-
.replace(/[^a-zA-Z0-9_-]/g, '-')
|
|
184
|
-
.replace(/^-+|-+$/g, '')
|
|
185
|
-
if (!sanitizedBase) {
|
|
186
|
-
return fallback
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Convert to valid container name (alphanumeric, hyphens, underscores)
|
|
190
|
-
let name = base.replace(/[^a-zA-Z0-9_-]/g, '-')
|
|
191
|
-
|
|
192
|
-
// Ensure starts with letter
|
|
193
|
-
if (!/^[a-zA-Z]/.test(name)) {
|
|
194
|
-
name = 'db-' + name
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// Remove consecutive hyphens
|
|
198
|
-
name = name.replace(/-+/g, '-')
|
|
199
|
-
|
|
200
|
-
// Trim leading/trailing hyphens
|
|
201
|
-
name = name.replace(/^-+|-+$/g, '')
|
|
202
|
-
|
|
203
|
-
return name || fallback
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// ============================================================
|
|
207
|
-
// File Scanning
|
|
208
|
-
// ============================================================
|
|
209
|
-
|
|
210
|
-
export type UnregisteredFile = {
|
|
211
|
-
fileName: string
|
|
212
|
-
absolutePath: string
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Scan a directory for unregistered file-based database files.
|
|
217
|
-
*
|
|
218
|
-
* @param engine The file-based engine to scan for
|
|
219
|
-
* @param directory Directory to scan (defaults to CWD)
|
|
220
|
-
* @returns Array of unregistered files
|
|
221
|
-
*/
|
|
222
|
-
export async function scanForUnregisteredFiles(
|
|
223
|
-
engine: Engine.SQLite | Engine.DuckDB,
|
|
224
|
-
directory: string = process.cwd(),
|
|
225
|
-
): Promise<UnregisteredFile[]> {
|
|
226
|
-
const absoluteDir = resolve(directory)
|
|
227
|
-
const registry = getRegistryForEngine(engine)
|
|
228
|
-
const extensionRegex = ENGINE_EXTENSION_REGEX[engine]
|
|
229
|
-
|
|
230
|
-
// Check if folder is ignored
|
|
231
|
-
if (await registry.isFolderIgnored(absoluteDir)) {
|
|
232
|
-
return []
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// Check if directory exists
|
|
236
|
-
if (!existsSync(absoluteDir)) {
|
|
237
|
-
return []
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
try {
|
|
241
|
-
const entries = await readdir(absoluteDir, { withFileTypes: true })
|
|
242
|
-
|
|
243
|
-
const matchingFiles = entries
|
|
244
|
-
.filter((e) => e.isFile())
|
|
245
|
-
.filter((e) => extensionRegex.test(e.name))
|
|
246
|
-
.map((e) => ({
|
|
247
|
-
fileName: e.name,
|
|
248
|
-
absolutePath: resolve(absoluteDir, e.name),
|
|
249
|
-
}))
|
|
250
|
-
|
|
251
|
-
const unregistered: UnregisteredFile[] = []
|
|
252
|
-
for (const file of matchingFiles) {
|
|
253
|
-
if (!(await registry.isPathRegistered(file.absolutePath))) {
|
|
254
|
-
unregistered.push(file)
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
return unregistered
|
|
259
|
-
} catch {
|
|
260
|
-
return []
|
|
261
|
-
}
|
|
262
|
-
}
|