@maravilla-labs/functions
Version:
Maravilla Edge Functions bundler and development tools
89 lines (80 loc) âĸ 3.31 kB
JavaScript
import { buildFunctions, developmentServer } from '../dist/index.js';
import { resolve } from 'node:path';
import { readFileSync } from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf8'));
const command = process.argv[2];
const args = process.argv.slice(3);
function parseArgs(args) {
const options = {};
for (let i = 0; i < args.length; i++) {
if (args[i].startsWith('--')) {
const key = args[i].slice(2);
const value = args[i + 1] && !args[i + 1].startsWith('--') ? args[i + 1] : true;
options[key] = value;
if (value !== true) i++;
}
}
return options;
}
if (command === 'build') {
const options = parseArgs(args);
const buildOptions = {
functionsDir: options.dir || process.env.FUNCTIONS_DIR || 'functions',
outputDir: options.output || process.env.OUTPUT_DIR || '.maravilla',
production: options.production || process.env.NODE_ENV === 'production',
minify: options.minify || process.env.NODE_ENV === 'production',
sourcemap: options.sourcemap === true || process.env.SOURCEMAP === 'true',
};
console.log('đ Building Maravilla functions...');
try {
const manifest = await buildFunctions(buildOptions);
if (manifest) {
console.log(`â
Built ${manifest.functions} functions successfully`);
process.exit(0);
} else {
console.log('âšī¸ No functions found to build');
process.exit(0);
}
} catch (error) {
console.error('â Build failed:', error);
process.exit(1);
}
} else if (command === 'dev') {
const options = parseArgs(args);
const devOptions = {
functionsDir: options.dir || process.env.FUNCTIONS_DIR || 'functions',
outputDir: options.output || process.env.OUTPUT_DIR || '.maravilla',
watch: options.watch !== 'false',
};
console.log('đ Starting Maravilla functions development server...');
try {
await developmentServer(devOptions);
} catch (error) {
console.error('â Dev server failed:', error);
process.exit(1);
}
} else if (command === '--version' || command === '-v') {
console.log(packageJson.version);
process.exit(0);
} else {
console.log('Maravilla Functions CLI v' + packageJson.version);
console.log('\nUsage:');
console.log(' @maravilla/functions build [options] Build functions for production');
console.log(' @maravilla/functions dev [options] Start development server with hot reload');
console.log('\nBuild Options:');
console.log(' --dir <path> Functions directory (default: functions)');
console.log(' --output <path> Output directory (default: .maravilla)');
console.log(' --minify Minify output');
console.log(' --sourcemap Generate sourcemaps');
console.log(' --production Production build');
console.log('\nDev Options:');
console.log(' --dir <path> Functions directory (default: functions)');
console.log(' --output <path> Output directory (default: .maravilla)');
console.log(' --watch <bool> Watch for changes (default: true)');
process.exit(command ? 1 : 0);
}