diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cfec1a..11ba76b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## v4.1.1 (2020-05-21) + +#### :bug: Bug Fix +* [#210](https://github.com/ember-cli/ember-cli-version-checker/pull/210) [v4] Fix hasSingleImplementation ([@xg-wang](https://github.com/xg-wang)) + +#### Committers: 1 +- Thomas Wang ([@xg-wang](https://github.com/xg-wang)) +- ## v4.1.0 (2020-01-17) #### :rocket: Enhancement diff --git a/package.json b/package.json index 4c95776..aab92aa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ember-cli-version-checker", - "version": "4.1.0", + "version": "4.1.1", "description": "Determine if your addon is being used by a minimum version of Ember CLI.", "homepage": "https://github.com/rwjblue/ember-cli-version-checker", "bugs": { diff --git a/src/dependency-version-checker.js b/src/dependency-version-checker.js index dd74a39..04875de 100644 --- a/src/dependency-version-checker.js +++ b/src/dependency-version-checker.js @@ -1,16 +1,18 @@ 'use strict'; -const fs = require('fs'); const semver = require('semver'); +/* + * Retrieve the version field from the package.json file contents. + * NOTE: the callers have already checked that the filePath is not null/undefined. + */ function getVersionFromJSONFile(filePath) { - if (fs.existsSync(filePath)) { - let content = fs.readFileSync(filePath); - - try { - return JSON.parse(content).version; - } catch (exception) { - return null; - } + try { + // Use the require cache to avoid file I/O after first call on a given path. + let pkg = require(filePath); + return pkg.version; + } catch (err) { + // file doesn't exist or is not a file or is not parseable. + return null; } } diff --git a/src/utils/single-implementation.js b/src/utils/single-implementation.js index 09258d3..8a6909b 100644 --- a/src/utils/single-implementation.js +++ b/src/utils/single-implementation.js @@ -22,7 +22,7 @@ function hasSingleImplementation(targetName, project) { for (let { name, root } of allAddons(project)) { if (targetName === name) { - if (lastRoot !== undefined) { + if (lastRoot !== undefined && lastRoot !== root) { map.set(targetName, false); return false; } else { diff --git a/tests/index-tests.js b/tests/index-tests.js index 42f89b9..72fc524 100644 --- a/tests/index-tests.js +++ b/tests/index-tests.js @@ -556,11 +556,17 @@ describe('ember-cli-version-checker', function() { addons: [ { name: 'foo', - root: 'node_modules/fake-addon/node_modeuls/foo', + root: 'node_modules/fake-addon/node_modules/foo', }, { name: 'bar', root: 'node_modules/fake-addon/node_modules/bar', + addons: [ + { + name: 'foo', + root: 'node_modules/fake-addon/node_modules/foo', + }, + ], }, ], }, @@ -591,7 +597,7 @@ describe('ember-cli-version-checker', function() { }); it('has a working #filterAddonsByName', () => { - assert.equal(checker.filterAddonsByName('foo').length, 1); + assert.equal(checker.filterAddonsByName('foo').length, 2); assert.equal(checker.filterAddonsByName('top').length, 1); assert.equal(checker.filterAddonsByName('bar').length, 2); assert.equal( @@ -612,7 +618,7 @@ describe('ember-cli-version-checker', function() { it('has a functioning allAddons iterator', function() { assert.deepEqual( [...checker.allAddons()].map(x => x.name), - ['top', 'bar', 'fake-addon', 'foo', 'bar'] + ['top', 'bar', 'fake-addon', 'foo', 'bar', 'foo'] ); }); });