spindb 0.47.18 → 0.48.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.
@@ -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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"}