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
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL Version Validator
|
|
3
|
+
*
|
|
4
|
+
* Validates compatibility between pg_restore tool version and dump file version.
|
|
5
|
+
* PostgreSQL is backwards compatible - we only fail when dump_version > tool_version.
|
|
6
|
+
*/
|
|
7
|
+
import { exec } from 'child_process';
|
|
8
|
+
import { promisify } from 'util';
|
|
9
|
+
import { createReadStream } from 'fs';
|
|
10
|
+
import { createInterface } from 'readline';
|
|
11
|
+
import { SpinDBError, ErrorCodes, logWarning, logDebug, } from '../../core/error-handler.js';
|
|
12
|
+
import { detectPackageManager } from '../../core/dependency-manager.js';
|
|
13
|
+
import { detectInstalledPostgres, getDirectBinaryPath, findCompatibleVersion, } from '../../core/homebrew-version-manager.js';
|
|
14
|
+
import { detectRemotePostgresVersion, } from './remote-version.js';
|
|
15
|
+
const execAsync = promisify(exec);
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Version Parsing
|
|
18
|
+
// =============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Parse version from pg_dump/pg_restore --version output
|
|
21
|
+
* Examples:
|
|
22
|
+
* "pg_restore (PostgreSQL) 16.1"
|
|
23
|
+
* "pg_restore (PostgreSQL) 14.9 (Homebrew)"
|
|
24
|
+
* "pg_dump (PostgreSQL) 17.0"
|
|
25
|
+
*/
|
|
26
|
+
export function parseToolVersion(output) {
|
|
27
|
+
const match = output.match(/(\d+)\.(\d+)(?:\.(\d+))?/);
|
|
28
|
+
if (!match) {
|
|
29
|
+
throw new Error(`Cannot parse version from: ${output}`);
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
major: parseInt(match[1], 10),
|
|
33
|
+
minor: parseInt(match[2], 10),
|
|
34
|
+
patch: parseInt(match[3] || '0', 10),
|
|
35
|
+
full: match[0],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
async function readFirstLines(filePath, lineCount) {
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
40
|
+
const lines = [];
|
|
41
|
+
const stream = createReadStream(filePath, { encoding: 'utf8' });
|
|
42
|
+
const rl = createInterface({ input: stream });
|
|
43
|
+
rl.on('line', (line) => {
|
|
44
|
+
lines.push(line);
|
|
45
|
+
if (lines.length >= lineCount) {
|
|
46
|
+
rl.close();
|
|
47
|
+
stream.destroy();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
rl.on('close', () => {
|
|
51
|
+
resolve(lines.join('\n'));
|
|
52
|
+
});
|
|
53
|
+
rl.on('error', reject);
|
|
54
|
+
stream.on('error', reject);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Parse version from dump file header
|
|
59
|
+
*
|
|
60
|
+
* Plain SQL format: "-- Dumped from database version 16.1"
|
|
61
|
+
* Archive format: Uses `pg_restore -l` to read TOC header
|
|
62
|
+
*/
|
|
63
|
+
export async function parseDumpVersion(dumpPath, format, pgRestorePath) {
|
|
64
|
+
try {
|
|
65
|
+
if (format === 'custom' || format === 'directory') {
|
|
66
|
+
// Use pg_restore -l to get archive info
|
|
67
|
+
const restorePath = pgRestorePath || 'pg_restore';
|
|
68
|
+
const { stdout } = await execAsync(`"${restorePath}" -l "${dumpPath}" 2>&1 | head -20`);
|
|
69
|
+
// Look for: "; Dumped from database version 16.1"
|
|
70
|
+
const match = stdout.match(/Dumped from database version (\d+)\.(\d+)(?:\.(\d+))?/);
|
|
71
|
+
if (match) {
|
|
72
|
+
return {
|
|
73
|
+
major: parseInt(match[1], 10),
|
|
74
|
+
minor: parseInt(match[2], 10),
|
|
75
|
+
patch: parseInt(match[3] || '0', 10),
|
|
76
|
+
full: `${match[1]}.${match[2]}${match[3] ? `.${match[3]}` : ''}`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Plain SQL format - read first 50 lines
|
|
82
|
+
const header = await readFirstLines(dumpPath, 50);
|
|
83
|
+
const match = header.match(/Dumped from database version (\d+)\.(\d+)(?:\.(\d+))?/);
|
|
84
|
+
if (match) {
|
|
85
|
+
return {
|
|
86
|
+
major: parseInt(match[1], 10),
|
|
87
|
+
minor: parseInt(match[2], 10),
|
|
88
|
+
patch: parseInt(match[3] || '0', 10),
|
|
89
|
+
full: `${match[1]}.${match[2]}${match[3] ? `.${match[3]}` : ''}`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
logDebug('Failed to parse dump version', {
|
|
96
|
+
dumpPath,
|
|
97
|
+
format,
|
|
98
|
+
error: error instanceof Error ? error.message : String(error),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return null; // Version not found in dump
|
|
102
|
+
}
|
|
103
|
+
// Get the version of pg_restore
|
|
104
|
+
export async function getPgRestoreVersion(pgRestorePath) {
|
|
105
|
+
const { stdout } = await execAsync(`"${pgRestorePath}" --version`);
|
|
106
|
+
return parseToolVersion(stdout);
|
|
107
|
+
}
|
|
108
|
+
// =============================================================================
|
|
109
|
+
// Compatibility Checking
|
|
110
|
+
// =============================================================================
|
|
111
|
+
/**
|
|
112
|
+
* Check version compatibility - ONLY fails when dump is NEWER than tool
|
|
113
|
+
*
|
|
114
|
+
* | Scenario | Result |
|
|
115
|
+
* |----------|--------|
|
|
116
|
+
* | pg_restore v16 + dump from v14 | ✅ Works (backwards compatible) |
|
|
117
|
+
* | pg_restore v16 + dump from v16 | ✅ Works (same version) |
|
|
118
|
+
* | pg_restore v14 + dump from v16 | ❌ Fails (dump newer than tool) |
|
|
119
|
+
* | pg_restore v16 + dump from v10 | ⚠️ Works with warning (very old) |
|
|
120
|
+
*/
|
|
121
|
+
export function checkVersionCompatibility(dumpVersion, toolVersion) {
|
|
122
|
+
// If we couldn't parse dump version, proceed with warning
|
|
123
|
+
if (!dumpVersion) {
|
|
124
|
+
return {
|
|
125
|
+
compatible: true,
|
|
126
|
+
dumpVersion: null,
|
|
127
|
+
toolVersion,
|
|
128
|
+
warning: 'Could not detect dump version. Proceeding anyway.',
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// FAIL: Dump is newer than tool (e.g., pg_restore 14 + dump from 16)
|
|
132
|
+
if (dumpVersion.major > toolVersion.major) {
|
|
133
|
+
return {
|
|
134
|
+
compatible: false,
|
|
135
|
+
dumpVersion,
|
|
136
|
+
toolVersion,
|
|
137
|
+
error: `Backup was created with PostgreSQL ${dumpVersion.major}, ` +
|
|
138
|
+
`but your pg_restore is version ${toolVersion.major}. ` +
|
|
139
|
+
`Install PostgreSQL ${dumpVersion.major} client tools to restore this backup.`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// WARN: Dump is very old (3+ major versions behind)
|
|
143
|
+
if (dumpVersion.major < toolVersion.major - 2) {
|
|
144
|
+
return {
|
|
145
|
+
compatible: true,
|
|
146
|
+
dumpVersion,
|
|
147
|
+
toolVersion,
|
|
148
|
+
warning: `Backup was created with PostgreSQL ${dumpVersion.major}. ` +
|
|
149
|
+
`Some features may not restore correctly.`,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
// OK: Same version or dump is older (backwards compatible)
|
|
153
|
+
return { compatible: true, dumpVersion, toolVersion };
|
|
154
|
+
}
|
|
155
|
+
// =============================================================================
|
|
156
|
+
// Main Validation Function
|
|
157
|
+
// =============================================================================
|
|
158
|
+
/**
|
|
159
|
+
* Validate that a dump file can be restored with the available pg_restore
|
|
160
|
+
*
|
|
161
|
+
* @throws SpinDBError if versions are incompatible
|
|
162
|
+
*/
|
|
163
|
+
export async function validateRestoreCompatibility(options) {
|
|
164
|
+
const { dumpPath, format, pgRestorePath } = options;
|
|
165
|
+
// Get tool version
|
|
166
|
+
const toolVersion = await getPgRestoreVersion(pgRestorePath);
|
|
167
|
+
logDebug('pg_restore version detected', { version: toolVersion.full });
|
|
168
|
+
// Get dump version
|
|
169
|
+
const dumpVersion = await parseDumpVersion(dumpPath, format, pgRestorePath);
|
|
170
|
+
if (dumpVersion) {
|
|
171
|
+
logDebug('Dump version detected', { version: dumpVersion.full });
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
logDebug('Could not detect dump version');
|
|
175
|
+
}
|
|
176
|
+
// Check compatibility
|
|
177
|
+
const result = checkVersionCompatibility(dumpVersion, toolVersion);
|
|
178
|
+
if (!result.compatible) {
|
|
179
|
+
throw new SpinDBError(ErrorCodes.VERSION_MISMATCH, result.error, 'fatal', `Install PostgreSQL ${dumpVersion.major} client tools: brew install postgresql@${dumpVersion.major}`, { dumpVersion, toolVersion });
|
|
180
|
+
}
|
|
181
|
+
if (result.warning) {
|
|
182
|
+
logWarning(result.warning);
|
|
183
|
+
}
|
|
184
|
+
return { dumpVersion, toolVersion };
|
|
185
|
+
}
|
|
186
|
+
export async function getPgDumpVersion(pgDumpPath) {
|
|
187
|
+
const { stdout } = await execAsync(`"${pgDumpPath}" --version`);
|
|
188
|
+
return parseToolVersion(stdout);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Validate that a remote database can be dumped with the current pg_dump
|
|
192
|
+
*
|
|
193
|
+
* This checks BEFORE dumping to avoid creating incompatible dump files.
|
|
194
|
+
* Returns the recommended action if the current pg_dump is incompatible.
|
|
195
|
+
*/
|
|
196
|
+
export async function validateDumpCompatibility(options) {
|
|
197
|
+
const { connectionString, pgDumpPath } = options;
|
|
198
|
+
// Get local pg_dump version
|
|
199
|
+
const localVersion = await getPgDumpVersion(pgDumpPath);
|
|
200
|
+
logDebug('Local pg_dump version', { version: localVersion.full });
|
|
201
|
+
// Detect remote database version
|
|
202
|
+
const remoteVersion = await detectRemotePostgresVersion(connectionString);
|
|
203
|
+
logDebug('Remote database version', {
|
|
204
|
+
version: remoteVersion.fullVersion,
|
|
205
|
+
serverType: remoteVersion.serverType,
|
|
206
|
+
});
|
|
207
|
+
// Check compatibility: local tool must be >= remote version
|
|
208
|
+
if (localVersion.major >= remoteVersion.majorVersion) {
|
|
209
|
+
return {
|
|
210
|
+
compatible: true,
|
|
211
|
+
localToolVersion: localVersion,
|
|
212
|
+
remoteDbVersion: remoteVersion,
|
|
213
|
+
requiredAction: 'none',
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
// Version mismatch - check if we can use a direct path
|
|
217
|
+
const targetMajor = String(remoteVersion.majorVersion);
|
|
218
|
+
const directPath = await getDirectBinaryPath('pg_dump', targetMajor);
|
|
219
|
+
if (directPath) {
|
|
220
|
+
// Have a direct path to the correct version
|
|
221
|
+
return {
|
|
222
|
+
compatible: false,
|
|
223
|
+
localToolVersion: localVersion,
|
|
224
|
+
remoteDbVersion: remoteVersion,
|
|
225
|
+
requiredAction: 'use_direct_path',
|
|
226
|
+
alternativePath: directPath,
|
|
227
|
+
switchTarget: targetMajor,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
// Check if any compatible version is installed via Homebrew
|
|
231
|
+
const compatibleVersion = await findCompatibleVersion(remoteVersion.majorVersion);
|
|
232
|
+
if (compatibleVersion) {
|
|
233
|
+
const altPath = await getDirectBinaryPath('pg_dump', compatibleVersion.majorVersion);
|
|
234
|
+
return {
|
|
235
|
+
compatible: false,
|
|
236
|
+
localToolVersion: localVersion,
|
|
237
|
+
remoteDbVersion: remoteVersion,
|
|
238
|
+
requiredAction: 'use_direct_path',
|
|
239
|
+
alternativePath: altPath || undefined,
|
|
240
|
+
switchTarget: compatibleVersion.majorVersion,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
// Check if we could switch Homebrew (version is installed but not as direct path)
|
|
244
|
+
const installed = await detectInstalledPostgres();
|
|
245
|
+
const hasTarget = installed.some((v) => parseInt(v.majorVersion, 10) >= remoteVersion.majorVersion);
|
|
246
|
+
if (hasTarget) {
|
|
247
|
+
const best = installed
|
|
248
|
+
.filter((v) => parseInt(v.majorVersion, 10) >= remoteVersion.majorVersion)
|
|
249
|
+
.sort((a, b) => parseInt(a.majorVersion, 10) - parseInt(b.majorVersion, 10))[0];
|
|
250
|
+
return {
|
|
251
|
+
compatible: false,
|
|
252
|
+
localToolVersion: localVersion,
|
|
253
|
+
remoteDbVersion: remoteVersion,
|
|
254
|
+
requiredAction: 'switch_homebrew',
|
|
255
|
+
switchTarget: best.majorVersion,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
// Need to install - provide platform-specific instructions
|
|
259
|
+
const installCmd = await getInstallCommand(targetMajor);
|
|
260
|
+
return {
|
|
261
|
+
compatible: false,
|
|
262
|
+
localToolVersion: localVersion,
|
|
263
|
+
remoteDbVersion: remoteVersion,
|
|
264
|
+
requiredAction: 'install',
|
|
265
|
+
switchTarget: targetMajor,
|
|
266
|
+
error: `Your pg_dump version (${localVersion.major}) cannot dump from PostgreSQL ${remoteVersion.majorVersion}. ` +
|
|
267
|
+
`Install PostgreSQL ${targetMajor} client tools: ${installCmd}`,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
export async function getInstallCommand(majorVersion) {
|
|
271
|
+
const pm = await detectPackageManager();
|
|
272
|
+
if (!pm) {
|
|
273
|
+
return `Install PostgreSQL ${majorVersion} client tools for your platform`;
|
|
274
|
+
}
|
|
275
|
+
// Versioned package names per package manager
|
|
276
|
+
const packages = {
|
|
277
|
+
brew: `postgresql@${majorVersion}`,
|
|
278
|
+
apt: `postgresql-client-${majorVersion}`,
|
|
279
|
+
yum: `postgresql${majorVersion}`,
|
|
280
|
+
dnf: `postgresql${majorVersion}`,
|
|
281
|
+
pacman: 'postgresql-libs', // Arch doesn't version packages the same way
|
|
282
|
+
};
|
|
283
|
+
const pkg = packages[pm.id] || `postgresql-${majorVersion}`;
|
|
284
|
+
return pm.config.installTemplate.replace('{package}', pkg);
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=version-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-validator.js","sourceRoot":"","sources":["../../../engines/postgresql/version-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Qdrant REST API client utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Make an HTTP request to Qdrant REST API
|
|
6
|
+
*
|
|
7
|
+
* @param port - The HTTP port Qdrant is listening on
|
|
8
|
+
* @param method - HTTP method (GET, POST, PUT, DELETE)
|
|
9
|
+
* @param path - API path (e.g., '/collections', '/snapshots')
|
|
10
|
+
* @param body - Optional JSON body for POST/PUT requests
|
|
11
|
+
* @param timeoutMs - Request timeout in milliseconds (default: 30s)
|
|
12
|
+
*/
|
|
13
|
+
export async function qdrantApiRequest(port, method, path, body, timeoutMs = 30000) {
|
|
14
|
+
const url = `http://127.0.0.1:${port}${path}`;
|
|
15
|
+
const controller = new AbortController();
|
|
16
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
17
|
+
const options = {
|
|
18
|
+
method,
|
|
19
|
+
headers: {
|
|
20
|
+
'Content-Type': 'application/json',
|
|
21
|
+
},
|
|
22
|
+
signal: controller.signal,
|
|
23
|
+
};
|
|
24
|
+
if (body) {
|
|
25
|
+
options.body = JSON.stringify(body);
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const response = await fetch(url, options);
|
|
29
|
+
// Try to parse as JSON, fall back to text for endpoints like /healthz
|
|
30
|
+
let data;
|
|
31
|
+
const contentType = response.headers.get('content-type') || '';
|
|
32
|
+
if (contentType.includes('application/json')) {
|
|
33
|
+
data = await response.json();
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
data = await response.text();
|
|
37
|
+
}
|
|
38
|
+
return { status: response.status, data };
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
42
|
+
throw new Error(`Qdrant API request timed out after ${timeoutMs / 1000}s: ${method} ${path}`);
|
|
43
|
+
}
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
clearTimeout(timeoutId);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../engines/qdrant/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,MAAc,EACd,IAAY,EACZ,IAA8B,EAC9B,SAAS,GAAG,KAAK;IAEjB,MAAM,GAAG,GAAG,oBAAoB,IAAI,GAAG,IAAI,EAAE,CAAA;IAE7C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;IAEjE,MAAM,OAAO,GAAgB;QAC3B,MAAM;QACN,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAA;IAED,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAE1C,sEAAsE;QACtE,IAAI,IAAa,CAAA;QACjB,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QAC9D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC9B,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAA;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CACb,sCAAsC,SAAS,GAAG,IAAI,MAAM,MAAM,IAAI,IAAI,EAAE,CAC7E,CAAA;QACH,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qdrant backup module
|
|
3
|
+
* Supports snapshot-based backup using Qdrant's REST API
|
|
4
|
+
*/
|
|
5
|
+
import { mkdir, stat, copyFile, readdir } from 'fs/promises';
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
import { join, dirname } from 'path';
|
|
8
|
+
import { logDebug } from '../../core/error-handler.js';
|
|
9
|
+
import { paths } from '../../config/paths.js';
|
|
10
|
+
import { qdrantApiRequest } from './api-client.js';
|
|
11
|
+
// Backup operations may take longer than the default timeout
|
|
12
|
+
const BACKUP_TIMEOUT_MS = 600000; // 10 minutes
|
|
13
|
+
/**
|
|
14
|
+
* Create a snapshot backup using Qdrant's REST API
|
|
15
|
+
* This creates a full snapshot of the entire Qdrant instance
|
|
16
|
+
*/
|
|
17
|
+
export async function createBackup(container, outputPath, _options) {
|
|
18
|
+
const { port, name } = container;
|
|
19
|
+
// Ensure output directory exists
|
|
20
|
+
const outputDir = dirname(outputPath);
|
|
21
|
+
if (!existsSync(outputDir)) {
|
|
22
|
+
await mkdir(outputDir, { recursive: true });
|
|
23
|
+
}
|
|
24
|
+
// Trigger snapshot creation via REST API
|
|
25
|
+
logDebug(`Creating Qdrant snapshot via REST API on port ${port}`);
|
|
26
|
+
const response = await qdrantApiRequest(port, 'POST', '/snapshots', undefined, BACKUP_TIMEOUT_MS);
|
|
27
|
+
if (response.status !== 200) {
|
|
28
|
+
throw new Error(`Failed to create Qdrant snapshot: ${JSON.stringify(response.data)}`);
|
|
29
|
+
}
|
|
30
|
+
const snapshotData = response.data;
|
|
31
|
+
const snapshotName = snapshotData?.result?.name;
|
|
32
|
+
if (!snapshotName) {
|
|
33
|
+
throw new Error(`Qdrant snapshot creation failed: no snapshot name returned`);
|
|
34
|
+
}
|
|
35
|
+
logDebug(`Qdrant snapshot created: ${snapshotName}`);
|
|
36
|
+
// The snapshot is stored in the data directory's snapshots folder
|
|
37
|
+
const dataDir = paths.getContainerDataPath(name, { engine: 'qdrant' });
|
|
38
|
+
const snapshotsDir = join(dataDir, 'snapshots');
|
|
39
|
+
const snapshotPath = join(snapshotsDir, snapshotName);
|
|
40
|
+
// Wait for the snapshot file to be ready and fully written
|
|
41
|
+
// Qdrant writes snapshots asynchronously, so we need to wait for both:
|
|
42
|
+
// 1. The file to exist
|
|
43
|
+
// 2. The file size to stabilize (no longer being written)
|
|
44
|
+
const maxWait = 60000; // 60 seconds
|
|
45
|
+
const startTime = Date.now();
|
|
46
|
+
let lastSize = -1;
|
|
47
|
+
while (Date.now() - startTime < maxWait) {
|
|
48
|
+
if (existsSync(snapshotPath)) {
|
|
49
|
+
try {
|
|
50
|
+
const currentStats = await stat(snapshotPath);
|
|
51
|
+
if (currentStats.size > 0 && currentStats.size === lastSize) {
|
|
52
|
+
// Size hasn't changed, file is likely complete
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
lastSize = currentStats.size;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// File may have been deleted or inaccessible between existsSync and stat
|
|
59
|
+
// Reset lastSize and continue polling
|
|
60
|
+
lastSize = -1;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
64
|
+
}
|
|
65
|
+
if (!existsSync(snapshotPath)) {
|
|
66
|
+
throw new Error(`Qdrant snapshot file not found at ${snapshotPath} after timeout`);
|
|
67
|
+
}
|
|
68
|
+
// Copy snapshot to output path
|
|
69
|
+
await copyFile(snapshotPath, outputPath);
|
|
70
|
+
const stats = await stat(outputPath);
|
|
71
|
+
return {
|
|
72
|
+
path: outputPath,
|
|
73
|
+
format: 'snapshot',
|
|
74
|
+
size: stats.size,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create a backup for cloning purposes
|
|
79
|
+
* Uses snapshot format for reliable data transfer
|
|
80
|
+
*/
|
|
81
|
+
export async function createCloneBackup(container, outputPath) {
|
|
82
|
+
return createBackup(container, outputPath, { database: 'default' });
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* List available snapshots for a container
|
|
86
|
+
*/
|
|
87
|
+
export async function listSnapshots(container) {
|
|
88
|
+
const { name } = container;
|
|
89
|
+
const dataDir = paths.getContainerDataPath(name, { engine: 'qdrant' });
|
|
90
|
+
const snapshotsDir = join(dataDir, 'snapshots');
|
|
91
|
+
if (!existsSync(snapshotsDir)) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
const files = await readdir(snapshotsDir);
|
|
95
|
+
const snapshotFiles = files.filter((file) => file.endsWith('.snapshot'));
|
|
96
|
+
// Stat all snapshot files in parallel for better performance
|
|
97
|
+
// Filter out any files that fail to stat (e.g., deleted during iteration)
|
|
98
|
+
const statsResults = await Promise.all(snapshotFiles.map(async (file) => {
|
|
99
|
+
const filePath = join(snapshotsDir, file);
|
|
100
|
+
try {
|
|
101
|
+
const stats = await stat(filePath);
|
|
102
|
+
return {
|
|
103
|
+
name: file,
|
|
104
|
+
createdAt: stats.mtime.toISOString(),
|
|
105
|
+
size: stats.size,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// File may have been deleted between readdir and stat
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}));
|
|
113
|
+
return statsResults.filter((result) => result !== null);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../../engines/qdrant/backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qdrant Binary Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles downloading, extracting, and managing Qdrant binaries from hostdb.
|
|
5
|
+
* Extends BaseBinaryManager for shared download/extraction logic.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseBinaryManager, } from '../../core/base-binary-manager.js';
|
|
8
|
+
import { getBinaryUrl } from './binary-urls.js';
|
|
9
|
+
import { normalizeVersion } from './version-maps.js';
|
|
10
|
+
import { Engine } from '../../types/index.js';
|
|
11
|
+
class QdrantBinaryManager extends BaseBinaryManager {
|
|
12
|
+
config = {
|
|
13
|
+
engine: Engine.Qdrant,
|
|
14
|
+
engineName: 'qdrant',
|
|
15
|
+
displayName: 'Qdrant',
|
|
16
|
+
serverBinary: 'qdrant',
|
|
17
|
+
};
|
|
18
|
+
getBinaryUrlFromModule(version, platform, arch) {
|
|
19
|
+
return getBinaryUrl(version, platform, arch);
|
|
20
|
+
}
|
|
21
|
+
normalizeVersionFromModule(version) {
|
|
22
|
+
return normalizeVersion(version);
|
|
23
|
+
}
|
|
24
|
+
parseVersionFromOutput(stdout) {
|
|
25
|
+
// Extract version from output like "qdrant 1.16.3" or "v1.16.3"
|
|
26
|
+
const match = stdout.match(/(?:qdrant\s+)?v?(\d+\.\d+\.\d+)/);
|
|
27
|
+
return match?.[1] ?? null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export const qdrantBinaryManager = new QdrantBinaryManager();
|
|
31
|
+
//# sourceMappingURL=binary-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-manager.js","sourceRoot":"","sources":["../../../engines/qdrant/binary-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,iBAAiB,GAElB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,MAAM,EAA4B,MAAM,aAAa,CAAA;AAE9D,MAAM,mBAAoB,SAAQ,iBAAiB;IAC9B,MAAM,GAAwB;QAC/C,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,QAAQ;QACrB,YAAY,EAAE,QAAQ;KACvB,CAAA;IAES,sBAAsB,CAC9B,OAAe,EACf,QAAkB,EAClB,IAAU;QAEV,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC9C,CAAC;IAES,0BAA0B,CAAC,OAAe;QAClD,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAES,sBAAsB,CAAC,MAAc;QAC7C,gEAAgE;QAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;QAC7D,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { QDRANT_VERSION_MAP } from './version-maps.js';
|
|
2
|
+
import { buildHostdbUrl } from '../../core/hostdb-client.js';
|
|
3
|
+
import { logDebug } from '../../core/error-handler.js';
|
|
4
|
+
import { Engine, Platform } from '../../types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Supported platform identifiers for hostdb downloads.
|
|
7
|
+
* hostdb uses standard Node.js platform naming - this set validates
|
|
8
|
+
* that a platform/arch combination is supported, not transforms it.
|
|
9
|
+
*/
|
|
10
|
+
const SUPPORTED_PLATFORMS = new Set([
|
|
11
|
+
'darwin-arm64',
|
|
12
|
+
'darwin-x64',
|
|
13
|
+
'linux-arm64',
|
|
14
|
+
'linux-x64',
|
|
15
|
+
'win32-x64',
|
|
16
|
+
]);
|
|
17
|
+
/**
|
|
18
|
+
* Get the hostdb platform identifier
|
|
19
|
+
*
|
|
20
|
+
* hostdb uses standard platform naming that matches Node.js identifiers directly.
|
|
21
|
+
* This function validates the platform/arch combination is supported.
|
|
22
|
+
*
|
|
23
|
+
* @param platform - Node.js platform (e.g., 'darwin', 'linux', 'win32')
|
|
24
|
+
* @param arch - Node.js architecture (e.g., 'arm64', 'x64')
|
|
25
|
+
* @returns hostdb platform identifier or null if unsupported
|
|
26
|
+
*/
|
|
27
|
+
export function getHostdbPlatform(platform, arch) {
|
|
28
|
+
const key = `${platform}-${arch}`;
|
|
29
|
+
return SUPPORTED_PLATFORMS.has(key) ? key : null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Build the download URL for Qdrant binaries from hostdb
|
|
33
|
+
*
|
|
34
|
+
* Format: https://registry.layerbase.host/qdrant-{version}/qdrant-{version}-{platform}-{arch}.{ext}
|
|
35
|
+
*
|
|
36
|
+
* @param version - Qdrant version (e.g., '1', '1.16.3')
|
|
37
|
+
* @param platform - Platform identifier (e.g., 'darwin', 'linux', 'win32')
|
|
38
|
+
* @param arch - Architecture identifier (e.g., 'arm64', 'x64')
|
|
39
|
+
* @returns Download URL for the binary
|
|
40
|
+
*/
|
|
41
|
+
export function getBinaryUrl(version, platform, arch) {
|
|
42
|
+
const platformKey = `${platform}-${arch}`;
|
|
43
|
+
const hostdbPlatform = getHostdbPlatform(platform, arch);
|
|
44
|
+
if (!hostdbPlatform) {
|
|
45
|
+
const supported = Array.from(SUPPORTED_PLATFORMS).join(', ');
|
|
46
|
+
throw new Error(`Unsupported platform: ${platformKey}. Supported platforms: ${supported}`);
|
|
47
|
+
}
|
|
48
|
+
// Normalize version (handles major version lookup and X.Y -> X.Y.Z conversion)
|
|
49
|
+
const fullVersion = normalizeVersion(version, QDRANT_VERSION_MAP);
|
|
50
|
+
const ext = platform === Platform.Win32 ? 'zip' : 'tar.gz';
|
|
51
|
+
return buildHostdbUrl(Engine.Qdrant, {
|
|
52
|
+
version: fullVersion,
|
|
53
|
+
hostdbPlatform,
|
|
54
|
+
extension: ext,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Normalize version string to X.Y.Z format
|
|
59
|
+
*
|
|
60
|
+
* @param version - Version string (e.g., '1', '1.16', '1.16.3')
|
|
61
|
+
* @param versionMap - Optional version map for major version lookup
|
|
62
|
+
* @returns Normalized version (e.g., '1.16.3')
|
|
63
|
+
*/
|
|
64
|
+
function normalizeVersion(version, versionMap = QDRANT_VERSION_MAP) {
|
|
65
|
+
// Check if it's an exact key in the map (handles "1", "1.16", etc.)
|
|
66
|
+
if (versionMap[version]) {
|
|
67
|
+
return versionMap[version];
|
|
68
|
+
}
|
|
69
|
+
const parts = version.split('.');
|
|
70
|
+
// If it's already a full version (X.Y.Z), return as-is
|
|
71
|
+
if (parts.length === 3) {
|
|
72
|
+
return version;
|
|
73
|
+
}
|
|
74
|
+
// For two-part versions (e.g., "1.16"), first try exact two-part key, then fall back to major
|
|
75
|
+
if (parts.length === 2) {
|
|
76
|
+
const twoPart = `${parts[0]}.${parts[1]}`;
|
|
77
|
+
if (versionMap[twoPart]) {
|
|
78
|
+
return versionMap[twoPart];
|
|
79
|
+
}
|
|
80
|
+
// Fall back to major version for latest patch
|
|
81
|
+
const major = parts[0];
|
|
82
|
+
const mapped = versionMap[major];
|
|
83
|
+
if (mapped) {
|
|
84
|
+
return mapped;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Unknown version format - log and return as-is
|
|
88
|
+
// This may cause download failures if the version doesn't exist in hostdb
|
|
89
|
+
logDebug(`Qdrant version '${version}' not in version map, may not be available in hostdb`);
|
|
90
|
+
return version;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=binary-urls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-urls.js","sourceRoot":"","sources":["../../../engines/qdrant/binary-urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAa,MAAM,aAAa,CAAA;AAEzD;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,cAAc;IACd,YAAY;IACZ,aAAa;IACb,WAAW;IACX,WAAW;CACZ,CAAC,CAAA;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAkB,EAClB,IAAU;IAEV,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAA;IACjC,OAAO,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AAClD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,QAAkB,EAClB,IAAU;IAEV,MAAM,WAAW,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAA;IACzC,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACxD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5D,MAAM,IAAI,KAAK,CACb,yBAAyB,WAAW,0BAA0B,SAAS,EAAE,CAC1E,CAAA;IACH,CAAC;IAED,+EAA+E;IAC/E,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;IACjE,MAAM,GAAG,GAAG,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;IAE1D,OAAO,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE;QACnC,OAAO,EAAE,WAAW;QACpB,cAAc;QACd,SAAS,EAAE,GAAG;KACf,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CACvB,OAAe,EACf,aAAqC,kBAAkB;IAEvD,oEAAoE;IACpE,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEhC,uDAAuD;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,8FAA8F;IAC9F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QACzC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC;QACD,8CAA8C;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACtB,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QAChC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,0EAA0E;IAC1E,QAAQ,CACN,mBAAmB,OAAO,sDAAsD,CACjF,CAAA;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Qdrant CLI utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides common functions for locating Qdrant binaries,
|
|
5
|
+
* used by both backup.ts and restore.ts to avoid duplication.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync } from 'fs';
|
|
8
|
+
import { configManager } from '../../core/config-manager.js';
|
|
9
|
+
import { platformService } from '../../core/platform-service.js';
|
|
10
|
+
/**
|
|
11
|
+
* Get the path to qdrant binary
|
|
12
|
+
*
|
|
13
|
+
* Lookup order:
|
|
14
|
+
* 1. configManager cache (bundled/downloaded binaries from hostdb)
|
|
15
|
+
* 2. System PATH (fallback for system-installed qdrant)
|
|
16
|
+
*
|
|
17
|
+
* @returns Path to qdrant or null if not found
|
|
18
|
+
*/
|
|
19
|
+
export async function getQdrantPath() {
|
|
20
|
+
// Check if we have a cached/bundled qdrant from hostdb
|
|
21
|
+
const cachedPath = await configManager.getBinaryPath('qdrant');
|
|
22
|
+
if (cachedPath && existsSync(cachedPath)) {
|
|
23
|
+
return cachedPath;
|
|
24
|
+
}
|
|
25
|
+
// Fallback to system PATH
|
|
26
|
+
return platformService.findToolPath('qdrant');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Error message for missing qdrant binary
|
|
30
|
+
* Directs users to download via hostdb (preferred) or system package manager (fallback)
|
|
31
|
+
*/
|
|
32
|
+
export const QDRANT_NOT_FOUND_ERROR = 'qdrant not found. Download Qdrant binaries:\n' +
|
|
33
|
+
' spindb engines download qdrant\n' +
|
|
34
|
+
'\n' +
|
|
35
|
+
'Or run via Docker:\n' +
|
|
36
|
+
' docker run -p 6333:6333 qdrant/qdrant\n' +
|
|
37
|
+
'\n' +
|
|
38
|
+
'See: https://qdrant.tech/documentation/guides/installation/';
|
|
39
|
+
//# sourceMappingURL=cli-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../../../engines/qdrant/cli-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAE7D;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,uDAAuD;IACvD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC9D,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,0BAA0B;IAC1B,OAAO,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GACjC,+CAA+C;IAC/C,oCAAoC;IACpC,IAAI;IACJ,sBAAsB;IACtB,2CAA2C;IAC3C,IAAI;IACJ,6DAA6D,CAAA"}
|