|
7 | 7 | 'use strict';
|
8 | 8 |
|
9 | 9 | const path = require('path');
|
| 10 | +const semver = require('semver'); |
| 11 | + |
| 12 | +function resolveRelatively(importee, importer) { |
| 13 | + if (semver.gte(process.version, '8.9.0')) { |
| 14 | + return require.resolve(importee, { |
| 15 | + paths: [path.dirname(importer)], |
| 16 | + }); |
| 17 | + } else { |
| 18 | + // `paths` argument is not available in older Node. |
| 19 | + // This works though. |
| 20 | + // https://github.com/nodejs/node/issues/5963 |
| 21 | + const Module = require('module'); |
| 22 | + return Module._findPath(importee, [ |
| 23 | + path.dirname(importer), |
| 24 | + ...module.paths, |
| 25 | + ]); |
| 26 | + } |
| 27 | +} |
10 | 28 |
|
11 | 29 | let resolveCache = new Map();
|
12 | 30 | function useForks(forks) {
|
13 |
| - let resolvedForks = {}; |
| 31 | + let resolvedForks = new Map(); |
14 | 32 | Object.keys(forks).forEach(srcModule => {
|
15 | 33 | const targetModule = forks[srcModule];
|
16 |
| - resolvedForks[require.resolve(srcModule)] = require.resolve(targetModule); |
| 34 | + resolvedForks.set( |
| 35 | + require.resolve(srcModule), |
| 36 | + require.resolve(targetModule) |
| 37 | + ); |
17 | 38 | });
|
18 | 39 | return {
|
19 | 40 | resolveId(importee, importer) {
|
20 | 41 | if (!importer || !importee) {
|
21 | 42 | return null;
|
22 | 43 | }
|
| 44 | + if (importee.startsWith('\u0000')) { |
| 45 | + // Internal Rollup reference, ignore. |
| 46 | + // Passing that to Node file functions can fatal. |
| 47 | + return null; |
| 48 | + } |
23 | 49 | let resolvedImportee = null;
|
24 | 50 | let cacheKey = `${importer}:::${importee}`;
|
25 | 51 | if (resolveCache.has(cacheKey)) {
|
26 | 52 | // Avoid hitting file system if possible.
|
27 | 53 | resolvedImportee = resolveCache.get(cacheKey);
|
28 | 54 | } else {
|
29 | 55 | try {
|
30 |
| - resolvedImportee = require.resolve(importee, { |
31 |
| - paths: [path.dirname(importer)], |
32 |
| - }); |
| 56 | + resolvedImportee = resolveRelatively(importee, importer); |
33 | 57 | } catch (err) {
|
34 | 58 | // Not our fault, let Rollup fail later.
|
35 | 59 | }
|
36 | 60 | if (resolvedImportee) {
|
37 | 61 | resolveCache.set(cacheKey, resolvedImportee);
|
38 | 62 | }
|
39 | 63 | }
|
40 |
| - if (resolvedImportee && resolvedForks.hasOwnProperty(resolvedImportee)) { |
| 64 | + if (resolvedImportee && resolvedForks.has(resolvedImportee)) { |
41 | 65 | // We found a fork!
|
42 |
| - return resolvedForks[resolvedImportee]; |
| 66 | + return resolvedForks.get(resolvedImportee); |
43 | 67 | }
|
44 | 68 | return null;
|
45 | 69 | },
|
|
0 commit comments