eslint-plugin-perfectionist 2.8.0 → 2.10.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 (84) hide show
  1. package/dist/configs/recommended-alphabetical.js +9 -1
  2. package/dist/configs/recommended-alphabetical.mjs +5 -11
  3. package/dist/configs/recommended-line-length.js +9 -1
  4. package/dist/configs/recommended-line-length.mjs +5 -11
  5. package/dist/configs/recommended-natural.js +9 -1
  6. package/dist/configs/recommended-natural.mjs +5 -11
  7. package/dist/index.js +135 -3
  8. package/dist/index.mjs +76 -2244
  9. package/dist/package.json.js +4 -0
  10. package/dist/package.json.mjs +4 -0
  11. package/dist/rules/sort-array-includes.js +129 -0
  12. package/dist/rules/sort-array-includes.mjs +129 -0
  13. package/dist/rules/sort-astro-attributes.js +161 -0
  14. package/dist/rules/sort-astro-attributes.mjs +161 -0
  15. package/dist/rules/sort-classes.js +213 -0
  16. package/dist/rules/sort-classes.mjs +213 -0
  17. package/dist/rules/sort-enums.js +117 -0
  18. package/dist/rules/sort-enums.mjs +117 -0
  19. package/dist/rules/sort-exports.js +104 -0
  20. package/dist/rules/sort-exports.mjs +104 -0
  21. package/dist/rules/sort-imports.js +440 -0
  22. package/dist/rules/sort-imports.mjs +440 -0
  23. package/dist/rules/sort-interfaces.js +253 -0
  24. package/dist/rules/sort-interfaces.mjs +253 -0
  25. package/dist/rules/sort-intersection-types.js +92 -0
  26. package/dist/rules/sort-intersection-types.mjs +92 -0
  27. package/dist/rules/sort-jsx-props.js +156 -0
  28. package/dist/rules/sort-jsx-props.mjs +156 -0
  29. package/dist/rules/sort-maps.js +125 -0
  30. package/dist/rules/sort-maps.mjs +125 -0
  31. package/dist/rules/sort-named-exports.js +105 -0
  32. package/dist/rules/sort-named-exports.mjs +105 -0
  33. package/dist/rules/sort-named-imports.js +123 -0
  34. package/dist/rules/sort-named-imports.mjs +123 -0
  35. package/dist/rules/sort-object-types.js +189 -0
  36. package/dist/rules/sort-object-types.mjs +189 -0
  37. package/dist/rules/sort-objects.js +265 -0
  38. package/dist/rules/sort-objects.mjs +265 -0
  39. package/dist/rules/sort-svelte-attributes.js +168 -0
  40. package/dist/rules/sort-svelte-attributes.mjs +168 -0
  41. package/dist/rules/sort-union-types.js +120 -0
  42. package/dist/rules/sort-union-types.mjs +120 -0
  43. package/dist/rules/sort-vue-attributes.js +165 -0
  44. package/dist/rules/sort-vue-attributes.mjs +165 -0
  45. package/dist/typings/index.js +29 -0
  46. package/dist/typings/index.mjs +29 -0
  47. package/dist/utils/compare.js +38 -0
  48. package/dist/utils/compare.mjs +38 -0
  49. package/dist/utils/complete.js +4 -0
  50. package/dist/utils/complete.mjs +4 -0
  51. package/dist/utils/create-eslint-rule.js +7 -0
  52. package/dist/utils/create-eslint-rule.mjs +7 -0
  53. package/dist/utils/get-comment-after.js +13 -0
  54. package/dist/utils/get-comment-after.mjs +13 -0
  55. package/dist/utils/get-comment-before.js +14 -0
  56. package/dist/utils/get-comment-before.mjs +14 -0
  57. package/dist/utils/get-group-number.js +12 -0
  58. package/dist/utils/get-group-number.mjs +12 -0
  59. package/dist/utils/get-lines-between.js +10 -0
  60. package/dist/utils/get-lines-between.mjs +10 -0
  61. package/dist/utils/get-node-parent.js +14 -0
  62. package/dist/utils/get-node-parent.mjs +14 -0
  63. package/dist/utils/get-node-range.js +41 -0
  64. package/dist/utils/get-node-range.mjs +41 -0
  65. package/dist/utils/is-member-optional.js +12 -0
  66. package/dist/utils/is-member-optional.mjs +12 -0
  67. package/dist/utils/is-partition-comment.js +11 -0
  68. package/dist/utils/is-partition-comment.mjs +11 -0
  69. package/dist/utils/is-positive.js +4 -0
  70. package/dist/utils/is-positive.mjs +4 -0
  71. package/dist/utils/make-fixes.js +38 -0
  72. package/dist/utils/make-fixes.mjs +38 -0
  73. package/dist/utils/pairwise.js +14 -0
  74. package/dist/utils/pairwise.mjs +14 -0
  75. package/dist/utils/range-to-diff.js +7 -0
  76. package/dist/utils/range-to-diff.mjs +7 -0
  77. package/dist/utils/sort-nodes.js +5 -0
  78. package/dist/utils/sort-nodes.mjs +5 -0
  79. package/dist/utils/to-single-line.js +4 -0
  80. package/dist/utils/to-single-line.mjs +4 -0
  81. package/dist/utils/use-groups.js +35 -0
  82. package/dist/utils/use-groups.mjs +35 -0
  83. package/package.json +2 -2
  84. package/readme.md +20 -19
