UNPKG

freshroute-server

Version:

Local development server for FreshRoute extension with API mocking and extended functionality

110 lines (89 loc) 3.39 kB
import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import fs from 'fs/promises'; import { promisify } from 'util'; import { exec } from 'child_process'; const execAsync = promisify(exec); const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); // Paths const mockServerRoot = join(__dirname, '..'); const projectRoot = join(mockServerRoot, '..'); const extensionBuildPath = join(mockServerRoot, 'extension'); export async function buildExtension() { console.log('🔨 Building Chrome extension for packaging...'); try { // Check if we're in the development environment (parent project exists) const parentPackageExists = await fs.access(join(projectRoot, 'package.json')).then(() => true).catch(() => false); if (!parentPackageExists) { console.log('⚠️ Parent project not found - using pre-built extension'); return extensionBuildPath; } // Change to project root and build extension console.log('📦 Running build:prod in parent directory...'); const { stdout, stderr } = await execAsync('npm run build:prod', { cwd: projectRoot, maxBuffer: 1024 * 1024 * 10 // 10MB buffer }); if (stderr && !stderr.includes('Warning')) { console.warn('Build warnings:', stderr); } console.log('✅ Extension built successfully'); // Copy built extension to mock-server package const distPath = join(projectRoot, 'dist'); // Remove existing extension directory try { await fs.rm(extensionBuildPath, { recursive: true, force: true }); } catch (error) { // Directory might not exist, that's ok } // Copy dist to extension directory console.log('📁 Copying extension files...'); await copyDirectory(distPath, extensionBuildPath); console.log('✅ Extension copied to mock-server package'); // Create extension info file const extensionInfo = { name: 'FreshRoute Chrome Extension', version: '1.0.1', builtAt: new Date().toISOString(), buildPath: extensionBuildPath, source: 'freshroute-server npm package', preBuilt: true }; await fs.writeFile( join(extensionBuildPath, 'extension-info.json'), JSON.stringify(extensionInfo, null, 2) ); return extensionBuildPath; } catch (error) { console.error('❌ Failed to build extension:', error.message); console.log('💡 This is expected if you\'re not in the development environment'); console.log('💡 The extension should be pre-built in the npm package'); throw error; } } async function copyDirectory(src, dest) { await fs.mkdir(dest, { recursive: true }); const entries = await fs.readdir(src, { withFileTypes: true }); for (const entry of entries) { const srcPath = join(src, entry.name); const destPath = join(dest, entry.name); if (entry.isDirectory()) { await copyDirectory(srcPath, destPath); } else { await fs.copyFile(srcPath, destPath); } } } // If run directly if (import.meta.url === `file://${process.argv[1]}`) { buildExtension() .then(() => { console.log('🎉 Extension build complete!'); process.exit(0); }) .catch((error) => { console.error('💥 Build failed:', error); process.exit(1); }); }