10000 fix(commonjs): validate node-resolve peer version (#1038) · rollup/plugins@0dc11e6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0dc11e6

Browse files
committed
fix(commonjs): validate node-resolve peer version (#1038)
1 parent 0b9a0e8 commit 0dc11e6

File tree

5 files changed

+66
-19
lines changed

5 files changed

+66
-19
lines changed

packages/commonjs/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"ci:test": "pnpm test -- --verbose && pnpm test:ts",
2727
"prebuild": "del-cli dist",
2828
"prepare": "if [ ! -d 'dist' ]; then pnpm build; fi",
29+
"prepublishOnly": "pnpm build",
2930
"prerelease": "pnpm build",
3031
"pretest": "pnpm build",
3132
"release": "pnpm plugin:release --workspace-root -- --pkg $npm_package_name",
@@ -60,7 +61,7 @@
6061
},
6162
"devDependencies": {
6263
"@rollup/plugin-json": "^4.1.0",
63-
"@rollup/plugin-node-resolve": "^13.0.6",
64+
"@rollup/plugin-node-resolve": "^13.1.0",
6465
"locate-character": "^2.0.5",
6566
"require-relative": "^0.8.7",
6667
"rollup": "^2.67.3",

packages/commonjs/src/index.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { hasCjsKeywords } from './parse';
2323
import { getEsImportProxy, getStaticRequireProxy, getUnknownRequireProxy } from './proxies';
2424
import getResolveId from './resolve-id';
2525
import { getResolveRequireSourcesAndGetMeta } from './resolve-require-sources';
26-
import validateRollupVersion from './rollup-version';
26+
import validateVersion from './rollup-version';
2727
import transformCommonjs from './transform-commonjs';
2828
import { getName, getStrictRequiresFilter, normalizePathSlashes } from './utils';
2929

@@ -186,8 +186,12 @@ export default function commonjs(options = {}) {
186186
return { ...rawOptions, plugins };
187187
},
188188

189-
buildStart() {
190-
validateRollupVersion(this.meta.rollupVersion, peerDependencies.rollup);
189+
buildStart({ plugins }) {
190+
validateVersion(this.meta.rollupVersion, peerDependencies.rollup, 'rollup');
191+
const nodeResolve = plugins.find(({ name }) => name === 'node-resolve');
192+
if (nodeResolve) {
193+
validateVersion(nodeResolve.version, '^13.0.6', '@rollup/plugin-node-resolve');
194+
}
191195
if (options.namedExports != null) {
192196
this.warn(
193197
'The namedExports option from "@rollup/plugin-commonjs" is deprecated. Named exports are now handled automatically.'
Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,30 @@
1-
export default function validateRollupVersion(rollupVersion, peerDependencyVersion) {
2-
const [major, minor] = rollupVersion.split('.').map(Number);
3-
const versionRegexp = /\^(\d+\.\d+)\.\d+/g;
1+
export default function validateVersion(actualVersion, peerDependencyVersion, name) {
2+
const versionRegexp = /\^(\d+\.\d+\.\d+)/g;
43
let minMajor = Infinity;
54
let minMinor = Infinity;
5+
let minPatch = Infinity;
66
let foundVersion;
77
// eslint-disable-next-line no-cond-assign
88
while ((foundVersion = versionRegexp.exec(peerDependencyVersion))) {
9-
const [foundMajor, foundMinor] = foundVersion[1].split('.').map(Number);
9+
const [foundMajor, foundMinor, foundPatch] = foundVersion[1].split('.').map(Number);
1010
if (foundMajor < minMajor) {
1111
minMajor = foundMajor;
1212
minMinor = foundMinor;
13+
minPatch = foundPatch;
1314
}
1415
}
15-
if (major < minMajor || (major === minMajor && minor < minMinor)) {
16+
if (!actualVersion) {
1617
throw new Error(
17-
`Insufficient Rollup version: "@rollup/plugin-commonjs" requires at least rollup@${minMajor}.${minMinor} but found rollup@${rollupVersion}.`
18+
`Insufficient ${name} version: "@rollup/plugin-commonjs" requires at least ${name}@${minMajor}.${minMinor}.${minPatch}.`
19+
);
20+
}
21+
const [major, minor, patch] = actualVersion.split('.').map(Number);
22+
if (
23+
major < minMajor ||
24+
(major === minMajor && (minor < minMinor || (minor === minMinor && patch < minPatch)))
25+
) {
26+
throw new Error(
27+
`Insufficient ${name} version: "@rollup/plugin-commonjs" requires at least ${name}@${minMajor}.${minMinor}.${minPatch} but found ${name}@${actualVersion}.`
1828
);
1929
}
2030
}

packages/commonjs/test/test.js

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import * as path from 'path';
33
import os from 'os';
44

5-
import resolve from '@rollup/plugin-node-resolve';
5+
import nodeResolve from '@rollup/plugin-node-resolve';
66

77
import test from 'ava';
88
import { getLocator } from 'locate-character';
@@ -91,7 +91,7 @@ test('supports an object of multiple entry points', async (t) => {
9191
b: require.resolve('./fixtures/samples/multiple-entry-points/b.js'),
9292
c: require.resolve('./fixtures/samples/multiple-entry-points/c.js')
9393
},
94-
plugins: [resolve(), commonjs()]
94+
plugins: [nodeResolve(), commonjs()]
9595
});
9696

9797
const { output } = await bundle.generate({
@@ -212,7 +212,7 @@ test.serial('handles symlinked node_modules with preserveSymlinks: false', (t) =
212212
throw new Error(`Unexpected warning: ${warning.message}`);
213213
},
214214
plugins: [
215-
resolve({
215+
nodeResolve({
216216
preserveSymlinks: false,
217217
preferBuiltins: false
218218
}),
@@ -400,7 +400,7 @@ test('rewrites top-level defines', async (t) => {
400400
test('respects options.external', async (t) => {
401401
const bundle = await rollup({
402402
input: 'fixtures/samples/external/main.js',
403-
plugins: [resolve(), commonjs()],
403+
plugins: [nodeResolve(), commonjs()],
404404
external: ['baz']
405405
});
406406

@@ -731,3 +731,35 @@ test('does not transform typeof exports for mixed modules', async (t) => {
731731
t.is(code.includes('typeof exports'), true, '"typeof exports" not found in the code');
732732
t.snapshot(code);
733733
});
734+
735+
test('throws when using an old node_resolve version', async (t) => {
736+
let error = null;
737+
try {
738+
await rollup({
739+
input: 'ignored',
740+
plugins: [commonjs(), { name: nodeResolve().name }]
741+
});
742+
} catch (err) {
743+
error = err;
744+
}
745+
t.like(error, {
746+
message:
747+
'Insufficient @rollup/plugin-node-resolve version: "@rollup/plugin-commonjs" requires at least @rollup/plugin-node-resolve@13.0.6.'
748+
});
749+
});
750+
751+
test('throws when using an inadequate node_resolve version', async (t) => {
752+
let error = null;
753+
try {
754+
await rollup({
755+
input: 'ignored',
756+
plugins: [commonjs(), { name: nodeResolve().name, version: '13.0.5' }]
757+
});
758+
} catch (err) {
759+
error = err;
760+
}
761+
t.like(error, {
762+
message:
763+
'Insufficient @rollup/plugin-node-resolve version: "@rollup/plugin-commonjs" requires at least @rollup/plugin-node-resolve@13.0.6 but found @rollup/plugin-node-resolve@13.0.5.'
764+
});
765+
});

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
0