eslint-plugin-package-json 0.80.0 β†’ 0.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,11 +1,17 @@
1
1
  # Changelog
2
2
 
3
- # [0.80.0](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/compare/v0.79.0...v0.80.0) (2025-11-17)
3
+ # [0.81.0](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/compare/v0.80.0...v0.81.0) (2025-11-17)
4
+
5
+
6
+ ### Features
7
+
8
+ * **require-attribution:** add new rule to require proper attribution ([#1408](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/1408)) ([e646f94](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commit/e646f941bfc8ac2e4cb7c28509a8bd800b912442)), closes [#1404](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/1404)
4
9
 
10
+ # [0.80.0](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/compare/v0.79.0...v0.80.0) (2025-11-17)
5
11
 
6
12
  ### Features
7
13
 
8
- * **require-exports:** add new rule to require `exports` ([#1410](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/1410)) ([c8fd152](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commit/c8fd1525b4d25c4d1fbdb488a7a604037e352361)), closes [#1409](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/1409)
14
+ - **require-exports:** add new rule to require `exports` ([#1410](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/1410)) ([c8fd152](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commit/c8fd1525b4d25c4d1fbdb488a7a604037e352361)), closes [#1409](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/1409)
9
15
 
10
16
  # [0.79.0](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/compare/v0.78.0...v0.79.0) (2025-11-15)
11
17
 
package/README.md CHANGED
@@ -181,69 +181,70 @@ The default settings don't conflict, and Prettier plugins can quickly fix up ord
181
181
  πŸ’‘ Manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions).\
182
182
  ❌ Deprecated.
183
183
 
184
- | NameΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  | Description | πŸ’Ό | πŸ”§ | πŸ’‘ | ❌ |
185
- | :------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------- | :--- | :- | :- | :- |
186
- | [bin-name-casing](docs/rules/bin-name-casing.md) | Enforce that names for bin properties are in kebab case. | 🎨 | | πŸ’‘ | |
187
- | [exports-subpaths-style](docs/rules/exports-subpaths-style.md) | Enforce consistent format for the exports field (implicit or explicit subpaths). | 🎨 | πŸ”§ | | |
188
- | [no-empty-fields](docs/rules/no-empty-fields.md) | Reports on unnecessary empty arrays and objects. | βœ”οΈ βœ… | | πŸ’‘ | |
189
- | [no-redundant-files](docs/rules/no-redundant-files.md) | Prevents adding unnecessary / redundant files. | βœ”οΈ βœ… | | πŸ’‘ | |
190
- | [no-redundant-publishConfig](docs/rules/no-redundant-publishConfig.md) | Warns when publishConfig.access is used in unscoped packages. | βœ”οΈ βœ… | | πŸ’‘ | |
191
- | [order-properties](docs/rules/order-properties.md) | Package properties must be declared in standard order | βœ”οΈ βœ… | πŸ”§ | | |
192
- | [repository-shorthand](docs/rules/repository-shorthand.md) | Enforce either object or shorthand declaration for repository. | βœ”οΈ βœ… | πŸ”§ | | |
193
- | [require-author](docs/rules/require-author.md) | Requires the `author` property to be present. | | | | |
194
- | [require-bugs](docs/rules/require-bugs.md) | Requires the `bugs` property to be present. | | | | |
195
- | [require-bundleDependencies](docs/rules/require-bundleDependencies.md) | Requires the `bundleDependencies` property to be present. | | | | |
196
- | [require-dependencies](docs/rules/require-dependencies.md) | Requires the `dependencies` property to be present. | | | | |
197
- | [require-description](docs/rules/require-description.md) | Requires the `description` property to be present. | βœ”οΈ βœ… | | | |
198
- | [require-devDependencies](docs/rules/require-devDependencies.md) | Requires the `devDependencies` property to be present. | | | | |
199
- | [require-engines](docs/rules/require-engines.md) | Requires the `engines` property to be present. | | | | |
200
- | [require-exports](docs/rules/require-exports.md) | Requires the `exports` property to be present. | | | | |
201
- | [require-files](docs/rules/require-files.md) | Requires the `files` property to be present. | | | | |
202
- | [require-keywords](docs/rules/require-keywords.md) | Requires the `keywords` property to be present. | | | | |
203
- | [require-license](docs/rules/require-license.md) | Requires the `license` property to be present. | βœ”οΈ βœ… | | | |
204
- | [require-name](docs/rules/require-name.md) | Requires the `name` property to be present. | βœ”οΈ βœ… | | | |
205
- | [require-optionalDependencies](docs/rules/require-optionalDependencies.md) | Requires the `optionalDependencies` property to be present. | | | | |
206
- | [require-peerDependencies](docs/rules/require-peerDependencies.md) | Requires the `peerDependencies` property to be present. | | | | |
207
- | [require-type](docs/rules/require-type.md) | Requires the `type` property to be present. | βœ”οΈ βœ… | | | |
208
- | [require-types](docs/rules/require-types.md) | Requires the `types` property to be present. | | | | |
209
- | [require-version](docs/rules/require-version.md) | Requires the `version` property to be present. | βœ”οΈ βœ… | | | |
210
- | [restrict-dependency-ranges](docs/rules/restrict-dependency-ranges.md) | Restricts the range of dependencies to allow or disallow specific types of ranges. | | | πŸ’‘ | |
211
- | [restrict-private-properties](docs/rules/restrict-private-properties.md) | Disallows unnecessary properties in private packages. | | πŸ”§ | πŸ’‘ | |
212
- | [scripts-name-casing](docs/rules/scripts-name-casing.md) | Enforce that names for `scripts` are in kebab case (optionally separated by colons). | 🎨 | | πŸ’‘ | |
213
- | [sort-collections](docs/rules/sort-collections.md) | Selected collections must be in a consistent order (lexicographical for most; lifecycle-aware for scripts). | βœ”οΈ βœ… | πŸ”§ | | |
214
- | [unique-dependencies](docs/rules/unique-dependencies.md) | Checks a dependency isn't specified more than once (i.e. in `dependencies` and `devDependencies`) | βœ”οΈ βœ… | | πŸ’‘ | |
215
- | [valid-author](docs/rules/valid-author.md) | Enforce that the `author` property is valid. | βœ”οΈ βœ… | | | |
216
- | [valid-bin](docs/rules/valid-bin.md) | Enforce that the `bin` property is valid. | βœ”οΈ βœ… | | | |
217
- | [valid-bundleDependencies](docs/rules/valid-bundleDependencies.md) | Enforce that the `bundleDependencies` (also: `bundledDependencies`) property is valid. | βœ”οΈ βœ… | | | |
218
- | [valid-config](docs/rules/valid-config.md) | Enforce that the `config` property is valid. | βœ”οΈ βœ… | | | |
219
- | [valid-contributors](docs/rules/valid-contributors.md) | Enforce that the `contributors` property is valid. | βœ”οΈ βœ… | | | |
220
- | [valid-cpu](docs/rules/valid-cpu.md) | Enforce that the `cpu` property is valid. | βœ”οΈ βœ… | | | |
221
- | [valid-dependencies](docs/rules/valid-dependencies.md) | Enforce that the `dependencies` property is valid. | βœ”οΈ βœ… | | | |
222
- | [valid-description](docs/rules/valid-description.md) | Enforce that the `description` property is valid. | βœ”οΈ βœ… | | | |
223
- | [valid-devDependencies](docs/rules/valid-devDependencies.md) | Enforce that the `devDependencies` property is valid. | βœ”οΈ βœ… | | | |
224
- | [valid-directories](docs/rules/valid-directories.md) | Enforce that the `directories` property is valid. | βœ”οΈ βœ… | | | |
225
- | [valid-engines](docs/rules/valid-engines.md) | Enforce that the `engines` property is valid. | βœ”οΈ βœ… | | | |
226
- | [valid-exports](docs/rules/valid-exports.md) | Enforce that the `exports` property is valid. | βœ”οΈ βœ… | | | |
227
- | [valid-files](docs/rules/valid-files.md) | Enforce that the `files` property is valid. | βœ”οΈ βœ… | | | |
228
- | [valid-homepage](docs/rules/valid-homepage.md) | Enforce that the `homepage` property is valid. | βœ”οΈ βœ… | | | |
229
- | [valid-keywords](docs/rules/valid-keywords.md) | Enforce that the `keywords` property is valid. | βœ”οΈ βœ… | | | |
230
- | [valid-license](docs/rules/valid-license.md) | Enforce that the `license` property is valid. | βœ”οΈ βœ… | | | |
231
- | [valid-local-dependency](docs/rules/valid-local-dependency.md) | Checks existence of local dependencies in the package.json | | | | ❌ |
232
- | [valid-main](docs/rules/valid-main.md) | Enforce that the `main` property is valid. | βœ”οΈ βœ… | | | |
233
- | [valid-man](docs/rules/valid-man.md) | Enforce that the `man` property is valid. | βœ”οΈ βœ… | | | |
234
- | [valid-name](docs/rules/valid-name.md) | Enforce that package names are valid npm package names | βœ”οΈ βœ… | | | |
235
- | [valid-optionalDependencies](docs/rules/valid-optionalDependencies.md) | Enforce that the `optionalDependencies` property is valid. | βœ”οΈ βœ… | | | |
236
- | [valid-os](docs/rules/valid-os.md) | Enforce that the `os` property is valid. | βœ”οΈ βœ… | | | |
237
- | [valid-package-definition](docs/rules/valid-package-definition.md) | Enforce that package.json has all properties required by the npm spec | | | | ❌ |
238
- | [valid-peerDependencies](docs/rules/valid-peerDependencies.md) | Enforce that the `peerDependencies` property is valid. | βœ”οΈ βœ… | | | |
239
- | [valid-private](docs/rules/valid-private.md) | Enforce that the `private` property is valid. | βœ”οΈ βœ… | | | |
240
- | [valid-publishConfig](docs/rules/valid-publishConfig.md) | Enforce that the `publishConfig` property is valid. | βœ”οΈ βœ… | | | |
241
- | [valid-repository](docs/rules/valid-repository.md) | Enforce that the `repository` property is valid. | βœ”οΈ βœ… | | | |
242
- | [valid-repository-directory](docs/rules/valid-repository-directory.md) | Enforce that if repository directory is specified, it matches the path to the package.json file | βœ”οΈ βœ… | | πŸ’‘ | |
243
- | [valid-scripts](docs/rules/valid-scripts.md) | Enforce that the `scripts` property is valid. | βœ”οΈ βœ… | | | |
244
- | [valid-type](docs/rules/valid-type.md) | Enforce that the `type` property is valid. | βœ”οΈ βœ… | | | |
245
- | [valid-version](docs/rules/valid-version.md) | Enforce that package versions are valid semver specifiers | βœ”οΈ βœ… | | | |
246
- | [valid-workspaces](docs/rules/valid-workspaces.md) | Enforce that the `workspaces` property is valid. | βœ”οΈ βœ… | | | |
184
+ | NameΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  | Description | πŸ’Ό | πŸ”§ | πŸ’‘ | ❌ |
185
+ | :------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--- | :- | :- | :- |
186
+ | [bin-name-casing](docs/rules/bin-name-casing.md) | Enforce that names for bin properties are in kebab case. | 🎨 | | πŸ’‘ | |
187
+ | [exports-subpaths-style](docs/rules/exports-subpaths-style.md) | Enforce consistent format for the exports field (implicit or explicit subpaths). | 🎨 | πŸ”§ | | |
188
+ | [no-empty-fields](docs/rules/no-empty-fields.md) | Reports on unnecessary empty arrays and objects. | βœ”οΈ βœ… | | πŸ’‘ | |
189
+ | [no-redundant-files](docs/rules/no-redundant-files.md) | Prevents adding unnecessary / redundant files. | βœ”οΈ βœ… | | πŸ’‘ | |
190
+ | [no-redundant-publishConfig](docs/rules/no-redundant-publishConfig.md) | Warns when publishConfig.access is used in unscoped packages. | βœ”οΈ βœ… | | πŸ’‘ | |
191
+ | [order-properties](docs/rules/order-properties.md) | Package properties must be declared in standard order | βœ”οΈ βœ… | πŸ”§ | | |
192
+ | [repository-shorthand](docs/rules/repository-shorthand.md) | Enforce either object or shorthand declaration for repository. | βœ”οΈ βœ… | πŸ”§ | | |
193
+ | [require-attribution](docs/rules/require-attribution.md) | Ensures that proper attribution is included, requiring that either `author` or `contributors` is defined, and that if `contributors` is present, it should include at least one contributor. | | | πŸ’‘ | |
194
+ | [require-author](docs/rules/require-author.md) | Requires the `author` property to be present. | | | | |
195
+ | [require-bugs](docs/rules/require-bugs.md) | Requires the `bugs` property to be present. | | | | |
196
+ | [require-bundleDependencies](docs/rules/require-bundleDependencies.md) | Requires the `bundleDependencies` property to be present. | | | | |
197
+ | [require-dependencies](docs/rules/require-dependencies.md) | Requires the `dependencies` property to be present. | | | | |
198
+ | [require-description](docs/rules/require-description.md) | Requires the `description` property to be present. | βœ”οΈ βœ… | | | |
199
+ | [require-devDependencies](docs/rules/require-devDependencies.md) | Requires the `devDependencies` property to be present. | | | | |
200
+ | [require-engines](docs/rules/require-engines.md) | Requires the `engines` property to be present. | | | | |
201
+ | [require-exports](docs/rules/require-exports.md) | Requires the `exports` property to be present. | | | | |
202
+ | [require-files](docs/rules/require-files.md) | Requires the `files` property to be present. | | | | |
203
+ | [require-keywords](docs/rules/require-keywords.md) | Requires the `keywords` property to be present. | | | | |
204
+ | [require-license](docs/rules/require-license.md) | Requires the `license` property to be present. | βœ”οΈ βœ… | | | |
205
+ | [require-name](docs/rules/require-name.md) | Requires the `name` property to be present. | βœ”οΈ βœ… | | | |
206
+ | [require-optionalDependencies](docs/rules/require-optionalDependencies.md) | Requires the `optionalDependencies` property to be present. | | | | |
207
+ | [require-peerDependencies](docs/rules/require-peerDependencies.md) | Requires the `peerDependencies` property to be present. | | | | |
208
+ | [require-type](docs/rules/require-type.md) | Requires the `type` property to be present. | βœ”οΈ βœ… | | | |
209
+ | [require-types](docs/rules/require-types.md) | Requires the `types` property to be present. | | | | |
210
+ | [require-version](docs/rules/require-version.md) | Requires the `version` property to be present. | βœ”οΈ βœ… | | | |
211
+ | [restrict-dependency-ranges](docs/rules/restrict-dependency-ranges.md) | Restricts the range of dependencies to allow or disallow specific types of ranges. | | | πŸ’‘ | |
212
+ | [restrict-private-properties](docs/rules/restrict-private-properties.md) | Disallows unnecessary properties in private packages. | | πŸ”§ | πŸ’‘ | |
213
+ | [scripts-name-casing](docs/rules/scripts-name-casing.md) | Enforce that names for `scripts` are in kebab case (optionally separated by colons). | 🎨 | | πŸ’‘ | |
214
+ | [sort-collections](docs/rules/sort-collections.md) | Selected collections must be in a consistent order (lexicographical for most; lifecycle-aware for scripts). | βœ”οΈ βœ… | πŸ”§ | | |
215
+ | [unique-dependencies](docs/rules/unique-dependencies.md) | Checks a dependency isn't specified more than once (i.e. in `dependencies` and `devDependencies`) | βœ”οΈ βœ… | | πŸ’‘ | |
216
+ | [valid-author](docs/rules/valid-author.md) | Enforce that the `author` property is valid. | βœ”οΈ βœ… | | | |
217
+ | [valid-bin](docs/rules/valid-bin.md) | Enforce that the `bin` property is valid. | βœ”οΈ βœ… | | | |
218
+ | [valid-bundleDependencies](docs/rules/valid-bundleDependencies.md) | Enforce that the `bundleDependencies` (also: `bundledDependencies`) property is valid. | βœ”οΈ βœ… | | | |
219
+ | [valid-config](docs/rules/valid-config.md) | Enforce that the `config` property is valid. | βœ”οΈ βœ… | | | |
220
+ | [valid-contributors](docs/rules/valid-contributors.md) | Enforce that the `contributors` property is valid. | βœ”οΈ βœ… | | | |
221
+ | [valid-cpu](docs/rules/valid-cpu.md) | Enforce that the `cpu` property is valid. | βœ”οΈ βœ… | | | |
222
+ | [valid-dependencies](docs/rules/valid-dependencies.md) | Enforce that the `dependencies` property is valid. | βœ”οΈ βœ… | | | |
223
+ | [valid-description](docs/rules/valid-description.md) | Enforce that the `description` property is valid. | βœ”οΈ βœ… | | | |
224
+ | [valid-devDependencies](docs/rules/valid-devDependencies.md) | Enforce that the `devDependencies` property is valid. | βœ”οΈ βœ… | | | |
225
+ | [valid-directories](docs/rules/valid-directories.md) | Enforce that the `directories` property is valid. | βœ”οΈ βœ… | | | |
226
+ | [valid-engines](docs/rules/valid-engines.md) | Enforce that the `engines` property is valid. | βœ”οΈ βœ… | | | |
227
+ | [valid-exports](docs/rules/valid-exports.md) | Enforce that the `exports` property is valid. | βœ”οΈ βœ… | | | |
228
+ | [valid-files](docs/rules/valid-files.md) | Enforce that the `files` property is valid. | βœ”οΈ βœ… | | | |
229
+ | [valid-homepage](docs/rules/valid-homepage.md) | Enforce that the `homepage` property is valid. | βœ”οΈ βœ… | | | |
230
+ | [valid-keywords](docs/rules/valid-keywords.md) | Enforce that the `keywords` property is valid. | βœ”οΈ βœ… | | | |
231
+ | [valid-license](docs/rules/valid-license.md) | Enforce that the `license` property is valid. | βœ”οΈ βœ… | | | |
232
+ | [valid-local-dependency](docs/rules/valid-local-dependency.md) | Checks existence of local dependencies in the package.json | | | | ❌ |
233
+ | [valid-main](docs/rules/valid-main.md) | Enforce that the `main` property is valid. | βœ”οΈ βœ… | | | |
234
+ | [valid-man](docs/rules/valid-man.md) | Enforce that the `man` property is valid. | βœ”οΈ βœ… | | | |
235
+ | [valid-name](docs/rules/valid-name.md) | Enforce that package names are valid npm package names | βœ”οΈ βœ… | | | |
236
+ | [valid-optionalDependencies](docs/rules/valid-optionalDependencies.md) | Enforce that the `optionalDependencies` property is valid. | βœ”οΈ βœ… | | | |
237
+ | [valid-os](docs/rules/valid-os.md) | Enforce that the `os` property is valid. | βœ”οΈ βœ… | | | |
238
+ | [valid-package-definition](docs/rules/valid-package-definition.md) | Enforce that package.json has all properties required by the npm spec | | | | ❌ |
239
+ | [valid-peerDependencies](docs/rules/valid-peerDependencies.md) | Enforce that the `peerDependencies` property is valid. | βœ”οΈ βœ… | | | |
240
+ | [valid-private](docs/rules/valid-private.md) | Enforce that the `private` property is valid. | βœ”οΈ βœ… | | | |
241
+ | [valid-publishConfig](docs/rules/valid-publishConfig.md) | Enforce that the `publishConfig` property is valid. | βœ”οΈ βœ… | | | |
242
+ | [valid-repository](docs/rules/valid-repository.md) | Enforce that the `repository` property is valid. | βœ”οΈ βœ… | | | |
243
+ | [valid-repository-directory](docs/rules/valid-repository-directory.md) | Enforce that if repository directory is specified, it matches the path to the package.json file | βœ”οΈ βœ… | | πŸ’‘ | |
244
+ | [valid-scripts](docs/rules/valid-scripts.md) | Enforce that the `scripts` property is valid. | βœ”οΈ βœ… | | | |
245
+ | [valid-type](docs/rules/valid-type.md) | Enforce that the `type` property is valid. | βœ”οΈ βœ… | | | |
246
+ | [valid-version](docs/rules/valid-version.md) | Enforce that package versions are valid semver specifiers | βœ”οΈ βœ… | | | |
247
+ | [valid-workspaces](docs/rules/valid-workspaces.md) | Enforce that the `workspaces` property is valid. | βœ”οΈ βœ… | | | |
247
248
 
248
249
  <!-- end auto-generated rules list -->
249
250
  <!-- prettier-ignore-end -->
package/lib/plugin.mjs CHANGED
@@ -5,18 +5,19 @@ import { rule as rule$3 } from "./rules/no-redundant-files.mjs";
5
5
  import { rule as rule$4 } from "./rules/no-redundant-publishConfig.mjs";
6
6
  import { rule as rule$5 } from "./rules/order-properties.mjs";
7
7
  import { rule as rule$6 } from "./rules/repository-shorthand.mjs";
8
+ import { rule as rule$7 } from "./rules/require-attribution.mjs";
8
9
  import { rules } from "./rules/require-properties.mjs";
9
- import { rule as rule$7 } from "./rules/restrict-dependency-ranges.mjs";
10
- import { rule as rule$8 } from "./rules/restrict-private-properties.mjs";
11
- import { rule as rule$9 } from "./rules/scripts-name-casing.mjs";
12
- import { rule as rule$10 } from "./rules/sort-collections.mjs";
13
- import { rule as rule$11 } from "./rules/unique-dependencies.mjs";
14
- import { rule as rule$12 } from "./rules/valid-local-dependency.mjs";
15
- import { rule as rule$13 } from "./rules/valid-name.mjs";
16
- import { rule as rule$14 } from "./rules/valid-package-definition.mjs";
10
+ import { rule as rule$8 } from "./rules/restrict-dependency-ranges.mjs";
11
+ import { rule as rule$9 } from "./rules/restrict-private-properties.mjs";
12
+ import { rule as rule$10 } from "./rules/scripts-name-casing.mjs";
13
+ import { rule as rule$11 } from "./rules/sort-collections.mjs";
14
+ import { rule as rule$12 } from "./rules/unique-dependencies.mjs";
15
+ import { rule as rule$13 } from "./rules/valid-local-dependency.mjs";
16
+ import { rule as rule$14 } from "./rules/valid-name.mjs";
17
+ import { rule as rule$15 } from "./rules/valid-package-definition.mjs";
17
18
  import { rules as rules$1 } from "./rules/valid-properties.mjs";
18
- import { rule as rule$15 } from "./rules/valid-repository-directory.mjs";
19
- import { rule as rule$16 } from "./rules/valid-version.mjs";
19
+ import { rule as rule$16 } from "./rules/valid-repository-directory.mjs";
20
+ import { rule as rule$17 } from "./rules/valid-version.mjs";
20
21
  import { createRequire } from "node:module";
21
22
  import * as parserJsonc from "jsonc-eslint-parser";
22
23
 
@@ -29,22 +30,23 @@ const rules$2 = {
29
30
  "no-redundant-files": rule$3,
30
31
  "no-redundant-publishConfig": rule$4,
31
32
  "order-properties": rule$5,
33
+ "require-attribution": rule$7,
32
34
  ...rules,
33
35
  "repository-shorthand": rule$6,
34
- "restrict-dependency-ranges": rule$7,
35
- "restrict-private-properties": rule$8,
36
- "scripts-name-casing": rule$9,
37
- "sort-collections": rule$10,
38
- "unique-dependencies": rule$11,
36
+ "restrict-dependency-ranges": rule$8,
37
+ "restrict-private-properties": rule$9,
38
+ "scripts-name-casing": rule$10,
39
+ "sort-collections": rule$11,
40
+ "unique-dependencies": rule$12,
39
41
  ...rules$1,
40
- "valid-local-dependency": rule$12,
41
- "valid-name": rule$13,
42
- "valid-package-definition": rule$14,
43
- "valid-repository-directory": rule$15,
44
- "valid-version": rule$16
42
+ "valid-local-dependency": rule$13,
43
+ "valid-name": rule$14,
44
+ "valid-package-definition": rule$15,
45
+ "valid-repository-directory": rule$16,
46
+ "valid-version": rule$17
45
47
  };
46
- const recommendedRules = { ...Object.fromEntries(Object.entries(rules$2).filter(([, rule$17]) => rule$17.meta.docs?.recommended).map(([name$1]) => ["package-json/" + name$1, "error"])) };
47
- const stylisticRules = { ...Object.fromEntries(Object.entries(rules$2).filter(([, rule$17]) => rule$17.meta.docs?.category === "Stylistic").map(([name$1]) => ["package-json/" + name$1, "error"])) };
48
+ const recommendedRules = { ...Object.fromEntries(Object.entries(rules$2).filter(([, rule$18]) => rule$18.meta.docs?.recommended).map(([name$1]) => ["package-json/" + name$1, "error"])) };
49
+ const stylisticRules = { ...Object.fromEntries(Object.entries(rules$2).filter(([, rule$18]) => rule$18.meta.docs?.category === "Stylistic").map(([name$1]) => ["package-json/" + name$1, "error"])) };
48
50
  const plugin = {
49
51
  configs: {
50
52
  "legacy-recommended": {
@@ -0,0 +1,17 @@
1
+ import { PackageJsonRuleModule } from "../createRule.mjs";
2
+
3
+ //#region src/rules/require-attribution.d.ts
4
+ declare const rule: PackageJsonRuleModule<[({
5
+ preferContributorsOnly?: boolean | undefined;
6
+ } | undefined)?], [{
7
+ readonly additionalProperties: false;
8
+ readonly properties: {
9
+ readonly preferContributorsOnly: {
10
+ readonly description: "Require that only `contributors` is present, and `author` is not defined.";
11
+ readonly type: "boolean";
12
+ };
13
+ };
14
+ readonly type: "object";
15
+ }]>;
16
+ //#endregion
17
+ export { rule };
@@ -0,0 +1,71 @@
1
+ import { createRule } from "../createRule.mjs";
2
+ import { fixRemoveObjectProperty } from "eslint-fix-utils";
3
+
4
+ //#region src/rules/require-attribution.ts
5
+ const rule = createRule({
6
+ create(context) {
7
+ const preferContributorsOnly = context.options[0]?.preferContributorsOnly ?? false;
8
+ let authorPropertyNode;
9
+ let contributorsPropertyNode;
10
+ return {
11
+ "Program > JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.value=author]"(node) {
12
+ authorPropertyNode = node;
13
+ },
14
+ "Program > JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.value=contributors]"(node) {
15
+ contributorsPropertyNode = node;
16
+ const contributorsValue = node.value;
17
+ if (contributorsValue.type !== "JSONArrayExpression" || !contributorsValue.elements.some((element) => !!element)) context.report({
18
+ messageId: "noContributors",
19
+ node
20
+ });
21
+ },
22
+ "Program:exit"(node) {
23
+ if (preferContributorsOnly) {
24
+ if (authorPropertyNode) context.report({
25
+ messageId: "contributorsOnly",
26
+ node: authorPropertyNode,
27
+ suggest: [{
28
+ fix: fixRemoveObjectProperty(context, authorPropertyNode),
29
+ messageId: "removeAuthor"
30
+ }]
31
+ });
32
+ if (!contributorsPropertyNode) context.report({
33
+ messageId: "missingContributor",
34
+ node
35
+ });
36
+ } else if (!authorPropertyNode && !contributorsPropertyNode) context.report({
37
+ messageId: "missing",
38
+ node
39
+ });
40
+ }
41
+ };
42
+ },
43
+ meta: {
44
+ defaultOptions: [{ preferContributorsOnly: false }],
45
+ docs: {
46
+ category: "Publishable",
47
+ description: "Ensures that proper attribution is included, requiring that either `author` or `contributors` is defined, and that if `contributors` is present, it should include at least one contributor."
48
+ },
49
+ hasSuggestions: true,
50
+ messages: {
51
+ contributorsOnly: "Only `contributors` should be defined for attribution.",
52
+ missing: "Property attribution is required. Either `author` or `contributors` should be defined.",
53
+ missingContributor: "Property attribution is required. `contributors` should be defined.",
54
+ noContributors: "At least one contributor should be defined.",
55
+ removeAuthor: "Remove `author`."
56
+ },
57
+ schema: [{
58
+ additionalProperties: false,
59
+ properties: { preferContributorsOnly: {
60
+ description: "Require that only `contributors` is present, and `author` is not defined.",
61
+ type: "boolean"
62
+ } },
63
+ type: "object"
64
+ }],
65
+ type: "suggestion"
66
+ },
67
+ name: "require-attribution"
68
+ });
69
+
70
+ //#endregion
71
+ export { rule };
@@ -9,6 +9,7 @@ declare const rules: {
9
9
  readonly properties: {
10
10
  readonly ignorePrivate: {
11
11
  readonly default: boolean;
12
+ readonly description: "Determines if this rule should be enforced when the package's `private` property is `true`.";
12
13
  readonly type: "boolean";
13
14
  };
14
15
  };
@@ -28,6 +28,7 @@ declare const createSimpleRequirePropertyRule: (propertyName: string, {
28
28
  readonly properties: {
29
29
  readonly ignorePrivate: {
30
30
  readonly default: boolean;
31
+ readonly description: "Determines if this rule should be enforced when the package's `private` property is `true`.";
31
32
  readonly type: "boolean";
32
33
  };
33
34
  };
@@ -34,6 +34,7 @@ const createSimpleRequirePropertyRule = (propertyName, { ignorePrivateDefault =
34
34
  additionalProperties: false,
35
35
  properties: { ignorePrivate: {
36
36
  default: ignorePrivateDefault,
37
+ description: "Determines if this rule should be enforced when the package's `private` property is `true`.",
37
38
  type: "boolean"
38
39
  } },
39
40
  type: "object"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-package-json",
3
- "version": "0.80.0",
3
+ "version": "0.81.0",
4
4
  "description": "Rules for consistent, readable, and valid package.json files. πŸ—‚οΈ",
5
5
  "homepage": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json#readme",
6
6
  "bugs": {