Skip to content

Commit 206afaa

Browse files
author
Ian Kerins
committed
fix(node-resolve): support node: protocol
Imports with the [`node:` protocol](https://nodejs.org/api/esm.html#node-imports) are currently undetected by this plugin. Switch to using [is-builtin-module](https://github.com/sindresorhus/is-builtin-module), which handles this protocol and also submodule imports like `fs/promises`. Functionality is otherwise identical. Resolves #1120.
1 parent 4c5e8fd commit 206afaa

File tree

5 files changed

+27
-18
lines changed

5 files changed

+27
-18
lines changed

Diff for: packages/node-resolve/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@
5757
"dependencies": {
5858
"@rollup/pluginutils": "^3.1.0",
5959
"@types/resolve": "1.17.1",
60-
"builtin-modules": "^3.1.0",
6160
"deepmerge": "^4.2.2",
61+
"is-builtin-module": "^3.1.0",
6262
"is-module": "^1.0.0",
6363
"resolve": "^1.19.0"
6464
},

Diff for: packages/node-resolve/src/index.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable no-param-reassign, no-shadow, no-undefined */
22
import { dirname, normalize, resolve, sep } from 'path';
33

4-
import builtinList from 'builtin-modules';
4+
import isBuiltinModule from 'is-builtin-module';
55
import deepMerge from 'deepmerge';
66
import isModule from 'is-module';
77

@@ -13,7 +13,6 @@ import { fileExists, readFile, realpath } from './fs';
1313
import resolveImportSpecifiers from './resolveImportSpecifiers';
1414
import { getMainFields, getPackageName, normalizeInput } from './util';
1515

16-
const builtins = new Set(builtinList);
1716
const ES6_BROWSER_EMPTY = '\0node-resolve:empty.js';
1817
const deepFreeze = (object) => {
1918
Object.freeze(object);
@@ -166,7 +165,7 @@ export function nodeResolve(opts = {}) {
166165
ignoreSideEffectsForRoot
167166
});
168167

169-
const importeeIsBuiltin = builtins.has(importee);
168+
const importeeIsBuiltin = isBuiltinModule(importee);
170169
const resolved =
171170
importeeIsBuiltin && preferBuiltins
172171
? {

Diff for: packages/node-resolve/test/fixtures/node-protocol.js

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import 'node:fs';

Diff for: packages/node-resolve/test/prefer-builtins.js

+13
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,16 @@ test('does not warn when using a builtin module when there is no local version,
103103

104104
t.is(warning, null);
105105
});
106+
107+
test('detects builtins imported with node: protocol', async (t) => {
108+
const warnings = [];
109+
await rollup({
110+
input: 'node-protocol.js',
111+
onwarn({ message }) {
112+
warnings.push(message);
113+
},
114+
plugins: [nodeResolve()]
115+
});
116+
117+
t.is(warnings.length, 0);
118+
});

Diff for: pnpm-lock.yaml

+10-14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)