forked from mattdesl/esmify
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathresolve.js
44 lines (37 loc) · 1.34 KB
/
resolve.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const browserResolve = require('browser-resolve');
const nodeResolve = require('resolve');
module.exports = function (id, opts, cb) {
if (typeof opts === 'function') {
cb = opts;
opts = {};
}
opts = opts || {};
const mainFields = opts.mainFields || [ 'browser', 'module', 'main' ];
const isBrowserResolve = mainFields.includes('browser');
const resolve = isBrowserResolve ? browserResolve : nodeResolve;
const packageFilter = opts.packageFilter;
opts = Object.assign({}, opts, {
extensions: [ '.mjs', '.js' ],
packageFilter: function (info, pkgdir) {
if (packageFilter) info = packageFilter(info, pkgdir);
const key = isBrowserResolve ? 'browser' : 'main';
for (let i = 0; i < mainFields.length; i++) {
const target = mainFields[i];
let replacement = info[target];
// Special case to handle legacy browserify, taken from node-browser-resolve
if (!replacement && target === 'browser' && typeof info.browserify === 'string') {
replacement = info.browserify;
}
// We have a replacement, stop searching and assign it
if (replacement) {
info[key] = replacement;
break;
}
// Otherwise we look for the next field...
}
return info;
}
});
delete opts.mainFields;
return resolve(id, opts, cb);
};