UNPKG

@handfish/hygen

Version:

The scalable code generator that saves you time.

93 lines (72 loc) 3.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.reversePathsToWalk = exports.ConfigResolver = exports.configLookup = void 0; var _path = _interopRequireDefault(require("path")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // inline fp methods due to perf const uniq = arr => arr.filter((elem, pos, a) => a.indexOf(elem) === pos); const reversePathsToWalk = ({ folder, path }) => { const resolved = path.resolve(folder); const parts = resolved.split(path.sep); const results = parts.map((n, idx, arr) => arr.slice(0, idx + 1).join(path.sep)); results[0] = results[0] || '/'; return results.reverse(); }; exports.reversePathsToWalk = reversePathsToWalk; const configLookup = (file, folder, path = _path.default) => uniq(reversePathsToWalk({ folder, path }).map(p => path.join(p, file))); exports.configLookup = configLookup; class ConfigResolver { constructor(configFile, io) { _defineProperty(this, "configFile", void 0); _defineProperty(this, "io", void 0); this.configFile = configFile; this.io = io; } resolve(from) { var _this = this; return _asyncToGenerator(function* () { const configCandidates = configLookup(_this.configFile, from); const _this$io = _this.io, exists = _this$io.exists, load = _this$io.load, none = _this$io.none; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = configCandidates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { const candidate = _step.value; if (yield exists(candidate)) { return yield load(candidate); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return yield none(from); })(); } } exports.ConfigResolver = ConfigResolver;