@@ -1 +1,9 @@
1
- "use strict";const e=require("../index.js");require("node:path");require("@typescript-eslint/utils");require("minimatch");require("natural-compare-lite");require("@typescript-eslint/types");require("node:module");const r={rules:e.configs["recommended-alphabetical"].rules,plugins:{perfectionist:e}};module.exports=r;
1
+ "use strict";
2
+ const index = require("../index.js");
3
+ const recommendedAlphabetical = {
4
+ rules: index.configs["recommended-alphabetical"].rules,
5
+ plugins: {
6
+ perfectionist: index
7
+ }
8
+ };
9
+ module.exports = recommendedAlphabetical;
@@ -1,16 +1,10 @@
1
- import o from "../index.mjs";
2
- import "node:path";
3
- import "@typescript-eslint/utils";
4
- import "minimatch";
5
- import "natural-compare-lite";
6
- import "@typescript-eslint/types";
7
- import "node:module";
8
- const a = {
9
- rules: o.configs["recommended-alphabetical"].rules,
1
+ import mod from "../index.mjs";
2
+ const recommendedAlphabetical = {
3
+ rules: mod.configs["recommended-alphabetical"].rules,
10
4
  plugins: {
11
- perfectionist: o
5
+ perfectionist: mod
12
6
  }
13
7
  };
14
8
  export {
15
- a as default
9
+ recommendedAlphabetical as default
16
10
  };
@@ -1 +1,9 @@
1
- "use strict";const e=require("../index.js");require("node:path");require("@typescript-eslint/utils");require("minimatch");require("natural-compare-lite");require("@typescript-eslint/types");require("node:module");const r={rules:e.configs["recommended-line-length"].rules,plugins:{perfectionist:e}};module.exports=r;
1
+ "use strict";
2
+ const index = require("../index.js");
3
+ const recommendedLineLength = {
4
+ rules: index.configs["recommended-line-length"].rules,
5
+ plugins: {
6
+ perfectionist: index
7
+ }
8
+ };
9
+ module.exports = recommendedLineLength;
@@ -1,16 +1,10 @@
1
- import e from "../index.mjs";
2
- import "node:path";
3
- import "@typescript-eslint/utils";
4
- import "minimatch";
5
- import "natural-compare-lite";
6
- import "@typescript-eslint/types";
7
- import "node:module";
8
- const s = {
9
- rules: e.configs["recommended-line-length"].rules,
1
+ import mod from "../index.mjs";
2
+ const recommendedLineLength = {
3
+ rules: mod.configs["recommended-line-length"].rules,
10
4
  plugins: {
11
- perfectionist: e
5
+ perfectionist: mod
12
6
  }
13
7
  };
14
8
  export {
15
- s as default
9
+ recommendedLineLength as default
16
10
  };
@@ -1 +1,9 @@
1
- "use strict";const e=require("../index.js");require("node:path");require("@typescript-eslint/utils");require("minimatch");require("natural-compare-lite");require("@typescript-eslint/types");require("node:module");const r={rules:e.configs["recommended-natural"].rules,plugins:{perfectionist:e}};module.exports=r;
1
+ "use strict";
2
+ const index = require("../index.js");
3
+ const recommendedNatural = {
4
+ rules: index.configs["recommended-natural"].rules,
5
+ plugins: {
6
+ perfectionist: index
7
+ }
8
+ };
9
+ module.exports = recommendedNatural;
@@ -1,16 +1,10 @@
1
- import r from "../index.mjs";
2
- import "node:path";
3
- import "@typescript-eslint/utils";
4
- import "minimatch";
5
- import "natural-compare-lite";
6
- import "@typescript-eslint/types";
7
- import "node:module";
8
- const s = {
9
- rules: r.configs["recommended-natural"].rules,
1
+ import mod from "../index.mjs";
2
+ const recommendedNatural = {
3
+ rules: mod.configs["recommended-natural"].rules,
10
4
  plugins: {
11
- perfectionist: r
5
+ perfectionist: mod
12
6
  }
13
7
  };
14
8
  export {
15
- s as default
9
+ recommendedNatural as default
16
10
  };
package/dist/index.js CHANGED
@@ -1,3 +1,135 @@
1
- "use strict";const K=require("node:path"),V=require("@typescript-eslint/utils"),B=require("minimatch"),ge=require("natural-compare-lite"),fe=require("@typescript-eslint/types"),ye=require("node:module");let k=V.ESLintUtils.RuleCreator(e=>`https://eslint-plugin-perfectionist.azat.io/rules/${e}`),E=(e,l)=>{for(let a=0,i=e.length;a<i;a++){let s=e[a];if(l.group===s||Array.isArray(s)&&typeof l.group=="string"&&s.includes(l.group))return a}return e.length},I=e=>{let[l,a]=e;return a-l},O=e=>e>0;var u=(e=>(e.alphabetical="alphabetical",e["line-length"]="line-length",e.natural="natural",e))(u||{}),m=(e=>(e.desc="desc",e.asc="asc",e))(m||{}),T=(e=>(e["values-first"]="values-first",e["types-first"]="types-first",e.mixed="mixed",e))(T||{}),G=(e=>(e["optional-first"]="optional-first",e["required-first"]="required-first",e.ignore="ignore",e))(G||{});let R=e=>{let l,a=s=>{!l&&e.flat().includes(s)&&(l=s)};return{getGroup:()=>l??"unknown",setCustomGroups:(s,r)=>{if(s)for(let[n,p]of Object.entries(s))Array.isArray(p)&&p.some(t=>B.minimatch(r,t,{nocomment:!0}))&&a(n),typeof p=="string"&&B.minimatch(r,p,{nocomment:!0})&&a(n)},defineGroup:a}},w=(e,l,a)=>{var n,p;if((n=l.dependencies)!=null&&n.includes(e.name))return-1;if((p=e.dependencies)!=null&&p.includes(l.name))return 1;let i=a.order==="asc"?1:-1,s,r=t=>a["ignore-case"]?t.toLowerCase():t;return a.type===u.alphabetical?s=(t,o)=>r(t.name).localeCompare(r(o.name)):a.type===u.natural?s=(t,o)=>ge(r(t.name),r(o.name)):s=(t,o)=>{let f=t.size,c=o.size,d=a["max-line-length"];if(d){let g=(y,b)=>y>d&&b.hasMultipleImportDeclarations;g(f,t)&&(f=t.name.length+10),g(c,o)&&(c=o.name.length+10)}return f-c},i*s(e,l)},S=(e,l)=>[...e].sort((a,i)=>w(a,i,l)),me=(e,l)=>{let a=l.getTokenAfter(e,{filter:({value:i,type:s})=>!(s==="Punctuator"&&[",",";"].includes(i)),includeComments:!0});return((a==null?void 0:a.type)==="Block"||(a==null?void 0:a.type)==="Line")&&e.loc.end.line===a.loc.end.line?a:null},Y=(e,l)=>Array.isArray(e)&&e.some(a=>B.minimatch(l.trim(),a,{nocomment:!0}))||typeof e=="string"&&B.minimatch(l.trim(),e,{nocomment:!0})||e===!0,J=(e,l)=>{let[a,i]=l.getTokensBefore(e,{filter:({value:s,type:r})=>!(r==="Punctuator"&&[",",";"].includes(s)),includeComments:!0,count:2});return((i==null?void 0:i.type)==="Block"||(i==null?void 0:i.type)==="Line")&&e.loc.start.line-i.loc.end.line<=1&&(a==null?void 0:a.loc.end.line)!==i.loc.start.line?i:null},L=(e,l,a)=>{var p;let i=e.range.at(0),s=e.range.at(1),r=l.text.slice(i,s);if(V.ASTUtils.isParenthesized(e,l)){let t=l.getTokenBefore(e,V.ASTUtils.isOpeningParenToken),o=l.getTokenAfter(e,V.ASTUtils.isClosingParenToken);i=t.range.at(0),s=o.range.at(1)}let n=J(e,l);if(r.endsWith(";")||r.endsWith(",")){let t=l.getTokensAfter(e,{includeComments:!0,count:2});e.loc.start.line===((p=t.at(1))==null?void 0:p.loc.start.line)&&(s-=1)}return n&&!Y((a==null?void 0:a.partitionComment)??!1,n.value)&&(i=n.range.at(0)),[i,s]},M=(e,l,a,i,s)=>{var p,t;let r=[],n=((p=l.at(0))==null?void 0:p.node.loc.start.line)===((t=l.at(-1))==null?void 0:t.node.loc.end.line);for(let o=0,f=l.length;o<f;o++){let{node:c}=l.at(o);r.push(e.replaceTextRange(L(c,i,s),i.text.slice(...L(a.at(o).node,i,s))));let d=me(a.at(o).node,i);if(d&&!n){let y=[i.getTokenBefore(d).range.at(1),d.range.at(1)];r.push(e.replaceTextRange(y,""));let b=i.getTokenAfter(c);r.push(e.insertTextAfter((b==null?void 0:b.loc.end.line)===c.loc.end.line?b:c,i.text.slice(...y)))}}return r},j=(e={},l)=>Object.assign(l,e),P=(e,l)=>{if(e.length>1)for(let a=1;a<e.length;a++){let i=e.at(a-1),s=e.at(a);i&&s&&l(i,s,a-1)}};const H="sort-svelte-attributes",he=k({name:H,meta:{type:"suggestion",docs:{description:"enforce sorted Svelte attributes"},fixable:"code",schema:[{type:"object",properties:{"custom-groups":{type:"object"},type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1},groups:{type:"array"}},additionalProperties:!1}],messages:{unexpectedSvelteAttributesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>K.extname(e.filename)!==".svelte"?{}:{SvelteStartTag:l=>{if(l.attributes.length>1){let a=j(e.options.at(0),{type:u.alphabetical,order:m.asc,"ignore-case":!1,"custom-groups":{},groups:[]}),i=l.attributes.reduce((s,r)=>{if(r.type==="SvelteSpreadAttribute")return s.push([]),s;let n,{getGroup:p,defineGroup:t,setCustomGroups:o}=R(a.groups);return r.key.type==="SvelteSpecialDirectiveKey"?n=e.sourceCode.text.slice(...r.key.range):typeof r.key.name=="string"?{name:n}=r.key:n=e.sourceCode.text.slice(...r.key.range),o(a["custom-groups"],n),r.type==="SvelteShorthandAttribute"&&(t("svelte-shorthand"),t("shorthand")),(!("value"in r)||Array.isArray(r.value)&&!r.value.at(0))&&t("shorthand"),r.loc.start.line!==r.loc.end.line&&t("multiline"),s.at(-1).push({size:I(r.range),node:r,group:p(),name:n}),s},[[]]);for(let s of i)P(s,(r,n)=>{let p=E(a.groups,r),t=E(a.groups,n);(p>t||p===t&&O(w(r,n,a)))&&e.report({messageId:"unexpectedSvelteAttributesOrder",data:{left:r.name,right:n.name},node:n.node,fix:o=>{let f={};for(let d of s){let g=E(a.groups,d);g in f?f[g]=S([...f[g],d],a):f[g]=[d]}let c=[];for(let d of Object.keys(f).sort((g,y)=>Number(g)-Number(y)))c.push(...S(f[d],a));return M(o,s,c,e.sourceCode)}})})}}}}),Q="sort-astro-attributes",be=k({name:Q,meta:{type:"suggestion",docs:{description:"enforce sorted Astro attributes"},fixable:"code",schema:[{type:"object",properties:{"custom-groups":{type:"object"},type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1},groups:{type:"array"}},additionalProperties:!1}],messages:{unexpectedAstroAttributesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>K.extname(e.filename)!==".astro"?{}:{JSXElement:l=>{let{attributes:a}=l.openingElement;if(a.length>1){let i=j(e.options.at(0),{type:u.alphabetical,order:m.asc,"ignore-case":!1,"custom-groups":{},groups:[]}),s=a.reduce((r,n)=>{if(n.type==="JSXSpreadAttribute")return r.push([]),r;let p=typeof n.name.name=="string"?n.name.name:e.sourceCode.text.slice(...n.name.range),{getGroup:t,defineGroup:o,setCustomGroups:f}=R(i.groups);return f(i["custom-groups"],p),n.type==="AstroShorthandAttribute"&&(o("astro-shorthand"),o("shorthand")),n.value===null&&o("shorthand"),n.loc.start.line!==n.loc.end.line&&o("multiline"),r.at(-1).push({size:I(n.range),node:n,group:t(),name:p}),r},[[]]);for(let r of s)P(r,(n,p)=>{let t=E(i.groups,n),o=E(i.groups,p);(t>o||t===o&&O(w(n,p,i)))&&e.report({messageId:"unexpectedAstroAttributesOrder",data:{left:n.name,right:p.name},node:p.node,fix:f=>{let c={};for(let g of r){let y=E(i.groups,g);y in c?c[y]=S([...c[y],g],i):c[y]=[g]}let d=[];for(let g of Object.keys(c).sort((y,b)=>Number(y)-Number(b)))d.push(...S(c[g],i));return M(f,r,d,e.sourceCode)}})})}}}});let A=e=>e.replaceAll(/\s\s+/g," ").trim();const Z="sort-array-includes",xe=k({name:Z,meta:{type:"suggestion",docs:{description:"enforce sorted arrays before include method"},fixable:"code",schema:[{type:"object",properties:{type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1},"spread-last":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedArrayIncludesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>({MemberExpression:l=>{if((l.object.type==="ArrayExpression"||l.object.type==="NewExpression")&&l.property.type==="Identifier"&&l.property.name==="includes"){let a=l.object.type==="ArrayExpression"?l.object.elements:l.object.arguments;if(a.length>1){let i=j(e.options.at(0),{type:u.alphabetical,order:m.asc,"ignore-case":!1,"spread-last":!1}),s=a.reduce((r,n)=>(n!==null&&r.at(0).push({name:n.type==="Literal"?`${n.value}`:e.sourceCode.text.slice(...n.range),size:I(n.range),type:n.type,node:n}),r),[[],[]]).flat();P(s,(r,n)=>{let p;i["spread-last"]&&r.node.type==="Literal"&&n.node.type==="SpreadElement"?p=!1:i["spread-last"]&&r.node.type==="SpreadElement"&&n.node.type==="Literal"?p=!0:p=O(w(r,n,i)),p&&e.report({messageId:"unexpectedArrayIncludesOrder",data:{left:A(r.name),right:A(n.name)},node:n.node,fix:t=>{let o=S(s,i);if(i["spread-last"])for(let f=0,c=o.length;f<c;f++)o.at(f).node.type==="SpreadElement"&&o.push(o.splice(f,1).at(0));return M(t,s,o,e.sourceCode)}})})}}}})}),F="sort-vue-attributes",Ee=k({name:F,meta:{type:"suggestion",docs:{description:"enforce sorted Vue attributes"},fixable:"code",schema:[{type:"object",properties:{"custom-groups":{type:"object"},type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1},groups:{type:"array",default:[]}},additionalProperties:!1}],messages:{unexpectedVueAttributesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>{if(K.extname(e.filename)!==".vue")return{};if(!("defineTemplateBodyVisitor"in e.sourceCode.parserServices))return{};let{defineTemplateBodyVisitor:l}=e.sourceCode.parserServices;return l({VStartTag:a=>{if(a.attributes.length>1){let i=j(e.options.at(0),{type:u.alphabetical,order:m.asc,"ignore-case":!1,"custom-groups":{},groups:[]}),s=a.attributes.reduce((r,n)=>{if(n.key.type==="VDirectiveKey"&&n.key.name.rawName==="bind")return r.push([]),r;let p,{getGroup:t,defineGroup:o,setCustomGroups:f}=R(i.groups);return typeof n.key.name=="string"&&n.key.type!=="VDirectiveKey"?p=n.key.rawName:p=e.sourceCode.text.slice(...n.key.range),f(i["custom-groups"],p),n.value===null&&o("shorthand"),n.loc.start.line!==n.loc.end.line&&o("multiline"),r.at(-1).push({size:I(n.range),node:n,group:t(),name:p}),r},[[]]);for(let r of s)P(r,(n,p)=>{let t=E(i.groups,n),o=E(i.groups,p);(t>o||t===o&&O(w(n,p,i)))&&e.report({messageId:"unexpectedVueAttributesOrder",data:{left:n.name,right:p.name},node:p.node,fix:f=>{let c={};for(let g of r){let y=E(i.groups,g);y in c?c[y]=S([...c[y],g],i):c[y]=[g]}let d=[];for(let g of Object.keys(c).sort((y,b)=>Number(y)-Number(b)))d.push(...S(c[g],i));return M(f,r,d,e.sourceCode)}})})}}})}}),ee="sort-named-exports",Ne=k({name:ee,meta:{type:"suggestion",docs:{description:"enforce sorted named exports"},fixable:"code",schema:[{type:"object",properties:{type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1},"group-kind":{enum:[T.mixed,T["values-first"],T["types-first"]],default:T.mixed,type:"string"}},additionalProperties:!1}],messages:{unexpectedNamedExportsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>({ExportNamedDeclaration:l=>{if(l.specifiers.length>1){let a=j(e.options.at(0),{type:u.alphabetical,"ignore-case":!1,order:m.asc,"group-kind":T.mixed}),i=l.specifiers.map(n=>({size:I(n.range),name:n.local.name,node:n,group:n.exportKind})),s=a["group-kind"]!==T.mixed,r=a["group-kind"]===T["values-first"]?["value","type"]:["type","value"];P(i,(n,p)=>{let t=E(r,n),o=E(r,p);if(s&&t>o||(!s||t===o)&&O(w(n,p,a))){let f=s?r.map(c=>i.filter(d=>d.group===c)).map(c=>S(c,a)).flat():S(i,a);e.report({messageId:"unexpectedNamedExportsOrder",data:{left:n.name,right:p.name},node:p.node,fix:c=>M(c,i,f,e.sourceCode)})}})}}})}),te="sort-named-imports",Ce=k({name:te,meta:{type:"suggestion",docs:{description:"enforce sorted named imports"},fixable:"code",schema:[{type:"object",properties:{type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1},"ignore-alias":{type:"boolean",default:!1},"group-kind":{enum:[T.mixed,T["values-first"],T["types-first"]],default:T.mixed,type:"string"}},additionalProperties:!1}],messages:{unexpectedNamedImportsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>({ImportDeclaration:l=>{let a=l.specifiers.filter(({type:i})=>i==="ImportSpecifier");if(a.length>1){let i=j(e.options.at(0),{type:u.alphabetical,"ignore-alias":!0,"ignore-case":!1,order:m.asc,"group-kind":T.mixed}),s=a.map(p=>{let t,{name:o}=p.local;return p.type==="ImportSpecifier"&&(i["ignore-alias"]&&({name:o}=p.imported),t=p.importKind),{size:I(p.range),node:p,name:o,group:t}}),r=i["group-kind"]!==T.mixed,n=i["group-kind"]===T["values-first"]?["value","type"]:["type","value"];P(s,(p,t)=>{let o=E(n,p),f=E(n,t);if(r&&o>f||(!r||o===f)&&O(w(p,t,i))){let c=r?n.map(d=>s.filter(g=>g.group===d)).map(d=>S(d,i)).flat():S(s,i);e.report({messageId:"unexpectedNamedImportsOrder",data:{left:p.name,right:t.name},node:t.node,fix:d=>M(d,s,c,e.sourceCode)})}})}}})});let q=(e,l,a)=>e.lines.slice(l.node.loc.end.line,a.node.loc.start.line-1).filter(s=>!s.trim().length).length;const re="sort-object-types",Se=k({name:re,meta:{type:"suggestion",docs:{description:"enforce sorted object types"},fixable:"code",schema:[{type:"object",properties:{"custom-groups":{type:"object"},type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1},groups:{type:"array",default:[]},"partition-by-new-line":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedObjectTypesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>({TSTypeLiteral:l=>{if(l.members.length>1){let a=j(e.options.at(0),{"partition-by-new-line":!1,type:u.alphabetical,"ignore-case":!1,order:m.asc,"custom-groups":{},groups:[]}),i=l.members.reduce((s,r)=>{var C,h,N,x;let n,p=e.sourceCode.text.slice(r.range.at(0),r.range.at(1)),t=(C=s.at(-1))==null?void 0:C.at(-1),{getGroup:o,defineGroup:f,setCustomGroups:c}=R(a.groups),d=v=>v.replace(/(,|;)$/,"");if(r.type==="TSPropertySignature")r.key.type==="Identifier"?{name:n}=r.key:r.key.type==="Literal"?n=`${r.key.value}`:n=e.sourceCode.text.slice(r.range.at(0),(h=r.typeAnnotation)==null?void 0:h.range.at(0));else if(r.type==="TSIndexSignature"){let v=((N=r.typeAnnotation)==null?void 0:N.range.at(0))??r.range.at(1);n=d(e.sourceCode.text.slice(r.range.at(0),v))}else n=d(e.sourceCode.text.slice(r.range.at(0),r.range.at(1)));c(a["custom-groups"],n),r.loc.start.line!==r.loc.end.line&&f("multiline");let y=p.endsWith(";")||p.endsWith(",")?1:0,b={size:I(r.range)-y,node:r,name:n};return a["partition-by-new-line"]&&t&&q(e.sourceCode,t,b)&&s.push([]),(x=s.at(-1))==null||x.push({...b,group:o()}),s},[[]]);for(let s of i)P(s,(r,n)=>{let p=E(a.groups,r),t=E(a.groups,n);(p>t||p===t&&O(w(r,n,a)))&&e.report({messageId:"unexpectedObjectTypesOrder",data:{left:A(r.name),right:A(n.name)},node:n.node,fix:o=>{let f={};for(let d of s){let g=E(a.groups,d);g in f?f[g]=S([...f[g],d],a):f[g]=[d]}let c=[];for(let d of Object.keys(f).sort((g,y)=>Number(g)-Number(y)))c.push(...S(f[d],a));return M(o,s,c,e.sourceCode)}})})}}})}),se="sort-union-types",ve=k({name:se,meta:{type:"suggestion",docs:{description:"enforce sorted union types"},fixable:"code",schema:[{type:"object",properties:{type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1},"nullable-last":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedUnionTypesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>({TSUnionType:l=>{let a=j(e.options.at(0),{type:u.alphabetical,"nullable-last":!1,"ignore-case":!1,order:m.asc}),i=l.types.map(s=>({group:s.type==="TSNullKeyword"||s.type==="TSUndefinedKeyword"?"nullable":"unknown",name:e.sourceCode.text.slice(...s.range),size:I(s.range),node:s}));P(i,(s,r)=>{let n=O(w(s,r,a));a["nullable-last"]&&(s.group==="nullable"&&r.group==="unknown"?n=!0:s.group==="unknown"&&r.group==="nullable"&&(n=!1)),n&&e.report({messageId:"unexpectedUnionTypesOrder",data:{left:A(s.name),right:A(r.name)},node:r.node,fix:p=>{let t=[];if(a["nullable-last"]){let o=[],f=i.filter(c=>c.group==="nullable"?(o.push(c),!1):!0);t=[...S(f,a),...S(o,a)]}else t=S(i,a);return M(p,i,t,e.sourceCode)}})})}})});let U=e=>{switch(e.type){case fe.AST_NODE_TYPES.TSMethodSignature:case fe.AST_NODE_TYPES.TSPropertySignature:return e.optional}return!1};const ae="sort-interfaces",we=k({name:ae,meta:{type:"suggestion",docs:{description:"enforce sorted interface properties"},fixable:"code",schema:[{type:"object",properties:{"custom-groups":{type:"object"},"optionality-order":{enum:[G.ignore,G["optional-first"],G["required-first"]],default:G.ignore,type:"string"},type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1},"ignore-pattern":{items:{type:"string"},type:"array"},groups:{type:"array",default:[]},"partition-by-new-line":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedInterfacePropertiesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>({TSInterfaceDeclaration:l=>{if(l.body.body.length>1){let a=j(e.options.at(0),{"optionality-order":G.ignore,"partition-by-new-line":!1,type:u.alphabetical,"ignore-case":!1,order:m.asc,"ignore-pattern":[],"custom-groups":{},groups:[]});if(!a["ignore-pattern"].some(i=>B.minimatch(l.id.name,i,{nocomment:!0}))){let i=l.body.body.reduce((t,o)=>{var C,h,N,x;if(o.type==="TSCallSignatureDeclaration")return t.push([]),t;let f=(C=t.at(-1))==null?void 0:C.at(-1),c,{getGroup:d,defineGroup:g,setCustomGroups:y}=R(a.groups);if(o.type==="TSPropertySignature")if(o.key.type==="Identifier")({name:c}=o.key);else if(o.key.type==="Literal")c=`${o.key.value}`;else{let v=((h=o.typeAnnotation)==null?void 0:h.range.at(0))??o.range.at(1)-(o.optional?1:0);c=e.sourceCode.text.slice(o.range.at(0),v)}else if(o.type==="TSIndexSignature"){let v=((N=o.typeAnnotation)==null?void 0:N.range.at(0))??o.range.at(1);c=e.sourceCode.text.slice(o.range.at(0),v)}else{let v=((x=o.returnType)==null?void 0:x.range.at(0))??o.range.at(1);c=e.sourceCode.text.slice(o.range.at(0),v)}let b={size:I(o.range),node:o,name:c};return a["partition-by-new-line"]&&f&&q(e.sourceCode,f,b)&&t.push([]),y(a["custom-groups"],c),o.loc.start.line!==o.loc.end.line&&g("multiline"),t.at(-1).push({...b,group:d()}),t},[[]]),s=t=>{let o={};for(let c of t){let d=E(a.groups,c);d in o?o[d]=S([...o[d],c],a):o[d]=[c]}let f=[];for(let c of Object.keys(o).sort((d,g)=>Number(d)-Number(g)))f.push(...S(o[c],a));return f},r=(t,o)=>{let f=E(a.groups,t),c=E(a.groups,o);return f>c||f===c&&O(w(t,o,a))},n=a["optionality-order"],p=(t,o,f,c)=>{if(n===G.ignore)return r(o,f);let d=t.findIndex((g,y)=>y&&U(t[y-1].node)!==U(t[y].node));return c<d&&c+1!==d?r(o,f):U(o.node)!==U(f.node)?U(o.node)!==(n===G["optional-first"]):r(o,f)};for(let t of i)P(t,(o,f,c)=>{p(t,o,f,c)&&e.report({messageId:"unexpectedInterfacePropertiesOrder",data:{left:A(o.name),right:A(f.name)},node:f.node,fix:d=>{let g;if(n!==G.ignore){let y=t.filter(C=>U(C.node)),b=t.filter(C=>!U(C.node));g=n===G["optional-first"]?[...s(y),...s(b)]:[...s(b),...s(y)]}else g=s(t);return M(d,t,g,e.sourceCode)}})})}}}})}),oe="sort-jsx-props",Ae=k({name:oe,meta:{type:"suggestion",docs:{description:"enforce sorted JSX props"},fixable:"code",schema:[{type:"object",properties:{"custom-groups":{type:"object"},type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},groups:{type:"array"},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedJSXPropsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>[".svelte",".astro",".vue"].includes(K.extname(e.filename))?{}:{JSXElement:l=>{if(l.openingElement.attributes.length>1){let a=j(e.options.at(0),{type:u.alphabetical,"ignore-case":!1,order:m.asc,"custom-groups":{},groups:[]}),i=l.openingElement.attributes.reduce((s,r)=>{if(r.type==="JSXSpreadAttribute")return s.push([]),s;let n=r.name.type==="JSXNamespacedName"?`${r.name.namespace.name}:${r.name.name.name}`:r.name.name,{getGroup:p,defineGroup:t,setCustomGroups:o}=R(a.groups);o(a["custom-groups"],n),r.value===null&&t("shorthand"),r.loc.start.line!==r.loc.end.line&&t("multiline");let f={size:I(r.range),group:p(),node:r,name:n};return s.at(-1).push(f),s},[[]]);for(let s of i)P(s,(r,n)=>{let p=E(a.groups,r),t=E(a.groups,n);(p>t||p===t&&O(w(r,n,a)))&&e.report({messageId:"unexpectedJSXPropsOrder",data:{left:r.name,right:n.name},node:n.node,fix:o=>{let f={};for(let d of s){let g=E(a.groups,d);g in f?f[g]=S([...f[g],d],a):f[g]=[d]}let c=[];for(let d of Object.keys(f).sort((g,y)=>Number(g)-Number(y)))c.push(...S(f[d],a));return M(o,s,c,e.sourceCode)}})})}}}}),ne="sort-exports",ke=k({name:ne,meta:{type:"suggestion",docs:{description:"enforce sorted exports"},fixable:"code",schema:[{type:"object",properties:{type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedExportsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>{let l=j(e.options.at(0),{type:u.alphabetical,order:m.asc,"ignore-case":!1}),a=[[]],i=s=>{s.type==="ExportAllDeclaration"&&s.exported===null?a.push([]):a.at(-1).push({size:I(s.range),name:s.source.value,node:s})};return{ExportAllDeclaration:i,ExportNamedDeclaration:s=>{s.source!==null&&i(s)},"Program:exit":()=>{for(let s of a)P(s,(r,n)=>{O(w(r,n,l))&&e.report({messageId:"unexpectedExportsOrder",data:{left:r.name,right:n.name},node:n.node,fix:p=>M(p,s,S(s,l),e.sourceCode)})})}}}}),ie="sort-imports",Ie=k({name:ie,meta:{type:"suggestion",docs:{description:"enforce sorted imports"},fixable:"code",schema:[{id:"sort-imports",type:"object",properties:{"custom-groups":{type:"object",properties:{type:{type:"object"},value:{type:"object"}},additionalProperties:!1},type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1},groups:{type:"array",default:[]},"internal-pattern":{items:{type:"string"},type:"array"},"newlines-between":{enum:["ignore","always","never"],default:"always",type:"string"},"max-line-length":{type:"integer",minimum:0,exclusiveMinimum:!0}},allOf:[{$ref:"#/definitions/max-line-length-requires-line-length-type"}],additionalProperties:!1,dependencies:{"max-line-length":["type"]},definitions:{"is-line-length":{properties:{type:{enum:[u["line-length"]],type:"string"}},required:["type"],type:"object"},"max-line-length-requires-line-length-type":{anyOf:[{not:{required:["max-line-length"],type:"object"},type:"object"},{$ref:"#/definitions/is-line-length"}]}}}],messages:{unexpectedImportsOrder:'Expected "{{right}}" to come before "{{left}}"',missedSpacingBetweenImports:'Missed spacing between "{{left}}" and "{{right}}" imports',extraSpacingBetweenImports:'Extra spacing between "{{left}}" and "{{right}}" imports'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>{let l=j(e.options.at(0),{"newlines-between":"always","custom-groups":{type:{},value:{}},"internal-pattern":["~/**"],type:u.alphabetical,order:m.asc,"ignore-case":!1,groups:[]}),a=!1;for(let t of l.groups)if(Array.isArray(t))for(let o of t)o==="unknown"&&(a=!0);else t==="unknown"&&(a=!0);a||(l.groups=[...l.groups,"unknown"]);let i=[],s=t=>t.type==="ImportDeclaration"&&t.specifiers.length===0,r=t=>{let o=x=>[".less",".scss",".sass",".styl",".pcss",".css",".sss"].some(v=>x.endsWith(v)),f=x=>["./index.d.js","./index.d.ts","./index.js","./index.ts","./index","./","."].includes(x),c=x=>x.indexOf("..")===0,d=x=>x.indexOf("./")===0,{getGroup:g,defineGroup:y,setCustomGroups:b}=R(l.groups),C=x=>l["internal-pattern"].length&&l["internal-pattern"].some(v=>B.minimatch(x.source.value,v,{nocomment:!0})),h=x=>{let v=["bun","bun:ffi","bun:jsc","bun:sqlite","bun:test","bun:wrap","detect-libc","undici","ws"];return ye.builtinModules.includes(x.startsWith("node:")?x.split("node:")[1]:x)||v.includes(x)},N=x=>!(x.startsWith(".")||x.startsWith("/"));return t.importKind==="type"&&(t.type==="ImportDeclaration"&&(b(l["custom-groups"].type,t.source.value),f(t.source.value)&&y("index-type"),d(t.source.value)&&y("sibling-type"),c(t.source.value)&&y("parent-type"),C(t)&&y("internal-type"),h(t.source.value)&&y("builtin-type"),N(t.source.value)&&y("external-type")),y("type")),t.type==="ImportDeclaration"&&(b(l["custom-groups"].value,t.source.value),s(t)&&o(t.source.value)&&y("side-effect-style"),s(t)&&y("side-effect"),o(t.source.value)&&y("style"),f(t.source.value)&&y("index"),d(t.source.value)&&y("sibling"),c(t.source.value)&&y("parent"),C(t)&&y("internal"),h(t.source.value)&&y("builtin"),N(t.source.value)&&y("external")),g()},n=t=>t.specifiers.length>1,p=t=>{let o;t.type==="ImportDeclaration"?o=t.source.value:t.moduleReference.type==="TSExternalModuleReference"&&t.moduleReference.expression.type==="Literal"?o=`${t.moduleReference.expression.value}`:o=e.sourceCode.text.slice(...t.moduleReference.range),i.push({size:I(t.range),group:r(t),name:o,node:t,...l.type===u["line-length"]&&l["max-line-length"]&&{hasMultipleImportDeclarations:n(t)}})};return{TSImportEqualsDeclaration:p,ImportDeclaration:p,"Program:exit":()=>{var c;let t=(d,g)=>!!e.sourceCode.getTokensBetween(d.node,J(g.node,e.sourceCode)||g.node,{includeComments:!0}).length,o=(d,g)=>{let y=[],b={};for(let h of g){let N=E(l.groups,h);N in b?b[N]=S([...b[N],h],l):b[N]=[h]}let C=Object.keys(b).sort((h,N)=>Number(h)-Number(N)).reduce((h,N)=>[...h,...b[N]],[]);for(let h=0,N=C.length;h<N;h++){let x=C.at(h);if(y.push(d.replaceTextRange(L(g.at(h).node,e.sourceCode),e.sourceCode.text.slice(...L(x.node,e.sourceCode)))),l["newlines-between"]!=="ignore"){let v=C.at(h+1);if(v){let $=q(e.sourceCode,g.at(h),g.at(h+1));(l["newlines-between"]==="always"&&E(l.groups,x)===E(l.groups,v)&&$!==0||l["newlines-between"]==="never"&&$>0)&&y.push(d.removeRange([L(g.at(h).node,e.sourceCode).at(1),L(g.at(h+1).node,e.sourceCode).at(0)-1])),l["newlines-between"]==="always"&&E(l.groups,x)!==E(l.groups,v)&&$>1&&y.push(d.replaceTextRange([L(g.at(h).node,e.sourceCode).at(1),L(g.at(h+1).node,e.sourceCode).at(0)-1],`
2
- `)),l["newlines-between"]==="always"&&E(l.groups,x)!==E(l.groups,v)&&$===0&&y.push(d.insertTextAfterRange(L(g.at(h).node,e.sourceCode),`
3
- `))}}}return y},f=[[]];for(let d of i){let g=(c=f.at(-1))==null?void 0:c.at(-1);g&&t(g,d)?f.push([d]):f.at(-1).push(d)}for(let d of f)P(d,(g,y)=>{let b=E(l.groups,g),C=E(l.groups,y),h=q(e.sourceCode,g,y);!(s(g.node)&&s(y.node))&&!t(g,y)&&(b>C||b===C&&O(w(g,y,l)))&&e.report({messageId:"unexpectedImportsOrder",data:{left:g.name,right:y.name},node:y.node,fix:N=>o(N,d)}),l["newlines-between"]==="never"&&h>0&&e.report({messageId:"extraSpacingBetweenImports",data:{left:g.name,right:y.name},node:y.node,fix:N=>o(N,d)}),l["newlines-between"]==="always"&&(b<C&&h===0?e.report({messageId:"missedSpacingBetweenImports",data:{left:g.name,right:y.name},node:y.node,fix:N=>o(N,d)}):(h>1||b===C&&h>0)&&e.report({messageId:"extraSpacingBetweenImports",data:{left:g.name,right:y.name},node:y.node,fix:N=>o(N,d)}))})}}}}),le="sort-objects",Oe=k({name:le,meta:{type:"suggestion",docs:{description:"enforce sorted objects"},fixable:"code",schema:[{type:"object",properties:{"custom-groups":{type:"object"},"partition-by-comment":{type:["boolean","string","array"],default:!1},"partition-by-new-line":{type:"boolean",default:!1},"styled-components":{type:"boolean",default:!0},type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1},"ignore-pattern":{items:{type:"string"},type:"array"},groups:{type:"array"}},additionalProperties:!1}],messages:{unexpectedObjectsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>{let l=a=>{let i=j(e.options.at(0),{"partition-by-new-line":!1,"partition-by-comment":!1,type:u.alphabetical,"styled-components":!0,"ignore-case":!1,"ignore-pattern":[],order:m.asc,"custom-groups":{},groups:[]}),s=a.parent.type==="VariableDeclarator"&&a.parent.id.type==="Identifier"?a.parent.id.name:null;if(!(i["ignore-pattern"].length&&typeof s=="string"?i["ignore-pattern"].some(n=>B.minimatch(s,n,{nocomment:!0})):!1)&&a.properties.length>1){let n=o=>o.type==="Identifier"&&o.name==="styled",p=o=>o!==void 0&&o.type==="CallExpression"&&(o.callee.type==="MemberExpression"&&n(o.callee.object)||o.callee.type==="CallExpression"&&n(o.callee.callee));if(!i["styled-components"]&&(p(a.parent)||a.parent.type==="ArrowFunctionExpression"&&p(a.parent.parent)))return;let t=o=>o.reduce((f,c)=>{var $;if(c.type==="SpreadElement"||c.type==="RestElement")return f.push([]),f;let d=J(c,e.sourceCode),g=($=f.at(-1))==null?void 0:$.at(-1);i["partition-by-comment"]&&d&&Y(i["partition-by-comment"],d.value)&&f.push([]);let y,b="ignore",C=[],{getGroup:h,setCustomGroups:N}=R(i.groups);c.key.type==="Identifier"?{name:y}=c.key:c.key.type==="Literal"?y=`${c.key.value}`:y=e.sourceCode.text.slice(...c.key.range);let x={size:I(c.range),node:c,name:y};i["partition-by-new-line"]&&g&&q(e.sourceCode,g,x)&&f.push([]),c.value.type==="AssignmentPattern"&&(W=>{W.right.type==="Identifier"&&C.push(W.right.name);let ce=D=>{let z=[];switch(D.type){case"ArrowFunctionExpression":z.push(D.body);break;case"ConditionalExpression":z.push(D.consequent,D.alternate);break;case"LogicalExpression":case"BinaryExpression":z.push(D.left,D.right);break;case"CallExpression":z.push(...D.arguments);break}z.forEach(_=>{_.type==="Identifier"&&C.push(_.name),(_.type==="BinaryExpression"||_.type==="ConditionalExpression")&&ce(_)})};switch(W.right.type){case"ArrowFunctionExpression":case"ConditionalExpression":case"LogicalExpression":case"BinaryExpression":case"CallExpression":ce(W.right);break}})(c.value),N(i["custom-groups"],y);let v={...x,group:h(),dependencies:C,position:b};return f.at(-1).push(v),f},[[]]);for(let o of t(a.properties))P(o,(f,c)=>{let d=E(i.groups,f),g=E(i.groups,c);if(d>g||d===g&&O(w(f,c,i))){let y=b=>{let C={};for(let N of o){let x=E(i.groups,N);x in C?C[x]=S([...C[x],N],i):C[x]=[N]}let h=[];for(let N of Object.keys(C).sort((x,v)=>Number(x)-Number(v)))h.push(...S(C[N],i));return M(b,o,h,e.sourceCode,{partitionComment:i["partition-by-comment"]})};e.report({messageId:"unexpectedObjectsOrder",data:{left:A(f.name),right:A(c.name)},node:c.node,fix:y})}})}};return{ObjectExpression:l,ObjectPattern:l}}}),pe="sort-classes",je=k({name:pe,meta:{type:"suggestion",docs:{description:"enforce sorted classes"},fixable:"code",schema:[{type:"object",properties:{type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},"ignore-case":{type:"boolean",default:!1},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},groups:{type:"array",default:[]}},additionalProperties:!1}],messages:{unexpectedClassesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>({ClassBody:l=>{if(l.body.length>1){let a=j(e.options.at(0),{type:u.alphabetical,order:m.asc,"ignore-case":!1,groups:["property","constructor","method","unknown"]}),i=l.body.map(s=>{var f;let r,{getGroup:n,defineGroup:p}=R(a.groups);s.type==="StaticBlock"?r="static":s.type==="TSIndexSignature"?r=e.sourceCode.text.slice(s.range.at(0),((f=s.typeAnnotation)==null?void 0:f.range.at(0))??s.range.at(1)):s.key.type==="Identifier"?{name:r}=s.key:r=e.sourceCode.text.slice(...s.key.range);let t=r.startsWith("_")||r.startsWith("#"),o="decorators"in s&&s.decorators.length>0;if(s.type==="MethodDefinition"){s.kind==="constructor"&&p("constructor");let c=s.accessibility==="private"||t,d=s.static;o&&(s.kind==="get"&&p("decorated-get-method"),s.kind==="set"&&p("decorated-set-method"),p("decorated-method")),c&&d&&p("static-private-method"),c&&p("private-method"),d&&p("static-method"),s.kind==="get"&&p("get-method"),s.kind==="set"&&p("set-method"),p("method")}else s.type==="TSIndexSignature"?p("index-signature"):s.type==="AccessorProperty"?o&&((s.accessibility==="private"||t)&&p("private-decorated-accessor-property"),p("decorated-accessor-property")):s.type==="PropertyDefinition"&&(o&&((s.accessibility==="private"||t)&&p("private-decorated-property"),p("decorated-property")),(s.accessibility==="private"||t)&&p("private-property"),s.static&&p("static-property"),p("property"));return{size:I(s.range),group:n(),node:s,name:r}});P(i,(s,r)=>{let n=E(a.groups,s),p=E(a.groups,r);s.name!==r.name&&(n>p||n===p&&O(w(s,r,a)))&&e.report({messageId:"unexpectedClassesOrder",data:{left:A(s.name),right:A(r.name)},node:r.node,fix:t=>{let o=[],f=i.reduce((d,g)=>{let y=E(a.groups,g);return y in d?d[y]=S([...d[y],g],a):d[y]=[g],d},{}),c=Object.keys(f).sort((d,g)=>Number(d)-Number(g)).reduce((d,g)=>[...d,...f[g]],[]);for(let d=0,g=c.length;d<g;d++)o.push(t.replaceTextRange(L(i.at(d).node,e.sourceCode),e.sourceCode.text.slice(...L(c.at(d).node,e.sourceCode))));return o}})})}}})}),ue="sort-enums",Pe=k({name:ue,meta:{type:"suggestion",docs:{description:"enforce sorted TypeScript enums"},fixable:"code",schema:[{type:"object",properties:{"partition-by-comment":{default:!1,type:["boolean","string","array"]},type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},"ignore-case":{type:"boolean",default:!1},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"}},additionalProperties:!1}],messages:{unexpectedEnumsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>({TSEnumDeclaration:l=>{if(l.members.length>1&&l.members.every(({initializer:a})=>a)){let a=j(e.options.at(0),{type:u.alphabetical,order:m.asc,"ignore-case":!1,"partition-by-comment":!1}),i=a["partition-by-comment"],s=l.members.reduce((r,n)=>{let p=J(n,e.sourceCode);i&&p&&Y(i,p.value)&&r.push([]);let o={name:n.id.type==="Literal"?`${n.id.value}`:`${e.sourceCode.text.slice(...n.id.range)}`,node:n,size:I(n.range)};return r.at(-1).push(o),r},[[]]);for(let r of s)P(r,(n,p)=>{O(w(n,p,a))&&e.report({messageId:"unexpectedEnumsOrder",data:{left:A(n.name),right:A(p.name)},node:p.node,fix:t=>M(t,r,S(r,a),e.sourceCode,{partitionComment:i})})})}}})}),de="sort-maps",Te=k({name:de,meta:{type:"suggestion",docs:{description:"enforce sorted Map elements"},fixable:"code",schema:[{type:"object",properties:{type:{enum:[u.alphabetical,u.natural,u["line-length"]],default:u.alphabetical,type:"string"},order:{enum:[m.asc,m.desc],default:m.asc,type:"string"},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedMapElementsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:u.alphabetical,order:m.asc}],create:e=>({NewExpression:l=>{if(l.callee.type==="Identifier"&&l.callee.name==="Map"&&l.arguments.length&&l.arguments[0].type==="ArrayExpression"){let[{elements:a}]=l.arguments;if(a.length>1){let i=j(e.options.at(0),{type:u.alphabetical,"ignore-case":!1,order:m.asc}),s=a.reduce((r,n)=>(n===null||n.type==="SpreadElement"?r.push([]):r.at(-1).push(n),r),[[]]);for(let r of s){let n=r.map(p=>{let t;if(p.type==="ArrayExpression"){let[o]=p.elements;o?o.type==="Literal"?t=o.raw:t=e.sourceCode.text.slice(...o.range):t=`${o}`}else t=e.sourceCode.text.slice(...p.range);return{size:I(p.range),node:p,name:t}});P(n,(p,t)=>{O(w(p,t,i))&&e.report({messageId:"unexpectedMapElementsOrder",data:{left:A(p.name),right:A(t.name)},node:t.node,fix:o=>M(o,n,S(n,i),e.sourceCode)})})}}}}})}),Me="eslint-plugin-perfectionist";let X=e=>{let l={[ie]:["error",{groups:["type",["builtin","external"],"internal-type","internal",["parent-type","sibling-type","index-type"],["parent","sibling","index"],"object","unknown"],"custom-groups":{value:{},type:{}},"newlines-between":"always","internal-pattern":["~/**"]}],[pe]:["error",{groups:["index-signature","static-property","private-property","property","constructor","static-method","private-method","method",["get-method","set-method"],"unknown"]}],[le]:["error",{"partition-by-comment":!1}],[Z]:["error",{"spread-last":!0}],[H]:["error"],[Q]:["error"],[F]:["error"],[ee]:["error"],[te]:["error"],[re]:["error"],[se]:["error"],[ae]:["error"],[oe]:["error"],[ne]:["error"],[ue]:["error"],[de]:["error"]};return{rules:Object.fromEntries(Object.entries(l).map(([a,[i,s={}]])=>[`perfectionist/${a}`,[i,Object.assign(s,e)]])),plugins:["perfectionist"]}};const Le={rules:{[Z]:xe,[Q]:be,[pe]:je,[ue]:Pe,[ne]:ke,[ie]:Ie,[ae]:we,[oe]:Ae,[de]:Te,[ee]:Ne,[te]:Ce,[re]:Se,[le]:Oe,[H]:he,[se]:ve,[F]:Ee},configs:{"recommended-alphabetical":X({type:u.alphabetical,order:m.asc,"ignore-case":!1}),"recommended-natural":X({type:u.natural,order:m.asc,"ignore-case":!1}),"recommended-line-length":X({type:u["line-length"],order:m.desc})},name:Me};module.exports=Le;
1
+ "use strict";
2
+ const sortIntersectionTypes = require("./rules/sort-intersection-types.js");
3
+ const sortSvelteAttributes = require("./rules/sort-svelte-attributes.js");
4
+ const sortAstroAttributes = require("./rules/sort-astro-attributes.js");
5
+ const sortArrayIncludes = require("./rules/sort-array-includes.js");
6
+ const sortVueAttributes = require("./rules/sort-vue-attributes.js");
7
+ const sortNamedExports = require("./rules/sort-named-exports.js");
8
+ const sortNamedImports = require("./rules/sort-named-imports.js");
9
+ const sortObjectTypes = require("./rules/sort-object-types.js");
10
+ const sortUnionTypes = require("./rules/sort-union-types.js");
11
+ const sortInterfaces = require("./rules/sort-interfaces.js");
12
+ const sortJsxProps = require("./rules/sort-jsx-props.js");
13
+ const sortExports = require("./rules/sort-exports.js");
14
+ const sortImports = require("./rules/sort-imports.js");
15
+ const sortObjects = require("./rules/sort-objects.js");
16
+ const sortClasses = require("./rules/sort-classes.js");
17
+ const sortEnums = require("./rules/sort-enums.js");
18
+ const sortMaps = require("./rules/sort-maps.js");
19
+ const index = require("./typings/index.js");
20
+ const _package = require("./package.json.js");
21
+ let createConfigWithOptions = (options) => {
22
+ let recommendedRules = {
23
+ [sortImports.RULE_NAME]: [
24
+ "error",
25
+ {
26
+ groups: [
27
+ "type",
28
+ ["builtin", "external"],
29
+ "internal-type",
30
+ "internal",
31
+ ["parent-type", "sibling-type", "index-type"],
32
+ ["parent", "sibling", "index"],
33
+ "object",
34
+ "unknown"
35
+ ],
36
+ "custom-groups": {
37
+ value: {},
38
+ type: {}
39
+ },
40
+ "newlines-between": "always",
41
+ "internal-pattern": ["~/**"]
42
+ }
43
+ ],
44
+ [sortClasses.RULE_NAME]: [
45
+ "error",
46
+ {
47
+ groups: [
48
+ "index-signature",
49
+ "static-property",
50
+ "private-property",
51
+ "property",
52
+ "constructor",
53
+ "static-method",
54
+ "private-method",
55
+ "method",
56
+ ["get-method", "set-method"],
57
+ "unknown"
58
+ ]
59
+ }
60
+ ],
61
+ [sortObjects.RULE_NAME]: [
62
+ "error",
63
+ {
64
+ "partition-by-comment": false
65
+ }
66
+ ],
67
+ [sortArrayIncludes.RULE_NAME]: [
68
+ "error",
69
+ {
70
+ "spread-last": true
71
+ }
72
+ ],
73
+ [sortIntersectionTypes.RULE_NAME]: ["error"],
74
+ [sortSvelteAttributes.RULE_NAME]: ["error"],
75
+ [sortAstroAttributes.RULE_NAME]: ["error"],
76
+ [sortVueAttributes.RULE_NAME]: ["error"],
77
+ [sortNamedExports.RULE_NAME]: ["error"],
78
+ [sortNamedImports.RULE_NAME]: ["error"],
79
+ [sortObjectTypes.RULE_NAME]: ["error"],
80
+ [sortUnionTypes.RULE_NAME]: ["error"],
81
+ [sortInterfaces.RULE_NAME]: ["error"],
82
+ [sortJsxProps.RULE_NAME]: ["error"],
83
+ [sortExports.RULE_NAME]: ["error"],
84
+ [sortEnums.RULE_NAME]: ["error"],
85
+ [sortMaps.RULE_NAME]: ["error"]
86
+ };
87
+ return {
88
+ rules: Object.fromEntries(
89
+ Object.entries(recommendedRules).map(([key, [message, baseOptions = {}]]) => [
90
+ `perfectionist/${key}`,
91
+ [message, Object.assign(baseOptions, options)]
92
+ ])
93
+ ),
94
+ plugins: ["perfectionist"]
95
+ };
96
+ };
97
+ const mod = {
98
+ rules: {
99
+ [sortArrayIncludes.RULE_NAME]: sortArrayIncludes.default,
100
+ [sortAstroAttributes.RULE_NAME]: sortAstroAttributes.default,
101
+ [sortClasses.RULE_NAME]: sortClasses.default,
102
+ [sortEnums.RULE_NAME]: sortEnums.default,
103
+ [sortExports.RULE_NAME]: sortExports.default,
104
+ [sortImports.RULE_NAME]: sortImports.default,
105
+ [sortInterfaces.RULE_NAME]: sortInterfaces.default,
106
+ [sortJsxProps.RULE_NAME]: sortJsxProps.default,
107
+ [sortMaps.RULE_NAME]: sortMaps.default,
108
+ [sortNamedExports.RULE_NAME]: sortNamedExports.default,
109
+ [sortNamedImports.RULE_NAME]: sortNamedImports.default,
110
+ [sortObjectTypes.RULE_NAME]: sortObjectTypes.default,
111
+ [sortObjects.RULE_NAME]: sortObjects.default,
112
+ [sortSvelteAttributes.RULE_NAME]: sortSvelteAttributes.default,
113
+ [sortIntersectionTypes.RULE_NAME]: sortIntersectionTypes.default,
114
+ [sortUnionTypes.RULE_NAME]: sortUnionTypes.default,
115
+ [sortVueAttributes.RULE_NAME]: sortVueAttributes.default
116
+ },
117
+ configs: {
118
+ "recommended-alphabetical": createConfigWithOptions({
119
+ type: index.SortType.alphabetical,
120
+ order: index.SortOrder.asc,
121
+ "ignore-case": false
122
+ }),
123
+ "recommended-natural": createConfigWithOptions({
124
+ type: index.SortType.natural,
125
+ order: index.SortOrder.asc,
126
+ "ignore-case": false
127
+ }),
128
+ "recommended-line-length": createConfigWithOptions({
129
+ type: index.SortType["line-length"],
130
+ order: index.SortOrder.desc
131
+ })
132
+ },
133
+ name: _package.name
134
+ };
135
+ module.exports = mod;