UNPKG

@catalystlabs/awm

Version:

Appwrite Migration Tool - Schema management and code generation for Appwrite databases

78 lines (65 loc) 2.13 kB
#!/usr/bin/env node import { spawn } from 'child_process'; import path from 'path'; import { fileURLToPath } from 'url'; import fs from 'fs'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const colors = { reset: '\x1b[0m', cyan: '\x1b[36m', green: '\x1b[32m', yellow: '\x1b[33m', red: '\x1b[31m' }; async function startStudio() { // User's project root (where awm was called from) const userProjectRoot = process.cwd(); const studioPath = path.join(__dirname, 'studio'); const nodeModulesPath = path.join(studioPath, 'node_modules'); // Check if dependencies are installed if (!fs.existsSync(nodeModulesPath)) { console.log(`${colors.cyan}Installing studio dependencies...${colors.reset}`); console.log(`${colors.yellow}This may take a minute on first run${colors.reset}\n`); const install = spawn('npm', ['install', '--legacy-peer-deps'], { cwd: studioPath, stdio: 'inherit', shell: true }); await new Promise((resolve, reject) => { install.on('close', (code) => { if (code !== 0) { reject(new Error(`npm install failed with code ${code}`)); } else { resolve(); } }); }); } console.log(`\n${colors.green}${colors.reset} Starting AWM Studio...`); console.log(`${colors.cyan}${colors.reset} Local: ${colors.cyan}http://localhost:3000${colors.reset}\n`); console.log(`${colors.yellow}Project:${colors.reset} ${userProjectRoot}\n`); const dev = spawn('npm', ['run', 'dev'], { cwd: studioPath, stdio: 'inherit', shell: true, env: { ...process.env, AWM_PROJECT_ROOT: userProjectRoot } }); // Handle graceful shutdown process.on('SIGINT', () => { console.log(`\n\n${colors.yellow}Shutting down AWM Studio...${colors.reset}`); dev.kill(); process.exit(0); }); process.on('SIGTERM', () => { dev.kill(); process.exit(0); }); } startStudio().catch(error => { console.error(`${colors.red}✗ Failed to start studio: ${error.message}${colors.reset}`); process.exit(1); });