spindb 0.44.1 → 0.45.1

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.
Files changed (56) hide show
  1. package/README.md +22 -10
  2. package/dist/cli/commands/create.js +6 -1
  3. package/dist/cli/commands/create.js.map +1 -1
  4. package/dist/cli/commands/engines.js +46 -0
  5. package/dist/cli/commands/engines.js.map +1 -1
  6. package/dist/cli/commands/menu/backup-handlers.js +5 -0
  7. package/dist/cli/commands/menu/backup-handlers.js.map +1 -1
  8. package/dist/cli/commands/menu/settings-handlers.js +3 -0
  9. package/dist/cli/commands/menu/settings-handlers.js.map +1 -1
  10. package/dist/cli/commands/menu/shell-handlers.js +31 -1
  11. package/dist/cli/commands/menu/shell-handlers.js.map +1 -1
  12. package/dist/cli/constants.js +4 -0
  13. package/dist/cli/constants.js.map +1 -1
  14. package/dist/cli/helpers.js +53 -2
  15. package/dist/cli/helpers.js.map +1 -1
  16. package/dist/config/backup-formats.js +18 -0
  17. package/dist/config/backup-formats.js.map +1 -1
  18. package/dist/config/engine-defaults.js +13 -0
  19. package/dist/config/engine-defaults.js.map +1 -1
  20. package/dist/config/engines.json +18 -0
  21. package/dist/config/version.js +1 -1
  22. package/dist/core/config-manager.js +4 -1
  23. package/dist/core/config-manager.js.map +1 -1
  24. package/dist/core/credential-manager.js +2 -0
  25. package/dist/core/credential-manager.js.map +1 -1
  26. package/dist/core/database-capabilities.js +8 -0
  27. package/dist/core/database-capabilities.js.map +1 -1
  28. package/dist/core/dependency-manager.js +2 -0
  29. package/dist/core/dependency-manager.js.map +1 -1
  30. package/dist/core/docker-exporter.js +12 -0
  31. package/dist/core/docker-exporter.js.map +1 -1
  32. package/dist/core/remote-container.js +2 -0
  33. package/dist/core/remote-container.js.map +1 -1
  34. package/dist/engines/index.js +5 -1
  35. package/dist/engines/index.js.map +1 -1
  36. package/dist/engines/libsql/api-client.js +134 -0
  37. package/dist/engines/libsql/api-client.js.map +1 -0
  38. package/dist/engines/libsql/backup.js +151 -0
  39. package/dist/engines/libsql/backup.js.map +1 -0
  40. package/dist/engines/libsql/binary-manager.js +31 -0
  41. package/dist/engines/libsql/binary-manager.js.map +1 -0
  42. package/dist/engines/libsql/binary-urls.js +50 -0
  43. package/dist/engines/libsql/binary-urls.js.map +1 -0
  44. package/dist/engines/libsql/hostdb-releases.js +21 -0
  45. package/dist/engines/libsql/hostdb-releases.js.map +1 -0
  46. package/dist/engines/libsql/index.js +578 -0
  47. package/dist/engines/libsql/index.js.map +1 -0
  48. package/dist/engines/libsql/restore.js +219 -0
  49. package/dist/engines/libsql/restore.js.map +1 -0
  50. package/dist/engines/libsql/version-maps.js +63 -0
  51. package/dist/engines/libsql/version-maps.js.map +1 -0
  52. package/dist/engines/libsql/version-validator.js +111 -0
  53. package/dist/engines/libsql/version-validator.js.map +1 -0
  54. package/dist/types/index.js +2 -0
  55. package/dist/types/index.js.map +1 -1
  56. package/package.json +2 -1
