think-cli
Version:
A simple CLI for scaffolding Thinkjs projects.
36 lines (32 loc) • 1.33 kB
JavaScript
const Metalsmith = require('metalsmith');
const path = require('path');
const ask = require('./ask.js');
const fileFilter = require('./file-filter.js');
const mapping = require('./mapping.js');
const template = require('./template.js');
const normalizePath = require('./normalize-path.js');
const insertThinkjsInfoToPackage = require('./insert-thinkjs-info-to-package.js');
const saveCtxToMetadata = require('./save-ctx-to-metadata.js');
const confirmOverwrite = require('./confirm-overwrite.js');
module.exports = function(source, target, options, done) {
const metalsmith = Metalsmith(path.join(source, 'template'));
if (options.command === 'new') {
metalsmith.use(ask(options.metadata.prompts, {isMultiModule: options.isMultiModule}));
metalsmith.use(insertThinkjsInfoToPackage({
projectName: options.name,
template: options.template,
clone: options.clone,
isMultiModule: options.isMultiModule
}));
}
metalsmith.clean(options.command === 'new')
.source('.')
.use(saveCtxToMetadata(options.context))
.use(fileFilter(options.maps))
.use(mapping(options.maps))
.use(normalizePath())
.use(confirmOverwrite(options.command))
.use(template(source, options.metadata.skipCompile))
.destination(target)
.build((err, files) => done(err, files, options));
};