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