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