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