UNPKG

3.2 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.reversePathsToWalk = exports.ConfigResolver = exports.configLookup = void 0;
7
8var _path = _interopRequireDefault(require("path"));
9
10function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
12function 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); } }
13
14function _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); }); }; }
15
16function _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; }
17
18// inline fp methods due to perf
19const uniq = arr => arr.filter((elem, pos, a) => a.indexOf(elem) === pos);
20
21const reversePathsToWalk = ({
22 folder,
23 path
24}) => {
25 const resolved = path.resolve(folder);
26 const parts = resolved.split(path.sep);
27 const results = parts.map((n, idx, arr) => arr.slice(0, idx + 1).join(path.sep));
28 results[0] = results[0] || '/';
29 return results.reverse();
30};
31
32exports.reversePathsToWalk = reversePathsToWalk;
33
34const configLookup = (file, folder, path = _path.default) => uniq(reversePathsToWalk({
35 folder,
36 path
37}).map(p => path.join(p, file)));
38
39exports.configLookup = configLookup;
40
41class ConfigResolver {
42 constructor(configFile, io) {
43 _defineProperty(this, "configFile", void 0);
44
45 _defineProperty(this, "io", void 0);
46
47 this.configFile = configFile;
48 this.io = io;
49 }
50
51 resolve(from) {
52 var _this = this;
53
54 return _asyncToGenerator(function* () {
55 const configCandidates = configLookup(_this.configFile, from);
56 const _this$io = _this.io,
57 exists = _this$io.exists,
58 load = _this$io.load,
59 none = _this$io.none;
60 var _iteratorNormalCompletion = true;
61 var _didIteratorError = false;
62 var _iteratorError = undefined;
63
64 try {
65 for (var _iterator = configCandidates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
66 const candidate = _step.value;
67
68 if (yield exists(candidate)) {
69 return yield load(candidate);
70 }
71 }
72 } catch (err) {
73 _didIteratorError = true;
74 _iteratorError = err;
75 } finally {
76 try {
77 if (!_iteratorNormalCompletion && _iterator.return != null) {
78 _iterator.return();
79 }
80 } finally {
81 if (_didIteratorError) {
82 throw _iteratorError;
83 }
84 }
85 }
86
87 return yield none(from);
88 })();
89 }
90
91}
92
93exports.ConfigResolver = ConfigResolver;
\No newline at end of file