#!/usr/bin/env node /** * DSS Postinstall Script * * Sets up Python virtual environment and installs dependencies * after npm install. */ import { spawn, execSync } from 'child_process'; import { existsSync, mkdirSync } from 'fs'; import { join, dirname } from 'path'; import { fileURLToPath } from 'url'; const __dirname = dirname(fileURLToPath(import.meta.url)); const pythonDir = join(__dirname, '..', 'python'); const venvDir = join(pythonDir, 'venv'); const apiDir = join(pythonDir, 'api'); console.log('[DSS] Setting up Python environment...'); // Check if Python 3 is available function getPythonCmd() { const commands = ['python3', 'python']; for (const cmd of commands) { try { execSync(`${cmd} --version`, { stdio: 'ignore' }); return cmd; } catch { continue; } } return null; } const python = getPythonCmd(); if (!python) { console.error('[DSS] Error: Python 3 is required but not found.'); console.error('[DSS] Please install Python 3.8+ and try again.'); process.exit(1); } console.log(`[DSS] Using ${python}`); // Create virtual environment if needed if (!existsSync(venvDir)) { console.log('[DSS] Creating virtual environment...'); try { execSync(`${python} -m venv ${venvDir}`, { stdio: 'inherit' }); } catch (error) { console.error('[DSS] Failed to create virtual environment'); console.error('[DSS] Try: pip install virtualenv'); process.exit(1); } } // Install requirements const pip = join(venvDir, 'bin', 'pip'); const requirements = join(apiDir, 'requirements.txt'); if (existsSync(requirements)) { console.log('[DSS] Installing Python dependencies...'); try { execSync(`${pip} install -q -r ${requirements}`, { stdio: 'inherit' }); console.log('[DSS] Python environment ready!'); } catch (error) { console.error('[DSS] Failed to install Python dependencies'); process.exit(1); } } else { console.log('[DSS] No requirements.txt found, skipping dependency install'); } console.log('[DSS] Setup complete!');