@@ -0,0 +1,219 @@
1
+ /**
2
+ * libSQL restore module
3
+ * Supports binary (file copy) and SQL import restore formats
4
+ */
5
+ import { existsSync } from 'fs';
6
+ import { readFile, mkdir, cp, rm } from 'fs/promises';
7
+ import { join } from 'path';
8
+ import { logDebug } from '../../core/error-handler.js';
9
+ import { paths } from '../../config/paths.js';
10
+ import { loadCredentials, getDefaultUsername, } from '../../core/credential-manager.js';
11
+ import { libsqlQuery } from './api-client.js';
12
+ import { Engine, } from '../../types/index.js';
13
+ /**
14
+ * Split SQL content into individual statements, respecting quoted strings
15
+ * and comments. Avoids breaking on semicolons inside string literals.
16
+ */
17
+ function splitSqlStatements(content) {
18
+ const statements = [];
19
+ let current = '';
20
+ let inSingleQuote = false;
21
+ let inDoubleQuote = false;
22
+ let inLineComment = false;
23
+ let inBlockComment = false;
24
+ let i = 0;
25
+ while (i < content.length) {
26
+ const ch = content[i];
27
+ const next = content[i + 1];
28
+ if (inLineComment) {
29
+ if (ch === '\n') {
30
+ inLineComment = false;
31
+ }
32
+ i++;
33
+ continue;
34
+ }
35
+ if (inBlockComment) {
36
+ if (ch === '*' && next === '/') {
37
+ inBlockComment = false;
38
+ i += 2;
39
+ continue;
40
+ }
41
+ i++;
42
+ continue;
43
+ }
44
+ if (inSingleQuote) {
45
+ current += ch;
46
+ if (ch === "'" && next === "'") {
47
+ current += next;
48
+ i += 2;
49
+ continue;
50
+ }
51
+ if (ch === "'") {
52
+ inSingleQuote = false;
53
+ }
54
+ i++;
55
+ continue;
56
+ }
57
+ if (inDoubleQuote) {
58
+ current += ch;
59
+ if (ch === '"' && next === '"') {
60
+ current += next;
61
+ i += 2;
62
+ continue;
63
+ }
64
+ if (ch === '"') {
65
+ inDoubleQuote = false;
66
+ }
67
+ i++;
68
+ continue;
69
+ }
70
+ // Not inside any quote or comment
71
+ if (ch === '-' && next === '-') {
72
+ inLineComment = true;
73
+ i += 2;
74
+ continue;
75
+ }
76
+ if (ch === '/' && next === '*') {
77
+ inBlockComment = true;
78
+ i += 2;
79
+ continue;
80
+ }
81
+ if (ch === "'") {
82
+ inSingleQuote = true;
83
+ current += ch;
84
+ i++;
85
+ continue;
86
+ }
87
+ if (ch === '"') {
88
+ inDoubleQuote = true;
89
+ current += ch;
90
+ i++;
91
+ continue;
92
+ }
93
+ if (ch === ';') {
94
+ const trimmed = current.trim();
95
+ if (trimmed) {
96
+ statements.push(trimmed);
97
+ }
98
+ current = '';
99
+ i++;
100
+ continue;
101
+ }
102
+ current += ch;
103
+ i++;
104
+ }
105
+ const trimmed = current.trim();
106
+ if (trimmed) {
107
+ statements.push(trimmed);
108
+ }
109
+ return statements;
110
+ }
111
+ /**
112
+ * Detect the backup format from a file path
113
+ */
114
+ export function detectBackupFormat(filePath) {
115
+ if (filePath.endsWith('.sql')) {
116
+ return {
117
+ format: 'sql',
118
+ description: 'SQL dump',
119
+ restoreCommand: `spindb restore <container> ${filePath}`,
120
+ };
121
+ }
122
+ if (filePath.endsWith('.db')) {
123
+ return {
124
+ format: 'binary',
125
+ description: 'Binary database copy',
126
+ restoreCommand: `spindb restore <container> ${filePath}`,
127
+ };
128
+ }
129
+ // Default to binary format for unknown extensions
130
+ return {
131
+ format: 'binary',
132
+ description: 'Binary database copy (assumed)',
133
+ restoreCommand: `spindb restore <container> ${filePath}`,
134
+ };
135
+ }
136
+ /**
137
+ * Restore a libSQL backup
138
+ */
139
+ export async function restoreBackup(backupPath, options) {
140
+ if (!existsSync(backupPath)) {
141
+ throw new Error(`Backup file not found: ${backupPath}`);
142
+ }
143
+ const format = options.format || detectBackupFormat(backupPath).format;
144
+ if (format === 'sql') {
145
+ return restoreSqlBackup(backupPath, options);
146
+ }
147
+ return restoreBinaryBackup(backupPath, options);
148
+ }
149
+ /**
150
+ * Restore from a binary backup by copying the database directory.
151
+ * sqld's data.db is a directory tree, not a single file.
152
+ * Requires the server to be stopped.
153
+ */
154
+ async function restoreBinaryBackup(backupPath, options) {
155
+ const dataDir = options.dataDir ||
156
+ join(paths.getContainerPath(options.containerName, { engine: 'libsql' }), 'data');
157
+ const dbPath = join(dataDir, 'data.db');
158
+ logDebug(`Restoring binary backup to ${dbPath}`);
159
+ // Ensure data directory exists
160
+ if (!existsSync(dataDir)) {
161
+ await mkdir(dataDir, { recursive: true });
162
+ }
163
+ // Remove existing data.db directory/file before restoring
164
+ if (existsSync(dbPath)) {
165
+ await rm(dbPath, { recursive: true, force: true });
166
+ }
167
+ // Copy the backup directory tree
168
+ await cp(backupPath, dbPath, { recursive: true });
169
+ return {
170
+ format: 'binary',
171
+ stdout: `Restored binary backup to ${dbPath}. Start the container to use it.`,
172
+ };
173
+ }
174
+ /**
175
+ * Restore from a SQL dump via the HTTP API
176
+ * Requires the server to be running
177
+ */
178
+ async function restoreSqlBackup(backupPath, options) {
179
+ const port = options.port;
180
+ if (!port) {
181
+ throw new Error('SQL restore requires a running container. Start the container first, then retry.');
182
+ }
183
+ logDebug(`Restoring SQL backup via HTTP API on port ${port}`);
184
+ // Load auth token if credentials are stored
185
+ const username = getDefaultUsername(Engine.LibSQL);
186
+ const creds = await loadCredentials(options.containerName, Engine.LibSQL, username);
187
+ const authToken = creds?.apiKey ?? undefined;
188
+ const content = await readFile(backupPath, 'utf-8');
189
+ // Split into individual statements using a state machine that respects
190
+ // quoted strings and comments (avoids breaking on semicolons inside literals)
191
+ const statements = splitSqlStatements(content);
192
+ let executed = 0;
193
+ const failures = [];
194
+ for (const stmt of statements) {
195
+ // Skip transaction control statements - sqld handles transactions differently
196
+ if (/^(BEGIN|COMMIT|ROLLBACK)\b/i.test(stmt))
197
+ continue;
198
+ try {
199
+ await libsqlQuery(port, `${stmt};`, { authToken });
200
+ executed++;
201
+ }
202
+ catch (error) {
203
+ const message = error.message;
204
+ const preview = stmt.length > 80 ? `${stmt.slice(0, 80)}...` : stmt;
205
+ failures.push({ statement: preview, error: message });
206
+ logDebug(`Warning: statement failed during restore: ${message}`);
207
+ }
208
+ }
209
+ let summary = `Restored ${executed} SQL statements from backup.`;
210
+ if (failures.length > 0) {
211
+ summary += ` ${failures.length} statement(s) failed.`;
212
+ logDebug(`Restore failures:\n${failures.map((f) => ` ${f.statement}: ${f.error}`).join('\n')}`);
213
+ }
214
+ return {
215
+ format: 'sql',
216
+ stdout: summary,
217
+ };
218
+ }
219
+ //# sourceMappingURL=restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.js","sourceRoot":"","sources":["../../../engines/libsql/restore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * libSQL Version Maps
3
+ *
4
+ * TEMPORARY: This version map will be replaced by the hostdb npm package once published.
5
+ * Until then, manually keep this in sync with robertjbass/hostdb releases.json:
6
+ * https://github.com/robertjbass/hostdb/blob/main/releases.json
7
+ *
8
+ * When updating versions:
9
+ * 1. Check hostdb releases.json for available versions
10
+ * 2. Update LIBSQL_VERSION_MAP to match
11
+ */
12
+ import { logDebug } from '../../core/error-handler.js';
13
+ /**
14
+ * Map of major libSQL versions to their latest stable patch versions.
15
+ * Must match versions available in hostdb releases.json.
16
+ */
17
+ export const LIBSQL_VERSION_MAP = {
18
+ // 1-part: major version -> latest
19
+ '0': '0.24.32',
20
+ // 2-part: major.minor -> latest patch
21
+ '0.24': '0.24.32',
22
+ // 3-part: exact version (identity mapping)
23
+ '0.24.32': '0.24.32',
24
+ };
25
+ /**
26
+ * Supported major libSQL versions (1-part format).
27
+ * Used for grouping and display purposes.
28
+ */
29
+ export const SUPPORTED_MAJOR_VERSIONS = ['0'];
30
+ /**
31
+ * Get the full version string for a major version.
32
+ *
33
+ * @param majorVersion - Major version (e.g., '0')
34
+ * @returns Full version string (e.g., '0.24.32') or null if not supported
35
+ */
36
+ export function getFullVersion(majorVersion) {
37
+ return LIBSQL_VERSION_MAP[majorVersion] || null;
38
+ }
39
+ /**
40
+ * Normalize a version string to X.Y.Z format.
41
+ *
42
+ * @param version - Version string (e.g., '0', '0.24', '0.24.32')
43
+ * @returns Normalized version (e.g., '0.24.32')
44
+ */
45
+ export function normalizeVersion(version) {
46
+ const fullVersion = LIBSQL_VERSION_MAP[version];
47
+ if (fullVersion) {
48
+ return fullVersion;
49
+ }
50
+ // Unknown version - warn and return as-is
51
+ const parts = version.split('.');
52
+ const isValidFormat = parts.length >= 1 &&
53
+ parts.length <= 3 &&
54
+ parts.every((p) => /^\d+$/.test(p));
55
+ if (!isValidFormat) {
56
+ logDebug(`libSQL version '${version}' has invalid format, may not be available in hostdb`);
57
+ }
58
+ else {
59
+ logDebug(`libSQL version '${version}' not in version map, may not be available in hostdb`);
60
+ }
61
+ return version;
62
+ }
63
+ //# sourceMappingURL=version-maps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-maps.js","sourceRoot":"","sources":["../../../engines/libsql/version-maps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,kCAAkC;IAClC,GAAG,EAAE,SAAS;IACd,sCAAsC;IACtC,MAAM,EAAE,SAAS;IACjB,2CAA2C;IAC3C,SAAS,EAAE,SAAS;CACrB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,CAAC,CAAA;AAE7C;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,YAAoB;IACjD,OAAO,kBAAkB,CAAC,YAAY,CAAC,IAAI,IAAI,CAAA;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC/C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,0CAA0C;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEhC,MAAM,aAAa,GACjB,KAAK,CAAC,MAAM,IAAI,CAAC;QACjB,KAAK,CAAC,MAAM,IAAI,CAAC;QACjB,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAErC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,QAAQ,CACN,mBAAmB,OAAO,sDAAsD,CACjF,CAAA;IACH,CAAC;SAAM,CAAC;QACN,QAAQ,CACN,mBAAmB,OAAO,sDAAsD,CACjF,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * libSQL version validation utilities
3
+ * Handles version parsing, comparison, and compatibility checking
4
+ */
5
+ /**
6
+ * Parse a libSQL version string into components
7
+ * Handles formats like "0.24.32", "0.24", "v0.24.32"
8
+ */
9
+ export function parseVersion(versionString) {
10
+ const cleaned = versionString.replace(/^v/, '').trim();
11
+ if (!cleaned)
12
+ return null;
13
+ const match = cleaned.match(/^(\d+)(?:\.(\d+))?(?:\.(\d+))?$/);
14
+ if (!match)
15
+ return null;
16
+ const major = Number(match[1]);
17
+ const minor = match[2] ? Number(match[2]) : 0;
18
+ const patch = match[3] ? Number(match[3]) : 0;
19
+ return { major, minor, patch, raw: cleaned };
20
+ }
21
+ /**
22
+ * Check if a libSQL version is supported by SpinDB
23
+ * Minimum supported version: 0.24.0
24
+ */
25
+ export function isVersionSupported(version) {
26
+ const parsed = parseVersion(version);
27
+ if (!parsed)
28
+ return false;
29
+ // Support 0.24+
30
+ if (parsed.major === 0) {
31
+ return parsed.minor >= 24;
32
+ }
33
+ return parsed.major >= 1;
34
+ }
35
+ /**
36
+ * Get major version from full version string
37
+ * e.g., "0.24.32" -> "0"
38
+ */
39
+ export function getMajorVersion(version) {
40
+ const parsed = parseVersion(version);
41
+ return parsed ? String(parsed.major) : version;
42
+ }
43
+ /**
44
+ * Get major.minor version from full version string
45
+ * e.g., "0.24.32" -> "0.24"
46
+ */
47
+ export function getMajorMinorVersion(version) {
48
+ const parsed = parseVersion(version);
49
+ if (!parsed)
50
+ return version;
51
+ return `${parsed.major}.${parsed.minor}`;
52
+ }
53
+ /**
54
+ * Compare two libSQL versions
55
+ * Returns: -1 if a < b, 0 if a == b, 1 if a > b, null if either version cannot be parsed
56
+ */
57
+ export function compareVersions(a, b) {
58
+ const parsedA = parseVersion(a);
59
+ const parsedB = parseVersion(b);
60
+ if (!parsedA || !parsedB) {
61
+ return null;
62
+ }
63
+ if (parsedA.major !== parsedB.major) {
64
+ return parsedA.major < parsedB.major ? -1 : 1;
65
+ }
66
+ if (parsedA.minor !== parsedB.minor) {
67
+ return parsedA.minor < parsedB.minor ? -1 : 1;
68
+ }
69
+ if (parsedA.patch !== parsedB.patch) {
70
+ return parsedA.patch < parsedB.patch ? -1 : 1;
71
+ }
72
+ return 0;
73
+ }
74
+ /**
75
+ * Check if a backup version is compatible with the restore version
76
+ * libSQL backups are generally compatible within major versions
77
+ */
78
+ export function isVersionCompatible(backupVersion, restoreVersion) {
79
+ const backup = parseVersion(backupVersion);
80
+ const restore = parseVersion(restoreVersion);
81
+ if (!backup || !restore) {
82
+ return {
83
+ compatible: true,
84
+ warning: 'Could not parse versions, proceeding with restore',
85
+ };
86
+ }
87
+ // Cannot restore newer backup to older server
88
+ if (backup.major > restore.major) {
89
+ return {
90
+ compatible: false,
91
+ warning: `Cannot restore libSQL ${backupVersion} backup to ${restoreVersion} server. The backup is from a newer major version.`,
92
+ };
93
+ }
94
+ // Allow same major version
95
+ if (backup.major === restore.major) {
96
+ return { compatible: true };
97
+ }
98
+ // Allow upgrading from older major version (restore.major > backup.major)
99
+ return {
100
+ compatible: true,
101
+ warning: `Restoring libSQL ${backupVersion} backup to ${restoreVersion} server. libSQL will upgrade the data format on next save.`,
102
+ };
103
+ }
104
+ /**
105
+ * Validate that a version string matches supported format
106
+ */
107
+ export function isValidVersionFormat(version) {
108
+ const parsed = parseVersion(version);
109
+ return parsed !== null;
110
+ }
111
+ //# sourceMappingURL=version-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-validator.js","sourceRoot":"","sources":["../../../engines/libsql/version-validator.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ export var Engine;
30
30
  Engine["InfluxDB"] = "influxdb";
