From 250c4d8162c3f0e6442cd42ac1867cb3266d2646 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 22 Jul 2018 09:28:50 +0200
Subject: [PATCH] feat(npm): ignore vendorised package.json files

Closes #2291
---
 lib/manager/npm/extract/index.js           |  4 +
 test/_fixtures/package-json/is-object.json | 93 ++++++++++++++++++++++
 test/manager/npm/extract/index.spec.js     |  9 +++
 3 files changed, 106 insertions(+)
 create mode 100644 test/_fixtures/package-json/is-object.json

diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js
index c34bd5c970..eb015be312 100644
--- a/lib/manager/npm/extract/index.js
+++ b/lib/manager/npm/extract/index.js
@@ -23,6 +23,10 @@ async function extractDependencies(content, packageFile, config) {
     logger.info({ packageFile }, 'Invalid JSON');
     return null;
   }
+  if (packageJson._id && packageJson._args && packageJson._from) {
+    logger.info('Ignoring vendorised package.json');
+    return null;
+  }
   if (packageFile !== 'package.json' && packageJson.renovate) {
     const error = new Error('config-validation');
     error.configFile = packageFile;
diff --git a/test/_fixtures/package-json/is-object.json b/test/_fixtures/package-json/is-object.json
new file mode 100644
index 0000000000..5a46e887c0
--- /dev/null
+++ b/test/_fixtures/package-json/is-object.json
@@ -0,0 +1,93 @@
+{
+  "_args": [
+    [
+      "is-object@1.0.1",
+      "/Users/rhys/github/renovateapp"
+    ]
+  ],
+  "_from": "is-object@1.0.1",
+  "_id": "is-object@1.0.1",
+  "_inBundle": false,
+  "_integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
+  "_location": "/is-object",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "is-object@1.0.1",
+    "name": "is-object",
+    "escapedName": "is-object",
+    "rawSpec": "1.0.1",
+    "saveSpec": null,
+    "fetchSpec": "1.0.1"
+  },
+  "_requiredBy": [
+    "/isurl"
+  ],
+  "_resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+  "_spec": "1.0.1",
+  "_where": "/Users/rhys/github/renovateapp",
+  "author": {
+    "name": "Raynos",
+    "email": "raynos2@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/ljharb/is-object/issues",
+    "email": "ljharb@gmail.com"
+  },
+  "contributors": [
+    {
+      "name": "Raynos"
+    },
+    {
+      "name": "Jordan Harband",
+      "url": "https://github.com/ljharb"
+    }
+  ],
+  "dependencies": {},
+  "description": "Checks whether a value is an object",
+  "devDependencies": {
+    "covert": "~1.0.0",
+    "jscs": "~1.6.0",
+    "tape": "~2.14.0"
+  },
+  "homepage": "https://github.com/ljharb/is-object",
+  "keywords": [],
+  "license": "MIT",
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "http://github.com/ljharb/is-object/raw/master/LICENSE"
+    }
+  ],
+  "main": "index",
+  "name": "is-object",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/ljharb/is-object.git"
+  },
+  "scripts": {
+    "coverage": "covert test/index.js",
+    "coverage-quiet": "covert test/index.js --quiet",
+    "lint": "jscs *.js */*.js",
+    "test": "npm run lint && node test/index.js && npm run coverage-quiet"
+  },
+  "testling": {
+    "files": "test/index.js",
+    "browsers": [
+      "ie/6..latest",
+      "firefox/3..6",
+      "firefox/16..latest",
+      "firefox/nightly",
+      "chrome/22..latest",
+      "chrome/canary",
+      "opera/10.0",
+      "opera/11..latest",
+      "opera/next",
+      "safari/4..latest",
+      "ipad/6.0..latest",
+      "iphone/6.0..latest"
+    ]
+  },
+  "version": "1.0.1"
+}
diff --git a/test/manager/npm/extract/index.spec.js b/test/manager/npm/extract/index.spec.js
index 55a58c147e..503896949b 100644
--- a/test/manager/npm/extract/index.spec.js
+++ b/test/manager/npm/extract/index.spec.js
@@ -11,6 +11,7 @@ function readFixture(fixture) {
 
 const input01Content = readFixture('inputs/01.json');
 const workspacesContent = readFixture('inputs/workspaces.json');
+const vendorisedContent = readFixture('is-object.json');
 
 describe('manager/npm/extract', () => {
   describe('.extractDependencies()', () => {
@@ -25,6 +26,14 @@ describe('manager/npm/extract', () => {
       );
       expect(res).toBe(null);
     });
+    it('ignores vendorised package.json', async () => {
+      const res = await npmExtract.extractDependencies(
+        vendorisedContent,
+        'package.json',
+        {}
+      );
+      expect(res).toBe(null);
+    });
     it('throws error if non-root renovate config', async () => {
       let e;
       try {
-- 
GitLab