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