31
31
  Engine["Weaviate"] = "weaviate";
32
32
  Engine["TigerBeetle"] = "tigerbeetle";
33
+ Engine["LibSQL"] = "libsql";
33
34
  })(Engine || (Engine = {}));
34
35
  // Supported operating systems (matches Node.js process.platform)
35
36
  export var Platform;
@@ -69,6 +70,7 @@ export const ALL_ENGINES = [
69
70
  Engine.InfluxDB,
70
71
  Engine.Weaviate,
71
72
  Engine.TigerBeetle,
73
+ Engine.LibSQL,
72
74
  ];
73
75
  // File-based engines (no server process, data stored in user project directories)
74
76
  export const FILE_BASED_ENGINES = new Set([Engine.SQLite, Engine.DuckDB]);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spindb",
3
- "version": "0.44.1",
3
+ "version": "0.45.1",
4
4
  "author": "Bob Bass <bob@bbass.co>",
5
5
  "license": "PolyForm-Noncommercial-1.0.0",
6
6
  "description": "Zero-config Docker-free local database containers. Create, backup, and clone a variety of popular databases.",
@@ -66,6 +66,7 @@
66
66
  "influxdb",
67
67
  "weaviate",
68
68
  "tigerbeetle",
69
+ "libsql",
69
70
  "layerbase",
70
71
  "docker-free",
71
72
  "tui",