spindb 0.37.2 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/bin.js +9 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/attach.js +102 -0
- package/dist/cli/commands/attach.js.map +1 -0
- package/dist/cli/commands/backup.js +197 -0
- package/dist/cli/commands/backup.js.map +1 -0
- package/dist/cli/commands/backups.js +190 -0
- package/dist/cli/commands/backups.js.map +1 -0
- package/dist/cli/commands/clone.js +119 -0
- package/dist/cli/commands/clone.js.map +1 -0
- package/dist/cli/commands/config.js +276 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/connect.js +559 -0
- package/dist/cli/commands/connect.js.map +1 -0
- package/dist/cli/commands/create.js +952 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/databases.js +485 -0
- package/dist/cli/commands/databases.js.map +1 -0
- package/dist/cli/commands/delete.js +106 -0
- package/dist/cli/commands/delete.js.map +1 -0
- package/dist/cli/commands/deps.js +238 -0
- package/dist/cli/commands/deps.js.map +1 -0
- package/dist/cli/commands/detach.js +81 -0
- package/dist/cli/commands/detach.js.map +1 -0
- package/dist/cli/commands/doctor.js +567 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/duckdb.js +207 -0
- package/dist/cli/commands/duckdb.js.map +1 -0
- package/dist/cli/commands/edit.js +524 -0
- package/dist/cli/commands/edit.js.map +1 -0
- package/dist/cli/commands/engines.js +1414 -0
- package/dist/cli/commands/engines.js.map +1 -0
- package/dist/cli/commands/export.js +383 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/info.js +270 -0
- package/dist/cli/commands/info.js.map +1 -0
- package/dist/cli/commands/list.js +215 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/logs.js +81 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/menu/backup-handlers.js +1202 -0
- package/dist/cli/commands/menu/backup-handlers.js.map +1 -0
- package/dist/cli/commands/menu/container-handlers.js +1788 -0
- package/dist/cli/commands/menu/container-handlers.js.map +1 -0
- package/dist/cli/commands/menu/engine-handlers.js +235 -0
- package/dist/cli/commands/menu/engine-handlers.js.map +1 -0
- package/dist/cli/commands/menu/index.js +266 -0
- package/dist/cli/commands/menu/index.js.map +1 -0
- package/dist/cli/commands/menu/settings-handlers.js +320 -0
- package/dist/cli/commands/menu/settings-handlers.js.map +1 -0
- package/dist/cli/commands/menu/shared.js +13 -0
- package/dist/cli/commands/menu/shared.js.map +1 -0
- package/dist/cli/commands/menu/shell-handlers.js +1573 -0
- package/dist/cli/commands/menu/shell-handlers.js.map +1 -0
- package/dist/cli/commands/menu/sql-handlers.js +185 -0
- package/dist/cli/commands/menu/sql-handlers.js.map +1 -0
- package/dist/cli/commands/menu/update-handlers.js +322 -0
- package/dist/cli/commands/menu/update-handlers.js.map +1 -0
- package/dist/cli/commands/menu/validators.js +9 -0
- package/dist/cli/commands/menu/validators.js.map +1 -0
- package/dist/cli/commands/ports.js +166 -0
- package/dist/cli/commands/ports.js.map +1 -0
- package/dist/cli/commands/pull.js +166 -0
- package/dist/cli/commands/pull.js.map +1 -0
- package/dist/cli/commands/query.js +180 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/restore.js +428 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/run.js +115 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/self-update.js +99 -0
- package/dist/cli/commands/self-update.js.map +1 -0
- package/dist/cli/commands/sqlite.js +207 -0
- package/dist/cli/commands/sqlite.js.map +1 -0
- package/dist/cli/commands/start.js +196 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/stop.js +182 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/url.js +88 -0
- package/dist/cli/commands/url.js.map +1 -0
- package/dist/cli/commands/users.js +189 -0
- package/dist/cli/commands/users.js.map +1 -0
- package/dist/cli/commands/version.js +52 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/commands/which.js +258 -0
- package/dist/cli/commands/which.js.map +1 -0
- package/dist/cli/constants.js +212 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/helpers.js +1120 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/index.js +146 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/prompts.js +1002 -0
- package/dist/cli/ui/prompts.js.map +1 -0
- package/dist/cli/ui/spinner.js +74 -0
- package/dist/cli/ui/spinner.js.map +1 -0
- package/dist/cli/ui/theme.js +99 -0
- package/dist/cli/ui/theme.js.map +1 -0
- package/dist/cli/utils/file-follower.js +79 -0
- package/dist/cli/utils/file-follower.js.map +1 -0
- package/dist/config/backup-formats.js +363 -0
- package/dist/config/backup-formats.js.map +1 -0
- package/dist/config/defaults.js +25 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/engine-defaults.js +303 -0
- package/dist/config/engine-defaults.js.map +1 -0
- package/dist/config/engines-registry.js +103 -0
- package/dist/config/engines-registry.js.map +1 -0
- package/dist/config/os-dependencies.js +767 -0
- package/dist/config/os-dependencies.js.map +1 -0
- package/dist/config/paths.js +156 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/version.js +3 -0
- package/dist/config/version.js.map +1 -0
- package/dist/core/backup-restore.js +219 -0
- package/dist/core/backup-restore.js.map +1 -0
- package/dist/core/base-binary-manager.js +403 -0
- package/dist/core/base-binary-manager.js.map +1 -0
- package/dist/core/base-document-binary-manager.js +364 -0
- package/dist/core/base-document-binary-manager.js.map +1 -0
- package/dist/core/base-embedded-binary-manager.js +364 -0
- package/dist/core/base-embedded-binary-manager.js.map +1 -0
- package/dist/core/base-server-binary-manager.js +368 -0
- package/dist/core/base-server-binary-manager.js.map +1 -0
- package/dist/core/config-manager.js +495 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/container-manager.js +609 -0
- package/dist/core/container-manager.js.map +1 -0
- package/dist/core/credential-generator.js +67 -0
- package/dist/core/credential-generator.js.map +1 -0
- package/dist/core/credential-manager.js +211 -0
- package/dist/core/credential-manager.js.map +1 -0
- package/dist/core/dblab-utils.js +105 -0
- package/dist/core/dblab-utils.js.map +1 -0
- package/dist/core/dependency-manager.js +359 -0
- package/dist/core/dependency-manager.js.map +1 -0
- package/dist/core/docker-exporter.js +1077 -0
- package/dist/core/docker-exporter.js.map +1 -0
- package/dist/core/error-handler.js +295 -0
- package/dist/core/error-handler.js.map +1 -0
- package/dist/core/fs-error-utils.js +74 -0
- package/dist/core/fs-error-utils.js.map +1 -0
- package/dist/core/homebrew-version-manager.js +280 -0
- package/dist/core/homebrew-version-manager.js.map +1 -0
- package/dist/core/hostdb-client.js +252 -0
- package/dist/core/hostdb-client.js.map +1 -0
- package/dist/core/hostdb-metadata.js +243 -0
- package/dist/core/hostdb-metadata.js.map +1 -0
- package/dist/core/hostdb-releases-factory.js +161 -0
- package/dist/core/hostdb-releases-factory.js.map +1 -0
- package/dist/core/library-env.js +88 -0
- package/dist/core/library-env.js.map +1 -0
- package/dist/core/pgweb-utils.js +53 -0
- package/dist/core/pgweb-utils.js.map +1 -0
- package/dist/core/platform-service.js +632 -0
- package/dist/core/platform-service.js.map +1 -0
- package/dist/core/port-manager.js +136 -0
- package/dist/core/port-manager.js.map +1 -0
- package/dist/core/process-manager.js +445 -0
- package/dist/core/process-manager.js.map +1 -0
- package/dist/core/pull-manager.js +418 -0
- package/dist/core/pull-manager.js.map +1 -0
- package/dist/core/query-parser.js +449 -0
- package/dist/core/query-parser.js.map +1 -0
- package/dist/core/spawn-utils.js +90 -0
- package/dist/core/spawn-utils.js.map +1 -0
- package/dist/core/start-with-retry.js +90 -0
- package/dist/core/start-with-retry.js.map +1 -0
- package/dist/core/test-cleanup.js +85 -0
- package/dist/core/test-cleanup.js.map +1 -0
- package/dist/core/tls-generator.js +84 -0
- package/dist/core/tls-generator.js.map +1 -0
- package/dist/core/transaction-manager.js +139 -0
- package/dist/core/transaction-manager.js.map +1 -0
- package/dist/core/update-manager.js +241 -0
- package/dist/core/update-manager.js.map +1 -0
- package/dist/core/version-migration.js +260 -0
- package/dist/core/version-migration.js.map +1 -0
- package/dist/core/version-utils.js +91 -0
- package/dist/core/version-utils.js.map +1 -0
- package/dist/engines/base-engine.js +179 -0
- package/dist/engines/base-engine.js.map +1 -0
- package/dist/engines/clickhouse/backup.js +289 -0
- package/dist/engines/clickhouse/backup.js.map +1 -0
- package/dist/engines/clickhouse/binary-manager.js +145 -0
- package/dist/engines/clickhouse/binary-manager.js.map +1 -0
- package/dist/engines/clickhouse/binary-urls.js +100 -0
- package/dist/engines/clickhouse/binary-urls.js.map +1 -0
- package/dist/engines/clickhouse/cli-utils.js +143 -0
- package/dist/engines/clickhouse/cli-utils.js.map +1 -0
- package/dist/engines/clickhouse/hostdb-releases.js +24 -0
- package/dist/engines/clickhouse/hostdb-releases.js.map +1 -0
- package/dist/engines/clickhouse/index.js +1077 -0
- package/dist/engines/clickhouse/index.js.map +1 -0
- package/dist/engines/clickhouse/restore.js +335 -0
- package/dist/engines/clickhouse/restore.js.map +1 -0
- package/dist/engines/clickhouse/version-maps.js +83 -0
- package/dist/engines/clickhouse/version-maps.js.map +1 -0
- package/dist/engines/clickhouse/version-validator.js +133 -0
- package/dist/engines/clickhouse/version-validator.js.map +1 -0
- package/dist/engines/cockroachdb/backup.js +261 -0
- package/dist/engines/cockroachdb/backup.js.map +1 -0
- package/dist/engines/cockroachdb/binary-manager.js +33 -0
- package/dist/engines/cockroachdb/binary-manager.js.map +1 -0
- package/dist/engines/cockroachdb/binary-urls.js +33 -0
- package/dist/engines/cockroachdb/binary-urls.js.map +1 -0
- package/dist/engines/cockroachdb/cli-utils.js +338 -0
- package/dist/engines/cockroachdb/cli-utils.js.map +1 -0
- package/dist/engines/cockroachdb/hostdb-releases.js +21 -0
- package/dist/engines/cockroachdb/hostdb-releases.js.map +1 -0
- package/dist/engines/cockroachdb/index.js +1016 -0
- package/dist/engines/cockroachdb/index.js.map +1 -0
- package/dist/engines/cockroachdb/restore.js +323 -0
- package/dist/engines/cockroachdb/restore.js.map +1 -0
- package/dist/engines/cockroachdb/version-maps.js +37 -0
- package/dist/engines/cockroachdb/version-maps.js.map +1 -0
- package/dist/engines/couchdb/api-client.js +64 -0
- package/dist/engines/couchdb/api-client.js.map +1 -0
- package/dist/engines/couchdb/backup.js +90 -0
- package/dist/engines/couchdb/backup.js.map +1 -0
- package/dist/engines/couchdb/binary-manager.js +62 -0
- package/dist/engines/couchdb/binary-manager.js.map +1 -0
- package/dist/engines/couchdb/binary-urls.js +92 -0
- package/dist/engines/couchdb/binary-urls.js.map +1 -0
- package/dist/engines/couchdb/hostdb-releases.js +21 -0
- package/dist/engines/couchdb/hostdb-releases.js.map +1 -0
- package/dist/engines/couchdb/index.js +1043 -0
- package/dist/engines/couchdb/index.js.map +1 -0
- package/dist/engines/couchdb/restore.js +198 -0
- package/dist/engines/couchdb/restore.js.map +1 -0
- package/dist/engines/couchdb/version-maps.js +67 -0
- package/dist/engines/couchdb/version-maps.js.map +1 -0
- package/dist/engines/couchdb/version-validator.js +88 -0
- package/dist/engines/couchdb/version-validator.js.map +1 -0
- package/dist/engines/duckdb/binary-manager.js +33 -0
- package/dist/engines/duckdb/binary-manager.js.map +1 -0
- package/{engines/duckdb/binary-urls.ts → dist/engines/duckdb/binary-urls.js} +11 -16
- package/dist/engines/duckdb/binary-urls.js.map +1 -0
- package/dist/engines/duckdb/hostdb-releases.js +21 -0
- package/dist/engines/duckdb/hostdb-releases.js.map +1 -0
- package/dist/engines/duckdb/index.js +594 -0
- package/dist/engines/duckdb/index.js.map +1 -0
- package/dist/engines/duckdb/registry.js +265 -0
- package/dist/engines/duckdb/registry.js.map +1 -0
- package/dist/engines/duckdb/scanner.js +12 -0
- package/dist/engines/duckdb/scanner.js.map +1 -0
- package/dist/engines/duckdb/version-maps.js +67 -0
- package/dist/engines/duckdb/version-maps.js.map +1 -0
- package/dist/engines/duckdb/version-validator.js +62 -0
- package/dist/engines/duckdb/version-validator.js.map +1 -0
- package/dist/engines/ferretdb/backup.js +170 -0
- package/dist/engines/ferretdb/backup.js.map +1 -0
- package/dist/engines/ferretdb/binary-manager.js +765 -0
- package/dist/engines/ferretdb/binary-manager.js.map +1 -0
- package/dist/engines/ferretdb/binary-urls.js +135 -0
- package/dist/engines/ferretdb/binary-urls.js.map +1 -0
- package/dist/engines/ferretdb/index.js +1517 -0
- package/dist/engines/ferretdb/index.js.map +1 -0
- package/dist/engines/ferretdb/restore.js +310 -0
- package/dist/engines/ferretdb/restore.js.map +1 -0
- package/{engines/ferretdb/version-maps.ts → dist/engines/ferretdb/version-maps.js} +62 -79
- package/dist/engines/ferretdb/version-maps.js.map +1 -0
- package/dist/engines/file-based-utils.js +184 -0
- package/dist/engines/file-based-utils.js.map +1 -0
- package/dist/engines/index.js +124 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/influxdb/api-client.js +54 -0
- package/dist/engines/influxdb/api-client.js.map +1 -0
- package/dist/engines/influxdb/backup.js +119 -0
- package/dist/engines/influxdb/backup.js.map +1 -0
- package/dist/engines/influxdb/binary-manager.js +87 -0
- package/dist/engines/influxdb/binary-manager.js.map +1 -0
- package/dist/engines/influxdb/binary-urls.js +56 -0
- package/dist/engines/influxdb/binary-urls.js.map +1 -0
- package/dist/engines/influxdb/hostdb-releases.js +21 -0
- package/dist/engines/influxdb/hostdb-releases.js.map +1 -0
- package/dist/engines/influxdb/index.js +962 -0
- package/dist/engines/influxdb/index.js.map +1 -0
- package/dist/engines/influxdb/restore.js +329 -0
- package/dist/engines/influxdb/restore.js.map +1 -0
- package/dist/engines/influxdb/version-maps.js +64 -0
- package/dist/engines/influxdb/version-maps.js.map +1 -0
- package/dist/engines/influxdb/version-validator.js +109 -0
- package/dist/engines/influxdb/version-validator.js.map +1 -0
- package/dist/engines/mariadb/backup.js +178 -0
- package/dist/engines/mariadb/backup.js.map +1 -0
- package/dist/engines/mariadb/binary-manager.js +33 -0
- package/dist/engines/mariadb/binary-manager.js.map +1 -0
- package/{engines/mariadb/binary-urls.ts → dist/engines/mariadb/binary-urls.js} +38 -55
- package/dist/engines/mariadb/binary-urls.js.map +1 -0
- package/dist/engines/mariadb/hostdb-releases.js +21 -0
- package/dist/engines/mariadb/hostdb-releases.js.map +1 -0
- package/dist/engines/mariadb/index.js +1011 -0
- package/dist/engines/mariadb/index.js.map +1 -0
- package/dist/engines/mariadb/restore.js +322 -0
- package/dist/engines/mariadb/restore.js.map +1 -0
- package/dist/engines/mariadb/version-maps.js +63 -0
- package/dist/engines/mariadb/version-maps.js.map +1 -0
- package/dist/engines/mariadb/version-validator.js +143 -0
- package/dist/engines/mariadb/version-validator.js.map +1 -0
- package/dist/engines/meilisearch/api-client.js +50 -0
- package/dist/engines/meilisearch/api-client.js.map +1 -0
- package/dist/engines/meilisearch/backup.js +167 -0
- package/dist/engines/meilisearch/backup.js.map +1 -0
- package/dist/engines/meilisearch/binary-manager.js +31 -0
- package/dist/engines/meilisearch/binary-manager.js.map +1 -0
- package/dist/engines/meilisearch/binary-urls.js +56 -0
- package/dist/engines/meilisearch/binary-urls.js.map +1 -0
- package/dist/engines/meilisearch/hostdb-releases.js +21 -0
- package/dist/engines/meilisearch/hostdb-releases.js.map +1 -0
- package/dist/engines/meilisearch/index.js +992 -0
- package/dist/engines/meilisearch/index.js.map +1 -0
- package/dist/engines/meilisearch/restore.js +167 -0
- package/dist/engines/meilisearch/restore.js.map +1 -0
- package/dist/engines/meilisearch/version-maps.js +67 -0
- package/dist/engines/meilisearch/version-maps.js.map +1 -0
- package/dist/engines/meilisearch/version-validator.js +109 -0
- package/dist/engines/meilisearch/version-validator.js.map +1 -0
- package/dist/engines/mongodb/backup.js +109 -0
- package/dist/engines/mongodb/backup.js.map +1 -0
- package/dist/engines/mongodb/binary-manager.js +36 -0
- package/dist/engines/mongodb/binary-manager.js.map +1 -0
- package/dist/engines/mongodb/binary-urls.js +46 -0
- package/dist/engines/mongodb/binary-urls.js.map +1 -0
- package/dist/engines/mongodb/cli-utils.js +131 -0
- package/dist/engines/mongodb/cli-utils.js.map +1 -0
- package/dist/engines/mongodb/hostdb-releases.js +77 -0
- package/dist/engines/mongodb/hostdb-releases.js.map +1 -0
- package/dist/engines/mongodb/index.js +873 -0
- package/dist/engines/mongodb/index.js.map +1 -0
- package/dist/engines/mongodb/restore.js +276 -0
- package/dist/engines/mongodb/restore.js.map +1 -0
- package/dist/engines/mongodb/version-maps.js +79 -0
- package/dist/engines/mongodb/version-maps.js.map +1 -0
- package/dist/engines/mongodb/version-validator.js +133 -0
- package/dist/engines/mongodb/version-validator.js.map +1 -0
- package/dist/engines/mysql/backup.js +210 -0
- package/dist/engines/mysql/backup.js.map +1 -0
- package/dist/engines/mysql/binary-detection.js +325 -0
- package/dist/engines/mysql/binary-detection.js.map +1 -0
- package/dist/engines/mysql/binary-manager.js +30 -0
- package/dist/engines/mysql/binary-manager.js.map +1 -0
- package/dist/engines/mysql/binary-urls.js +87 -0
- package/dist/engines/mysql/binary-urls.js.map +1 -0
- package/{engines/mysql/hostdb-releases.ts → dist/engines/mysql/hostdb-releases.js} +20 -23
- package/dist/engines/mysql/hostdb-releases.js.map +1 -0
- package/dist/engines/mysql/index.js +1066 -0
- package/dist/engines/mysql/index.js.map +1 -0
- package/dist/engines/mysql/restore.js +361 -0
- package/dist/engines/mysql/restore.js.map +1 -0
- package/dist/engines/mysql/version-maps.js +79 -0
- package/dist/engines/mysql/version-maps.js.map +1 -0
- package/dist/engines/mysql/version-validator.js +266 -0
- package/dist/engines/mysql/version-validator.js.map +1 -0
- package/dist/engines/postgresql/backup.js +118 -0
- package/dist/engines/postgresql/backup.js.map +1 -0
- package/dist/engines/postgresql/binary-manager.js +85 -0
- package/dist/engines/postgresql/binary-manager.js.map +1 -0
- package/dist/engines/postgresql/binary-urls.js +80 -0
- package/dist/engines/postgresql/binary-urls.js.map +1 -0
- package/dist/engines/postgresql/hostdb-releases.js +21 -0
- package/dist/engines/postgresql/hostdb-releases.js.map +1 -0
- package/dist/engines/postgresql/index.js +852 -0
- package/dist/engines/postgresql/index.js.map +1 -0
- package/dist/engines/postgresql/remote-version.js +109 -0
- package/dist/engines/postgresql/remote-version.js.map +1 -0
- package/dist/engines/postgresql/restore.js +254 -0
- package/dist/engines/postgresql/restore.js.map +1 -0
- package/dist/engines/postgresql/version-maps.js +73 -0
- package/dist/engines/postgresql/version-maps.js.map +1 -0
- package/dist/engines/postgresql/version-validator.js +286 -0
- package/dist/engines/postgresql/version-validator.js.map +1 -0
- package/dist/engines/qdrant/api-client.js +50 -0
- package/dist/engines/qdrant/api-client.js.map +1 -0
- package/dist/engines/qdrant/backup.js +115 -0
- package/dist/engines/qdrant/backup.js.map +1 -0
- package/dist/engines/qdrant/binary-manager.js +31 -0
- package/dist/engines/qdrant/binary-manager.js.map +1 -0
- package/dist/engines/qdrant/binary-urls.js +92 -0
- package/dist/engines/qdrant/binary-urls.js.map +1 -0
- package/dist/engines/qdrant/cli-utils.js +39 -0
- package/dist/engines/qdrant/cli-utils.js.map +1 -0
- package/dist/engines/qdrant/hostdb-releases.js +21 -0
- package/dist/engines/qdrant/hostdb-releases.js.map +1 -0
- package/dist/engines/qdrant/index.js +1002 -0
- package/dist/engines/qdrant/index.js.map +1 -0
- package/dist/engines/qdrant/restore.js +154 -0
- package/dist/engines/qdrant/restore.js.map +1 -0
- package/dist/engines/qdrant/version-maps.js +67 -0
- package/dist/engines/qdrant/version-maps.js.map +1 -0
- package/dist/engines/qdrant/version-validator.js +109 -0
- package/dist/engines/qdrant/version-validator.js.map +1 -0
- package/dist/engines/questdb/backup.js +191 -0
- package/dist/engines/questdb/backup.js.map +1 -0
- package/dist/engines/questdb/binary-manager.js +247 -0
- package/dist/engines/questdb/binary-manager.js.map +1 -0
- package/dist/engines/questdb/binary-urls.js +27 -0
- package/dist/engines/questdb/binary-urls.js.map +1 -0
- package/dist/engines/questdb/hostdb-releases.js +21 -0
- package/dist/engines/questdb/hostdb-releases.js.map +1 -0
- package/dist/engines/questdb/index.js +814 -0
- package/dist/engines/questdb/index.js.map +1 -0
- package/dist/engines/questdb/restore.js +202 -0
- package/dist/engines/questdb/restore.js.map +1 -0
- package/dist/engines/questdb/version-maps.js +33 -0
- package/dist/engines/questdb/version-maps.js.map +1 -0
- package/dist/engines/questdb/version-validator.js +99 -0
- package/dist/engines/questdb/version-validator.js.map +1 -0
- package/dist/engines/redis/backup.js +292 -0
- package/dist/engines/redis/backup.js.map +1 -0
- package/dist/engines/redis/binary-manager.js +32 -0
- package/dist/engines/redis/binary-manager.js.map +1 -0
- package/dist/engines/redis/binary-urls.js +96 -0
- package/dist/engines/redis/binary-urls.js.map +1 -0
- package/dist/engines/redis/cli-utils.js +38 -0
- package/dist/engines/redis/cli-utils.js.map +1 -0
- package/dist/engines/redis/hostdb-releases.js +21 -0
- package/dist/engines/redis/hostdb-releases.js.map +1 -0
- package/dist/engines/redis/index.js +1263 -0
- package/dist/engines/redis/index.js.map +1 -0
- package/dist/engines/redis/restore.js +338 -0
- package/dist/engines/redis/restore.js.map +1 -0
- package/dist/engines/redis/version-maps.js +70 -0
- package/dist/engines/redis/version-maps.js.map +1 -0
- package/dist/engines/redis/version-validator.js +109 -0
- package/dist/engines/redis/version-validator.js.map +1 -0
- package/dist/engines/sqlite/binary-manager.js +39 -0
- package/dist/engines/sqlite/binary-manager.js.map +1 -0
- package/{engines/sqlite/binary-urls.ts → dist/engines/sqlite/binary-urls.js} +11 -16
- package/dist/engines/sqlite/binary-urls.js.map +1 -0
- package/dist/engines/sqlite/hostdb-releases.js +21 -0
- package/dist/engines/sqlite/hostdb-releases.js.map +1 -0
- package/dist/engines/sqlite/index.js +493 -0
- package/dist/engines/sqlite/index.js.map +1 -0
- package/dist/engines/sqlite/registry.js +163 -0
- package/dist/engines/sqlite/registry.js.map +1 -0
- package/dist/engines/sqlite/scanner.js +12 -0
- package/dist/engines/sqlite/scanner.js.map +1 -0
- package/dist/engines/sqlite/version-maps.js +57 -0
- package/dist/engines/sqlite/version-maps.js.map +1 -0
- package/dist/engines/surrealdb/backup.js +97 -0
- package/dist/engines/surrealdb/backup.js.map +1 -0
- package/dist/engines/surrealdb/binary-manager.js +33 -0
- package/dist/engines/surrealdb/binary-manager.js.map +1 -0
- package/dist/engines/surrealdb/binary-urls.js +33 -0
- package/dist/engines/surrealdb/binary-urls.js.map +1 -0
- package/dist/engines/surrealdb/cli-utils.js +147 -0
- package/dist/engines/surrealdb/cli-utils.js.map +1 -0
- package/dist/engines/surrealdb/hostdb-releases.js +21 -0
- package/dist/engines/surrealdb/hostdb-releases.js.map +1 -0
- package/dist/engines/surrealdb/index.js +1022 -0
- package/dist/engines/surrealdb/index.js.map +1 -0
- package/dist/engines/surrealdb/restore.js +224 -0
- package/dist/engines/surrealdb/restore.js.map +1 -0
- package/dist/engines/surrealdb/version-maps.js +36 -0
- package/dist/engines/surrealdb/version-maps.js.map +1 -0
- package/dist/engines/tigerbeetle/backup.js +36 -0
- package/dist/engines/tigerbeetle/backup.js.map +1 -0
- package/dist/engines/tigerbeetle/binary-manager.js +72 -0
- package/dist/engines/tigerbeetle/binary-manager.js.map +1 -0
- package/dist/engines/tigerbeetle/binary-urls.js +49 -0
- package/dist/engines/tigerbeetle/binary-urls.js.map +1 -0
- package/dist/engines/tigerbeetle/hostdb-releases.js +21 -0
- package/dist/engines/tigerbeetle/hostdb-releases.js.map +1 -0
- package/dist/engines/tigerbeetle/index.js +559 -0
- package/dist/engines/tigerbeetle/index.js.map +1 -0
- package/dist/engines/tigerbeetle/restore.js +91 -0
- package/dist/engines/tigerbeetle/restore.js.map +1 -0
- package/{engines/tigerbeetle/version-maps.ts → dist/engines/tigerbeetle/version-maps.js} +22 -31
- package/dist/engines/tigerbeetle/version-maps.js.map +1 -0
- package/dist/engines/tigerbeetle/version-validator.js +108 -0
- package/dist/engines/tigerbeetle/version-validator.js.map +1 -0
- package/dist/engines/typedb/backup.js +129 -0
- package/dist/engines/typedb/backup.js.map +1 -0
- package/dist/engines/typedb/binary-manager.js +151 -0
- package/dist/engines/typedb/binary-manager.js.map +1 -0
- package/dist/engines/typedb/binary-urls.js +33 -0
- package/dist/engines/typedb/binary-urls.js.map +1 -0
- package/dist/engines/typedb/cli-utils.js +163 -0
- package/dist/engines/typedb/cli-utils.js.map +1 -0
- package/dist/engines/typedb/hostdb-releases.js +21 -0
- package/dist/engines/typedb/hostdb-releases.js.map +1 -0
- package/dist/engines/typedb/index.js +1003 -0
- package/dist/engines/typedb/index.js.map +1 -0
- package/dist/engines/typedb/restore.js +279 -0
- package/dist/engines/typedb/restore.js.map +1 -0
- package/dist/engines/typedb/version-maps.js +40 -0
- package/dist/engines/typedb/version-maps.js.map +1 -0
- package/dist/engines/typedb/version-validator.js +103 -0
- package/dist/engines/typedb/version-validator.js.map +1 -0
- package/dist/engines/valkey/backup.js +292 -0
- package/dist/engines/valkey/backup.js.map +1 -0
- package/dist/engines/valkey/binary-manager.js +33 -0
- package/dist/engines/valkey/binary-manager.js.map +1 -0
- package/dist/engines/valkey/binary-urls.js +98 -0
- package/dist/engines/valkey/binary-urls.js.map +1 -0
- package/dist/engines/valkey/cli-utils.js +38 -0
- package/dist/engines/valkey/cli-utils.js.map +1 -0
- package/dist/engines/valkey/hostdb-releases.js +21 -0
- package/dist/engines/valkey/hostdb-releases.js.map +1 -0
- package/dist/engines/valkey/index.js +1257 -0
- package/dist/engines/valkey/index.js.map +1 -0
- package/dist/engines/valkey/restore.js +340 -0
- package/dist/engines/valkey/restore.js.map +1 -0
- package/dist/engines/valkey/version-maps.js +70 -0
- package/dist/engines/valkey/version-maps.js.map +1 -0
- package/dist/engines/valkey/version-validator.js +112 -0
- package/dist/engines/valkey/version-validator.js.map +1 -0
- package/dist/engines/weaviate/api-client.js +50 -0
- package/dist/engines/weaviate/api-client.js.map +1 -0
- package/dist/engines/weaviate/backup.js +95 -0
- package/dist/engines/weaviate/backup.js.map +1 -0
- package/dist/engines/weaviate/binary-manager.js +58 -0
- package/dist/engines/weaviate/binary-manager.js.map +1 -0
- package/dist/engines/weaviate/binary-urls.js +92 -0
- package/dist/engines/weaviate/binary-urls.js.map +1 -0
- package/dist/engines/weaviate/cli-utils.js +39 -0
- package/dist/engines/weaviate/cli-utils.js.map +1 -0
- package/dist/engines/weaviate/hostdb-releases.js +21 -0
- package/dist/engines/weaviate/hostdb-releases.js.map +1 -0
- package/dist/engines/weaviate/index.js +871 -0
- package/dist/engines/weaviate/index.js.map +1 -0
- package/dist/engines/weaviate/restore.js +185 -0
- package/dist/engines/weaviate/restore.js.map +1 -0
- package/dist/engines/weaviate/version-maps.js +67 -0
- package/dist/engines/weaviate/version-maps.js.map +1 -0
- package/dist/engines/weaviate/version-validator.js +109 -0
- package/dist/engines/weaviate/version-validator.js.map +1 -0
- package/dist/types/index.js +102 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +12 -9
- package/bin/cli.js +0 -68
- package/cli/bin.ts +0 -10
- package/cli/commands/attach.ts +0 -139
- package/cli/commands/backup.ts +0 -290
- package/cli/commands/backups.ts +0 -247
- package/cli/commands/clone.ts +0 -159
- package/cli/commands/config.ts +0 -367
- package/cli/commands/connect.ts +0 -684
- package/cli/commands/create.ts +0 -1201
- package/cli/commands/databases.ts +0 -630
- package/cli/commands/delete.ts +0 -133
- package/cli/commands/deps.ts +0 -342
- package/cli/commands/detach.ts +0 -107
- package/cli/commands/doctor.ts +0 -689
- package/cli/commands/duckdb.ts +0 -273
- package/cli/commands/edit.ts +0 -683
- package/cli/commands/engines.ts +0 -1914
- package/cli/commands/export.ts +0 -544
- package/cli/commands/info.ts +0 -340
- package/cli/commands/list.ts +0 -284
- package/cli/commands/logs.ts +0 -102
- package/cli/commands/menu/backup-handlers.ts +0 -1571
- package/cli/commands/menu/container-handlers.ts +0 -2288
- package/cli/commands/menu/engine-handlers.ts +0 -355
- package/cli/commands/menu/index.ts +0 -342
- package/cli/commands/menu/settings-handlers.ts +0 -365
- package/cli/commands/menu/shared.ts +0 -23
- package/cli/commands/menu/shell-handlers.ts +0 -1811
- package/cli/commands/menu/sql-handlers.ts +0 -231
- package/cli/commands/menu/update-handlers.ts +0 -378
- package/cli/commands/menu/validators.ts +0 -8
- package/cli/commands/ports.ts +0 -211
- package/cli/commands/pull.ts +0 -223
- package/cli/commands/query.ts +0 -241
- package/cli/commands/restore.ts +0 -587
- package/cli/commands/run.ts +0 -178
- package/cli/commands/self-update.ts +0 -121
- package/cli/commands/sqlite.ts +0 -273
- package/cli/commands/start.ts +0 -218
- package/cli/commands/stop.ts +0 -241
- package/cli/commands/url.ts +0 -104
- package/cli/commands/users.ts +0 -264
- package/cli/commands/version.ts +0 -55
- package/cli/commands/which.ts +0 -290
- package/cli/constants.ts +0 -233
- package/cli/helpers.ts +0 -1593
- package/cli/index.ts +0 -162
- package/cli/ui/prompts.ts +0 -1525
- package/cli/ui/spinner.ts +0 -88
- package/cli/ui/theme.ts +0 -128
- package/cli/utils/file-follower.ts +0 -93
- package/config/backup-formats.ts +0 -446
- package/config/defaults.ts +0 -56
- package/config/engine-defaults.ts +0 -336
- package/config/engines-registry.ts +0 -150
- package/config/engines.schema.json +0 -135
- package/config/os-dependencies.ts +0 -888
- package/config/paths.ts +0 -200
- package/core/backup-restore.ts +0 -330
- package/core/base-binary-manager.ts +0 -562
- package/core/base-document-binary-manager.ts +0 -523
- package/core/base-embedded-binary-manager.ts +0 -547
- package/core/base-server-binary-manager.ts +0 -523
- package/core/config-manager.ts +0 -652
- package/core/container-manager.ts +0 -787
- package/core/credential-generator.ts +0 -93
- package/core/credential-manager.ts +0 -259
- package/core/dblab-utils.ts +0 -113
- package/core/dependency-manager.ts +0 -512
- package/core/docker-exporter.ts +0 -1345
- package/core/error-handler.ts +0 -419
- package/core/fs-error-utils.ts +0 -82
- package/core/homebrew-version-manager.ts +0 -352
- package/core/hostdb-client.ts +0 -344
- package/core/hostdb-metadata.ts +0 -350
- package/core/hostdb-releases-factory.ts +0 -237
- package/core/library-env.ts +0 -118
- package/core/pgweb-utils.ts +0 -62
- package/core/platform-service.ts +0 -829
- package/core/port-manager.ts +0 -165
- package/core/process-manager.ts +0 -576
- package/core/pull-manager.ts +0 -511
- package/core/query-parser.ts +0 -514
- package/core/spawn-utils.ts +0 -122
- package/core/start-with-retry.ts +0 -130
- package/core/test-cleanup.ts +0 -108
- package/core/tls-generator.ts +0 -116
- package/core/transaction-manager.ts +0 -158
- package/core/update-manager.ts +0 -308
- package/core/version-migration.ts +0 -346
- package/core/version-utils.ts +0 -104
- package/engines/base-engine.ts +0 -340
- package/engines/clickhouse/README.md +0 -231
- package/engines/clickhouse/backup.ts +0 -398
- package/engines/clickhouse/binary-manager.ts +0 -201
- package/engines/clickhouse/binary-urls.ts +0 -125
- package/engines/clickhouse/cli-utils.ts +0 -176
- package/engines/clickhouse/hostdb-releases.ts +0 -30
- package/engines/clickhouse/index.ts +0 -1345
- package/engines/clickhouse/restore.ts +0 -466
- package/engines/clickhouse/version-maps.ts +0 -95
- package/engines/clickhouse/version-validator.ts +0 -154
- package/engines/cockroachdb/README.md +0 -170
- package/engines/cockroachdb/backup.ts +0 -376
- package/engines/cockroachdb/binary-manager.ts +0 -45
- package/engines/cockroachdb/binary-urls.ts +0 -40
- package/engines/cockroachdb/cli-utils.ts +0 -384
- package/engines/cockroachdb/hostdb-releases.ts +0 -26
- package/engines/cockroachdb/index.ts +0 -1276
- package/engines/cockroachdb/restore.ts +0 -455
- package/engines/cockroachdb/version-maps.ts +0 -42
- package/engines/couchdb/README.md +0 -257
- package/engines/couchdb/api-client.ts +0 -81
- package/engines/couchdb/backup.ts +0 -137
- package/engines/couchdb/binary-manager.ts +0 -86
- package/engines/couchdb/binary-urls.ts +0 -115
- package/engines/couchdb/hostdb-releases.ts +0 -23
- package/engines/couchdb/index.ts +0 -1429
- package/engines/couchdb/restore.ts +0 -290
- package/engines/couchdb/version-maps.ts +0 -78
- package/engines/couchdb/version-validator.ts +0 -111
- package/engines/duckdb/README.md +0 -154
- package/engines/duckdb/binary-manager.ts +0 -45
- package/engines/duckdb/hostdb-releases.ts +0 -23
- package/engines/duckdb/index.ts +0 -749
- package/engines/duckdb/registry.ts +0 -303
- package/engines/duckdb/scanner.ts +0 -22
- package/engines/duckdb/version-maps.ts +0 -78
- package/engines/duckdb/version-validator.ts +0 -78
- package/engines/ferretdb/README.md +0 -262
- package/engines/ferretdb/backup.ts +0 -173
- package/engines/ferretdb/binary-manager.ts +0 -1095
- package/engines/ferretdb/binary-urls.ts +0 -183
- package/engines/ferretdb/index.ts +0 -1907
- package/engines/ferretdb/restore.ts +0 -357
- package/engines/file-based-utils.ts +0 -262
- package/engines/index.ts +0 -131
- package/engines/influxdb/README.md +0 -180
- package/engines/influxdb/api-client.ts +0 -64
- package/engines/influxdb/backup.ts +0 -160
- package/engines/influxdb/binary-manager.ts +0 -110
- package/engines/influxdb/binary-urls.ts +0 -69
- package/engines/influxdb/hostdb-releases.ts +0 -23
- package/engines/influxdb/index.ts +0 -1272
- package/engines/influxdb/restore.ts +0 -417
- package/engines/influxdb/version-maps.ts +0 -75
- package/engines/influxdb/version-validator.ts +0 -128
- package/engines/mariadb/README.md +0 -141
- package/engines/mariadb/backup.ts +0 -233
- package/engines/mariadb/binary-manager.ts +0 -45
- package/engines/mariadb/hostdb-releases.ts +0 -23
- package/engines/mariadb/index.ts +0 -1300
- package/engines/mariadb/restore.ts +0 -447
- package/engines/mariadb/version-maps.ts +0 -72
- package/engines/mariadb/version-validator.ts +0 -181
- package/engines/meilisearch/README.md +0 -255
- package/engines/meilisearch/api-client.ts +0 -61
- package/engines/meilisearch/backup.ts +0 -233
- package/engines/meilisearch/binary-manager.ts +0 -43
- package/engines/meilisearch/binary-urls.ts +0 -69
- package/engines/meilisearch/hostdb-releases.ts +0 -26
- package/engines/meilisearch/index.ts +0 -1292
- package/engines/meilisearch/restore.ts +0 -219
- package/engines/meilisearch/version-maps.ts +0 -78
- package/engines/meilisearch/version-validator.ts +0 -128
- package/engines/mongodb/README.md +0 -162
- package/engines/mongodb/backup.ts +0 -127
- package/engines/mongodb/binary-manager.ts +0 -48
- package/engines/mongodb/binary-urls.ts +0 -63
- package/engines/mongodb/cli-utils.ts +0 -171
- package/engines/mongodb/hostdb-releases.ts +0 -91
- package/engines/mongodb/index.ts +0 -1118
- package/engines/mongodb/restore.ts +0 -361
- package/engines/mongodb/version-maps.ts +0 -91
- package/engines/mongodb/version-validator.ts +0 -160
- package/engines/mysql/README.md +0 -142
- package/engines/mysql/backup.ts +0 -270
- package/engines/mysql/binary-detection.ts +0 -408
- package/engines/mysql/binary-manager.ts +0 -42
- package/engines/mysql/binary-urls.ts +0 -104
- package/engines/mysql/index.ts +0 -1361
- package/engines/mysql/restore.ts +0 -500
- package/engines/mysql/version-maps.ts +0 -91
- package/engines/mysql/version-validator.ts +0 -369
- package/engines/postgresql/README.md +0 -158
- package/engines/postgresql/backup.ts +0 -151
- package/engines/postgresql/binary-manager.ts +0 -114
- package/engines/postgresql/binary-urls.ts +0 -99
- package/engines/postgresql/hostdb-releases.ts +0 -26
- package/engines/postgresql/index.ts +0 -1143
- package/engines/postgresql/remote-version.ts +0 -161
- package/engines/postgresql/restore.ts +0 -342
- package/engines/postgresql/version-maps.ts +0 -83
- package/engines/postgresql/version-validator.ts +0 -413
- package/engines/qdrant/README.md +0 -222
- package/engines/qdrant/api-client.ts +0 -61
- package/engines/qdrant/backup.ts +0 -165
- package/engines/qdrant/binary-manager.ts +0 -43
- package/engines/qdrant/binary-urls.ts +0 -115
- package/engines/qdrant/cli-utils.ts +0 -43
- package/engines/qdrant/hostdb-releases.ts +0 -23
- package/engines/qdrant/index.ts +0 -1312
- package/engines/qdrant/restore.ts +0 -203
- package/engines/qdrant/version-maps.ts +0 -78
- package/engines/qdrant/version-validator.ts +0 -128
- package/engines/questdb/README.md +0 -334
- package/engines/questdb/backup.ts +0 -220
- package/engines/questdb/binary-manager.ts +0 -310
- package/engines/questdb/binary-urls.ts +0 -34
- package/engines/questdb/hostdb-releases.ts +0 -23
- package/engines/questdb/index.ts +0 -1023
- package/engines/questdb/restore.ts +0 -260
- package/engines/questdb/version-maps.ts +0 -37
- package/engines/questdb/version-validator.ts +0 -121
- package/engines/redis/README.md +0 -173
- package/engines/redis/backup.ts +0 -389
- package/engines/redis/binary-manager.ts +0 -44
- package/engines/redis/binary-urls.ts +0 -117
- package/engines/redis/cli-utils.ts +0 -42
- package/engines/redis/hostdb-releases.ts +0 -23
- package/engines/redis/index.ts +0 -1583
- package/engines/redis/restore.ts +0 -443
- package/engines/redis/version-maps.ts +0 -81
- package/engines/redis/version-validator.ts +0 -131
- package/engines/sqlite/README.md +0 -162
- package/engines/sqlite/binary-manager.ts +0 -52
- package/engines/sqlite/hostdb-releases.ts +0 -23
- package/engines/sqlite/index.ts +0 -641
- package/engines/sqlite/registry.ts +0 -198
- package/engines/sqlite/scanner.ts +0 -22
- package/engines/sqlite/version-maps.ts +0 -64
- package/engines/surrealdb/README.md +0 -218
- package/engines/surrealdb/backup.ts +0 -131
- package/engines/surrealdb/binary-manager.ts +0 -45
- package/engines/surrealdb/binary-urls.ts +0 -40
- package/engines/surrealdb/cli-utils.ts +0 -173
- package/engines/surrealdb/hostdb-releases.ts +0 -23
- package/engines/surrealdb/index.ts +0 -1246
- package/engines/surrealdb/restore.ts +0 -302
- package/engines/surrealdb/version-maps.ts +0 -41
- package/engines/tigerbeetle/README.md +0 -61
- package/engines/tigerbeetle/backup.ts +0 -49
- package/engines/tigerbeetle/binary-manager.ts +0 -95
- package/engines/tigerbeetle/binary-urls.ts +0 -62
- package/engines/tigerbeetle/hostdb-releases.ts +0 -26
- package/engines/tigerbeetle/index.ts +0 -746
- package/engines/tigerbeetle/restore.ts +0 -130
- package/engines/tigerbeetle/version-validator.ts +0 -126
- package/engines/typedb/backup.ts +0 -167
- package/engines/typedb/binary-manager.ts +0 -200
- package/engines/typedb/binary-urls.ts +0 -40
- package/engines/typedb/cli-utils.ts +0 -210
- package/engines/typedb/hostdb-releases.ts +0 -23
- package/engines/typedb/index.ts +0 -1275
- package/engines/typedb/restore.ts +0 -377
- package/engines/typedb/version-maps.ts +0 -48
- package/engines/typedb/version-validator.ts +0 -127
- package/engines/valkey/README.md +0 -219
- package/engines/valkey/backup.ts +0 -389
- package/engines/valkey/binary-manager.ts +0 -45
- package/engines/valkey/binary-urls.ts +0 -122
- package/engines/valkey/cli-utils.ts +0 -42
- package/engines/valkey/hostdb-releases.ts +0 -23
- package/engines/valkey/index.ts +0 -1585
- package/engines/valkey/restore.ts +0 -446
- package/engines/valkey/version-maps.ts +0 -81
- package/engines/valkey/version-validator.ts +0 -131
- package/engines/weaviate/README.md +0 -302
- package/engines/weaviate/api-client.ts +0 -61
- package/engines/weaviate/backup.ts +0 -145
- package/engines/weaviate/binary-manager.ts +0 -80
- package/engines/weaviate/binary-urls.ts +0 -115
- package/engines/weaviate/cli-utils.ts +0 -43
- package/engines/weaviate/hostdb-releases.ts +0 -23
- package/engines/weaviate/index.ts +0 -1139
- package/engines/weaviate/restore.ts +0 -235
- package/engines/weaviate/version-maps.ts +0 -78
- package/engines/weaviate/version-validator.ts +0 -128
- package/types/index.ts +0 -624
- /package/{config → dist/config}/engines.json +0 -0
|
@@ -0,0 +1,1120 @@
|
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import { readdir, lstat } from 'fs/promises';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { execFile } from 'child_process';
|
|
5
|
+
import { promisify } from 'util';
|
|
6
|
+
import { paths } from '../config/paths.js';
|
|
7
|
+
import { platformService } from '../core/platform-service.js';
|
|
8
|
+
import { getEngineConfig } from '../config/engines-registry.js';
|
|
9
|
+
const execFileAsync = promisify(execFile);
|
|
10
|
+
export async function getEngineMetadata(engine) {
|
|
11
|
+
const config = await getEngineConfig(engine);
|
|
12
|
+
return {
|
|
13
|
+
queryLanguage: config.queryLanguage,
|
|
14
|
+
runtime: config.runtime,
|
|
15
|
+
connectionScheme: config.connectionScheme,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
// Parse engine directory name into components
|
|
19
|
+
// Format: {engine}-{version}-{platform}-{arch}
|
|
20
|
+
// Handles versions with dashes (e.g., 17.0.0-rc1) by splitting from the end
|
|
21
|
+
function parseEngineDirectory(entryName, enginePrefix, binDir) {
|
|
22
|
+
const rest = entryName.slice(enginePrefix.length);
|
|
23
|
+
const parts = rest.split('-');
|
|
24
|
+
if (parts.length < 3)
|
|
25
|
+
return null;
|
|
26
|
+
const arch = parts.pop();
|
|
27
|
+
const platform = parts.pop();
|
|
28
|
+
const version = parts.join('-');
|
|
29
|
+
if (!version || !platform || !arch)
|
|
30
|
+
return null;
|
|
31
|
+
return {
|
|
32
|
+
version,
|
|
33
|
+
platform,
|
|
34
|
+
arch,
|
|
35
|
+
path: join(binDir, entryName),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Calculate the total size of all files in a directory (recursive)
|
|
39
|
+
async function calculateDirectorySize(dirPath) {
|
|
40
|
+
let sizeBytes = 0;
|
|
41
|
+
try {
|
|
42
|
+
const files = await readdir(dirPath, { recursive: true });
|
|
43
|
+
for (const file of files) {
|
|
44
|
+
try {
|
|
45
|
+
const filePath = join(dirPath, file.toString());
|
|
46
|
+
const fileStat = await lstat(filePath);
|
|
47
|
+
if (fileStat.isFile()) {
|
|
48
|
+
sizeBytes += fileStat.size;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Skip files we can't stat
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Skip directories we can't read
|
|
58
|
+
}
|
|
59
|
+
return sizeBytes;
|
|
60
|
+
}
|
|
61
|
+
async function getPostgresVersion(binPath) {
|
|
62
|
+
const ext = platformService.getExecutableExtension();
|
|
63
|
+
const postgresPath = join(binPath, 'bin', `postgres${ext}`);
|
|
64
|
+
if (!existsSync(postgresPath)) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const { stdout } = await execFileAsync(postgresPath, ['--version']);
|
|
69
|
+
const match = stdout.match(/\(PostgreSQL\)\s+([\d.]+)/);
|
|
70
|
+
return match ? match[1] : null;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export async function getInstalledPostgresEngines() {
|
|
77
|
+
const binDir = paths.bin;
|
|
78
|
+
if (!existsSync(binDir)) {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
82
|
+
const engines = [];
|
|
83
|
+
for (const entry of entries) {
|
|
84
|
+
if (!entry.isDirectory())
|
|
85
|
+
continue;
|
|
86
|
+
if (!entry.name.startsWith('postgresql-'))
|
|
87
|
+
continue;
|
|
88
|
+
const parsed = parseEngineDirectory(entry.name, 'postgresql-', binDir);
|
|
89
|
+
if (!parsed)
|
|
90
|
+
continue;
|
|
91
|
+
const actualVersion = (await getPostgresVersion(parsed.path)) || parsed.version;
|
|
92
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
93
|
+
engines.push({
|
|
94
|
+
engine: 'postgresql',
|
|
95
|
+
version: actualVersion,
|
|
96
|
+
platform: parsed.platform,
|
|
97
|
+
arch: parsed.arch,
|
|
98
|
+
path: parsed.path,
|
|
99
|
+
sizeBytes,
|
|
100
|
+
source: 'downloaded',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
104
|
+
return engines;
|
|
105
|
+
}
|
|
106
|
+
async function getMariadbVersion(binPath) {
|
|
107
|
+
const ext = platformService.getExecutableExtension();
|
|
108
|
+
// Try mariadbd first, then mysqld
|
|
109
|
+
let serverPath = join(binPath, 'bin', `mariadbd${ext}`);
|
|
110
|
+
if (!existsSync(serverPath)) {
|
|
111
|
+
serverPath = join(binPath, 'bin', `mysqld${ext}`);
|
|
112
|
+
}
|
|
113
|
+
if (!existsSync(serverPath)) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const { stdout } = await execFileAsync(serverPath, ['--version']);
|
|
118
|
+
// Parse output like "mariadbd Ver 11.8.5-MariaDB"
|
|
119
|
+
const match = stdout.match(/Ver\s+([\d.]+)/);
|
|
120
|
+
return match ? match[1] : null;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
export async function getInstalledMariadbEngines() {
|
|
127
|
+
const binDir = paths.bin;
|
|
128
|
+
if (!existsSync(binDir)) {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
132
|
+
const engines = [];
|
|
133
|
+
for (const entry of entries) {
|
|
134
|
+
if (!entry.isDirectory())
|
|
135
|
+
continue;
|
|
136
|
+
if (!entry.name.startsWith('mariadb-'))
|
|
137
|
+
continue;
|
|
138
|
+
const parsed = parseEngineDirectory(entry.name, 'mariadb-', binDir);
|
|
139
|
+
if (!parsed)
|
|
140
|
+
continue;
|
|
141
|
+
const actualVersion = (await getMariadbVersion(parsed.path)) || parsed.version;
|
|
142
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
143
|
+
engines.push({
|
|
144
|
+
engine: 'mariadb',
|
|
145
|
+
version: actualVersion,
|
|
146
|
+
platform: parsed.platform,
|
|
147
|
+
arch: parsed.arch,
|
|
148
|
+
path: parsed.path,
|
|
149
|
+
sizeBytes,
|
|
150
|
+
source: 'downloaded',
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
154
|
+
return engines;
|
|
155
|
+
}
|
|
156
|
+
async function getMysqlVersion(binPath) {
|
|
157
|
+
const ext = platformService.getExecutableExtension();
|
|
158
|
+
const serverPath = join(binPath, 'bin', `mysqld${ext}`);
|
|
159
|
+
if (!existsSync(serverPath)) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
const { stdout } = await execFileAsync(serverPath, ['--version']);
|
|
164
|
+
// Parse output like "mysqld Ver 8.0.40 for Linux on x86_64"
|
|
165
|
+
const match = stdout.match(/Ver\s+([\d.]+)/);
|
|
166
|
+
return match ? match[1] : null;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Get installed MySQL engines from downloaded binaries
|
|
173
|
+
async function getInstalledMysqlEngines() {
|
|
174
|
+
const binDir = paths.bin;
|
|
175
|
+
if (!existsSync(binDir)) {
|
|
176
|
+
return [];
|
|
177
|
+
}
|
|
178
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
179
|
+
const engines = [];
|
|
180
|
+
for (const entry of entries) {
|
|
181
|
+
if (!entry.isDirectory())
|
|
182
|
+
continue;
|
|
183
|
+
if (!entry.name.startsWith('mysql-'))
|
|
184
|
+
continue;
|
|
185
|
+
const parsed = parseEngineDirectory(entry.name, 'mysql-', binDir);
|
|
186
|
+
if (!parsed)
|
|
187
|
+
continue;
|
|
188
|
+
const actualVersion = (await getMysqlVersion(parsed.path)) || parsed.version;
|
|
189
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
190
|
+
engines.push({
|
|
191
|
+
engine: 'mysql',
|
|
192
|
+
version: actualVersion,
|
|
193
|
+
platform: parsed.platform,
|
|
194
|
+
arch: parsed.arch,
|
|
195
|
+
path: parsed.path,
|
|
196
|
+
sizeBytes,
|
|
197
|
+
source: 'downloaded',
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
201
|
+
return engines;
|
|
202
|
+
}
|
|
203
|
+
// Get SQLite version from binary path
|
|
204
|
+
async function getSqliteVersion(binPath) {
|
|
205
|
+
const ext = platformService.getExecutableExtension();
|
|
206
|
+
const sqlite3Path = join(binPath, 'bin', `sqlite3${ext}`);
|
|
207
|
+
if (!existsSync(sqlite3Path)) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
const { stdout } = await execFileAsync(sqlite3Path, ['--version']);
|
|
212
|
+
// sqlite3 --version outputs: "3.51.2 2025-01-08 12:00:00 ..."
|
|
213
|
+
const match = stdout.match(/^(\d+\.\d+\.\d+)/);
|
|
214
|
+
return match ? match[1] : null;
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Get installed SQLite engines from downloaded binaries
|
|
221
|
+
async function getInstalledSqliteEngines() {
|
|
222
|
+
const binDir = paths.bin;
|
|
223
|
+
if (!existsSync(binDir)) {
|
|
224
|
+
return [];
|
|
225
|
+
}
|
|
226
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
227
|
+
const engines = [];
|
|
228
|
+
for (const entry of entries) {
|
|
229
|
+
if (!entry.isDirectory())
|
|
230
|
+
continue;
|
|
231
|
+
if (!entry.name.startsWith('sqlite-'))
|
|
232
|
+
continue;
|
|
233
|
+
const parsed = parseEngineDirectory(entry.name, 'sqlite-', binDir);
|
|
234
|
+
if (!parsed)
|
|
235
|
+
continue;
|
|
236
|
+
const actualVersion = (await getSqliteVersion(parsed.path)) || parsed.version;
|
|
237
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
238
|
+
engines.push({
|
|
239
|
+
engine: 'sqlite',
|
|
240
|
+
version: actualVersion,
|
|
241
|
+
platform: parsed.platform,
|
|
242
|
+
arch: parsed.arch,
|
|
243
|
+
path: parsed.path,
|
|
244
|
+
sizeBytes,
|
|
245
|
+
source: 'downloaded',
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
249
|
+
return engines;
|
|
250
|
+
}
|
|
251
|
+
// Get DuckDB version from binary path
|
|
252
|
+
async function getDuckDBVersion(binPath) {
|
|
253
|
+
const ext = platformService.getExecutableExtension();
|
|
254
|
+
const duckdbPath = join(binPath, 'bin', `duckdb${ext}`);
|
|
255
|
+
if (!existsSync(duckdbPath)) {
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
try {
|
|
259
|
+
const { stdout } = await execFileAsync(duckdbPath, ['--version']);
|
|
260
|
+
// duckdb --version outputs: "v1.4.3 abcdef123" or just "1.4.3"
|
|
261
|
+
const match = stdout.match(/v?(\d+\.\d+\.\d+)/);
|
|
262
|
+
return match ? match[1] : null;
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Get installed DuckDB engines from downloaded binaries
|
|
269
|
+
async function getInstalledDuckDBEngines() {
|
|
270
|
+
const binDir = paths.bin;
|
|
271
|
+
if (!existsSync(binDir)) {
|
|
272
|
+
return [];
|
|
273
|
+
}
|
|
274
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
275
|
+
const engines = [];
|
|
276
|
+
for (const entry of entries) {
|
|
277
|
+
if (!entry.isDirectory())
|
|
278
|
+
continue;
|
|
279
|
+
if (!entry.name.startsWith('duckdb-'))
|
|
280
|
+
continue;
|
|
281
|
+
const parsed = parseEngineDirectory(entry.name, 'duckdb-', binDir);
|
|
282
|
+
if (!parsed)
|
|
283
|
+
continue;
|
|
284
|
+
const actualVersion = (await getDuckDBVersion(parsed.path)) || parsed.version;
|
|
285
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
286
|
+
engines.push({
|
|
287
|
+
engine: 'duckdb',
|
|
288
|
+
version: actualVersion,
|
|
289
|
+
platform: parsed.platform,
|
|
290
|
+
arch: parsed.arch,
|
|
291
|
+
path: parsed.path,
|
|
292
|
+
sizeBytes,
|
|
293
|
+
source: 'downloaded',
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
297
|
+
return engines;
|
|
298
|
+
}
|
|
299
|
+
// Get MongoDB version from binary path
|
|
300
|
+
async function getMongodbVersion(binPath) {
|
|
301
|
+
const ext = platformService.getExecutableExtension();
|
|
302
|
+
const serverPath = join(binPath, 'bin', `mongod${ext}`);
|
|
303
|
+
if (!existsSync(serverPath)) {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
try {
|
|
307
|
+
const { stdout } = await execFileAsync(serverPath, ['--version']);
|
|
308
|
+
// Parse output like "db version v7.0.28"
|
|
309
|
+
const match = stdout.match(/v([\d.]+)/);
|
|
310
|
+
return match ? match[1] : null;
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// Get installed MongoDB engines from downloaded binaries
|
|
317
|
+
async function getInstalledMongodbEngines() {
|
|
318
|
+
const binDir = paths.bin;
|
|
319
|
+
if (!existsSync(binDir)) {
|
|
320
|
+
return [];
|
|
321
|
+
}
|
|
322
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
323
|
+
const engines = [];
|
|
324
|
+
for (const entry of entries) {
|
|
325
|
+
if (!entry.isDirectory())
|
|
326
|
+
continue;
|
|
327
|
+
if (!entry.name.startsWith('mongodb-'))
|
|
328
|
+
continue;
|
|
329
|
+
const parsed = parseEngineDirectory(entry.name, 'mongodb-', binDir);
|
|
330
|
+
if (!parsed)
|
|
331
|
+
continue;
|
|
332
|
+
const actualVersion = (await getMongodbVersion(parsed.path)) || parsed.version;
|
|
333
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
334
|
+
engines.push({
|
|
335
|
+
engine: 'mongodb',
|
|
336
|
+
version: actualVersion,
|
|
337
|
+
platform: parsed.platform,
|
|
338
|
+
arch: parsed.arch,
|
|
339
|
+
path: parsed.path,
|
|
340
|
+
sizeBytes,
|
|
341
|
+
source: 'downloaded',
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
345
|
+
return engines;
|
|
346
|
+
}
|
|
347
|
+
// Get Redis version from binary path
|
|
348
|
+
async function getRedisVersion(binPath) {
|
|
349
|
+
const ext = platformService.getExecutableExtension();
|
|
350
|
+
const serverPath = join(binPath, 'bin', `redis-server${ext}`);
|
|
351
|
+
if (!existsSync(serverPath)) {
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
try {
|
|
355
|
+
const { stdout } = await execFileAsync(serverPath, ['--version']);
|
|
356
|
+
// Parse output like "Redis server v=7.4.7 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=..."
|
|
357
|
+
const match = stdout.match(/v=([\d.]+)/);
|
|
358
|
+
return match ? match[1] : null;
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
return null;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
// Get installed Redis engines from downloaded binaries
|
|
365
|
+
async function getInstalledRedisEngines() {
|
|
366
|
+
const binDir = paths.bin;
|
|
367
|
+
if (!existsSync(binDir)) {
|
|
368
|
+
return [];
|
|
369
|
+
}
|
|
370
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
371
|
+
const engines = [];
|
|
372
|
+
for (const entry of entries) {
|
|
373
|
+
if (!entry.isDirectory())
|
|
374
|
+
continue;
|
|
375
|
+
if (!entry.name.startsWith('redis-'))
|
|
376
|
+
continue;
|
|
377
|
+
const parsed = parseEngineDirectory(entry.name, 'redis-', binDir);
|
|
378
|
+
if (!parsed)
|
|
379
|
+
continue;
|
|
380
|
+
const actualVersion = (await getRedisVersion(parsed.path)) || parsed.version;
|
|
381
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
382
|
+
engines.push({
|
|
383
|
+
engine: 'redis',
|
|
384
|
+
version: actualVersion,
|
|
385
|
+
platform: parsed.platform,
|
|
386
|
+
arch: parsed.arch,
|
|
387
|
+
path: parsed.path,
|
|
388
|
+
sizeBytes,
|
|
389
|
+
source: 'downloaded',
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
393
|
+
return engines;
|
|
394
|
+
}
|
|
395
|
+
// Get Valkey version from binary path
|
|
396
|
+
async function getValkeyVersion(binPath) {
|
|
397
|
+
const ext = platformService.getExecutableExtension();
|
|
398
|
+
const serverPath = join(binPath, 'bin', `valkey-server${ext}`);
|
|
399
|
+
if (!existsSync(serverPath)) {
|
|
400
|
+
return null;
|
|
401
|
+
}
|
|
402
|
+
try {
|
|
403
|
+
const { stdout } = await execFileAsync(serverPath, ['--version']);
|
|
404
|
+
// Parse output like "Valkey server v=8.0.6 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=..."
|
|
405
|
+
const match = stdout.match(/v=([\d.]+)/);
|
|
406
|
+
return match ? match[1] : null;
|
|
407
|
+
}
|
|
408
|
+
catch {
|
|
409
|
+
return null;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
// Get installed Valkey engines from downloaded binaries
|
|
413
|
+
async function getInstalledValkeyEngines() {
|
|
414
|
+
const binDir = paths.bin;
|
|
415
|
+
if (!existsSync(binDir)) {
|
|
416
|
+
return [];
|
|
417
|
+
}
|
|
418
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
419
|
+
const engines = [];
|
|
420
|
+
for (const entry of entries) {
|
|
421
|
+
if (!entry.isDirectory())
|
|
422
|
+
continue;
|
|
423
|
+
if (!entry.name.startsWith('valkey-'))
|
|
424
|
+
continue;
|
|
425
|
+
const parsed = parseEngineDirectory(entry.name, 'valkey-', binDir);
|
|
426
|
+
if (!parsed)
|
|
427
|
+
continue;
|
|
428
|
+
const actualVersion = (await getValkeyVersion(parsed.path)) || parsed.version;
|
|
429
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
430
|
+
engines.push({
|
|
431
|
+
engine: 'valkey',
|
|
432
|
+
version: actualVersion,
|
|
433
|
+
platform: parsed.platform,
|
|
434
|
+
arch: parsed.arch,
|
|
435
|
+
path: parsed.path,
|
|
436
|
+
sizeBytes,
|
|
437
|
+
source: 'downloaded',
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
441
|
+
return engines;
|
|
442
|
+
}
|
|
443
|
+
// Get ClickHouse version from binary path
|
|
444
|
+
async function getClickHouseVersion(binPath) {
|
|
445
|
+
const clickhousePath = join(binPath, 'bin', 'clickhouse');
|
|
446
|
+
if (!existsSync(clickhousePath)) {
|
|
447
|
+
return null;
|
|
448
|
+
}
|
|
449
|
+
try {
|
|
450
|
+
const { stdout } = await execFileAsync(clickhousePath, [
|
|
451
|
+
'client',
|
|
452
|
+
'--version',
|
|
453
|
+
]);
|
|
454
|
+
// Parse output like "ClickHouse client version 25.12.3.21 (official build)"
|
|
455
|
+
const match = stdout.match(/version\s+([\d.]+)/);
|
|
456
|
+
return match ? match[1] : null;
|
|
457
|
+
}
|
|
458
|
+
catch {
|
|
459
|
+
return null;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
// Get installed ClickHouse engines from downloaded binaries
|
|
463
|
+
async function getInstalledClickHouseEngines() {
|
|
464
|
+
const binDir = paths.bin;
|
|
465
|
+
if (!existsSync(binDir)) {
|
|
466
|
+
return [];
|
|
467
|
+
}
|
|
468
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
469
|
+
const engines = [];
|
|
470
|
+
for (const entry of entries) {
|
|
471
|
+
if (!entry.isDirectory())
|
|
472
|
+
continue;
|
|
473
|
+
if (!entry.name.startsWith('clickhouse-'))
|
|
474
|
+
continue;
|
|
475
|
+
const parsed = parseEngineDirectory(entry.name, 'clickhouse-', binDir);
|
|
476
|
+
if (!parsed)
|
|
477
|
+
continue;
|
|
478
|
+
const actualVersion = (await getClickHouseVersion(parsed.path)) || parsed.version;
|
|
479
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
480
|
+
engines.push({
|
|
481
|
+
engine: 'clickhouse',
|
|
482
|
+
version: actualVersion,
|
|
483
|
+
platform: parsed.platform,
|
|
484
|
+
arch: parsed.arch,
|
|
485
|
+
path: parsed.path,
|
|
486
|
+
sizeBytes,
|
|
487
|
+
source: 'downloaded',
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
491
|
+
return engines;
|
|
492
|
+
}
|
|
493
|
+
// Get Qdrant version from binary path
|
|
494
|
+
async function getQdrantVersion(binPath) {
|
|
495
|
+
const ext = platformService.getExecutableExtension();
|
|
496
|
+
const qdrantPath = join(binPath, 'bin', `qdrant${ext}`);
|
|
497
|
+
if (!existsSync(qdrantPath)) {
|
|
498
|
+
return null;
|
|
499
|
+
}
|
|
500
|
+
try {
|
|
501
|
+
const { stdout } = await execFileAsync(qdrantPath, ['--version']);
|
|
502
|
+
// Parse output like "qdrant 1.16.3" or "v1.16.3"
|
|
503
|
+
const match = stdout.match(/(?:qdrant\s+)?v?(\d+\.\d+\.\d+)/);
|
|
504
|
+
return match ? match[1] : null;
|
|
505
|
+
}
|
|
506
|
+
catch {
|
|
507
|
+
return null;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
// Get installed Qdrant engines from downloaded binaries
|
|
511
|
+
async function getInstalledQdrantEngines() {
|
|
512
|
+
const binDir = paths.bin;
|
|
513
|
+
if (!existsSync(binDir)) {
|
|
514
|
+
return [];
|
|
515
|
+
}
|
|
516
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
517
|
+
const engines = [];
|
|
518
|
+
for (const entry of entries) {
|
|
519
|
+
if (!entry.isDirectory())
|
|
520
|
+
continue;
|
|
521
|
+
if (!entry.name.startsWith('qdrant-'))
|
|
522
|
+
continue;
|
|
523
|
+
const parsed = parseEngineDirectory(entry.name, 'qdrant-', binDir);
|
|
524
|
+
if (!parsed)
|
|
525
|
+
continue;
|
|
526
|
+
const actualVersion = (await getQdrantVersion(parsed.path)) || parsed.version;
|
|
527
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
528
|
+
engines.push({
|
|
529
|
+
engine: 'qdrant',
|
|
530
|
+
version: actualVersion,
|
|
531
|
+
platform: parsed.platform,
|
|
532
|
+
arch: parsed.arch,
|
|
533
|
+
path: parsed.path,
|
|
534
|
+
sizeBytes,
|
|
535
|
+
source: 'downloaded',
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
539
|
+
return engines;
|
|
540
|
+
}
|
|
541
|
+
// Get Meilisearch version from binary path
|
|
542
|
+
async function getMeilisearchVersion(binPath) {
|
|
543
|
+
const ext = platformService.getExecutableExtension();
|
|
544
|
+
const meilisearchPath = join(binPath, 'bin', `meilisearch${ext}`);
|
|
545
|
+
if (!existsSync(meilisearchPath)) {
|
|
546
|
+
return null;
|
|
547
|
+
}
|
|
548
|
+
try {
|
|
549
|
+
const { stdout } = await execFileAsync(meilisearchPath, ['--version']);
|
|
550
|
+
// Parse output like "meilisearch 1.33.1" or "v1.33.1"
|
|
551
|
+
const match = stdout.match(/(?:meilisearch\s+)?v?(\d+\.\d+\.\d+)/);
|
|
552
|
+
return match ? match[1] : null;
|
|
553
|
+
}
|
|
554
|
+
catch {
|
|
555
|
+
return null;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
// Get installed Meilisearch engines from downloaded binaries
|
|
559
|
+
async function getInstalledMeilisearchEngines() {
|
|
560
|
+
const binDir = paths.bin;
|
|
561
|
+
if (!existsSync(binDir)) {
|
|
562
|
+
return [];
|
|
563
|
+
}
|
|
564
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
565
|
+
const engines = [];
|
|
566
|
+
for (const entry of entries) {
|
|
567
|
+
if (!entry.isDirectory())
|
|
568
|
+
continue;
|
|
569
|
+
if (!entry.name.startsWith('meilisearch-'))
|
|
570
|
+
continue;
|
|
571
|
+
const parsed = parseEngineDirectory(entry.name, 'meilisearch-', binDir);
|
|
572
|
+
if (!parsed)
|
|
573
|
+
continue;
|
|
574
|
+
const actualVersion = (await getMeilisearchVersion(parsed.path)) || parsed.version;
|
|
575
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
576
|
+
engines.push({
|
|
577
|
+
engine: 'meilisearch',
|
|
578
|
+
version: actualVersion,
|
|
579
|
+
platform: parsed.platform,
|
|
580
|
+
arch: parsed.arch,
|
|
581
|
+
path: parsed.path,
|
|
582
|
+
sizeBytes,
|
|
583
|
+
source: 'downloaded',
|
|
584
|
+
});
|
|
585
|
+
}
|
|
586
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
587
|
+
return engines;
|
|
588
|
+
}
|
|
589
|
+
// Get CouchDB version from binary path
|
|
590
|
+
// Note: CouchDB doesn't support --version flag, so we just verify the binary exists
|
|
591
|
+
// and return null to use the version from the directory name
|
|
592
|
+
async function getCouchDBVersion(binPath) {
|
|
593
|
+
const ext = platformService.getExecutableExtension();
|
|
594
|
+
const couchdbPath = join(binPath, 'bin', `couchdb${ext}`);
|
|
595
|
+
if (!existsSync(couchdbPath)) {
|
|
596
|
+
return null;
|
|
597
|
+
}
|
|
598
|
+
// CouchDB is an Erlang app that tries to start when run with any args
|
|
599
|
+
// Just return null to use directory-parsed version
|
|
600
|
+
return null;
|
|
601
|
+
}
|
|
602
|
+
// Get installed CouchDB engines from downloaded binaries
|
|
603
|
+
async function getInstalledCouchDBEngines() {
|
|
604
|
+
const binDir = paths.bin;
|
|
605
|
+
if (!existsSync(binDir)) {
|
|
606
|
+
return [];
|
|
607
|
+
}
|
|
608
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
609
|
+
const engines = [];
|
|
610
|
+
for (const entry of entries) {
|
|
611
|
+
if (!entry.isDirectory())
|
|
612
|
+
continue;
|
|
613
|
+
if (!entry.name.startsWith('couchdb-'))
|
|
614
|
+
continue;
|
|
615
|
+
const parsed = parseEngineDirectory(entry.name, 'couchdb-', binDir);
|
|
616
|
+
if (!parsed)
|
|
617
|
+
continue;
|
|
618
|
+
const actualVersion = (await getCouchDBVersion(parsed.path)) || parsed.version;
|
|
619
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
620
|
+
engines.push({
|
|
621
|
+
engine: 'couchdb',
|
|
622
|
+
version: actualVersion,
|
|
623
|
+
platform: parsed.platform,
|
|
624
|
+
arch: parsed.arch,
|
|
625
|
+
path: parsed.path,
|
|
626
|
+
sizeBytes,
|
|
627
|
+
source: 'downloaded',
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
631
|
+
return engines;
|
|
632
|
+
}
|
|
633
|
+
// Get CockroachDB version from binary path
|
|
634
|
+
async function getCockroachDBVersion(binPath) {
|
|
635
|
+
const ext = platformService.getExecutableExtension();
|
|
636
|
+
const cockroachPath = join(binPath, 'bin', `cockroach${ext}`);
|
|
637
|
+
if (!existsSync(cockroachPath)) {
|
|
638
|
+
return null;
|
|
639
|
+
}
|
|
640
|
+
try {
|
|
641
|
+
const { stdout } = await execFileAsync(cockroachPath, ['version']);
|
|
642
|
+
// Parse output like "Build Tag: v25.4.2" or "CockroachDB CCL v25.4.2"
|
|
643
|
+
const match = stdout.match(/v?(\d+\.\d+\.\d+)/);
|
|
644
|
+
return match ? match[1] : null;
|
|
645
|
+
}
|
|
646
|
+
catch {
|
|
647
|
+
return null;
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
// Get installed CockroachDB engines from downloaded binaries
|
|
651
|
+
async function getInstalledCockroachDBEngines() {
|
|
652
|
+
const binDir = paths.bin;
|
|
653
|
+
if (!existsSync(binDir)) {
|
|
654
|
+
return [];
|
|
655
|
+
}
|
|
656
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
657
|
+
const engines = [];
|
|
658
|
+
for (const entry of entries) {
|
|
659
|
+
if (!entry.isDirectory())
|
|
660
|
+
continue;
|
|
661
|
+
if (!entry.name.startsWith('cockroachdb-'))
|
|
662
|
+
continue;
|
|
663
|
+
const parsed = parseEngineDirectory(entry.name, 'cockroachdb-', binDir);
|
|
664
|
+
if (!parsed)
|
|
665
|
+
continue;
|
|
666
|
+
const actualVersion = (await getCockroachDBVersion(parsed.path)) || parsed.version;
|
|
667
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
668
|
+
engines.push({
|
|
669
|
+
engine: 'cockroachdb',
|
|
670
|
+
version: actualVersion,
|
|
671
|
+
platform: parsed.platform,
|
|
672
|
+
arch: parsed.arch,
|
|
673
|
+
path: parsed.path,
|
|
674
|
+
sizeBytes,
|
|
675
|
+
source: 'downloaded',
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
679
|
+
return engines;
|
|
680
|
+
}
|
|
681
|
+
// Get SurrealDB version from binary path
|
|
682
|
+
async function getSurrealDBVersion(binPath) {
|
|
683
|
+
const ext = platformService.getExecutableExtension();
|
|
684
|
+
const surrealPath = join(binPath, 'bin', `surreal${ext}`);
|
|
685
|
+
if (!existsSync(surrealPath)) {
|
|
686
|
+
return null;
|
|
687
|
+
}
|
|
688
|
+
try {
|
|
689
|
+
const { stdout } = await execFileAsync(surrealPath, ['version']);
|
|
690
|
+
// Parse output like "surreal 2.3.2 for linux on x86_64" or "2.3.2"
|
|
691
|
+
const match = stdout.match(/(\d+\.\d+\.\d+)/);
|
|
692
|
+
return match ? match[1] : null;
|
|
693
|
+
}
|
|
694
|
+
catch {
|
|
695
|
+
return null;
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
// Get installed SurrealDB engines from downloaded binaries
|
|
699
|
+
async function getInstalledSurrealDBEngines() {
|
|
700
|
+
const binDir = paths.bin;
|
|
701
|
+
if (!existsSync(binDir)) {
|
|
702
|
+
return [];
|
|
703
|
+
}
|
|
704
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
705
|
+
const engines = [];
|
|
706
|
+
for (const entry of entries) {
|
|
707
|
+
if (!entry.isDirectory())
|
|
708
|
+
continue;
|
|
709
|
+
if (!entry.name.startsWith('surrealdb-'))
|
|
710
|
+
continue;
|
|
711
|
+
const parsed = parseEngineDirectory(entry.name, 'surrealdb-', binDir);
|
|
712
|
+
if (!parsed)
|
|
713
|
+
continue;
|
|
714
|
+
const actualVersion = (await getSurrealDBVersion(parsed.path)) || parsed.version;
|
|
715
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
716
|
+
engines.push({
|
|
717
|
+
engine: 'surrealdb',
|
|
718
|
+
version: actualVersion,
|
|
719
|
+
platform: parsed.platform,
|
|
720
|
+
arch: parsed.arch,
|
|
721
|
+
path: parsed.path,
|
|
722
|
+
sizeBytes,
|
|
723
|
+
source: 'downloaded',
|
|
724
|
+
});
|
|
725
|
+
}
|
|
726
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
727
|
+
return engines;
|
|
728
|
+
}
|
|
729
|
+
// Get QuestDB version from directory path
|
|
730
|
+
// QuestDB doesn't have a simple --version flag, extract from directory name
|
|
731
|
+
async function getQuestDBVersion(binPath) {
|
|
732
|
+
const platform = platformService.getPlatformInfo().platform;
|
|
733
|
+
// Check for questdb startup script
|
|
734
|
+
if (platform === 'win32') {
|
|
735
|
+
if (!existsSync(join(binPath, 'questdb.exe'))) {
|
|
736
|
+
return null;
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
else {
|
|
740
|
+
if (!existsSync(join(binPath, 'questdb.sh'))) {
|
|
741
|
+
return null;
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
// Version is embedded in directory name, return null to use directory-parsed version
|
|
745
|
+
return null;
|
|
746
|
+
}
|
|
747
|
+
// Get installed QuestDB engines from downloaded binaries
|
|
748
|
+
async function getInstalledQuestDBEngines() {
|
|
749
|
+
const binDir = paths.bin;
|
|
750
|
+
if (!existsSync(binDir)) {
|
|
751
|
+
return [];
|
|
752
|
+
}
|
|
753
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
754
|
+
const engines = [];
|
|
755
|
+
for (const entry of entries) {
|
|
756
|
+
if (!entry.isDirectory())
|
|
757
|
+
continue;
|
|
758
|
+
if (!entry.name.startsWith('questdb-'))
|
|
759
|
+
continue;
|
|
760
|
+
const parsed = parseEngineDirectory(entry.name, 'questdb-', binDir);
|
|
761
|
+
if (!parsed)
|
|
762
|
+
continue;
|
|
763
|
+
const actualVersion = (await getQuestDBVersion(parsed.path)) || parsed.version;
|
|
764
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
765
|
+
engines.push({
|
|
766
|
+
engine: 'questdb',
|
|
767
|
+
version: actualVersion,
|
|
768
|
+
platform: parsed.platform,
|
|
769
|
+
arch: parsed.arch,
|
|
770
|
+
path: parsed.path,
|
|
771
|
+
sizeBytes,
|
|
772
|
+
source: 'downloaded',
|
|
773
|
+
});
|
|
774
|
+
}
|
|
775
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
776
|
+
return engines;
|
|
777
|
+
}
|
|
778
|
+
// Get TypeDB version from binary path
|
|
779
|
+
// TypeDB is a Rust binary but uses a launcher script. Check for server binary existence.
|
|
780
|
+
async function getTypeDBVersion(binPath) {
|
|
781
|
+
const ext = platformService.getExecutableExtension();
|
|
782
|
+
const serverPath = join(binPath, 'bin', 'server', `typedb_server_bin${ext}`);
|
|
783
|
+
if (!existsSync(serverPath)) {
|
|
784
|
+
return null;
|
|
785
|
+
}
|
|
786
|
+
// TypeDB server binary doesn't have a simple --version flag
|
|
787
|
+
// Return null to use directory-parsed version
|
|
788
|
+
return null;
|
|
789
|
+
}
|
|
790
|
+
// Get installed TypeDB engines from downloaded binaries
|
|
791
|
+
async function getInstalledTypeDBEngines() {
|
|
792
|
+
const binDir = paths.bin;
|
|
793
|
+
if (!existsSync(binDir)) {
|
|
794
|
+
return [];
|
|
795
|
+
}
|
|
796
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
797
|
+
const engines = [];
|
|
798
|
+
for (const entry of entries) {
|
|
799
|
+
if (!entry.isDirectory())
|
|
800
|
+
continue;
|
|
801
|
+
if (!entry.name.startsWith('typedb-'))
|
|
802
|
+
continue;
|
|
803
|
+
const parsed = parseEngineDirectory(entry.name, 'typedb-', binDir);
|
|
804
|
+
if (!parsed)
|
|
805
|
+
continue;
|
|
806
|
+
const actualVersion = (await getTypeDBVersion(parsed.path)) || parsed.version;
|
|
807
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
808
|
+
engines.push({
|
|
809
|
+
engine: 'typedb',
|
|
810
|
+
version: actualVersion,
|
|
811
|
+
platform: parsed.platform,
|
|
812
|
+
arch: parsed.arch,
|
|
813
|
+
path: parsed.path,
|
|
814
|
+
sizeBytes,
|
|
815
|
+
source: 'downloaded',
|
|
816
|
+
});
|
|
817
|
+
}
|
|
818
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
819
|
+
return engines;
|
|
820
|
+
}
|
|
821
|
+
// Get InfluxDB version from binary path
|
|
822
|
+
async function getInfluxDBVersion(binPath) {
|
|
823
|
+
const ext = platformService.getExecutableExtension();
|
|
824
|
+
const influxdbPath = join(binPath, 'bin', `influxdb3${ext}`);
|
|
825
|
+
if (!existsSync(influxdbPath)) {
|
|
826
|
+
return null;
|
|
827
|
+
}
|
|
828
|
+
try {
|
|
829
|
+
const { stdout } = await execFileAsync(influxdbPath, ['--version']);
|
|
830
|
+
const match = stdout.match(/v?(\d+\.\d+\.\d+)/);
|
|
831
|
+
return match ? match[1] : null;
|
|
832
|
+
}
|
|
833
|
+
catch {
|
|
834
|
+
return null;
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
// Get installed InfluxDB engines from downloaded binaries
|
|
838
|
+
async function getInstalledInfluxDBEngines() {
|
|
839
|
+
const binDir = paths.bin;
|
|
840
|
+
if (!existsSync(binDir)) {
|
|
841
|
+
return [];
|
|
842
|
+
}
|
|
843
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
844
|
+
const engines = [];
|
|
845
|
+
for (const entry of entries) {
|
|
846
|
+
if (!entry.isDirectory())
|
|
847
|
+
continue;
|
|
848
|
+
if (!entry.name.startsWith('influxdb-'))
|
|
849
|
+
continue;
|
|
850
|
+
const parsed = parseEngineDirectory(entry.name, 'influxdb-', binDir);
|
|
851
|
+
if (!parsed)
|
|
852
|
+
continue;
|
|
853
|
+
const actualVersion = (await getInfluxDBVersion(parsed.path)) || parsed.version;
|
|
854
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
855
|
+
engines.push({
|
|
856
|
+
engine: 'influxdb',
|
|
857
|
+
version: actualVersion,
|
|
858
|
+
platform: parsed.platform,
|
|
859
|
+
arch: parsed.arch,
|
|
860
|
+
path: parsed.path,
|
|
861
|
+
sizeBytes,
|
|
862
|
+
source: 'downloaded',
|
|
863
|
+
});
|
|
864
|
+
}
|
|
865
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
866
|
+
return engines;
|
|
867
|
+
}
|
|
868
|
+
// Get FerretDB version from binary path
|
|
869
|
+
async function getFerretDBVersion(binPath) {
|
|
870
|
+
const ext = platformService.getExecutableExtension();
|
|
871
|
+
const ferretdbPath = join(binPath, 'bin', `ferretdb${ext}`);
|
|
872
|
+
if (!existsSync(ferretdbPath)) {
|
|
873
|
+
return null;
|
|
874
|
+
}
|
|
875
|
+
try {
|
|
876
|
+
const { stdout } = await execFileAsync(ferretdbPath, ['--version']);
|
|
877
|
+
// Parse output like "ferretdb version 2.7.0" or "v2.7.0"
|
|
878
|
+
const match = stdout.match(/(?:ferretdb\s+)?(?:version\s+)?v?(\d+\.\d+\.\d+)/);
|
|
879
|
+
return match ? match[1] : null;
|
|
880
|
+
}
|
|
881
|
+
catch {
|
|
882
|
+
return null;
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
// Get installed FerretDB engines from downloaded binaries
|
|
886
|
+
async function getInstalledFerretDBEngines() {
|
|
887
|
+
const binDir = paths.bin;
|
|
888
|
+
if (!existsSync(binDir)) {
|
|
889
|
+
return [];
|
|
890
|
+
}
|
|
891
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
892
|
+
const engines = [];
|
|
893
|
+
for (const entry of entries) {
|
|
894
|
+
if (!entry.isDirectory())
|
|
895
|
+
continue;
|
|
896
|
+
if (!entry.name.startsWith('ferretdb-'))
|
|
897
|
+
continue;
|
|
898
|
+
const parsed = parseEngineDirectory(entry.name, 'ferretdb-', binDir);
|
|
899
|
+
if (!parsed)
|
|
900
|
+
continue;
|
|
901
|
+
const actualVersion = (await getFerretDBVersion(parsed.path)) || parsed.version;
|
|
902
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
903
|
+
engines.push({
|
|
904
|
+
engine: 'ferretdb',
|
|
905
|
+
version: actualVersion,
|
|
906
|
+
platform: parsed.platform,
|
|
907
|
+
arch: parsed.arch,
|
|
908
|
+
path: parsed.path,
|
|
909
|
+
sizeBytes,
|
|
910
|
+
source: 'downloaded',
|
|
911
|
+
});
|
|
912
|
+
}
|
|
913
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
914
|
+
return engines;
|
|
915
|
+
}
|
|
916
|
+
// Get Weaviate version from binary path
|
|
917
|
+
async function getWeaviateVersion(binPath) {
|
|
918
|
+
const ext = platformService.getExecutableExtension();
|
|
919
|
+
const weaviatePath = join(binPath, 'bin', `weaviate${ext}`);
|
|
920
|
+
if (!existsSync(weaviatePath)) {
|
|
921
|
+
return null;
|
|
922
|
+
}
|
|
923
|
+
try {
|
|
924
|
+
const { stdout } = await execFileAsync(weaviatePath, ['--version']);
|
|
925
|
+
// Parse output like "weaviate v1.35.7" or "1.35.7"
|
|
926
|
+
const match = stdout.match(/(?:weaviate\s+)?v?(\d+\.\d+\.\d+)/);
|
|
927
|
+
return match ? match[1] : null;
|
|
928
|
+
}
|
|
929
|
+
catch {
|
|
930
|
+
return null;
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
// Get installed Weaviate engines from downloaded binaries
|
|
934
|
+
async function getInstalledWeaviateEngines() {
|
|
935
|
+
const binDir = paths.bin;
|
|
936
|
+
if (!existsSync(binDir)) {
|
|
937
|
+
return [];
|
|
938
|
+
}
|
|
939
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
940
|
+
const engines = [];
|
|
941
|
+
for (const entry of entries) {
|
|
942
|
+
if (!entry.isDirectory())
|
|
943
|
+
continue;
|
|
944
|
+
if (!entry.name.startsWith('weaviate-'))
|
|
945
|
+
continue;
|
|
946
|
+
const parsed = parseEngineDirectory(entry.name, 'weaviate-', binDir);
|
|
947
|
+
if (!parsed)
|
|
948
|
+
continue;
|
|
949
|
+
const actualVersion = (await getWeaviateVersion(parsed.path)) || parsed.version;
|
|
950
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
951
|
+
engines.push({
|
|
952
|
+
engine: 'weaviate',
|
|
953
|
+
version: actualVersion,
|
|
954
|
+
platform: parsed.platform,
|
|
955
|
+
arch: parsed.arch,
|
|
956
|
+
path: parsed.path,
|
|
957
|
+
sizeBytes,
|
|
958
|
+
source: 'downloaded',
|
|
959
|
+
});
|
|
960
|
+
}
|
|
961
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
962
|
+
return engines;
|
|
963
|
+
}
|
|
964
|
+
// Get TigerBeetle version from binary path
|
|
965
|
+
async function getTigerBeetleVersion(binPath) {
|
|
966
|
+
const ext = platformService.getExecutableExtension();
|
|
967
|
+
const tigerbeetlePath = join(binPath, 'bin', `tigerbeetle${ext}`);
|
|
968
|
+
if (!existsSync(tigerbeetlePath)) {
|
|
969
|
+
return null;
|
|
970
|
+
}
|
|
971
|
+
try {
|
|
972
|
+
const { stdout } = await execFileAsync(tigerbeetlePath, ['version']);
|
|
973
|
+
// Parse output like "TigerBeetle v0.16.70" or "0.16.70"
|
|
974
|
+
const match = stdout.match(/(?:TigerBeetle\s+)?v?(\d+\.\d+\.\d+)/);
|
|
975
|
+
return match ? match[1] : null;
|
|
976
|
+
}
|
|
977
|
+
catch {
|
|
978
|
+
return null;
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
// Get installed TigerBeetle engines from downloaded binaries
|
|
982
|
+
async function getInstalledTigerBeetleEngines() {
|
|
983
|
+
const binDir = paths.bin;
|
|
984
|
+
if (!existsSync(binDir)) {
|
|
985
|
+
return [];
|
|
986
|
+
}
|
|
987
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
988
|
+
const engines = [];
|
|
989
|
+
for (const entry of entries) {
|
|
990
|
+
if (!entry.isDirectory())
|
|
991
|
+
continue;
|
|
992
|
+
if (!entry.name.startsWith('tigerbeetle-'))
|
|
993
|
+
continue;
|
|
994
|
+
const parsed = parseEngineDirectory(entry.name, 'tigerbeetle-', binDir);
|
|
995
|
+
if (!parsed)
|
|
996
|
+
continue;
|
|
997
|
+
const actualVersion = (await getTigerBeetleVersion(parsed.path)) || parsed.version;
|
|
998
|
+
const sizeBytes = await calculateDirectorySize(parsed.path);
|
|
999
|
+
engines.push({
|
|
1000
|
+
engine: 'tigerbeetle',
|
|
1001
|
+
version: actualVersion,
|
|
1002
|
+
platform: parsed.platform,
|
|
1003
|
+
arch: parsed.arch,
|
|
1004
|
+
path: parsed.path,
|
|
1005
|
+
sizeBytes,
|
|
1006
|
+
source: 'downloaded',
|
|
1007
|
+
});
|
|
1008
|
+
}
|
|
1009
|
+
engines.sort((a, b) => compareVersions(b.version, a.version));
|
|
1010
|
+
return engines;
|
|
1011
|
+
}
|
|
1012
|
+
export function compareVersions(a, b) {
|
|
1013
|
+
const partsA = a.split('.').map((p) => parseInt(p, 10) || 0);
|
|
1014
|
+
const partsB = b.split('.').map((p) => parseInt(p, 10) || 0);
|
|
1015
|
+
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
|
1016
|
+
const numA = partsA[i] || 0;
|
|
1017
|
+
const numB = partsB[i] || 0;
|
|
1018
|
+
if (numA !== numB)
|
|
1019
|
+
return numA - numB;
|
|
1020
|
+
}
|
|
1021
|
+
return 0;
|
|
1022
|
+
}
|
|
1023
|
+
/**
|
|
1024
|
+
* Known engine directory prefixes in the bin directory.
|
|
1025
|
+
* Directory names follow the pattern: {engine}-{version}-{platform}-{arch}
|
|
1026
|
+
*/
|
|
1027
|
+
const ENGINE_PREFIXES = [
|
|
1028
|
+
'postgresql-',
|
|
1029
|
+
'mysql-',
|
|
1030
|
+
'mariadb-',
|
|
1031
|
+
'sqlite-',
|
|
1032
|
+
'duckdb-',
|
|
1033
|
+
'mongodb-',
|
|
1034
|
+
'ferretdb-',
|
|
1035
|
+
'postgresql-documentdb-',
|
|
1036
|
+
'redis-',
|
|
1037
|
+
'valkey-',
|
|
1038
|
+
'clickhouse-',
|
|
1039
|
+
'qdrant-',
|
|
1040
|
+
'meilisearch-',
|
|
1041
|
+
'couchdb-',
|
|
1042
|
+
'cockroachdb-',
|
|
1043
|
+
'surrealdb-',
|
|
1044
|
+
'questdb-',
|
|
1045
|
+
'typedb-',
|
|
1046
|
+
'influxdb-',
|
|
1047
|
+
'weaviate-',
|
|
1048
|
+
'tigerbeetle-',
|
|
1049
|
+
];
|
|
1050
|
+
/**
|
|
1051
|
+
* Lightweight check to see if any engines are installed.
|
|
1052
|
+
* Only reads the bin directory - no subprocess spawning or size calculations.
|
|
1053
|
+
* Use this for UI decisions where you only need to know if engines exist.
|
|
1054
|
+
* Validates directory names against known engine prefixes to avoid false positives.
|
|
1055
|
+
*/
|
|
1056
|
+
export async function hasAnyInstalledEngines() {
|
|
1057
|
+
const binDir = paths.bin;
|
|
1058
|
+
if (!existsSync(binDir)) {
|
|
1059
|
+
return false;
|
|
1060
|
+
}
|
|
1061
|
+
try {
|
|
1062
|
+
const entries = await readdir(binDir, { withFileTypes: true });
|
|
1063
|
+
return entries.some((entry) => entry.isDirectory() &&
|
|
1064
|
+
!entry.name.startsWith('.') &&
|
|
1065
|
+
ENGINE_PREFIXES.some((prefix) => entry.name.startsWith(prefix)));
|
|
1066
|
+
}
|
|
1067
|
+
catch {
|
|
1068
|
+
return false;
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
export async function getInstalledEngines() {
|
|
1072
|
+
// Parallelize all engine checks for faster startup
|
|
1073
|
+
const [pgEngines, mariadbEngines, mysqlEngines, sqliteEngines, duckdbEngines, mongodbEngines, ferretdbEngines, redisEngines, valkeyEngines, clickhouseEngines, qdrantEngines, meilisearchEngines, couchdbEngines, cockroachdbEngines, surrealdbEngines, questdbEngines, typedbEngines, influxdbEngines, weaviateEngines, tigerbeetleEngines,] = await Promise.all([
|
|
1074
|
+
getInstalledPostgresEngines(),
|
|
1075
|
+
getInstalledMariadbEngines(),
|
|
1076
|
+
getInstalledMysqlEngines(),
|
|
1077
|
+
getInstalledSqliteEngines(),
|
|
1078
|
+
getInstalledDuckDBEngines(),
|
|
1079
|
+
getInstalledMongodbEngines(),
|
|
1080
|
+
getInstalledFerretDBEngines(),
|
|
1081
|
+
getInstalledRedisEngines(),
|
|
1082
|
+
getInstalledValkeyEngines(),
|
|
1083
|
+
getInstalledClickHouseEngines(),
|
|
1084
|
+
getInstalledQdrantEngines(),
|
|
1085
|
+
getInstalledMeilisearchEngines(),
|
|
1086
|
+
getInstalledCouchDBEngines(),
|
|
1087
|
+
getInstalledCockroachDBEngines(),
|
|
1088
|
+
getInstalledSurrealDBEngines(),
|
|
1089
|
+
getInstalledQuestDBEngines(),
|
|
1090
|
+
getInstalledTypeDBEngines(),
|
|
1091
|
+
getInstalledInfluxDBEngines(),
|
|
1092
|
+
getInstalledWeaviateEngines(),
|
|
1093
|
+
getInstalledTigerBeetleEngines(),
|
|
1094
|
+
]);
|
|
1095
|
+
return [
|
|
1096
|
+
...pgEngines,
|
|
1097
|
+
...mariadbEngines,
|
|
1098
|
+
...mysqlEngines,
|
|
1099
|
+
...sqliteEngines,
|
|
1100
|
+
...duckdbEngines,
|
|
1101
|
+
...mongodbEngines,
|
|
1102
|
+
...ferretdbEngines,
|
|
1103
|
+
...redisEngines,
|
|
1104
|
+
...valkeyEngines,
|
|
1105
|
+
...clickhouseEngines,
|
|
1106
|
+
...qdrantEngines,
|
|
1107
|
+
...meilisearchEngines,
|
|
1108
|
+
...couchdbEngines,
|
|
1109
|
+
...cockroachdbEngines,
|
|
1110
|
+
...surrealdbEngines,
|
|
1111
|
+
...questdbEngines,
|
|
1112
|
+
...typedbEngines,
|
|
1113
|
+
...influxdbEngines,
|
|
1114
|
+
...weaviateEngines,
|
|
1115
|
+
...tigerbeetleEngines,
|
|
1116
|
+
];
|
|
1117
|
+
}
|
|
1118
|
+
// Export individual engine detection functions for use in other modules
|
|
1119
|
+
export { getInstalledMysqlEngines, getInstalledSqliteEngines, getInstalledDuckDBEngines, getInstalledMongodbEngines, getInstalledFerretDBEngines, getInstalledRedisEngines, getInstalledValkeyEngines, getInstalledClickHouseEngines, getInstalledQdrantEngines, getInstalledMeilisearchEngines, getInstalledCouchDBEngines, getInstalledCockroachDBEngines, getInstalledSurrealDBEngines, getInstalledQuestDBEngines, getInstalledTypeDBEngines, getInstalledInfluxDBEngines, getInstalledWeaviateEngines, getInstalledTigerBeetleEngines, };
|
|
1120
|
+
//# sourceMappingURL=helpers.js.map
|