UNPKG

@platform/cell.tmpl

Version:

Template generator for CellOS.

46 lines (45 loc) 1.8 kB
import { Observable } from 'rxjs'; import { filter, map } from 'rxjs/operators'; import { cli, fs, log, Template, defaultValue } from '../common'; import * as middleware from './cmd.tmpl.middleware'; export async function tmpl(args) { const install = defaultValue(args.install, true); const tmplDir = fs.resolve(fs.join(__dirname, '../../templates')); const fsPrompt = cli.prompt.fs.paths(tmplDir, { pageSize: 10, all: false }); const dir = (await fsPrompt.radio('create from:'))[0]; const name = await cli.prompt.text({ message: 'module name' }); const rename = [{ from: 'pkg.json', to: 'package.json' }]; let tmpl = Template .create(dir) .use(middleware.processPackage({ filename: 'pkg.json' })) .use(middleware.replaceText()) .use(middleware.saveFile({ rename, done: install ? 'NEXT' : 'COMPLETE' })); if (install) { tmpl = tmpl.use(middleware.npmInstall({ done: 'COMPLETE' })); } const variables = { dir: fs.resolve(`./${name}`), name, }; const alerts$ = tmpl.events$.pipe(filter((e) => e.type === 'TMPL/alert'), map((e) => e.payload)); const task = { title: log.gray(`Create template: ${log.white(fs.basename(dir))}`), task: () => new Observable((observer) => { alerts$.subscribe((e) => observer.next(e.message)); (async () => { await tmpl.execute({ variables }); observer.complete(); })(); }), }; log.info(); await cli.exec.tasks.run(task); log.info(); log.info.cyan(` cd ${fs.basename(variables.dir)}`); if (!install) { log.info.cyan(` yarn install`); } log.info.cyan(` yarn ${log.green('start')}`); log.info(); log.info.gray(variables.dir); }