eslint-plugin-package-json 0.15.4 → 0.15.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  <a href="#contributors" target="_blank">
7
7
  <!-- prettier-ignore-start -->
8
8
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
9
- <img alt="All Contributors: 17 👪" src="https://img.shields.io/badge/all_contributors-17_👪-21bb42.svg" />
9
+ <img alt="All Contributors: 18 👪" src="https://img.shields.io/badge/all_contributors-18_👪-21bb42.svg" />
10
10
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
11
11
  <!-- prettier-ignore-end -->
12
12
  </a>
@@ -154,10 +154,11 @@ They can lint `package.json` files at project root and in any subfolder of the p
154
154
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/kendallgassner"><img src="https://avatars.githubusercontent.com/u/15275462?v=4?s=100" width="100px;" alt="Kendall Gassner"/><br /><sub><b>Kendall Gassner</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=kendallgassner" title="Code">💻</a> <a href="#maintenance-kendallgassner" title="Maintenance">🚧</a></td>
155
155
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/KristjanESPERANTO"><img src="https://avatars.githubusercontent.com/u/35647502?v=4?s=100" width="100px;" alt="Kristjan ESPERANTO"/><br /><sub><b>Kristjan ESPERANTO</b></sub></a><br /><a href="#ideas-kristjanesperanto" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3Akristjanesperanto" title="Bug reports">🐛</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=kristjanesperanto" title="Code">💻</a></td>
156
156
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/lo1tuma"><img src="https://avatars.githubusercontent.com/u/169170?v=4?s=100" width="100px;" alt="Mathias Schreck"/><br /><sub><b>Mathias Schreck</b></sub></a><br /><a href="#ideas-lo1tuma" title="Ideas, Planning, & Feedback">🤔</a></td>
157
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Cellule"><img src="https://avatars.githubusercontent.com/u/4157103?v=4?s=100" width="100px;" alt="Michael "Mike" Ferris"/><br /><sub><b>Michael "Mike" Ferris</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=cellule" title="Code">💻</a></td>
157
158
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/nschonni"><img src="https://avatars.githubusercontent.com/u/1297909?v=4?s=100" width="100px;" alt="Nick Schonning"/><br /><sub><b>Nick Schonning</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=nschonni" title="Code">💻</a></td>
158
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/sirugh"><img src="https://avatars.githubusercontent.com/u/1278869?v=4?s=100" width="100px;" alt="Stephen"/><br /><sub><b>Stephen</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=sirugh" title="Code">💻</a></td>
159
159
  </tr>
160
160
  <tr>
161
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/sirugh"><img src="https://avatars.githubusercontent.com/u/1278869?v=4?s=100" width="100px;" alt="Stephen"/><br /><sub><b>Stephen</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=sirugh" title="Code">💻</a></td>
161
162
  <td align="center" valign="top" width="14.28%"><a href="https://hyoban.cc"><img src="https://avatars.githubusercontent.com/u/38493346?v=4?s=100" width="100px;" alt="Stephen Zhou"/><br /><sub><b>Stephen Zhou</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3Ahyoban" title="Bug reports">🐛</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=hyoban" title="Code">💻</a> <a href="#ideas-hyoban" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=hyoban" title="Documentation">📖</a></td>
162
163
  <td align="center" valign="top" width="14.28%"><a href="https://ota-meshi.github.io/"><img src="https://avatars.githubusercontent.com/u/16508807?v=4?s=100" width="100px;" alt="Yosuke Ota"/><br /><sub><b>Yosuke Ota</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3Aota-meshi" title="Bug reports">🐛</a> <a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/commits?author=ota-meshi" title="Code">💻</a></td>
163
164
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/b3rnhard"><img src="https://avatars.githubusercontent.com/u/10774404?v=4?s=100" width="100px;" alt="b3rnhard"/><br /><sub><b>b3rnhard</b></sub></a><br /><a href="https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=author%3Ab3rnhard" title="Bug reports">🐛</a></td>
package/lib/index.d.mts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as eslint from 'eslint';
2
2
  import * as jsonc_eslint_parser from 'jsonc-eslint-parser';
