UNPKG

@ordojs/cli

Version:

Command-line interface for OrdoJS framework

115 lines (112 loc) 3.41 kB
/** * @fileoverview OrdoJS CLI - Init command */ import { Command } from 'commander'; import path from 'path'; import { mkdir, writeFile } from '../utils/fs.js'; import { logger } from '../utils/index.js'; /** * Register the init command */ export function registerInitCommand(program) { program .command('init') .description('Initialize a new OrdoJS project') .argument('[name]', 'Project name', 'ordojs-app') .option('-t, --template <template>', 'Template to use', 'basic') .action(async (name, options) => { try { await initCommand(name, options); } catch (error) { logger.error(`Initialization failed: ${error instanceof Error ? error.message : String(error)}`); process.exit(1); } }); } /** * Init command implementation */ export async function initCommand(name, options) { logger.info(`Initializing new OrdoJS project: ${name}`); logger.info(`Template: ${options.template}`); try { // Create project directory await mkdir(name, { recursive: true }); // Create basic project structure await mkdir(path.join(name, 'src'), { recursive: true }); await mkdir(path.join(name, 'public'), { recursive: true }); // Create package.json const packageJson = { name, version: '0.1.0', description: 'OrdoJS application', type: 'module', scripts: { dev: 'ordojs dev', build: 'ordojs build src/main.atom', preview: 'ordojs preview' }, dependencies: { '@ordojs/core': '^0.1.0' }, devDependencies: { '@ordojs/cli': '^0.1.0' } }; await writeFile(path.join(name, 'package.json'), JSON.stringify(packageJson, null, 2)); // Create sample component const sampleComponent = ` component App { client { let count = 0; function increment() { count++; } } markup { <div class="app"> <h1>Welcome to OrdoJS!</h1> <p>Count: {count}</p> <button on:click={increment}>Increment</button> </div> } } `; await writeFile(path.join(name, 'src', 'App.atom'), sampleComponent); // Create main entry point const mainFile = ` import { App } from './App.atom'; // Mount the app to the DOM const app = App(); app.mount(document.getElementById('app')); `; await writeFile(path.join(name, 'src', 'main.atom'), mainFile); // Create index.html const indexHtml = ` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>OrdoJS App</title> </head> <body> <div id="app"></div> <script type="module" src="/src/main.atom"></script> </body> </html> `; await writeFile(path.join(name, 'index.html'), indexHtml); logger.success(`Project ${name} created successfully!`); logger.info(`To get started:`); logger.info(` cd ${name}`); logger.info(` npm install`); logger.info(` npm run dev`); } catch (error) { logger.error(`Initialization failed: ${error instanceof Error ? error.message : String(error)}`); process.exit(1); } } //# sourceMappingURL=init.js.map