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,446 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Valkey restore module
|
|
3
|
-
* Supports two backup formats:
|
|
4
|
-
* - RDB: Binary snapshot (restored by copying to data dir)
|
|
5
|
-
* - Text: Valkey commands (.valkey file, restored by piping to valkey-cli)
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { spawn } from 'child_process'
|
|
9
|
-
import { copyFile, open } from 'fs/promises'
|
|
10
|
-
import { existsSync, statSync, createReadStream } from 'fs'
|
|
11
|
-
import { join } from 'path'
|
|
12
|
-
import { paths } from '../../config/paths'
|
|
13
|
-
import { logDebug } from '../../core/error-handler'
|
|
14
|
-
import { getValkeyCliPath, VALKEY_CLI_NOT_FOUND_ERROR } from './cli-utils'
|
|
15
|
-
import type { BackupFormat, RestoreResult } from '../../types'
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Common Valkey commands used to detect text-based backup files
|
|
19
|
-
* These are the commands typically found at the start of a Valkey command dump
|
|
20
|
-
*/
|
|
21
|
-
const VALKEY_COMMANDS = [
|
|
22
|
-
'SET',
|
|
23
|
-
'GET',
|
|
24
|
-
'DEL',
|
|
25
|
-
'MSET',
|
|
26
|
-
'MGET',
|
|
27
|
-
'SETNX',
|
|
28
|
-
'SETEX',
|
|
29
|
-
'PSETEX',
|
|
30
|
-
'APPEND',
|
|
31
|
-
'HSET',
|
|
32
|
-
'HGET',
|
|
33
|
-
'HMSET',
|
|
34
|
-
'HDEL',
|
|
35
|
-
'HGETALL',
|
|
36
|
-
'HSETNX',
|
|
37
|
-
'LPUSH',
|
|
38
|
-
'RPUSH',
|
|
39
|
-
'LPOP',
|
|
40
|
-
'RPOP',
|
|
41
|
-
'LSET',
|
|
42
|
-
'LINSERT',
|
|
43
|
-
'LREM',
|
|
44
|
-
'SADD',
|
|
45
|
-
'SREM',
|
|
46
|
-
'SMEMBERS',
|
|
47
|
-
'SPOP',
|
|
48
|
-
'ZADD',
|
|
49
|
-
'ZREM',
|
|
50
|
-
'ZINCRBY',
|
|
51
|
-
'ZRANGE',
|
|
52
|
-
'EXPIRE',
|
|
53
|
-
'EXPIREAT',
|
|
54
|
-
'PEXPIRE',
|
|
55
|
-
'TTL',
|
|
56
|
-
'PERSIST',
|
|
57
|
-
'FLUSHDB',
|
|
58
|
-
'FLUSHALL',
|
|
59
|
-
'SELECT',
|
|
60
|
-
'PFADD',
|
|
61
|
-
'GEOADD',
|
|
62
|
-
'XADD',
|
|
63
|
-
]
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Check if file content looks like Valkey commands
|
|
67
|
-
* Returns true if the first non-comment, non-empty lines start with valid Valkey commands
|
|
68
|
-
* Only reads first 4KB to avoid loading large files into memory
|
|
69
|
-
*/
|
|
70
|
-
async function looksLikeValkeyCommands(filePath: string): Promise<boolean> {
|
|
71
|
-
try {
|
|
72
|
-
// Read only first 4KB - enough for several lines of Valkey commands
|
|
73
|
-
const HEADER_SIZE = 4096
|
|
74
|
-
const buffer = Buffer.alloc(HEADER_SIZE)
|
|
75
|
-
|
|
76
|
-
const fd = await open(filePath, 'r')
|
|
77
|
-
let bytesRead: number
|
|
78
|
-
try {
|
|
79
|
-
const result = await fd.read(buffer, 0, HEADER_SIZE, 0)
|
|
80
|
-
bytesRead = result.bytesRead
|
|
81
|
-
} finally {
|
|
82
|
-
await fd.close()
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const content = buffer.toString('utf-8', 0, bytesRead)
|
|
86
|
-
// Use /\r?\n/ to handle both Unix (\n) and Windows (\r\n) line endings
|
|
87
|
-
const lines = content.split(/\r?\n/)
|
|
88
|
-
|
|
89
|
-
let commandsFound = 0
|
|
90
|
-
const linesToCheck = 10 // Check first 10 non-empty, non-comment lines
|
|
91
|
-
|
|
92
|
-
for (const line of lines) {
|
|
93
|
-
const trimmed = line.trim()
|
|
94
|
-
|
|
95
|
-
// Skip empty lines and comments
|
|
96
|
-
if (!trimmed || trimmed.startsWith('#')) continue
|
|
97
|
-
|
|
98
|
-
// Get the first word (command)
|
|
99
|
-
const firstWord = trimmed.split(/\s+/)[0].toUpperCase()
|
|
100
|
-
|
|
101
|
-
if (VALKEY_COMMANDS.includes(firstWord)) {
|
|
102
|
-
commandsFound++
|
|
103
|
-
if (commandsFound >= 2) {
|
|
104
|
-
// Found at least 2 valid Valkey commands - likely a Valkey dump
|
|
105
|
-
return true
|
|
106
|
-
}
|
|
107
|
-
} else {
|
|
108
|
-
// Found a line that doesn't start with a Valkey command
|
|
109
|
-
// Could be binary data or different format
|
|
110
|
-
return false
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
if (commandsFound >= linesToCheck) break
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// If we found at least one command and no invalid lines, treat as Valkey
|
|
117
|
-
return commandsFound > 0
|
|
118
|
-
} catch {
|
|
119
|
-
return false
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Detect backup format from file
|
|
125
|
-
* Supports:
|
|
126
|
-
* - RDB: Binary format starting with "REDIS" (Valkey uses same RDB format)
|
|
127
|
-
* - Text: Valkey commands (detected by .valkey extension OR content analysis)
|
|
128
|
-
*/
|
|
129
|
-
export async function detectBackupFormat(
|
|
130
|
-
filePath: string,
|
|
131
|
-
): Promise<BackupFormat> {
|
|
132
|
-
if (!existsSync(filePath)) {
|
|
133
|
-
throw new Error(`Backup file not found: ${filePath}`)
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const stats = statSync(filePath)
|
|
137
|
-
|
|
138
|
-
if (stats.isDirectory()) {
|
|
139
|
-
return {
|
|
140
|
-
format: 'unknown',
|
|
141
|
-
description: 'Directory found - Valkey uses single file backups',
|
|
142
|
-
restoreCommand:
|
|
143
|
-
'Valkey requires a single .rdb or .valkey file for restore',
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Check file extension first for .valkey text files
|
|
148
|
-
if (filePath.endsWith('.valkey')) {
|
|
149
|
-
return {
|
|
150
|
-
format: 'text',
|
|
151
|
-
description: 'Valkey text commands',
|
|
152
|
-
restoreCommand:
|
|
153
|
-
'Pipe commands to valkey-cli (spindb restore handles this)',
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Check file contents for RDB format (binary, starts with "REDIS")
|
|
158
|
-
// Note: Valkey uses the same RDB format as Redis for compatibility
|
|
159
|
-
try {
|
|
160
|
-
const buffer = Buffer.alloc(5)
|
|
161
|
-
const fd = await open(filePath, 'r')
|
|
162
|
-
try {
|
|
163
|
-
await fd.read(buffer, 0, 5, 0)
|
|
164
|
-
const header = buffer.toString('ascii')
|
|
165
|
-
|
|
166
|
-
if (header === 'REDIS') {
|
|
167
|
-
return {
|
|
168
|
-
format: 'rdb',
|
|
169
|
-
description: 'Valkey RDB snapshot',
|
|
170
|
-
restoreCommand:
|
|
171
|
-
'Copy to data directory and restart Valkey (spindb restore handles this)',
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
} finally {
|
|
175
|
-
await fd.close().catch(() => {})
|
|
176
|
-
}
|
|
177
|
-
} catch (error) {
|
|
178
|
-
logDebug(`Error reading backup file header: ${error}`)
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// Check file extension as fallback for RDB
|
|
182
|
-
if (filePath.endsWith('.rdb')) {
|
|
183
|
-
return {
|
|
184
|
-
format: 'rdb',
|
|
185
|
-
description: 'Valkey RDB snapshot (detected by extension)',
|
|
186
|
-
restoreCommand:
|
|
187
|
-
'Copy to data directory and restart Valkey (spindb restore handles this)',
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// Content-based detection: check if file contains Valkey commands
|
|
192
|
-
// This allows files like "users.txt" or "data" to be detected as Valkey text dumps
|
|
193
|
-
if (await looksLikeValkeyCommands(filePath)) {
|
|
194
|
-
return {
|
|
195
|
-
format: 'text',
|
|
196
|
-
description: 'Valkey text commands (detected by content)',
|
|
197
|
-
restoreCommand:
|
|
198
|
-
'Pipe commands to valkey-cli (spindb restore handles this)',
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
return {
|
|
203
|
-
format: 'unknown',
|
|
204
|
-
description: 'Unknown backup format',
|
|
205
|
-
restoreCommand: 'Use .rdb (RDB snapshot) or file with Valkey commands',
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// Restore options for Valkey
|
|
210
|
-
export type RestoreOptions = {
|
|
211
|
-
containerName: string
|
|
212
|
-
dataDir?: string
|
|
213
|
-
// Port for running Valkey instance (required for text restore)
|
|
214
|
-
port?: number
|
|
215
|
-
// Database number to restore to (default: 0)
|
|
216
|
-
database?: string
|
|
217
|
-
// Clear database before restoring (FLUSHDB)
|
|
218
|
-
flush?: boolean
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Restore from text backup (.valkey file)
|
|
223
|
-
* Streams commands to valkey-cli on the running Valkey instance
|
|
224
|
-
*/
|
|
225
|
-
async function restoreTextBackup(
|
|
226
|
-
backupPath: string,
|
|
227
|
-
port: number,
|
|
228
|
-
database: string,
|
|
229
|
-
flush: boolean = false,
|
|
230
|
-
): Promise<RestoreResult> {
|
|
231
|
-
const valkeyCli = await getValkeyCliPath()
|
|
232
|
-
if (!valkeyCli) {
|
|
233
|
-
throw new Error(VALKEY_CLI_NOT_FOUND_ERROR)
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
return new Promise<RestoreResult>((resolve, reject) => {
|
|
237
|
-
const args = ['-h', '127.0.0.1', '-p', String(port), '-n', database]
|
|
238
|
-
const proc = spawn(valkeyCli, args, {
|
|
239
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
240
|
-
})
|
|
241
|
-
|
|
242
|
-
let stdout = ''
|
|
243
|
-
let stderr = ''
|
|
244
|
-
let streamError: Error | null = null
|
|
245
|
-
|
|
246
|
-
proc.stdout.on('data', (data) => {
|
|
247
|
-
stdout += data.toString()
|
|
248
|
-
})
|
|
249
|
-
|
|
250
|
-
proc.stderr.on('data', (data) => {
|
|
251
|
-
stderr += data.toString()
|
|
252
|
-
})
|
|
253
|
-
|
|
254
|
-
proc.on('close', (code) => {
|
|
255
|
-
// If there was a stream error, report it
|
|
256
|
-
if (streamError) {
|
|
257
|
-
reject(streamError)
|
|
258
|
-
return
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
if (code === 0) {
|
|
262
|
-
resolve({
|
|
263
|
-
format: 'text',
|
|
264
|
-
stdout: stdout || 'Valkey commands executed successfully',
|
|
265
|
-
stderr: stderr || undefined,
|
|
266
|
-
code: 0,
|
|
267
|
-
})
|
|
268
|
-
} else {
|
|
269
|
-
reject(
|
|
270
|
-
new Error(
|
|
271
|
-
`valkey-cli exited with code ${code}${stderr ? `: ${stderr}` : ''}`,
|
|
272
|
-
),
|
|
273
|
-
)
|
|
274
|
-
}
|
|
275
|
-
})
|
|
276
|
-
|
|
277
|
-
proc.on('error', (error) => {
|
|
278
|
-
reject(new Error(`Failed to spawn valkey-cli: ${error.message}`))
|
|
279
|
-
})
|
|
280
|
-
|
|
281
|
-
// Prepend FLUSHDB if requested (clear database before restore)
|
|
282
|
-
if (flush) {
|
|
283
|
-
logDebug('Prepending FLUSHDB to clear database before restore')
|
|
284
|
-
proc.stdin.write('FLUSHDB\n')
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
// Stream backup file to valkey-cli stdin
|
|
288
|
-
const fileStream = createReadStream(backupPath, { encoding: 'utf-8' })
|
|
289
|
-
|
|
290
|
-
fileStream.on('error', (error) => {
|
|
291
|
-
streamError = new Error(`Failed to read backup file: ${error.message}`)
|
|
292
|
-
fileStream.destroy()
|
|
293
|
-
proc.stdin.end()
|
|
294
|
-
})
|
|
295
|
-
|
|
296
|
-
proc.stdin.on('error', (error) => {
|
|
297
|
-
// Handle stdin errors (e.g., process closed unexpectedly)
|
|
298
|
-
streamError = new Error(
|
|
299
|
-
`Failed to write to valkey-cli stdin: ${error.message}`,
|
|
300
|
-
)
|
|
301
|
-
fileStream.destroy()
|
|
302
|
-
})
|
|
303
|
-
|
|
304
|
-
fileStream.pipe(proc.stdin)
|
|
305
|
-
})
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
/**
|
|
309
|
-
* Restore from RDB backup
|
|
310
|
-
*
|
|
311
|
-
* IMPORTANT: Valkey must be stopped before RDB restore.
|
|
312
|
-
* The RDB file is copied to the data directory, then Valkey should be restarted.
|
|
313
|
-
*/
|
|
314
|
-
async function restoreRdbBackup(
|
|
315
|
-
backupPath: string,
|
|
316
|
-
containerName: string,
|
|
317
|
-
dataDir?: string,
|
|
318
|
-
): Promise<RestoreResult> {
|
|
319
|
-
const targetDir =
|
|
320
|
-
dataDir || paths.getContainerDataPath(containerName, { engine: 'valkey' })
|
|
321
|
-
const targetPath = join(targetDir, 'dump.rdb')
|
|
322
|
-
|
|
323
|
-
logDebug(`Restoring RDB to: ${targetPath}`)
|
|
324
|
-
|
|
325
|
-
// Copy backup to data directory
|
|
326
|
-
await copyFile(backupPath, targetPath)
|
|
327
|
-
|
|
328
|
-
return {
|
|
329
|
-
format: 'rdb',
|
|
330
|
-
stdout: `Restored RDB to ${targetPath}. Restart Valkey to load the data.`,
|
|
331
|
-
code: 0,
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* Restore from backup
|
|
337
|
-
* Supports:
|
|
338
|
-
* - RDB: Copy to data directory (requires Valkey to be stopped)
|
|
339
|
-
* - Text: Pipe commands to valkey-cli (requires Valkey to be running)
|
|
340
|
-
*/
|
|
341
|
-
export async function restoreBackup(
|
|
342
|
-
backupPath: string,
|
|
343
|
-
options: RestoreOptions,
|
|
344
|
-
): Promise<RestoreResult> {
|
|
345
|
-
const {
|
|
346
|
-
containerName,
|
|
347
|
-
dataDir,
|
|
348
|
-
port,
|
|
349
|
-
database = '0',
|
|
350
|
-
flush = false,
|
|
351
|
-
} = options
|
|
352
|
-
|
|
353
|
-
if (!existsSync(backupPath)) {
|
|
354
|
-
throw new Error(`Backup file not found: ${backupPath}`)
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
// Detect backup format
|
|
358
|
-
const format = await detectBackupFormat(backupPath)
|
|
359
|
-
logDebug(`Detected backup format: ${format.format}`)
|
|
360
|
-
|
|
361
|
-
if (format.format === 'text') {
|
|
362
|
-
// Text format - pipe to valkey-cli (Valkey must be running)
|
|
363
|
-
if (!port) {
|
|
364
|
-
throw new Error(
|
|
365
|
-
'Port is required for restoring .valkey text files. Valkey must be running.',
|
|
366
|
-
)
|
|
367
|
-
}
|
|
368
|
-
return restoreTextBackup(backupPath, port, database, flush)
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
if (format.format === 'rdb') {
|
|
372
|
-
// RDB format - copy to data directory (Valkey should be stopped)
|
|
373
|
-
// Note: RDB restore always replaces everything (full snapshot)
|
|
374
|
-
return restoreRdbBackup(backupPath, containerName, dataDir)
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
throw new Error(
|
|
378
|
-
`Invalid backup format: ${format.format}. Use .rdb (RDB snapshot) or .valkey (text commands).`,
|
|
379
|
-
)
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
/**
|
|
383
|
-
* Parse Valkey connection string
|
|
384
|
-
* Format: redis://[user:password@]host[:port][/database]
|
|
385
|
-
* (Uses redis:// scheme for client compatibility)
|
|
386
|
-
*
|
|
387
|
-
* Valkey databases are numbered 0-15 (default is 0)
|
|
388
|
-
*/
|
|
389
|
-
export function parseConnectionString(connectionString: string): {
|
|
390
|
-
host: string
|
|
391
|
-
port: number
|
|
392
|
-
database: string
|
|
393
|
-
password?: string
|
|
394
|
-
} {
|
|
395
|
-
if (!connectionString || typeof connectionString !== 'string') {
|
|
396
|
-
throw new Error(
|
|
397
|
-
'Invalid Valkey connection string: expected a non-empty string',
|
|
398
|
-
)
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
let url: URL
|
|
402
|
-
try {
|
|
403
|
-
url = new URL(connectionString)
|
|
404
|
-
} catch (error) {
|
|
405
|
-
// Mask credentials in error message if present
|
|
406
|
-
const sanitized = connectionString.replace(
|
|
407
|
-
/\/\/([^:]+):([^@]+)@/,
|
|
408
|
-
'//***:***@',
|
|
409
|
-
)
|
|
410
|
-
throw new Error(
|
|
411
|
-
`Invalid Valkey connection string: "${sanitized}". ` +
|
|
412
|
-
`Expected format: redis://[password@]host[:port][/database]`,
|
|
413
|
-
{ cause: error },
|
|
414
|
-
)
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
// Validate protocol - accept both redis:// and rediss:// for compatibility
|
|
418
|
-
if (url.protocol !== 'redis:' && url.protocol !== 'rediss:') {
|
|
419
|
-
throw new Error(
|
|
420
|
-
`Invalid Valkey connection string: unsupported protocol "${url.protocol}". ` +
|
|
421
|
-
`Expected "redis://" or "rediss://"`,
|
|
422
|
-
)
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
const host = url.hostname || '127.0.0.1'
|
|
426
|
-
const port = parseInt(url.port, 10) || 6379
|
|
427
|
-
|
|
428
|
-
// Database is in pathname (e.g., /0, /1, etc.)
|
|
429
|
-
const dbStr = url.pathname.replace(/^\//, '') || '0'
|
|
430
|
-
const dbNum = parseInt(dbStr, 10)
|
|
431
|
-
|
|
432
|
-
// Validate database number (0-15)
|
|
433
|
-
if (isNaN(dbNum) || dbNum < 0 || dbNum > 15) {
|
|
434
|
-
throw new Error(`Invalid Valkey database number: ${dbStr}. Must be 0-15.`)
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
// Valkey uses password only (no username), but URL might have username field
|
|
438
|
-
const password = url.password || url.username || undefined
|
|
439
|
-
|
|
440
|
-
return {
|
|
441
|
-
host,
|
|
442
|
-
port,
|
|
443
|
-
database: String(dbNum),
|
|
444
|
-
password,
|
|
445
|
-
}
|
|
446
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Valkey Version Maps
|
|
3
|
-
*
|
|
4
|
-
* TEMPORARY: This version map will be replaced by the hostdb npm package once published.
|
|
5
|
-
* Until then, manually keep this in sync with robertjbass/hostdb releases.json:
|
|
6
|
-
* https://github.com/robertjbass/hostdb/blob/main/releases.json
|
|
7
|
-
*
|
|
8
|
-
* When updating versions:
|
|
9
|
-
* 1. Check hostdb releases.json for available versions
|
|
10
|
-
* 2. Update VALKEY_VERSION_MAP to match
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { logDebug } from '../../core/error-handler'
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Map of major Valkey versions to their latest stable patch versions.
|
|
17
|
-
* Must match versions available in hostdb releases.json.
|
|
18
|
-
*/
|
|
19
|
-
export const VALKEY_VERSION_MAP: Record<string, string> = {
|
|
20
|
-
// 1-part: major version -> latest
|
|
21
|
-
'8': '8.0.6',
|
|
22
|
-
'9': '9.0.1',
|
|
23
|
-
// 2-part: major.minor -> latest patch
|
|
24
|
-
'8.0': '8.0.6',
|
|
25
|
-
'9.0': '9.0.1',
|
|
26
|
-
// 3-part: exact version (identity mapping)
|
|
27
|
-
'8.0.6': '8.0.6',
|
|
28
|
-
'9.0.1': '9.0.1',
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Supported major Valkey versions (1-part format).
|
|
33
|
-
* Used for grouping and display purposes.
|
|
34
|
-
*/
|
|
35
|
-
export const SUPPORTED_MAJOR_VERSIONS = ['8', '9']
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Get the full version string for a major version.
|
|
39
|
-
*
|
|
40
|
-
* @param majorVersion - Major version (e.g., '8', '9')
|
|
41
|
-
* @returns Full version string (e.g., '8.0.6') or null if not supported
|
|
42
|
-
*/
|
|
43
|
-
export function getFullVersion(majorVersion: string): string | null {
|
|
44
|
-
return VALKEY_VERSION_MAP[majorVersion] || null
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Normalize a version string to X.Y.Z format.
|
|
49
|
-
*
|
|
50
|
-
* @param version - Version string (e.g., '8', '8.0', '8.0.6')
|
|
51
|
-
* @returns Normalized version (e.g., '8.0.6')
|
|
52
|
-
*/
|
|
53
|
-
export function normalizeVersion(version: string): string {
|
|
54
|
-
// If it's in the version map (major, major.minor, or full version), return the mapped value
|
|
55
|
-
// Note: Full versions have identity mappings (e.g., '8.0.6' => '8.0.6')
|
|
56
|
-
const fullVersion = VALKEY_VERSION_MAP[version]
|
|
57
|
-
if (fullVersion) {
|
|
58
|
-
return fullVersion
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Unknown version - warn and return as-is
|
|
62
|
-
// This may cause download failures if the version doesn't exist in hostdb
|
|
63
|
-
const parts = version.split('.')
|
|
64
|
-
|
|
65
|
-
// Validate format: must be 1-3 numeric segments (e.g., "8", "8.0", "8.0.6")
|
|
66
|
-
const isValidFormat =
|
|
67
|
-
parts.length >= 1 &&
|
|
68
|
-
parts.length <= 3 &&
|
|
69
|
-
parts.every((p) => /^\d+$/.test(p))
|
|
70
|
-
|
|
71
|
-
if (!isValidFormat) {
|
|
72
|
-
logDebug(
|
|
73
|
-
`Valkey version '${version}' has invalid format, may not be available in hostdb`,
|
|
74
|
-
)
|
|
75
|
-
} else {
|
|
76
|
-
logDebug(
|
|
77
|
-
`Valkey version '${version}' not in version map, may not be available in hostdb`,
|
|
78
|
-
)
|
|
79
|
-
}
|
|
80
|
-
return version
|
|
81
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Valkey version validation utilities
|
|
3
|
-
* Handles version parsing, comparison, and compatibility checking
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Parse a Valkey version string into components
|
|
8
|
-
* Handles formats like "8.0.6", "8.0", "v8.0.6"
|
|
9
|
-
*/
|
|
10
|
-
export function parseVersion(versionString: string): {
|
|
11
|
-
major: number
|
|
12
|
-
minor: number
|
|
13
|
-
patch: number
|
|
14
|
-
raw: string
|
|
15
|
-
} | null {
|
|
16
|
-
const cleaned = versionString.replace(/^v/, '').trim()
|
|
17
|
-
const parts = cleaned.split('.')
|
|
18
|
-
|
|
19
|
-
if (parts.length < 1) return null
|
|
20
|
-
|
|
21
|
-
const major = parseInt(parts[0], 10)
|
|
22
|
-
const minor = parts[1] ? parseInt(parts[1], 10) : 0
|
|
23
|
-
const patch = parts[2] ? parseInt(parts[2], 10) : 0
|
|
24
|
-
|
|
25
|
-
if (isNaN(major)) return null
|
|
26
|
-
if (parts[1] && isNaN(minor)) return null
|
|
27
|
-
if (parts[2] && isNaN(patch)) return null
|
|
28
|
-
|
|
29
|
-
return { major, minor, patch, raw: cleaned }
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Check if a Valkey version is supported by SpinDB
|
|
34
|
-
* Minimum supported version: 8.0.0
|
|
35
|
-
* Supports Valkey 8 and 9
|
|
36
|
-
*/
|
|
37
|
-
export function isVersionSupported(version: string): boolean {
|
|
38
|
-
const parsed = parseVersion(version)
|
|
39
|
-
if (!parsed) return false
|
|
40
|
-
|
|
41
|
-
return parsed.major >= 8
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Get major version from full version string
|
|
46
|
-
* e.g., "8.0.6" -> "8"
|
|
47
|
-
*/
|
|
48
|
-
export function getMajorVersion(version: string): string {
|
|
49
|
-
const parsed = parseVersion(version)
|
|
50
|
-
return parsed ? String(parsed.major) : version
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Get major.minor version from full version string
|
|
55
|
-
* e.g., "8.0.6" -> "8.0"
|
|
56
|
-
*/
|
|
57
|
-
export function getMajorMinorVersion(version: string): string {
|
|
58
|
-
const parsed = parseVersion(version)
|
|
59
|
-
if (!parsed) return version
|
|
60
|
-
return `${parsed.major}.${parsed.minor}`
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Compare two Valkey versions
|
|
65
|
-
* Returns: -1 if a < b, 0 if a == b, 1 if a > b, null if either version cannot be parsed
|
|
66
|
-
*/
|
|
67
|
-
export function compareVersions(a: string, b: string): number | null {
|
|
68
|
-
const parsedA = parseVersion(a)
|
|
69
|
-
const parsedB = parseVersion(b)
|
|
70
|
-
|
|
71
|
-
if (!parsedA || !parsedB) {
|
|
72
|
-
return null
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (parsedA.major !== parsedB.major) {
|
|
76
|
-
return parsedA.major < parsedB.major ? -1 : 1
|
|
77
|
-
}
|
|
78
|
-
if (parsedA.minor !== parsedB.minor) {
|
|
79
|
-
return parsedA.minor < parsedB.minor ? -1 : 1
|
|
80
|
-
}
|
|
81
|
-
if (parsedA.patch !== parsedB.patch) {
|
|
82
|
-
return parsedA.patch < parsedB.patch ? -1 : 1
|
|
83
|
-
}
|
|
84
|
-
return 0
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Check if a backup version is compatible with the restore version
|
|
89
|
-
* Valkey RDB files are generally forward-compatible within major versions
|
|
90
|
-
*/
|
|
91
|
-
export function isVersionCompatible(
|
|
92
|
-
backupVersion: string,
|
|
93
|
-
restoreVersion: string,
|
|
94
|
-
): { compatible: boolean; warning?: string } {
|
|
95
|
-
const backup = parseVersion(backupVersion)
|
|
96
|
-
const restore = parseVersion(restoreVersion)
|
|
97
|
-
|
|
98
|
-
if (!backup || !restore) {
|
|
99
|
-
return {
|
|
100
|
-
compatible: true,
|
|
101
|
-
warning: 'Could not parse versions, proceeding with restore',
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Cannot restore newer RDB to older server
|
|
106
|
-
if (backup.major > restore.major) {
|
|
107
|
-
return {
|
|
108
|
-
compatible: false,
|
|
109
|
-
warning: `Cannot restore Valkey ${backupVersion} RDB backup to ${restoreVersion} server. The backup is from a newer major version.`,
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// Allow same major version
|
|
114
|
-
if (backup.major === restore.major) {
|
|
115
|
-
return { compatible: true }
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Allow upgrading from older major version (restore.major > backup.major)
|
|
119
|
-
// This is the only remaining case since we've handled: !backup || !restore,
|
|
120
|
-
// backup.major > restore.major, and backup.major === restore.major
|
|
121
|
-
return {
|
|
122
|
-
compatible: true,
|
|
123
|
-
warning: `Restoring Valkey ${backupVersion} RDB backup to ${restoreVersion} server. Valkey will upgrade the RDB format on next save.`,
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Validate that a version string matches supported format
|
|
128
|
-
export function isValidVersionFormat(version: string): boolean {
|
|
129
|
-
const parsed = parseVersion(version)
|
|
130
|
-
return parsed !== null
|
|
131
|
-
}
|