Skip to content

Commit 9879219

Browse files
committed
feat!: refactor plugin export to conform to latest conventions
This change refactors the plugin's exports to conform to the latest standards recommended by the ESLint team. The plugin is still the default export, but it now has configs attached to it as well, but the legacy rc-based config (now called `'legacy-recommended'`) and the `recommended` flat-config. For users of the flat config, you'll need to make the following changes. ```js - import packageJson from "eslint-plugin-package-json/configs/recommended"; + import packageJson from "eslint-plugin-package-json"; export default [ - packageJson, + packageJson.configs.recommended, ]; ``` For users of the legacy config, you'll need to make the following changes. ```js module.exports = { overrides: [ { - extends: ["plugin:package-json/recommended"], + extends: ["plugin:package-json/legacy-recommended"], files: ["package.json"], parser: "jsonc-eslint-parser", }, ], }; ``` BREAKING CHANGE
1 parent b2cebc2 commit 9879219

8 files changed

+41
-60
lines changed

.eslint-doc-generatorrc.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/** @type {import('eslint-doc-generator').GenerateOptions} */
2+
const config = {
3+
ignoreConfig: ["legacy-recommended"],
4+
};
5+
6+
module.exports = config;

README.md

+6-9
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,24 @@ This plugin's recommended configuration enables its rules on `**/package.json` f
3434
In your ESLint configuration file:
3535

3636
```ts
37-
import packageJson from "eslint-plugin-package-json/configs/recommended";
37+
import packageJson from "eslint-plugin-package-json";
3838

3939
export default [
4040
// your other ESLint configurations
41-
packageJson,
41+
packageJson.configs.recommended,
4242
];
4343
```
4444

4545
If you want to override the recommended rules:
4646

4747
```ts
48-
import packageJson from "eslint-plugin-package-json/configs/recommended";
48+
import packageJson from "eslint-plugin-package-json";
4949

5050
export default [
5151
// your other ESLint configurations
52+
packageJson.configs.recommended,
5253
{
53-
...packageJson,
5454
rules: {
55-
...packageJson.rules,
5655
"package-json/valid-package-definition": "off",
5756
},
5857
},
@@ -75,10 +74,9 @@ Add an override to your ESLint configuration file that specifies `jsonc-eslint-p
7574
module.exports = {
7675
overrides: [
7776
{
78-
extends: ["plugin:package-json/recommended"],
77+
extends: ["plugin:package-json/legacy-recommended"],
7978
files: ["package.json"],
8079
parser: "jsonc-eslint-parser",
81-
plugins: ["package-json"],
8280
},
8381
],
8482
};
@@ -91,10 +89,9 @@ See [ESLint's _Configure Rules_ guide](https://eslint.org/docs/latest/use/config
9189
module.exports = {
9290
overrides: [
9391
{
94-
extends: ["plugin:package-json/recommended"],
92+
extends: ["plugin:package-json/legacy-recommended"],
9593
files: ["package.json"],
9694
parser: "jsonc-eslint-parser",
97-
plugins: ["package-json"],
9895
rules: {
9996
"package-json/valid-package-definition": "error",
10097
},

eslint.config.js

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ module.exports = tseslint.config(
4444
projectService: {
4545
allowDefaultProject: [
4646
"*.config.*s",
47+
".eslint-doc-generatorrc.js",
4748
"bin/*.js",
4849
"src/tests/*.js",
4950
],

package.json

-8
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,6 @@
2121
},
2222
"import": "./lib/index.mjs",
2323
"require": "./lib/index.js"
24-
},
25-
"./configs/recommended": {
26-
"types": {
27-
"import": "./lib/configs/recommended.d.mts",
28-
"require": "./lib/configs/recommended.d.ts"
29-
},
30-
"import": "./lib/configs/recommended.mjs",
31-
"require": "./lib/configs/recommended.js"
3224
}
3325
},
3426
"main": "./lib/index.js",

src/configs/recommended.test.ts

-10
This file was deleted.

src/configs/recommended.ts

-19
This file was deleted.

src/index.ts

+2-8
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
1-
import { plugin, recommendedRuleSettings } from "./plugin.js";
1+
import { plugin } from "./plugin.js";
22

33
export const rules = plugin.rules;
4-
5-
export const configs = {
6-
recommended: {
7-
plugins: ["package-json"],
8-
rules: recommendedRuleSettings,
9-
},
10-
};
4+
export const configs = plugin.configs;
115

126
export default plugin;

src/plugin.ts

+26-6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import * as parserJsonc from "jsonc-eslint-parser";
12
import { createRequire } from "node:module";
23

34
import type { PackageJsonRuleModule } from "./createRule.js";
@@ -51,16 +52,35 @@ const rules: Record<string, PackageJsonRuleModule> = {
5152
},
5253
};
5354

55+
const recommendedRules = Object.fromEntries(
56+
Object.entries(rules)
57+
.filter(([, rule]) => rule.meta.docs?.recommended)
58+
.map(([name]) => ["package-json/" + name, "error" as const]),
59+
);
60+
5461
export const plugin = {
62+
configs: {
63+
"legacy-recommended": {
64+
plugins: ["package-json"],
65+
rules: recommendedRules,
66+
},
67+
recommended: {
68+
files: ["**/package.json"],
69+
languageOptions: {
70+
parser: parserJsonc,
71+
},
72+
name: "package-json/recommended",
73+
plugins: {
74+
get "package-json"() {
75+
return plugin;
76+
},
77+
},
78+
rules: recommendedRules,
79+
},
80+
},
5581
meta: {
5682
name,
5783
version,
5884
},
5985
rules,
6086
};
61-
62-
export const recommendedRuleSettings = Object.fromEntries(
63-
Object.entries(rules)
64-
.filter(([, rule]) => rule.meta.docs?.recommended)
65-
.map(([name]) => ["package-json/" + name, "error" as const]),
66-
);

0 commit comments

Comments
 (0)