Skip to content

Commit 401fb60

Browse files
authored
Resolves an issues with no range rules (#98)
* Resolves an issues with no range rules Fixes #97 * Add missing semicolon
1 parent c8edadc commit 401fb60

12 files changed

+141
-18
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,16 @@ This project adheres to [Semantic Versioning](http://semver.org/).
1111

1212
### Removed
1313

14+
## [3.4.1] - 2018-10-13
15+
### Fixed
16+
- Resolved an issue with the following rules:
17+
* `no-caret-version-dependencies`
18+
* `no-caret-version-devDependencies`
19+
* `no-tilde-version-dependencies`
20+
* `no-tilde-version-devDependencies`
21+
22+
Addresses [#97](https://github.com/tclindner/npm-package-json-lint/issues/97) from @agvctm.
23+
1424
## [3.4.0] - 2018-10-06
1525
### Added
1626
- New rule: [valid-values-name-scope](https://github.com/tclindner/npm-package-json-lint/wiki/valid-values-name-scope).

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "npm-package-json-lint",
3-
"version": "3.4.0",
3+
"version": "3.4.1",
44
"description": "Configurable linter for package.json files.",
55
"keywords": [
66
"lint",
@@ -43,13 +43,13 @@
4343
"log-symbols": "^2.2.0",
4444
"meow": "^5.0.0",
4545
"plur": "^3.0.1",
46-
"semver": "^5.5.1",
46+
"semver": "^5.6.0",
4747
"strip-json-comments": "^2.0.1",
48-
"validator": "^10.5.0"
48+
"validator": "^10.8.0"
4949
},
5050
"devDependencies": {
5151
"chai": "^4.2.0",
52-
"eslint": "^5.6.1",
52+
"eslint": "^5.7.0",
5353
"eslint-config-tc": "^4.2.0",
5454
"eslint-formatter-pretty": "^1.3.0",
5555
"figures": "^2.0.0",

src/rules/no-caret-version-dependencies.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
const areVersRangesValid = require('./../validators/dependency-audit').areVersRangesValid;
3+
const doVersContainInvalidRange = require('./../validators/dependency-audit').doVersContainInvalidRange;
44
const LintIssue = require('./../LintIssue');
55
const lintId = 'no-caret-version-dependencies';
66
const nodeName = 'dependencies';
@@ -10,7 +10,7 @@ const ruleType = 'standard';
1010
const lint = function(packageJsonData, severity) {
1111
const rangeSpecifier = '^';
1212

13-
if (packageJsonData.hasOwnProperty(nodeName) && areVersRangesValid(packageJsonData, nodeName, rangeSpecifier)) {
13+
if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
1414
return new LintIssue(lintId, severity, nodeName, message);
1515
}
1616

src/rules/no-caret-version-devDependencies.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
const areVersRangesValid = require('./../validators/dependency-audit').areVersRangesValid;
3+
const doVersContainInvalidRange = require('./../validators/dependency-audit').doVersContainInvalidRange;
44
const LintIssue = require('./../LintIssue');
55
const lintId = 'no-caret-version-devDependencies';
66
const nodeName = 'devDependencies';
@@ -10,7 +10,7 @@ const ruleType = 'standard';
1010
const lint = function(packageJsonData, severity) {
1111
const rangeSpecifier = '^';
1212

13-
if (packageJsonData.hasOwnProperty(nodeName) && areVersRangesValid(packageJsonData, nodeName, rangeSpecifier)) {
13+
if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
1414
return new LintIssue(lintId, severity, nodeName, message);
1515
}
1616

src/rules/no-tilde-version-dependencies.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
const areVersRangesValid = require('./../validators/dependency-audit').areVersRangesValid;
3+
const doVersContainInvalidRange = require('./../validators/dependency-audit').doVersContainInvalidRange;
44
const LintIssue = require('./../LintIssue');
55
const lintId = 'no-tilde-version-dependencies';
66
const nodeName = 'dependencies';
@@ -10,7 +10,7 @@ const ruleType = 'standard';
1010
const lint = function(packageJsonData, severity) {
1111
const rangeSpecifier = '~';
1212

13-
if (packageJsonData.hasOwnProperty(nodeName) && areVersRangesValid(packageJsonData, nodeName, rangeSpecifier)) {
13+
if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
1414
return new LintIssue(lintId, severity, nodeName, message);
1515
}
1616

src/rules/no-tilde-version-devDependencies.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
const areVersRangesValid = require('./../validators/dependency-audit').areVersRangesValid;
3+
const doVersContainInvalidRange = require('./../validators/dependency-audit').doVersContainInvalidRange;
44
const LintIssue = require('./../LintIssue');
55
const lintId = 'no-tilde-version-devDependencies';
66
const nodeName = 'devDependencies';
@@ -10,7 +10,7 @@ const ruleType = 'standard';
1010
const lint = function(packageJsonData, severity) {
1111
const rangeSpecifier = '~';
1212

13-
if (packageJsonData.hasOwnProperty(nodeName) && areVersRangesValid(packageJsonData, nodeName, rangeSpecifier)) {
13+
if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
1414
return new LintIssue(lintId, severity, nodeName, message);
1515
}
1616

src/validators/dependency-audit.js

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,18 @@ const hasDepVersZero = function(packageJsonData, nodeName) {
7878
return false;
7979
};
8080

81+
/**
82+
* Determines if the dependencies version string starts with the specified range
83+
* @param {String} dependencyVersion Dependency's version range
84+
* @param {String} rangeSpecifier A version range specifier
85+
* @return {Boolean} True if the version starts with the range, false if it doesn't.
86+
*/
87+
const doesVersStartsWithRange = function(dependencyVersion, rangeSpecifier) {
88+
const firstCharOfStr = 0;
89+
90+
return dependencyVersion.startsWith(rangeSpecifier, firstCharOfStr);
91+
};
92+
8193
/**
8294
* Determines whether or not all dependency version ranges match expected range
8395
* @param {object} packageJsonData Valid JSON
@@ -90,20 +102,44 @@ const areVersRangesValid = function(packageJsonData, nodeName, rangeSpecifier) {
90102
return true;
91103
}
92104

93-
const firstCharOfStr = 0;
94105
let rangesValid = true;
95106

96107
for (const dependencyName in packageJsonData[nodeName]) {
97108
const dependencyVersion = packageJsonData[nodeName][dependencyName];
98109

99-
if (!dependencyVersion.startsWith(rangeSpecifier, firstCharOfStr)) {
110+
if (!doesVersStartsWithRange(dependencyVersion, rangeSpecifier)) {
100111
rangesValid = false;
101112
}
102113
}
103114

104115
return rangesValid;
105116
};
106117

118+
/**
119+
* Determines if any dependencies have a version string that starts with the specified invalid range
120+
* @param {object} packageJsonData Valid JSON
121+
* @param {string} nodeName Name of a node in the package.json file
122+
* @param {string} rangeSpecifier A version range specifier
123+
* @return {Boolean} True if any dependencies versions start with the invalid range, false if they don't.
124+
*/
125+
const doVersContainInvalidRange = function(packageJsonData, nodeName, rangeSpecifier) {
126+
if (!packageJsonData.hasOwnProperty(nodeName)) {
127+
return false;
128+
}
129+
130+
let containsInvalidVersion = false;
131+
132+
for (const dependencyName in packageJsonData[nodeName]) {
133+
const dependencyVersion = packageJsonData[nodeName][dependencyName];
134+
135+
if (doesVersStartsWithRange(dependencyVersion, rangeSpecifier)) {
136+
containsInvalidVersion = true;
137+
}
138+
}
139+
140+
return containsInvalidVersion;
141+
};
142+
107143
/**
108144
* Determines whether or not all dependency versions are absolut
109145
* @param {object} packageJsonData Valid JSON
@@ -138,5 +174,7 @@ const isVersionAbsolute = function(packageJsonData, nodeName) {
138174
module.exports.hasDependency = hasDependency;
139175
module.exports.hasDepPrereleaseVers = hasDepPrereleaseVers;
140176
module.exports.hasDepVersZero = hasDepVersZero;
177+
module.exports.doesVersStartsWithRange = doesVersStartsWithRange;
141178
module.exports.areVersRangesValid = areVersRangesValid;
179+
module.exports.doVersContainInvalidRange = doVersContainInvalidRange;
142180
module.exports.isVersionAbsolute = isVersionAbsolute;

tests/unit/rules/no-caret-version-dependencies.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ describe('no-caret-version-dependencies Unit Tests', function() {
1818
it('LintIssue object should be returned', function() {
1919
const packageJsonData = {
2020
dependencies: {
21-
'npm-package-json-lint': '^1.0.0'
21+
'npm-package-json-lint': '^1.0.0',
22+
'gulp-npm-package-json-lint': '~2.0.0'
2223
}
2324
};
2425
const response = lint(packageJsonData, 'error');
@@ -34,6 +35,7 @@ describe('no-caret-version-dependencies Unit Tests', function() {
3435
it('LintIssue object should be returned', function() {
3536
const packageJsonData = {
3637
dependencies: {
38+
'npm-package-json-lint': '~1.0.0',
3739
'gulp-npm-package-json-lint': '~1.0.0'
3840
}
3941
};

tests/unit/rules/no-caret-version-devDependencies.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ describe('no-caret-version-devDependencies Unit Tests', function() {
1818
it('LintIssue object should be returned', function() {
1919
const packageJsonData = {
2020
devDependencies: {
21-
'npm-package-json-lint': '^1.0.0'
21+
'npm-package-json-lint': '^1.0.0',
22+
'gulp-npm-package-json-lint': '~2.0.0'
2223
}
2324
};
2425
const response = lint(packageJsonData, 'error');
@@ -34,6 +35,7 @@ describe('no-caret-version-devDependencies Unit Tests', function() {
3435
it('LintIssue object should be returned', function() {
3536
const packageJsonData = {
3637
devDependencies: {
38+
'npm-package-json-lint': '~1.0.0',
3739
'gulp-npm-package-json-lint': '~1.0.0'
3840
}
3941
};

tests/unit/rules/no-tilde-version-dependencies.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ describe('no-tilde-version-dependencies Unit Tests', function() {
1818
it('LintIssue object should be returned', function() {
1919
const packageJsonData = {
2020
dependencies: {
21-
'npm-package-json-lint': '~1.0.0'
21+
'npm-package-json-lint': '~1.0.0',
22+
'gulp-npm-package-json-lint': '^2.0.0'
2223
}
2324
};
2425
const response = lint(packageJsonData, 'error');
@@ -34,6 +35,7 @@ describe('no-tilde-version-dependencies Unit Tests', function() {
3435
it('LintIssue object should be returned', function() {
3536
const packageJsonData = {
3637
dependencies: {
38+
'npm-package-json-lint': '^1.0.0',
3739
'gulp-npm-package-json-lint': '^1.0.0'
3840
}
3941
};

0 commit comments

Comments
 (0)