UNPKG

1.26 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = localRequire;
7exports.localResolve = localResolve;
8
9var _installPackage = _interopRequireDefault(require("./installPackage"));
10
11var _path = require("path");
12
13var _resolve = _interopRequireDefault(require("./resolve"));
14
15function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
17const cache = new Map();
18
19async function localRequire(name, path, triedInstall = false // $FlowFixMe this must be dynamic
20) {
21 let [resolved] = await localResolve(name, path, triedInstall); // $FlowFixMe this must be dynamic
22
23 return require(resolved);
24}
25
26async function localResolve(name, path, triedInstall = false) {
27 let basedir = (0, _path.dirname)(path);
28 let key = basedir + ':' + name;
29 let resolved = cache.get(key);
30
31 if (!resolved) {
32 try {
33 resolved = await (0, _resolve.default)(name, {
34 basedir,
35 extensions: ['.js', '.json']
36 });
37 } catch (e) {
38 if (e.code === 'MODULE_NOT_FOUND' && !triedInstall) {
39 await (0, _installPackage.default)([name], path);
40 return localResolve(name, path, true);
41 }
42
43 throw e;
44 }
45
46 cache.set(key, resolved);
47 }
48
49 return resolved;
50}
\No newline at end of file