eslint-plugin-perfectionist 1.2.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var te=Object.defineProperty;var ae=(a,l,s)=>l in a?te(a,l,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[l]=s;var H=(a,l,s)=>(ae(a,typeof l!="symbol"?l+"":l,s),s);const u=require("@typescript-eslint/types"),v=require("@typescript-eslint/utils"),re=require("natural-compare-lite"),C=require("minimatch"),Q=require("is-core-module"),se=require("json5"),ne=require("path"),oe=require("fs");let N=v.ESLintUtils.RuleCreator(a=>`https://eslint-plugin-perfectionist.azat.io/rules/${a}`),O=a=>a.replaceAll(/\s\s+/g," ").trim(),P=a=>{let[l,s]=a;return s-l};var i=(a=>(a.alphabetical="alphabetical",a["line-length"]="line-length",a.natural="natural",a))(i||{}),d=(a=>(a.desc="desc",a.asc="asc",a))(d||{});let A=(a,l,s)=>{var e,o;if((e=l.dependencies)!=null&&e.includes(a.name))return!1;if((o=a.dependencies)!=null&&o.includes(l.name))return!0;let n=s.order==="asc"?1:-1,p,r=t=>s["ignore-case"]?t.toLowerCase():t;return s.type===i.alphabetical?p=(t,c)=>r(t.name).localeCompare(r(c.name)):s.type===i.natural?p=(t,c)=>re(r(t.name),r(c.name)):p=(t,c)=>t.size-c.size,n*p(a,l)>0},b=(a,l)=>[...a].sort((s,n)=>Number(A(s,n,l))||-1),le=(a,l)=>{let s=l.getTokenAfter(a,{filter:({type:n,value:p})=>!(n===u.AST_TOKEN_TYPES.Punctuator&&[",",";"].includes(p)),includeComments:!0});return((s==null?void 0:s.type)===u.AST_TOKEN_TYPES.Block||(s==null?void 0:s.type)===u.AST_TOKEN_TYPES.Line)&&a.loc.end.line===s.loc.end.line?s:null},Z=(a,l)=>{let[s,n]=l.getTokensBefore(a,{filter:({type:p,value:r})=>!(p===u.AST_TOKEN_TYPES.Punctuator&&[",",";"].includes(r)),includeComments:!0,count:2});return((n==null?void 0:n.type)===u.AST_TOKEN_TYPES.Block||(n==null?void 0:n.type)===u.AST_TOKEN_TYPES.Line)&&a.loc.start.line-n.loc.end.line<=1&&(s==null?void 0:s.loc.end.line)!==n.loc.start.line?n:null},I=(a,l)=>{var e;let s=a.range.at(0),n=a.range.at(1),p=l.text.slice(s,n);if(v.ASTUtils.isParenthesized(a,l)){let o=l.getTokenBefore(a,v.ASTUtils.isOpeningParenToken),t=l.getTokenAfter(a,v.ASTUtils.isClosingParenToken);s=o.range.at(0),n=t.range.at(1)}let r=Z(a,l);if(p.endsWith(";")||p.endsWith(",")){let o=l.getTokensAfter(a,{includeComments:!0,count:2});a.loc.start.line===((e=o.at(1))==null?void 0:e.loc.start.line)&&(n-=1)}return r&&(s=r.range.at(0)),[s,n]},Y=(a,l,s,n)=>{let p=[];return l.forEach(({node:r},e)=>{p.push(a.replaceTextRange(I(r,n),n.text.slice(...I(s[e].node,n))));let o=le(s[e].node,n);if(o){let c=[n.getTokenBefore(o).range.at(1),o.range.at(1)];p.push(a.replaceTextRange(c,""));let g=n.getTokenAfter(r);p.push(a.insertTextAfter((g==null?void 0:g.loc.end.line)===r.loc.end.line?g:r,n.text.slice(...c)))}}),p},w=(a={},l)=>Object.assign(l,a),D=(a,l)=>{if(a.length>1)for(let s=1;s<a.length;s++){let n=a.at(s-1),p=a.at(s);n&&p&&l(n,p,s-1)}};const L="sort-array-includes",ie=N({name:L,meta:{type:"suggestion",docs:{description:"enforce sorted arrays before include method",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},order:{enum:[d.asc,d.desc],default:d.asc},"ignore-case":{type:"boolean",default:!1},"spread-last":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedArrayIncludesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>({MemberExpression:l=>{if((l.object.type===u.AST_NODE_TYPES.ArrayExpression||l.object.type===u.AST_NODE_TYPES.NewExpression)&&l.property.type===u.AST_NODE_TYPES.Identifier&&l.property.name==="includes"){let s=l.object.type===u.AST_NODE_TYPES.ArrayExpression?l.object.elements:l.object.arguments;if(s.length>1){let n=w(a.options.at(0),{type:i.alphabetical,order:d.asc,"ignore-case":!1,"spread-last":!1}),p=a.getSourceCode(),r=s.reduce((e,o)=>(o!==null&&e.at(0).push({name:o.type===u.AST_NODE_TYPES.Literal?o.raw:p.text.slice(...o.range),size:P(o.range),type:o.type,node:o}),e),[[],[]]).flat();D(r,(e,o)=>{let t;n["spread-last"]&&e.node.type===u.AST_NODE_TYPES.Literal&&o.node.type===u.AST_NODE_TYPES.SpreadElement?t=!1:n["spread-last"]&&e.node.type===u.AST_NODE_TYPES.SpreadElement&&o.node.type===u.AST_NODE_TYPES.Literal?t=!0:t=A(e,o,n),t&&a.report({messageId:"unexpectedArrayIncludesOrder",data:{left:O(e.name),right:O(o.name)},node:o.node,fix:c=>{let g=b(r,n);return n["spread-last"]&&g.forEach((S,T)=>{S.node.type===u.AST_NODE_TYPES.SpreadElement&&g.push(g.splice(T,1).at(0))}),Y(c,r,g,p)}})})}}}})}),$="sort-named-exports",pe=N({name:$,meta:{type:"suggestion",docs:{description:"enforce sorted named exports",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},order:{enum:[d.asc,d.desc],default:d.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedNamedExportsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>({ExportNamedDeclaration:l=>{if(l.specifiers.length>1){let s=w(a.options.at(0),{type:i.alphabetical,"ignore-case":!1,order:d.asc}),n=a.getSourceCode(),p=l.specifiers.map(r=>({size:P(r.range),name:r.local.name,node:r}));D(p,(r,e)=>{A(r,e,s)&&a.report({messageId:"unexpectedNamedExportsOrder",data:{left:r.name,right:e.name},node:e.node,fix:o=>Y(o,p,b(p,s),n)})})}}})}),M="sort-named-imports",ce=N({name:M,meta:{type:"suggestion",docs:{description:"enforce sorted named imports",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},order:{enum:[d.asc,d.desc],default:d.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedNamedImportsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>({ImportDeclaration:l=>{let s=l.specifiers.filter(({type:n})=>n===u.AST_NODE_TYPES.ImportSpecifier);if(s.length>1){let n=w(a.options.at(0),{type:i.alphabetical,"ignore-case":!1,order:d.asc}),p=a.getSourceCode(),r=s.map(e=>({size:P(e.range),name:e.local.name,node:e}));D(r,(e,o)=>{A(e,o,n)&&a.report({messageId:"unexpectedNamedImportsOrder",data:{left:e.name,right:o.name},node:o.node,fix:t=>Y(t,r,b(r,n),p)})})}}})}),B="sort-object-types",de=N({name:B,meta:{type:"suggestion",docs:{description:"enforce sorted object types",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},order:{enum:[d.asc,d.desc],default:d.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedObjectTypesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>({TSTypeLiteral:l=>{if(l.members.length>1){let s=w(a.options.at(0),{type:i.alphabetical,"ignore-case":!1,order:d.asc}),n=a.getSourceCode(),p=l.members.map(r=>{var S,T;let e,o=n.text.slice(r.range.at(0),r.range.at(1)),t=y=>y.replace(/(,|;)$/,"");if(r.type===u.AST_NODE_TYPES.TSPropertySignature)r.key.type===u.AST_NODE_TYPES.Identifier?{name:e}=r.key:r.key.type===u.AST_NODE_TYPES.Literal?e=`${r.key.value}`:e=n.text.slice(r.range.at(0),(S=r.typeAnnotation)==null?void 0:S.range.at(0));else if(r.type===u.AST_NODE_TYPES.TSIndexSignature){let y=((T=r.typeAnnotation)==null?void 0:T.range.at(0))??r.range.at(1);e=t(n.text.slice(r.range.at(0),y))}else e=t(n.text.slice(r.range.at(0),r.range.at(1)));let g=o.endsWith(";")||o.endsWith(",")?1:0;return{size:P(r.range)-g,node:r,name:e}});D(p,(r,e)=>{A(r,e,s)&&a.report({messageId:"unexpectedObjectTypesOrder",data:{left:O(r.name),right:O(e.name)},node:e.node,fix:o=>Y(o,p,b(p,s),n)})})}}})}),U="sort-map-elements",fe=N({name:U,meta:{type:"suggestion",docs:{description:"enforce sorted Map elements",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},order:{enum:[d.asc,d.desc],default:d.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedMapElementsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>({NewExpression:l=>{if(l.callee.type===u.AST_NODE_TYPES.Identifier&&l.callee.name==="Map"&&l.arguments.length&&l.arguments[0].type===u.AST_NODE_TYPES.ArrayExpression){let[{elements:s}]=l.arguments;if(s.length>1){let n=w(a.options.at(0),{type:i.alphabetical,"ignore-case":!1,order:d.asc}),p=a.getSourceCode();s.reduce((e,o)=>(o===null||o.type===u.AST_NODE_TYPES.SpreadElement?e.push([]):e.at(-1).push(o),e),[[]]).forEach(e=>{let o=e.map(t=>{let c;if(t.type===u.AST_NODE_TYPES.ArrayExpression){let[g]=t.elements;g?g.type===u.AST_NODE_TYPES.Literal?c=g.raw:c=p.text.slice(...g.range):c=`${g}`}else c=p.text.slice(...t.range);return{size:P(t.range),node:t,name:c}});D(o,(t,c)=>{A(t,c,n)&&a.report({messageId:"unexpectedMapElementsOrder",data:{left:O(t.name),right:O(c.name)},node:c.node,fix:g=>Y(g,o,b(o,n),p)})})})}}}})}),z="sort-union-types",ue=N({name:z,meta:{type:"suggestion",docs:{description:"enforce sorted union types",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},order:{enum:[d.asc,d.desc],default:d.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedUnionTypesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>({TSUnionType:l=>{let s=a.getSourceCode(),n=w(a.options.at(0),{type:i.alphabetical,"ignore-case":!1,order:d.asc}),p=l.types.map(r=>({name:s.text.slice(...r.range),size:P(r.range),node:r}));D(p,(r,e)=>{A(r,e,n)&&a.report({messageId:"unexpectedUnionTypesOrder",data:{left:O(r.name),right:O(e.name)},node:e.node,fix:o=>Y(o,p,b(p,n),s)})})}})}),q="sort-interfaces",ge=N({name:q,meta:{type:"suggestion",docs:{description:"enforce sorted interface properties",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},order:{enum:[d.asc,d.desc],default:d.asc},"ignore-case":{type:"boolean",default:!1},"ignore-pattern":{type:"array",default:[]}},additionalProperties:!1}],messages:{unexpectedInterfacePropertiesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>({TSInterfaceDeclaration:l=>{if(l.body.body.length>1){let s=w(a.options.at(0),{type:i.alphabetical,"ignore-case":!1,order:d.asc,"ignore-pattern":[]});if(!s["ignore-pattern"].some(n=>C.minimatch(l.id.name,n))){let n=a.getSourceCode(),p=l.body.body.map(r=>{var o,t,c;let e;if(r.type===u.AST_NODE_TYPES.TSPropertySignature)if(r.key.type===u.AST_NODE_TYPES.Identifier)({name:e}=r.key);else if(r.key.type===u.AST_NODE_TYPES.Literal)e=`${r.key.value}`;else{let g=((o=r.typeAnnotation)==null?void 0:o.range.at(0))??r.range.at(1)-(r.optional?1:0);e=n.text.slice(r.range.at(0),g)}else if(r.type===u.AST_NODE_TYPES.TSIndexSignature){let g=((t=r.typeAnnotation)==null?void 0:t.range.at(0))??r.range.at(1);e=n.text.slice(r.range.at(0),g)}else{let g=((c=r.returnType)==null?void 0:c.range.at(0))??r.range.at(1);e=n.text.slice(r.range.at(0),g)}return{size:P(r.range),node:r,name:e}});D(p,(r,e)=>{A(r,e,s)&&a.report({messageId:"unexpectedInterfacePropertiesOrder",data:{left:O(r.name),right:O(e.name)},node:e.node,fix:o=>Y(o,p,b(p,s),n)})})}}}})});let F=(a,l)=>a.reduce((s,n)=>{let p=l(n);return p in s||(s[p]=[]),s[p].push(n),s},{});const J="sort-jsx-props",me=N({name:J,meta:{type:"suggestion",docs:{description:"enforce sorted JSX props",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},order:{enum:[d.asc,d.desc],default:d.asc},"always-on-top":{type:"array",default:[]},"ignore-case":{type:"boolean",default:!1},shorthand:{enum:["first","last","ignore"]},callback:{enum:["first","last","ignore"]},multiline:{enum:["first","last","ignore"]}},additionalProperties:!1}],messages:{unexpectedJSXPropsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>({JSXElement:l=>{if(l.openingElement.attributes.length>1){let s=w(a.options.at(0),{type:i.alphabetical,shorthand:"ignore",multiline:"ignore",callback:"ignore","always-on-top":[],"ignore-case":!1,order:d.asc}),n=a.getSourceCode();l.openingElement.attributes.reduce((r,e)=>{if(e.type===u.AST_NODE_TYPES.JSXSpreadAttribute)return r.push([]),r;let o="ignore";e.name.type===u.AST_NODE_TYPES.JSXIdentifier&&s["always-on-top"].includes(e.name.name)?o="exception":(s.shorthand!=="ignore"&&e.value===null&&(o=s.shorthand),s.callback!=="ignore"&&e.name.type===u.AST_NODE_TYPES.JSXIdentifier&&e.name.name.indexOf("on")===0&&e.value!==null?o=s.callback:s.multiline!=="ignore"&&e.loc.start.line!==e.loc.end.line&&(o=s.multiline));let t={name:e.name.type===u.AST_NODE_TYPES.JSXNamespacedName?`${e.name.namespace.name}:${e.name.name.name}`:e.name.name,size:P(e.range),node:e,position:o};return r.at(-1).push(t),r},[[]]).forEach(r=>{D(r,(e,o)=>{let t;if(e.position==="exception"&&o.position==="exception")t=s["always-on-top"].indexOf(e.name)>s["always-on-top"].indexOf(o.name);else if(e.position===o.position)t=A(e,o,s);else{let c={exception:2,first:1,ignore:0,last:-1};t=c[e.position]<c[o.position]}t&&a.report({messageId:"unexpectedJSXPropsOrder",data:{left:e.name,right:o.name},node:o.node,fix:c=>{let g=F(r,({position:y})=>y),S=y=>y in g?g[y]:[],T=[S("exception").sort((y,f)=>s["always-on-top"].indexOf(y.name)-s["always-on-top"].indexOf(f.name)),b(S("first"),s),b(S("ignore"),s),b(S("last"),s)].flat();return Y(c,r,T,n)}})})})}}})});class ee{static get(){return this._instance?this._instance:(this._instance=se.parse(oe.readFileSync(ne.resolve(process.cwd(),"tsconfig.json"),"utf8")),this._instance)}}H(ee,"_instance");const W="sort-imports",ye=N({name:W,meta:{type:"suggestion",docs:{description:"enforce sorted imports",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},order:{enum:[d.asc,d.desc],default:d.asc},"ignore-case":{type:"boolean",default:!1},groups:{type:"array",default:[]},"internal-pattern":{type:"array",default:["~/**"]},"newlines-between":{enum:["ignore","always","never"],default:"always"},"read-tsconfig":{type:"boolean",default:!1}},additionalProperties:!1}],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:i.alphabetical,order:d.asc}],create:a=>{var o;let l=w(a.options.at(0),{"newlines-between":"always","internal-pattern":["~/**"],type:i.alphabetical,"read-tsconfig":!1,order:d.asc,"ignore-case":!1,groups:[]}),s=[];if(l["read-tsconfig"]){let t=ee.get();(o=t.compilerOptions)!=null&&o.paths&&Object.keys(t.compilerOptions.paths).forEach(c=>{s.push(c)})}let n=a.getSourceCode(),p=[],r=t=>{let c,g=E=>[".less",".scss",".sass",".styl",".pcss",".css",".sss"].some(x=>E.endsWith(x)),S=E=>["./index.d.js","./index.d.ts","./index.js","./index.ts","./index","./","."].includes(E),T=E=>E.indexOf("..")===0,y=E=>E.indexOf("./")===0,f=E=>{!c&&l.groups.flat().includes(E)&&(c=E)},m=E=>l["internal-pattern"].length&&l["internal-pattern"].some(x=>C.minimatch(E.source.value,x))||s.some(x=>C.minimatch(E.source.value,x));return t.importKind==="type"&&(t.type===u.AST_NODE_TYPES.ImportDeclaration&&(Q(t.source.value)&&f("builtin-type"),m(t)&&f("internal-type"),S(t.source.value)&&f("index-type"),T(t.source.value)&&f("parent-type"),y(t.source.value)&&f("sibling-type")),f("type")),!c&&t.type===u.AST_NODE_TYPES.ImportDeclaration&&(Q(t.source.value)&&f("builtin"),m(t)&&f("internal"),g(t.source.value)&&f("style"),t.specifiers.length===0&&f("side-effect"),S(t.source.value)&&f("index"),T(t.source.value)&&f("parent"),y(t.source.value)&&f("sibling"),f("external")),c??"unknown"},e=t=>{let c;t.type===u.AST_NODE_TYPES.ImportDeclaration?c=t.source.value:t.moduleReference.type===u.AST_NODE_TYPES.TSExternalModuleReference&&t.moduleReference.expression.type===u.AST_NODE_TYPES.Literal?c=`${t.moduleReference.expression.value}`:c=n.text.slice(...t.moduleReference.range),p.push({size:P(t.range),group:r(t),name:c,node:t})};return{TSImportEqualsDeclaration:e,ImportDeclaration:e,"Program:exit":()=>{let t=y=>{for(let f=0,m=l.groups.length;f<m;f++){let E=l.groups[f];if(y.group===E||Array.isArray(E)&&E.includes(y.group))return f}return l.groups.length},c=(y,f)=>!!n.getTokensBetween(y.node,Z(f.node,n)||f.node,{includeComments:!0}).length,g=(y,f)=>n.lines.slice(y.node.loc.end.line,f.node.loc.start.line-1).filter(E=>!E.trim().length).length,S=(y,f)=>{let m=[],E=f.reduce((_,h)=>{let j=t(h);return j in _?_[j]=b([..._[j],h],l):_[j]=[h],_},{}),x=Object.keys(E).sort().reduce((_,h)=>[..._,...E[h]],[]);return x.forEach((_,h)=>{if(m.push(y.replaceTextRange(I(f.at(h).node,n),n.text.slice(...I(_.node,n)))),l["newlines-between"]!=="ignore"){let j=x.at(h+1);if(j){let k=g(f.at(h),f.at(h+1));(l["newlines-between"]==="always"&&t(_)===t(j)&&k!==0||l["newlines-between"]==="never"&&k>0)&&m.push(y.removeRange([I(f.at(h).node,n).at(1),I(f.at(h+1).node,n).at(0)-1])),l["newlines-between"]==="always"&&t(_)!==t(j)&&k>1&&m.push(y.replaceTextRange([I(f.at(h).node,n).at(1),I(f.at(h+1).node,n).at(0)-1],`
2
- `)),l["newlines-between"]==="always"&&t(_)!==t(j)&&k===0&&m.push(y.insertTextAfterRange(I(f.at(h).node,n),`
3
- `))}}}),m};p.reduce((y,f)=>{var E;let m=(E=y.at(-1))==null?void 0:E.at(-1);return m&&c(m,f)?y.push([f]):y.at(-1).push(f),y},[[]]).forEach(y=>{D(y,(f,m)=>{let E=t(f),x=t(m),_=g(f,m);!c(f,m)&&(E>x||E===x&&A(f,m,l))&&a.report({messageId:"unexpectedImportsOrder",data:{left:f.name,right:m.name},node:m.node,fix:h=>S(h,y)}),l["newlines-between"]==="never"&&_>0&&a.report({messageId:"extraSpacingBetweenImports",data:{left:f.name,right:m.name},node:m.node,fix:h=>S(h,y)}),l["newlines-between"]==="always"&&(E<x&&_===0?a.report({messageId:"missedSpacingBetweenImports",data:{left:f.name,right:m.name},node:m.node,fix:h=>S(h,y)}):(_>1||E===x&&_>0)&&a.report({messageId:"extraSpacingBetweenImports",data:{left:f.name,right:m.name},node:m.node,fix:h=>S(h,y)}))})})}}}}),X="sort-classes",Ee=N({name:X,meta:{type:"suggestion",docs:{description:"enforce sorted classes",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},"ignore-case":{type:"boolean",default:!1},order:{enum:[d.asc,d.desc],default:d.asc},groups:{type:"array",default:["property","constructor","method","unknown"]}},additionalProperties:!1}],messages:{unexpectedClassesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>({ClassBody:l=>{if(l.body.length>1){let s=w(a.options.at(0),{type:i.alphabetical,order:d.asc,"ignore-case":!1,groups:["property","constructor","method","unknown"]}),n=a.getSourceCode(),p=l.body.map(e=>{var g;let o,t;e.type===u.AST_NODE_TYPES.StaticBlock?t="static":e.type===u.AST_NODE_TYPES.TSIndexSignature?t=n.text.slice(e.range.at(0),((g=e.typeAnnotation)==null?void 0:g.range.at(0))??e.range.at(1)):e.key.type===u.AST_NODE_TYPES.Identifier?{name:t}=e.key:t=n.text.slice(...e.key.range);let c=S=>{!o&&s.groups.flat().includes(S)&&(o=S)};return e.type===u.AST_NODE_TYPES.MethodDefinition?(e.kind==="constructor"&&c("constructor"),e.static&&c("static-method"),e.accessibility==="private"&&c("private-method"),c("method")):e.type===u.AST_NODE_TYPES.PropertyDefinition&&(e.static&&c("static-property"),e.accessibility==="private"&&c("private-property"),c("property")),{size:P(e.range),group:o??"unknown",node:e,name:t}}),r=e=>{for(let o=0,t=s.groups.length;o<t;o++){let c=s.groups[o];if(e.group===c||Array.isArray(c)&&c.includes(e.group))return o}return s.groups.length};D(p,(e,o)=>{let t=r(e),c=r(o);(t>c||t===c&&A(e,o,s))&&a.report({messageId:"unexpectedClassesOrder",data:{left:O(e.name),right:O(o.name)},node:o.node,fix:g=>{let S=[],T=p.reduce((f,m)=>{let E=r(m);return E in f?f[E]=b([...f[E],m],s):f[E]=[m],f},{});return Object.keys(T).sort().reduce((f,m)=>[...f,...T[m]],[]).forEach((f,m)=>{S.push(g.replaceTextRange(I(p.at(m).node,n),n.text.slice(...I(f.node,n))))}),S}})})}}})}),G="sort-objects",Se=N({name:G,meta:{type:"suggestion",docs:{description:"enforce sorted objects",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},order:{enum:[d.asc,d.desc],default:d.asc},"ignore-case":{type:"boolean",default:!1},"always-on-top":{type:"array",default:[]}},additionalProperties:!1}],messages:{unexpectedObjectsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>{let l=s=>{if(s.properties.length>1){let n=w(a.options.at(0),{type:i.alphabetical,"ignore-case":!1,order:d.asc,"always-on-top":[]}),p=a.getSourceCode();(e=>e.reduce((o,t)=>{if(t.type===u.AST_NODE_TYPES.SpreadElement||t.type===u.AST_NODE_TYPES.RestElement)return o.push([]),o;let c,g="ignore",S=[];if(t.key.type===u.AST_NODE_TYPES.Identifier?{name:c}=t.key:t.key.type===u.AST_NODE_TYPES.Literal?c=`${t.key.value}`:c=p.text.slice(...t.key.range),t.key.type===u.AST_NODE_TYPES.Identifier&&n["always-on-top"].includes(t.key.name)&&(g="exception"),t.value.type===u.AST_NODE_TYPES.AssignmentPattern){let y=(f,m)=>{f.right.type===u.AST_NODE_TYPES.Identifier&&S.push(f.right.name),!m&&f.left.type===u.AST_NODE_TYPES.Identifier&&S.push(f.left.name);let E=x=>{x.right.type===u.AST_NODE_TYPES.Identifier&&S.push(x.right.name),x.left.type===u.AST_NODE_TYPES.BinaryExpression&&y(x.left,!1)};f.right.type===u.AST_NODE_TYPES.BinaryExpression&&E(f.right)};y(t.value,!0)}let T={size:P(t.range),dependencies:S,node:t,position:g,name:c};return o.at(-1).push(T),o},[[]]))(s.properties).forEach(e=>{D(e,(o,t)=>{let c;if(o.position==="exception"&&t.position==="exception")c=n["always-on-top"].indexOf(o.name)>n["always-on-top"].indexOf(t.name);else if(o.position===t.position)c=A(o,t,n);else{let g={exception:1,ignore:0};c=g[o.position]<g[t.position]}if(c){let g=S=>{let T=F(e,({position:m})=>m),y=m=>m in T?T[m]:[],f=[y("exception").sort((m,E)=>n["always-on-top"].indexOf(m.name)-n["always-on-top"].indexOf(E.name)),b(y("ignore"),n)].flat();return Y(S,e,f,p)};a.report({messageId:"unexpectedObjectsOrder",data:{left:O(o.name),right:O(t.name)},node:t.node,fix:g})}})})}};return{ObjectExpression:l,ObjectPattern:l}}}),K="sort-exports",he=N({name:K,meta:{type:"suggestion",docs:{description:"enforce sorted exports",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},order:{enum:[d.asc,d.desc],default:d.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedExportsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>{let l=w(a.options.at(0),{type:i.alphabetical,order:d.asc,"ignore-case":!1}),s=[[]],n=p=>{p.type===u.AST_NODE_TYPES.ExportAllDeclaration&&p.exported===null?s.push([]):s.at(-1).push({size:P(p.range),name:p.source.value,node:p})};return{ExportAllDeclaration:n,ExportNamedDeclaration:p=>{p.source!==null&&n(p)},"Program:exit":()=>{let p=a.getSourceCode();s.forEach(r=>{D(r,(e,o)=>{A(e,o,l)&&a.report({messageId:"unexpectedExportsOrder",data:{left:e.name,right:o.name},node:o.node,fix:t=>Y(t,r,b(r,l),p)})})})}}}}),V="sort-enums",Te=N({name:V,meta:{type:"suggestion",docs:{description:"enforce sorted TypeScript enums",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[i.alphabetical,i.natural,i["line-length"]],default:i.natural},"ignore-case":{type:"boolean",default:!1},order:{enum:[d.asc,d.desc],default:d.asc}},additionalProperties:!1}],messages:{unexpectedEnumsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:i.alphabetical,order:d.asc}],create:a=>({TSEnumDeclaration:l=>{if(l.members.length>1&&l.members.some(({initializer:s})=>s)){let s=w(a.options.at(0),{type:i.alphabetical,order:d.asc,"ignore-case":!1}),n=a.getSourceCode(),p=l.members.map(r=>({name:r.id.type===u.AST_NODE_TYPES.Literal?`${r.id.value}`:`${n.text.slice(...r.id.range)}`,size:P(r.range),node:r}));D(p,(r,e)=>{A(r,e,s)&&a.report({messageId:"unexpectedEnumsOrder",data:{left:O(r.name),right:O(e.name)},node:e.node,fix:o=>Y(o,p,b(p,s),n)})})}}})}),xe="eslint-plugin-perfectionist";let R=a=>{let l={[W]:["error",{groups:["type",["builtin","external"],"internal-type","internal",["parent-type","sibling-type","index-type"],["parent","sibling","index"],"object","unknown"],"newlines-between":"always","internal-pattern":["~/**"],"read-tsconfig":!1}],[X]:["error",{groups:["static-property","private-property","property","constructor","static-method","private-method","method","unknown"]}],[J]:["error",{"always-on-top":[],shorthand:"ignore",multiline:"first",callback:"ignore"}],[L]:["error",{"spread-last":!0}],[G]:["error",{"always-on-top":[]}],[M]:["error"],[$]:["error"],[B]:["error"],[U]:["error"],[z]:["error"],[q]:["error"],[K]:["error"],[V]:["error"]};return{rules:Object.fromEntries(Object.entries(l).map(([s,[n,p={}]])=>[`perfectionist/${s}`,[n,Object.assign(p,a)]])),plugins:["perfectionist"]}};const _e={rules:{[L]:ie,[X]:Ee,[V]:Te,[K]:he,[W]:ye,[q]:ge,[J]:me,[U]:fe,[$]:pe,[M]:ce,[B]:de,[G]:Se,[z]:ue},configs:{"recommended-alphabetical":R({type:i.alphabetical,order:d.asc,"ignore-case":!1}),"recommended-natural":R({type:i.natural,order:d.asc,"ignore-case":!1}),"recommended-line-length":R({type:i["line-length"],order:d.desc})},name:xe};module.exports=_e;
1
+ "use strict";var te=Object.defineProperty;var ae=(a,i,s)=>i in a?te(a,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[i]=s;var H=(a,i,s)=>(ae(a,typeof i!="symbol"?i+"":i,s),s);const u=require("@typescript-eslint/types"),R=require("@typescript-eslint/utils"),re=require("natural-compare-lite"),v=require("minimatch"),Q=require("is-core-module"),se=require("json5"),ne=require("path"),oe=require("fs");let P=R.ESLintUtils.RuleCreator(a=>`https://eslint-plugin-perfectionist.azat.io/rules/${a}`),b=a=>a.replaceAll(/\s\s+/g," ").trim(),w=a=>{let[i,s]=a;return s-i};var l=(a=>(a.alphabetical="alphabetical",a["line-length"]="line-length",a.natural="natural",a))(l||{}),f=(a=>(a.desc="desc",a.asc="asc",a))(f||{});let N=(a,i,s)=>{var e,o;if((e=i.dependencies)!=null&&e.includes(a.name))return!1;if((o=a.dependencies)!=null&&o.includes(i.name))return!0;let n=s.order==="asc"?1:-1,p,r=t=>s["ignore-case"]?t.toLowerCase():t;return s.type===l.alphabetical?p=(t,d)=>r(t.name).localeCompare(r(d.name)):s.type===l.natural?p=(t,d)=>re(r(t.name),r(d.name)):p=(t,d)=>t.size-d.size,n*p(a,i)>0},O=(a,i)=>[...a].sort((s,n)=>Number(N(s,n,i))||-1),ie=(a,i)=>{let s=i.getTokenAfter(a,{filter:({type:n,value:p})=>!(n===u.AST_TOKEN_TYPES.Punctuator&&[",",";"].includes(p)),includeComments:!0});return((s==null?void 0:s.type)===u.AST_TOKEN_TYPES.Block||(s==null?void 0:s.type)===u.AST_TOKEN_TYPES.Line)&&a.loc.end.line===s.loc.end.line?s:null},Z=(a,i)=>{let[s,n]=i.getTokensBefore(a,{filter:({type:p,value:r})=>!(p===u.AST_TOKEN_TYPES.Punctuator&&[",",";"].includes(r)),includeComments:!0,count:2});return((n==null?void 0:n.type)===u.AST_TOKEN_TYPES.Block||(n==null?void 0:n.type)===u.AST_TOKEN_TYPES.Line)&&a.loc.start.line-n.loc.end.line<=1&&(s==null?void 0:s.loc.end.line)!==n.loc.start.line?n:null},Y=(a,i)=>{var e;let s=a.range.at(0),n=a.range.at(1),p=i.text.slice(s,n);if(R.ASTUtils.isParenthesized(a,i)){let o=i.getTokenBefore(a,R.ASTUtils.isOpeningParenToken),t=i.getTokenAfter(a,R.ASTUtils.isClosingParenToken);s=o.range.at(0),n=t.range.at(1)}let r=Z(a,i);if(p.endsWith(";")||p.endsWith(",")){let o=i.getTokensAfter(a,{includeComments:!0,count:2});a.loc.start.line===((e=o.at(1))==null?void 0:e.loc.start.line)&&(n-=1)}return r&&(s=r.range.at(0)),[s,n]},j=(a,i,s,n)=>{let p=[];return i.forEach(({node:r},e)=>{p.push(a.replaceTextRange(Y(r,n),n.text.slice(...Y(s[e].node,n))));let o=ie(s[e].node,n);if(o){let d=[n.getTokenBefore(o).range.at(1),o.range.at(1)];p.push(a.replaceTextRange(d,""));let g=n.getTokenAfter(r);p.push(a.insertTextAfter((g==null?void 0:g.loc.end.line)===r.loc.end.line?g:r,n.text.slice(...d)))}}),p},D=(a={},i)=>Object.assign(i,a),I=(a,i)=>{if(a.length>1)for(let s=1;s<a.length;s++){let n=a.at(s-1),p=a.at(s);n&&p&&i(n,p,s-1)}};const L="sort-array-includes",le=P({name:L,meta:{type:"suggestion",docs:{description:"enforce sorted arrays before include method",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},order:{enum:[f.asc,f.desc],default:f.asc},"ignore-case":{type:"boolean",default:!1},"spread-last":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedArrayIncludesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>({MemberExpression:i=>{if((i.object.type===u.AST_NODE_TYPES.ArrayExpression||i.object.type===u.AST_NODE_TYPES.NewExpression)&&i.property.type===u.AST_NODE_TYPES.Identifier&&i.property.name==="includes"){let s=i.object.type===u.AST_NODE_TYPES.ArrayExpression?i.object.elements:i.object.arguments;if(s.length>1){let n=D(a.options.at(0),{type:l.alphabetical,order:f.asc,"ignore-case":!1,"spread-last":!1}),p=a.getSourceCode(),r=s.reduce((e,o)=>(o!==null&&e.at(0).push({name:o.type===u.AST_NODE_TYPES.Literal?o.raw:p.text.slice(...o.range),size:w(o.range),type:o.type,node:o}),e),[[],[]]).flat();I(r,(e,o)=>{let t;n["spread-last"]&&e.node.type===u.AST_NODE_TYPES.Literal&&o.node.type===u.AST_NODE_TYPES.SpreadElement?t=!1:n["spread-last"]&&e.node.type===u.AST_NODE_TYPES.SpreadElement&&o.node.type===u.AST_NODE_TYPES.Literal?t=!0:t=N(e,o,n),t&&a.report({messageId:"unexpectedArrayIncludesOrder",data:{left:b(e.name),right:b(o.name)},node:o.node,fix:d=>{let g=O(r,n);return n["spread-last"]&&g.forEach((E,_)=>{E.node.type===u.AST_NODE_TYPES.SpreadElement&&g.push(g.splice(_,1).at(0))}),j(d,r,g,p)}})})}}}})}),$="sort-named-exports",pe=P({name:$,meta:{type:"suggestion",docs:{description:"enforce sorted named exports",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},order:{enum:[f.asc,f.desc],default:f.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedNamedExportsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>({ExportNamedDeclaration:i=>{if(i.specifiers.length>1){let s=D(a.options.at(0),{type:l.alphabetical,"ignore-case":!1,order:f.asc}),n=a.getSourceCode(),p=i.specifiers.map(r=>({size:w(r.range),name:r.local.name,node:r}));I(p,(r,e)=>{N(r,e,s)&&a.report({messageId:"unexpectedNamedExportsOrder",data:{left:r.name,right:e.name},node:e.node,fix:o=>j(o,p,O(p,s),n)})})}}})}),M="sort-named-imports",ce=P({name:M,meta:{type:"suggestion",docs:{description:"enforce sorted named imports",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},order:{enum:[f.asc,f.desc],default:f.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedNamedImportsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>({ImportDeclaration:i=>{let s=i.specifiers.filter(({type:n})=>n===u.AST_NODE_TYPES.ImportSpecifier);if(s.length>1){let n=D(a.options.at(0),{type:l.alphabetical,"ignore-case":!1,order:f.asc}),p=a.getSourceCode(),r=s.map(e=>({size:w(e.range),name:e.local.name,node:e}));I(r,(e,o)=>{N(e,o,n)&&a.report({messageId:"unexpectedNamedImportsOrder",data:{left:e.name,right:o.name},node:o.node,fix:t=>j(t,r,O(r,n),p)})})}}})}),B="sort-object-types",de=P({name:B,meta:{type:"suggestion",docs:{description:"enforce sorted object types",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},order:{enum:[f.asc,f.desc],default:f.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedObjectTypesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>({TSTypeLiteral:i=>{if(i.members.length>1){let s=D(a.options.at(0),{type:l.alphabetical,"ignore-case":!1,order:f.asc}),n=a.getSourceCode(),p=i.members.map(r=>{var E,_;let e,o=n.text.slice(r.range.at(0),r.range.at(1)),t=y=>y.replace(/(,|;)$/,"");if(r.type===u.AST_NODE_TYPES.TSPropertySignature)r.key.type===u.AST_NODE_TYPES.Identifier?{name:e}=r.key:r.key.type===u.AST_NODE_TYPES.Literal?e=`${r.key.value}`:e=n.text.slice(r.range.at(0),(E=r.typeAnnotation)==null?void 0:E.range.at(0));else if(r.type===u.AST_NODE_TYPES.TSIndexSignature){let y=((_=r.typeAnnotation)==null?void 0:_.range.at(0))??r.range.at(1);e=t(n.text.slice(r.range.at(0),y))}else e=t(n.text.slice(r.range.at(0),r.range.at(1)));let g=o.endsWith(";")||o.endsWith(",")?1:0;return{size:w(r.range)-g,node:r,name:e}});I(p,(r,e)=>{N(r,e,s)&&a.report({messageId:"unexpectedObjectTypesOrder",data:{left:b(r.name),right:b(e.name)},node:e.node,fix:o=>j(o,p,O(p,s),n)})})}}})}),U="sort-map-elements",fe=P({name:U,meta:{type:"suggestion",docs:{description:"enforce sorted Map elements",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},order:{enum:[f.asc,f.desc],default:f.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedMapElementsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>({NewExpression:i=>{if(i.callee.type===u.AST_NODE_TYPES.Identifier&&i.callee.name==="Map"&&i.arguments.length&&i.arguments[0].type===u.AST_NODE_TYPES.ArrayExpression){let[{elements:s}]=i.arguments;if(s.length>1){let n=D(a.options.at(0),{type:l.alphabetical,"ignore-case":!1,order:f.asc}),p=a.getSourceCode();s.reduce((e,o)=>(o===null||o.type===u.AST_NODE_TYPES.SpreadElement?e.push([]):e.at(-1).push(o),e),[[]]).forEach(e=>{let o=e.map(t=>{let d;if(t.type===u.AST_NODE_TYPES.ArrayExpression){let[g]=t.elements;g?g.type===u.AST_NODE_TYPES.Literal?d=g.raw:d=p.text.slice(...g.range):d=`${g}`}else d=p.text.slice(...t.range);return{size:w(t.range),node:t,name:d}});I(o,(t,d)=>{N(t,d,n)&&a.report({messageId:"unexpectedMapElementsOrder",data:{left:b(t.name),right:b(d.name)},node:d.node,fix:g=>j(g,o,O(o,n),p)})})})}}}})}),z="sort-union-types",ue=P({name:z,meta:{type:"suggestion",docs:{description:"enforce sorted union types",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},order:{enum:[f.asc,f.desc],default:f.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedUnionTypesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>({TSUnionType:i=>{let s=a.getSourceCode(),n=D(a.options.at(0),{type:l.alphabetical,"ignore-case":!1,order:f.asc}),p=i.types.map(r=>({name:s.text.slice(...r.range),size:w(r.range),node:r}));I(p,(r,e)=>{N(r,e,n)&&a.report({messageId:"unexpectedUnionTypesOrder",data:{left:b(r.name),right:b(e.name)},node:e.node,fix:o=>j(o,p,O(p,n),s)})})}})}),q="sort-interfaces",ge=P({name:q,meta:{type:"suggestion",docs:{description:"enforce sorted interface properties",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},order:{enum:[f.asc,f.desc],default:f.asc},"ignore-case":{type:"boolean",default:!1},"ignore-pattern":{type:"array",default:[]}},additionalProperties:!1}],messages:{unexpectedInterfacePropertiesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>({TSInterfaceDeclaration:i=>{if(i.body.body.length>1){let s=D(a.options.at(0),{type:l.alphabetical,"ignore-case":!1,order:f.asc,"ignore-pattern":[]});if(!s["ignore-pattern"].some(n=>v.minimatch(i.id.name,n))){let n=a.getSourceCode(),p=i.body.body.map(r=>{var o,t,d;let e;if(r.type===u.AST_NODE_TYPES.TSPropertySignature)if(r.key.type===u.AST_NODE_TYPES.Identifier)({name:e}=r.key);else if(r.key.type===u.AST_NODE_TYPES.Literal)e=`${r.key.value}`;else{let g=((o=r.typeAnnotation)==null?void 0:o.range.at(0))??r.range.at(1)-(r.optional?1:0);e=n.text.slice(r.range.at(0),g)}else if(r.type===u.AST_NODE_TYPES.TSIndexSignature){let g=((t=r.typeAnnotation)==null?void 0:t.range.at(0))??r.range.at(1);e=n.text.slice(r.range.at(0),g)}else{let g=((d=r.returnType)==null?void 0:d.range.at(0))??r.range.at(1);e=n.text.slice(r.range.at(0),g)}return{size:w(r.range),node:r,name:e}});I(p,(r,e)=>{N(r,e,s)&&a.report({messageId:"unexpectedInterfacePropertiesOrder",data:{left:b(r.name),right:b(e.name)},node:e.node,fix:o=>j(o,p,O(p,s),n)})})}}}})});let F=(a,i)=>a.reduce((s,n)=>{let p=i(n);return p in s||(s[p]=[]),s[p].push(n),s},{});const J="sort-jsx-props",me=P({name:J,meta:{type:"suggestion",docs:{description:"enforce sorted JSX props",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},order:{enum:[f.asc,f.desc],default:f.asc},"always-on-top":{type:"array",default:[]},"ignore-case":{type:"boolean",default:!1},shorthand:{enum:["first","last","ignore"]},callback:{enum:["first","last","ignore"]},multiline:{enum:["first","last","ignore"]}},additionalProperties:!1}],messages:{unexpectedJSXPropsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>({JSXElement:i=>{if(i.openingElement.attributes.length>1){let s=D(a.options.at(0),{type:l.alphabetical,shorthand:"ignore",multiline:"ignore",callback:"ignore","always-on-top":[],"ignore-case":!1,order:f.asc}),n=a.getSourceCode();i.openingElement.attributes.reduce((r,e)=>{if(e.type===u.AST_NODE_TYPES.JSXSpreadAttribute)return r.push([]),r;let o="ignore";e.name.type===u.AST_NODE_TYPES.JSXIdentifier&&s["always-on-top"].includes(e.name.name)?o="exception":(s.shorthand!=="ignore"&&e.value===null&&(o=s.shorthand),s.callback!=="ignore"&&e.name.type===u.AST_NODE_TYPES.JSXIdentifier&&e.name.name.indexOf("on")===0&&e.value!==null?o=s.callback:s.multiline!=="ignore"&&e.loc.start.line!==e.loc.end.line&&(o=s.multiline));let t={name:e.name.type===u.AST_NODE_TYPES.JSXNamespacedName?`${e.name.namespace.name}:${e.name.name.name}`:e.name.name,size:w(e.range),node:e,position:o};return r.at(-1).push(t),r},[[]]).forEach(r=>{I(r,(e,o)=>{let t;if(e.position==="exception"&&o.position==="exception")t=s["always-on-top"].indexOf(e.name)>s["always-on-top"].indexOf(o.name);else if(e.position===o.position)t=N(e,o,s);else{let d={exception:2,first:1,ignore:0,last:-1};t=d[e.position]<d[o.position]}t&&a.report({messageId:"unexpectedJSXPropsOrder",data:{left:e.name,right:o.name},node:o.node,fix:d=>{let g=F(r,({position:y})=>y),E=y=>y in g?g[y]:[],_=[E("exception").sort((y,c)=>s["always-on-top"].indexOf(y.name)-s["always-on-top"].indexOf(c.name)),O(E("first"),s),O(E("ignore"),s),O(E("last"),s)].flat();return j(d,r,_,n)}})})})}}})});class ee{static get(){return this._instance?this._instance:(this._instance=se.parse(oe.readFileSync(ne.resolve(process.cwd(),"tsconfig.json"),"utf8")),this._instance)}}H(ee,"_instance");const G="sort-imports",ye=P({name:G,meta:{type:"suggestion",docs:{description:"enforce sorted imports",recommended:!1},fixable:"code",schema:[{type:"object",properties:{"custom-groups":{type:"object",properties:{type:{type:"object"},value:{type:"object"}},additionalProperties:!1},type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},order:{enum:[f.asc,f.desc],default:f.asc},"ignore-case":{type:"boolean",default:!1},groups:{type:"array",default:[]},"internal-pattern":{type:"array",default:["~/**"]},"newlines-between":{enum:["ignore","always","never"],default:"always"},"read-tsconfig":{type:"boolean",default:!1}},additionalProperties:!1}],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:l.alphabetical,order:f.asc}],create:a=>{var o;let i=D(a.options.at(0),{"newlines-between":"always","custom-groups":{type:{},value:{}},"internal-pattern":["~/**"],type:l.alphabetical,"read-tsconfig":!1,order:f.asc,"ignore-case":!1,groups:[]}),s=[];if(i["read-tsconfig"]){let t=ee.get();(o=t.compilerOptions)!=null&&o.paths&&Object.keys(t.compilerOptions.paths).forEach(d=>{s.push(d)})}let n=a.getSourceCode(),p=[],r=t=>{let d,g=S=>[".less",".scss",".sass",".styl",".pcss",".css",".sss"].some(T=>S.endsWith(T)),E=S=>["./index.d.js","./index.d.ts","./index.js","./index.ts","./index","./","."].includes(S),_=S=>S.indexOf("..")===0,y=S=>S.indexOf("./")===0,c=S=>{!d&&i.groups.flat().includes(S)&&(d=S)},m=S=>i["internal-pattern"].length&&i["internal-pattern"].some(T=>v.minimatch(S.source.value,T))||s.some(T=>v.minimatch(S.source.value,T)),h=(S,T)=>{Object.entries(i["custom-groups"][S]??{}).forEach(([x,A])=>{Array.isArray(A)&&A.some(k=>v.minimatch(T,k))&&c(x),typeof A=="string"&&v.minimatch(T,A)&&c(x)})};return t.importKind==="type"&&(t.type===u.AST_NODE_TYPES.ImportDeclaration&&(h("type",t.source.value),Q(t.source.value)&&c("builtin-type"),m(t)&&c("internal-type"),E(t.source.value)&&c("index-type"),_(t.source.value)&&c("parent-type"),y(t.source.value)&&c("sibling-type")),c("type")),!d&&t.type===u.AST_NODE_TYPES.ImportDeclaration&&(h("value",t.source.value),Q(t.source.value)&&c("builtin"),m(t)&&c("internal"),g(t.source.value)&&c("style"),t.specifiers.length===0&&c("side-effect"),E(t.source.value)&&c("index"),_(t.source.value)&&c("parent"),y(t.source.value)&&c("sibling"),c("external")),d??"unknown"},e=t=>{let d;t.type===u.AST_NODE_TYPES.ImportDeclaration?d=t.source.value:t.moduleReference.type===u.AST_NODE_TYPES.TSExternalModuleReference&&t.moduleReference.expression.type===u.AST_NODE_TYPES.Literal?d=`${t.moduleReference.expression.value}`:d=n.text.slice(...t.moduleReference.range),p.push({size:w(t.range),group:r(t),name:d,node:t})};return{TSImportEqualsDeclaration:e,ImportDeclaration:e,"Program:exit":()=>{let t=y=>{for(let c=0,m=i.groups.length;c<m;c++){let h=i.groups[c];if(y.group===h||Array.isArray(h)&&h.includes(y.group))return c}return i.groups.length},d=(y,c)=>!!n.getTokensBetween(y.node,Z(c.node,n)||c.node,{includeComments:!0}).length,g=(y,c)=>n.lines.slice(y.node.loc.end.line,c.node.loc.start.line-1).filter(h=>!h.trim().length).length,E=(y,c)=>{let m=[],h=c.reduce((T,x)=>{let A=t(x);return A in T?T[A]=O([...T[A],x],i):T[A]=[x],T},{}),S=Object.keys(h).sort().reduce((T,x)=>[...T,...h[x]],[]);return S.forEach((T,x)=>{if(m.push(y.replaceTextRange(Y(c.at(x).node,n),n.text.slice(...Y(T.node,n)))),i["newlines-between"]!=="ignore"){let A=S.at(x+1);if(A){let k=g(c.at(x),c.at(x+1));(i["newlines-between"]==="always"&&t(T)===t(A)&&k!==0||i["newlines-between"]==="never"&&k>0)&&m.push(y.removeRange([Y(c.at(x).node,n).at(1),Y(c.at(x+1).node,n).at(0)-1])),i["newlines-between"]==="always"&&t(T)!==t(A)&&k>1&&m.push(y.replaceTextRange([Y(c.at(x).node,n).at(1),Y(c.at(x+1).node,n).at(0)-1],`
2
+ `)),i["newlines-between"]==="always"&&t(T)!==t(A)&&k===0&&m.push(y.insertTextAfterRange(Y(c.at(x).node,n),`
3
+ `))}}}),m};p.reduce((y,c)=>{var h;let m=(h=y.at(-1))==null?void 0:h.at(-1);return m&&d(m,c)?y.push([c]):y.at(-1).push(c),y},[[]]).forEach(y=>{I(y,(c,m)=>{let h=t(c),S=t(m),T=g(c,m);!d(c,m)&&(h>S||h===S&&N(c,m,i))&&a.report({messageId:"unexpectedImportsOrder",data:{left:c.name,right:m.name},node:m.node,fix:x=>E(x,y)}),i["newlines-between"]==="never"&&T>0&&a.report({messageId:"extraSpacingBetweenImports",data:{left:c.name,right:m.name},node:m.node,fix:x=>E(x,y)}),i["newlines-between"]==="always"&&(h<S&&T===0?a.report({messageId:"missedSpacingBetweenImports",data:{left:c.name,right:m.name},node:m.node,fix:x=>E(x,y)}):(T>1||h===S&&T>0)&&a.report({messageId:"extraSpacingBetweenImports",data:{left:c.name,right:m.name},node:m.node,fix:x=>E(x,y)}))})})}}}}),W="sort-classes",Ee=P({name:W,meta:{type:"suggestion",docs:{description:"enforce sorted classes",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},"ignore-case":{type:"boolean",default:!1},order:{enum:[f.asc,f.desc],default:f.asc},groups:{type:"array",default:["property","constructor","method","unknown"]}},additionalProperties:!1}],messages:{unexpectedClassesOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>({ClassBody:i=>{if(i.body.length>1){let s=D(a.options.at(0),{type:l.alphabetical,order:f.asc,"ignore-case":!1,groups:["property","constructor","method","unknown"]}),n=a.getSourceCode(),p=i.body.map(e=>{var g;let o,t;e.type===u.AST_NODE_TYPES.StaticBlock?t="static":e.type===u.AST_NODE_TYPES.TSIndexSignature?t=n.text.slice(e.range.at(0),((g=e.typeAnnotation)==null?void 0:g.range.at(0))??e.range.at(1)):e.key.type===u.AST_NODE_TYPES.Identifier?{name:t}=e.key:t=n.text.slice(...e.key.range);let d=E=>{!o&&s.groups.flat().includes(E)&&(o=E)};return e.type===u.AST_NODE_TYPES.MethodDefinition?(e.kind==="constructor"&&d("constructor"),e.static&&d("static-method"),e.accessibility==="private"&&d("private-method"),d("method")):e.type===u.AST_NODE_TYPES.PropertyDefinition&&(e.static&&d("static-property"),e.accessibility==="private"&&d("private-property"),d("property")),{size:w(e.range),group:o??"unknown",node:e,name:t}}),r=e=>{for(let o=0,t=s.groups.length;o<t;o++){let d=s.groups[o];if(e.group===d||Array.isArray(d)&&d.includes(e.group))return o}return s.groups.length};I(p,(e,o)=>{let t=r(e),d=r(o);(t>d||t===d&&N(e,o,s))&&a.report({messageId:"unexpectedClassesOrder",data:{left:b(e.name),right:b(o.name)},node:o.node,fix:g=>{let E=[],_=p.reduce((c,m)=>{let h=r(m);return h in c?c[h]=O([...c[h],m],s):c[h]=[m],c},{});return Object.keys(_).sort().reduce((c,m)=>[...c,..._[m]],[]).forEach((c,m)=>{E.push(g.replaceTextRange(Y(p.at(m).node,n),n.text.slice(...Y(c.node,n))))}),E}})})}}})}),X="sort-objects",he=P({name:X,meta:{type:"suggestion",docs:{description:"enforce sorted objects",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},order:{enum:[f.asc,f.desc],default:f.asc},"ignore-case":{type:"boolean",default:!1},"always-on-top":{type:"array",default:[]}},additionalProperties:!1}],messages:{unexpectedObjectsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>{let i=s=>{if(s.properties.length>1){let n=D(a.options.at(0),{type:l.alphabetical,"ignore-case":!1,order:f.asc,"always-on-top":[]}),p=a.getSourceCode();(e=>e.reduce((o,t)=>{if(t.type===u.AST_NODE_TYPES.SpreadElement||t.type===u.AST_NODE_TYPES.RestElement)return o.push([]),o;let d,g="ignore",E=[];if(t.key.type===u.AST_NODE_TYPES.Identifier?{name:d}=t.key:t.key.type===u.AST_NODE_TYPES.Literal?d=`${t.key.value}`:d=p.text.slice(...t.key.range),t.key.type===u.AST_NODE_TYPES.Identifier&&n["always-on-top"].includes(t.key.name)&&(g="exception"),t.value.type===u.AST_NODE_TYPES.AssignmentPattern){let y=(c,m)=>{c.right.type===u.AST_NODE_TYPES.Identifier&&E.push(c.right.name),!m&&c.left.type===u.AST_NODE_TYPES.Identifier&&E.push(c.left.name);let h=S=>{S.right.type===u.AST_NODE_TYPES.Identifier&&E.push(S.right.name),S.left.type===u.AST_NODE_TYPES.BinaryExpression&&y(S.left,!1)};c.right.type===u.AST_NODE_TYPES.BinaryExpression&&h(c.right)};y(t.value,!0)}let _={size:w(t.range),dependencies:E,node:t,position:g,name:d};return o.at(-1).push(_),o},[[]]))(s.properties).forEach(e=>{I(e,(o,t)=>{let d;if(o.position==="exception"&&t.position==="exception")d=n["always-on-top"].indexOf(o.name)>n["always-on-top"].indexOf(t.name);else if(o.position===t.position)d=N(o,t,n);else{let g={exception:1,ignore:0};d=g[o.position]<g[t.position]}if(d){let g=E=>{let _=F(e,({position:m})=>m),y=m=>m in _?_[m]:[],c=[y("exception").sort((m,h)=>n["always-on-top"].indexOf(m.name)-n["always-on-top"].indexOf(h.name)),O(y("ignore"),n)].flat();return j(E,e,c,p)};a.report({messageId:"unexpectedObjectsOrder",data:{left:b(o.name),right:b(t.name)},node:t.node,fix:g})}})})}};return{ObjectExpression:i,ObjectPattern:i}}}),K="sort-exports",Se=P({name:K,meta:{type:"suggestion",docs:{description:"enforce sorted exports",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},order:{enum:[f.asc,f.desc],default:f.asc},"ignore-case":{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedExportsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>{let i=D(a.options.at(0),{type:l.alphabetical,order:f.asc,"ignore-case":!1}),s=[[]],n=p=>{p.type===u.AST_NODE_TYPES.ExportAllDeclaration&&p.exported===null?s.push([]):s.at(-1).push({size:w(p.range),name:p.source.value,node:p})};return{ExportAllDeclaration:n,ExportNamedDeclaration:p=>{p.source!==null&&n(p)},"Program:exit":()=>{let p=a.getSourceCode();s.forEach(r=>{I(r,(e,o)=>{N(e,o,i)&&a.report({messageId:"unexpectedExportsOrder",data:{left:e.name,right:o.name},node:o.node,fix:t=>j(t,r,O(r,i),p)})})})}}}}),V="sort-enums",Te=P({name:V,meta:{type:"suggestion",docs:{description:"enforce sorted TypeScript enums",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[l.alphabetical,l.natural,l["line-length"]],default:l.natural},"ignore-case":{type:"boolean",default:!1},order:{enum:[f.asc,f.desc],default:f.asc}},additionalProperties:!1}],messages:{unexpectedEnumsOrder:'Expected "{{right}}" to come before "{{left}}"'}},defaultOptions:[{type:l.alphabetical,order:f.asc}],create:a=>({TSEnumDeclaration:i=>{if(i.members.length>1&&i.members.some(({initializer:s})=>s)){let s=D(a.options.at(0),{type:l.alphabetical,order:f.asc,"ignore-case":!1}),n=a.getSourceCode(),p=i.members.map(r=>({name:r.id.type===u.AST_NODE_TYPES.Literal?`${r.id.value}`:`${n.text.slice(...r.id.range)}`,size:w(r.range),node:r}));I(p,(r,e)=>{N(r,e,s)&&a.report({messageId:"unexpectedEnumsOrder",data:{left:b(r.name),right:b(e.name)},node:e.node,fix:o=>j(o,p,O(p,s),n)})})}}})}),xe="eslint-plugin-perfectionist";let C=a=>{let i={[G]:["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":["~/**"],"read-tsconfig":!1}],[W]:["error",{groups:["static-property","private-property","property","constructor","static-method","private-method","method","unknown"]}],[J]:["error",{"always-on-top":[],shorthand:"ignore",multiline:"first",callback:"ignore"}],[L]:["error",{"spread-last":!0}],[X]:["error",{"always-on-top":[]}],[M]:["error"],[$]:["error"],[B]:["error"],[U]:["error"],[z]:["error"],[q]:["error"],[K]:["error"],[V]:["error"]};return{rules:Object.fromEntries(Object.entries(i).map(([s,[n,p={}]])=>[`perfectionist/${s}`,[n,Object.assign(p,a)]])),plugins:["perfectionist"]}};const _e={rules:{[L]:le,[W]:Ee,[V]:Te,[K]:Se,[G]:ye,[q]:ge,[J]:me,[U]:fe,[$]:pe,[M]:ce,[B]:de,[X]:he,[z]:ue},configs:{"recommended-alphabetical":C({type:l.alphabetical,order:f.asc,"ignore-case":!1}),"recommended-natural":C({type:l.natural,order:f.asc,"ignore-case":!1}),"recommended-line-length":C({type:l["line-length"],order:f.desc})},name:xe};module.exports=_e;