ape-tmpl
Version:
Templates for ape framework.
162 lines (134 loc) • 16.2 kB
JavaScript
/**
* Bud for index.js
* @memberof module:ape-tmpl/lib
* @function indexJsBud
* @param {object} config - Index js configuration.
* @param {string} config.dirname - Directory name.
* @param {string} [config.desc] - Module description.
* @param {string} [config.module] - Module annotation.
* @param {string} [config.parentmodule] - Name of parent module.
* @param {string[]} [config.submodules] - Name of members as submodule.
* @param {string[]} [config.subclasses] - Name of members as subclasses
* @returns {object} - Bud for index.js
*/
;
var EOL = require('os').EOL;
var arrayfilter = require('arrayfilter');
var arraysort = require('arraysort');
var stringcase = require('stringcase');
var assert = require('assert');
var path = require('path');
var fs = require('fs');
var minimatch = require('minimatch');
var _tmpl = require('./_tmpl');
/** @lends indexJsBud */
function indexJsBud(config) {
var dirname = config.dirname;
assert.ok(!!dirname, 'config.dirname is required.');
var tmpl = config.mjs ? _tmpl('hbs/index.mjs.hbs') : _tmpl('hbs/index.js.hbs');
return {
force: true,
mode: '444',
path: path.resolve(dirname, 'index.js'),
mkdirp: false,
tmpl: tmpl,
data: {
END_BRACE: '}',
desc: [].concat(config.desc || []).join(EOL + ' * '),
module: config.module,
parentmodule: [].concat(config.parentmodule || []),
get modules() {
var submodules = [].concat(config.submodules || []),
subclasses = [].concat(config.subclasses || []);
return fs.readdirSync(dirname).sort(arraysort.stringCompare()).filter(arrayfilter.patternReject(/^[\._]/)).filter(arrayfilter.patternReject(/~$/)).filter(arrayfilter.patternReject(/.tmp$/)).filter(arrayfilter.patternReject(/^index\.js$/)).filter(arrayfilter.patternReject(/\.jsx$/)).filter(function (filename) {
try {
require.resolve(path.resolve(dirname, filename));
return true;
} catch (e) {
return false;
}
}).map(function (filename) {
try {
var extname = path.extname(filename);
var name = stringcase.camelcase(path.basename(filename, extname));
if (config.pascalcase) {
name = stringcase.pascalcase(name);
}
var requireName = name.split(/\./g).map(stringcase.snakecase).join('.');
var needsExtToRequire = ['.json'].includes(extname);
if (needsExtToRequire) {
requireName += extname;
}
return {
name: name,
requireName: requireName,
get isSubmodules() {
var camelName = stringcase.camelcase(name);
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = submodules[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var submodule = _step.value;
var hit = minimatch(camelName, submodule);
if (hit) {
return true;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return false;
},
get isSubclass() {
var pascalName = stringcase.pascalcase(name);
var camelName = stringcase.camelcase(name);
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = subclasses[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var subclass = _step2.value;
var hit = minimatch(pascalName, subclass) || minimatch(camelName, subclass);
if (hit) {
return true;
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return false;
}
};
} catch (e) {
return null;
}
}).filter(arrayfilter.emptyReject());
}
}
};
}
module.exports = indexJsBud;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4X2pzX2J1ZC5qcyJdLCJuYW1lcyI6WyJFT0wiLCJyZXF1aXJlIiwiYXJyYXlmaWx0ZXIiLCJhcnJheXNvcnQiLCJzdHJpbmdjYXNlIiwiYXNzZXJ0IiwicGF0aCIsImZzIiwibWluaW1hdGNoIiwiX3RtcGwiLCJpbmRleEpzQnVkIiwiY29uZmlnIiwiZGlybmFtZSIsIm9rIiwidG1wbCIsIm1qcyIsImZvcmNlIiwibW9kZSIsInJlc29sdmUiLCJta2RpcnAiLCJkYXRhIiwiRU5EX0JSQUNFIiwiZGVzYyIsImNvbmNhdCIsImpvaW4iLCJtb2R1bGUiLCJwYXJlbnRtb2R1bGUiLCJtb2R1bGVzIiwic3VibW9kdWxlcyIsInN1YmNsYXNzZXMiLCJyZWFkZGlyU3luYyIsInNvcnQiLCJzdHJpbmdDb21wYXJlIiwiZmlsdGVyIiwicGF0dGVyblJlamVjdCIsImZpbGVuYW1lIiwiZSIsIm1hcCIsImV4dG5hbWUiLCJuYW1lIiwiY2FtZWxjYXNlIiwiYmFzZW5hbWUiLCJwYXNjYWxjYXNlIiwicmVxdWlyZU5hbWUiLCJzcGxpdCIsInNuYWtlY2FzZSIsIm5lZWRzRXh0VG9SZXF1aXJlIiwiaW5jbHVkZXMiLCJpc1N1Ym1vZHVsZXMiLCJjYW1lbE5hbWUiLCJzdWJtb2R1bGUiLCJoaXQiLCJpc1N1YmNsYXNzIiwicGFzY2FsTmFtZSIsInN1YmNsYXNzIiwiZW1wdHlSZWplY3QiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztBQWNBOztBQUVBLElBQU1BLEdBQUcsR0FBR0MsT0FBTyxDQUFDLElBQUQsQ0FBUCxDQUFjRCxHQUExQjs7QUFDQSxJQUFNRSxXQUFXLEdBQUdELE9BQU8sQ0FBQyxhQUFELENBQTNCOztBQUNBLElBQU1FLFNBQVMsR0FBR0YsT0FBTyxDQUFDLFdBQUQsQ0FBekI7O0FBQ0EsSUFBTUcsVUFBVSxHQUFHSCxPQUFPLENBQUMsWUFBRCxDQUExQjs7QUFDQSxJQUFNSSxNQUFNLEdBQUdKLE9BQU8sQ0FBQyxRQUFE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QkQsSUFBckIsQ0FBaEI7QUFGZ0I7QUFBQTtBQUFBOztBQUFBO0FBR2hCLHdDQUFxQlYsVUFBckIsbUlBQWlDO0FBQUEsd0JBQXhCeUIsUUFBd0I7QUFDL0Isd0JBQUlILEdBQUcsR0FBRzNDLFNBQVMsQ0FBQzZDLFVBQUQsRUFBYUMsUUFBYixDQUFULElBQW1DOUMsU0FBUyxDQUFDeUMsU0FBRCxFQUFZSyxRQUFaLENBQXREOztBQUNBLHdCQUFJSCxHQUFKLEVBQVM7QUFDUCw2QkFBTyxJQUFQO0FBQ0Q7QUFDRjtBQVJlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBU2hCLHVCQUFPLEtBQVA7QUFDRDs7QUF2QkksYUFBUDtBQXlCRCxXQXBDRCxDQW9DRSxPQUFPZixDQUFQLEVBQVU7QUFDVixtQkFBTyxJQUFQO0FBQ0Q7QUFDRixTQXZESSxFQXdESkgsTUF4REksQ0F3REcvQixXQUFXLENBQUNxRCxXQUFaLEVBeERILENBQVA7QUF5REQ7O0FBakVHO0FBTkQsR0FBUDtBQTBFRDs7QUFFRDlCLE1BQU0sQ0FBQytCLE9BQVAsR0FBaUI5QyxVQUFqQiIsInNvdXJjZVJvb3QiOiIuLi8uLi9saWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJ1ZCBmb3IgaW5kZXguanNcbiAqIEBtZW1iZXJvZiBtb2R1bGU6YXBlLXRtcGwvbGliXG4gKiBAZnVuY3Rpb24gaW5kZXhKc0J1ZFxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIEluZGV4IGpzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmRpcm5hbWUgLSBEaXJlY3RvcnkgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29uZmlnLmRlc2NdIC0gTW9kdWxlIGRlc2NyaXB0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb25maWcubW9kdWxlXSAtIE1vZHVsZSBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb25maWcucGFyZW50bW9kdWxlXSAtIE5hbWUgb2YgcGFyZW50IG1vZHVsZS5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtjb25maWcuc3VibW9kdWxlc10gLSBOYW1lIG9mIG1lbWJlcnMgYXMgc3VibW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2NvbmZpZy5zdWJjbGFzc2VzXSAtIE5hbWUgb2YgbWVtYmVycyBhcyBzdWJjbGFzc2VzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIEJ1ZCBmb3IgaW5kZXguanNcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgRU9MID0gcmVxdWlyZSgnb3MnKS5FT0xcbmNvbnN0IGFycmF5ZmlsdGVyID0gcmVxdWlyZSgnYXJyYXlmaWx0ZXInKVxuY29uc3QgYXJyYXlzb3J0ID0gcmVxdWlyZSgnYXJyYXlzb3J0JylcbmNvbnN0IHN0cmluZ2Nhc2UgPSByZXF1aXJlKCdzdHJpbmdjYXNlJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJylcbmNvbnN0IG1pbmltYXRjaCA9IHJlcXVpcmUoJ21pbmltYXRjaCcpXG5jb25zdCBfdG1wbCA9IHJlcXVpcmUoJy4vX3RtcGwnKVxuXG4vKiogQGxlbmRzIGluZGV4SnNCdWQgKi9cbmZ1bmN0aW9uIGluZGV4SnNCdWQgKGNvbmZpZykge1xuICBsZXQgZGlybmFtZSA9IGNvbmZpZy5kaXJuYW1lXG4gIGFzc2VydC5vayghIWRpcm5hbWUsICdjb25maWcuZGlybmFtZSBpcyByZXF1aXJlZC4nKVxuICBjb25zdCB0bXBsID0gY29uZmlnLm1qcyA/IF90bXBsKCdoYnMvaW5kZXgubWpzLmhicycpIDogX3RtcGwoJ2hicy9pbmRleC5qcy5oYnMnKVxuICByZXR1cm4ge1xuICAgIGZvcmNlOiB0cnVlLFxuICAgIG1vZGU6ICc0NDQnLFxuICAgIHBhdGg6IHBhdGgucmVzb2x2ZShkaXJuYW1lLCAnaW5kZXguanMnKSxcbiAgICBta2RpcnA6IGZhbHNlLFxuICAgIHRtcGw6IHRtcGwsXG4gICAgZGF0YToge1xuICAgICAgRU5EX0JSQUNFOiAnfScsXG4gICAgICBkZXNjOiBbXS5jb25jYXQoY29uZmlnLmRlc2MgfHwgW10pLmpvaW4oRU9MICsgJyAqICcpLFxuICAgICAgbW9kdWxlOiBjb25maWcubW9kdWxlLFxuICAgICAgcGFyZW50bW9kdWxlOiBbXS5jb25jYXQoY29uZmlnLnBhcmVudG1vZHVsZSB8fCBbXSksXG4gICAgICBnZXQgbW9kdWxlcyAoKSB7XG4gICAgICAgIGxldCBzdWJtb2R1bGVzID0gW10uY29uY2F0KGNvbmZpZy5zdWJtb2R1bGVzIHx8IFtdKSxcbiAgICAgICAgICBzdWJjbGFzc2VzID0gW10uY29uY2F0KGNvbmZpZy5zdWJjbGFzc2VzIHx8IFtdKVxuICAgICAgICByZXR1cm4gZnMucmVhZGRpclN5bmMoZGlybmFtZSlcbiAgICAgICAgICAuc29ydChhcnJheXNvcnQuc3RyaW5nQ29tcGFyZSgpKVxuICAgICAgICAgIC5maWx0ZXIoYXJyYXlmaWx0ZXIucGF0dGVyblJlamVjdCgvXltcXC5fXS8pKVxuICAgICAgICAgIC5maWx0ZXIoYXJyYXlmaWx0ZXIucGF0dGVyblJlamVjdCgvfiQvKSlcbiAgICAgICAgICAuZmlsdGVyKGFycmF5ZmlsdGVyLnBhdHRlcm5SZWplY3QoLy50bXAkLykpXG4gICAgICAgICAgLmZpbHRlcihhcnJheWZpbHRlci5wYXR0ZXJuUmVqZWN0KC9eaW5kZXhcXC5qcyQvKSlcbiAgICAgICAgICAuZmlsdGVyKGFycmF5ZmlsdGVyLnBhdHRlcm5SZWplY3QoL1xcLmpzeCQvKSlcbiAgICAgICAgICAuZmlsdGVyKChmaWxlbmFtZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmVxdWlyZS5yZXNvbHZlKHBhdGgucmVzb2x2ZShkaXJuYW1lLCBmaWxlbmFtZSkpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgoZmlsZW5hbWUpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4dG5hbWUgPSBwYXRoLmV4dG5hbWUoZmlsZW5hbWUpXG4gICAgICAgICAgICAgIGxldCBuYW1lID0gc3RyaW5nY2FzZS5jYW1lbGNhc2UocGF0aC5iYXNlbmFtZShmaWxlbmFtZSwgZXh0bmFtZSkpXG4gICAgICAgICAgICAgIGlmIChjb25maWcucGFzY2FsY2FzZSkge1xuICAgICAgICAgICAgICAgIG5hbWUgPSBzdHJpbmdjYXNlLnBhc2NhbGNhc2UobmFtZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgcmVxdWlyZU5hbWUgPSBuYW1lLnNwbGl0KC9cXC4vZykubWFwKHN0cmluZ2Nhc2Uuc25ha2VjYXNlKS5qb2luKCcuJylcbiAgICAgICAgICAgICAgY29uc3QgbmVlZHNFeHRUb1JlcXVpcmUgPSBbJy5qc29uJ10uaW5jbHVkZXMoZXh0bmFtZSlcbiAgICAgICAgICAgICAgaWYgKG5lZWRzRXh0VG9SZXF1aXJlKSB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZU5hbWUgKz0gZXh0bmFtZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICByZXF1aXJlTmFtZTogcmVxdWlyZU5hbWUsXG4gICAgICAgICAgICAgICAgZ2V0IGlzU3VibW9kdWxlcyAoKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgY2FtZWxOYW1lID0gc3RyaW5nY2FzZS5jYW1lbGNhc2UobmFtZSlcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN1Ym1vZHVsZSBvZiBzdWJtb2R1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBoaXQgPSBtaW5pbWF0Y2goY2FtZWxOYW1lLCBzdWJtb2R1bGUpXG4gICAgICAgICAgICAgICAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldCBpc1N1YmNsYXNzICgpIHtcbiAgICAgICAgICAgICAgICAgIGxldCBwYXNjYWxOYW1lID0gc3RyaW5nY2FzZS5wYXNjYWxjYXNlKG5hbWUpXG4gICAgICAgICAgICAgICAgICBsZXQgY2FtZWxOYW1lID0gc3RyaW5nY2FzZS5jYW1lbGNhc2UobmFtZSlcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN1YmNsYXNzIG9mIHN1YmNsYXNzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhpdCA9IG1pbmltYXRjaChwYXNjYWxOYW1lLCBzdWJjbGFzcykgfHwgbWluaW1hdGNoKGNhbWVsTmFtZSwgc3ViY2xhc3MpXG4gICAgICAgICAgICAgICAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoYXJyYXlmaWx0ZXIuZW1wdHlSZWplY3QoKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbmRleEpzQnVkXG5cbiJdfQ==