eslint-plugin-package-jsonc 1.1.0 → 2.0.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/README.md
CHANGED
|
@@ -21,9 +21,10 @@ import packageJsonc from "eslint-plugin-package-jsonc";
|
|
|
21
21
|
export default [
|
|
22
22
|
// Use eslint-plugin-jsonc to parse JSONC files (handles comments, trailing commas)
|
|
23
23
|
...jsonc.configs["flat/recommended-with-jsonc"],
|
|
24
|
-
// Add package-jsonc/sync rule for package.jsonc
|
|
24
|
+
// Add package-jsonc/sync rule for package.jsonc files
|
|
25
25
|
{
|
|
26
|
-
|
|
26
|
+
// Use "**/package.jsonc" if you have packages in subdirectories (monorepo)
|
|
27
|
+
files: ["package.jsonc"],
|
|
27
28
|
plugins: {
|
|
28
29
|
"package-jsonc": packageJsonc,
|
|
29
30
|
},
|
|
@@ -34,31 +35,31 @@ export default [
|
|
|
34
35
|
];
|
|
35
36
|
```
|
|
36
37
|
|
|
38
|
+
> **Note:** Use `"**/package.jsonc"` if you have packages in subdirectories (monorepo).
|
|
39
|
+
|
|
37
40
|
## Rule: `package-jsonc/sync`
|
|
38
41
|
|
|
39
42
|
This rule ensures that `package.jsonc` is the single source of truth for your package configuration.
|
|
40
43
|
|
|
41
44
|
It enforces the following:
|
|
42
45
|
|
|
43
|
-
1. **
|
|
44
|
-
2. **
|
|
45
|
-
3. **Inconsistent `package.json`**: If `package.jsonc` is valid, the rule compares it with `package.json`. If `package.json` is invalid, or inconsistent with `package.jsonc`, the rule reports an error. **This is auto-fixable.**
|
|
46
|
+
1. **Invalid `package.jsonc`**: If `package.jsonc` contains invalid JSON (syntax errors), the rule reports an error. This is not auto-fixable.
|
|
47
|
+
2. **Inconsistent `package.json`**: If `package.jsonc` is valid, the rule compares it with `package.json`. If `package.json` is missing, invalid, or inconsistent with `package.jsonc`, the rule reports an error. **This is auto-fixable.**
|
|
46
48
|
|
|
47
49
|
### Fix Mode
|
|
48
50
|
|
|
49
51
|
When running ESLint with the `--fix` flag, the plugin will automatically generate or update `package.json` to match `package.jsonc`.
|
|
50
52
|
|
|
51
53
|
```bash
|
|
52
|
-
eslint package.jsonc
|
|
54
|
+
eslint package.jsonc --fix
|
|
53
55
|
```
|
|
54
56
|
|
|
55
57
|
## How It Works
|
|
56
58
|
|
|
57
|
-
1. When linting `package.
|
|
58
|
-
2.
|
|
59
|
-
3. If `package.
|
|
60
|
-
4.
|
|
61
|
-
5. In fix mode, it writes the normalized JSON from `package.jsonc` to `package.json`.
|
|
59
|
+
1. When linting `package.jsonc`, it uses `jsonc-eslint-parser` to parse the content.
|
|
60
|
+
2. If `package.jsonc` is valid, it compares the parsed content with `package.json`.
|
|
61
|
+
3. If they differ (or `package.json` is missing/invalid), it reports an error.
|
|
62
|
+
4. In fix mode, it writes the normalized JSON from `package.jsonc` to `package.json`.
|
|
62
63
|
|
|
63
64
|
## Why Use This?
|
|
64
65
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-jsonc.d.ts","sourceRoot":"","sources":["../../src/rules/package-jsonc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAiDnC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"package-jsonc.d.ts","sourceRoot":"","sources":["../../src/rules/package-jsonc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAiDnC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA+FhB,CAAC;AAGF,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,eAAe,IAAI,CAAC"}
|
|
@@ -52,7 +52,6 @@ const rule = {
|
|
|
52
52
|
fixable: "code",
|
|
53
53
|
schema: [],
|
|
54
54
|
messages: {
|
|
55
|
-
missingPackageJsonc: "package.jsonc does not exist.",
|
|
56
55
|
invalidPackageJsonc: "package.jsonc is invalid.",
|
|
57
56
|
inconsistentPackageJson: "package.json is inconsistent with package.jsonc. Run 'npx eslint package.jsonc --fix' to update it.",
|
|
58
57
|
},
|
|
@@ -60,25 +59,14 @@ const rule = {
|
|
|
60
59
|
create(context) {
|
|
61
60
|
const { filename } = context;
|
|
62
61
|
const basename = path.basename(filename);
|
|
63
|
-
|
|
62
|
+
// Only process package.jsonc files
|
|
63
|
+
if (basename !== "package.jsonc") {
|
|
64
64
|
return {};
|
|
65
65
|
}
|
|
66
66
|
const directory = path.dirname(filename);
|
|
67
|
-
const packageJsoncPath = path.join(directory, "package.jsonc");
|
|
68
67
|
const packageJsonPath = path.join(directory, "package.json");
|
|
69
68
|
return {
|
|
70
69
|
Program(node) {
|
|
71
|
-
// If we are on package.json, we only check if package.jsonc exists
|
|
72
|
-
if (basename === "package.json") {
|
|
73
|
-
if (!fs.existsSync(packageJsoncPath)) {
|
|
74
|
-
context.report({
|
|
75
|
-
node,
|
|
76
|
-
messageId: "missingPackageJsonc",
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
// If we are on package.jsonc, we perform the full check
|
|
82
70
|
const { sourceCode } = context;
|
|
83
71
|
const jsoncContent = sourceCode.getText();
|
|
84
72
|
let jsoncData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-jsonc.js","sourceRoot":"","sources":["../../src/rules/package-jsonc.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,+EAA+E;AAC/E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB;;;;;GAKG;AACH,SAAS,UAAU,CAAC,OAAe;IAC/B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,kBAAkB,CAAC,GAAG,CAA4B,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,MAAe;IACtC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,SAAS,QAAQ,CAAC,eAAuB,EAAE,eAAuB;IAC9D,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAA4B,CAAC;QACvE,OAAO,eAAe,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACL,mCAAmC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,IAAI,GAAoB;IAC1B,IAAI,EAAE;QACF,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACF,WAAW,EAAE,sDAAsD;YACnE,QAAQ,EAAE,iBAAiB;YAC3B,WAAW,EAAE,IAAI;SACpB;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACN,mBAAmB,EAAE
|
|
1
|
+
{"version":3,"file":"package-jsonc.js","sourceRoot":"","sources":["../../src/rules/package-jsonc.ts"],"names":[],"mappings":"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"}
|