eslint-plugin-package-json 1.0.0-beta.5 → 1.0.0-beta.6
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,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.0.0-beta.6](https://github.com/michaelfaith/eslint-plugin-package-json/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2026-05-02)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### ⚠ BREAKING CHANGES
|
|
7
|
+
|
|
8
|
+
* add `valid-peerDependenciesMeta-relationship` rule ([#1767](https://github.com/michaelfaith/eslint-plugin-package-json/issues/1767))
|
|
9
|
+
* add `valid-peerDependenciesMeta` rule ([#1766](https://github.com/michaelfaith/eslint-plugin-package-json/issues/1766))
|
|
10
|
+
* add `valid-gypfile` rule ([#1765](https://github.com/michaelfaith/eslint-plugin-package-json/issues/1765))
|
|
11
|
+
* add `valid-browser` rule ([#1763](https://github.com/michaelfaith/eslint-plugin-package-json/issues/1763))
|
|
12
|
+
* add `valid-libc` rule ([#1764](https://github.com/michaelfaith/eslint-plugin-package-json/issues/1764))
|
|
13
|
+
|
|
14
|
+
### 🚀 Features
|
|
15
|
+
|
|
16
|
+
* add `valid-browser` rule ([#1763](https://github.com/michaelfaith/eslint-plugin-package-json/issues/1763)) ([6cb438b](https://github.com/michaelfaith/eslint-plugin-package-json/commit/6cb438bb5c68af1062a5d7a26131795b7aa9a24b))
|
|
17
|
+
* add `valid-gypfile` rule ([#1765](https://github.com/michaelfaith/eslint-plugin-package-json/issues/1765)) ([c14f624](https://github.com/michaelfaith/eslint-plugin-package-json/commit/c14f624137fa11f42f6b5d97357043a94408edd7))
|
|
18
|
+
* add `valid-libc` rule ([#1764](https://github.com/michaelfaith/eslint-plugin-package-json/issues/1764)) ([4dd5e9c](https://github.com/michaelfaith/eslint-plugin-package-json/commit/4dd5e9c251e2b4e68571080cfe9fbfeb030b1775))
|
|
19
|
+
* add `valid-peerDependenciesMeta-relationship` rule ([#1767](https://github.com/michaelfaith/eslint-plugin-package-json/issues/1767)) ([7fc3f0d](https://github.com/michaelfaith/eslint-plugin-package-json/commit/7fc3f0d17ab9be57b3fc118746a38caf9395db18))
|
|
20
|
+
* add `valid-peerDependenciesMeta` rule ([#1766](https://github.com/michaelfaith/eslint-plugin-package-json/issues/1766)) ([8731609](https://github.com/michaelfaith/eslint-plugin-package-json/commit/873160958c77caa6b479053a2fad2b41dacc18fe))
|
|
21
|
+
|
|
3
22
|
## [1.0.0-beta.5](https://github.com/michaelfaith/eslint-plugin-package-json/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2026-04-28)
|
|
4
23
|
|
|
5
24
|
|
package/README.md
CHANGED
|
@@ -34,93 +34,98 @@ See [Getting Started](https://github.com/michaelfaith/eslint-plugin-package-json
|
|
|
34
34
|
🔧 Automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/user-guide/command-line-interface#--fix).\
|
|
35
35
|
💡 Manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions).
|
|
36
36
|
|
|
37
|
-
| Name
|
|
38
|
-
|
|
|
39
|
-
| [bin-name-casing](docs/rules/bin-name-casing.md)
|
|
40
|
-
| [exports-subpaths-style](docs/rules/exports-subpaths-style.md)
|
|
41
|
-
| [no-empty-fields](docs/rules/no-empty-fields.md)
|
|
42
|
-
| [no-redundant-files](docs/rules/no-redundant-files.md)
|
|
43
|
-
| [no-redundant-publishConfig](docs/rules/no-redundant-publishConfig.md)
|
|
44
|
-
| [order-properties](docs/rules/order-properties.md)
|
|
45
|
-
| [repository-shorthand](docs/rules/repository-shorthand.md)
|
|
46
|
-
| [require-attribution](docs/rules/require-attribution.md)
|
|
47
|
-
| [require-author](docs/rules/require-author.md)
|
|
48
|
-
| [require-bin](docs/rules/require-bin.md)
|
|
49
|
-
| [require-bugs](docs/rules/require-bugs.md)
|
|
50
|
-
| [require-bundleDependencies](docs/rules/require-bundleDependencies.md)
|
|
51
|
-
| [require-contributors](docs/rules/require-contributors.md)
|
|
52
|
-
| [require-cpu](docs/rules/require-cpu.md)
|
|
53
|
-
| [require-dependencies](docs/rules/require-dependencies.md)
|
|
54
|
-
| [require-description](docs/rules/require-description.md)
|
|
55
|
-
| [require-devDependencies](docs/rules/require-devDependencies.md)
|
|
56
|
-
| [require-devEngines](docs/rules/require-devEngines.md)
|
|
57
|
-
| [require-directories](docs/rules/require-directories.md)
|
|
58
|
-
| [require-engines](docs/rules/require-engines.md)
|
|
59
|
-
| [require-exports](docs/rules/require-exports.md)
|
|
60
|
-
| [require-files](docs/rules/require-files.md)
|
|
61
|
-
| [require-funding](docs/rules/require-funding.md)
|
|
62
|
-
| [require-homepage](docs/rules/require-homepage.md)
|
|
63
|
-
| [require-keywords](docs/rules/require-keywords.md)
|
|
64
|
-
| [require-license](docs/rules/require-license.md)
|
|
65
|
-
| [require-main](docs/rules/require-main.md)
|
|
66
|
-
| [require-man](docs/rules/require-man.md)
|
|
67
|
-
| [require-module](docs/rules/require-module.md)
|
|
68
|
-
| [require-name](docs/rules/require-name.md)
|
|
69
|
-
| [require-optionalDependencies](docs/rules/require-optionalDependencies.md)
|
|
70
|
-
| [require-os](docs/rules/require-os.md)
|
|
71
|
-
| [require-packageManager](docs/rules/require-packageManager.md)
|
|
72
|
-
| [require-peerDependencies](docs/rules/require-peerDependencies.md)
|
|
73
|
-
| [require-private](docs/rules/require-private.md)
|
|
74
|
-
| [require-publishConfig](docs/rules/require-publishConfig.md)
|
|
75
|
-
| [require-repository](docs/rules/require-repository.md)
|
|
76
|
-
| [require-scripts](docs/rules/require-scripts.md)
|
|
77
|
-
| [require-sideEffects](docs/rules/require-sideEffects.md)
|
|
78
|
-
| [require-type](docs/rules/require-type.md)
|
|
79
|
-
| [require-types](docs/rules/require-types.md)
|
|
80
|
-
| [require-version](docs/rules/require-version.md)
|
|
81
|
-
| [restrict-dependency-ranges](docs/rules/restrict-dependency-ranges.md)
|
|
82
|
-
| [restrict-private-properties](docs/rules/restrict-private-properties.md)
|
|
83
|
-
| [restrict-top-level-properties](docs/rules/restrict-top-level-properties.md)
|
|
84
|
-
| [scripts-name-casing](docs/rules/scripts-name-casing.md)
|
|
85
|
-
| [sort-collections](docs/rules/sort-collections.md)
|
|
86
|
-
| [specify-peers-locally](docs/rules/specify-peers-locally.md)
|
|
87
|
-
| [unique-dependencies](docs/rules/unique-dependencies.md)
|
|
88
|
-
| [valid-author](docs/rules/valid-author.md)
|
|
89
|
-
| [valid-bin](docs/rules/valid-bin.md)
|
|
90
|
-
| [valid-
|
|
91
|
-
| [valid-
|
|
92
|
-
| [valid-
|
|
93
|
-
| [valid-
|
|
94
|
-
| [valid-
|
|
95
|
-
| [valid-
|
|
96
|
-
| [valid-
|
|
97
|
-
| [valid-
|
|
98
|
-
| [valid-
|
|
99
|
-
| [valid-
|
|
100
|
-
| [valid-
|
|
101
|
-
| [valid-
|
|
102
|
-
| [valid-
|
|
103
|
-
| [valid-
|
|
104
|
-
| [valid-
|
|
105
|
-
| [valid-
|
|
106
|
-
| [valid-
|
|
107
|
-
| [valid-
|
|
108
|
-
| [valid-
|
|
109
|
-
| [valid-
|
|
110
|
-
| [valid-
|
|
111
|
-
| [valid-
|
|
112
|
-
| [valid-
|
|
113
|
-
| [valid-
|
|
114
|
-
| [valid-
|
|
115
|
-
| [valid-
|
|
116
|
-
| [valid-
|
|
117
|
-
| [valid-
|
|
118
|
-
| [valid-
|
|
119
|
-
| [valid-
|
|
120
|
-
| [valid-
|
|
121
|
-
| [valid-
|
|
122
|
-
| [valid-
|
|
123
|
-
| [valid-
|
|
37
|
+
| Name | Description | 💼 | 🔧 | 💡 |
|
|
38
|
+
| :----------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--- | :- | :- |
|
|
39
|
+
| [bin-name-casing](docs/rules/bin-name-casing.md) | Enforce that names for bin properties are in kebab case. | 🎨 | | 💡 |
|
|
40
|
+
| [exports-subpaths-style](docs/rules/exports-subpaths-style.md) | Enforce consistent format for the exports field (implicit or explicit subpaths). | 🎨 | 🔧 | |
|
|
41
|
+
| [no-empty-fields](docs/rules/no-empty-fields.md) | Reports on unnecessary empty arrays and objects. | ✅ 📦 | | 💡 |
|
|
42
|
+
| [no-redundant-files](docs/rules/no-redundant-files.md) | Prevents adding unnecessary / redundant files. | ✅ 📦 | | 💡 |
|
|
43
|
+
| [no-redundant-publishConfig](docs/rules/no-redundant-publishConfig.md) | Warns when publishConfig.access is used in unscoped packages. | ✅ 📦 | | 💡 |
|
|
44
|
+
| [order-properties](docs/rules/order-properties.md) | Package properties should be declared in standard order | 🎨 | 🔧 | |
|
|
45
|
+
| [repository-shorthand](docs/rules/repository-shorthand.md) | Enforce either object or shorthand declaration for repository. | ✅ 📦 | 🔧 | |
|
|
46
|
+
| [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. | ✅ 📦 | | 💡 |
|
|
47
|
+
| [require-author](docs/rules/require-author.md) | Requires the `author` property to be present. | | | |
|
|
48
|
+
| [require-bin](docs/rules/require-bin.md) | Requires the `bin` property to be present. | | | |
|
|
49
|
+
| [require-bugs](docs/rules/require-bugs.md) | Requires the `bugs` property to be present. | | | |
|
|
50
|
+
| [require-bundleDependencies](docs/rules/require-bundleDependencies.md) | Requires the `bundleDependencies` property to be present. | | | |
|
|
51
|
+
| [require-contributors](docs/rules/require-contributors.md) | Requires the `contributors` property to be present. | | | |
|
|
52
|
+
| [require-cpu](docs/rules/require-cpu.md) | Requires the `cpu` property to be present. | | | |
|
|
53
|
+
| [require-dependencies](docs/rules/require-dependencies.md) | Requires the `dependencies` property to be present. | | | |
|
|
54
|
+
| [require-description](docs/rules/require-description.md) | Requires the `description` property to be present. | ✅ 📦 | | |
|
|
55
|
+
| [require-devDependencies](docs/rules/require-devDependencies.md) | Requires the `devDependencies` property to be present. | | | |
|
|
56
|
+
| [require-devEngines](docs/rules/require-devEngines.md) | Requires the `devEngines` property to be present. | | | |
|
|
57
|
+
| [require-directories](docs/rules/require-directories.md) | Requires the `directories` property to be present. | | | |
|
|
58
|
+
| [require-engines](docs/rules/require-engines.md) | Requires the `engines` property to be present. | | | |
|
|
59
|
+
| [require-exports](docs/rules/require-exports.md) | Requires the `exports` property to be present. | ✅ 📦 | | |
|
|
60
|
+
| [require-files](docs/rules/require-files.md) | Requires the `files` property to be present. | ✅ 📦 | | |
|
|
61
|
+
| [require-funding](docs/rules/require-funding.md) | Requires the `funding` property to be present. | | | |
|
|
62
|
+
| [require-homepage](docs/rules/require-homepage.md) | Requires the `homepage` property to be present. | | | |
|
|
63
|
+
| [require-keywords](docs/rules/require-keywords.md) | Requires the `keywords` property to be present. | | | |
|
|
64
|
+
| [require-license](docs/rules/require-license.md) | Requires the `license` property to be present. | ✅ 📦 | | |
|
|
65
|
+
| [require-main](docs/rules/require-main.md) | Requires the `main` property to be present. | | | |
|
|
66
|
+
| [require-man](docs/rules/require-man.md) | Requires the `man` property to be present. | | | |
|
|
67
|
+
| [require-module](docs/rules/require-module.md) | Requires the `module` property to be present. | | | |
|
|
68
|
+
| [require-name](docs/rules/require-name.md) | Requires the `name` property to be present. | ✅ 📦 | | |
|
|
69
|
+
| [require-optionalDependencies](docs/rules/require-optionalDependencies.md) | Requires the `optionalDependencies` property to be present. | | | |
|
|
70
|
+
| [require-os](docs/rules/require-os.md) | Requires the `os` property to be present. | | | |
|
|
71
|
+
| [require-packageManager](docs/rules/require-packageManager.md) | Requires the `packageManager` property to be present. | | | |
|
|
72
|
+
| [require-peerDependencies](docs/rules/require-peerDependencies.md) | Requires the `peerDependencies` property to be present. | | | |
|
|
73
|
+
| [require-private](docs/rules/require-private.md) | Requires the `private` property to be present. | | 🔧 | |
|
|
74
|
+
| [require-publishConfig](docs/rules/require-publishConfig.md) | Requires the `publishConfig` property to be present. | | | |
|
|
75
|
+
| [require-repository](docs/rules/require-repository.md) | Requires the `repository` property to be present. | ✅ 📦 | | |
|
|
76
|
+
| [require-scripts](docs/rules/require-scripts.md) | Requires the `scripts` property to be present. | | | |
|
|
77
|
+
| [require-sideEffects](docs/rules/require-sideEffects.md) | Requires the `sideEffects` property to be present. | ✅ 📦 | | |
|
|
78
|
+
| [require-type](docs/rules/require-type.md) | Requires the `type` property to be present. | ✅ 📦 | 🔧 | |
|
|
79
|
+
| [require-types](docs/rules/require-types.md) | Requires the `types` property to be present. | | | |
|
|
80
|
+
| [require-version](docs/rules/require-version.md) | Requires the `version` property to be present. | ✅ 📦 | | |
|
|
81
|
+
| [restrict-dependency-ranges](docs/rules/restrict-dependency-ranges.md) | Restricts the range of dependencies to allow or disallow specific types of ranges. | | | 💡 |
|
|
82
|
+
| [restrict-private-properties](docs/rules/restrict-private-properties.md) | Disallows unnecessary properties in private packages. | | 🔧 | 💡 |
|
|
83
|
+
| [restrict-top-level-properties](docs/rules/restrict-top-level-properties.md) | Disallows specified top-level properties in package.json. | | | 💡 |
|
|
84
|
+
| [scripts-name-casing](docs/rules/scripts-name-casing.md) | Enforce that names for `scripts` are in kebab case (optionally separated by colons). | 🎨 | | 💡 |
|
|
85
|
+
| [sort-collections](docs/rules/sort-collections.md) | Selected collections must be in a consistent order (lexicographical for most; lifecycle-aware for scripts). | ✅ 📦 | 🔧 | |
|
|
86
|
+
| [specify-peers-locally](docs/rules/specify-peers-locally.md) | Requires that all peer dependencies are also declared as dev dependencies | ✅ 📦 | | 💡 |
|
|
87
|
+
| [unique-dependencies](docs/rules/unique-dependencies.md) | Checks a dependency isn't specified more than once (i.e. in `dependencies` and `devDependencies`) | ✅ 📦 | | 💡 |
|
|
88
|
+
| [valid-author](docs/rules/valid-author.md) | Enforce that the `author` property is valid. | ✅ 📦 | | |
|
|
89
|
+
| [valid-bin](docs/rules/valid-bin.md) | Enforce that the `bin` property is valid. | ✅ 📦 | | |
|
|
90
|
+
| [valid-browser](docs/rules/valid-browser.md) | Enforce that the `browser` property is valid. | ✅ 📦 | | |
|
|
91
|
+
| [valid-bugs](docs/rules/valid-bugs.md) | Enforce that the `bugs` property is valid. | ✅ 📦 | | |
|
|
92
|
+
| [valid-bundleDependencies](docs/rules/valid-bundleDependencies.md) | Enforce that the `bundleDependencies` (also: `bundledDependencies`) property is valid. | ✅ 📦 | | |
|
|
93
|
+
| [valid-config](docs/rules/valid-config.md) | Enforce that the `config` property is valid. | ✅ 📦 | | |
|
|
94
|
+
| [valid-contributors](docs/rules/valid-contributors.md) | Enforce that the `contributors` property is valid. | ✅ 📦 | | |
|
|
95
|
+
| [valid-cpu](docs/rules/valid-cpu.md) | Enforce that the `cpu` property is valid. | ✅ 📦 | | |
|
|
96
|
+
| [valid-dependencies](docs/rules/valid-dependencies.md) | Enforce that the `dependencies` property is valid. | ✅ 📦 | | |
|
|
97
|
+
| [valid-description](docs/rules/valid-description.md) | Enforce that the `description` property is valid. | ✅ 📦 | | |
|
|
98
|
+
| [valid-devDependencies](docs/rules/valid-devDependencies.md) | Enforce that the `devDependencies` property is valid. | ✅ 📦 | | |
|
|
99
|
+
| [valid-devEngines](docs/rules/valid-devEngines.md) | Enforce that the `devEngines` property is valid. | ✅ 📦 | | |
|
|
100
|
+
| [valid-directories](docs/rules/valid-directories.md) | Enforce that the `directories` property is valid. | ✅ 📦 | | |
|
|
101
|
+
| [valid-engines](docs/rules/valid-engines.md) | Enforce that the `engines` property is valid. | ✅ 📦 | | |
|
|
102
|
+
| [valid-exports](docs/rules/valid-exports.md) | Enforce that the `exports` property is valid. | ✅ 📦 | | |
|
|
103
|
+
| [valid-files](docs/rules/valid-files.md) | Enforce that the `files` property is valid. | ✅ 📦 | | |
|
|
104
|
+
| [valid-funding](docs/rules/valid-funding.md) | Enforce that the `funding` property is valid. | ✅ 📦 | | |
|
|
105
|
+
| [valid-gypfile](docs/rules/valid-gypfile.md) | Enforce that the `gypfile` property is valid. | ✅ 📦 | | |
|
|
106
|
+
| [valid-homepage](docs/rules/valid-homepage.md) | Enforce that the `homepage` property is valid. | ✅ 📦 | | |
|
|
107
|
+
| [valid-keywords](docs/rules/valid-keywords.md) | Enforce that the `keywords` property is valid. | ✅ 📦 | | |
|
|
108
|
+
| [valid-libc](docs/rules/valid-libc.md) | Enforce that the `libc` property is valid. | ✅ 📦 | | |
|
|
109
|
+
| [valid-license](docs/rules/valid-license.md) | Enforce that the `license` property is valid. | ✅ 📦 | | |
|
|
110
|
+
| [valid-main](docs/rules/valid-main.md) | Enforce that the `main` property is valid. | ✅ 📦 | | |
|
|
111
|
+
| [valid-man](docs/rules/valid-man.md) | Enforce that the `man` property is valid. | ✅ 📦 | | |
|
|
112
|
+
| [valid-module](docs/rules/valid-module.md) | Enforce that the `module` property is valid. | ✅ 📦 | | |
|
|
113
|
+
| [valid-name](docs/rules/valid-name.md) | Enforce that package names are valid npm package names | ✅ 📦 | | |
|
|
114
|
+
| [valid-optionalDependencies](docs/rules/valid-optionalDependencies.md) | Enforce that the `optionalDependencies` property is valid. | ✅ 📦 | | |
|
|
115
|
+
| [valid-os](docs/rules/valid-os.md) | Enforce that the `os` property is valid. | ✅ 📦 | | |
|
|
116
|
+
| [valid-packageManager](docs/rules/valid-packageManager.md) | Enforce that the `packageManager` property is valid. | ✅ 📦 | | |
|
|
117
|
+
| [valid-peerDependencies](docs/rules/valid-peerDependencies.md) | Enforce that the `peerDependencies` property is valid. | ✅ 📦 | | |
|
|
118
|
+
| [valid-peerDependenciesMeta](docs/rules/valid-peerDependenciesMeta.md) | Enforce that the `peerDependenciesMeta` property is valid. | ✅ 📦 | | |
|
|
119
|
+
| [valid-peerDependenciesMeta-relationship](docs/rules/valid-peerDependenciesMeta-relationship.md) | Enforces that any dependencies declared in `peerDependenciesMeta` are also defined in the package's `peerDependencies`. | ✅ 📦 | | 💡 |
|
|
120
|
+
| [valid-private](docs/rules/valid-private.md) | Enforce that the `private` property is valid. | ✅ 📦 | | |
|
|
121
|
+
| [valid-publishConfig](docs/rules/valid-publishConfig.md) | Enforce that the `publishConfig` property is valid. | ✅ 📦 | | |
|
|
122
|
+
| [valid-repository](docs/rules/valid-repository.md) | Enforce that the `repository` property is valid. | ✅ 📦 | | |
|
|
123
|
+
| [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 | ✅ 📦 | | 💡 |
|
|
124
|
+
| [valid-scripts](docs/rules/valid-scripts.md) | Enforce that the `scripts` property is valid. | ✅ 📦 | | |
|
|
125
|
+
| [valid-sideEffects](docs/rules/valid-sideEffects.md) | Enforce that the `sideEffects` property is valid. | ✅ 📦 | | |
|
|
126
|
+
| [valid-type](docs/rules/valid-type.md) | Enforce that the `type` property is valid. | ✅ 📦 | | |
|
|
127
|
+
| [valid-version](docs/rules/valid-version.md) | Enforce that package versions are valid semver specifiers | ✅ 📦 | | |
|
|
128
|
+
| [valid-workspaces](docs/rules/valid-workspaces.md) | Enforce that the `workspaces` property is valid. | ✅ 📦 | | |
|
|
124
129
|
|
|
125
130
|
<!-- end auto-generated rules list -->
|
|
126
131
|
<!-- prettier-ignore-end -->
|
package/lib/plugin.mjs
CHANGED
|
@@ -15,9 +15,10 @@ import { rule as rule$12 } from "./rules/sort-collections.mjs";
|
|
|
15
15
|
import { rule as rule$13 } from "./rules/specify-peers-locally.mjs";
|
|
16
16
|
import { rule as rule$14 } from "./rules/unique-dependencies.mjs";
|
|
17
17
|
import { rule as rule$15 } from "./rules/valid-name.mjs";
|
|
18
|
+
import { rule as rule$16 } from "./rules/valid-peerDependenciesMeta-relationship.mjs";
|
|
18
19
|
import { rules as rules$2 } from "./rules/valid-properties.mjs";
|
|
19
|
-
import { rule as rule$
|
|
20
|
-
import { rule as rule$
|
|
20
|
+
import { rule as rule$17 } from "./rules/valid-repository-directory.mjs";
|
|
21
|
+
import { rule as rule$18 } from "./rules/valid-version.mjs";
|
|
21
22
|
import { createRequire } from "node:module";
|
|
22
23
|
import * as parserJsonc from "jsonc-eslint-parser";
|
|
23
24
|
//#region src/plugin.ts
|
|
@@ -41,8 +42,9 @@ const rules = {
|
|
|
41
42
|
"unique-dependencies": rule$14,
|
|
42
43
|
...rules$2,
|
|
43
44
|
"valid-name": rule$15,
|
|
44
|
-
"valid-
|
|
45
|
-
"valid-
|
|
45
|
+
"valid-peerDependenciesMeta-relationship": rule$16,
|
|
46
|
+
"valid-repository-directory": rule$17,
|
|
47
|
+
"valid-version": rule$18
|
|
46
48
|
};
|
|
47
49
|
const recommendedRules = { ...Object.fromEntries(Object.entries(rules).filter(([, rule]) => rule.meta.docs?.recommended).map(([name]) => ["package-json/" + name, "error"])) };
|
|
48
50
|
const recommendedPublishableRules = {
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createRule } from "../createRule.mjs";
|
|
2
|
+
import { isJSONStringLiteral } from "../utils/predicates.mjs";
|
|
3
|
+
import { fixRemoveObjectProperty } from "eslint-fix-utils";
|
|
4
|
+
//#region src/rules/valid-peerDependenciesMeta-relationship.ts
|
|
5
|
+
const rule = createRule({
|
|
6
|
+
create(context) {
|
|
7
|
+
const peerDependencies = /* @__PURE__ */ new Set();
|
|
8
|
+
const peerDependenciesMeta = /* @__PURE__ */ new Map();
|
|
9
|
+
return {
|
|
10
|
+
"Program > JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.value=peerDependencies]"(node) {
|
|
11
|
+
if (node.value.type === "JSONObjectExpression") {
|
|
12
|
+
for (const property of node.value.properties) if (isJSONStringLiteral(property.key)) peerDependencies.add(property.key.value);
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"Program > JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.value=peerDependenciesMeta]"(node) {
|
|
16
|
+
if (node.value.type === "JSONObjectExpression") {
|
|
17
|
+
for (const property of node.value.properties) if (isJSONStringLiteral(property.key)) peerDependenciesMeta.set(property.key.value, property);
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"Program:exit"() {
|
|
21
|
+
for (const [dependencyName, propertyNode] of peerDependenciesMeta) if (!peerDependencies.has(dependencyName)) context.report({
|
|
22
|
+
data: { dependencyName },
|
|
23
|
+
messageId: "unnecessaryPeerDependency",
|
|
24
|
+
node: propertyNode,
|
|
25
|
+
suggest: [{
|
|
26
|
+
fix: fixRemoveObjectProperty(context, propertyNode),
|
|
27
|
+
messageId: "removePeerDependencyMeta"
|
|
28
|
+
}]
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
meta: {
|
|
34
|
+
docs: {
|
|
35
|
+
category: "Best Practices",
|
|
36
|
+
description: "Enforces that any dependencies declared in `peerDependenciesMeta` are also defined in the package's `peerDependencies`.",
|
|
37
|
+
recommended: true
|
|
38
|
+
},
|
|
39
|
+
hasSuggestions: true,
|
|
40
|
+
messages: {
|
|
41
|
+
removePeerDependencyMeta: "Remove from `peerDependenciesMeta`.",
|
|
42
|
+
unnecessaryPeerDependency: "Dependency '{{ dependencyName }}' is declared in `peerDependenciesMeta` but not in `peerDependencies`."
|
|
43
|
+
},
|
|
44
|
+
schema: [],
|
|
45
|
+
type: "problem"
|
|
46
|
+
},
|
|
47
|
+
name: "valid-peerDependenciesMeta-relationship"
|
|
48
|
+
});
|
|
49
|
+
//#endregion
|
|
50
|
+
export { rule };
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { createSimpleValidPropertyRule } from "../utils/createSimpleValidPropertyRule.mjs";
|
|
2
|
-
import { validateAuthor, validateBin, validateBugs, validateBundleDependencies, validateConfig, validateContributors, validateCpu, validateDependencies, validateDescription, validateDevEngines, validateDirectories, validateEngines, validateExports, validateFiles, validateFunding, validateHomepage, validateKeywords, validateLicense, validateMain, validateMan, validateOs, validatePackageManager, validatePrivate, validatePublishConfig, validateRepository, validateScripts, validateSideEffects, validateType, validateWorkspaces } from "package-json-validator";
|
|
2
|
+
import { validateAuthor, validateBin, validateBrowser, validateBugs, validateBundleDependencies, validateConfig, validateContributors, validateCpu, validateDependencies, validateDescription, validateDevEngines, validateDirectories, validateEngines, validateExports, validateFiles, validateFunding, validateGypfile, validateHomepage, validateKeywords, validateLibc, validateLicense, validateMain, validateMan, validateOs, validatePackageManager, validatePeerDependenciesMeta, validatePrivate, validatePublishConfig, validateRepository, validateScripts, validateSideEffects, validateType, validateWorkspaces } from "package-json-validator";
|
|
3
3
|
//#region src/rules/valid-properties.ts
|
|
4
4
|
const properties = [
|
|
5
5
|
["author", validateAuthor],
|
|
6
6
|
["bin", validateBin],
|
|
7
|
+
["browser", validateBrowser],
|
|
7
8
|
["bugs", validateBugs],
|
|
8
9
|
["bundleDependencies", {
|
|
9
10
|
aliases: ["bundledDependencies"],
|
|
@@ -21,8 +22,10 @@ const properties = [
|
|
|
21
22
|
["exports", validateExports],
|
|
22
23
|
["files", validateFiles],
|
|
23
24
|
["funding", validateFunding],
|
|
25
|
+
["gypfile", validateGypfile],
|
|
24
26
|
["homepage", validateHomepage],
|
|
25
27
|
["keywords", validateKeywords],
|
|
28
|
+
["libc", validateLibc],
|
|
26
29
|
["license", validateLicense],
|
|
27
30
|
["main", validateMain],
|
|
28
31
|
["man", validateMan],
|
|
@@ -31,6 +34,7 @@ const properties = [
|
|
|
31
34
|
["os", validateOs],
|
|
32
35
|
["packageManager", validatePackageManager],
|
|
33
36
|
["peerDependencies", validateDependencies],
|
|
37
|
+
["peerDependenciesMeta", validatePeerDependenciesMeta],
|
|
34
38
|
["private", validatePrivate],
|
|
35
39
|
["publishConfig", validatePublishConfig],
|
|
36
40
|
["repository", validateRepository],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-package-json",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.6",
|
|
4
4
|
"description": "Rules for consistent, readable, and valid package.json files. 🗂️",
|
|
5
5
|
"homepage": "https://github.com/michaelfaith/eslint-plugin-package-json#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"detect-newline": "^4.0.1",
|
|
51
51
|
"eslint-fix-utils": "~0.4.1",
|
|
52
52
|
"jsonc-eslint-parser": "^3.1.0",
|
|
53
|
-
"package-json-validator": "^1.
|
|
53
|
+
"package-json-validator": "^1.5.0",
|
|
54
54
|
"semver": "^7.7.3",
|
|
55
55
|
"sort-object-keys": "^2.0.0",
|
|
56
56
|
"sort-package-json": "^3.4.0",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"husky": "9.1.7",
|
|
85
85
|
"jiti": "2.6.1",
|
|
86
86
|
"json-schema-to-ts": "3.1.1",
|
|
87
|
-
"knip": "6.
|
|
87
|
+
"knip": "6.7.0",
|
|
88
88
|
"lint-staged": "16.4.0",
|
|
89
89
|
"prettier": "3.8.0",
|
|
90
90
|
"prettier-plugin-curly": "0.4.0",
|