UNPKG

ape-tmpl

Version:
162 lines (134 loc) 16.2 kB
/** * 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 */ 'use strict'; 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==