eslint-plugin-package-json 0.52.0 → 0.53.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.
Files changed (55) hide show
  1. package/CHANGELOG.md +14 -2
  2. package/lib/createRule.d.ts +28 -28
  3. package/lib/createRule.js +18 -12
  4. package/lib/index.d.ts +33 -35
  5. package/lib/index.js +6 -6
  6. package/lib/plugin.d.ts +33 -34
  7. package/lib/plugin.js +62 -80
  8. package/lib/rules/no-empty-fields.d.ts +6 -11
  9. package/lib/rules/no-empty-fields.js +80 -112
  10. package/lib/rules/no-redundant-files.d.ts +5 -10
  11. package/lib/rules/no-redundant-files.js +93 -136
  12. package/lib/rules/order-properties.d.ts +6 -11
  13. package/lib/rules/order-properties.js +92 -116
  14. package/lib/rules/repository-shorthand.d.ts +6 -11
  15. package/lib/rules/repository-shorthand.js +79 -112
  16. package/lib/rules/require-properties.d.ts +7 -12
  17. package/lib/rules/require-properties.js +31 -27
  18. package/lib/rules/restrict-dependency-ranges.d.ts +9 -14
  19. package/lib/rules/restrict-dependency-ranges.js +137 -189
  20. package/lib/rules/sort-collections.d.ts +5 -10
  21. package/lib/rules/sort-collections.js +71 -124
  22. package/lib/rules/unique-dependencies.d.ts +5 -10
  23. package/lib/rules/unique-dependencies.js +58 -82
  24. package/lib/rules/valid-bin.d.ts +6 -11
  25. package/lib/rules/valid-bin.js +59 -78
  26. package/lib/rules/valid-local-dependency.d.ts +5 -10
  27. package/lib/rules/valid-local-dependency.js +49 -57
  28. package/lib/rules/valid-name.d.ts +5 -10
  29. package/lib/rules/valid-name.js +41 -48
  30. package/lib/rules/valid-package-definition.d.ts +6 -11
  31. package/lib/rules/valid-package-definition.js +41 -50
  32. package/lib/rules/valid-properties.d.ts +7 -7
  33. package/lib/rules/valid-properties.js +33 -55
  34. package/lib/rules/valid-repository-directory.d.ts +5 -10
  35. package/lib/rules/valid-repository-directory.js +65 -80
  36. package/lib/rules/valid-version.d.ts +5 -10
  37. package/lib/rules/valid-version.js +35 -36
  38. package/lib/types/estree.d.ts +8 -0
  39. package/lib/utils/createSimpleRequirePropertyRule.d.ts +19 -18
  40. package/lib/utils/createSimpleRequirePropertyRule.js +48 -53
  41. package/lib/utils/createSimpleValidPropertyRule.d.ts +6 -8
  42. package/lib/utils/createSimpleValidPropertyRule.js +45 -39
  43. package/lib/utils/findPropertyWithKeyValue.d.ts +6 -5
  44. package/lib/utils/findPropertyWithKeyValue.js +5 -6
  45. package/lib/utils/formatErrors.d.ts +3 -2
  46. package/lib/utils/formatErrors.js +11 -7
  47. package/lib/utils/isPackageJson.d.ts +3 -2
  48. package/lib/utils/isPackageJson.js +4 -3
  49. package/lib/utils/predicates.d.ts +4 -3
  50. package/lib/utils/predicates.js +6 -6
  51. package/package.json +8 -8
  52. package/lib/tests/rules/ruleTester.d.ts +0 -15
  53. package/lib/tests/rules/ruleTester.js +0 -25
  54. package/lib/types/estree.d.d.ts +0 -7
  55. package/lib/types/estree.d.js +0 -0
package/CHANGELOG.md CHANGED
@@ -1,11 +1,23 @@
1
1
  # Changelog
2
2
 
