Skip to content

Commit

Permalink
Add the ability to add exceptions
Browse files Browse the repository at this point in the history
Closes #93
  • Loading branch information
tclindner committed Jun 29, 2019
1 parent f084ad8 commit ffd1998
Show file tree
Hide file tree
Showing 33 changed files with 1,238 additions and 250 deletions.
35 changes: 18 additions & 17 deletions src/NpmPackageJsonLint.js
@@ -1,4 +1,4 @@
/* eslint class-methods-use-this: 'off', max-statements: 'off', guard-for-in: 'off', no-restricted-syntax: 'off' */
/* eslint class-methods-use-this: 'off', max-statements: 'off', prefer-destructuring: 'off', guard-for-in: 'off', no-restricted-syntax: 'off' */

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

for (const rule in configObj) {
const ruleModule = this.rules.get(rule);
let severity = 'off';
let ruleConfig = {};

if (ruleModule.ruleType === 'array' || ruleModule.ruleType === 'object') {
const severity =
typeof configObj[rule] === 'string' && configObj[rule] === 'off' ? configObj[rule] : configObj[rule][0];
const ruleConfig = configObj[rule][1];

if (severity !== 'off') {
const lintResult = ruleModule.lint(packageJsonData, severity, ruleConfig);

if (typeof lintResult === 'object') {
lintIssues.push(lintResult);
}
severity = typeof configObj[rule] === 'string' && configObj[rule] === 'off' ? configObj[rule] : configObj[rule][0];
ruleConfig = typeof configObj[rule] === 'string' ? {} : configObj[rule][1];
} else if (ruleModule.ruleType === 'optionalObject') {
if (typeof configObj[rule] === 'string') {
severity = configObj[rule];
ruleConfig = {};
} else {
severity = configObj[rule][0];
ruleConfig = configObj[rule][1];
}
} else {
const severity = configObj[rule];
severity = configObj[rule];
}

if (severity !== 'off') {
const lintResult = ruleModule.lint(packageJsonData, severity);
if (severity !== 'off') {
const lintResult = ruleModule.lint(packageJsonData, severity, ruleConfig);

if (typeof lintResult === 'object') {
lintIssues.push(lintResult);
}
if (typeof lintResult === 'object') {
lintIssues.push(lintResult);
}
}
}
Expand Down
14 changes: 8 additions & 6 deletions src/rules/no-absolute-version-dependencies.js
@@ -1,18 +1,20 @@
const {isVersionAbsolute} = require('./../validators/dependency-audit');
const {areVersionsAbsolute} = require('./../validators/dependency-audit');
const LintIssue = require('./../LintIssue');

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

const lint = (packageJsonData, severity) => {
if (packageJsonData.hasOwnProperty(nodeName) && isVersionAbsolute(packageJsonData, nodeName)) {
const lint = (packageJsonData, severity, config) => {
if (packageJsonData.hasOwnProperty(nodeName) && areVersionsAbsolute(packageJsonData, nodeName, config)) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};
14 changes: 8 additions & 6 deletions src/rules/no-absolute-version-devDependencies.js
@@ -1,18 +1,20 @@
const {isVersionAbsolute} = require('./../validators/dependency-audit');
const {areVersionsAbsolute} = require('./../validators/dependency-audit');
const LintIssue = require('./../LintIssue');

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

const lint = (packageJsonData, severity) => {
if (packageJsonData.hasOwnProperty(nodeName) && isVersionAbsolute(packageJsonData, nodeName)) {
const lint = (packageJsonData, severity, config) => {
if (packageJsonData.hasOwnProperty(nodeName) && areVersionsAbsolute(packageJsonData, nodeName, config)) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};
15 changes: 10 additions & 5 deletions src/rules/no-caret-version-dependencies.js
Expand Up @@ -4,17 +4,22 @@ const LintIssue = require('./../LintIssue');
const lintId = 'no-caret-version-dependencies';
const nodeName = 'dependencies';
const message = 'You are using an invalid version range. Please do not use ^.';
const ruleType = 'standard';
const ruleType = 'optionalObject';

const lint = (packageJsonData, severity) => {
const lint = (packageJsonData, severity, config) => {
const rangeSpecifier = '^';

if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
if (
packageJsonData.hasOwnProperty(nodeName) &&
doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier, config)
) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};
15 changes: 10 additions & 5 deletions src/rules/no-caret-version-devDependencies.js
Expand Up @@ -4,17 +4,22 @@ const LintIssue = require('./../LintIssue');
const lintId = 'no-caret-version-devDependencies';
const nodeName = 'devDependencies';
const message = 'You are using an invalid version range. Please do not use ^.';
const ruleType = 'standard';
const ruleType = 'optionalObject';

const lint = (packageJsonData, severity) => {
const lint = (packageJsonData, severity, config) => {
const rangeSpecifier = '^';

if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
if (
packageJsonData.hasOwnProperty(nodeName) &&
doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier, config)
) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};
15 changes: 10 additions & 5 deletions src/rules/no-tilde-version-dependencies.js
Expand Up @@ -4,17 +4,22 @@ const LintIssue = require('./../LintIssue');
const lintId = 'no-tilde-version-dependencies';
const nodeName = 'dependencies';
const message = 'You are using an invalid version range. Please do not use ~.';
const ruleType = 'standard';
const ruleType = 'optionalObject';

const lint = (packageJsonData, severity) => {
const lint = (packageJsonData, severity, config) => {
const rangeSpecifier = '~';

if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
if (
packageJsonData.hasOwnProperty(nodeName) &&
doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier, config)
) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};
15 changes: 10 additions & 5 deletions src/rules/no-tilde-version-devDependencies.js
Expand Up @@ -4,17 +4,22 @@ const LintIssue = require('./../LintIssue');
const lintId = 'no-tilde-version-devDependencies';
const nodeName = 'devDependencies';
const message = 'You are using an invalid version range. Please do not use ~.';
const ruleType = 'standard';
const ruleType = 'optionalObject';

const lint = (packageJsonData, severity) => {
const lint = (packageJsonData, severity, config) => {
const rangeSpecifier = '~';

if (packageJsonData.hasOwnProperty(nodeName) && doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier)) {
if (
packageJsonData.hasOwnProperty(nodeName) &&
doVersContainInvalidRange(packageJsonData, nodeName, rangeSpecifier, config)
) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};
17 changes: 10 additions & 7 deletions src/rules/prefer-absolute-version-dependencies.js
@@ -1,18 +1,21 @@
const {isVersionAbsolute} = require('./../validators/dependency-audit');
const LintIssue = require('./../LintIssue');
const {doVersContainNonAbsolute} = require('../validators/dependency-audit');
const {exists} = require('../validators/property');
const LintIssue = require('../LintIssue');

const lintId = 'prefer-absolute-version-dependencies';
const nodeName = 'dependencies';
const message = 'You are using an invalid version range. Please use absolute versions.';
const ruleType = 'standard';
const ruleType = 'optionalObject';

const lint = (packageJsonData, severity) => {
if (!isVersionAbsolute(packageJsonData, nodeName)) {
const lint = (packageJsonData, severity, config) => {
if (exists(packageJsonData, nodeName) && doVersContainNonAbsolute(packageJsonData, nodeName, config)) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};
17 changes: 10 additions & 7 deletions src/rules/prefer-absolute-version-devDependencies.js
@@ -1,18 +1,21 @@
const {isVersionAbsolute} = require('./../validators/dependency-audit');
const LintIssue = require('./../LintIssue');
const {doVersContainNonAbsolute} = require('../validators/dependency-audit');
const {exists} = require('../validators/property');
const LintIssue = require('../LintIssue');

const lintId = 'prefer-absolute-version-devDependencies';
const nodeName = 'devDependencies';
const message = 'You are using an invalid version range. Please use absolute versions.';
const ruleType = 'standard';
const ruleType = 'optionalObject';

const lint = (packageJsonData, severity) => {
if (!isVersionAbsolute(packageJsonData, nodeName)) {
const lint = (packageJsonData, severity, config) => {
if (exists(packageJsonData, nodeName) && doVersContainNonAbsolute(packageJsonData, nodeName, config)) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};
13 changes: 8 additions & 5 deletions src/rules/prefer-caret-version-dependencies.js
@@ -1,20 +1,23 @@
const {areVersRangesValid} = require('./../validators/dependency-audit');
const {exists} = require('../validators/property');
const LintIssue = require('./../LintIssue');

const lintId = 'prefer-caret-version-dependencies';
const nodeName = 'dependencies';
const message = 'You are using an invalid version range. Please use ^.';
const ruleType = 'standard';
const ruleType = 'optionalObject';

const lint = (packageJsonData, severity) => {
const lint = (packageJsonData, severity, config) => {
const rangeSpecifier = '^';

if (!areVersRangesValid(packageJsonData, nodeName, rangeSpecifier)) {
if (exists(packageJsonData, nodeName) && !areVersRangesValid(packageJsonData, nodeName, rangeSpecifier, config)) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};
13 changes: 8 additions & 5 deletions src/rules/prefer-caret-version-devDependencies.js
@@ -1,20 +1,23 @@
const {areVersRangesValid} = require('./../validators/dependency-audit');
const {exists} = require('../validators/property');
const LintIssue = require('./../LintIssue');

const lintId = 'prefer-caret-version-devDependencies';
const nodeName = 'devDependencies';
const message = 'You are using an invalid version range. Please use ^.';
const ruleType = 'standard';
const ruleType = 'optionalObject';

const lint = (packageJsonData, severity) => {
const lint = (packageJsonData, severity, config) => {
const rangeSpecifier = '^';

if (!areVersRangesValid(packageJsonData, nodeName, rangeSpecifier)) {
if (exists(packageJsonData, nodeName) && !areVersRangesValid(packageJsonData, nodeName, rangeSpecifier, config)) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};
13 changes: 8 additions & 5 deletions src/rules/prefer-no-version-zero-dependencies.js
@@ -1,18 +1,21 @@
const {hasDepVersZero} = require('./../validators/dependency-audit');
const {exists} = require('../validators/property');
const LintIssue = require('./../LintIssue');

const lintId = 'prefer-no-version-zero-dependencies';
const nodeName = 'dependencies';
const message = 'You have invalid version 0 dependencies. Please use modules with a major version >= 1.';
const ruleType = 'standard';
const ruleType = 'optionalObject';

const lint = (packageJsonData, severity) => {
if (hasDepVersZero(packageJsonData, nodeName)) {
const lint = (packageJsonData, severity, config) => {
if (exists(packageJsonData, nodeName) && hasDepVersZero(packageJsonData, nodeName, config)) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};
13 changes: 8 additions & 5 deletions src/rules/prefer-no-version-zero-devDependencies.js
@@ -1,18 +1,21 @@
const {hasDepVersZero} = require('./../validators/dependency-audit');
const {exists} = require('../validators/property');
const LintIssue = require('./../LintIssue');

const lintId = 'prefer-no-version-zero-devDependencies';
const nodeName = 'devDependencies';
const message = 'You have invalid version 0 dependencies. Please use modules with a major version >= 1.';
const ruleType = 'standard';
const ruleType = 'optionalObject';

const lint = (packageJsonData, severity) => {
if (hasDepVersZero(packageJsonData, nodeName)) {
const lint = (packageJsonData, severity, config) => {
if (exists(packageJsonData, nodeName) && hasDepVersZero(packageJsonData, nodeName, config)) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports.lint = lint;
module.exports.ruleType = ruleType;
module.exports = {
lint,
ruleType
};

0 comments on commit ffd1998

Please sign in to comment.