From fc48fac138ed56b56fc0f9162913c035bb19409d Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Fri, 1 Jun 2018 18:11:39 +0200
Subject: [PATCH] fix: ignore unknown engines fields
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Ignores any engines fields in package.json that aren’t node, npm or yarn.

Closes #2059
---
 lib/manager/npm/extract/index.js              | 22 ++++++++++++++-----
 .../extract/__snapshots__/index.spec.js.snap  | 16 +++++++++++++-
 test/manager/npm/extract/index.spec.js        |  4 +++-
 3 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js
index d11118345f..1f6f5f5674 100644
--- a/lib/manager/npm/extract/index.js
+++ b/lib/manager/npm/extract/index.js
@@ -110,13 +110,23 @@ async function extractDependencies(content, packageFile, config) {
           };
           // TODO: do we need to remove the equals?
           dep.currentVersion = version.trim().replace(/^=/, '');
-          if (dep.currentVersion.startsWith('file:')) {
+          if (depType === 'engines') {
+            if (depName === 'node') {
+              dep.purl = 'pkg:github/nodejs/node?clean=true';
+            } else if (depName === 'yarn') {
+              dep.purl = 'pkg:github/yarnpkg/yarn?clean=true';
+              dep.commitMessageTopic = 'Yarn';
+            } else if (depName === 'npm') {
+              dep.purl = 'pkg:github/npm/npm?clean=true';
+              dep.commitMessageTopic = 'npm';
+            } else {
+              dep.skipReason = 'unknown-engines';
+            }
+            if (!semver.isValid(dep.currentVersion)) {
+              dep.skipReason = 'unknown-version';
+            }
+          } else if (dep.currentVersion.startsWith('file:')) {
             dep.skipReason = 'file';
-          } else if (depType === 'engines' && depName === 'node') {
-            dep.purl = 'pkg:github/nodejs/node?clean=true';
-          } else if (depType === 'engines' && depName === 'yarn') {
-            dep.purl = 'pkg:github/yarnpkg/yarn?clean=true';
-            dep.commitMessageTopic = 'Yarn';
           } else if (semver.isValid(dep.currentVersion)) {
             dep.purl = `pkg:npm/${depName.replace('@', '%40')}`;
             if (dep.currentVersion === '*') {
diff --git a/test/manager/npm/extract/__snapshots__/index.spec.js.snap b/test/manager/npm/extract/__snapshots__/index.spec.js.snap
index 4e090bbc9e..70f912d939 100644
--- a/test/manager/npm/extract/__snapshots__/index.spec.js.snap
+++ b/test/manager/npm/extract/__snapshots__/index.spec.js.snap
@@ -34,6 +34,12 @@ Object {
       "depType": "devDependencies",
       "skipReason": "unknown-version",
     },
+    Object {
+      "currentVersion": ">=1.7.0 <2.0.0",
+      "depName": "atom",
+      "depType": "engines",
+      "skipReason": "unknown-engines",
+    },
     Object {
       "commitMessageTopic": "Node.js",
       "currentVersion": ">= 8.9.2",
@@ -44,12 +50,20 @@ Object {
       },
       "purl": "pkg:github/nodejs/node?clean=true",
     },
+    Object {
+      "commitMessageTopic": "npm",
+      "currentVersion": "^8.0.0",
+      "depName": "npm",
+      "depType": "engines",
+      "purl": "pkg:github/npm/npm?clean=true",
+    },
     Object {
       "commitMessageTopic": "Yarn",
-      "currentVersion": "1.7.0",
+      "currentVersion": "disabled",
       "depName": "yarn",
       "depType": "engines",
       "purl": "pkg:github/yarnpkg/yarn?clean=true",
+      "skipReason": "unknown-version",
     },
   ],
   "lernaClient": undefined,
diff --git a/test/manager/npm/extract/index.spec.js b/test/manager/npm/extract/index.spec.js
index f86f496b24..7ecd8b0296 100644
--- a/test/manager/npm/extract/index.spec.js
+++ b/test/manager/npm/extract/index.spec.js
@@ -131,8 +131,10 @@ describe('manager/npm/extract', () => {
           other: 'latest',
         },
         engines: {
+          atom: '>=1.7.0 <2.0.0',
           node: '>= 8.9.2',
-          yarn: '1.7.0',
+          npm: '^8.0.0',
+          yarn: 'disabled',
         },
       };
       const pJsonStr = JSON.stringify(pJson);
-- 
GitLab