chillypotato-engine
v2.0.2
Published
Core generation engine for ChillyPotato
Maintainers
Readme
chillypotato-engine
Core generation engine for ChillyPotato
Features
- 🎯 Multi-source template resolution (local, remote, GitHub)
- 📝 Manifest validation with JSON Schema
- 🎨 Handlebars template rendering
- ❓ Interactive prompt system
- 🪝 Lifecycle hooks (pre/post-generate, validate)
- 🔌 Extensible plugin system
- 🔒 Sandboxed hook execution
Installation
npm install chillypotato-engineQuick Start
import { Engine } from 'chillypotato-engine';
const engine = new Engine();
const result = await engine.generate({
template: 'react-tailwind',
destination: './my-project',
answers: {
projectName: 'my-project',
useTypescript: true,
},
});API
Engine
class Engine {
async generate(options: GenerateOptions): Promise<GenerateResult>;
async checkUpgrade(options: CheckUpgradeOptions): Promise<UpgradeInfo>;
async upgrade(options: UpgradeOptions): Promise<UpgradeResult>;
}GenerateOptions
interface GenerateOptions {
template: string;
destination: string;
answers?: Record<string, any>;
plugins?: string[];
skipHooks?: boolean;
skipGit?: boolean;
skipInstall?: boolean;
dryRun?: boolean;
verbose?: boolean;
}Template System
Manifest Structure
{
"name": "react-tailwind",
"version": "1.0.0",
"description": "React with Tailwind CSS",
"engine": "^2.0.0",
"prompts": [...],
"hooks": {...},
"dependencies": {...}
}Variable Substitution
Templates support Handlebars syntax:
<title>{{projectName}}</title>
{{#if useTypescript}}
<script src="./main.ts"></script>
{{/if}}Lifecycle Hooks
// hooks/post-generate.js
export default async function(context) {
const { project, exec } = context;
await exec('npm install', { cwd: project.path });
}Plugin Development
export default class MyPlugin implements Plugin {
name = 'my-plugin';
version = '1.0.0';
async apply(context: PluginContext) {
const { project } = context;
project.addDependency('my-package', '^1.0.0');
}
}License
MIT © ChillyPotato Team
