From 09ad6248fa7103ae600bc36246dc84847d7a3c2e Mon Sep 17 00:00:00 2001 From: William Brockhus Date: Tue, 20 May 2025 21:01:31 +1000 Subject: [PATCH 1/2] fix(arborist): don't checkEngine/checkPlatform for extraneous deps Fixes #7622 --- workspaces/arborist/lib/arborist/build-ideal-tree.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workspaces/arborist/lib/arborist/build-ideal-tree.js b/workspaces/arborist/lib/arborist/build-ideal-tree.js index a7e01fcf14801..971ac47a2f918 100644 --- a/workspaces/arborist/lib/arborist/build-ideal-tree.js +++ b/workspaces/arborist/lib/arborist/build-ideal-tree.js @@ -194,7 +194,7 @@ module.exports = cls => class IdealTreeBuilder extends cls { async #checkEngineAndPlatform () { const { engineStrict, npmVersion, nodeVersion } = this.options for (const node of this.idealTree.inventory.values()) { - if (!node.optional) { + if (!node.optional && !node.extraneous) { try { // if devEngines is present in the root node we ignore the engines check if (!(node.isRoot && node.package.devEngines)) { From a02723002ec2280eba850365a02f761c63978237 Mon Sep 17 00:00:00 2001 From: William Brockhus Date: Wed, 21 May 2025 14:07:01 +1000 Subject: [PATCH 2/2] chore: attempt at test for extraneous dependancies --- .../test/arborist/build-ideal-tree.js | 12 +++++++ .../extraneous-platform/package-lock.json | 35 +++++++++++++++++++ .../fixtures/extraneous-platform/package.json | 14 ++++++++ ...y-with-optional-platform-dependancies.json | 20 +++++++++++ ...e-with-optional-platform-dependancies.json | 16 +++++++++ 5 files changed, 97 insertions(+) create mode 100644 workspaces/arborist/test/fixtures/extraneous-platform/package-lock.json create mode 100644 workspaces/arborist/test/fixtures/extraneous-platform/package.json create mode 100644 workspaces/arborist/test/fixtures/registry-mocks/content/dependency-with-optional-platform-dependancies.json create mode 100644 workspaces/arborist/test/fixtures/registry-mocks/content/shrinkwrapped-package-with-optional-platform-dependancies.json diff --git a/workspaces/arborist/test/arborist/build-ideal-tree.js b/workspaces/arborist/test/arborist/build-ideal-tree.js index 0bd1fbfafc1ee..ce409f657f261 100644 --- a/workspaces/arborist/test/arborist/build-ideal-tree.js +++ b/workspaces/arborist/test/arborist/build-ideal-tree.js @@ -4091,3 +4091,15 @@ t.test('should take devEngines in account', async t => { const tree = await buildIdeal(path) t.matchSnapshot(String(tree.meta)) }) + +t.test( + 'extraneous dependency not buildable on current platform does not throw', + async (t) => { + const path = resolve(fixtures, 'extraneous-platform') + createRegistry(t, true) + const tree = await buildIdeal(path, { prune: false }) + console.log(tree) + + // t.equal(tree.children.get('platform-specifying-test-package').package.version, '1.0.0', 'added the optional dep to the ideal tree') + } +) diff --git a/workspaces/arborist/test/fixtures/extraneous-platform/package-lock.json b/workspaces/arborist/test/fixtures/extraneous-platform/package-lock.json new file mode 100644 index 0000000000000..6cba7493a8839 --- /dev/null +++ b/workspaces/arborist/test/fixtures/extraneous-platform/package-lock.json @@ -0,0 +1,35 @@ +{ + "name": "extraneous-platform-test", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "shrinkwrapped-package-with-optional-platform-dependancies": "^1.0.0" + } + }, + "shrinkwrapped-package-with-optional-platform-dependancies": { + "version": "1.0.0", + "hasShrinkwrap": true, + "devDependencies": { + "dependency-with-optional-platform-dependancies": "^1.0.0" + } + }, + "node_modules/shrinkwrapped-package-with-optional-platform-dependancies/node_modules/dependency-with-optional-platform-dependancies": { + "version": "1.0.0", + "extraneous": true, + "optionalDependencies": { + "platform-specifying-test-package": "1.0.0" + } + }, + "node_modules/shrinkwrapped-package-with-optional-platform-dependancies/node_modules/platform-specifying-test-package": { + "version": "1.0.0", + "cpu": ["x64"], + "extraneous": true, + "os": ["not-your-os"] + } + } +} diff --git a/workspaces/arborist/test/fixtures/extraneous-platform/package.json b/workspaces/arborist/test/fixtures/extraneous-platform/package.json new file mode 100644 index 0000000000000..2b2144709ffe2 --- /dev/null +++ b/workspaces/arborist/test/fixtures/extraneous-platform/package.json @@ -0,0 +1,14 @@ +{ + "name": "extraneous-platform-test", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "shrinkwrapped-package-with-optional-platform-dependancies": "^1.0.0" + } +} diff --git a/workspaces/arborist/test/fixtures/registry-mocks/content/dependency-with-optional-platform-dependancies.json b/workspaces/arborist/test/fixtures/registry-mocks/content/dependency-with-optional-platform-dependancies.json new file mode 100644 index 0000000000000..eb3b913b2e4d4 --- /dev/null +++ b/workspaces/arborist/test/fixtures/registry-mocks/content/dependency-with-optional-platform-dependancies.json @@ -0,0 +1,20 @@ +{ + "name": "dependency-with-optional-platform-dependancies", + "dist-tags": { + "latest": "1.0.0" + }, + "versions": { + "1.0.0": { + "name": "dependency-with-optional-platform-dependancies", + "version": "0.1.0", + "optionalDependencies": { + "platform-specifying-test-package": "^1.0.0" + }, + "dist": { + "shasum": "977166c896cbeaa1b56e593096244ff184adafb0", + "tarball": "https://registry.npmjs.org/shrinkwrapped-package-with-optional-platform-dependancies/-/shrinkwrapped-package-with-optional-platform-dependancies-0.1.0.tgz" + } + } + }, + "modified": "2025-05-22T00:25:09.206Z" +} diff --git a/workspaces/arborist/test/fixtures/registry-mocks/content/shrinkwrapped-package-with-optional-platform-dependancies.json b/workspaces/arborist/test/fixtures/registry-mocks/content/shrinkwrapped-package-with-optional-platform-dependancies.json new file mode 100644 index 0000000000000..455d13110385a --- /dev/null +++ b/workspaces/arborist/test/fixtures/registry-mocks/content/shrinkwrapped-package-with-optional-platform-dependancies.json @@ -0,0 +1,16 @@ +{ + "name": "shrinkwrapped-package-with-optional-platform-dependancies", + "dist-tags": { + "latest": "1.0.0" + }, + "versions": { + "1.0.0": { + "name": "shrinkwrapped-package-with-optional-platform-dependancies", + "version": "0.1.0", + "devDependencies": { + "dependency-with-optional-platform-dependancies": "^1.0.0" + } + } + }, + "modified": "2025-05-22T00:25:09.206Z" +}