From c267e06e7ffcad9f18b72b3dbd6c8d11444ccbfc Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@keylocation.sg>
Date: Sat, 15 Apr 2017 21:58:41 +0200
Subject: [PATCH] Make package pattern explicit (#165)

---
 lib/worker.js                          |  4 +-
 test/__snapshots__/worker.spec.js.snap | 69 +++++++++++++++++++++++++-
 test/worker.spec.js                    | 46 ++++++++++++++++-
 3 files changed, 115 insertions(+), 4 deletions(-)

diff --git a/lib/worker.js b/lib/worker.js
index 6680c156a0..d36bd18b48 100644
--- a/lib/worker.js
+++ b/lib/worker.js
@@ -84,11 +84,13 @@ function assignDepConfigs(inputConfig, deps) {
       // Exit after first match
       returnDep.config.packages.forEach((packageConfig) => {
         if (!packageRuleApplied) {
-          const packageRegex = new RegExp(packageConfig.packageName);
+          const pattern = packageConfig.packagePattern || `^${packageConfig.packageName}$`;
+          const packageRegex = new RegExp(pattern);
           if (dep.depName.match(packageRegex)) {
             packageRuleApplied = true;
             Object.assign(returnDep.config, packageConfig);
             delete returnDep.config.packageName;
+            delete returnDep.config.packagePattern;
           }
         }
       });
diff --git a/test/__snapshots__/worker.spec.js.snap b/test/__snapshots__/worker.spec.js.snap
index 225e196e1b..8fe51724e7 100644
--- a/test/__snapshots__/worker.spec.js.snap
+++ b/test/__snapshots__/worker.spec.js.snap
@@ -42,6 +42,38 @@ Array [
 ]
 `;
 
+exports[`worker assignDepConfigs(inputConfig, deps) handles non-regex package name 1`] = `
+Array [
+  Object {
+    "config": Object {
+      "foo": "bar",
+      "labels": Array [
+        "eslint",
+      ],
+    },
+    "depName": "eslint",
+  },
+  Object {
+    "config": Object {
+      "foo": "bar",
+    },
+    "depName": "eslint-foo",
+  },
+  Object {
+    "config": Object {
+      "foo": "bar",
+    },
+    "depName": "a",
+  },
+  Object {
+    "config": Object {
+      "foo": "bar",
+    },
+    "depName": "also-eslint",
+  },
+]
+`;
+
 exports[`worker assignDepConfigs(inputConfig, deps) handles package config 1`] = `
 Array [
   Object {
@@ -56,7 +88,7 @@ Array [
 ]
 `;
 
-exports[`worker assignDepConfigs(inputConfig, deps) handles regex package config 1`] = `
+exports[`worker assignDepConfigs(inputConfig, deps) handles regex package pattern 1`] = `
 Array [
   Object {
     "config": Object {
@@ -94,6 +126,41 @@ Array [
 ]
 `;
 
+exports[`worker assignDepConfigs(inputConfig, deps) handles regex wildcard package pattern 1`] = `
+Array [
+  Object {
+    "config": Object {
+      "foo": "bar",
+      "labels": Array [
+        "eslint",
+      ],
+    },
+    "depName": "eslint",
+  },
+  Object {
+    "config": Object {
+      "foo": "bar",
+      "labels": Array [
+        "eslint",
+      ],
+    },
+    "depName": "eslint-foo",
+  },
+  Object {
+    "config": Object {
+      "foo": "bar",
+    },
+    "depName": "a",
+  },
+  Object {
+    "config": Object {
+      "foo": "bar",
+    },
+    "depName": "also-eslint",
+  },
+]
+`;
+
 exports[`worker assignDepConfigs(inputConfig, deps) handles string deps 1`] = `
 Array [
   Object {
diff --git a/test/worker.spec.js b/test/worker.spec.js
index c64bc51ba1..c82f0026e9 100644
--- a/test/worker.spec.js
+++ b/test/worker.spec.js
@@ -206,10 +206,52 @@ describe('worker', () => {
       const updatedDeps = worker.assignDepConfigs(config, deps);
       expect(updatedDeps).toMatchSnapshot();
     });
-    it('handles regex package config', () => {
+    it('handles regex package pattern', () => {
       config.foo = 'bar';
       config.packages = [{
-        packageName: 'eslint.*',
+        packagePattern: 'eslint',
+        labels: ['eslint'],
+      }];
+      deps.push({
+        depName: 'eslint',
+      });
+      deps.push({
+        depName: 'eslint-foo',
+      });
+      deps.push({
+        depName: 'a',
+      });
+      deps.push({
+        depName: 'also-eslint',
+      });
+      const updatedDeps = worker.assignDepConfigs(config, deps);
+      expect(updatedDeps).toMatchSnapshot();
+    });
+    it('handles regex wildcard package pattern', () => {
+      config.foo = 'bar';
+      config.packages = [{
+        packagePattern: '^eslint',
+        labels: ['eslint'],
+      }];
+      deps.push({
+        depName: 'eslint',
+      });
+      deps.push({
+        depName: 'eslint-foo',
+      });
+      deps.push({
+        depName: 'a',
+      });
+      deps.push({
+        depName: 'also-eslint',
+      });
+      const updatedDeps = worker.assignDepConfigs(config, deps);
+      expect(updatedDeps).toMatchSnapshot();
+    });
+    it('handles non-regex package name', () => {
+      config.foo = 'bar';
+      config.packages = [{
+        packageName: 'eslint',
         labels: ['eslint'],
       }];
       deps.push({
-- 
GitLab