1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
6 |
|
7 | const fs = require('@parcel/fs');
|
8 |
|
9 | const path = require('path');
|
10 |
|
11 | const clone = require('clone');
|
12 |
|
13 | const PARSERS = {
|
14 | json: require('json5').parse,
|
15 | toml: require('@iarna/toml').parse
|
16 | };
|
17 | const existsCache = new Map();
|
18 |
|
19 | function resolve(_x, _x2) {
|
20 | return _resolve.apply(this, arguments);
|
21 | }
|
22 |
|
23 | function _resolve() {
|
24 | _resolve = (0, _asyncToGenerator2.default)(function* (filepath, filenames, root = path.parse(filepath).root) {
|
25 | filepath = path.dirname(filepath);
|
26 |
|
27 | if (filepath === root || path.basename(filepath) === 'node_modules') {
|
28 | return null;
|
29 | }
|
30 |
|
31 | var _iteratorNormalCompletion = true;
|
32 | var _didIteratorError = false;
|
33 | var _iteratorError = undefined;
|
34 |
|
35 | try {
|
36 | for (var _iterator = filenames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
37 | const filename = _step.value;
|
38 | let file = path.join(filepath, filename);
|
39 | let exists = existsCache.has(file) ? existsCache.get(file) : yield fs.exists(file);
|
40 |
|
41 | if (exists) {
|
42 | existsCache.set(file, true);
|
43 | return file;
|
44 | }
|
45 | }
|
46 | } catch (err) {
|
47 | _didIteratorError = true;
|
48 | _iteratorError = err;
|
49 | } finally {
|
50 | try {
|
51 | if (!_iteratorNormalCompletion && _iterator.return != null) {
|
52 | _iterator.return();
|
53 | }
|
54 | } finally {
|
55 | if (_didIteratorError) {
|
56 | throw _iteratorError;
|
57 | }
|
58 | }
|
59 | }
|
60 |
|
61 | return resolve(filepath, filenames, root);
|
62 | });
|
63 | return _resolve.apply(this, arguments);
|
64 | }
|
65 |
|
66 | function load(_x3, _x4) {
|
67 | return _load.apply(this, arguments);
|
68 | }
|
69 |
|
70 | function _load() {
|
71 | _load = (0, _asyncToGenerator2.default)(function* (filepath, filenames, root = path.parse(filepath).root) {
|
72 | let configFile = yield resolve(filepath, filenames, root);
|
73 |
|
74 | if (configFile) {
|
75 | try {
|
76 | let extname = path.extname(configFile).slice(1);
|
77 |
|
78 | if (extname === 'js') {
|
79 | return clone(require(configFile));
|
80 | }
|
81 |
|
82 | let configContent = (yield fs.readFile(configFile)).toString();
|
83 | let parse = PARSERS[extname] || PARSERS.json;
|
84 | return configContent ? parse(configContent) : null;
|
85 | } catch (err) {
|
86 | if (err.code === 'MODULE_NOT_FOUND' || err.code === 'ENOENT') {
|
87 | existsCache.delete(configFile);
|
88 | return null;
|
89 | }
|
90 |
|
91 | throw err;
|
92 | }
|
93 | }
|
94 |
|
95 | return null;
|
96 | });
|
97 | return _load.apply(this, arguments);
|
98 | }
|
99 |
|
100 | exports.resolve = resolve;
|
101 | exports.load = load; |
\ | No newline at end of file |