UNPKG

magner

Version:

Universal admin panel magnetic to any backend

74 lines (66 loc) 1.84 kB
import fs from 'fs'; import path from 'path'; import ejs from 'ejs'; import * as process from 'process'; const templateDir = path.join(__dirname, '..', 'create-entity', 'feature-templates'); const templates = [ { from: path.join(templateDir, 'en.ejs'), to: 'en.ts', }, { from: path.join(templateDir, 'types.ejs'), to: 'types.ts', }, { from: path.join(templateDir, 'requests.ejs'), to: 'requests.ts', }, { from: path.join(templateDir, 'card-page.ejs'), to: 'card-page.ts', }, { from: path.join(templateDir, 'table-page.ejs'), to: 'table-page.ts', }, { from: path.join(templateDir, 'table.ejs'), to: 'table.ts', }, { from: path.join(templateDir, 'filters.ejs'), to: 'filters.ts', }, { from: path.join(templateDir, 'style.ejs'), to: 'style.css', }, { from: path.join(templateDir, 'readme.ejs'), to: 'readme.md', }, ]; const createEntity = async (name: string, dest: string) => { const capitalized = name.charAt(0).toUpperCase() + name.slice(1); const lastChar = name.charAt(name.length - 1) || ''; const pluralized = lastChar === 'x' || lastChar === 's' ? `${name}es` : `${name}s`; const target = path.join(process.cwd(), dest); if (fs.existsSync(target) && fs.readdirSync(target)) { console.error(`Specified directory "${dest}" must be empty!`); process.exit(0); } fs.mkdirSync(target, { recursive: true }); templates.forEach((template) => { const file = fs.readFileSync(template.from, { encoding: 'utf-8' }); const to = path.join(target, template.to); const compiled = (ejs.compile(file))({ name, pluralized, capitalized, }); fs.writeFileSync(to, compiled); }); console.info(`Feature ${capitalized} is successfully added!`); }; export default createEntity;