coz-bud
Version:
bud for coz
141 lines (111 loc) • 11.7 kB
JavaScript
/**
* Bud constructor.
* A bud contains file meta data like witch template to use, where to render it, what permission to give, and so on.
* @memberof module:coz-bud/lib
* @inner
* @constructor Bud
* @param {object} config - Bud configuration.
* @param {string|object} [config.engine='handlebars'] - Template engine name or engine itself.
* @param {string} [config.cwd=process.cwd()] - Working directory path.
* @param {object} config.data - Data which template render with.
* @param {boolean} [config.mkdirp] - Make parent directories if needed.
* @param {object} [config.setup] - Optional settings for template engine.
* @param {boolean} [config.force=false] - Should overwrite file when already exists, or not.
* @param {string|number} [config.mode='644'] - Permission of generated files. (eg., '444' for readonly files).
* @param {string} [config.path] - Destination file path. If not provided, guess from bud file path.
* @param {string|function} config.tmpl='json' - Template file path or registered template name or template function.
*/
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var copying = require('./copying');
var assert = require('assert');
/** @lends Bud */
function Bud(config) {
copying.copy(config, this);
copying.fallbackCopy(Bud.defaults, this);
this.validate();
}
Bud.prototype = {
/**
* Template engine name or engine itself
* @type {string|object}
*/
engine: 'handlebars',
/**
* Working directory path
* @type {string}
*/
cwd: process.cwd(),
/**
* Data which template render with
* @type {object}
*/
data: undefined,
/**
* Done to writeout or not
* @type {boolean}
*/
done: undefined,
/**
* Make parent directories if needed
* @type {boolean}
*/
mkdirp: undefined,
/**
* Optional settings for template engine
* @type {object}
*/
setup: undefined,
/**
* Should overwrite file when already exists, or not
* @type {boolean}
*/
force: false,
/**
* Permission of generated files. (eg., '444' for readonly files)
* @type {string|number}
*/
mode: '644',
/**
* Destination file path. If not provided, guess from bud file path
* @type {string}
*/
path: undefined,
/**
* Bud source file path
* @type {string}
*/
src: undefined,
/**
* Template file path or registered template name or template function
* @type {string|function}
*/
tmpl: 'json',
/**
* Validate this configuration.
* @throws Will throw an error if configuration invalid.
*/
validate: function validate() {
var _assertType = function _assertType(value, type, msg) {
if (typeof value === 'undefined') {
return;
}
var valid = !!~type.split(/\|/g).indexOf((0, _typeof2.default)(value));
assert(valid, msg);
};
_assertType(this.engine, 'string|object', 'bud.engine should be string|object.');
_assertType(this.cwd, 'string', 'bud.cwd should be string.');
_assertType(this.data, 'object', 'bud.data should be object.');
_assertType(this.done, 'boolean', 'bud.done should be boolean.');
_assertType(this.mkdirp, 'boolean', 'bud.mkdirp should be boolean.');
_assertType(this.setup, 'object', 'bud.setup should be object.');
_assertType(this.force, 'boolean', 'bud.force should be boolean.');
_assertType(this.mode, 'string|number', 'bud.mode should be string|number.');
_assertType(this.path, 'string', 'bud.path should be string.');
_assertType(this.src, 'string', 'bud.src should be string.');
_assertType(this.tmpl, 'string|function', 'bud.tmpl should be string|function.');
}
};
module.exports = Bud;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1ZC5qcyJdLCJuYW1lcyI6WyJjb3B5aW5nIiwicmVxdWlyZSIsImFzc2VydCIsIkJ1ZCIsImNvbmZpZyIsImNvcHkiLCJmYWxsYmFja0NvcHkiLCJkZWZhdWx0cyIsInZhbGlkYXRlIiwicHJvdG90eXBlIiwiZW5naW5lIiwiY3dkIiwicHJvY2VzcyIsImRhdGEiLCJ1bmRlZmluZWQiLCJkb25lIiwibWtkaXJwIiwic2V0dXAiLCJmb3JjZSIsIm1vZGUiLCJwYXRoIiwic3JjIiwidG1wbCIsIl9hc3NlcnRUeXBlIiwidmFsdWUiLCJ0eXBlIiwibXNnIiwidmFsaWQiLCJzcGxpdCIsImluZGV4T2YiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkE7Ozs7OztBQUVBLElBQU1BLE9BQU8sR0FBR0MsT0FBTyxDQUFDLFdBQUQsQ0FBdkI7O0FBQ0EsSUFBTUMsTUFBTSxHQUFHRCxPQUFPLENBQUMsUUFBRCxDQUF0QjtBQUVBOzs7QUFDQSxTQUFTRSxHQUFULENBQWNDLE1BQWQsRUFBc0I7QUFDcEJKLEVBQUFBLE9BQU8sQ0FBQ0ssSUFBUixDQUFhRCxNQUFiLEVBQXFCLElBQXJCO0FBQ0FKLEVBQUFBLE9BQU8sQ0FBQ00sWUFBUixDQUFxQkgsR0FBRyxDQUFDSSxRQUF6QixFQUFtQyxJQUFuQztBQUNBLE9BQUtDLFFBQUw7QUFDRDs7QUFFREwsR0FBRyxDQUFDTSxTQUFKLEdBQWdCO0FBQ2Q7Ozs7QUFJQUMsRUFBQUEsTUFBTSxFQUFFLFlBTE07O0FBTWQ7Ozs7QUFJQUMsRUFBQUEsR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBQVIsRUFWUzs7QUFXZDs7OztBQUlBRSxFQUFBQSxJQUFJLEVBQUVDLFNBZlE7O0FBZ0JkOzs7O0FBSUFDLEVBQUFBLElBQUksRUFBRUQsU0FwQlE7O0FBcUJkOzs7O0FBSUFFLEVBQUFBLE1BQU0sRUFBRUYsU0F6Qk07O0FBMEJkOzs7O0FBSUFHLEVBQUFBLEtBQUssRUFBRUgsU0E5Qk87O0FBK0JkOzs7O0FBSUFJLEVBQUFBLEtBQUssRUFBRSxLQW5DTzs7QUFvQ2Q7Ozs7QUFJQUMsRUFBQUEsSUFBSSxFQUFFLEtBeENROztBQXlDZDs7OztBQUlBQyxFQUFBQSxJQUFJLEVBQUVOLFNBN0NROztBQThDZDs7OztBQUlBTyxFQUFBQSxHQUFHLEVBQUVQLFNBbERTOztBQW1EZDs7OztBQUlBUSxFQUFBQSxJQUFJLEVBQUUsTUF2RFE7O0FBd0RkOzs7O0FBSUFkLEVBQUFBLFFBNURjLHNCQTRERjtBQUNWLFFBQU1lLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUNDLEtBQUQsRUFBUUMsSUFBUixFQUFjQyxHQUFkLEVBQXNCO0FBQ3hDLFVBQUksT0FBT0YsS0FBUCxLQUFpQixXQUFyQixFQUFrQztBQUNoQztBQUNEOztBQUNELFVBQU1HLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQ0YsSUFBSSxDQUFDRyxLQUFMLENBQVcsS0FBWCxFQUFrQkMsT0FBbEIsdUJBQWlDTCxLQUFqQyxFQUFqQjtBQUNBdEIsTUFBQUEsTUFBTSxDQUFDeUIsS0FBRCxFQUFRRCxHQUFSLENBQU47QUFDRCxLQU5EOztBQVFBSCxJQUFBQSxXQUFXLENBQUMsS0FBS2IsTUFBTixFQUFjLGVBQWQsRUFBK0IscUNBQS9CLENBQVg7O0FBQ0FhLElBQUFBLFdBQVcsQ0FBQyxLQUFLWixHQUFOLEVBQVcsUUFBWCxFQUFxQiwyQkFBckIsQ0FBWDs7QUFDQVksSUFBQUEsV0FBVyxDQUFDLEtBQUtWLElBQU4sRUFBWSxRQUFaLEVBQXNCLDRCQUF0QixDQUFYOztBQUNBVSxJQUFBQSxXQUFXLENBQUMsS0FBS1IsSUFBTixFQUFZLFNBQVosRUFBdUIsNkJBQXZCLENBQVg7O0FBQ0FRLElBQUFBLFdBQVcsQ0FBQyxLQUFLUCxNQUFOLEVBQWMsU0FBZCxFQUF5QiwrQkFBekIsQ0FBWDs7QUFDQU8sSUFBQUEsV0FBVyxDQUFDLEtBQUtOLEtBQU4sRUFBYSxRQUFiLEVBQXVCLDZCQUF2QixDQUFYOztBQUNBTSxJQUFBQSxXQUFXLENBQUMsS0FBS0wsS0FBTixFQUFhLFNBQWIsRUFBd0IsOEJBQXhCLENBQVg7O0FBQ0FLLElBQUFBLFdBQVcsQ0FBQyxLQUFLSixJQUFOLEVBQVksZUFBWixFQUE2QixtQ0FBN0IsQ0FBWDs7QUFDQUksSUFBQUEsV0FBVyxDQUFDLEtBQUtILElBQU4sRUFBWSxRQUFaLEVBQXNCLDRCQUF0QixDQUFYOztBQUNBRyxJQUFBQSxXQUFXLENBQUMsS0FBS0YsR0FBTixFQUFXLFFBQVgsRUFBcUIsMkJBQXJCLENBQVg7O0FBQ0FFLElBQUFBLFdBQVcsQ0FBQyxLQUFLRCxJQUFOLEVBQVksaUJBQVosRUFBK0IscUNBQS9CLENBQVg7QUFDRDtBQWhGYSxDQUFoQjtBQW1GQVEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCNUIsR0FBakIiLCJzb3VyY2VSb290IjoiLi4vLi4vbGliIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCdWQgY29uc3RydWN0b3IuXG4gKiBBIGJ1ZCBjb250YWlucyBmaWxlIG1ldGEgZGF0YSBsaWtlIHdpdGNoIHRlbXBsYXRlIHRvIHVzZSwgd2hlcmUgdG8gcmVuZGVyIGl0LCB3aGF0IHBlcm1pc3Npb24gdG8gZ2l2ZSwgYW5kIHNvIG9uLlxuICogQG1lbWJlcm9mIG1vZHVsZTpjb3otYnVkL2xpYlxuICogQGlubmVyXG4gKiBAY29uc3RydWN0b3IgQnVkXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gQnVkIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IFtjb25maWcuZW5naW5lPSdoYW5kbGViYXJzJ10gLSBUZW1wbGF0ZSBlbmdpbmUgbmFtZSBvciBlbmdpbmUgaXRzZWxmLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb25maWcuY3dkPXByb2Nlc3MuY3dkKCldIC0gV29ya2luZyBkaXJlY3RvcnkgcGF0aC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcuZGF0YSAtIERhdGEgd2hpY2ggdGVtcGxhdGUgcmVuZGVyIHdpdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjb25maWcubWtkaXJwXSAtIE1ha2UgcGFyZW50IGRpcmVjdG9yaWVzIGlmIG5lZWRlZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlnLnNldHVwXSAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0ZW1wbGF0ZSBlbmdpbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjb25maWcuZm9yY2U9ZmFsc2VdIC0gU2hvdWxkIG92ZXJ3cml0ZSBmaWxlIHdoZW4gYWxyZWFkeSBleGlzdHMsIG9yIG5vdC5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW2NvbmZpZy5tb2RlPSc2NDQnXSAtIFBlcm1pc3Npb24gb2YgZ2VuZXJhdGVkIGZpbGVzLiAoZWcuLCAmI3gyNzs0NDQmI3gyNzsgZm9yIHJlYWRvbmx5IGZpbGVzKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29uZmlnLnBhdGhdIC0gRGVzdGluYXRpb24gZmlsZSBwYXRoLiBJZiBub3QgcHJvdmlkZWQsIGd1ZXNzIGZyb20gYnVkIGZpbGUgcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfGZ1bmN0aW9ufSBjb25maWcudG1wbD0nanNvbicgLSBUZW1wbGF0ZSBmaWxlIHBhdGggb3IgcmVnaXN0ZXJlZCB0ZW1wbGF0ZSBuYW1lIG9yIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb3B5aW5nID0gcmVxdWlyZSgnLi9jb3B5aW5nJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbi8qKiBAbGVuZHMgQnVkICovXG5mdW5jdGlvbiBCdWQgKGNvbmZpZykge1xuICBjb3B5aW5nLmNvcHkoY29uZmlnLCB0aGlzKVxuICBjb3B5aW5nLmZhbGxiYWNrQ29weShCdWQuZGVmYXVsdHMsIHRoaXMpXG4gIHRoaXMudmFsaWRhdGUoKVxufVxuXG5CdWQucHJvdG90eXBlID0ge1xuICAvKipcbiAgICogVGVtcGxhdGUgZW5naW5lIG5hbWUgb3IgZW5naW5lIGl0c2VsZlxuICAgKiBAdHlwZSB7c3RyaW5nfG9iamVjdH1cbiAgICovXG4gIGVuZ2luZTogJ2hhbmRsZWJhcnMnLFxuICAvKipcbiAgICogV29ya2luZyBkaXJlY3RvcnkgcGF0aFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAvKipcbiAgICogRGF0YSB3aGljaCB0ZW1wbGF0ZSByZW5kZXIgd2l0aFxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKi9cbiAgZGF0YTogdW5kZWZpbmVkLFxuICAvKipcbiAgICogRG9uZSB0byB3cml0ZW91dCBvciBub3RcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBkb25lOiB1bmRlZmluZWQsXG4gIC8qKlxuICAgKiBNYWtlIHBhcmVudCBkaXJlY3RvcmllcyBpZiBuZWVkZWRcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBta2RpcnA6IHVuZGVmaW5lZCxcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0ZW1wbGF0ZSBlbmdpbmVcbiAgICogQHR5cGUge29iamVjdH1cbiAgICovXG4gIHNldHVwOiB1bmRlZmluZWQsXG4gIC8qKlxuICAgKiBTaG91bGQgb3ZlcndyaXRlIGZpbGUgd2hlbiBhbHJlYWR5IGV4aXN0cywgb3Igbm90XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZm9yY2U6IGZhbHNlLFxuICAvKipcbiAgICogUGVybWlzc2lvbiBvZiBnZW5lcmF0ZWQgZmlsZXMuIChlZy4sICYjeDI3OzQ0NCYjeDI3OyBmb3IgcmVhZG9ubHkgZmlsZXMpXG4gICAqIEB0eXBlIHtzdHJpbmd8bnVtYmVyfVxuICAgKi9cbiAgbW9kZTogJzY0NCcsXG4gIC8qKlxuICAgKiBEZXN0aW5hdGlvbiBmaWxlIHBhdGguIElmIG5vdCBwcm92aWRlZCwgZ3Vlc3MgZnJvbSBidWQgZmlsZSBwYXRoXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBwYXRoOiB1bmRlZmluZWQsXG4gIC8qKlxuICAgKiBCdWQgc291cmNlIGZpbGUgcGF0aFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgc3JjOiB1bmRlZmluZWQsXG4gIC8qKlxuICAgKiBUZW1wbGF0ZSBmaWxlIHBhdGggb3IgcmVnaXN0ZXJlZCB0ZW1wbGF0ZSBuYW1lIG9yIHRlbXBsYXRlIGZ1bmN0aW9uXG4gICAqIEB0eXBlIHtzdHJpbmd8ZnVuY3Rpb259XG4gICAqL1xuICB0bXBsOiAnanNvbicsXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGlzIGNvbmZpZ3VyYXRpb24uXG4gICAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiBjb25maWd1cmF0aW9uIGludmFsaWQuXG4gICAqL1xuICB2YWxpZGF0ZSAoKSB7XG4gICAgY29uc3QgX2Fzc2VydFR5cGUgPSAodmFsdWUsIHR5cGUsIG1zZykgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCB2YWxpZCA9ICEhfnR5cGUuc3BsaXQoL1xcfC9nKS5pbmRleE9mKHR5cGVvZih2YWx1ZSkpXG4gICAgICBhc3NlcnQodmFsaWQsIG1zZylcbiAgICB9XG5cbiAgICBfYXNzZXJ0VHlwZSh0aGlzLmVuZ2luZSwgJ3N0cmluZ3xvYmplY3QnLCAnYnVkLmVuZ2luZSBzaG91bGQgYmUgc3RyaW5nfG9iamVjdC4nKVxuICAgIF9hc3NlcnRUeXBlKHRoaXMuY3dkLCAnc3RyaW5nJywgJ2J1ZC5jd2Qgc2hvdWxkIGJlIHN0cmluZy4nKVxuICAgIF9hc3NlcnRUeXBlKHRoaXMuZGF0YSwgJ29iamVjdCcsICdidWQuZGF0YSBzaG91bGQgYmUgb2JqZWN0LicpXG4gICAgX2Fzc2VydFR5cGUodGhpcy5kb25lLCAnYm9vbGVhbicsICdidWQuZG9uZSBzaG91bGQgYmUgYm9vbGVhbi4nKVxuICAgIF9hc3NlcnRUeXBlKHRoaXMubWtkaXJwLCAnYm9vbGVhbicsICdidWQubWtkaXJwIHNob3VsZCBiZSBib29sZWFuLicpXG4gICAgX2Fzc2VydFR5cGUodGhpcy5zZXR1cCwgJ29iamVjdCcsICdidWQuc2V0dXAgc2hvdWxkIGJlIG9iamVjdC4nKVxuICAgIF9hc3NlcnRUeXBlKHRoaXMuZm9yY2UsICdib29sZWFuJywgJ2J1ZC5mb3JjZSBzaG91bGQgYmUgYm9vbGVhbi4nKVxuICAgIF9hc3NlcnRUeXBlKHRoaXMubW9kZSwgJ3N0cmluZ3xudW1iZXInLCAnYnVkLm1vZGUgc2hvdWxkIGJlIHN0cmluZ3xudW1iZXIuJylcbiAgICBfYXNzZXJ0VHlwZSh0aGlzLnBhdGgsICdzdHJpbmcnLCAnYnVkLnBhdGggc2hvdWxkIGJlIHN0cmluZy4nKVxuICAgIF9hc3NlcnRUeXBlKHRoaXMuc3JjLCAnc3RyaW5nJywgJ2J1ZC5zcmMgc2hvdWxkIGJlIHN0cmluZy4nKVxuICAgIF9hc3NlcnRUeXBlKHRoaXMudG1wbCwgJ3N0cmluZ3xmdW5jdGlvbicsICdidWQudG1wbCBzaG91bGQgYmUgc3RyaW5nfGZ1bmN0aW9uLicpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCdWRcbiJdfQ==