UNPKG

node-plop

Version:

programmatic plopping for fun and profit

117 lines (100 loc) 2.49 kB
'use strict'; var path = require('path'); module.exports = function () { var inquirer = require('inquirer'); var handlebars = require('handlebars'); var changeCase = require('change-case'); var plopfilePath = ''; var generators = {}; var pkgJson = {}; var partials = {}; var helpers = { camelCase: changeCase.camel, snakeCase: changeCase.snake, dashCase: changeCase.param, kabobCase: changeCase.param, dotCase: changeCase.dot, pathCase: changeCase.path, properCase: changeCase.pascal, pascalCase: changeCase.pascal, lowerCase: changeCase.lower, sentenceCase: changeCase.sentence, constantCase: changeCase.constant, titleCase: changeCase.title, pkg: function pkg(key) { return pkgJson[key]; } }; var addPrompt = inquirer.registerPrompt; function addHelper(name, fn) { helpers[name] = fn; } function addPartial(name, str) { partials[name] = str; } function renderString(template, data) { var t = template, h, p; for (h in helpers) { if (!helpers.hasOwnProperty(h)) { continue; } handlebars.registerHelper(h, helpers[h]); } for (p in partials) { if (!partials.hasOwnProperty(p)) { continue; } handlebars.registerPartial(p, partials[p]); } return handlebars.compile(t)(data); } function setGenerator(name, config) { // if no name is provided, use a default if (typeof name !== 'string' || name.length === 0) { name = 'generator-' + (Object.keys(generators).length + 1); } generators[name] = Object.assign(config, { name: name, basePath: plopfilePath }); } function getGenerator(name) { return generators[name]; } function getGeneratorList() { return Object.keys(generators).map(function (gName) { return { name: gName, description: generators[gName].description || '' }; }); } function setPlopfilePath(filePath) { filePath = path.dirname(filePath); try { pkgJson = require(filePath + '/package.json'); } catch (err) {} plopfilePath = filePath; } function getPlopfilePath() { return plopfilePath; } ///// // the plop object API that is exposed to the plopfile when executed // return { addHelper: addHelper, addPartial: addPartial, addPrompt: addPrompt, renderString: renderString, setGenerator: setGenerator, getGenerator: getGenerator, getGeneratorList: getGeneratorList, setPlopfilePath: setPlopfilePath, getPlopfilePath: getPlopfilePath, inquirer: inquirer, handlebars: handlebars }; };