diff --git a/lib/worker.js b/lib/worker.js index 6680c156a06d5f4304b875e6c4f06a5c63dacac5..d36bd18b48d94a238fb2f39a78f7b1b010d54a4e 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 225e196e1b96dd10c6f4e325cbe93d9dca486141..8fe51724e719808cf4050c1f56614fdd38e8066c 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 c64bc51ba1ca4340dfd80b0cc8dd0b6a38ee2bd2..c82f0026e98f7b2edc3459c05b867629b674cb12 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({