3
- # [0.52.0](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/compare/v0.51.0...v0.52.0) (2025-08-07)
3
+ # [0.53.0](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/compare/v0.52.1...v0.53.0) (2025-08-13)
4
+
5
+
6
+ ### Features
7
+
8
+ * add docs url to all rules ([#1218](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/1218)) ([d456b13](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commit/d456b13d2c30e71d11294a315282859c66a4b1b7)), closes [#1217](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/1217)
4
9
 
10
+ ## [0.52.1](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/compare/v0.52.0...v0.52.1) (2025-08-07)
11
+
12
+ ### Bug Fixes
13
+
14
+ - **sort-collections:** align sorting of scripts with `prettier-plugin-packagejson` ([#1203](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/1203)) ([1f5c590](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commit/1f5c590adc846194766127ab962f8efa72942d06)), closes [#753](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/753)
15
+
16
+ # [0.52.0](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/compare/v0.51.0...v0.52.0) (2025-08-07)
5
17
 
6
18
  ### Features
7
19
 
8
- * **valid-description:** add new rule for validating `description` ([#1204](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/1204)) ([4acb265](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commit/4acb26563c0cacb5834c8b53dae68fb291c0ffd1)), closes [#823](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/823)
20
+ - **valid-description:** add new rule for validating `description` ([#1204](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/1204)) ([4acb265](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commit/4acb26563c0cacb5834c8b53dae68fb291c0ffd1)), closes [#823](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/823)
9
21
 
10
22
  # [0.51.0](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/compare/v0.50.0...v0.51.0) (2025-08-05)
11
23
 
@@ -1,45 +1,45 @@
1
- import * as ESTree from 'estree';
2
- import { AST as AST$1, Rule, SourceCode } from 'eslint';
3
- import { AST, RuleListener } from 'jsonc-eslint-parser';
1
+ import { AST, RuleListener } from "jsonc-eslint-parser";
2
+ import * as ESTree from "estree";
3
+ import { AST as AST$1, Rule, SourceCode } from "eslint";
4
4
 
5
+ //#region src/createRule.d.ts
5
6
  type JsonAstBodyExpression = ESTree.Expression & {
6
- properties: JsonAstBodyProperty[];
7
+ properties: JsonAstBodyProperty[];
7
8
  };
8
9
  type JsonAstBodyProperty = AST.JSONProperty & {
9
- value: string;
10
+ value: string;
10
11
  };
11
12
  interface JsonAstBodyStatement extends ESTree.ExpressionStatement {
12
- expression: JsonAstBodyExpression;
13
+ expression: JsonAstBodyExpression;
13
14
  }
14
15
  interface PackageJsonAst extends AST$1.Program {
15
- body: [JsonAstBodyStatement];
16
+ body: [JsonAstBodyStatement];
16
17
  }
17
18
  interface PackageJsonPluginSettings {
18
- /**
19
- * Whether `require-*` rules, if used, should enforce the presence of
20
- * the corresponding property *in package.json files with `"private": true`*.
21
- *
22
- * If not specified, it will not enforce the presence only of `name` and `version` properties.
23
- */
24
- enforceForPrivate?: boolean;
19
+ /**
20
+ * Whether `require-*` rules, if used, should enforce the presence of
21
+ * the corresponding property *in package.json files with `"private": true`*.
22
+ *
23
+ * If not specified, it will not enforce the presence only of `name` and `version` properties.
24
+ */
25
+ enforceForPrivate?: boolean;
25
26
  }
26
27
  interface PackageJsonRuleContext<Options extends unknown[] = unknown[]> extends Rule.RuleContext {
27
- options: Options;
28
- settings: {
29
- packageJson?: PackageJsonPluginSettings;
30
- };
31
- sourceCode: PackageJsonSourceCode;
28
+ options: Options;
29
+ settings: {
30
+ packageJson?: PackageJsonPluginSettings;
31
+ };
32
+ sourceCode: PackageJsonSourceCode;
32
33
  }
33
34
  interface PackageJsonRuleModule<Options extends unknown[] = unknown[]> {
34
- create(context: PackageJsonRuleContext<Options>): RuleListener;
35
- meta: Rule.RuleMetaData;
35
+ create(context: PackageJsonRuleContext<Options>): RuleListener;
36
+ meta: Rule.RuleMetaData;
36
37
  }
37
38
  interface PackageJsonSourceCode extends SourceCode {
38
- ast: PackageJsonAst;
39
+ ast: PackageJsonAst;
39
40
  }
40
- declare function createRule<Options extends unknown[]>(rule: PackageJsonRuleModule<Options>): {
41
- create(context: PackageJsonRuleContext<Options>): RuleListener;
42
- meta: Rule.RuleMetaData;
43
- };
44
-
45
- export { type JsonAstBodyExpression, type JsonAstBodyProperty, type JsonAstBodyStatement, type PackageJsonAst, type PackageJsonPluginSettings, type PackageJsonRuleContext, type PackageJsonRuleModule, type PackageJsonSourceCode, createRule };
41
+ declare function createRule<Options extends unknown[]>(rule: PackageJsonRuleModule<Options> & {
42
+ name: string;
43
+ }): PackageJsonRuleModule<Options>;
44
+ //#endregion
45
+ export { JsonAstBodyExpression, JsonAstBodyProperty, JsonAstBodyStatement, PackageJsonAst, PackageJsonPluginSettings, PackageJsonRuleContext, PackageJsonRuleModule, PackageJsonSourceCode, createRule };
package/lib/createRule.js CHANGED
@@ -1,15 +1,21 @@
1
1
  import { isPackageJson } from "./utils/isPackageJson.js";
2
+
3
+ //#region src/createRule.ts
2
4
  function createRule(rule) {
3
- return {
4
- ...rule,
5
- create(context) {
6
- if (!isPackageJson(context.filename)) {
7
- return {};
8
- }
9
- return rule.create(context);
10
- }
11
- };
5
+ return {
6
+ create(context) {
7
+ if (!isPackageJson(context.filename)) return {};
8
+ return rule.create(context);
9
+ },
10
+ meta: {
11
+ ...rule.meta,
12
+ docs: {
13
+ ...rule.meta.docs,
14
+ url: `https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/${rule.name}.md`
15
+ }
16
+ }
17
+ };
12
18
  }
13
- export {
14
- createRule
15
- };
19
+
20
+ //#endregion
21
+ export { createRule };
package/lib/index.d.ts CHANGED
@@ -1,42 +1,40 @@
1
- import * as jsonc_eslint_parser from 'jsonc-eslint-parser';
2
- import { PackageJsonRuleModule } from './createRule.js';
3
- export { PackageJsonPluginSettings } from './createRule.js';
4
- import { plugin } from './plugin.js';
5
- import 'estree';
6
- import 'eslint';
1
+ import { PackageJsonPluginSettings, PackageJsonRuleModule } from "./createRule.js";
2
+ import { plugin } from "./plugin.js";
3
+ import * as jsonc_eslint_parser0 from "jsonc-eslint-parser";
7
4
 
5
+ //#region src/index.d.ts
8
6
  declare const rules: Record<string, PackageJsonRuleModule<unknown[]>>;
9
7
  declare const configs: {
10
- "legacy-recommended": {
11
- plugins: string[];
12
- rules: {
13
- "package-json/valid-package-definition": ["error", {
14
- ignoreProperties: string[];
15
- }];
16
- };
8
+ "legacy-recommended": {
9
+ plugins: string[];
10
+ rules: {
11
+ "package-json/valid-package-definition": ["error", {
12
+ ignoreProperties: string[];
13
+ }];
17
14
  };
18
- recommended: {
19
- files: string[];
20
- languageOptions: {
21
- parser: typeof jsonc_eslint_parser;
22
- };
23
- name: string;
24
- plugins: {
25
- readonly "package-json": {
26
- configs: /*elided*/ any;
27
- meta: {
28
- name: string;
29
- version: string;
30
- };
31
- rules: Record<string, PackageJsonRuleModule<unknown[]>>;
32
- };
33
- };
34
- rules: {
35
- "package-json/valid-package-definition": ["error", {
36
- ignoreProperties: string[];
37
- }];
15
+ };
16
+ recommended: {
17
+ files: string[];
18
+ languageOptions: {
19
+ parser: typeof jsonc_eslint_parser0;
20
+ };
21
+ name: string;
22
+ plugins: {
23
+ readonly "package-json": {
24
+ configs: /*elided*/any;
25
+ meta: {
26
+ name: string;
27
+ version: string;
38
28
  };
29
+ rules: Record<string, PackageJsonRuleModule<unknown[]>>;
30
+ };
31
+ };
32
+ rules: {
33
+ "package-json/valid-package-definition": ["error", {
34
+ ignoreProperties: string[];
35
+ }];
39
36
  };
37
+ };
40
38
  };
41
-
42
- export { configs, plugin as default, rules };
39
+ //#endregion
40
+ export { type PackageJsonPluginSettings, configs, plugin as default, rules };
package/lib/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { plugin } from "./plugin.js";
2
+
3
+ //#region src/index.ts
2
4
  const rules = plugin.rules;
3
5
  const configs = plugin.configs;
4
- var index_default = plugin;
5
- export {
6
- configs,
7
- index_default as default,
8
- rules
9
- };
6
+ var src_default = plugin;
7
+
8
+ //#endregion
9
+ export { configs, src_default as default, rules };
package/lib/plugin.d.ts CHANGED
@@ -1,39 +1,38 @@
1
- import * as jsonc_eslint_parser from 'jsonc-eslint-parser';
2
- import { PackageJsonRuleModule } from './createRule.js';
3
- import 'estree';
4
- import 'eslint';
1
+ import { PackageJsonRuleModule } from "./createRule.js";
2
+ import * as parserJsonc from "jsonc-eslint-parser";
5
3
 
4
+ //#region src/plugin.d.ts
6
5
  declare const plugin: {
7
- configs: {
8
- "legacy-recommended": {
9
- plugins: string[];
10
- rules: {
11
- "package-json/valid-package-definition": ["error", {
12
- ignoreProperties: string[];
13
- }];
14
- };
15
- };
16
- recommended: {
17
- files: string[];
18
- languageOptions: {
19
- parser: typeof jsonc_eslint_parser;
20
- };
21
- name: string;
22
- plugins: {
23
- readonly "package-json": /*elided*/ any;
24
- };
25
- rules: {
26
- "package-json/valid-package-definition": ["error", {
27
- ignoreProperties: string[];
28
- }];
29
- };
30
- };
6
+ configs: {
7
+ "legacy-recommended": {
8
+ plugins: string[];
9
+ rules: {
10
+ "package-json/valid-package-definition": ["error", {
11
+ ignoreProperties: string[];
12
+ }];
13
+ };
31
14
  };
32
- meta: {
33
- name: string;
34
- version: string;
15
+ recommended: {
16
+ files: string[];
17
+ languageOptions: {
18
+ parser: typeof parserJsonc;
19
+ };
20
+ name: string;
21
+ plugins: {
22
+ readonly "package-json": /*elided*/any;
23
+ };
24
+ rules: {
25
+ "package-json/valid-package-definition": ["error", {
26
+ ignoreProperties: string[];
27
+ }];
28
+ };
35
29
  };
36
- rules: Record<string, PackageJsonRuleModule<unknown[]>>;
30
+ };
31
+ meta: {
32
+ name: string;
33
+ version: string;
34
+ };
35
+ rules: Record<string, PackageJsonRuleModule<unknown[]>>;
37
36
  };
38
-
39
- export { plugin };
37
+ //#endregion
38
+ export { plugin };
package/lib/plugin.js CHANGED
@@ -1,86 +1,68 @@
1
- import * as parserJsonc from "jsonc-eslint-parser";
1
+ import { rule } from "./rules/no-empty-fields.js";
2
+ import { rule as rule$1 } from "./rules/no-redundant-files.js";
3
+ import { rule as rule$2 } from "./rules/order-properties.js";
4
+ import { rule as rule$3 } from "./rules/repository-shorthand.js";
5
+ import { rules } from "./rules/require-properties.js";
6
+ import { rule as rule$4 } from "./rules/restrict-dependency-ranges.js";
7
+ import { rule as rule$5 } from "./rules/sort-collections.js";
8
+ import { rule as rule$6 } from "./rules/unique-dependencies.js";
9
+ import { rule as rule$7 } from "./rules/valid-bin.js";
10
+ import { rule as rule$8 } from "./rules/valid-local-dependency.js";
11
+ import { rule as rule$9 } from "./rules/valid-name.js";
12
+ import { rule as rule$10 } from "./rules/valid-package-definition.js";
13
+ import { rules as rules$1 } from "./rules/valid-properties.js";
14
+ import { rule as rule$11 } from "./rules/valid-repository-directory.js";
15
+ import { rule as rule$12 } from "./rules/valid-version.js";
2
16
  import { createRequire } from "node:module";
3
- import { rule as noEmptyFields } from "./rules/no-empty-fields.js";
4
- import { rule as noRedundantFiles } from "./rules/no-redundant-files.js";
5
- import { rule as orderProperties } from "./rules/order-properties.js";
6
- import { rule as preferRepositoryShorthand } from "./rules/repository-shorthand.js";
7
- import { rules as requireRules } from "./rules/require-properties.js";
8
- import { rule as restrictDependencyRanges } from "./rules/restrict-dependency-ranges.js";
9
- import { rule as sortCollections } from "./rules/sort-collections.js";
10
- import { rule as uniqueDependencies } from "./rules/unique-dependencies.js";
11
- import { rule as validBin } from "./rules/valid-bin.js";
12
- import { rule as validLocalDependency } from "./rules/valid-local-dependency.js";
13
- import { rule as validName } from "./rules/valid-name.js";
14
- import { rule as validPackageDefinition } from "./rules/valid-package-definition.js";
15
- import { rules as basicValidRules } from "./rules/valid-properties.js";
16
- import { rule as validRepositoryDirectory } from "./rules/valid-repository-directory.js";
17
- import { rule as validVersion } from "./rules/valid-version.js";
18
- const require2 = createRequire(import.meta.url);
19
- const { name, version } = require2("../package.json");
20
- const rules = {
21
- "no-empty-fields": noEmptyFields,
22
- "no-redundant-files": noRedundantFiles,
23
- "order-properties": orderProperties,
24
- ...requireRules,
25
- "repository-shorthand": preferRepositoryShorthand,
26
- "restrict-dependency-ranges": restrictDependencyRanges,
27
- "sort-collections": sortCollections,
28
- "unique-dependencies": uniqueDependencies,
29
- ...basicValidRules,
30
- "valid-bin": validBin,
31
- "valid-local-dependency": validLocalDependency,
32
- "valid-name": validName,
33
- "valid-package-definition": validPackageDefinition,
34
- "valid-repository-directory": validRepositoryDirectory,
35
- "valid-version": validVersion
36
- };
37
- const baseRecommendedRules = {
38
- ...Object.fromEntries(
39
- Object.entries(rules).filter(([, rule]) => rule.meta.docs?.recommended).map(([name2]) => ["package-json/" + name2, "error"])
40
- )
17
+ import * as parserJsonc from "jsonc-eslint-parser";
18
+
19
+ //#region src/plugin.ts
20
+ const require = createRequire(import.meta.url);
21
+ const { name, version } = require("../package.json");
22
+ const rules$2 = {
23
+ "no-empty-fields": rule,
24
+ "no-redundant-files": rule$1,
25
+ "order-properties": rule$2,
26
+ ...rules,
27
+ "repository-shorthand": rule$3,
28
+ "restrict-dependency-ranges": rule$4,
29
+ "sort-collections": rule$5,
30
+ "unique-dependencies": rule$6,
31
+ ...rules$1,
32
+ "valid-bin": rule$7,
33
+ "valid-local-dependency": rule$8,
34
+ "valid-name": rule$9,
35
+ "valid-package-definition": rule$10,
36
+ "valid-repository-directory": rule$11,
37
+ "valid-version": rule$12
41
38
  };
39
+ const baseRecommendedRules = { ...Object.fromEntries(Object.entries(rules$2).filter(([, rule$13]) => rule$13.meta.docs?.recommended).map(([name$1]) => ["package-json/" + name$1, "error"])) };
42
40
  const recommendedRules = {
43
- ...baseRecommendedRules,
44
- // As we add more `valid-*` rules, we should prevent this legacy rule from
45
- // also reporting the same errors.
46
- "package-json/valid-package-definition": [
47
- "error",
48
- {
49
- // Create a list of properties to ignore based on the valid-* rules
50
- // we currently have. Once we've fully covered what `valid-package-definition`
51
- // checks, we can remove it from the `recommended` config entirely.
52
- ignoreProperties: Object.entries(baseRecommendedRules).filter(
53
- ([name2]) => name2.startsWith("package-json/valid-") && name2 !== "package-json/valid-package-definition"
54
- ).map(([name2]) => name2.replace("package-json/valid-", ""))
55
- }
56
- ]
41
+ ...baseRecommendedRules,
42
+ "package-json/valid-package-definition": ["error", { ignoreProperties: Object.entries(baseRecommendedRules).filter(([name$1]) => name$1.startsWith("package-json/valid-") && name$1 !== "package-json/valid-package-definition").map(([name$1]) => name$1.replace("package-json/valid-", "")) }]
57
43
  };
58
44
  const plugin = {
59
- configs: {
60
- "legacy-recommended": {
61
- plugins: ["package-json"],
62
- rules: recommendedRules
63
- },
64
- recommended: {
65
- files: ["**/package.json"],
66
- languageOptions: {
67
- parser: parserJsonc
68
- },
69
- name: "package-json/recommended",
70
- plugins: {
71
- get "package-json"() {
72
- return plugin;
73
- }
74
- },
75
- rules: recommendedRules
76
- }
77
- },
78
- meta: {
79
- name,
80
- version
81
- },
82
- rules
83
- };
84
- export {
85
- plugin
45
+ configs: {
46
+ "legacy-recommended": {
47
+ plugins: ["package-json"],
48
+ rules: recommendedRules
49
+ },
50
+ recommended: {
51
+ files: ["**/package.json"],
52
+ languageOptions: { parser: parserJsonc },
53
+ name: "package-json/recommended",
54
+ plugins: { get "package-json"() {
55
+ return plugin;
56
+ } },
57
+ rules: recommendedRules
58
+ }
59
+ },
60
+ meta: {
61
+ name,
62
+ version
63
+ },
64
+ rules: rules$2
86
65
  };
66
+
67
+ //#endregion
68
+ export { plugin };
@@ -1,15 +1,10 @@
1
- import * as eslint from 'eslint';
2
- import * as jsonc_eslint_parser from 'jsonc-eslint-parser';
3
- import { PackageJsonRuleContext } from '../createRule.js';
4
- import 'estree';
1
+ import { PackageJsonRuleModule } from "../createRule.js";
5
2
 
3
+ //#region src/rules/no-empty-fields.d.ts
6
4
  interface Option {
7
- ignoreProperties?: string[];
5
+ ignoreProperties?: string[];
8
6
  }
9
7
  type Options = [Option?];
10
- declare const rule: {
11
- create(context: PackageJsonRuleContext<Options>): jsonc_eslint_parser.RuleListener;
12
- meta: eslint.Rule.RuleMetaData;
13
- };
14
-
15
- export { rule };
8
+ declare const rule: PackageJsonRuleModule<Options>;
9
+ //#endregion
10
+ export { rule };