3
3
  import { PackageJsonRuleContext } from './createRule.mjs';
4
+ import { plugin } from './plugin.mjs';
4
5
  import 'estree';
5
6
 
6
7
  declare const rules: {
@@ -54,4 +55,4 @@ declare const configs: {
54
55
  };
55
56
  };
56
57
 
57
- export { configs, rules };
58
+ export { configs, plugin as default, rules };
package/lib/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as eslint from 'eslint';
2
2
  import * as jsonc_eslint_parser from 'jsonc-eslint-parser';
3
3
  import { PackageJsonRuleContext } from './createRule.js';
4
+ import { plugin } from './plugin.js';
4
5
  import 'estree';
5
6
 
6
7
  declare const rules: {
@@ -54,4 +55,4 @@ declare const configs: {
54
55
  };
55
56
  };
56
57
 
57
- export { configs, rules };
58
+ export { configs, plugin as default, rules };
package/lib/index.js CHANGED
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var src_exports = {};
20
20
  __export(src_exports, {
21
21
  configs: () => configs,
22
+ default: () => src_default,
22
23
  rules: () => rules
23
24
  });
24
25
  module.exports = __toCommonJS(src_exports);
@@ -30,6 +31,7 @@ const configs = {
30
31
  rules: import_plugin.recommendedRuleSettings
31
32
  }
32
33
  };
34
+ var src_default = import_plugin.plugin;
33
35
  // Annotate the CommonJS export names for ESM import in node:
34
36
  0 && (module.exports = {
35
37
  configs,
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { plugin, recommendedRuleSettings } from \"./plugin.js\";\n\nexport const rules = plugin.rules;\n\nexport const configs = {\n\trecommended: {\n\t\tplugins: [\"package-json\"],\n\t\trules: recommendedRuleSettings,\n\t},\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAgD;AAEzC,MAAM,QAAQ,qBAAO;AAErB,MAAM,UAAU;AAAA,EACtB,aAAa;AAAA,IACZ,SAAS,CAAC,cAAc;AAAA,IACxB,OAAO;AAAA,EACR;AACD;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { plugin, recommendedRuleSettings } from \"./plugin.js\";\n\nexport const rules = plugin.rules;\n\nexport const configs = {\n\trecommended: {\n\t\tplugins: [\"package-json\"],\n\t\trules: recommendedRuleSettings,\n\t},\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAgD;AAEzC,MAAM,QAAQ,qBAAO;AAErB,MAAM,UAAU;AAAA,EACtB,aAAa;AAAA,IACZ,SAAS,CAAC,cAAc;AAAA,IACxB,OAAO;AAAA,EACR;AACD;AAEA,IAAO,cAAQ;","names":[]}
package/lib/index.mjs CHANGED
@@ -6,8 +6,10 @@ const configs = {
6
6
  rules: recommendedRuleSettings
7
7
  }
8
8
  };
9
+ var src_default = plugin;
9
10
  export {
10
11
  configs,
12
+ src_default as default,
11
13
  rules
12
14
  };
13
15
  //# sourceMappingURL=index.mjs.map
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { plugin, recommendedRuleSettings } from \"./plugin.js\";\n\nexport const rules = plugin.rules;\n\nexport const configs = {\n\trecommended: {\n\t\tplugins: [\"package-json\"],\n\t\trules: recommendedRuleSettings,\n\t},\n};\n"],"mappings":"AAAA,SAAS,QAAQ,+BAA+B;AAEzC,MAAM,QAAQ,OAAO;AAErB,MAAM,UAAU;AAAA,EACtB,aAAa;AAAA,IACZ,SAAS,CAAC,cAAc;AAAA,IACxB,OAAO;AAAA,EACR;AACD;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { plugin, recommendedRuleSettings } from \"./plugin.js\";\n\nexport const rules = plugin.rules;\n\nexport const configs = {\n\trecommended: {\n\t\tplugins: [\"package-json\"],\n\t\trules: recommendedRuleSettings,\n\t},\n};\n\nexport default plugin;\n"],"mappings":"AAAA,SAAS,QAAQ,+BAA+B;AAEzC,MAAM,QAAQ,OAAO;AAErB,MAAM,UAAU;AAAA,EACtB,aAAa;AAAA,IACZ,SAAS,CAAC,cAAc;AAAA,IACxB,OAAO;AAAA,EACR;AACD;AAEA,IAAO,cAAQ;","names":[]}
@@ -27,7 +27,8 @@ const defaultCollections = [
27
27
  "devDependencies",
28
28
  "dependencies",
29
29
  "peerDependencies",
30
- "config"
30
+ "config",
31
+ "exports"
31
32
  ];
