Skip to content

Commit

Permalink
Add: prefer-no-devDependencies (#133)
Browse files Browse the repository at this point in the history
* Add: prefer-no-devDependencies

* Prettier fix
  • Loading branch information
simison authored and tclindner committed Oct 6, 2019
1 parent 575656c commit eaac08b
Show file tree
Hide file tree
Showing 7 changed files with 116 additions and 3 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Expand Up @@ -23,6 +23,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).

> Addresses [#93](https://github.com/tclindner/npm-package-json-lint/issues/93)
- New rule: [prefer-no-devDependencies](https://github.com/tclindner/npm-package-json-lint/wiki/prefer-no-devDependencies)]

### Changed
- [`name-format`](https://github.com/tclindner/npm-package-json-lint/wiki/name-format) now checks the following things:

Expand Down
5 changes: 3 additions & 2 deletions docs/rules.md
Expand Up @@ -197,8 +197,9 @@ Add the following to your `.npmpackagejsonlintrc.json` file.
* [prefer-property-order](rules/package-json-properties/prefer-property-order.md)


## Deprecated node rules
## Disallowed node rules

> Generates an error if the node is present
* [prefer-no-engineStrict](rules/deprecated-nodes/prefer-no-engineStrict)
* [prefer-no-engineStrict](rules/disallowed-nodes/prefer-no-engineStrict)
* [prefer-no-devDependencies](rules/disallowed-nodes/prefer-no-devDependencies)
38 changes: 38 additions & 0 deletions docs/rules/disallowed-nodes/prefer-no-devDependencies.md
@@ -0,0 +1,38 @@
---
id: prefer-no-devDependencies
title: prefer-no-devDependencies
---

Enabling this rule will result in an error being generated if `devDependencies` is present.

## Example .npmpackagejsonlintrc configuration

```json
{
"rules": {
"prefer-no-devDependencies": "error"
}
}
```

## Rule Details

### *Incorrect* example(s)

```json
{
"devDependencies": "dummy-value"
}
```

### *Correct* example(s)

```json
{
"prefer-no-devDependencies": "error"
}
```

## History

* Introduced in version 4.0.0
20 changes: 20 additions & 0 deletions src/rules/prefer-no-devDependencies.js
@@ -0,0 +1,20 @@
const {exists} = require('../validators/property');
const LintIssue = require('./../LintIssue');

const lintId = 'prefer-no-devDependencies';
const nodeName = 'devDependencies';
const message = 'devDependencies should not be defined';
const ruleType = 'optionalObject';

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

return true;
};

module.exports = {
lint,
ruleType
};
49 changes: 49 additions & 0 deletions test/unit/rules/prefer-no-devDependencies.test.js
@@ -0,0 +1,49 @@
const ruleModule = require('./../../../src/rules/prefer-no-devDependencies');
const property = require('../../../src/validators/property');

const {lint, ruleType} = ruleModule;

jest.mock('../../../src/validators/property');

const nodeName = 'devDependencies';

describe('prefer-no-devDependencies Unit Tests', () => {
describe('a rule type value should be exported', () => {
test('it should equal "optionalObject"', () => {
expect(ruleType).toStrictEqual('optionalObject');
});
});

describe('when package.json has devDependencies node', () => {
test('LintIssue object should be returned', () => {
property.exists.mockReturnValue(true);

const packageJsonData = {
devDependencies: 'dummy-value'
};
const response = lint(packageJsonData, 'error');

expect(response.lintId).toStrictEqual('prefer-no-devDependencies');
expect(response.severity).toStrictEqual('error');
expect(response.node).toStrictEqual(nodeName);
expect(response.lintMessage).toStrictEqual('devDependencies should not be defined');

expect(property.exists).toHaveBeenCalledTimes(1);
expect(property.exists).toHaveBeenCalledWith(packageJsonData, nodeName);
});
});

describe('when package.json does not have node', () => {
test('true should be returned', () => {
property.exists.mockReturnValue(false);

const packageJsonData = {};
const response = lint(packageJsonData, 'error');

expect(response).toBe(true);

expect(property.exists).toHaveBeenCalledTimes(1);
expect(property.exists).toHaveBeenCalledWith(packageJsonData, nodeName);
});
});
});
5 changes: 4 additions & 1 deletion website/i18n/en.json
Expand Up @@ -98,9 +98,12 @@
"rules/dependencies/prefer-tilde-version-devDependencies": {
"title": "prefer-tilde-version-devDependencies"
},
"rules/deprecated-nodes/prefer-no-engineStrict": {
"rules/disallowed-nodes/prefer-no-engineStrict": {
"title": "prefer-no-engineStrict"
},
"rules/disallowed-nodes/prefer-no-devDependencies": {
"title": "prefer-no-devDependencies"
},
"rules/format/description-format": {
"title": "description-format"
},
Expand Down

0 comments on commit eaac08b

Please sign in to comment.