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/sqlite/index.ts
DELETED
|
@@ -1,641 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SQLite Engine
|
|
3
|
-
*
|
|
4
|
-
* SQLite is a file-based embedded database with no server process.
|
|
5
|
-
* Key differences from PostgreSQL/MySQL:
|
|
6
|
-
* - No start/stop operations (file-based)
|
|
7
|
-
* - No port management
|
|
8
|
-
* - Database files stored in user project directories (not ~/.spindb/)
|
|
9
|
-
* - Uses a registry to track file paths
|
|
10
|
-
*
|
|
11
|
-
* Binary sourcing:
|
|
12
|
-
* - Downloads sqlite3 and related tools from hostdb
|
|
13
|
-
* - Includes: sqlite3, sqldiff, sqlite3_analyzer, sqlite3_rsync
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import { spawn, execFile } from 'child_process'
|
|
17
|
-
import { promisify } from 'util'
|
|
18
|
-
import { existsSync, statSync, createWriteStream, createReadStream } from 'fs'
|
|
19
|
-
import { copyFile, unlink, mkdir, open, writeFile } from 'fs/promises'
|
|
20
|
-
import { resolve, dirname, join } from 'path'
|
|
21
|
-
import { tmpdir } from 'os'
|
|
22
|
-
import { BaseEngine } from '../base-engine'
|
|
23
|
-
import { sqliteRegistry } from './registry'
|
|
24
|
-
import { configManager } from '../../core/config-manager'
|
|
25
|
-
import { platformService } from '../../core/platform-service'
|
|
26
|
-
import { paths } from '../../config/paths'
|
|
27
|
-
import { sqliteBinaryManager } from './binary-manager'
|
|
28
|
-
import { getBinaryUrl } from './binary-urls'
|
|
29
|
-
import { SUPPORTED_MAJOR_VERSIONS, normalizeVersion } from './version-maps'
|
|
30
|
-
import { fetchAvailableVersions } from './hostdb-releases'
|
|
31
|
-
import { logDebug } from '../../core/error-handler'
|
|
32
|
-
import {
|
|
33
|
-
type Platform,
|
|
34
|
-
type Arch,
|
|
35
|
-
type ContainerConfig,
|
|
36
|
-
type ProgressCallback,
|
|
37
|
-
type BackupFormat,
|
|
38
|
-
type BackupOptions,
|
|
39
|
-
type BackupResult,
|
|
40
|
-
type RestoreResult,
|
|
41
|
-
type DumpResult,
|
|
42
|
-
type StatusResult,
|
|
43
|
-
type QueryResult,
|
|
44
|
-
type QueryOptions,
|
|
45
|
-
} from '../../types'
|
|
46
|
-
import { parseCSVToQueryResult } from '../../core/query-parser'
|
|
47
|
-
|
|
48
|
-
const execFileAsync = promisify(execFile)
|
|
49
|
-
|
|
50
|
-
export class SQLiteEngine extends BaseEngine {
|
|
51
|
-
name = 'sqlite'
|
|
52
|
-
displayName = 'SQLite'
|
|
53
|
-
defaultPort = 0 // File-based, no port
|
|
54
|
-
supportedVersions = SUPPORTED_MAJOR_VERSIONS
|
|
55
|
-
|
|
56
|
-
// Get the download URL for SQLite binaries from hostdb
|
|
57
|
-
getBinaryUrl(version: string, platform: Platform, arch: Arch): string {
|
|
58
|
-
return getBinaryUrl(version, platform, arch)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async verifyBinary(): Promise<boolean> {
|
|
62
|
-
return this.isBinaryInstalled('3')
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
async isBinaryInstalled(version: string): Promise<boolean> {
|
|
66
|
-
const { platform, arch } = platformService.getPlatformInfo()
|
|
67
|
-
return sqliteBinaryManager.isInstalled(version, platform, arch)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Ensure SQLite binaries are downloaded from hostdb and register tools
|
|
71
|
-
async ensureBinaries(
|
|
72
|
-
version: string,
|
|
73
|
-
onProgress?: ProgressCallback,
|
|
74
|
-
): Promise<string> {
|
|
75
|
-
const { platform, arch } = platformService.getPlatformInfo()
|
|
76
|
-
|
|
77
|
-
// Download from hostdb
|
|
78
|
-
const binPath = await sqliteBinaryManager.ensureInstalled(
|
|
79
|
-
version,
|
|
80
|
-
platform,
|
|
81
|
-
arch,
|
|
82
|
-
onProgress,
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
// Register all SQLite tools in config
|
|
86
|
-
const ext = platformService.getExecutableExtension()
|
|
87
|
-
const tools = [
|
|
88
|
-
'sqlite3',
|
|
89
|
-
'sqldiff',
|
|
90
|
-
'sqlite3_analyzer',
|
|
91
|
-
'sqlite3_rsync',
|
|
92
|
-
] as const
|
|
93
|
-
|
|
94
|
-
for (const tool of tools) {
|
|
95
|
-
const toolPath = join(binPath, 'bin', `${tool}${ext}`)
|
|
96
|
-
if (existsSync(toolPath)) {
|
|
97
|
-
await configManager.setBinaryPath(tool, toolPath, 'bundled')
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return binPath
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Get path to sqlite3 binary - checks downloaded binary first
|
|
105
|
-
override async getSqlite3Path(version?: string): Promise<string | null> {
|
|
106
|
-
// Check config manager first (cached path from downloaded binaries)
|
|
107
|
-
const configPath = await configManager.getBinaryPath('sqlite3')
|
|
108
|
-
if (configPath && existsSync(configPath)) {
|
|
109
|
-
return configPath
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// If version provided, check downloaded binary path directly
|
|
113
|
-
if (version) {
|
|
114
|
-
const { platform, arch } = platformService.getPlatformInfo()
|
|
115
|
-
const fullVersion = normalizeVersion(version)
|
|
116
|
-
const binPath = paths.getBinaryPath({
|
|
117
|
-
engine: 'sqlite',
|
|
118
|
-
version: fullVersion,
|
|
119
|
-
platform,
|
|
120
|
-
arch,
|
|
121
|
-
})
|
|
122
|
-
const ext = platformService.getExecutableExtension()
|
|
123
|
-
const sqlite3Path = join(binPath, 'bin', `sqlite3${ext}`)
|
|
124
|
-
if (existsSync(sqlite3Path)) {
|
|
125
|
-
return sqlite3Path
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// Not found - require download
|
|
130
|
-
return null
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
async getLitecliPath(): Promise<string | null> {
|
|
134
|
-
// Check config manager first
|
|
135
|
-
const configPath = await configManager.getBinaryPath('litecli')
|
|
136
|
-
if (configPath) {
|
|
137
|
-
return configPath
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// Check system PATH using platform service (works on Windows, macOS, Linux)
|
|
141
|
-
return platformService.findToolPath('litecli')
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
async initDataDir(
|
|
145
|
-
containerName: string,
|
|
146
|
-
_version: string,
|
|
147
|
-
options: Record<string, unknown> = {},
|
|
148
|
-
): Promise<string> {
|
|
149
|
-
// Determine file path - default to CWD
|
|
150
|
-
const pathOption = options.path as string | undefined
|
|
151
|
-
const filePath = pathOption || `./${containerName}.sqlite`
|
|
152
|
-
const absolutePath = resolve(filePath)
|
|
153
|
-
|
|
154
|
-
// Ensure parent directory exists
|
|
155
|
-
const dir = dirname(absolutePath)
|
|
156
|
-
if (!existsSync(dir)) {
|
|
157
|
-
await mkdir(dir, { recursive: true })
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Check if file already exists
|
|
161
|
-
if (existsSync(absolutePath)) {
|
|
162
|
-
throw new Error(`File already exists: ${absolutePath}`)
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// Check if this path is already registered
|
|
166
|
-
if (await sqliteRegistry.isPathRegistered(absolutePath)) {
|
|
167
|
-
throw new Error(`Path is already registered: ${absolutePath}`)
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// Create empty database by running a simple query
|
|
171
|
-
const sqlite3 = await this.requireSqlite3Path()
|
|
172
|
-
|
|
173
|
-
await execFileAsync(sqlite3, [absolutePath, 'SELECT 1'])
|
|
174
|
-
|
|
175
|
-
// Register in the SQLite registry
|
|
176
|
-
await sqliteRegistry.add({
|
|
177
|
-
name: containerName,
|
|
178
|
-
filePath: absolutePath,
|
|
179
|
-
created: new Date().toISOString(),
|
|
180
|
-
})
|
|
181
|
-
|
|
182
|
-
return absolutePath
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
// Start is a no-op for SQLite (file-based, no server).
|
|
186
|
-
async start(
|
|
187
|
-
container: ContainerConfig,
|
|
188
|
-
_onProgress?: ProgressCallback,
|
|
189
|
-
): Promise<{ port: number; connectionString: string }> {
|
|
190
|
-
const entry = await sqliteRegistry.get(container.name)
|
|
191
|
-
if (!entry) {
|
|
192
|
-
throw new Error(
|
|
193
|
-
`SQLite container "${container.name}" not found in registry`,
|
|
194
|
-
)
|
|
195
|
-
}
|
|
196
|
-
if (!existsSync(entry.filePath)) {
|
|
197
|
-
throw new Error(`SQLite database file not found: ${entry.filePath}`)
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
return {
|
|
201
|
-
port: 0,
|
|
202
|
-
connectionString: this.getConnectionString(container),
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// Stop is a no-op for SQLite (file-based, no server).
|
|
207
|
-
async stop(_container: ContainerConfig): Promise<void> {}
|
|
208
|
-
|
|
209
|
-
async status(container: ContainerConfig): Promise<StatusResult> {
|
|
210
|
-
const entry = await sqliteRegistry.get(container.name)
|
|
211
|
-
if (!entry) {
|
|
212
|
-
return {
|
|
213
|
-
running: false,
|
|
214
|
-
message: 'Not registered in SQLite registry',
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
if (!existsSync(entry.filePath)) {
|
|
218
|
-
return {
|
|
219
|
-
running: false,
|
|
220
|
-
message: `File not found: ${entry.filePath}`,
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
return {
|
|
224
|
-
running: true,
|
|
225
|
-
message: 'Database file exists',
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
getConnectionString(container: ContainerConfig, _database?: string): string {
|
|
230
|
-
// container.database stores the file path for SQLite
|
|
231
|
-
const filePath = container.database
|
|
232
|
-
return `sqlite:///${filePath}`
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// Prefers litecli if available, falls back to sqlite3.
|
|
236
|
-
async connect(container: ContainerConfig, _database?: string): Promise<void> {
|
|
237
|
-
const entry = await sqliteRegistry.get(container.name)
|
|
238
|
-
if (!entry) {
|
|
239
|
-
throw new Error(
|
|
240
|
-
`SQLite container "${container.name}" not found in registry`,
|
|
241
|
-
)
|
|
242
|
-
}
|
|
243
|
-
if (!existsSync(entry.filePath)) {
|
|
244
|
-
throw new Error(`SQLite database file not found: ${entry.filePath}`)
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// Try litecli first, fall back to sqlite3
|
|
248
|
-
const litecli = await this.getLitecliPath()
|
|
249
|
-
const cmd = litecli ?? (await this.requireSqlite3Path())
|
|
250
|
-
|
|
251
|
-
return new Promise((resolve, reject) => {
|
|
252
|
-
const proc = spawn(cmd, [entry.filePath], { stdio: 'inherit' })
|
|
253
|
-
|
|
254
|
-
proc.on('error', (err: NodeJS.ErrnoException) => {
|
|
255
|
-
reject(err)
|
|
256
|
-
})
|
|
257
|
-
|
|
258
|
-
proc.on('close', () => resolve())
|
|
259
|
-
})
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
// In SQLite, the file IS the database.
|
|
263
|
-
async createDatabase(
|
|
264
|
-
_container: ContainerConfig,
|
|
265
|
-
_database: string,
|
|
266
|
-
): Promise<void> {}
|
|
267
|
-
|
|
268
|
-
async dropDatabase(
|
|
269
|
-
container: ContainerConfig,
|
|
270
|
-
_database: string,
|
|
271
|
-
): Promise<void> {
|
|
272
|
-
const entry = await sqliteRegistry.get(container.name)
|
|
273
|
-
if (entry && existsSync(entry.filePath)) {
|
|
274
|
-
await unlink(entry.filePath)
|
|
275
|
-
}
|
|
276
|
-
await sqliteRegistry.remove(container.name)
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
async getDatabaseSize(container: ContainerConfig): Promise<number | null> {
|
|
280
|
-
const entry = await sqliteRegistry.get(container.name)
|
|
281
|
-
if (!entry || !existsSync(entry.filePath)) {
|
|
282
|
-
return null
|
|
283
|
-
}
|
|
284
|
-
const stats = statSync(entry.filePath)
|
|
285
|
-
return stats.size
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
async detectBackupFormat(filePath: string): Promise<BackupFormat> {
|
|
289
|
-
if (filePath.endsWith('.sql')) {
|
|
290
|
-
return {
|
|
291
|
-
format: 'sql',
|
|
292
|
-
description: 'SQLite SQL dump',
|
|
293
|
-
restoreCommand: 'sqlite3 <db> < <file>',
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
return {
|
|
297
|
-
format: 'sqlite',
|
|
298
|
-
description: 'SQLite database file (binary copy)',
|
|
299
|
-
restoreCommand: 'cp <file> <db>',
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
async backup(
|
|
304
|
-
container: ContainerConfig,
|
|
305
|
-
outputPath: string,
|
|
306
|
-
options: BackupOptions,
|
|
307
|
-
): Promise<BackupResult> {
|
|
308
|
-
const entry = await sqliteRegistry.get(container.name)
|
|
309
|
-
if (!entry || !existsSync(entry.filePath)) {
|
|
310
|
-
throw new Error('SQLite database file not found')
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
if (options.format === 'sql') {
|
|
314
|
-
// Use .dump command for SQL format
|
|
315
|
-
const sqlite3 = await this.requireSqlite3Path()
|
|
316
|
-
|
|
317
|
-
// Pipe .dump output to file (avoids shell injection)
|
|
318
|
-
await this.dumpToFile(sqlite3, entry.filePath, outputPath)
|
|
319
|
-
} else {
|
|
320
|
-
// Binary copy for 'binary' format
|
|
321
|
-
await copyFile(entry.filePath, outputPath)
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
const stats = statSync(outputPath)
|
|
325
|
-
return {
|
|
326
|
-
path: outputPath,
|
|
327
|
-
format: options.format ?? 'binary',
|
|
328
|
-
size: stats.size,
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
async restore(
|
|
333
|
-
container: ContainerConfig,
|
|
334
|
-
backupPath: string,
|
|
335
|
-
_options?: Record<string, unknown>,
|
|
336
|
-
): Promise<RestoreResult> {
|
|
337
|
-
const entry = await sqliteRegistry.get(container.name)
|
|
338
|
-
if (!entry) {
|
|
339
|
-
throw new Error(`Container "${container.name}" not registered`)
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
const format = await this.detectBackupFormat(backupPath)
|
|
343
|
-
|
|
344
|
-
if (format.format === 'sql') {
|
|
345
|
-
// Restore SQL dump
|
|
346
|
-
const sqlite3 = await this.requireSqlite3Path()
|
|
347
|
-
|
|
348
|
-
// Pipe file to sqlite3 stdin (avoids shell injection)
|
|
349
|
-
await this.runSqlFile(sqlite3, entry.filePath, backupPath)
|
|
350
|
-
return { format: 'sql' }
|
|
351
|
-
} else {
|
|
352
|
-
// Binary file copy
|
|
353
|
-
await copyFile(backupPath, entry.filePath)
|
|
354
|
-
return { format: 'sqlite' }
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
async dumpFromConnectionString(
|
|
359
|
-
connectionString: string,
|
|
360
|
-
outputPath: string,
|
|
361
|
-
): Promise<DumpResult> {
|
|
362
|
-
let filePath = connectionString
|
|
363
|
-
let tempFile: string | null = null
|
|
364
|
-
|
|
365
|
-
// Handle HTTP/HTTPS URLs - download to temp file
|
|
366
|
-
if (filePath.startsWith('http://') || filePath.startsWith('https://')) {
|
|
367
|
-
tempFile = join(tmpdir(), `spindb-download-${Date.now()}.sqlite`)
|
|
368
|
-
await this.downloadFile(filePath, tempFile)
|
|
369
|
-
|
|
370
|
-
// Validate it's a valid SQLite database
|
|
371
|
-
if (!(await this.isValidSqliteFile(tempFile))) {
|
|
372
|
-
await unlink(tempFile)
|
|
373
|
-
throw new Error('Downloaded file is not a valid SQLite database')
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
filePath = tempFile
|
|
377
|
-
}
|
|
378
|
-
// Handle sqlite:// URLs (strip prefix for local file)
|
|
379
|
-
else if (filePath.startsWith('sqlite:///')) {
|
|
380
|
-
filePath = filePath.slice('sqlite:///'.length)
|
|
381
|
-
} else if (filePath.startsWith('sqlite://')) {
|
|
382
|
-
filePath = filePath.slice('sqlite://'.length)
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
// Verify local file exists
|
|
386
|
-
if (!existsSync(filePath)) {
|
|
387
|
-
throw new Error(`SQLite database file not found: ${filePath}`)
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
const sqlite3 = await this.requireSqlite3Path()
|
|
391
|
-
|
|
392
|
-
try {
|
|
393
|
-
// Pipe .dump output to file (avoids shell injection)
|
|
394
|
-
await this.dumpToFile(sqlite3, filePath, outputPath)
|
|
395
|
-
|
|
396
|
-
return { filePath: outputPath }
|
|
397
|
-
} finally {
|
|
398
|
-
// Clean up temp file if we downloaded it (even on error)
|
|
399
|
-
if (tempFile && existsSync(tempFile)) {
|
|
400
|
-
await unlink(tempFile)
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
// Uses spawn to avoid shell injection.
|
|
406
|
-
private async dumpToFile(
|
|
407
|
-
sqlite3Path: string,
|
|
408
|
-
dbPath: string,
|
|
409
|
-
outputPath: string,
|
|
410
|
-
): Promise<void> {
|
|
411
|
-
return new Promise((resolve, reject) => {
|
|
412
|
-
const output = createWriteStream(outputPath)
|
|
413
|
-
const proc = spawn(sqlite3Path, [dbPath, '.dump'])
|
|
414
|
-
|
|
415
|
-
proc.stdout.pipe(output)
|
|
416
|
-
|
|
417
|
-
proc.stderr.on('data', (data: Buffer) => {
|
|
418
|
-
// Collect stderr but don't fail immediately - sqlite3 may write warnings
|
|
419
|
-
console.error(data.toString())
|
|
420
|
-
})
|
|
421
|
-
|
|
422
|
-
proc.on('error', (err) => {
|
|
423
|
-
output.close()
|
|
424
|
-
reject(err)
|
|
425
|
-
})
|
|
426
|
-
|
|
427
|
-
proc.on('close', (code) => {
|
|
428
|
-
output.close()
|
|
429
|
-
if (code === 0) {
|
|
430
|
-
resolve()
|
|
431
|
-
} else {
|
|
432
|
-
reject(new Error(`sqlite3 dump failed with exit code ${code}`))
|
|
433
|
-
}
|
|
434
|
-
})
|
|
435
|
-
})
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
// Streams a SQL file to a SQLite database via stdin
|
|
439
|
-
private async runSqlFile(
|
|
440
|
-
sqlite3Path: string,
|
|
441
|
-
dbPath: string,
|
|
442
|
-
sqlFilePath: string,
|
|
443
|
-
): Promise<void> {
|
|
444
|
-
return new Promise((resolve, reject) => {
|
|
445
|
-
// Use 'ignore' for stdout since we don't need output and leaving it
|
|
446
|
-
// unconsumed could fill the buffer and cause a deadlock
|
|
447
|
-
const proc = spawn(sqlite3Path, [dbPath], {
|
|
448
|
-
stdio: ['pipe', 'ignore', 'pipe'],
|
|
449
|
-
})
|
|
450
|
-
|
|
451
|
-
let stderrData = ''
|
|
452
|
-
let streamError: Error | null = null
|
|
453
|
-
|
|
454
|
-
proc.stderr.on('data', (data: Buffer) => {
|
|
455
|
-
stderrData += data.toString()
|
|
456
|
-
})
|
|
457
|
-
|
|
458
|
-
proc.on('error', (err) => {
|
|
459
|
-
reject(err)
|
|
460
|
-
})
|
|
461
|
-
|
|
462
|
-
proc.on('close', (code) => {
|
|
463
|
-
// If there was a stream error, report it
|
|
464
|
-
if (streamError) {
|
|
465
|
-
reject(streamError)
|
|
466
|
-
return
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
if (code === 0) {
|
|
470
|
-
resolve()
|
|
471
|
-
} else {
|
|
472
|
-
reject(
|
|
473
|
-
new Error(
|
|
474
|
-
`sqlite3 failed with exit code ${code}${stderrData ? `: ${stderrData}` : ''}`,
|
|
475
|
-
),
|
|
476
|
-
)
|
|
477
|
-
}
|
|
478
|
-
})
|
|
479
|
-
|
|
480
|
-
// Handle stdin errors (EPIPE if process exits early)
|
|
481
|
-
proc.stdin.on('error', (err: NodeJS.ErrnoException) => {
|
|
482
|
-
if (err.code !== 'EPIPE') {
|
|
483
|
-
reject(err)
|
|
484
|
-
}
|
|
485
|
-
})
|
|
486
|
-
|
|
487
|
-
// Stream SQL file to sqlite3 stdin
|
|
488
|
-
const fileStream = createReadStream(sqlFilePath, { encoding: 'utf-8' })
|
|
489
|
-
|
|
490
|
-
fileStream.on('error', (error) => {
|
|
491
|
-
streamError = new Error(`Failed to read SQL file: ${error.message}`)
|
|
492
|
-
fileStream.destroy()
|
|
493
|
-
proc.stdin.end()
|
|
494
|
-
})
|
|
495
|
-
|
|
496
|
-
fileStream.pipe(proc.stdin)
|
|
497
|
-
})
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
private async downloadFile(url: string, destPath: string): Promise<void> {
|
|
501
|
-
const controller = new AbortController()
|
|
502
|
-
const timeoutMs = 5 * 60 * 1000 // 5 minutes
|
|
503
|
-
const timeout = setTimeout(() => controller.abort(), timeoutMs)
|
|
504
|
-
|
|
505
|
-
try {
|
|
506
|
-
const response = await fetch(url, { signal: controller.signal })
|
|
507
|
-
if (!response.ok) {
|
|
508
|
-
if (response.status === 404) {
|
|
509
|
-
throw new Error(
|
|
510
|
-
`File not found (404) at ${url}. ` +
|
|
511
|
-
`This version may have been removed from hostdb. ` +
|
|
512
|
-
`Try a different version or check https://registry.layerbase.host`,
|
|
513
|
-
)
|
|
514
|
-
}
|
|
515
|
-
throw new Error(
|
|
516
|
-
`Failed to download: ${response.status} ${response.statusText}`,
|
|
517
|
-
)
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
const buffer = await response.arrayBuffer()
|
|
521
|
-
await writeFile(destPath, Buffer.from(buffer))
|
|
522
|
-
} catch (error) {
|
|
523
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
524
|
-
throw new Error('Download timed out after 5 minutes')
|
|
525
|
-
}
|
|
526
|
-
throw error
|
|
527
|
-
} finally {
|
|
528
|
-
clearTimeout(timeout)
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
// SQLite files start with "SQLite format 3\0" (first 16 bytes).
|
|
533
|
-
private async isValidSqliteFile(filePath: string): Promise<boolean> {
|
|
534
|
-
try {
|
|
535
|
-
const buffer = Buffer.alloc(16)
|
|
536
|
-
const fd = await open(filePath, 'r')
|
|
537
|
-
await fd.read(buffer, 0, 16, 0)
|
|
538
|
-
await fd.close()
|
|
539
|
-
// Check for SQLite magic header
|
|
540
|
-
return buffer.toString('utf8', 0, 15) === 'SQLite format 3'
|
|
541
|
-
} catch {
|
|
542
|
-
return false
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
async runScript(
|
|
547
|
-
container: ContainerConfig,
|
|
548
|
-
options: { file?: string; sql?: string; database?: string },
|
|
549
|
-
): Promise<void> {
|
|
550
|
-
const entry = await sqliteRegistry.get(container.name)
|
|
551
|
-
if (!entry || !existsSync(entry.filePath)) {
|
|
552
|
-
throw new Error('SQLite database file not found')
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
const sqlite3 = await this.requireSqlite3Path()
|
|
556
|
-
|
|
557
|
-
if (options.file) {
|
|
558
|
-
// Run SQL file - pipe file to stdin (avoids shell injection)
|
|
559
|
-
await this.runSqlFile(sqlite3, entry.filePath, options.file)
|
|
560
|
-
} else if (options.sql) {
|
|
561
|
-
// Run inline SQL - pass as argument, output to stdout
|
|
562
|
-
const { stdout, stderr } = await execFileAsync(sqlite3, [
|
|
563
|
-
entry.filePath,
|
|
564
|
-
options.sql,
|
|
565
|
-
])
|
|
566
|
-
if (stdout) process.stdout.write(stdout)
|
|
567
|
-
if (stderr) process.stderr.write(stderr)
|
|
568
|
-
} else {
|
|
569
|
-
throw new Error('Either file or sql option must be provided')
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
async fetchAvailableVersions(): Promise<Record<string, string[]>> {
|
|
574
|
-
return fetchAvailableVersions()
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
// Helper to get sqlite3 path or throw a helpful error
|
|
578
|
-
private async requireSqlite3Path(): Promise<string> {
|
|
579
|
-
const sqlite3 = await this.getSqlite3Path()
|
|
580
|
-
if (!sqlite3) {
|
|
581
|
-
throw new Error(
|
|
582
|
-
'sqlite3 not found. Ensure SQLite binaries are downloaded:\n' +
|
|
583
|
-
' spindb engines download sqlite',
|
|
584
|
-
)
|
|
585
|
-
}
|
|
586
|
-
return sqlite3
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
async executeQuery(
|
|
590
|
-
container: ContainerConfig,
|
|
591
|
-
query: string,
|
|
592
|
-
_options?: QueryOptions,
|
|
593
|
-
): Promise<QueryResult> {
|
|
594
|
-
const entry = await sqliteRegistry.get(container.name)
|
|
595
|
-
if (!entry || !existsSync(entry.filePath)) {
|
|
596
|
-
throw new Error('SQLite database file not found')
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
const sqlite3 = await this.requireSqlite3Path()
|
|
600
|
-
|
|
601
|
-
// Use spawn instead of execFileAsync to stream results
|
|
602
|
-
return new Promise((resolve, reject) => {
|
|
603
|
-
const proc = spawn(sqlite3, ['-csv', '-header', entry.filePath, query])
|
|
604
|
-
|
|
605
|
-
let stdout = ''
|
|
606
|
-
let stderr = ''
|
|
607
|
-
|
|
608
|
-
proc.stdout?.on('data', (data: Buffer) => {
|
|
609
|
-
stdout += data.toString()
|
|
610
|
-
})
|
|
611
|
-
proc.stderr?.on('data', (data: Buffer) => {
|
|
612
|
-
stderr += data.toString()
|
|
613
|
-
})
|
|
614
|
-
|
|
615
|
-
proc.on('error', reject)
|
|
616
|
-
|
|
617
|
-
proc.on('close', (code) => {
|
|
618
|
-
if (code !== 0) {
|
|
619
|
-
reject(new Error(stderr || `sqlite3 exited with code ${code}`))
|
|
620
|
-
return
|
|
621
|
-
}
|
|
622
|
-
if (stderr) {
|
|
623
|
-
logDebug(`SQLite stderr: ${stderr}`)
|
|
624
|
-
}
|
|
625
|
-
resolve(parseCSVToQueryResult(stdout))
|
|
626
|
-
})
|
|
627
|
-
})
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
/**
|
|
631
|
-
* List databases for SQLite.
|
|
632
|
-
* SQLite is file-based with one database per file.
|
|
633
|
-
* Returns the configured database (file path) as a single-item array.
|
|
634
|
-
*/
|
|
635
|
-
async listDatabases(container: ContainerConfig): Promise<string[]> {
|
|
636
|
-
// SQLite is file-based, one database per file
|
|
637
|
-
return [container.database]
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
export const sqliteEngine = new SQLiteEngine()
|