eslint-plugin-package-json 0.7.0 → 0.8.1

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
@@ -14,8 +14,7 @@
14
14
  <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/main/.github/CODE_OF_CONDUCT.md" target="_blank"><img alt="Contributor Covenant" src="https://img.shields.io/badge/code_of_conduct-enforced-21bb42" /></a>
15
15
  <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/main/LICENSE.md" target="_blank"><img alt="License: MIT" src="https://img.shields.io/github/license/JoshuaKGoldberg/eslint-plugin-package-json?color=21bb42"></a>
16
16
  <img alt="Style: Prettier" src="https://img.shields.io/badge/style-prettier-21bb42.svg" />
17
- <img alt="TypeScript: Strict" src="https://img.shields.io/badge/typescript-strict-21bb42.svg" />
18
- <img alt="npm package version" src="https://img.shields.io/npm/v/eslint-plugin-package-json?color=21bb42" />
17
+ <a href="https://www.npmjs.com/package/eslint-plugin-package-json"><img alt="npm package version" src="https://img.shields.io/npm/v/eslint-plugin-package-json?color=21bb42" /></a>
19
18
  </p>
20
19
 
21
20
  ## Installation
@@ -62,6 +61,12 @@ module.exports = {
62
61
  };
63
62
  ```
64
63
 
64
+ ### Usage Alongside Prettier
65
+
66
+ **[`prettier-plugin-packagejson`](https://github.com/matzkoh/prettier-plugin-packagejson)** is a [Prettier plugin](https://prettier.io/docs/en/plugins) that enforces the same `package.json` keys ordering as the [`order-properties`](docs/rules/order-properties.md) and [sort-collections](docs/rules/sort-collections.md) rules with default options.
67
+ We recommend using both the Prettier plugin and `extends: ["plugin:package-json/recommended"]`.
68
+ The default settings don't conflict, and Prettier plugins can quickly fix up ordering in your editor on save and/or as a Git hook.
69
+
65
70
  ## Supported Rules
66
71
 
67
72
  <!-- prettier-ignore-start -->
@@ -77,6 +82,7 @@ module.exports = {
77
82
  | [order-properties](docs/rules/order-properties.md) | Package properties must be declared in standard order | ✅ | 🔧 | |
78
83
  | [prefer-repository-shorthand](docs/rules/prefer-repository-shorthand.md) | Enforce shorthand declaration for GitHub repository. | ✅ | 🔧 | |
79
84
  | [sort-collections](docs/rules/sort-collections.md) | Dependencies, scripts, and configuration values must be declared in alphabetical order. | ✅ | 🔧 | |
85
+ | [unique-dependencies](docs/rules/unique-dependencies.md) | Enforce that if repository directory is specified, it matches the path to the package.json file | ✅ | | 💡 |
80
86
  | [valid-local-dependency](docs/rules/valid-local-dependency.md) | Checks existence of local dependencies in the package.json | ✅ | | |
81
87
  | [valid-package-def](docs/rules/valid-package-def.md) | Enforce that package.json has all properties required by the npm spec | ✅ | | |
82
88
  | [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 | ✅ | | 💡 |
@@ -84,7 +90,8 @@ module.exports = {
84
90
  <!-- end auto-generated rules list -->
85
91
  <!-- prettier-ignore-end -->
86
92
 
87
- These rules only run on `package.json` files; they will ignore all other files being linted. They lint `package.json` files at project root, and in any subfolder of the project, making this plugin great for monorepos.
93
+ These rules only run on `package.json` files; they will ignore all other files being linted.
94
+ They can lint `package.json` files at project root and in any subfolder of the project, making this plugin great for monorepos.
88
95
 
89
96
  ## Contributors
90
97
 
package/lib/index.d.mts CHANGED
@@ -18,6 +18,10 @@ declare const rules: {
18
18
  create(context: PackageJsonRuleContext<string[]>): jsonc_eslint_parser.RuleListener;
19
19
  meta: eslint.Rule.RuleMetaData;
20
20
  };
21
+ "unique-dependencies": {
22
+ create(context: PackageJsonRuleContext<unknown[]>): jsonc_eslint_parser.RuleListener;
23
+ meta: eslint.Rule.RuleMetaData;
24
+ };
21
25
  "valid-local-dependency": {
22
26
  create(context: PackageJsonRuleContext<unknown[]>): jsonc_eslint_parser.RuleListener;
23
27
  meta: eslint.Rule.RuleMetaData;
package/lib/index.d.ts CHANGED
@@ -18,6 +18,10 @@ declare const rules: {
18
18
  create(context: PackageJsonRuleContext<string[]>): jsonc_eslint_parser.RuleListener;
19
19
  meta: eslint.Rule.RuleMetaData;
20
20
  };
21
+ "unique-dependencies": {
22
+ create(context: PackageJsonRuleContext<unknown[]>): jsonc_eslint_parser.RuleListener;
23
+ meta: eslint.Rule.RuleMetaData;
24
+ };
21
25
  "valid-local-dependency": {
22
26
  create(context: PackageJsonRuleContext<unknown[]>): jsonc_eslint_parser.RuleListener;
23
27
  meta: eslint.Rule.RuleMetaData;
package/lib/index.js CHANGED
@@ -35,6 +35,7 @@ module.exports = __toCommonJS(src_exports);
35
35
  var import_order_properties = __toESM(require("./rules/order-properties.js"));
36
36
  var import_prefer_repository_shorthand = __toESM(require("./rules/prefer-repository-shorthand.js"));
37
37
  var import_sort_collections = __toESM(require("./rules/sort-collections.js"));
38
+ var import_unique_dependencies = __toESM(require("./rules/unique-dependencies.js"));
38
39
  var import_valid_local_dependency = __toESM(require("./rules/valid-local-dependency.js"));
39
40
  var import_valid_package_def = __toESM(require("./rules/valid-package-def.js"));
40
41
  var import_valid_repository_directory = __toESM(require("./rules/valid-repository-directory.js"));
@@ -42,6 +43,7 @@ const rules = {
42
43
  "order-properties": import_order_properties.default,
43
44
  "prefer-repository-shorthand": import_prefer_repository_shorthand.default,
44
45
  "sort-collections": import_sort_collections.default,
46
+ "unique-dependencies": import_unique_dependencies.default,
45
47
  "valid-local-dependency": import_valid_local_dependency.default,
46
48
  "valid-package-def": import_valid_package_def.default,
47
49
  "valid-repository-directory": import_valid_repository_directory.default
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import orderProperties from \"./rules/order-properties.js\";\nimport preferRepositoryShorthand from \"./rules/prefer-repository-shorthand.js\";\nimport sortCollections from \"./rules/sort-collections.js\";\nimport validLocalDependency from \"./rules/valid-local-dependency.js\";\nimport validPackageDef from \"./rules/valid-package-def.js\";\nimport validRepositoryDirectory from \"./rules/valid-repository-directory.js\";\n\nexport const rules = {\n\t\"order-properties\": orderProperties,\n\t\"prefer-repository-shorthand\": preferRepositoryShorthand,\n\t\"sort-collections\": sortCollections,\n\t\"valid-local-dependency\": validLocalDependency,\n\t\"valid-package-def\": validPackageDef,\n\t\"valid-repository-directory\": validRepositoryDirectory,\n};\n\nexport const configs = {\n\trecommended: {\n\t\trules: Object.fromEntries(\n\t\t\tObject.entries(rules)\n\t\t\t\t.filter(([, rule]) => rule.meta.docs?.recommended)\n\t\t\t\t.map(([name]) => [\"package-json/\" + name, \"error\" as const]),\n\t\t),\n\t},\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAA4B;AAC5B,yCAAsC;AACtC,8BAA4B;AAC5B,oCAAiC;AACjC,+BAA4B;AAC5B,wCAAqC;AAE9B,MAAM,QAAQ;AAAA,EACpB,oBAAoB,wBAAAA;AAAA,EACpB,+BAA+B,mCAAAC;AAAA,EAC/B,oBAAoB,wBAAAC;AAAA,EACpB,0BAA0B,8BAAAC;AAAA,EAC1B,qBAAqB,yBAAAC;AAAA,EACrB,8BAA8B,kCAAAC;AAC/B;AAEO,MAAM,UAAU;AAAA,EACtB,aAAa;AAAA,IACZ,OAAO,OAAO;AAAA,MACb,OAAO,QAAQ,KAAK,EAClB,OAAO,CAAC,CAAC,EAAE,IAAI,MAAM,KAAK,KAAK,MAAM,WAAW,EAChD,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,kBAAkB,MAAM,OAAgB,CAAC;AAAA,IAC7D;AAAA,EACD;AACD;","names":["orderProperties","preferRepositoryShorthand","sortCollections","validLocalDependency","validPackageDef","validRepositoryDirectory"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import orderProperties from \"./rules/order-properties.js\";\nimport preferRepositoryShorthand from \"./rules/prefer-repository-shorthand.js\";\nimport sortCollections from \"./rules/sort-collections.js\";\nimport uniqueDependencies from \"./rules/unique-dependencies.js\";\nimport validLocalDependency from \"./rules/valid-local-dependency.js\";\nimport validPackageDef from \"./rules/valid-package-def.js\";\nimport validRepositoryDirectory from \"./rules/valid-repository-directory.js\";\n\nexport const rules = {\n\t\"order-properties\": orderProperties,\n\t\"prefer-repository-shorthand\": preferRepositoryShorthand,\n\t\"sort-collections\": sortCollections,\n\t\"unique-dependencies\": uniqueDependencies,\n\t\"valid-local-dependency\": validLocalDependency,\n\t\"valid-package-def\": validPackageDef,\n\t\"valid-repository-directory\": validRepositoryDirectory,\n};\n\nexport const configs = {\n\trecommended: {\n\t\trules: Object.fromEntries(\n\t\t\tObject.entries(rules)\n\t\t\t\t.filter(([, rule]) => rule.meta.docs?.recommended)\n\t\t\t\t.map(([name]) => [\"package-json/\" + name, \"error\" as const]),\n\t\t),\n\t},\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAA4B;AAC5B,yCAAsC;AACtC,8BAA4B;AAC5B,iCAA+B;AAC/B,oCAAiC;AACjC,+BAA4B;AAC5B,wCAAqC;AAE9B,MAAM,QAAQ;AAAA,EACpB,oBAAoB,wBAAAA;AAAA,EACpB,+BAA+B,mCAAAC;AAAA,EAC/B,oBAAoB,wBAAAC;AAAA,EACpB,uBAAuB,2BAAAC;AAAA,EACvB,0BAA0B,8BAAAC;AAAA,EAC1B,qBAAqB,yBAAAC;AAAA,EACrB,8BAA8B,kCAAAC;AAC/B;AAEO,MAAM,UAAU;AAAA,EACtB,aAAa;AAAA,IACZ,OAAO,OAAO;AAAA,MACb,OAAO,QAAQ,KAAK,EAClB,OAAO,CAAC,CAAC,EAAE,IAAI,MAAM,KAAK,KAAK,MAAM,WAAW,EAChD,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,kBAAkB,MAAM,OAAgB,CAAC;AAAA,IAC7D;AAAA,EACD;AACD;","names":["orderProperties","preferRepositoryShorthand","sortCollections","uniqueDependencies","validLocalDependency","validPackageDef","validRepositoryDirectory"]}
package/lib/index.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  import orderProperties from "./rules/order-properties.js";
2
2
  import preferRepositoryShorthand from "./rules/prefer-repository-shorthand.js";
3
3
  import sortCollections from "./rules/sort-collections.js";
4
+ import uniqueDependencies from "./rules/unique-dependencies.js";
4
5
  import validLocalDependency from "./rules/valid-local-dependency.js";
5
6
  import validPackageDef from "./rules/valid-package-def.js";
6
7
  import validRepositoryDirectory from "./rules/valid-repository-directory.js";
@@ -8,6 +9,7 @@ const rules = {
8
9
  "order-properties": orderProperties,
9
10
  "prefer-repository-shorthand": preferRepositoryShorthand,
10
11
  "sort-collections": sortCollections,
12
+ "unique-dependencies": uniqueDependencies,
11
13
  "valid-local-dependency": validLocalDependency,
12
14
  "valid-package-def": validPackageDef,
13
15
  "valid-repository-directory": validRepositoryDirectory
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import orderProperties from \"./rules/order-properties.js\";\nimport preferRepositoryShorthand from \"./rules/prefer-repository-shorthand.js\";\nimport sortCollections from \"./rules/sort-collections.js\";\nimport validLocalDependency from \"./rules/valid-local-dependency.js\";\nimport validPackageDef from \"./rules/valid-package-def.js\";\nimport validRepositoryDirectory from \"./rules/valid-repository-directory.js\";\n\nexport const rules = {\n\t\"order-properties\": orderProperties,\n\t\"prefer-repository-shorthand\": preferRepositoryShorthand,\n\t\"sort-collections\": sortCollections,\n\t\"valid-local-dependency\": validLocalDependency,\n\t\"valid-package-def\": validPackageDef,\n\t\"valid-repository-directory\": validRepositoryDirectory,\n};\n\nexport const configs = {\n\trecommended: {\n\t\trules: Object.fromEntries(\n\t\t\tObject.entries(rules)\n\t\t\t\t.filter(([, rule]) => rule.meta.docs?.recommended)\n\t\t\t\t.map(([name]) => [\"package-json/\" + name, \"error\" as const]),\n\t\t),\n\t},\n};\n"],"mappings":"AAAA,OAAO,qBAAqB;AAC5B,OAAO,+BAA+B;AACtC,OAAO,qBAAqB;AAC5B,OAAO,0BAA0B;AACjC,OAAO,qBAAqB;AAC5B,OAAO,8BAA8B;AAE9B,MAAM,QAAQ;AAAA,EACpB,oBAAoB;AAAA,EACpB,+BAA+B;AAAA,EAC/B,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,EAC1B,qBAAqB;AAAA,EACrB,8BAA8B;AAC/B;AAEO,MAAM,UAAU;AAAA,EACtB,aAAa;AAAA,IACZ,OAAO,OAAO;AAAA,MACb,OAAO,QAAQ,KAAK,EAClB,OAAO,CAAC,CAAC,EAAE,IAAI,MAAM,KAAK,KAAK,MAAM,WAAW,EAChD,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,kBAAkB,MAAM,OAAgB,CAAC;AAAA,IAC7D;AAAA,EACD;AACD;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import orderProperties from \"./rules/order-properties.js\";\nimport preferRepositoryShorthand from \"./rules/prefer-repository-shorthand.js\";\nimport sortCollections from \"./rules/sort-collections.js\";\nimport uniqueDependencies from \"./rules/unique-dependencies.js\";\nimport validLocalDependency from \"./rules/valid-local-dependency.js\";\nimport validPackageDef from \"./rules/valid-package-def.js\";\nimport validRepositoryDirectory from \"./rules/valid-repository-directory.js\";\n\nexport const rules = {\n\t\"order-properties\": orderProperties,\n\t\"prefer-repository-shorthand\": preferRepositoryShorthand,\n\t\"sort-collections\": sortCollections,\n\t\"unique-dependencies\": uniqueDependencies,\n\t\"valid-local-dependency\": validLocalDependency,\n\t\"valid-package-def\": validPackageDef,\n\t\"valid-repository-directory\": validRepositoryDirectory,\n};\n\nexport const configs = {\n\trecommended: {\n\t\trules: Object.fromEntries(\n\t\t\tObject.entries(rules)\n\t\t\t\t.filter(([, rule]) => rule.meta.docs?.recommended)\n\t\t\t\t.map(([name]) => [\"package-json/\" + name, \"error\" as const]),\n\t\t),\n\t},\n};\n"],"mappings":"AAAA,OAAO,qBAAqB;AAC5B,OAAO,+BAA+B;AACtC,OAAO,qBAAqB;AAC5B,OAAO,wBAAwB;AAC/B,OAAO,0BAA0B;AACjC,OAAO,qBAAqB;AAC5B,OAAO,8BAA8B;AAE9B,MAAM,QAAQ;AAAA,EACpB,oBAAoB;AAAA,EACpB,+BAA+B;AAAA,EAC/B,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,0BAA0B;AAAA,EAC1B,qBAAqB;AAAA,EACrB,8BAA8B;AAC/B;AAEO,MAAM,UAAU;AAAA,EACtB,aAAa;AAAA,IACZ,OAAO,OAAO;AAAA,MACb,OAAO,QAAQ,KAAK,EAClB,OAAO,CAAC,CAAC,EAAE,IAAI,MAAM,KAAK,KAAK,MAAM,WAAW,EAChD,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,kBAAkB,MAAM,OAAgB,CAAC;AAAA,IAC7D;AAAA,EACD;AACD;","names":[]}
@@ -82,7 +82,7 @@ var order_properties_default = (0, import_createRule.createRule)({
82
82
  const orderedKeys = Object.keys(orderedSource);
83
83
  const { properties } = ast.body[0].expression;
84
84
  for (let i = 0; i < properties.length; i += 1) {
85
- if (properties[i].value !== orderedKeys[i]) {
85
+ if (properties[i].key.value !== orderedKeys[i]) {
86
86
  context.report({
87
87
  fix(fixer) {
88
88
  return fixer.replaceText(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/order-properties.ts"],"sourcesContent":["import sortPackageJson from \"sort-package-json\";\n\nimport { createRule } from \"../createRule.js\";\n\nconst standardOrderLegacy = [\n\t\"name\",\n\t\"version\",\n\t\"private\",\n\t\"publishConfig\",\n\t\"description\",\n\t\"main\",\n\t\"exports\",\n\t\"browser\",\n\t\"files\",\n\t\"bin\",\n\t\"directories\",\n\t\"man\",\n\t\"scripts\",\n\t\"repository\",\n\t\"keywords\",\n\t\"author\",\n\t\"license\",\n\t\"bugs\",\n\t\"homepage\",\n\t\"config\",\n\t\"dependencies\",\n\t\"devDependencies\",\n\t\"peerDependencies\",\n\t\"optionalDependencies\",\n\t\"bundledDependencies\",\n\t\"engines\",\n\t\"os\",\n\t\"cpu\",\n];\n\ntype Order = \"legacy\" | \"sort-package-json\";\n\ntype Options = [{ order: Order }?];\n\nexport default createRule<Options>({\n\tcreate(context) {\n\t\treturn {\n\t\t\t\"Program:exit\"() {\n\t\t\t\tconst { ast, text } = context.sourceCode;\n\n\t\t\t\tconst options = {\n\t\t\t\t\torder: \"sort-package-json\",\n\t\t\t\t\t...context.options[0],\n\t\t\t\t} satisfies Options[0];\n\n\t\t\t\tconst requiredOrder =\n\t\t\t\t\toptions.order === \"legacy\"\n\t\t\t\t\t\t? standardOrderLegacy\n\t\t\t\t\t\t: options.order;\n\t\t\t\tconst orderedSource = sortPackageJson(\n\t\t\t\t\tJSON.parse(text) as object,\n\t\t\t\t\trequiredOrder === \"sort-package-json\"\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tsortOrder: requiredOrder,\n\t\t\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst orderedKeys = Object.keys(orderedSource);\n\n\t\t\t\tconst { properties } = ast.body[0].expression;\n\n\t\t\t\tfor (let i = 0; i < properties.length; i += 1) {\n\t\t\t\t\tif (properties[i].value !== orderedKeys[i]) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\treturn fixer.replaceText(\n\t\t\t\t\t\t\t\t\tcontext.sourceCode.ast,\n\t\t\t\t\t\t\t\t\tJSON.stringify(orderedSource, null, 2) +\n\t\t\t\t\t\t\t\t\t\t`\\n`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\"Package top-level properties are not ordered in the npm standard way. Run the ESLint auto-fixer to correct.\",\n\t\t\t\t\t\t\tnode: context.sourceCode.ast,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n\n\tmeta: {\n\t\tdocs: {\n\t\t\tcategory: \"Best Practices\",\n\t\t\tdescription:\n\t\t\t\t\"Package properties must be declared in standard order\",\n\t\t\trecommended: true,\n\t\t},\n\t\tfixable: \"code\",\n\t\tschema: [\n\t\t\t{\n\t\t\t\tproperties: {\n\t\t\t\t\torder: {\n\t\t\t\t\t\tanyOf: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tenum: [\"legacy\", \"sort-package-json\"],\n\t\t\t\t\t\t\t\ttype: [\"string\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\t\t\ttype: [\"string\"],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttype: [\"array\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttype: \"object\",\n\t\t\t},\n\t\t],\n\t},\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAA4B;AAE5B,wBAA2B;AAE3B,MAAM,sBAAsB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAMA,IAAO,+BAAQ,8BAAoB;AAAA,EAClC,OAAO,SAAS;AACf,WAAO;AAAA,MACN,iBAAiB;AAChB,cAAM,EAAE,KAAK,KAAK,IAAI,QAAQ;AAE9B,cAAM,UAAU;AAAA,UACf,OAAO;AAAA,UACP,GAAG,QAAQ,QAAQ,CAAC;AAAA,QACrB;AAEA,cAAM,gBACL,QAAQ,UAAU,WACf,sBACA,QAAQ;AACZ,cAAM,oBAAgB,yBAAAA;AAAA,UACrB,KAAK,MAAM,IAAI;AAAA,UACf,kBAAkB,sBACf,SACA;AAAA,YACA,WAAW;AAAA,UACZ;AAAA,QACH;AACA,cAAM,cAAc,OAAO,KAAK,aAAa;AAE7C,cAAM,EAAE,WAAW,IAAI,IAAI,KAAK,CAAC,EAAE;AAEnC,iBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAAG;AAC9C,cAAI,WAAW,CAAC,EAAE,UAAU,YAAY,CAAC,GAAG;AAC3C,oBAAQ,OAAO;AAAA,cACd,IAAI,OAAO;AACV,uBAAO,MAAM;AAAA,kBACZ,QAAQ,WAAW;AAAA,kBACnB,KAAK,UAAU,eAAe,MAAM,CAAC,IACpC;AAAA;AAAA,gBACF;AAAA,cACD;AAAA,cACA,SACC;AAAA,cACD,MAAM,QAAQ,WAAW;AAAA,YAC1B,CAAC;AAAA,UACF;AAEA;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM;AAAA,IACL,MAAM;AAAA,MACL,UAAU;AAAA,MACV,aACC;AAAA,MACD,aAAa;AAAA,IACd;AAAA,IACA,SAAS;AAAA,IACT,QAAQ;AAAA,MACP;AAAA,QACC,YAAY;AAAA,UACX,OAAO;AAAA,YACN,OAAO;AAAA,cACN;AAAA,gBACC,MAAM,CAAC,UAAU,mBAAmB;AAAA,gBACpC,MAAM,CAAC,QAAQ;AAAA,cAChB;AAAA,cACA;AAAA,gBACC,OAAO;AAAA,kBACN,MAAM,CAAC,QAAQ;AAAA,gBAChB;AAAA,gBACA,MAAM,CAAC,OAAO;AAAA,cACf;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,QACA,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD,CAAC;","names":["sortPackageJson"]}
1
+ {"version":3,"sources":["../../src/rules/order-properties.ts"],"sourcesContent":["import type { AST as JsonAST } from \"jsonc-eslint-parser\";\n\nimport sortPackageJson from \"sort-package-json\";\n\nimport { createRule } from \"../createRule.js\";\n\nconst standardOrderLegacy = [\n\t\"name\",\n\t\"version\",\n\t\"private\",\n\t\"publishConfig\",\n\t\"description\",\n\t\"main\",\n\t\"exports\",\n\t\"browser\",\n\t\"files\",\n\t\"bin\",\n\t\"directories\",\n\t\"man\",\n\t\"scripts\",\n\t\"repository\",\n\t\"keywords\",\n\t\"author\",\n\t\"license\",\n\t\"bugs\",\n\t\"homepage\",\n\t\"config\",\n\t\"dependencies\",\n\t\"devDependencies\",\n\t\"peerDependencies\",\n\t\"optionalDependencies\",\n\t\"bundledDependencies\",\n\t\"engines\",\n\t\"os\",\n\t\"cpu\",\n];\n\ntype Order = \"legacy\" | \"sort-package-json\";\n\ntype Options = [{ order: Order }?];\n\nexport default createRule<Options>({\n\tcreate(context) {\n\t\treturn {\n\t\t\t\"Program:exit\"() {\n\t\t\t\tconst { ast, text } = context.sourceCode;\n\n\t\t\t\tconst options = {\n\t\t\t\t\torder: \"sort-package-json\",\n\t\t\t\t\t...context.options[0],\n\t\t\t\t} satisfies Options[0];\n\n\t\t\t\tconst requiredOrder =\n\t\t\t\t\toptions.order === \"legacy\"\n\t\t\t\t\t\t? standardOrderLegacy\n\t\t\t\t\t\t: options.order;\n\t\t\t\tconst orderedSource = sortPackageJson(\n\t\t\t\t\tJSON.parse(text) as object,\n\t\t\t\t\trequiredOrder === \"sort-package-json\"\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tsortOrder: requiredOrder,\n\t\t\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst orderedKeys = Object.keys(orderedSource);\n\n\t\t\t\tconst { properties } = ast.body[0].expression;\n\n\t\t\t\tfor (let i = 0; i < properties.length; i += 1) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t(properties[i].key as JsonAST.JSONStringLiteral)\n\t\t\t\t\t\t\t.value !== orderedKeys[i]\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\treturn fixer.replaceText(\n\t\t\t\t\t\t\t\t\tcontext.sourceCode.ast,\n\t\t\t\t\t\t\t\t\tJSON.stringify(orderedSource, null, 2) +\n\t\t\t\t\t\t\t\t\t\t`\\n`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\"Package top-level properties are not ordered in the npm standard way. Run the ESLint auto-fixer to correct.\",\n\t\t\t\t\t\t\tnode: context.sourceCode.ast,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n\n\tmeta: {\n\t\tdocs: {\n\t\t\tcategory: \"Best Practices\",\n\t\t\tdescription:\n\t\t\t\t\"Package properties must be declared in standard order\",\n\t\t\trecommended: true,\n\t\t},\n\t\tfixable: \"code\",\n\t\tschema: [\n\t\t\t{\n\t\t\t\tproperties: {\n\t\t\t\t\torder: {\n\t\t\t\t\t\tanyOf: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tenum: [\"legacy\", \"sort-package-json\"],\n\t\t\t\t\t\t\t\ttype: [\"string\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\t\t\ttype: [\"string\"],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttype: [\"array\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttype: \"object\",\n\t\t\t},\n\t\t],\n\t},\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,+BAA4B;AAE5B,wBAA2B;AAE3B,MAAM,sBAAsB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAMA,IAAO,+BAAQ,8BAAoB;AAAA,EAClC,OAAO,SAAS;AACf,WAAO;AAAA,MACN,iBAAiB;AAChB,cAAM,EAAE,KAAK,KAAK,IAAI,QAAQ;AAE9B,cAAM,UAAU;AAAA,UACf,OAAO;AAAA,UACP,GAAG,QAAQ,QAAQ,CAAC;AAAA,QACrB;AAEA,cAAM,gBACL,QAAQ,UAAU,WACf,sBACA,QAAQ;AACZ,cAAM,oBAAgB,yBAAAA;AAAA,UACrB,KAAK,MAAM,IAAI;AAAA,UACf,kBAAkB,sBACf,SACA;AAAA,YACA,WAAW;AAAA,UACZ;AAAA,QACH;AACA,cAAM,cAAc,OAAO,KAAK,aAAa;AAE7C,cAAM,EAAE,WAAW,IAAI,IAAI,KAAK,CAAC,EAAE;AAEnC,iBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAAG;AAC9C,cACE,WAAW,CAAC,EAAE,IACb,UAAU,YAAY,CAAC,GACxB;AACD,oBAAQ,OAAO;AAAA,cACd,IAAI,OAAO;AACV,uBAAO,MAAM;AAAA,kBACZ,QAAQ,WAAW;AAAA,kBACnB,KAAK,UAAU,eAAe,MAAM,CAAC,IACpC;AAAA;AAAA,gBACF;AAAA,cACD;AAAA,cACA,SACC;AAAA,cACD,MAAM,QAAQ,WAAW;AAAA,YAC1B,CAAC;AAAA,UACF;AAEA;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM;AAAA,IACL,MAAM;AAAA,MACL,UAAU;AAAA,MACV,aACC;AAAA,MACD,aAAa;AAAA,IACd;AAAA,IACA,SAAS;AAAA,IACT,QAAQ;AAAA,MACP;AAAA,QACC,YAAY;AAAA,UACX,OAAO;AAAA,YACN,OAAO;AAAA,cACN;AAAA,gBACC,MAAM,CAAC,UAAU,mBAAmB;AAAA,gBACpC,MAAM,CAAC,QAAQ;AAAA,cAChB;AAAA,cACA;AAAA,gBACC,OAAO;AAAA,kBACN,MAAM,CAAC,QAAQ;AAAA,gBAChB;AAAA,gBACA,MAAM,CAAC,OAAO;AAAA,cACf;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,QACA,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD,CAAC;","names":["sortPackageJson"]}
@@ -49,7 +49,7 @@ var order_properties_default = createRule({
49
49
  const orderedKeys = Object.keys(orderedSource);
50
50
  const { properties } = ast.body[0].expression;
51
51
  for (let i = 0; i < properties.length; i += 1) {
52
- if (properties[i].value !== orderedKeys[i]) {
52
+ if (properties[i].key.value !== orderedKeys[i]) {
53
53
  context.report({
54
54
  fix(fixer) {
55
55
  return fixer.replaceText(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/order-properties.ts"],"sourcesContent":["import sortPackageJson from \"sort-package-json\";\n\nimport { createRule } from \"../createRule.js\";\n\nconst standardOrderLegacy = [\n\t\"name\",\n\t\"version\",\n\t\"private\",\n\t\"publishConfig\",\n\t\"description\",\n\t\"main\",\n\t\"exports\",\n\t\"browser\",\n\t\"files\",\n\t\"bin\",\n\t\"directories\",\n\t\"man\",\n\t\"scripts\",\n\t\"repository\",\n\t\"keywords\",\n\t\"author\",\n\t\"license\",\n\t\"bugs\",\n\t\"homepage\",\n\t\"config\",\n\t\"dependencies\",\n\t\"devDependencies\",\n\t\"peerDependencies\",\n\t\"optionalDependencies\",\n\t\"bundledDependencies\",\n\t\"engines\",\n\t\"os\",\n\t\"cpu\",\n];\n\ntype Order = \"legacy\" | \"sort-package-json\";\n\ntype Options = [{ order: Order }?];\n\nexport default createRule<Options>({\n\tcreate(context) {\n\t\treturn {\n\t\t\t\"Program:exit\"() {\n\t\t\t\tconst { ast, text } = context.sourceCode;\n\n\t\t\t\tconst options = {\n\t\t\t\t\torder: \"sort-package-json\",\n\t\t\t\t\t...context.options[0],\n\t\t\t\t} satisfies Options[0];\n\n\t\t\t\tconst requiredOrder =\n\t\t\t\t\toptions.order === \"legacy\"\n\t\t\t\t\t\t? standardOrderLegacy\n\t\t\t\t\t\t: options.order;\n\t\t\t\tconst orderedSource = sortPackageJson(\n\t\t\t\t\tJSON.parse(text) as object,\n\t\t\t\t\trequiredOrder === \"sort-package-json\"\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tsortOrder: requiredOrder,\n\t\t\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst orderedKeys = Object.keys(orderedSource);\n\n\t\t\t\tconst { properties } = ast.body[0].expression;\n\n\t\t\t\tfor (let i = 0; i < properties.length; i += 1) {\n\t\t\t\t\tif (properties[i].value !== orderedKeys[i]) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\treturn fixer.replaceText(\n\t\t\t\t\t\t\t\t\tcontext.sourceCode.ast,\n\t\t\t\t\t\t\t\t\tJSON.stringify(orderedSource, null, 2) +\n\t\t\t\t\t\t\t\t\t\t`\\n`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\"Package top-level properties are not ordered in the npm standard way. Run the ESLint auto-fixer to correct.\",\n\t\t\t\t\t\t\tnode: context.sourceCode.ast,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n\n\tmeta: {\n\t\tdocs: {\n\t\t\tcategory: \"Best Practices\",\n\t\t\tdescription:\n\t\t\t\t\"Package properties must be declared in standard order\",\n\t\t\trecommended: true,\n\t\t},\n\t\tfixable: \"code\",\n\t\tschema: [\n\t\t\t{\n\t\t\t\tproperties: {\n\t\t\t\t\torder: {\n\t\t\t\t\t\tanyOf: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tenum: [\"legacy\", \"sort-package-json\"],\n\t\t\t\t\t\t\t\ttype: [\"string\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\t\t\ttype: [\"string\"],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttype: [\"array\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttype: \"object\",\n\t\t\t},\n\t\t],\n\t},\n});\n"],"mappings":"AAAA,OAAO,qBAAqB;AAE5B,SAAS,kBAAkB;AAE3B,MAAM,sBAAsB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAMA,IAAO,2BAAQ,WAAoB;AAAA,EAClC,OAAO,SAAS;AACf,WAAO;AAAA,MACN,iBAAiB;AAChB,cAAM,EAAE,KAAK,KAAK,IAAI,QAAQ;AAE9B,cAAM,UAAU;AAAA,UACf,OAAO;AAAA,UACP,GAAG,QAAQ,QAAQ,CAAC;AAAA,QACrB;AAEA,cAAM,gBACL,QAAQ,UAAU,WACf,sBACA,QAAQ;AACZ,cAAM,gBAAgB;AAAA,UACrB,KAAK,MAAM,IAAI;AAAA,UACf,kBAAkB,sBACf,SACA;AAAA,YACA,WAAW;AAAA,UACZ;AAAA,QACH;AACA,cAAM,cAAc,OAAO,KAAK,aAAa;AAE7C,cAAM,EAAE,WAAW,IAAI,IAAI,KAAK,CAAC,EAAE;AAEnC,iBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAAG;AAC9C,cAAI,WAAW,CAAC,EAAE,UAAU,YAAY,CAAC,GAAG;AAC3C,oBAAQ,OAAO;AAAA,cACd,IAAI,OAAO;AACV,uBAAO,MAAM;AAAA,kBACZ,QAAQ,WAAW;AAAA,kBACnB,KAAK,UAAU,eAAe,MAAM,CAAC,IACpC;AAAA;AAAA,gBACF;AAAA,cACD;AAAA,cACA,SACC;AAAA,cACD,MAAM,QAAQ,WAAW;AAAA,YAC1B,CAAC;AAAA,UACF;AAEA;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM;AAAA,IACL,MAAM;AAAA,MACL,UAAU;AAAA,MACV,aACC;AAAA,MACD,aAAa;AAAA,IACd;AAAA,IACA,SAAS;AAAA,IACT,QAAQ;AAAA,MACP;AAAA,QACC,YAAY;AAAA,UACX,OAAO;AAAA,YACN,OAAO;AAAA,cACN;AAAA,gBACC,MAAM,CAAC,UAAU,mBAAmB;AAAA,gBACpC,MAAM,CAAC,QAAQ;AAAA,cAChB;AAAA,cACA;AAAA,gBACC,OAAO;AAAA,kBACN,MAAM,CAAC,QAAQ;AAAA,gBAChB;AAAA,gBACA,MAAM,CAAC,OAAO;AAAA,cACf;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,QACA,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/rules/order-properties.ts"],"sourcesContent":["import type { AST as JsonAST } from \"jsonc-eslint-parser\";\n\nimport sortPackageJson from \"sort-package-json\";\n\nimport { createRule } from \"../createRule.js\";\n\nconst standardOrderLegacy = [\n\t\"name\",\n\t\"version\",\n\t\"private\",\n\t\"publishConfig\",\n\t\"description\",\n\t\"main\",\n\t\"exports\",\n\t\"browser\",\n\t\"files\",\n\t\"bin\",\n\t\"directories\",\n\t\"man\",\n\t\"scripts\",\n\t\"repository\",\n\t\"keywords\",\n\t\"author\",\n\t\"license\",\n\t\"bugs\",\n\t\"homepage\",\n\t\"config\",\n\t\"dependencies\",\n\t\"devDependencies\",\n\t\"peerDependencies\",\n\t\"optionalDependencies\",\n\t\"bundledDependencies\",\n\t\"engines\",\n\t\"os\",\n\t\"cpu\",\n];\n\ntype Order = \"legacy\" | \"sort-package-json\";\n\ntype Options = [{ order: Order }?];\n\nexport default createRule<Options>({\n\tcreate(context) {\n\t\treturn {\n\t\t\t\"Program:exit\"() {\n\t\t\t\tconst { ast, text } = context.sourceCode;\n\n\t\t\t\tconst options = {\n\t\t\t\t\torder: \"sort-package-json\",\n\t\t\t\t\t...context.options[0],\n\t\t\t\t} satisfies Options[0];\n\n\t\t\t\tconst requiredOrder =\n\t\t\t\t\toptions.order === \"legacy\"\n\t\t\t\t\t\t? standardOrderLegacy\n\t\t\t\t\t\t: options.order;\n\t\t\t\tconst orderedSource = sortPackageJson(\n\t\t\t\t\tJSON.parse(text) as object,\n\t\t\t\t\trequiredOrder === \"sort-package-json\"\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tsortOrder: requiredOrder,\n\t\t\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst orderedKeys = Object.keys(orderedSource);\n\n\t\t\t\tconst { properties } = ast.body[0].expression;\n\n\t\t\t\tfor (let i = 0; i < properties.length; i += 1) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t(properties[i].key as JsonAST.JSONStringLiteral)\n\t\t\t\t\t\t\t.value !== orderedKeys[i]\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\treturn fixer.replaceText(\n\t\t\t\t\t\t\t\t\tcontext.sourceCode.ast,\n\t\t\t\t\t\t\t\t\tJSON.stringify(orderedSource, null, 2) +\n\t\t\t\t\t\t\t\t\t\t`\\n`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\"Package top-level properties are not ordered in the npm standard way. Run the ESLint auto-fixer to correct.\",\n\t\t\t\t\t\t\tnode: context.sourceCode.ast,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n\n\tmeta: {\n\t\tdocs: {\n\t\t\tcategory: \"Best Practices\",\n\t\t\tdescription:\n\t\t\t\t\"Package properties must be declared in standard order\",\n\t\t\trecommended: true,\n\t\t},\n\t\tfixable: \"code\",\n\t\tschema: [\n\t\t\t{\n\t\t\t\tproperties: {\n\t\t\t\t\torder: {\n\t\t\t\t\t\tanyOf: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tenum: [\"legacy\", \"sort-package-json\"],\n\t\t\t\t\t\t\t\ttype: [\"string\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\t\t\ttype: [\"string\"],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttype: [\"array\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttype: \"object\",\n\t\t\t},\n\t\t],\n\t},\n});\n"],"mappings":"AAEA,OAAO,qBAAqB;AAE5B,SAAS,kBAAkB;AAE3B,MAAM,sBAAsB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAMA,IAAO,2BAAQ,WAAoB;AAAA,EAClC,OAAO,SAAS;AACf,WAAO;AAAA,MACN,iBAAiB;AAChB,cAAM,EAAE,KAAK,KAAK,IAAI,QAAQ;AAE9B,cAAM,UAAU;AAAA,UACf,OAAO;AAAA,UACP,GAAG,QAAQ,QAAQ,CAAC;AAAA,QACrB;AAEA,cAAM,gBACL,QAAQ,UAAU,WACf,sBACA,QAAQ;AACZ,cAAM,gBAAgB;AAAA,UACrB,KAAK,MAAM,IAAI;AAAA,UACf,kBAAkB,sBACf,SACA;AAAA,YACA,WAAW;AAAA,UACZ;AAAA,QACH;AACA,cAAM,cAAc,OAAO,KAAK,aAAa;AAE7C,cAAM,EAAE,WAAW,IAAI,IAAI,KAAK,CAAC,EAAE;AAEnC,iBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAAG;AAC9C,cACE,WAAW,CAAC,EAAE,IACb,UAAU,YAAY,CAAC,GACxB;AACD,oBAAQ,OAAO;AAAA,cACd,IAAI,OAAO;AACV,uBAAO,MAAM;AAAA,kBACZ,QAAQ,WAAW;AAAA,kBACnB,KAAK,UAAU,eAAe,MAAM,CAAC,IACpC;AAAA;AAAA,gBACF;AAAA,cACD;AAAA,cACA,SACC;AAAA,cACD,MAAM,QAAQ,WAAW;AAAA,YAC1B,CAAC;AAAA,UACF;AAEA;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM;AAAA,IACL,MAAM;AAAA,MACL,UAAU;AAAA,MACV,aACC;AAAA,MACD,aAAa;AAAA,IACd;AAAA,IACA,SAAS;AAAA,IACT,QAAQ;AAAA,MACP;AAAA,QACC,YAAY;AAAA,UACX,OAAO;AAAA,YACN,OAAO;AAAA,cACN;AAAA,gBACC,MAAM,CAAC,UAAU,mBAAmB;AAAA,gBACpC,MAAM,CAAC,QAAQ;AAAA,cAChB;AAAA,cACA;AAAA,gBACC,OAAO;AAAA,kBACN,MAAM,CAAC,QAAQ;AAAA,gBAChB;AAAA,gBACA,MAAM,CAAC,OAAO;AAAA,cACf;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,QACA,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD,CAAC;","names":[]}
@@ -0,0 +1,11 @@
1
+ import * as eslint from 'eslint';
2
+ import * as jsonc_eslint_parser from 'jsonc-eslint-parser';
3
+ import { PackageJsonRuleContext } from '../createRule.mjs';
4
+ import 'estree';
5
+
6
+ declare const _default: {
7
+ create(context: PackageJsonRuleContext<unknown[]>): jsonc_eslint_parser.RuleListener;
8
+ meta: eslint.Rule.RuleMetaData;
9
+ };
10
+
11
+ export { _default as default };
@@ -0,0 +1,11 @@
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';
5
+
6
+ declare const _default: {
7
+ create(context: PackageJsonRuleContext<unknown[]>): jsonc_eslint_parser.RuleListener;
8
+ meta: eslint.Rule.RuleMetaData;
9
+ };
10
+
11
+ export { _default as default };
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var unique_dependencies_exports = {};
20
+ __export(unique_dependencies_exports, {
21
+ default: () => unique_dependencies_default
22
+ });
23
+ module.exports = __toCommonJS(unique_dependencies_exports);
24
+ var import_createRule = require("../createRule.js");
25
+ var import_predicates = require("../utils/predicates.js");
26
+ const dependencyPropertyNames = /* @__PURE__ */ new Set([
27
+ "bundleDependencies",
28
+ "bundledDependencies",
29
+ "dependencies",
30
+ "devDependencies",
31
+ "optionalDependencies",
32
+ "peerDependencies",
33
+ "overrides"
34
+ ]);
35
+ var unique_dependencies_default = (0, import_createRule.createRule)({
36
+ create(context) {
37
+ function check(elements, getNodeToRemove) {
38
+ const seen = /* @__PURE__ */ new Set();
39
+ for (const element of elements.filter(import_predicates.isNotNullish).filter(import_predicates.isJSONStringLiteral).reverse()) {
40
+ if (seen.has(element.value)) {
41
+ report(element);
42
+ } else {
43
+ seen.add(element.value);
44
+ }
45
+ }
46
+ function report(node) {
47
+ context.report({
48
+ messageId: "overridden",
49
+ node,
50
+ suggest: [
51
+ {
52
+ fix(fixer) {
53
+ const removal = getNodeToRemove(node);
54
+ return [
55
+ fixer.remove(removal),
56
+ fixer.remove(
57
+ // A listing that's overridden can't be last,
58
+ // so we're guaranteed there's a comma after.
59
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
60
+ context.sourceCode.getTokenAfter(
61
+ removal
62
+ )
63
+ )
64
+ ];
65
+ },
66
+ messageId: "remove"
67
+ }
68
+ ]
69
+ });
70
+ }
71
+ }
72
+ return {
73
+ "Program > JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.type=JSONLiteral]"(node) {
74
+ if (!dependencyPropertyNames.has(node.key.value)) {
75
+ return;
76
+ }
77
+ switch (node.value.type) {
78
+ case "JSONArrayExpression":
79
+ check(
80
+ node.value.elements,
81
+ (element) => element
82
+ );
83
+ break;
84
+ case "JSONObjectExpression":
85
+ check(
86
+ node.value.properties.map(
87
+ (property) => property.key
88
+ ),
89
+ (property) => property.parent
90
+ );
91
+ break;
92
+ }
93
+ }
94
+ };
95
+ },
96
+ meta: {
97
+ docs: {
98
+ category: "Best Practices",
99
+ description: "Enforce that if repository directory is specified, it matches the path to the package.json file",
100
+ recommended: true
101
+ },
102
+ hasSuggestions: true,
103
+ messages: {
104
+ overridden: "Package name is overridden by a duplicate listing later on.",
105
+ remove: "Remove this redundant dependency listing."
106
+ }
107
+ }
108
+ });
109
+ //# sourceMappingURL=unique-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/rules/unique-dependencies.ts"],"sourcesContent":["import type { AST as JsonAST } from \"jsonc-eslint-parser\";\n\nimport * as ESTree from \"estree\";\n\nimport { createRule } from \"../createRule.js\";\nimport { isJSONStringLiteral, isNotNullish } from \"../utils/predicates.js\";\n\nconst dependencyPropertyNames = new Set([\n\t\"bundleDependencies\",\n\t\"bundledDependencies\",\n\t\"dependencies\",\n\t\"devDependencies\",\n\t\"optionalDependencies\",\n\t\"peerDependencies\",\n\t\"overrides\",\n]);\n\nexport default createRule({\n\tcreate(context) {\n\t\tfunction check(\n\t\t\telements: (JsonAST.JSONNode | null)[],\n\t\t\tgetNodeToRemove: (element: JsonAST.JSONNode) => ESTree.Node,\n\t\t) {\n\t\t\tconst seen = new Set();\n\n\t\t\tfor (const element of elements\n\t\t\t\t.filter(isNotNullish)\n\t\t\t\t.filter(isJSONStringLiteral)\n\t\t\t\t.reverse()) {\n\t\t\t\tif (seen.has(element.value)) {\n\t\t\t\t\treport(element);\n\t\t\t\t} else {\n\t\t\t\t\tseen.add(element.value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction report(node: JsonAST.JSONNode) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tmessageId: \"overridden\",\n\t\t\t\t\tnode: node as unknown as ESTree.Node,\n\t\t\t\t\tsuggest: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\tconst removal = getNodeToRemove(node);\n\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\tfixer.remove(removal),\n\t\t\t\t\t\t\t\t\tfixer.remove(\n\t\t\t\t\t\t\t\t\t\t// A listing that's overridden can't be last,\n\t\t\t\t\t\t\t\t\t\t// so we're guaranteed there's a comma after.\n\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\t\t\tcontext.sourceCode.getTokenAfter(\n\t\t\t\t\t\t\t\t\t\t\tremoval,\n\t\t\t\t\t\t\t\t\t\t)!,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmessageId: \"remove\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t\"Program > JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.type=JSONLiteral]\"(\n\t\t\t\tnode: JsonAST.JSONProperty & {\n\t\t\t\t\tkey: JsonAST.JSONStringLiteral;\n\t\t\t\t},\n\t\t\t) {\n\t\t\t\tif (!dependencyPropertyNames.has(node.key.value)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tswitch (node.value.type) {\n\t\t\t\t\tcase \"JSONArrayExpression\":\n\t\t\t\t\t\tcheck(\n\t\t\t\t\t\t\tnode.value.elements,\n\t\t\t\t\t\t\t(element) => element as unknown as ESTree.Node,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"JSONObjectExpression\":\n\t\t\t\t\t\tcheck(\n\t\t\t\t\t\t\tnode.value.properties.map(\n\t\t\t\t\t\t\t\t(property) => property.key,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t(property) =>\n\t\t\t\t\t\t\t\tproperty.parent as unknown as ESTree.Node,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n\n\tmeta: {\n\t\tdocs: {\n\t\t\tcategory: \"Best Practices\",\n\t\t\tdescription:\n\t\t\t\t\"Enforce that if repository directory is specified, it matches the path to the package.json file\",\n\t\t\trecommended: true,\n\t\t},\n\t\thasSuggestions: true,\n\t\tmessages: {\n\t\t\toverridden:\n\t\t\t\t\"Package name is overridden by a duplicate listing later on.\",\n\t\t\tremove: \"Remove this redundant dependency listing.\",\n\t\t},\n\t},\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,wBAA2B;AAC3B,wBAAkD;AAElD,MAAM,0BAA0B,oBAAI,IAAI;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,CAAC;AAED,IAAO,kCAAQ,8BAAW;AAAA,EACzB,OAAO,SAAS;AACf,aAAS,MACR,UACA,iBACC;AACD,YAAM,OAAO,oBAAI,IAAI;AAErB,iBAAW,WAAW,SACpB,OAAO,8BAAY,EACnB,OAAO,qCAAmB,EAC1B,QAAQ,GAAG;AACZ,YAAI,KAAK,IAAI,QAAQ,KAAK,GAAG;AAC5B,iBAAO,OAAO;AAAA,QACf,OAAO;AACN,eAAK,IAAI,QAAQ,KAAK;AAAA,QACvB;AAAA,MACD;AAEA,eAAS,OAAO,MAAwB;AACvC,gBAAQ,OAAO;AAAA,UACd,WAAW;AAAA,UACX;AAAA,UACA,SAAS;AAAA,YACR;AAAA,cACC,IAAI,OAAO;AACV,sBAAM,UAAU,gBAAgB,IAAI;AACpC,uBAAO;AAAA,kBACN,MAAM,OAAO,OAAO;AAAA,kBACpB,MAAM;AAAA;AAAA;AAAA;AAAA,oBAIL,QAAQ,WAAW;AAAA,sBAClB;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAAA,cACA,WAAW;AAAA,YACZ;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AAAA,IACD;AAEA,WAAO;AAAA,MACN,gGACC,MAGC;AACD,YAAI,CAAC,wBAAwB,IAAI,KAAK,IAAI,KAAK,GAAG;AACjD;AAAA,QACD;AAEA,gBAAQ,KAAK,MAAM,MAAM;AAAA,UACxB,KAAK;AACJ;AAAA,cACC,KAAK,MAAM;AAAA,cACX,CAAC,YAAY;AAAA,YACd;AACA;AAAA,UACD,KAAK;AACJ;AAAA,cACC,KAAK,MAAM,WAAW;AAAA,gBACrB,CAAC,aAAa,SAAS;AAAA,cACxB;AAAA,cACA,CAAC,aACA,SAAS;AAAA,YACX;AACA;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM;AAAA,IACL,MAAM;AAAA,MACL,UAAU;AAAA,MACV,aACC;AAAA,MACD,aAAa;AAAA,IACd;AAAA,IACA,gBAAgB;AAAA,IAChB,UAAU;AAAA,MACT,YACC;AAAA,MACD,QAAQ;AAAA,IACT;AAAA,EACD;AACD,CAAC;","names":[]}
@@ -0,0 +1,89 @@
1
+ import { createRule } from "../createRule.js";
2
+ import { isJSONStringLiteral, isNotNullish } from "../utils/predicates.js";
3
+ const dependencyPropertyNames = /* @__PURE__ */ new Set([
4
+ "bundleDependencies",
5
+ "bundledDependencies",
6
+ "dependencies",
7
+ "devDependencies",
8
+ "optionalDependencies",
9
+ "peerDependencies",
10
+ "overrides"
11
+ ]);
12
+ var unique_dependencies_default = createRule({
13
+ create(context) {
14
+ function check(elements, getNodeToRemove) {
15
+ const seen = /* @__PURE__ */ new Set();
16
+ for (const element of elements.filter(isNotNullish).filter(isJSONStringLiteral).reverse()) {
17
+ if (seen.has(element.value)) {
18
+ report(element);
19
+ } else {
20
+ seen.add(element.value);
21
+ }
22
+ }
23
+ function report(node) {
24
+ context.report({
25
+ messageId: "overridden",
26
+ node,
27
+ suggest: [
28
+ {
29
+ fix(fixer) {
30
+ const removal = getNodeToRemove(node);
31
+ return [
32
+ fixer.remove(removal),
33
+ fixer.remove(
34
+ // A listing that's overridden can't be last,
35
+ // so we're guaranteed there's a comma after.
36
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
37
+ context.sourceCode.getTokenAfter(
38
+ removal
39
+ )
40
+ )
41
+ ];
42
+ },
43
+ messageId: "remove"
44
+ }
45
+ ]
46
+ });
47
+ }
48
+ }
49
+ return {
50
+ "Program > JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.type=JSONLiteral]"(node) {
51
+ if (!dependencyPropertyNames.has(node.key.value)) {
52
+ return;
53
+ }
54
+ switch (node.value.type) {
55
+ case "JSONArrayExpression":
56
+ check(
57
+ node.value.elements,
58
+ (element) => element
59
+ );
60
+ break;
61
+ case "JSONObjectExpression":
62
+ check(
63
+ node.value.properties.map(
64
+ (property) => property.key
65
+ ),
66
+ (property) => property.parent
67
+ );
68
+ break;
69
+ }
70
+ }
71
+ };
72
+ },
73
+ meta: {
74
+ docs: {
75
+ category: "Best Practices",
76
+ description: "Enforce that if repository directory is specified, it matches the path to the package.json file",
77
+ recommended: true
78
+ },
79
+ hasSuggestions: true,
80
+ messages: {
81
+ overridden: "Package name is overridden by a duplicate listing later on.",
82
+ remove: "Remove this redundant dependency listing."
83
+ }
84
+ }
85
+ });
86
+ export {
87
+ unique_dependencies_default as default
88
+ };
89
+ //# sourceMappingURL=unique-dependencies.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/rules/unique-dependencies.ts"],"sourcesContent":["import type { AST as JsonAST } from \"jsonc-eslint-parser\";\n\nimport * as ESTree from \"estree\";\n\nimport { createRule } from \"../createRule.js\";\nimport { isJSONStringLiteral, isNotNullish } from \"../utils/predicates.js\";\n\nconst dependencyPropertyNames = new Set([\n\t\"bundleDependencies\",\n\t\"bundledDependencies\",\n\t\"dependencies\",\n\t\"devDependencies\",\n\t\"optionalDependencies\",\n\t\"peerDependencies\",\n\t\"overrides\",\n]);\n\nexport default createRule({\n\tcreate(context) {\n\t\tfunction check(\n\t\t\telements: (JsonAST.JSONNode | null)[],\n\t\t\tgetNodeToRemove: (element: JsonAST.JSONNode) => ESTree.Node,\n\t\t) {\n\t\t\tconst seen = new Set();\n\n\t\t\tfor (const element of elements\n\t\t\t\t.filter(isNotNullish)\n\t\t\t\t.filter(isJSONStringLiteral)\n\t\t\t\t.reverse()) {\n\t\t\t\tif (seen.has(element.value)) {\n\t\t\t\t\treport(element);\n\t\t\t\t} else {\n\t\t\t\t\tseen.add(element.value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction report(node: JsonAST.JSONNode) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tmessageId: \"overridden\",\n\t\t\t\t\tnode: node as unknown as ESTree.Node,\n\t\t\t\t\tsuggest: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfix(fixer) {\n\t\t\t\t\t\t\t\tconst removal = getNodeToRemove(node);\n\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\tfixer.remove(removal),\n\t\t\t\t\t\t\t\t\tfixer.remove(\n\t\t\t\t\t\t\t\t\t\t// A listing that's overridden can't be last,\n\t\t\t\t\t\t\t\t\t\t// so we're guaranteed there's a comma after.\n\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\t\t\tcontext.sourceCode.getTokenAfter(\n\t\t\t\t\t\t\t\t\t\t\tremoval,\n\t\t\t\t\t\t\t\t\t\t)!,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmessageId: \"remove\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t\"Program > JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.type=JSONLiteral]\"(\n\t\t\t\tnode: JsonAST.JSONProperty & {\n\t\t\t\t\tkey: JsonAST.JSONStringLiteral;\n\t\t\t\t},\n\t\t\t) {\n\t\t\t\tif (!dependencyPropertyNames.has(node.key.value)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tswitch (node.value.type) {\n\t\t\t\t\tcase \"JSONArrayExpression\":\n\t\t\t\t\t\tcheck(\n\t\t\t\t\t\t\tnode.value.elements,\n\t\t\t\t\t\t\t(element) => element as unknown as ESTree.Node,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"JSONObjectExpression\":\n\t\t\t\t\t\tcheck(\n\t\t\t\t\t\t\tnode.value.properties.map(\n\t\t\t\t\t\t\t\t(property) => property.key,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t(property) =>\n\t\t\t\t\t\t\t\tproperty.parent as unknown as ESTree.Node,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t},\n\n\tmeta: {\n\t\tdocs: {\n\t\t\tcategory: \"Best Practices\",\n\t\t\tdescription:\n\t\t\t\t\"Enforce that if repository directory is specified, it matches the path to the package.json file\",\n\t\t\trecommended: true,\n\t\t},\n\t\thasSuggestions: true,\n\t\tmessages: {\n\t\t\toverridden:\n\t\t\t\t\"Package name is overridden by a duplicate listing later on.\",\n\t\t\tremove: \"Remove this redundant dependency listing.\",\n\t\t},\n\t},\n});\n"],"mappings":"AAIA,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB,oBAAoB;AAElD,MAAM,0BAA0B,oBAAI,IAAI;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,CAAC;AAED,IAAO,8BAAQ,WAAW;AAAA,EACzB,OAAO,SAAS;AACf,aAAS,MACR,UACA,iBACC;AACD,YAAM,OAAO,oBAAI,IAAI;AAErB,iBAAW,WAAW,SACpB,OAAO,YAAY,EACnB,OAAO,mBAAmB,EAC1B,QAAQ,GAAG;AACZ,YAAI,KAAK,IAAI,QAAQ,KAAK,GAAG;AAC5B,iBAAO,OAAO;AAAA,QACf,OAAO;AACN,eAAK,IAAI,QAAQ,KAAK;AAAA,QACvB;AAAA,MACD;AAEA,eAAS,OAAO,MAAwB;AACvC,gBAAQ,OAAO;AAAA,UACd,WAAW;AAAA,UACX;AAAA,UACA,SAAS;AAAA,YACR;AAAA,cACC,IAAI,OAAO;AACV,sBAAM,UAAU,gBAAgB,IAAI;AACpC,uBAAO;AAAA,kBACN,MAAM,OAAO,OAAO;AAAA,kBACpB,MAAM;AAAA;AAAA;AAAA;AAAA,oBAIL,QAAQ,WAAW;AAAA,sBAClB;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAAA,cACA,WAAW;AAAA,YACZ;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AAAA,IACD;AAEA,WAAO;AAAA,MACN,gGACC,MAGC;AACD,YAAI,CAAC,wBAAwB,IAAI,KAAK,IAAI,KAAK,GAAG;AACjD;AAAA,QACD;AAEA,gBAAQ,KAAK,MAAM,MAAM;AAAA,UACxB,KAAK;AACJ;AAAA,cACC,KAAK,MAAM;AAAA,cACX,CAAC,YAAY;AAAA,YACd;AACA;AAAA,UACD,KAAK;AACJ;AAAA,cACC,KAAK,MAAM,WAAW;AAAA,gBACrB,CAAC,aAAa,SAAS;AAAA,cACxB;AAAA,cACA,CAAC,aACA,SAAS;AAAA,YACX;AACA;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM;AAAA,IACL,MAAM;AAAA,MACL,UAAU;AAAA,MACV,aACC;AAAA,MACD,aAAa;AAAA,IACd;AAAA,IACA,gBAAgB;AAAA,IAChB,UAAU;AAAA,MACT,YACC;AAAA,MACD,QAAQ;AAAA,IACT;AAAA,EACD;AACD,CAAC;","names":[]}
@@ -3,12 +3,13 @@ import { PackageJsonRuleModule } from '../../createRule.mjs';
3
3
  import 'estree';
4
4
  import 'jsonc-eslint-parser';
5
5
 
6
+ type JsonRuleTesterRun = (name: string, rule: PackageJsonRuleModule, tests: {
7
+ invalid?: RuleTester.InvalidTestCase[] | undefined;
8
+ valid?: (RuleTester.ValidTestCase | string)[] | undefined;
9
+ }) => void;
6
10
  type JsonRuleTester = RuleTester & {
7
- run: (name: string, rule: PackageJsonRuleModule, tests: {
8
- invalid?: RuleTester.InvalidTestCase[] | undefined;
9
- valid?: (RuleTester.ValidTestCase | string)[] | undefined;
10
- }) => void;
11
+ run: JsonRuleTesterRun;
11
12
  };
12
13
  declare const ruleTester: JsonRuleTester;
13
14
 
14
- export { type JsonRuleTester, ruleTester };
15
+ export { type JsonRuleTester, type JsonRuleTesterRun, ruleTester };
@@ -3,12 +3,13 @@ import { PackageJsonRuleModule } from '../../createRule.js';
3
3
  import 'estree';
4
4
  import 'jsonc-eslint-parser';
5
5
 
6
+ type JsonRuleTesterRun = (name: string, rule: PackageJsonRuleModule, tests: {
7
+ invalid?: RuleTester.InvalidTestCase[] | undefined;
8
+ valid?: (RuleTester.ValidTestCase | string)[] | undefined;
9
+ }) => void;
6
10
  type JsonRuleTester = RuleTester & {
7
- run: (name: string, rule: PackageJsonRuleModule, tests: {
8
- invalid?: RuleTester.InvalidTestCase[] | undefined;
9
- valid?: (RuleTester.ValidTestCase | string)[] | undefined;
10
- }) => void;
11
+ run: JsonRuleTesterRun;
11
12
  };
12
13
  declare const ruleTester: JsonRuleTester;
13
14
 
14
- export { type JsonRuleTester, ruleTester };
15
+ export { type JsonRuleTester, type JsonRuleTesterRun, ruleTester };
@@ -35,6 +35,19 @@ var import_eslint = require("eslint");
35
35
  const ruleTester = new import_eslint.RuleTester({
36
36
  parser: require.resolve("jsonc-eslint-parser")
37
37
  });
38
+ const originalRun = ruleTester.run;
39
+ ruleTester.run = (name, rule, tests) => {
40
+ originalRun.call(ruleTester, name, rule, {
41
+ invalid: tests.invalid?.map((test) => ({
42
+ filename: "package.json",
43
+ ...test
44
+ })),
45
+ valid: tests.valid?.map((test) => ({
46
+ filename: "package.json",
47
+ ...typeof test === "string" ? { code: test } : { ...test }
48
+ }))
49
+ });
50
+ };
38
51
  // Annotate the CommonJS export names for ESM import in node:
39
52
  0 && (module.exports = {
40
53
  ruleTester
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tests/rules/ruleTester.ts"],"sourcesContent":["import { RuleTester } from \"eslint\";\n\nimport type { PackageJsonRuleModule } from \"../../createRule.js\";\n\nexport type JsonRuleTester = RuleTester & {\n\trun: (\n\t\tname: string,\n\t\trule: PackageJsonRuleModule,\n\t\ttests: {\n\t\t\tinvalid?: RuleTester.InvalidTestCase[] | undefined;\n\t\t\tvalid?: (RuleTester.ValidTestCase | string)[] | undefined;\n\t\t},\n\t) => void;\n};\n\nexport const ruleTester = new RuleTester({\n\tparser: require.resolve(\"jsonc-eslint-parser\"),\n}) as JsonRuleTester;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAepB,MAAM,aAAa,IAAI,yBAAW;AAAA,EACxC,QAAQ,gBAAgB,qBAAqB;AAC9C,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/tests/rules/ruleTester.ts"],"sourcesContent":["import { RuleTester } from \"eslint\";\n\nimport type { PackageJsonRuleModule } from \"../../createRule.js\";\n\nexport type JsonRuleTesterRun = (\n\tname: string,\n\trule: PackageJsonRuleModule,\n\ttests: {\n\t\tinvalid?: RuleTester.InvalidTestCase[] | undefined;\n\t\tvalid?: (RuleTester.ValidTestCase | string)[] | undefined;\n\t},\n) => void;\n\nexport type JsonRuleTester = RuleTester & {\n\trun: JsonRuleTesterRun;\n};\n\nexport const ruleTester = new RuleTester({\n\tparser: require.resolve(\"jsonc-eslint-parser\"),\n}) as JsonRuleTester;\n\nconst originalRun = ruleTester.run;\n\nruleTester.run = (name, rule, tests) => {\n\toriginalRun.call(ruleTester, name, rule as PackageJsonRuleModule, {\n\t\tinvalid: tests.invalid?.map((test) => ({\n\t\t\tfilename: \"package.json\",\n\t\t\t...test,\n\t\t})),\n\t\tvalid: tests.valid?.map((test) => ({\n\t\t\tfilename: \"package.json\",\n\t\t\t...(typeof test === \"string\" ? { code: test } : { ...test }),\n\t\t})),\n\t});\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAiBpB,MAAM,aAAa,IAAI,yBAAW;AAAA,EACxC,QAAQ,gBAAgB,qBAAqB;AAC9C,CAAC;AAED,MAAM,cAAc,WAAW;AAE/B,WAAW,MAAM,CAAC,MAAM,MAAM,UAAU;AACvC,cAAY,KAAK,YAAY,MAAM,MAA+B;AAAA,IACjE,SAAS,MAAM,SAAS,IAAI,CAAC,UAAU;AAAA,MACtC,UAAU;AAAA,MACV,GAAG;AAAA,IACJ,EAAE;AAAA,IACF,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU;AAAA,MAClC,UAAU;AAAA,MACV,GAAI,OAAO,SAAS,WAAW,EAAE,MAAM,KAAK,IAAI,EAAE,GAAG,KAAK;AAAA,IAC3D,EAAE;AAAA,EACH,CAAC;AACF;","names":[]}
@@ -2,6 +2,19 @@ import { RuleTester } from "eslint";
2
2
  const ruleTester = new RuleTester({
3
3
  parser: require.resolve("jsonc-eslint-parser")
4
4
  });
5
+ const originalRun = ruleTester.run;
6
+ ruleTester.run = (name, rule, tests) => {
7
+ originalRun.call(ruleTester, name, rule, {
8
+ invalid: tests.invalid?.map((test) => ({
9
+ filename: "package.json",
10
+ ...test
11
+ })),
12
+ valid: tests.valid?.map((test) => ({
13
+ filename: "package.json",
14
+ ...typeof test === "string" ? { code: test } : { ...test }
15
+ }))
16
+ });
17
+ };
5
18
  export {
6
19
  ruleTester
7
20
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tests/rules/ruleTester.ts"],"sourcesContent":["import { RuleTester } from \"eslint\";\n\nimport type { PackageJsonRuleModule } from \"../../createRule.js\";\n\nexport type JsonRuleTester = RuleTester & {\n\trun: (\n\t\tname: string,\n\t\trule: PackageJsonRuleModule,\n\t\ttests: {\n\t\t\tinvalid?: RuleTester.InvalidTestCase[] | undefined;\n\t\t\tvalid?: (RuleTester.ValidTestCase | string)[] | undefined;\n\t\t},\n\t) => void;\n};\n\nexport const ruleTester = new RuleTester({\n\tparser: require.resolve(\"jsonc-eslint-parser\"),\n}) as JsonRuleTester;\n"],"mappings":"AAAA,SAAS,kBAAkB;AAepB,MAAM,aAAa,IAAI,WAAW;AAAA,EACxC,QAAQ,gBAAgB,qBAAqB;AAC9C,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/tests/rules/ruleTester.ts"],"sourcesContent":["import { RuleTester } from \"eslint\";\n\nimport type { PackageJsonRuleModule } from \"../../createRule.js\";\n\nexport type JsonRuleTesterRun = (\n\tname: string,\n\trule: PackageJsonRuleModule,\n\ttests: {\n\t\tinvalid?: RuleTester.InvalidTestCase[] | undefined;\n\t\tvalid?: (RuleTester.ValidTestCase | string)[] | undefined;\n\t},\n) => void;\n\nexport type JsonRuleTester = RuleTester & {\n\trun: JsonRuleTesterRun;\n};\n\nexport const ruleTester = new RuleTester({\n\tparser: require.resolve(\"jsonc-eslint-parser\"),\n}) as JsonRuleTester;\n\nconst originalRun = ruleTester.run;\n\nruleTester.run = (name, rule, tests) => {\n\toriginalRun.call(ruleTester, name, rule as PackageJsonRuleModule, {\n\t\tinvalid: tests.invalid?.map((test) => ({\n\t\t\tfilename: \"package.json\",\n\t\t\t...test,\n\t\t})),\n\t\tvalid: tests.valid?.map((test) => ({\n\t\t\tfilename: \"package.json\",\n\t\t\t...(typeof test === \"string\" ? { code: test } : { ...test }),\n\t\t})),\n\t});\n};\n"],"mappings":"AAAA,SAAS,kBAAkB;AAiBpB,MAAM,aAAa,IAAI,WAAW;AAAA,EACxC,QAAQ,gBAAgB,qBAAqB;AAC9C,CAAC;AAED,MAAM,cAAc,WAAW;AAE/B,WAAW,MAAM,CAAC,MAAM,MAAM,UAAU;AACvC,cAAY,KAAK,YAAY,MAAM,MAA+B;AAAA,IACjE,SAAS,MAAM,SAAS,IAAI,CAAC,UAAU;AAAA,MACtC,UAAU;AAAA,MACV,GAAG;AAAA,IACJ,EAAE;AAAA,IACF,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU;AAAA,MAClC,UAAU;AAAA,MACV,GAAI,OAAO,SAAS,WAAW,EAAE,MAAM,KAAK,IAAI,EAAE,GAAG,KAAK;AAAA,IAC3D,EAAE;AAAA,EACH,CAAC;AACF;","names":[]}
@@ -0,0 +1,6 @@
1
+ import { AST } from 'jsonc-eslint-parser';
2
+
3
+ declare function isNotNullish<T extends NonNullable<unknown>>(value: T | null | undefined): value is T;
4
+ declare function isJSONStringLiteral(node: AST.JSONNode): node is AST.JSONStringLiteral;
5
+
6
+ export { isJSONStringLiteral, isNotNullish };
@@ -0,0 +1,6 @@
1
+ import { AST } from 'jsonc-eslint-parser';
2
+
3
+ declare function isNotNullish<T extends NonNullable<unknown>>(value: T | null | undefined): value is T;
4
+ declare function isJSONStringLiteral(node: AST.JSONNode): node is AST.JSONStringLiteral;
5
+
6
+ export { isJSONStringLiteral, isNotNullish };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var predicates_exports = {};
20
+ __export(predicates_exports, {
21
+ isJSONStringLiteral: () => isJSONStringLiteral,
22
+ isNotNullish: () => isNotNullish
23
+ });
24
+ module.exports = __toCommonJS(predicates_exports);
25
+ function isNotNullish(value) {
26
+ return value !== null && value !== void 0;
27
+ }
28
+ function isJSONStringLiteral(node) {
29
+ return node.type === "JSONLiteral" && typeof node.value === "string";
30
+ }
31
+ // Annotate the CommonJS export names for ESM import in node:
32
+ 0 && (module.exports = {
33
+ isJSONStringLiteral,
34
+ isNotNullish
35
+ });
36
+ //# sourceMappingURL=predicates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/predicates.ts"],"sourcesContent":["import type { AST as JsonAST } from \"jsonc-eslint-parser\";\n\nexport function isNotNullish<T extends NonNullable<unknown>>(\n\tvalue: T | null | undefined,\n): value is T {\n\treturn value !== null && value !== undefined;\n}\n\nexport function isJSONStringLiteral(\n\tnode: JsonAST.JSONNode,\n): node is JsonAST.JSONStringLiteral {\n\treturn node.type === \"JSONLiteral\" && typeof node.value === \"string\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,aACf,OACa;AACb,SAAO,UAAU,QAAQ,UAAU;AACpC;AAEO,SAAS,oBACf,MACoC;AACpC,SAAO,KAAK,SAAS,iBAAiB,OAAO,KAAK,UAAU;AAC7D;","names":[]}
@@ -0,0 +1,11 @@
1
+ function isNotNullish(value) {
2
+ return value !== null && value !== void 0;
3
+ }
4
+ function isJSONStringLiteral(node) {
5
+ return node.type === "JSONLiteral" && typeof node.value === "string";
6
+ }
7
+ export {
8
+ isJSONStringLiteral,
9
+ isNotNullish
10
+ };
11
+ //# sourceMappingURL=predicates.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/predicates.ts"],"sourcesContent":["import type { AST as JsonAST } from \"jsonc-eslint-parser\";\n\nexport function isNotNullish<T extends NonNullable<unknown>>(\n\tvalue: T | null | undefined,\n): value is T {\n\treturn value !== null && value !== undefined;\n}\n\nexport function isJSONStringLiteral(\n\tnode: JsonAST.JSONNode,\n): node is JsonAST.JSONStringLiteral {\n\treturn node.type === \"JSONLiteral\" && typeof node.value === \"string\";\n}\n"],"mappings":"AAEO,SAAS,aACf,OACa;AACb,SAAO,UAAU,QAAQ,UAAU;AACpC;AAEO,SAAS,oBACf,MACoC;AACpC,SAAO,KAAK,SAAS,iBAAiB,OAAO,KAAK,UAAU;AAC7D;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-package-json",
3
- "version": "0.7.0",
3
+ "version": "0.8.1",
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": {