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