UNPKG

@sanpjs/create-sanp-app

Version:

@sanpjs/create-sanp-app

82 lines (80 loc) 2.49 kB
const path = require('path'); const fse = require('fs-extra'); const prompts = require('prompts'); const {logger, boxen, color, ora, i18n} = require('@sanpjs/utils'); const Generator = require('@sanpjs/generator').default; const $t = i18n({ ignoreKnown: true, localesDir: path.join(__dirname, '../locales') }); exports.default = async argv => { const {cwd, args} = argv; const version = require('../package').version; const templatePath = path.join(__dirname, '../templates'); const choices = []; const files = fse.readdirSync(templatePath); let spinner = null; files.forEach(file => { !path.extname(file) && choices.push({ title: `${file} ${$t('project')}`, value: file }); }); const answers = args.tpl ? args : await prompts([ { type: 'select', name: 'tpl', message: $t('Select the type of project'), initial: 0, choices } ]); // generate template const generate = new Generator({ templateDir: path.resolve(templatePath, answers.tpl), outputDir: cwd, templateVars: {version, ...args}, actions: [ { type: 'add', files: '**', filters: { 'tsconfig.json': '!ts', 'typings.d.ts': '!ts' } }, { type: 'move', patterns: { '**/**.ts': from => { return args.ts ? from : from.replace(/\.ts$/, '.js'); } } }, { type: 'move', patterns: { '**/_*': from => { return from.replace(/\/_([^/]+)$/, '/.$1'); } } } ], after: () => { spinner && spinner.succeed($t('Generate complete!')); logger.log( boxen( ` Sanp ${version} ${$t('Run')} ${color.green('yarn')} ${$t('to install dependencies')} ${$t('Start with')} ${color.bold('yarn/npm start')}`, {padding: 1, borderStyle: 'round'} ) ); } }); spinner = ora($t('Generating directory structure...')).start(); await generate.run(); };