🛠️ Usage
Import the package
1import { Maker, Parser } from 'hbh-psm';
Maker→ Project generator class.Parser→ Text-based tree parser.
1️⃣ Define a Project Structure
You can define a structure using nested objects or parse from a text-based visual tree:
1const structure = {2 "src": {3 "index.js.template": "console.log('Hello {{name}}!');",4 "utils.js": "// utility functions"5 },6 "README.md": "# {{projectName}}"7};
Or parse from text:
1const textTree = `2src/3├── index.js.template console.log('Hello {{name}}!');4├── utils.js5README.md # Project README6`;8const structure = Parser(textTree, true, { separator: null, metadata: true });
2️⃣ Generate the Project
1const generator = new Maker('./my-project', structure, {2 variables: { name: 'World', projectName: 'AwesomeProject' },3 dryRun: false, // true for preview only4 override: true, // overwrite existing files5 addBackup: true, // create backups if file exists6 verbose: true7});9generator.generate()10 .then(() => console.log('✅ Project created!'))11 .catch(err => console.error('❌ Error:', err));
3️⃣ Dry-Run Preview
1const generator = new Maker('./my-project', structure, { dryRun: true });2const preview = await generator.generate();4console.log(preview);5/*6[7 { type: 'folder', path: './my-project/src' },8 { type: 'file', path: './my-project/src/index.js', content: "console.log('Hello World!');" },9 { type: 'file', path: './my-project/README.md', content: '# AwesomeProject' }10]11*/
4️⃣ Conditional Generation
You can skip certain files or folders dynamically:
1const generator = new Maker('./my-project', structure, {2 conditions: { "utils.js": false } // will not generate utils.js3});
5️⃣ Callbacks on Creation
1const generator = new Maker('./my-project', structure, {2 onCreate: ({ type, path }) => console.log(`Created ${type}: ${path}`)3});
6️⃣ Ignore Patterns
Skip files/folders by name or regex:
1const generator = new Maker('./my-project', structure, {2 ignore: ['README.md', /\.log$/]3});
7️⃣ File Append Mode
Append content to existing files instead of overwriting:
1const generator = new Maker('./my-project', structure, {2 append: true3});