Skip to content

Commit 973c603

Browse files
authored
Add exceptions support (#117)
* Remove validator and add ajv-errors * Add new property exist module * Add the ability to add exceptions Closes #93 * Update format.test.js * Update format.js * Update format.js
1 parent f3a7df5 commit 973c603

37 files changed

+1287
-270
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
},
3636
"dependencies": {
3737
"ajv": "^6.10.0",
38+
"ajv-errors": "^1.0.1",
3839
"chalk": "^2.4.2",
3940
"glob": "^7.1.4",
4041
"ignore": "^5.1.2",
@@ -45,8 +46,7 @@
4546
"meow": "^5.0.0",
4647
"plur": "^3.1.1",
4748
"semver": "^6.1.1",
48-
"strip-json-comments": "^3.0.1",
49-
"validator": "^11.0.0"
49+
"strip-json-comments": "^3.0.1"
5050
},
5151
"devDependencies": {
5252
"eslint": "^5.16.0",

src/NpmPackageJsonLint.js

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* eslint class-methods-use-this: 'off', max-statements: 'off', guard-for-in: 'off', no-restricted-syntax: 'off' */
1+
/* eslint class-methods-use-this: 'off', max-statements: 'off', prefer-destructuring: 'off', guard-for-in: 'off', no-restricted-syntax: 'off' */
22

33
const Rules = require('./Rules');
44
const pkg = require('./../package.json');
@@ -25,28 +25,29 @@ class NpmPackageJsonLint {
2525

2626
for (const rule in configObj) {
2727
const ruleModule = this.rules.get(rule);
28+
let severity = 'off';
29+
let ruleConfig = {};
2830

2931
if (ruleModule.ruleType === 'array' || ruleModule.ruleType === 'object') {
30-
const severity =
31-
typeof configObj[rule] === 'string' && configObj[rule] === 'off' ? configObj[rule] : configObj[rule][0];
32-
const ruleConfig = configObj[rule][1];
33-
34-
if (severity !== 'off') {
35-
const lintResult = ruleModule.lint(packageJsonData, severity, ruleConfig);
36-
37-
if (typeof lintResult === 'object') {
38-
lintIssues.push(lintResult);
39-
}
32+
severity = typeof configObj[rule] === 'string' && configObj[rule] === 'off' ? configObj[rule] : configObj[rule][0];
33+
ruleConfig = typeof configObj[rule] === 'string' ? {} : configObj[rule][1];
34+
} else if (ruleModule.ruleType === 'optionalObject') {
35+
if (typeof configObj[rule] === 'string') {
36+
severity = configObj[rule];
37+
ruleConfig = {};
38+
} else {
39+
severity = configObj[rule][0];
40+
ruleConfig = configObj[rule][1];
4041
}
4142
} else {
42-
const severity = configObj[rule];
43+
severity = configObj[rule];
44+
}
4345

44-
if (severity !== 'off') {
45-
const lintResult = ruleModule.lint(packageJsonData, severity);
46+
if (severity !== 'off') {
47+
const lintResult = ruleModule.lint(packageJsonData, severity, ruleConfig);
4648

47-
if (typeof lintResult === 'object') {
48-
lintIssues.push(lintResult);
49-
}
49+
if (typeof lintResult === 'object') {
50+
lintIssues.push(lintResult);
5051
}
5152
}
5253
}
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
1-
const {isVersionAbsolute} = require('./../validators/dependency-audit');
1+
const {areVersionsAbsolute} = require('./../validators/dependency-audit');
22
const LintIssue = require('./../LintIssue');
33

44
const lintId = 'no-absolute-version-dependencies';
55
const nodeName = 'dependencies';
66
const message = 'You are using an invalid version range. Please do not use absolute versions.';
7-
const ruleType = 'standard';
7+
const ruleType = 'optionalObject';
88

9-
const lint = (packageJsonData, severity) => {
10-
if (packageJsonData.hasOwnProperty(nodeName) && isVersionAbsolute(packageJsonData, nodeName)) {
9+
const lint = (packageJsonData, severity, config) => {
10+
if (packageJsonData.hasOwnProperty(nodeName) && areVersionsAbsolute(packageJsonData, nodeName, config)) {
1111
return new LintIssue(lintId, severity, nodeName, message);
1212
}
1313

1414
return true;
1515
};
1616

17-
module.exports.lint = lint;
18-
module.exports.ruleType = ruleType;
17+
module.exports = {
18+
lint,
19+
ruleType
20+
};
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
1-
const {isVersionAbsolute} = require('./../validators/dependency-audit');
1+
const {areVersionsAbsolute} = require('./../validators/dependency-audit');
22
const LintIssue = require('./../LintIssue');
33

44
const lintId = 'no-absolute-version-devDependencies';
55
const nodeName = 'devDependencies';
66
const message = 'You are using an invalid version range. Please do not use absolute versions.';
7-
const ruleType = 'standard';
7+
const ruleType = 'optionalObject';
88

9-
const lint = (packageJsonData, severity) => {
10-
if (packageJsonData.hasOwnProperty(nodeName) && isVersionAbsolute(packageJsonData, nodeName)) {
9+
const lint = (packageJsonData, severity, config) => {
10+
if (packageJsonData.hasOwnProperty(nodeName) && areVersionsAbsolute(packageJsonData, nodeName, config)) {
1111
return new LintIssue(lintId, severity, nodeName, message);
1212
}
1313

1414
return true;
1515
};
1616

17-
module.exports.lint = lint;
18-
module.exports.ruleType = ruleType;
17+
module.exports = {
18+
lint,
19+
ruleType
20+
};

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,22 @@ const LintIssue = require('./../LintIssue');
44
const lintId = 'no-caret-version-dependencies';
55
const nodeName = 'dependencies';
66
const message = 'You are using an invalid version range. Please do not use ^.';
7-
const ruleType = 'standard';
7+
const ruleType = 'optionalObject';
88

9-
const lint = (packageJsonData, severity) => {
9+
const lint = (packageJsonData, severity, config) => {
1010
const rangeSpecifier = '^';
1111

12-
if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
12+
if (
13+
packageJsonData.hasOwnProperty(nodeName) &&
14+
doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier, config)
15+
) {
1316
return new LintIssue(lintId, severity, nodeName, message);
1417
}
1518

1619
return true;
1720
};
1821

19-
module.exports.lint = lint;
20-
module.exports.ruleType = ruleType;
22+
module.exports = {
23+
lint,
24+
ruleType
25+
};

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,22 @@ const LintIssue = require('./../LintIssue');
44
const lintId = 'no-caret-version-devDependencies';
55
const nodeName = 'devDependencies';
66
const message = 'You are using an invalid version range. Please do not use ^.';
7-
const ruleType = 'standard';
7+
const ruleType = 'optionalObject';
88

9-
const lint = (packageJsonData, severity) => {
9+
const lint = (packageJsonData, severity, config) => {
1010
const rangeSpecifier = '^';
1111

12-
if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
12+
if (
13+
packageJsonData.hasOwnProperty(nodeName) &&
14+
doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier, config)
15+
) {
1316
return new LintIssue(lintId, severity, nodeName, message);
1417
}
1518

1619
return true;
1720
};
1821

19-
module.exports.lint = lint;
20-
module.exports.ruleType = ruleType;
22+
module.exports = {
23+
lint,
24+
ruleType
25+
};

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,22 @@ const LintIssue = require('./../LintIssue');
44
const lintId = 'no-tilde-version-dependencies';
55
const nodeName = 'dependencies';
66
const message = 'You are using an invalid version range. Please do not use ~.';
7-
const ruleType = 'standard';
7+
const ruleType = 'optionalObject';
88

9-
const lint = (packageJsonData, severity) => {
9+
const lint = (packageJsonData, severity, config) => {
1010
const rangeSpecifier = '~';
1111

12-
if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
12+
if (
13+
packageJsonData.hasOwnProperty(nodeName) &&
14+
doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier, config)
15+
) {
1316
return new LintIssue(lintId, severity, nodeName, message);
1417
}
1518

1619
return true;
1720
};
1821

19-
module.exports.lint = lint;
20-
module.exports.ruleType = ruleType;
22+
module.exports = {
23+
lint,
24+
ruleType
25+
};

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,22 @@ const LintIssue = require('./../LintIssue');
44
const lintId = 'no-tilde-version-devDependencies';
55
const nodeName = 'devDependencies';
66
const message = 'You are using an invalid version range. Please do not use ~.';
7-
const ruleType = 'standard';
7+
const ruleType = 'optionalObject';
88

9-
const lint = (packageJsonData, severity) => {
9+
const lint = (packageJsonData, severity, config) => {
1010
const rangeSpecifier = '~';
1111

12-
if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
12+
if (
13+
packageJsonData.hasOwnProperty(nodeName) &&
14+
doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier, config)
15+
) {
1316
return new LintIssue(lintId, severity, nodeName, message);
1417
}
1518

1619
return true;
1720
};
1821

19-
module.exports.lint = lint;
20-
module.exports.ruleType = ruleType;
22+
module.exports = {
23+
lint,
24+
ruleType
25+
};
Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
1-
const {isVersionAbsolute} = require('./../validators/dependency-audit');
2-
const LintIssue = require('./../LintIssue');
1+
const {doVersContainNonAbsolute} = require('../validators/dependency-audit');
2+
const {exists} = require('../validators/property');
3+
const LintIssue = require('../LintIssue');
34

45
const lintId = 'prefer-absolute-version-dependencies';
56
const nodeName = 'dependencies';
67
const message = 'You are using an invalid version range. Please use absolute versions.';
7-
const ruleType = 'standard';
8+
const ruleType = 'optionalObject';
89

9-
const lint = (packageJsonData, severity) => {
10-
if (!isVersionAbsolute(packageJsonData, nodeName)) {
10+
const lint = (packageJsonData, severity, config) => {
11+
if (exists(packageJsonData, nodeName) && doVersContainNonAbsolute(packageJsonData, nodeName, config)) {
1112
return new LintIssue(lintId, severity, nodeName, message);
1213
}
1314

1415
return true;
1516
};
1617

17-
module.exports.lint = lint;
18-
module.exports.ruleType = ruleType;
18+
module.exports = {
19+
lint,
20+
ruleType
21+
};
Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
1-
const {isVersionAbsolute} = require('./../validators/dependency-audit');
2-
const LintIssue = require('./../LintIssue');
1+
const {doVersContainNonAbsolute} = require('../validators/dependency-audit');
2+
const {exists} = require('../validators/property');
3+
const LintIssue = require('../LintIssue');
34

45
const lintId = 'prefer-absolute-version-devDependencies';
56
const nodeName = 'devDependencies';
67
const message = 'You are using an invalid version range. Please use absolute versions.';
7-
const ruleType = 'standard';
8+
const ruleType = 'optionalObject';
89

9-
const lint = (packageJsonData, severity) => {
10-
if (!isVersionAbsolute(packageJsonData, nodeName)) {
10+
const lint = (packageJsonData, severity, config) => {
11+
if (exists(packageJsonData, nodeName) && doVersContainNonAbsolute(packageJsonData, nodeName, config)) {
1112
return new LintIssue(lintId, severity, nodeName, message);
1213
}
1314

1415
return true;
1516
};
1617

17-
module.exports.lint = lint;
18-
module.exports.ruleType = ruleType;
18+
module.exports = {
19+
lint,
20+
ruleType
21+
};

0 commit comments

Comments
 (0)