spindb 0.47.16 → 0.48.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.
@@ -9,8 +9,7 @@ import { promisify } from 'util';
9
9
  import { createReadStream } from 'fs';
10
10
  import { createInterface } from 'readline';
11
11
  import { SpinDBError, ErrorCodes, logWarning, logDebug, } from '../../core/error-handler.js';
12
- import { detectPackageManager } from '../../core/dependency-manager.js';
13
- import { detectInstalledPostgres, getDirectBinaryPath, findCompatibleVersion, } from '../../core/homebrew-version-manager.js';
12
+ import { getBundledBinaryPath, findCompatibleVersion, } from '../../core/pg-binary-resolver.js';
14
13
  import { detectRemotePostgresVersion, } from './remote-version.js';
15
14
  const execAsync = promisify(exec);
16
15
  // =============================================================================
@@ -176,7 +175,7 @@ export async function validateRestoreCompatibility(options) {
176
175
  // Check compatibility
177
176
  const result = checkVersionCompatibility(dumpVersion, toolVersion);
178
177
  if (!result.compatible) {
179
- throw new SpinDBError(ErrorCodes.VERSION_MISMATCH, result.error, 'fatal', `Install PostgreSQL ${dumpVersion.major} client tools: brew install postgresql@${dumpVersion.major}`, { dumpVersion, toolVersion });
178
+ throw new SpinDBError(ErrorCodes.VERSION_MISMATCH, result.error, 'fatal', `Download matching PostgreSQL client tools: spindb engines download postgresql ${dumpVersion.major}`, { dumpVersion, toolVersion });
180
179
  }
181
180
  if (result.warning) {
182
181
  logWarning(result.warning);
@@ -188,23 +187,25 @@ export async function getPgDumpVersion(pgDumpPath) {
188
187
  return parseToolVersion(stdout);
189
188
  }
190
189
  /**
191
- * Validate that a remote database can be dumped with the current pg_dump
190
+ * Validate that a remote database can be dumped with the current pg_dump.
192
191
  *
193
- * This checks BEFORE dumping to avoid creating incompatible dump files.
194
- * Returns the recommended action if the current pg_dump is incompatible.
192
+ * If the current pg_dump is older than the remote server, look for a newer
193
+ * bundled pg_dump in spindb's own binary cache. If none is available, tell
194
+ * the user to download one with `spindb engines download postgresql <major>`.
195
+ *
196
+ * We never inspect system-installed PostgreSQL — spindb owns all of its
197
+ * database binaries.
195
198
  */
196
199
  export async function validateDumpCompatibility(options) {
197
200
  const { connectionString, pgDumpPath } = options;
198
- // Get local pg_dump version
199
201
  const localVersion = await getPgDumpVersion(pgDumpPath);
200
202
  logDebug('Local pg_dump version', { version: localVersion.full });
201
- // Detect remote database version
202
203
  const remoteVersion = await detectRemotePostgresVersion(connectionString);
203
204
  logDebug('Remote database version', {
204
205
  version: remoteVersion.fullVersion,
205
206
  serverType: remoteVersion.serverType,
206
207
  });
207
- // Check compatibility: local tool must be >= remote version
208
+ // Current pg_dump can already read the remote — no action needed.
208
209
  if (localVersion.major >= remoteVersion.majorVersion) {
209
210
  return {
210
211
  compatible: true,
@@ -213,74 +214,43 @@ export async function validateDumpCompatibility(options) {
213
214
  requiredAction: 'none',
214
215
  };
215
216
  }
216
- // Version mismatch - check if we can use a direct path
217
217
  const targetMajor = String(remoteVersion.majorVersion);
218
- const directPath = await getDirectBinaryPath('pg_dump', targetMajor);
219
- if (directPath) {
220
- // Have a direct path to the correct version
218
+ // Prefer the exact major match from spindb's bundled binaries.
219
+ const exactBundled = getBundledBinaryPath('pg_dump', targetMajor);
220
+ if (exactBundled) {
221
221
  return {
222
222
  compatible: false,
223
223
  localToolVersion: localVersion,
224
224
  remoteDbVersion: remoteVersion,
225
- requiredAction: 'use_direct_path',
226
- alternativePath: directPath,
227
- switchTarget: targetMajor,
225
+ requiredAction: 'use_bundled',
226
+ alternativePath: exactBundled,
227
+ targetMajor,
228
228
  };
229
229
  }
230
- // Check if any compatible version is installed via Homebrew
231
- const compatibleVersion = await findCompatibleVersion(remoteVersion.majorVersion);
230
+ // Otherwise, accept any bundled major that is >= the remote.
231
+ const compatibleVersion = findCompatibleVersion(remoteVersion.majorVersion);
232
232
  if (compatibleVersion) {
233
- const altPath = await getDirectBinaryPath('pg_dump', compatibleVersion.majorVersion);
234
- return {
235
- compatible: false,
236
- localToolVersion: localVersion,
237
- remoteDbVersion: remoteVersion,
238
- requiredAction: 'use_direct_path',
239
- alternativePath: altPath || undefined,
240
- switchTarget: compatibleVersion.majorVersion,
241
- };
242
- }
243
- // Check if we could switch Homebrew (version is installed but not as direct path)
244
- const installed = await detectInstalledPostgres();
245
- const hasTarget = installed.some((v) => parseInt(v.majorVersion, 10) >= remoteVersion.majorVersion);
246
- if (hasTarget) {
247
- const best = installed
248
- .filter((v) => parseInt(v.majorVersion, 10) >= remoteVersion.majorVersion)
249
- .sort((a, b) => parseInt(a.majorVersion, 10) - parseInt(b.majorVersion, 10))[0];
250
- return {
251
- compatible: false,
252
- localToolVersion: localVersion,
253
- remoteDbVersion: remoteVersion,
254
- requiredAction: 'switch_homebrew',
255
- switchTarget: best.majorVersion,
256
- };
233
+ const bundledPath = getBundledBinaryPath('pg_dump', compatibleVersion.majorVersion);
234
+ if (bundledPath) {
235
+ return {
236
+ compatible: false,
237
+ localToolVersion: localVersion,
238
+ remoteDbVersion: remoteVersion,
239
+ requiredAction: 'use_bundled',
240
+ alternativePath: bundledPath,
241
+ targetMajor: compatibleVersion.majorVersion,
242
+ };
243
+ }
257
244
  }
258
- // Need to install - provide platform-specific instructions
259
- const installCmd = await getInstallCommand(targetMajor);
245
+ // No bundled binary can read this server — ask the user to download one.
260
246
  return {
261
247
  compatible: false,
262
248
  localToolVersion: localVersion,
263
249
  remoteDbVersion: remoteVersion,
264
- requiredAction: 'install',
265
- switchTarget: targetMajor,
250
+ requiredAction: 'download',
251
+ targetMajor,
266
252
  error: `Your pg_dump version (${localVersion.major}) cannot dump from PostgreSQL ${remoteVersion.majorVersion}. ` +
267
- `Install PostgreSQL ${targetMajor} client tools: ${installCmd}`,
268
- };
269
- }
270
- export async function getInstallCommand(majorVersion) {
271
- const pm = await detectPackageManager();
272
- if (!pm) {
273
- return `Install PostgreSQL ${majorVersion} client tools for your platform`;
274
- }
275
- // Versioned package names per package manager
276
- const packages = {
277
- brew: `postgresql@${majorVersion}`,
278
- apt: `postgresql-client-${majorVersion}`,
279
- yum: `postgresql${majorVersion}`,
280
- dnf: `postgresql${majorVersion}`,
281
- pacman: 'postgresql-libs', // Arch doesn't version packages the same way
253
+ `Download the matching client tools with: spindb engines download postgresql ${targetMajor}`,
282
254
  };
283
- const pkg = packages[pm.id] || `postgresql-${majorVersion}`;
284
- return pm.config.installTemplate.replace('{package}', pkg);
285
255
  }
286
256
  //# sourceMappingURL=version-validator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version-validator.js","sourceRoot":"","sources":["../../../engines/postgresql/version-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-validator.js","sourceRoot":"","sources":["../../../engines/postgresql/version-validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spindb",
3
- "version": "0.47.16",
3
+ "version": "0.48.0",
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.",
@@ -1,280 +0,0 @@
1
- /**
2
- * PostgreSQL System Version Manager (FALLBACK / DEPRECATED)
3
- *
4
- * @deprecated SpinDB now downloads PostgreSQL binaries from hostdb, which include
5
- * all client tools (psql, pg_dump, pg_restore). This module is a legacy fallback
6
- * for users who have PostgreSQL installed via system package managers. Consider
7
- * removing this module once hostdb adoption is complete.
8
- *
9
- * FALLBACK USE CASE:
10
- * Detects PostgreSQL versions installed via system package managers:
11
- * - macOS: Homebrew (/opt/homebrew/opt/postgresql@17/bin)
12
- * - Linux: APT/YUM (/usr/lib/postgresql/17/bin)
13
- *
14
- * Used when hostdb binaries are unavailable and system tools are needed for
15
- * dump/restore operations with version compatibility requirements.
16
- */
17
- import { exec } from 'child_process';
18
- import { promisify } from 'util';
19
- import { existsSync } from 'fs';
20
- import { platformService } from './platform-service.js';
21
- import { Platform, Arch } from '../types/index.js';
22
- import { logDebug } from './error-handler.js';
23
- const execAsync = promisify(exec);
24
- // PostgreSQL versions to detect on system (via Homebrew/apt)
25
- // NOTE: This is for SYSTEM-INSTALLED PostgreSQL only (fallback path).
26
- // Primary path uses hostdb binaries. If this module is removed, these
27
- // versions become irrelevant.
28
- const SUPPORTED_PG_VERSIONS = ['14', '15', '16', '17', '18'];
29
- // Check if Homebrew is available on this system
30
- export async function isHomebrewAvailable() {
31
- const { platform } = platformService.getPlatformInfo();
32
- if (platform !== Platform.Darwin)
33
- return false;
34
- try {
35
- await execAsync('brew --version');
36
- return true;
37
- }
38
- catch {
39
- return false;
40
- }
41
- }
42
- // Get the Homebrew prefix based on architecture
43
- function getHomebrewPrefix() {
44
- const { arch } = platformService.getPlatformInfo();
45
- return arch === Arch.ARM64 ? '/opt/homebrew' : '/usr/local';
46
- }
47
- // Get Linux PostgreSQL bin paths (Debian/Ubuntu style)
48
- function getLinuxPostgresPath(majorVersion) {
49
- return `/usr/lib/postgresql/${majorVersion}/bin`;
50
- }
51
- // Get the currently linked PostgreSQL major version (if any)
52
- export async function getCurrentLinkedVersion() {
53
- const prefix = getHomebrewPrefix();
54
- const pgDumpPath = `${prefix}/bin/pg_dump`;
55
- if (!existsSync(pgDumpPath)) {
56
- return null;
57
- }
58
- try {
59
- const { stdout } = await execAsync(`"${pgDumpPath}" --version`);
60
- const match = stdout.match(/(\d+)\.(\d+)/);
61
- return match ? match[1] : null;
62
- }
63
- catch {
64
- return null;
65
- }
66
- }
67
- /**
68
- * Detect all PostgreSQL versions installed on the system
69
- * Works on both macOS (Homebrew) and Linux (APT/YUM)
70
- */
71
- export async function detectInstalledPostgres() {
72
- const { platform } = platformService.getPlatformInfo();
73
- const installed = [];
74
- // Get currently linked version (for macOS)
75
- const linkedVersion = await getCurrentLinkedVersion();
76
- if (platform === Platform.Darwin) {
77
- // macOS: Check Homebrew installations
78
- const prefix = getHomebrewPrefix();
79
- for (const major of SUPPORTED_PG_VERSIONS) {
80
- const binPath = `${prefix}/opt/postgresql@${major}/bin`;
81
- const pgDumpPath = `${binPath}/pg_dump`;
82
- if (existsSync(pgDumpPath)) {
83
- try {
84
- const { stdout } = await execAsync(`"${pgDumpPath}" --version`);
85
- const match = stdout.match(/(\d+)\.(\d+)(?:\.(\d+))?/);
86
- if (match) {
87
- installed.push({
88
- majorVersion: major,
89
- fullVersion: match[0],
90
- binPath,
91
- isLinked: linkedVersion === major,
92
- source: 'homebrew',
93
- });
94
- }
95
- }
96
- catch (error) {
97
- logDebug(`Could not get version for postgresql@${major}`, {
98
- error: error instanceof Error ? error.message : String(error),
99
- });
100
- }
101
- }
102
- }
103
- }
104
- else if (platform === Platform.Linux) {
105
- // Linux: Check /usr/lib/postgresql/*/bin (Debian/Ubuntu style)
106
- for (const major of SUPPORTED_PG_VERSIONS) {
107
- const binPath = getLinuxPostgresPath(major);
108
- const pgDumpPath = `${binPath}/pg_dump`;
109
- if (existsSync(pgDumpPath)) {
110
- try {
111
- const { stdout } = await execAsync(`"${pgDumpPath}" --version`);
112
- const match = stdout.match(/(\d+)\.(\d+)(?:\.(\d+))?/);
113
- if (match) {
114
- installed.push({
115
- majorVersion: major,
116
- fullVersion: match[0],
117
- binPath,
118
- isLinked: false, // Linux doesn't use linking like Homebrew
119
- source: 'apt',
120
- });
121
- }
122
- }
123
- catch (error) {
124
- logDebug(`Could not get version for postgresql-${major}`, {
125
- error: error instanceof Error ? error.message : String(error),
126
- });
127
- }
128
- }
129
- }
130
- }
131
- return installed;
132
- }
133
- /**
134
- * Get the direct path to a PostgreSQL binary for a specific major version
135
- * This allows using a specific version without changing system links
136
- *
137
- * Works on:
138
- * - macOS: /opt/homebrew/opt/postgresql@17/bin/pg_dump
139
- * - Linux: /usr/lib/postgresql/17/bin/pg_dump
140
- */
141
- export async function getDirectBinaryPath(tool, majorVersion) {
142
- const { platform } = platformService.getPlatformInfo();
143
- if (platform === Platform.Darwin) {
144
- // macOS: Homebrew path
145
- const prefix = getHomebrewPrefix();
146
- const path = `${prefix}/opt/postgresql@${majorVersion}/bin/${tool}`;
147
- if (existsSync(path))
148
- return path;
149
- }
150
- else if (platform === Platform.Linux) {
151
- // Linux: Debian/Ubuntu path
152
- const path = `${getLinuxPostgresPath(majorVersion)}/${tool}`;
153
- if (existsSync(path))
154
- return path;
155
- }
156
- return null;
157
- }
158
- /**
159
- * Find a compatible PostgreSQL version for the target major version
160
- * Returns the best available version that is >= targetMajor
161
- */
162
- export async function findCompatibleVersion(targetMajor) {
163
- const installed = await detectInstalledPostgres();
164
- // Filter versions >= target
165
- const compatible = installed.filter((v) => parseInt(v.majorVersion, 10) >= targetMajor);
166
- if (compatible.length === 0) {
167
- return null;
168
- }
169
- // Prefer the currently linked version if it's compatible
170
- const linked = compatible.find((v) => v.isLinked);
171
- if (linked) {
172
- return linked;
173
- }
174
- // Otherwise return the lowest compatible version (closest to target)
175
- compatible.sort((a, b) => parseInt(a.majorVersion, 10) - parseInt(b.majorVersion, 10));
176
- return compatible[0];
177
- }
178
- /**
179
- * Switch system to use a specific PostgreSQL version
180
- *
181
- * - macOS: Uses `brew link` to change symlinks
182
- * - Linux: Uses `update-alternatives` if available (Debian/Ubuntu)
183
- *
184
- * NOTE: Prefer getDirectBinaryPath() when possible to avoid side effects
185
- */
186
- export async function switchHomebrewVersion(targetMajor) {
187
- const { platform } = platformService.getPlatformInfo();
188
- if (platform === Platform.Darwin) {
189
- return switchHomebrewVersionMacOS(targetMajor);
190
- }
191
- else if (platform === Platform.Linux) {
192
- return switchVersionLinux(targetMajor);
193
- }
194
- return {
195
- success: false,
196
- error: 'Version switching not supported on this platform',
197
- };
198
- }
199
- // Switch PostgreSQL version on macOS using Homebrew
200
- async function switchHomebrewVersionMacOS(targetMajor) {
201
- if (!(await isHomebrewAvailable())) {
202
- return { success: false, error: 'Homebrew not available' };
203
- }
204
- const installed = await detectInstalledPostgres();
205
- const target = installed.find((v) => v.majorVersion === targetMajor);
206
- if (!target) {
207
- return {
208
- success: false,
209
- error: `PostgreSQL ${targetMajor} is not installed via Homebrew. Install with: brew install postgresql@${targetMajor}`,
210
- };
211
- }
212
- if (target.isLinked) {
213
- return {
214
- success: true,
215
- currentVersion: targetMajor,
216
- previousVersion: targetMajor,
217
- };
218
- }
219
- const previousLinked = installed.find((v) => v.isLinked);
220
- try {
221
- // Unlink all versions first
222
- for (const ver of installed) {
223
- await execAsync(`brew unlink postgresql@${ver.majorVersion} 2>/dev/null || true`);
224
- }
225
- // Link target version
226
- await execAsync(`brew link --overwrite postgresql@${targetMajor}`);
227
- logDebug('Switched Homebrew PostgreSQL version', {
228
- from: previousLinked?.majorVersion,
229
- to: targetMajor,
230
- });
231
- return {
232
- success: true,
233
- previousVersion: previousLinked?.majorVersion,
234
- currentVersion: targetMajor,
235
- };
236
- }
237
- catch (error) {
238
- return {
239
- success: false,
240
- error: error instanceof Error ? error.message : String(error),
241
- };
242
- }
243
- }
244
- /**
245
- * "Switch" PostgreSQL version on Linux (no-op verification only)
246
- *
247
- * Unlike macOS where Homebrew uses symlinks that need switching, Linux installs
248
- * PostgreSQL versions side-by-side in versioned paths (e.g., /usr/lib/postgresql/17/bin).
249
- * We access these directly via getDirectBinaryPath(), so no symlink switching is needed.
250
- * This function just verifies the target version is installed.
251
- */
252
- async function switchVersionLinux(targetMajor) {
253
- const installed = await detectInstalledPostgres();
254
- const target = installed.find((v) => v.majorVersion === targetMajor);
255
- if (!target) {
256
- return {
257
- success: false,
258
- error: `PostgreSQL ${targetMajor} is not installed. Install with: sudo apt install postgresql-client-${targetMajor}`,
259
- };
260
- }
261
- // No action required - Linux uses versioned paths directly, no symlink switching needed
262
- logDebug('Linux: Version verified, no switching required (using direct path)', {
263
- version: targetMajor,
264
- binPath: target.binPath,
265
- });
266
- return {
267
- success: true,
268
- currentVersion: targetMajor,
269
- };
270
- }
271
- // Get all client tools for a specific PostgreSQL version
272
- export async function getVersionedToolPaths(majorVersion) {
273
- return {
274
- pgDump: await getDirectBinaryPath('pg_dump', majorVersion),
275
- pgRestore: await getDirectBinaryPath('pg_restore', majorVersion),
276
- psql: await getDirectBinaryPath('psql', majorVersion),
277
- pgBasebackup: await getDirectBinaryPath('pg_basebackup', majorVersion),
278
- };
279
- }
280
- //# sourceMappingURL=homebrew-version-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"homebrew-version-manager.js","sourceRoot":"","sources":["../../core/homebrew-version-manager.ts"],"names":[],"mappings":"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"}