@ordojs/cli
Version:
Command-line interface for OrdoJS framework
115 lines (112 loc) • 3.41 kB
JavaScript
/**
* @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