UNPKG

skyrocket-cli

Version:

Command line interface for rapid Skyrocket projects development.

91 lines (83 loc) 2.57 kB
const Metalsmith = require("metalsmith"); const async = require("async"); const render = require("consolidate").handlebars.render; const exec = require("child_process").exec; const ask = require("./ask"); const utils = require("./utils"); module.exports = function generate(prompts, path) { const metalsmith = new Metalsmith(path); metalsmith .metadata({ version: "0.0.1", curFolder: path }) .use(ask(prompts)) .clean(false) .source(".") .destination(path) .use(renderTemplateFiles()) .build((err, files) => { const data = metalsmith.metadata(); // if (err) { // console.log(err) // } else if (data.cli_installPackage) { // const script = data.cli_installPackage === 'npm' ? 'npm install && npm run start' : 'yarn && yarn start' // exec(script, (error, stdout, stderr) => { // console.log(`stdout: ${stdout}`); // console.log(`stderr: ${stderr}`); // if (error !== null) { // console.log(`exec error: ${error}`); // } // utils.success(data.cli_projectName + 'initialization finished!') // }) // } else { // utils.success(data.cli_projectName + 'initialization finished!') // } if (err) { console.log(err); } else { utils.success(data.cli_projectName + "initialization finished!"); } // console.log(data) }); }; /** * Template in place plugin. * * @param {Object} files * @param {Metalsmith} metalsmith * @param {Function} done */ const renderTemplateFiles = () => { return (files, metalsmith, done) => { const keys = Object.keys(files); const metalsmithMetadata = metalsmith.metadata(); async.each( keys, (file, next) => { // do not attempt to render files that has unrecognized text if ( /^(.(.*\.otf$|.*\.woff$|.*\.woff2$|.*\.jpg$|.*\.svg$|.*\.png$|.*plugin))*$|(^.*\/plugins\/.*$)|addImage\.twig/g.test( file ) ) { return next(); } const str = files[file].contents.toString(); // do not attempt to render files that do not have mustaches if (!/{{([^{}]+)}}/g.test(str)) { return next(); } render(str, metalsmithMetadata, (err, res) => { if (err) { err.message = `[${file}] ${err.message}`; return next(err); } files[file].contents = Buffer.from(res); next(); }); }, done ); }; };