@catalystlabs/awm
Version:
Appwrite Migration Tool - Schema management and code generation for Appwrite databases
78 lines (65 loc) • 2.13 kB
JavaScript
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);
});