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