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/backup.ts
DELETED
|
@@ -1,389 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Redis backup module
|
|
3
|
-
* Supports two formats:
|
|
4
|
-
* - RDB: Binary snapshot via BGSAVE (default, compact, fast restore)
|
|
5
|
-
* - Text: Human-readable Redis commands (.redis file)
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { spawn } from 'child_process'
|
|
9
|
-
import { copyFile, stat, mkdir, writeFile } from 'fs/promises'
|
|
10
|
-
import { existsSync } from 'fs'
|
|
11
|
-
import { join, dirname } from 'path'
|
|
12
|
-
import { logDebug, logWarning } from '../../core/error-handler'
|
|
13
|
-
import { paths } from '../../config/paths'
|
|
14
|
-
import { getRedisCliPath, REDIS_CLI_NOT_FOUND_ERROR } from './cli-utils'
|
|
15
|
-
import type { ContainerConfig, BackupOptions, BackupResult } from '../../types'
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Execute a Redis command via stdin piping
|
|
19
|
-
* This is safer than shell command construction as it handles
|
|
20
|
-
* keys/values with spaces and special characters correctly
|
|
21
|
-
*/
|
|
22
|
-
async function execRedisCommand(
|
|
23
|
-
redisCli: string,
|
|
24
|
-
port: number,
|
|
25
|
-
command: string,
|
|
26
|
-
): Promise<string> {
|
|
27
|
-
return new Promise((resolve, reject) => {
|
|
28
|
-
const proc = spawn(redisCli, ['-h', '127.0.0.1', '-p', String(port)], {
|
|
29
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
let stdout = ''
|
|
33
|
-
let stderr = ''
|
|
34
|
-
|
|
35
|
-
proc.stdout.on('data', (data: Buffer) => {
|
|
36
|
-
stdout += data.toString()
|
|
37
|
-
})
|
|
38
|
-
proc.stderr.on('data', (data: Buffer) => {
|
|
39
|
-
stderr += data.toString()
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
proc.on('error', reject)
|
|
43
|
-
|
|
44
|
-
proc.on('close', (code) => {
|
|
45
|
-
if (code === 0 || code === null) {
|
|
46
|
-
resolve(stdout)
|
|
47
|
-
} else {
|
|
48
|
-
reject(new Error(stderr || `redis-cli exited with code ${code}`))
|
|
49
|
-
}
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
// Write command to stdin and close
|
|
53
|
-
proc.stdin.write(command + '\n')
|
|
54
|
-
proc.stdin.end()
|
|
55
|
-
})
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Escape a string value for Redis command output
|
|
60
|
-
* Wraps in single quotes and escapes backslashes and single quotes
|
|
61
|
-
*/
|
|
62
|
-
function escapeRedisValue(value: string): string {
|
|
63
|
-
// Escape backslashes first, then single quotes (order matters!)
|
|
64
|
-
// e.g., "test\'value" → "test\\\'value" (backslash and quote both escaped)
|
|
65
|
-
return `'${value.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}'`
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Create a text-based backup (.redis file)
|
|
70
|
-
* Exports all keys as Redis commands that can be replayed
|
|
71
|
-
*/
|
|
72
|
-
async function createTextBackup(
|
|
73
|
-
container: ContainerConfig,
|
|
74
|
-
outputPath: string,
|
|
75
|
-
): Promise<BackupResult> {
|
|
76
|
-
const { port } = container
|
|
77
|
-
|
|
78
|
-
const redisCli = await getRedisCliPath()
|
|
79
|
-
if (!redisCli) {
|
|
80
|
-
throw new Error(REDIS_CLI_NOT_FOUND_ERROR)
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const commands: string[] = []
|
|
84
|
-
commands.push('# Redis backup generated by SpinDB')
|
|
85
|
-
commands.push(`# Date: ${new Date().toISOString()}`)
|
|
86
|
-
commands.push('')
|
|
87
|
-
|
|
88
|
-
// Get all keys using KEYS * (for small datasets this is fine)
|
|
89
|
-
// For production with millions of keys, SCAN would be better
|
|
90
|
-
const keysOutput = await execRedisCommand(redisCli, port, 'KEYS *')
|
|
91
|
-
// Use /\r?\n/ to handle both Unix (\n) and Windows (\r\n) line endings
|
|
92
|
-
const keys = keysOutput
|
|
93
|
-
.trim()
|
|
94
|
-
.split(/\r?\n/)
|
|
95
|
-
.map((k) => k.trim())
|
|
96
|
-
.filter((k) => k)
|
|
97
|
-
|
|
98
|
-
logDebug(`Found ${keys.length} keys to backup`)
|
|
99
|
-
|
|
100
|
-
for (const key of keys) {
|
|
101
|
-
// Get key type - quote key to handle spaces/special chars
|
|
102
|
-
const typeOutput = await execRedisCommand(
|
|
103
|
-
redisCli,
|
|
104
|
-
port,
|
|
105
|
-
`TYPE "${key.replace(/"/g, '\\"')}"`,
|
|
106
|
-
)
|
|
107
|
-
const keyType = typeOutput.trim()
|
|
108
|
-
|
|
109
|
-
// Get TTL
|
|
110
|
-
const ttlOutput = await execRedisCommand(
|
|
111
|
-
redisCli,
|
|
112
|
-
port,
|
|
113
|
-
`TTL "${key.replace(/"/g, '\\"')}"`,
|
|
114
|
-
)
|
|
115
|
-
const ttl = parseInt(ttlOutput.trim(), 10)
|
|
116
|
-
|
|
117
|
-
// Quote the key for output commands
|
|
118
|
-
const quotedKey =
|
|
119
|
-
key.includes(' ') || /[*?[\]{}$`"'\\!<>|;&()]/.test(key)
|
|
120
|
-
? `"${key.replace(/"/g, '\\"')}"`
|
|
121
|
-
: key
|
|
122
|
-
|
|
123
|
-
switch (keyType) {
|
|
124
|
-
case 'string': {
|
|
125
|
-
const value = await execRedisCommand(
|
|
126
|
-
redisCli,
|
|
127
|
-
port,
|
|
128
|
-
`GET "${key.replace(/"/g, '\\"')}"`,
|
|
129
|
-
)
|
|
130
|
-
commands.push(`SET ${quotedKey} ${escapeRedisValue(value.trim())}`)
|
|
131
|
-
break
|
|
132
|
-
}
|
|
133
|
-
case 'hash': {
|
|
134
|
-
const hashData = await execRedisCommand(
|
|
135
|
-
redisCli,
|
|
136
|
-
port,
|
|
137
|
-
`HGETALL "${key.replace(/"/g, '\\"')}"`,
|
|
138
|
-
)
|
|
139
|
-
const lines = hashData
|
|
140
|
-
.trim()
|
|
141
|
-
.split(/\r?\n/)
|
|
142
|
-
.map((l) => l.trim())
|
|
143
|
-
.filter((l) => l)
|
|
144
|
-
if (lines.length >= 2) {
|
|
145
|
-
const pairs: string[] = []
|
|
146
|
-
for (let i = 0; i < lines.length; i += 2) {
|
|
147
|
-
const field = lines[i].trim()
|
|
148
|
-
const value = lines[i + 1]?.trim() || ''
|
|
149
|
-
// Quote field if it contains special chars
|
|
150
|
-
const quotedField =
|
|
151
|
-
field.includes(' ') || /[*?[\]{}$`"'\\!<>|;&()]/.test(field)
|
|
152
|
-
? `"${field.replace(/"/g, '\\"')}"`
|
|
153
|
-
: field
|
|
154
|
-
pairs.push(`${quotedField} ${escapeRedisValue(value)}`)
|
|
155
|
-
}
|
|
156
|
-
commands.push(`HSET ${quotedKey} ${pairs.join(' ')}`)
|
|
157
|
-
}
|
|
158
|
-
break
|
|
159
|
-
}
|
|
160
|
-
case 'list': {
|
|
161
|
-
const listData = await execRedisCommand(
|
|
162
|
-
redisCli,
|
|
163
|
-
port,
|
|
164
|
-
`LRANGE "${key.replace(/"/g, '\\"')}" 0 -1`,
|
|
165
|
-
)
|
|
166
|
-
const items = listData
|
|
167
|
-
.trim()
|
|
168
|
-
.split(/\r?\n/)
|
|
169
|
-
.map((l) => l.trim())
|
|
170
|
-
.filter((l) => l)
|
|
171
|
-
if (items.length > 0) {
|
|
172
|
-
const escapedItems = items.map((item) =>
|
|
173
|
-
escapeRedisValue(item.trim()),
|
|
174
|
-
)
|
|
175
|
-
commands.push(`RPUSH ${quotedKey} ${escapedItems.join(' ')}`)
|
|
176
|
-
}
|
|
177
|
-
break
|
|
178
|
-
}
|
|
179
|
-
case 'set': {
|
|
180
|
-
const setData = await execRedisCommand(
|
|
181
|
-
redisCli,
|
|
182
|
-
port,
|
|
183
|
-
`SMEMBERS "${key.replace(/"/g, '\\"')}"`,
|
|
184
|
-
)
|
|
185
|
-
const members = setData
|
|
186
|
-
.trim()
|
|
187
|
-
.split(/\r?\n/)
|
|
188
|
-
.map((l) => l.trim())
|
|
189
|
-
.filter((l) => l)
|
|
190
|
-
if (members.length > 0) {
|
|
191
|
-
const escapedMembers = members.map((m) => escapeRedisValue(m.trim()))
|
|
192
|
-
commands.push(`SADD ${quotedKey} ${escapedMembers.join(' ')}`)
|
|
193
|
-
}
|
|
194
|
-
break
|
|
195
|
-
}
|
|
196
|
-
case 'zset': {
|
|
197
|
-
const zsetData = await execRedisCommand(
|
|
198
|
-
redisCli,
|
|
199
|
-
port,
|
|
200
|
-
`ZRANGE "${key.replace(/"/g, '\\"')}" 0 -1 WITHSCORES`,
|
|
201
|
-
)
|
|
202
|
-
const lines = zsetData
|
|
203
|
-
.trim()
|
|
204
|
-
.split(/\r?\n/)
|
|
205
|
-
.map((l) => l.trim())
|
|
206
|
-
.filter((l) => l)
|
|
207
|
-
if (lines.length >= 2) {
|
|
208
|
-
const pairs: string[] = []
|
|
209
|
-
for (let i = 0; i < lines.length; i += 2) {
|
|
210
|
-
const member = lines[i].trim()
|
|
211
|
-
const score = lines[i + 1]?.trim() || '0'
|
|
212
|
-
pairs.push(`${score} ${escapeRedisValue(member)}`)
|
|
213
|
-
}
|
|
214
|
-
commands.push(`ZADD ${quotedKey} ${pairs.join(' ')}`)
|
|
215
|
-
}
|
|
216
|
-
break
|
|
217
|
-
}
|
|
218
|
-
default:
|
|
219
|
-
logWarning(`Skipping key ${key} with unsupported type: ${keyType}`)
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// Add EXPIRE if key has TTL
|
|
223
|
-
if (ttl > 0) {
|
|
224
|
-
commands.push(`EXPIRE ${quotedKey} ${ttl}`)
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// Ensure output directory exists
|
|
229
|
-
const outputDir = dirname(outputPath)
|
|
230
|
-
if (!existsSync(outputDir)) {
|
|
231
|
-
await mkdir(outputDir, { recursive: true })
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// Write commands to file
|
|
235
|
-
const content = commands.join('\n') + '\n'
|
|
236
|
-
await writeFile(outputPath, content, 'utf-8')
|
|
237
|
-
|
|
238
|
-
const stats = await stat(outputPath)
|
|
239
|
-
|
|
240
|
-
return {
|
|
241
|
-
path: outputPath,
|
|
242
|
-
format: 'text',
|
|
243
|
-
size: stats.size,
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Create a backup using BGSAVE (RDB format)
|
|
249
|
-
*
|
|
250
|
-
* Redis backups are RDB files (binary snapshots).
|
|
251
|
-
* The backup process:
|
|
252
|
-
* 1. Trigger BGSAVE command
|
|
253
|
-
* 2. Poll LASTSAVE until timestamp changes (backup complete)
|
|
254
|
-
* 3. Copy dump.rdb to output path
|
|
255
|
-
*/
|
|
256
|
-
async function createRdbBackup(
|
|
257
|
-
container: ContainerConfig,
|
|
258
|
-
outputPath: string,
|
|
259
|
-
): Promise<BackupResult> {
|
|
260
|
-
const { port, name } = container
|
|
261
|
-
|
|
262
|
-
const redisCli = await getRedisCliPath()
|
|
263
|
-
if (!redisCli) {
|
|
264
|
-
throw new Error(REDIS_CLI_NOT_FOUND_ERROR)
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
// Trigger background save
|
|
268
|
-
let bgsaveResponse: string
|
|
269
|
-
try {
|
|
270
|
-
bgsaveResponse = await execRedisCommand(redisCli, port, 'BGSAVE')
|
|
271
|
-
bgsaveResponse = bgsaveResponse.trim()
|
|
272
|
-
} catch (error) {
|
|
273
|
-
const execError = error as Error
|
|
274
|
-
throw new Error(`BGSAVE command failed: ${execError.message}`)
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
logDebug(`BGSAVE response: ${bgsaveResponse}`)
|
|
278
|
-
|
|
279
|
-
// Check for Redis error responses in stdout
|
|
280
|
-
// Redis returns errors like "ERR ..." or "(error) ..." in stdout
|
|
281
|
-
if (
|
|
282
|
-
bgsaveResponse.startsWith('ERR') ||
|
|
283
|
-
bgsaveResponse.startsWith('(error)')
|
|
284
|
-
) {
|
|
285
|
-
// Special case: if a save is already in progress, we can wait for it
|
|
286
|
-
if (bgsaveResponse.includes('Background save already in progress')) {
|
|
287
|
-
logDebug('BGSAVE already in progress, waiting for it to complete')
|
|
288
|
-
} else {
|
|
289
|
-
throw new Error(`BGSAVE failed: ${bgsaveResponse}`)
|
|
290
|
-
}
|
|
291
|
-
} else if (
|
|
292
|
-
!bgsaveResponse.includes('Background saving started') &&
|
|
293
|
-
!bgsaveResponse.includes('Background save already in progress')
|
|
294
|
-
) {
|
|
295
|
-
// Unexpected response - warn but continue (might be a different Redis version)
|
|
296
|
-
logDebug(
|
|
297
|
-
`Unexpected BGSAVE response (continuing anyway): ${bgsaveResponse}`,
|
|
298
|
-
)
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
// Wait for save to complete by checking rdb_bgsave_in_progress
|
|
302
|
-
// This is more reliable than LASTSAVE timestamp which has 1-second resolution
|
|
303
|
-
const startTime = Date.now()
|
|
304
|
-
const timeout = 60000 // 1 minute timeout
|
|
305
|
-
|
|
306
|
-
while (Date.now() - startTime < timeout) {
|
|
307
|
-
const infoOutput = await execRedisCommand(
|
|
308
|
-
redisCli,
|
|
309
|
-
port,
|
|
310
|
-
'INFO persistence',
|
|
311
|
-
)
|
|
312
|
-
|
|
313
|
-
// Check if BGSAVE is still in progress
|
|
314
|
-
const inProgress = infoOutput.includes('rdb_bgsave_in_progress:1')
|
|
315
|
-
if (!inProgress) {
|
|
316
|
-
// Also check for errors
|
|
317
|
-
const statusMatch = infoOutput.match(/rdb_last_bgsave_status:(\w+)/)
|
|
318
|
-
const status = statusMatch?.[1]
|
|
319
|
-
if (status === 'err') {
|
|
320
|
-
throw new Error('BGSAVE failed. Check Redis logs for details.')
|
|
321
|
-
}
|
|
322
|
-
logDebug('BGSAVE completed successfully')
|
|
323
|
-
break
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
await new Promise((r) => setTimeout(r, 100))
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
if (Date.now() - startTime >= timeout) {
|
|
330
|
-
throw new Error('BGSAVE timed out after 60 seconds')
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Get the RDB file path from Redis data directory
|
|
334
|
-
const dataDir = paths.getContainerDataPath(name, { engine: 'redis' })
|
|
335
|
-
const rdbPath = join(dataDir, 'dump.rdb')
|
|
336
|
-
|
|
337
|
-
if (!existsSync(rdbPath)) {
|
|
338
|
-
throw new Error(
|
|
339
|
-
`RDB file not found at ${rdbPath} after BGSAVE. Check Redis configuration.`,
|
|
340
|
-
)
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
// Ensure output directory exists
|
|
344
|
-
const outputDir = dirname(outputPath)
|
|
345
|
-
if (!existsSync(outputDir)) {
|
|
346
|
-
await mkdir(outputDir, { recursive: true })
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
// Copy RDB file to output path
|
|
350
|
-
await copyFile(rdbPath, outputPath)
|
|
351
|
-
|
|
352
|
-
const stats = await stat(outputPath)
|
|
353
|
-
|
|
354
|
-
return {
|
|
355
|
-
path: outputPath,
|
|
356
|
-
format: 'rdb',
|
|
357
|
-
size: stats.size,
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
/**
|
|
362
|
-
* Create a backup
|
|
363
|
-
* Supports two formats:
|
|
364
|
-
* - 'text': Human-readable Redis commands (.redis file)
|
|
365
|
-
* - 'rdb' (default): Binary RDB snapshot
|
|
366
|
-
*/
|
|
367
|
-
export async function createBackup(
|
|
368
|
-
container: ContainerConfig,
|
|
369
|
-
outputPath: string,
|
|
370
|
-
options: BackupOptions,
|
|
371
|
-
): Promise<BackupResult> {
|
|
372
|
-
// 'text' format means text-based commands for Redis
|
|
373
|
-
if (options.format === 'text') {
|
|
374
|
-
return createTextBackup(container, outputPath)
|
|
375
|
-
}
|
|
376
|
-
// Default to RDB format
|
|
377
|
-
return createRdbBackup(container, outputPath)
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
* Create a backup for cloning purposes
|
|
382
|
-
* Always uses RDB format for speed and reliability
|
|
383
|
-
*/
|
|
384
|
-
export async function createCloneBackup(
|
|
385
|
-
container: ContainerConfig,
|
|
386
|
-
outputPath: string,
|
|
387
|
-
): Promise<BackupResult> {
|
|
388
|
-
return createRdbBackup(container, outputPath)
|
|
389
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Redis Binary Manager
|
|
3
|
-
*
|
|
4
|
-
* Handles downloading, extracting, and managing Redis binaries from hostdb.
|
|
5
|
-
* Extends BaseBinaryManager for shared download/extraction logic.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
BaseBinaryManager,
|
|
10
|
-
type BinaryManagerConfig,
|
|
11
|
-
} from '../../core/base-binary-manager'
|
|
12
|
-
import { getBinaryUrl } from './binary-urls'
|
|
13
|
-
import { normalizeVersion } from './version-maps'
|
|
14
|
-
import { Engine, type Platform, type Arch } from '../../types'
|
|
15
|
-
|
|
16
|
-
class RedisBinaryManager extends BaseBinaryManager {
|
|
17
|
-
protected readonly config: BinaryManagerConfig = {
|
|
18
|
-
engine: Engine.Redis,
|
|
19
|
-
engineName: 'redis',
|
|
20
|
-
displayName: 'Redis',
|
|
21
|
-
serverBinary: 'redis-server',
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
protected getBinaryUrlFromModule(
|
|
25
|
-
version: string,
|
|
26
|
-
platform: Platform,
|
|
27
|
-
arch: Arch,
|
|
28
|
-
): string {
|
|
29
|
-
return getBinaryUrl(version, platform, arch)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
protected normalizeVersionFromModule(version: string): string {
|
|
33
|
-
return normalizeVersion(version)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
protected parseVersionFromOutput(stdout: string): string | null {
|
|
37
|
-
// Extract version from output like "Redis server v=7.4.7 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=..."
|
|
38
|
-
const match = stdout.match(/v=(\d+\.\d+\.\d+)/)
|
|
39
|
-
const altMatch = !match ? stdout.match(/(\d+\.\d+\.\d+)/) : null
|
|
40
|
-
return match?.[1] ?? altMatch?.[1] ?? null
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export const redisBinaryManager = new RedisBinaryManager()
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { REDIS_VERSION_MAP } from './version-maps'
|
|
2
|
-
import { buildHostdbUrl } from '../../core/hostdb-client'
|
|
3
|
-
import { logDebug } from '../../core/error-handler'
|
|
4
|
-
import { Engine, Platform, type Arch } from '../../types'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Supported platform identifiers for hostdb downloads.
|
|
8
|
-
* hostdb uses standard Node.js platform naming - this set validates
|
|
9
|
-
* that a platform/arch combination is supported, not transforms it.
|
|
10
|
-
*/
|
|
11
|
-
const SUPPORTED_PLATFORMS = new Set([
|
|
12
|
-
'darwin-arm64',
|
|
13
|
-
'darwin-x64',
|
|
14
|
-
'linux-arm64',
|
|
15
|
-
'linux-x64',
|
|
16
|
-
'win32-x64',
|
|
17
|
-
])
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Get the hostdb platform identifier
|
|
21
|
-
*
|
|
22
|
-
* hostdb uses standard platform naming that matches Node.js identifiers directly.
|
|
23
|
-
* This function validates the platform/arch combination is supported.
|
|
24
|
-
*
|
|
25
|
-
* @param platform - Node.js platform (e.g., 'darwin', 'linux', 'win32')
|
|
26
|
-
* @param arch - Node.js architecture (e.g., 'arm64', 'x64')
|
|
27
|
-
* @returns hostdb platform identifier or null if unsupported
|
|
28
|
-
*/
|
|
29
|
-
export function getHostdbPlatform(
|
|
30
|
-
platform: Platform,
|
|
31
|
-
arch: Arch,
|
|
32
|
-
): string | null {
|
|
33
|
-
const key = `${platform}-${arch}`
|
|
34
|
-
return SUPPORTED_PLATFORMS.has(key) ? key : null
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Build the download URL for Redis binaries from hostdb
|
|
39
|
-
*
|
|
40
|
-
* Format: https://registry.layerbase.host/redis-{version}/redis-{version}-{platform}-{arch}.{ext}
|
|
41
|
-
*
|
|
42
|
-
* @param version - Redis version (e.g., '7', '7.4.7')
|
|
43
|
-
* @param platform - Platform identifier (e.g., 'darwin', 'linux', 'win32')
|
|
44
|
-
* @param arch - Architecture identifier (e.g., 'arm64', 'x64')
|
|
45
|
-
* @returns Download URL for the binary
|
|
46
|
-
*/
|
|
47
|
-
export function getBinaryUrl(
|
|
48
|
-
version: string,
|
|
49
|
-
platform: Platform,
|
|
50
|
-
arch: Arch,
|
|
51
|
-
): string {
|
|
52
|
-
const platformKey = `${platform}-${arch}`
|
|
53
|
-
const hostdbPlatform = getHostdbPlatform(platform, arch)
|
|
54
|
-
if (!hostdbPlatform) {
|
|
55
|
-
throw new Error(`Unsupported platform: ${platformKey}`)
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Normalize version (handles major version lookup and X.Y -> X.Y.Z conversion)
|
|
59
|
-
const fullVersion = normalizeVersion(version, REDIS_VERSION_MAP)
|
|
60
|
-
const ext = platform === Platform.Win32 ? 'zip' : 'tar.gz'
|
|
61
|
-
|
|
62
|
-
return buildHostdbUrl(Engine.Redis, {
|
|
63
|
-
version: fullVersion,
|
|
64
|
-
hostdbPlatform,
|
|
65
|
-
extension: ext,
|
|
66
|
-
})
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Normalize version string to X.Y.Z format
|
|
71
|
-
*
|
|
72
|
-
* Note: Redis does not use validateSemverLikeVersion() because:
|
|
73
|
-
* 1. Redis uses a lenient approach - unknown versions log a warning and pass through
|
|
74
|
-
* 2. This allows testing new versions before they're added to the version map
|
|
75
|
-
* 3. Invalid versions will fail at download time with a clear 404 error
|
|
76
|
-
*
|
|
77
|
-
* @param version - Version string (e.g., '7', '7.4', '7.4.7')
|
|
78
|
-
* @param versionMap - Optional version map for major version lookup
|
|
79
|
-
* @returns Normalized version (e.g., '7.4.7')
|
|
80
|
-
*/
|
|
81
|
-
function normalizeVersion(
|
|
82
|
-
version: string,
|
|
83
|
-
versionMap: Record<string, string> = REDIS_VERSION_MAP,
|
|
84
|
-
): string {
|
|
85
|
-
// Check if it's an exact key in the map (handles "7", "8", "7.4", etc.)
|
|
86
|
-
if (versionMap[version]) {
|
|
87
|
-
return versionMap[version]
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const parts = version.split('.')
|
|
91
|
-
|
|
92
|
-
// If it's already a full version (X.Y.Z), return as-is
|
|
93
|
-
if (parts.length === 3) {
|
|
94
|
-
return version
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// For two-part versions (e.g., "7.4"), first try exact two-part key, then fall back to major
|
|
98
|
-
if (parts.length === 2) {
|
|
99
|
-
const twoPart = `${parts[0]}.${parts[1]}`
|
|
100
|
-
if (versionMap[twoPart]) {
|
|
101
|
-
return versionMap[twoPart]
|
|
102
|
-
}
|
|
103
|
-
// Fall back to major version for latest patch
|
|
104
|
-
const major = parts[0]
|
|
105
|
-
const mapped = versionMap[major]
|
|
106
|
-
if (mapped) {
|
|
107
|
-
return mapped
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// Unknown version format - log and return as-is
|
|
112
|
-
// This may cause download failures if the version doesn't exist in hostdb
|
|
113
|
-
logDebug(
|
|
114
|
-
`Redis version '${version}' not in version map, may not be available in hostdb`,
|
|
115
|
-
)
|
|
116
|
-
return version
|
|
117
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared Redis CLI utilities
|
|
3
|
-
*
|
|
4
|
-
* Provides common functions for locating Redis binaries,
|
|
5
|
-
* used by both backup.ts and restore.ts to avoid duplication.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { existsSync } from 'fs'
|
|
9
|
-
import { configManager } from '../../core/config-manager'
|
|
10
|
-
import { platformService } from '../../core/platform-service'
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Get the path to redis-cli binary
|
|
14
|
-
*
|
|
15
|
-
* Lookup order:
|
|
16
|
-
* 1. configManager cache (bundled/downloaded binaries from hostdb)
|
|
17
|
-
* 2. System PATH (fallback for system-installed redis-tools)
|
|
18
|
-
*
|
|
19
|
-
* @returns Path to redis-cli or null if not found
|
|
20
|
-
*/
|
|
21
|
-
export async function getRedisCliPath(): Promise<string | null> {
|
|
22
|
-
// Check if we have a cached/bundled redis-cli from hostdb
|
|
23
|
-
const cachedPath = await configManager.getBinaryPath('redis-cli')
|
|
24
|
-
if (cachedPath && existsSync(cachedPath)) {
|
|
25
|
-
return cachedPath
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Fallback to system PATH
|
|
29
|
-
return platformService.findToolPath('redis-cli')
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Error message for missing redis-cli
|
|
34
|
-
* Directs users to download via hostdb (preferred) or system package manager (fallback)
|
|
35
|
-
*/
|
|
36
|
-
export const REDIS_CLI_NOT_FOUND_ERROR =
|
|
37
|
-
'redis-cli not found. Download Redis binaries:\n' +
|
|
38
|
-
' spindb engines download redis\n' +
|
|
39
|
-
'\n' +
|
|
40
|
-
'Or install system-wide:\n' +
|
|
41
|
-
' macOS: brew install redis\n' +
|
|
42
|
-
' Ubuntu: sudo apt install redis-tools'
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* hostdb Releases Module for Redis
|
|
3
|
-
*
|
|
4
|
-
* Fetches Redis binary information from the hostdb repository at
|
|
5
|
-
* https://github.com/robertjbass/hostdb
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { createHostdbReleases } from '../../core/hostdb-releases-factory'
|
|
9
|
-
import { REDIS_VERSION_MAP, SUPPORTED_MAJOR_VERSIONS } from './version-maps'
|
|
10
|
-
import { redisBinaryManager } from './binary-manager'
|
|
11
|
-
import { Engine } from '../../types'
|
|
12
|
-
|
|
13
|
-
const hostdbReleases = createHostdbReleases({
|
|
14
|
-
engine: Engine.Redis,
|
|
15
|
-
displayName: 'Redis',
|
|
16
|
-
versionMap: REDIS_VERSION_MAP,
|
|
17
|
-
supportedMajorVersions: SUPPORTED_MAJOR_VERSIONS,
|
|
18
|
-
groupingStrategy: 'single-digit',
|
|
19
|
-
listInstalled: () => redisBinaryManager.listInstalled(),
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
export const fetchAvailableVersions = hostdbReleases.fetchAvailableVersions
|
|
23
|
-
export const getLatestVersion = hostdbReleases.getLatestVersion
|