32
33
  const rule = (0, import_createRule.createRule)({
33
34
  create(context) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/sort-collections.ts"],"sourcesContent":["import * as ESTree from \"estree\";\nimport { AST } from \"jsonc-eslint-parser\";\n\nimport { createRule } from \"../createRule.js\";\n\nconst defaultCollections = [\n\t\"scripts\",\n\t\"devDependencies\",\n\t\"dependencies\",\n\t\"peerDependencies\",\n\t\"config\",\n];\n\ntype Options = string[];\n\nexport const rule = createRule<Options>({\n\tcreate(context) {\n\t\tconst toSort = context.options[0] || defaultCollections;\n\t\treturn {\n\t\t\t\"JSONProperty:exit\"(node) {\n\t\t\t\tconst { key, value } = node as AST.JSONProperty & {\n\t\t\t\t\tkey: AST.JSONStringLiteral;\n\t\t\t\t};\n\n\t\t\t\tconst collection = value;\n\t\t\t\tif (\n\t\t\t\t\tcollection.type === \"JSONObjectExpression\" &&\n\t\t\t\t\ttoSort.includes(key.value)\n\t\t\t\t) {\n\t\t\t\t\tconst currentOrder = collection.properties;\n\t\t\t\t\tconst desiredOrder = currentOrder\n\t\t\t\t\t\t.slice()\n\t\t\t\t\t\t.sort((a, b) =>\n\t\t\t\t\t\t\t(a.key as AST.JSONStringLiteral).value >\n\t\t\t\t\t\t\t(b.key as AST.JSONStringLiteral).value\n\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t: -1,\n\t\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\tcurrentOrder.some(\n\t\t\t\t\t\t\t(property, i) => desiredOrder[i] !== property,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tkey: key.value,\n\t\t\t\t\t\t\t},\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\tcollection as unknown as ESTree.Node,\n\t\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\t\tdesiredOrder.reduce<\n\t\t\t\t\t\t\t\t\t\t\tRecord<string, unknown>\n\t\t\t\t\t\t\t\t\t\t>((out, property) => {\n\t\t\t\t\t\t\t\t\t\t\tout[\n\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\tproperty.key as AST.JSONStringLiteral\n\t\t\t\t\t\t\t\t\t\t\t\t).value\n\t\t\t\t\t\t\t\t\t\t\t] = JSON.parse(\n\t\t\t\t\t\t\t\t\t\t\t\tcontext.sourceCode.getText(\n\t\t\t\t\t\t\t\t\t\t\t\t\tproperty.value as unknown as ESTree.Node,\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\treturn out;\n\t\t\t\t\t\t\t\t\t\t}, {}),\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t\t\t\t\t.join(\"\\n \"), // nest indents\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tloc: collection.loc,\n\t\t\t\t\t\t\tmessage: \"Package {{ key }} are not alphabetized\",\n\t\t\t\t\t\t\tnode: node as unknown as ESTree.Node,\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\t},\n\n\tmeta: {\n\t\tdocs: {\n\t\t\tcategory: \"Best Practices\",\n\t\t\tdescription:\n\t\t\t\t\"Dependencies, scripts, and configuration values must be declared in alphabetical order.\",\n\t\t\trecommended: true,\n\t\t},\n\t\tfixable: \"code\",\n\t\tschema: [\n\t\t\t{\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t],\n\t},\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAA2B;AAE3B,MAAM,qBAAqB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAIO,MAAM,WAAO,8BAAoB;AAAA,EACvC,OAAO,SAAS;AACf,UAAM,SAAS,QAAQ,QAAQ,CAAC,KAAK;AACrC,WAAO;AAAA,MACN,oBAAoB,MAAM;AACzB,cAAM,EAAE,KAAK,MAAM,IAAI;AAIvB,cAAM,aAAa;AACnB,YACC,WAAW,SAAS,0BACpB,OAAO,SAAS,IAAI,KAAK,GACxB;AACD,gBAAM,eAAe,WAAW;AAChC,gBAAM,eAAe,aACnB,MAAM,EACN;AAAA,YAAK,CAAC,GAAG,MACR,EAAE,IAA8B,QAChC,EAAE,IAA8B,QAC9B,IACA;AAAA,UACJ;AACD,cACC,aAAa;AAAA,YACZ,CAAC,UAAU,MAAM,aAAa,CAAC,MAAM;AAAA,UACtC,GACC;AACD,oBAAQ,OAAO;AAAA,cACd,MAAM;AAAA,gBACL,KAAK,IAAI;AAAA,cACV;AAAA,cACA,IAAI,OAAO;AACV,uBAAO,MAAM;AAAA,kBACZ;AAAA,kBACA,KAAK;AAAA,oBACJ,aAAa,OAEX,CAAC,KAAK,aAAa;AACpB,0BAEE,SAAS,IACR,KACH,IAAI,KAAK;AAAA,wBACR,QAAQ,WAAW;AAAA,0BAClB,SAAS;AAAA,wBACV;AAAA,sBACD;AACA,6BAAO;AAAA,oBACR,GAAG,CAAC,CAAC;AAAA,oBACL;AAAA,oBACA;AAAA,kBACD,EACE,MAAM,IAAI,EACV,KAAK,MAAM;AAAA;AAAA,gBACd;AAAA,cACD;AAAA,cACA,KAAK,WAAW;AAAA,cAChB,SAAS;AAAA,cACT;AAAA,YACD,CAAC;AAAA,UACF;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,OAAO;AAAA,UACN,MAAM;AAAA,QACP;AAAA,QACA,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/rules/sort-collections.ts"],"sourcesContent":["import * as ESTree from \"estree\";\nimport { AST } from \"jsonc-eslint-parser\";\n\nimport { createRule } from \"../createRule.js\";\n\nconst defaultCollections = [\n\t\"scripts\",\n\t\"devDependencies\",\n\t\"dependencies\",\n\t\"peerDependencies\",\n\t\"config\",\n\t\"exports\",\n];\n\ntype Options = string[];\n\nexport const rule = createRule<Options>({\n\tcreate(context) {\n\t\tconst toSort = context.options[0] || defaultCollections;\n\t\treturn {\n\t\t\t\"JSONProperty:exit\"(node) {\n\t\t\t\tconst { key, value } = node as AST.JSONProperty & {\n\t\t\t\t\tkey: AST.JSONStringLiteral;\n\t\t\t\t};\n\n\t\t\t\tconst collection = value;\n\t\t\t\tif (\n\t\t\t\t\tcollection.type === \"JSONObjectExpression\" &&\n\t\t\t\t\ttoSort.includes(key.value)\n\t\t\t\t) {\n\t\t\t\t\tconst currentOrder = collection.properties;\n\t\t\t\t\tconst desiredOrder = currentOrder\n\t\t\t\t\t\t.slice()\n\t\t\t\t\t\t.sort((a, b) =>\n\t\t\t\t\t\t\t(a.key as AST.JSONStringLiteral).value >\n\t\t\t\t\t\t\t(b.key as AST.JSONStringLiteral).value\n\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t: -1,\n\t\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\tcurrentOrder.some(\n\t\t\t\t\t\t\t(property, i) => desiredOrder[i] !== property,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tkey: key.value,\n\t\t\t\t\t\t\t},\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\tcollection as unknown as ESTree.Node,\n\t\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\t\tdesiredOrder.reduce<\n\t\t\t\t\t\t\t\t\t\t\tRecord<string, unknown>\n\t\t\t\t\t\t\t\t\t\t>((out, property) => {\n\t\t\t\t\t\t\t\t\t\t\tout[\n\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\tproperty.key as AST.JSONStringLiteral\n\t\t\t\t\t\t\t\t\t\t\t\t).value\n\t\t\t\t\t\t\t\t\t\t\t] = JSON.parse(\n\t\t\t\t\t\t\t\t\t\t\t\tcontext.sourceCode.getText(\n\t\t\t\t\t\t\t\t\t\t\t\t\tproperty.value as unknown as ESTree.Node,\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\treturn out;\n\t\t\t\t\t\t\t\t\t\t}, {}),\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t\t\t\t\t.join(\"\\n \"), // nest indents\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tloc: collection.loc,\n\t\t\t\t\t\t\tmessage: \"Package {{ key }} are not alphabetized\",\n\t\t\t\t\t\t\tnode: node as unknown as ESTree.Node,\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\t},\n\n\tmeta: {\n\t\tdocs: {\n\t\t\tcategory: \"Best Practices\",\n\t\t\tdescription:\n\t\t\t\t\"Dependencies, scripts, and configuration values must be declared in alphabetical order.\",\n\t\t\trecommended: true,\n\t\t},\n\t\tfixable: \"code\",\n\t\tschema: [\n\t\t\t{\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t],\n\t},\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAA2B;AAE3B,MAAM,qBAAqB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAIO,MAAM,WAAO,8BAAoB;AAAA,EACvC,OAAO,SAAS;AACf,UAAM,SAAS,QAAQ,QAAQ,CAAC,KAAK;AACrC,WAAO;AAAA,MACN,oBAAoB,MAAM;AACzB,cAAM,EAAE,KAAK,MAAM,IAAI;AAIvB,cAAM,aAAa;AACnB,YACC,WAAW,SAAS,0BACpB,OAAO,SAAS,IAAI,KAAK,GACxB;AACD,gBAAM,eAAe,WAAW;AAChC,gBAAM,eAAe,aACnB,MAAM,EACN;AAAA,YAAK,CAAC,GAAG,MACR,EAAE,IAA8B,QAChC,EAAE,IAA8B,QAC9B,IACA;AAAA,UACJ;AACD,cACC,aAAa;AAAA,YACZ,CAAC,UAAU,MAAM,aAAa,CAAC,MAAM;AAAA,UACtC,GACC;AACD,oBAAQ,OAAO;AAAA,cACd,MAAM;AAAA,gBACL,KAAK,IAAI;AAAA,cACV;AAAA,cACA,IAAI,OAAO;AACV,uBAAO,MAAM;AAAA,kBACZ;AAAA,kBACA,KAAK;AAAA,oBACJ,aAAa,OAEX,CAAC,KAAK,aAAa;AACpB,0BAEE,SAAS,IACR,KACH,IAAI,KAAK;AAAA,wBACR,QAAQ,WAAW;AAAA,0BAClB,SAAS;AAAA,wBACV;AAAA,sBACD;AACA,6BAAO;AAAA,oBACR,GAAG,CAAC,CAAC;AAAA,oBACL;AAAA,oBACA;AAAA,kBACD,EACE,MAAM,IAAI,EACV,KAAK,MAAM;AAAA;AAAA,gBACd;AAAA,cACD;AAAA,cACA,KAAK,WAAW;AAAA,cAChB,SAAS;AAAA,cACT;AAAA,YACD,CAAC;AAAA,UACF;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,OAAO;AAAA,UACN,MAAM;AAAA,QACP;AAAA,QACA,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD,CAAC;","names":[]}
@@ -4,7 +4,8 @@ const defaultCollections = [
4
4
  "devDependencies",
5
5
  "dependencies",
6
6
  "peerDependencies",
7
- "config"
7
+ "config",
8
+ "exports"
8
9
  ];
9
10
  const rule = createRule({
10
11
  create(context) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/sort-collections.ts"],"sourcesContent":["import * as ESTree from \"estree\";\nimport { AST } from \"jsonc-eslint-parser\";\n\nimport { createRule } from \"../createRule.js\";\n\nconst defaultCollections = [\n\t\"scripts\",\n\t\"devDependencies\",\n\t\"dependencies\",\n\t\"peerDependencies\",\n\t\"config\",\n];\n\ntype Options = string[];\n\nexport const rule = createRule<Options>({\n\tcreate(context) {\n\t\tconst toSort = context.options[0] || defaultCollections;\n\t\treturn {\n\t\t\t\"JSONProperty:exit\"(node) {\n\t\t\t\tconst { key, value } = node as AST.JSONProperty & {\n\t\t\t\t\tkey: AST.JSONStringLiteral;\n\t\t\t\t};\n\n\t\t\t\tconst collection = value;\n\t\t\t\tif (\n\t\t\t\t\tcollection.type === \"JSONObjectExpression\" &&\n\t\t\t\t\ttoSort.includes(key.value)\n\t\t\t\t) {\n\t\t\t\t\tconst currentOrder = collection.properties;\n\t\t\t\t\tconst desiredOrder = currentOrder\n\t\t\t\t\t\t.slice()\n\t\t\t\t\t\t.sort((a, b) =>\n\t\t\t\t\t\t\t(a.key as AST.JSONStringLiteral).value >\n\t\t\t\t\t\t\t(b.key as AST.JSONStringLiteral).value\n\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t: -1,\n\t\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\tcurrentOrder.some(\n\t\t\t\t\t\t\t(property, i) => desiredOrder[i] !== property,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tkey: key.value,\n\t\t\t\t\t\t\t},\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\tcollection as unknown as ESTree.Node,\n\t\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\t\tdesiredOrder.reduce<\n\t\t\t\t\t\t\t\t\t\t\tRecord<string, unknown>\n\t\t\t\t\t\t\t\t\t\t>((out, property) => {\n\t\t\t\t\t\t\t\t\t\t\tout[\n\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\tproperty.key as AST.JSONStringLiteral\n\t\t\t\t\t\t\t\t\t\t\t\t).value\n\t\t\t\t\t\t\t\t\t\t\t] = JSON.parse(\n\t\t\t\t\t\t\t\t\t\t\t\tcontext.sourceCode.getText(\n\t\t\t\t\t\t\t\t\t\t\t\t\tproperty.value as unknown as ESTree.Node,\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\treturn out;\n\t\t\t\t\t\t\t\t\t\t}, {}),\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t\t\t\t\t.join(\"\\n \"), // nest indents\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tloc: collection.loc,\n\t\t\t\t\t\t\tmessage: \"Package {{ key }} are not alphabetized\",\n\t\t\t\t\t\t\tnode: node as unknown as ESTree.Node,\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\t},\n\n\tmeta: {\n\t\tdocs: {\n\t\t\tcategory: \"Best Practices\",\n\t\t\tdescription:\n\t\t\t\t\"Dependencies, scripts, and configuration values must be declared in alphabetical order.\",\n\t\t\trecommended: true,\n\t\t},\n\t\tfixable: \"code\",\n\t\tschema: [\n\t\t\t{\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t],\n\t},\n});\n"],"mappings":"AAGA,SAAS,kBAAkB;AAE3B,MAAM,qBAAqB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAIO,MAAM,OAAO,WAAoB;AAAA,EACvC,OAAO,SAAS;AACf,UAAM,SAAS,QAAQ,QAAQ,CAAC,KAAK;AACrC,WAAO;AAAA,MACN,oBAAoB,MAAM;AACzB,cAAM,EAAE,KAAK,MAAM,IAAI;AAIvB,cAAM,aAAa;AACnB,YACC,WAAW,SAAS,0BACpB,OAAO,SAAS,IAAI,KAAK,GACxB;AACD,gBAAM,eAAe,WAAW;AAChC,gBAAM,eAAe,aACnB,MAAM,EACN;AAAA,YAAK,CAAC,GAAG,MACR,EAAE,IAA8B,QAChC,EAAE,IAA8B,QAC9B,IACA;AAAA,UACJ;AACD,cACC,aAAa;AAAA,YACZ,CAAC,UAAU,MAAM,aAAa,CAAC,MAAM;AAAA,UACtC,GACC;AACD,oBAAQ,OAAO;AAAA,cACd,MAAM;AAAA,gBACL,KAAK,IAAI;AAAA,cACV;AAAA,cACA,IAAI,OAAO;AACV,uBAAO,MAAM;AAAA,kBACZ;AAAA,kBACA,KAAK;AAAA,oBACJ,aAAa,OAEX,CAAC,KAAK,aAAa;AACpB,0BAEE,SAAS,IACR,KACH,IAAI,KAAK;AAAA,wBACR,QAAQ,WAAW;AAAA,0BAClB,SAAS;AAAA,wBACV;AAAA,sBACD;AACA,6BAAO;AAAA,oBACR,GAAG,CAAC,CAAC;AAAA,oBACL;AAAA,oBACA;AAAA,kBACD,EACE,MAAM,IAAI,EACV,KAAK,MAAM;AAAA;AAAA,gBACd;AAAA,cACD;AAAA,cACA,KAAK,WAAW;AAAA,cAChB,SAAS;AAAA,cACT;AAAA,YACD,CAAC;AAAA,UACF;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,OAAO;AAAA,UACN,MAAM;AAAA,QACP;AAAA,QACA,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/rules/sort-collections.ts"],"sourcesContent":["import * as ESTree from \"estree\";\nimport { AST } from \"jsonc-eslint-parser\";\n\nimport { createRule } from \"../createRule.js\";\n\nconst defaultCollections = [\n\t\"scripts\",\n\t\"devDependencies\",\n\t\"dependencies\",\n\t\"peerDependencies\",\n\t\"config\",\n\t\"exports\",\n];\n\ntype Options = string[];\n\nexport const rule = createRule<Options>({\n\tcreate(context) {\n\t\tconst toSort = context.options[0] || defaultCollections;\n\t\treturn {\n\t\t\t\"JSONProperty:exit\"(node) {\n\t\t\t\tconst { key, value } = node as AST.JSONProperty & {\n\t\t\t\t\tkey: AST.JSONStringLiteral;\n\t\t\t\t};\n\n\t\t\t\tconst collection = value;\n\t\t\t\tif (\n\t\t\t\t\tcollection.type === \"JSONObjectExpression\" &&\n\t\t\t\t\ttoSort.includes(key.value)\n\t\t\t\t) {\n\t\t\t\t\tconst currentOrder = collection.properties;\n\t\t\t\t\tconst desiredOrder = currentOrder\n\t\t\t\t\t\t.slice()\n\t\t\t\t\t\t.sort((a, b) =>\n\t\t\t\t\t\t\t(a.key as AST.JSONStringLiteral).value >\n\t\t\t\t\t\t\t(b.key as AST.JSONStringLiteral).value\n\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t: -1,\n\t\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\tcurrentOrder.some(\n\t\t\t\t\t\t\t(property, i) => desiredOrder[i] !== property,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tkey: key.value,\n\t\t\t\t\t\t\t},\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\tcollection as unknown as ESTree.Node,\n\t\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\t\tdesiredOrder.reduce<\n\t\t\t\t\t\t\t\t\t\t\tRecord<string, unknown>\n\t\t\t\t\t\t\t\t\t\t>((out, property) => {\n\t\t\t\t\t\t\t\t\t\t\tout[\n\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\tproperty.key as AST.JSONStringLiteral\n\t\t\t\t\t\t\t\t\t\t\t\t).value\n\t\t\t\t\t\t\t\t\t\t\t] = JSON.parse(\n\t\t\t\t\t\t\t\t\t\t\t\tcontext.sourceCode.getText(\n\t\t\t\t\t\t\t\t\t\t\t\t\tproperty.value as unknown as ESTree.Node,\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\treturn out;\n\t\t\t\t\t\t\t\t\t\t}, {}),\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t\t\t\t\t.join(\"\\n \"), // nest indents\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tloc: collection.loc,\n\t\t\t\t\t\t\tmessage: \"Package {{ key }} are not alphabetized\",\n\t\t\t\t\t\t\tnode: node as unknown as ESTree.Node,\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\t},\n\n\tmeta: {\n\t\tdocs: {\n\t\t\tcategory: \"Best Practices\",\n\t\t\tdescription:\n\t\t\t\t\"Dependencies, scripts, and configuration values must be declared in alphabetical order.\",\n\t\t\trecommended: true,\n\t\t},\n\t\tfixable: \"code\",\n\t\tschema: [\n\t\t\t{\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t],\n\t},\n});\n"],"mappings":"AAGA,SAAS,kBAAkB;AAE3B,MAAM,qBAAqB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAIO,MAAM,OAAO,WAAoB;AAAA,EACvC,OAAO,SAAS;AACf,UAAM,SAAS,QAAQ,QAAQ,CAAC,KAAK;AACrC,WAAO;AAAA,MACN,oBAAoB,MAAM;AACzB,cAAM,EAAE,KAAK,MAAM,IAAI;AAIvB,cAAM,aAAa;AACnB,YACC,WAAW,SAAS,0BACpB,OAAO,SAAS,IAAI,KAAK,GACxB;AACD,gBAAM,eAAe,WAAW;AAChC,gBAAM,eAAe,aACnB,MAAM,EACN;AAAA,YAAK,CAAC,GAAG,MACR,EAAE,IAA8B,QAChC,EAAE,IAA8B,QAC9B,IACA;AAAA,UACJ;AACD,cACC,aAAa;AAAA,YACZ,CAAC,UAAU,MAAM,aAAa,CAAC,MAAM;AAAA,UACtC,GACC;AACD,oBAAQ,OAAO;AAAA,cACd,MAAM;AAAA,gBACL,KAAK,IAAI;AAAA,cACV;AAAA,cACA,IAAI,OAAO;AACV,uBAAO,MAAM;AAAA,kBACZ;AAAA,kBACA,KAAK;AAAA,oBACJ,aAAa,OAEX,CAAC,KAAK,aAAa;AACpB,0BAEE,SAAS,IACR,KACH,IAAI,KAAK;AAAA,wBACR,QAAQ,WAAW;AAAA,0BAClB,SAAS;AAAA,wBACV;AAAA,sBACD;AACA,6BAAO;AAAA,oBACR,GAAG,CAAC,CAAC;AAAA,oBACL;AAAA,oBACA;AAAA,kBACD,EACE,MAAM,IAAI,EACV,KAAK,MAAM;AAAA;AAAA,gBACd;AAAA,cACD;AAAA,cACA,KAAK,WAAW;AAAA,cAChB,SAAS;AAAA,cACT;AAAA,YACD,CAAC;AAAA,UACF;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,OAAO;AAAA,UACN,MAAM;AAAA,QACP;AAAA,QACA,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD,CAAC;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-package-json",
3
- "version": "0.15.4",
3
+ "version": "0.15.6",
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": {
@@ -98,7 +98,7 @@
98
98
  "jsonc-eslint-parser": "^2.4.0",
99
99
  "knip": "^5.0.0",
100
100
  "lint-staged": "^15.2.0",
101
- "markdownlint": "^0.35.0",
101
+ "markdownlint": "^0.36.0",
102
102
  "markdownlint-cli": "^0.42.0",
103
103
  "npm-package-json-lint": "^8.0.0",
104
104
  "npm-package-json-lint-config-default": "^7.0.0",
@@ -116,7 +116,7 @@
116
116
  "eslint": ">=8.0.0",
117
117
  "jsonc-eslint-parser": "^2.0.0"
118
118
  },
119
- "packageManager": "pnpm@9.12.1",
119
+ "packageManager": "pnpm@9.12.3",
120
120
  "engines": {
121
121
  "node": ">=18"
122
122
  },