eslint-plugin-perfectionist 0.8.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 +10 -5
- package/dist/configs/recommended-line-length.js +1 -1
- package/dist/configs/recommended-line-length.mjs +10 -5
- package/dist/configs/recommended-natural.js +1 -1
- package/dist/configs/recommended-natural.mjs +7 -2
- package/dist/index.js +3 -1
- package/dist/index.mjs +846 -405
- package/package.json +8 -4
- package/readme.md +121 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const e=require("../index.js");require("@typescript-eslint/types");require("@typescript-eslint/utils");require("natural-compare-lite");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,13 +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
|
+
import "minimatch";
|
|
7
|
+
import "json5";
|
|
8
|
+
import "path";
|
|
9
|
+
import "fs";
|
|
10
|
+
const s = {
|
|
6
11
|
plugins: {
|
|
7
|
-
perfectionist:
|
|
12
|
+
perfectionist: o
|
|
8
13
|
},
|
|
9
|
-
rules:
|
|
14
|
+
rules: o.configs["recommended-alphabetical"].rules
|
|
10
15
|
};
|
|
11
16
|
export {
|
|
12
|
-
|
|
17
|
+
s as default
|
|
13
18
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const e=require("../index.js");require("@typescript-eslint/types");require("@typescript-eslint/utils");require("natural-compare-lite");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,13 +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
|
+
import "minimatch";
|
|
7
|
+
import "json5";
|
|
8
|
+
import "path";
|
|
9
|
+
import "fs";
|
|
10
|
+
const l = {
|
|
6
11
|
plugins: {
|
|
7
|
-
perfectionist:
|
|
12
|
+
perfectionist: o
|
|
8
13
|
},
|
|
9
|
-
rules:
|
|
14
|
+
rules: o.configs["recommended-line-length"].rules
|
|
10
15
|
};
|
|
11
16
|
export {
|
|
12
|
-
|
|
17
|
+
l as default
|
|
13
18
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const e=require("../index.js");require("@typescript-eslint/types");require("@typescript-eslint/utils");require("natural-compare-lite");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;
|
|
@@ -2,12 +2,17 @@ import r 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
|
+
import "minimatch";
|
|
7
|
+
import "json5";
|
|
8
|
+
import "path";
|
|
9
|
+
import "fs";
|
|
10
|
+
const d = {
|
|
6
11
|
plugins: {
|
|
7
12
|
perfectionist: r
|
|
8
13
|
},
|
|
9
14
|
rules: r.configs["recommended-natural"].rules
|
|
10
15
|
};
|
|
11
16
|
export {
|
|
12
|
-
|
|
17
|
+
d as default
|
|
13
18
|
};
|
package/dist/index.js
CHANGED
|
@@ -1 +1,3 @@
|
|
|
1
|
-
"use strict";const f=require("@typescript-eslint/types"),L=require("@typescript-eslint/utils"),C=require("natural-compare-lite"),$="eslint-plugin-perfectionist",M="azat-io/eslint-plugin-perfectionist";let g=L.ESLintUtils.RuleCreator(s=>`https://github.com/${M}/blob/main/docs/rules/${s}.md`),y=s=>{let[l,d]=s;return d-l};var r=(s=>(s.alphabetical="alphabetical",s.natural="natural",s["line-length"]="line-length",s))(r||{}),n=(s=>(s.asc="asc",s.desc="desc",s))(n||{});let m=(s,l,d)=>{let c=d.order==="asc"?1:-1,o;return d.type===r.alphabetical?o=(e,t)=>e.name.localeCompare(t.name):d.type===r.natural?o=(e,t)=>C(e.name,t.name):o=(e,t)=>e.size-t.size,c*o(s,l)>0},E=(s,l,d,c)=>{let o=[...d].sort((t,a)=>Number(m(t,a,c))||-1);c.spreadLast&&o.forEach((t,a)=>{t.node.type===f.AST_NODE_TYPES.SpreadElement&&o.push(o.splice(a,1).at(0))});let e=t=>[t.range.at(0),t.range.at(1)];return d.map(({node:t},a)=>s.replaceTextRange(e(t),l.slice(...e(o[a].node))))},h=(s={},l)=>Object.assign(l,s);const T="sort-array-includes",R=g({name:T,meta:{type:"suggestion",docs:{description:"Enforce sorted arrays before include method",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[r.alphabetical,r.natural,r["line-length"]],default:r.natural},order:{enum:[n.asc,n.desc],default:n.asc},spreadLast:{type:"boolean",default:!1}},additionalProperties:!1}],messages:{unexpectedArrayIncludesOrder:'Expected "{{second}}" to come before "{{first}}"'}},defaultOptions:[{type:r.alphabetical,order:n.asc}],create:s=>({MemberExpression:l=>{if((l.object.type===f.AST_NODE_TYPES.ArrayExpression||l.object.type===f.AST_NODE_TYPES.NewExpression)&&l.property.type===f.AST_NODE_TYPES.Identifier&&l.property.name==="includes"){let d=h(s.options.at(0),{type:r.alphabetical,order:n.asc,spreadLast:!1}),c=l.object.type===f.AST_NODE_TYPES.ArrayExpression?l.object.elements:l.object.arguments;if(c.length>1){let o=s.getSourceCode().text,e=c.reduce((t,a)=>(a===null||t.at(0).push({name:a.type===f.AST_NODE_TYPES.Literal?a.raw:o.slice(...a.range),size:y(a.range),type:a.type,node:a}),t),[[],[]]).flat();for(let t=1;t<e.length;t++){let a=e.at(t-1),i=e.at(t),p;d.spreadLast&&a.node.type===f.AST_NODE_TYPES.Literal&&i.node.type===f.AST_NODE_TYPES.SpreadElement?p=!1:d.spreadLast&&a.node.type===f.AST_NODE_TYPES.SpreadElement&&i.node.type===f.AST_NODE_TYPES.Literal?p=!0:p=m(a,i,d),p&&s.report({messageId:"unexpectedArrayIncludesOrder",data:{first:a.name,second:i.name},node:i.node,fix:u=>{let b=s.getSourceCode(),{text:S}=b;return E(u,S,e,d)}})}}}}})}),_="sort-enums",U=g({name:_,meta:{type:"suggestion",docs:{description:"Enforce sorted TypeScript enums",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[r.alphabetical,r.natural,r["line-length"]],default:r.natural},order:{enum:[n.asc,n.desc],default:n.asc}},additionalProperties:!1}],messages:{unexpectedEnumsOrder:'Expected "{{second}}" to come before "{{first}}"'}},defaultOptions:[{type:r.alphabetical,order:n.asc}],create:s=>({TSEnumDeclaration:l=>{let d=h(s.options.at(0),{type:r.alphabetical,order:n.asc});if(l.members.length>1){let c=s.getSourceCode().text,o=l.members.map(e=>{let t;return e.id.type===f.AST_NODE_TYPES.Literal?t=`${e.id.value}`:t=`${c.slice(...e.id.range)}`,{size:y(e.range),node:e,name:t}});for(let e=1;e<o.length;e++){let t=o.at(e-1),a=o.at(e);m(t,a,d)&&s.report({messageId:"unexpectedEnumsOrder",data:{first:t.name,second:a.name},node:a.node,fix:i=>E(i,c,o,d)})}}}})}),x="sort-interfaces",z=g({name:x,meta:{type:"suggestion",docs:{description:"Enforce sorted interface properties",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[r.alphabetical,r.natural,r["line-length"]],default:r.natural},order:{enum:[n.asc,n.desc],default:n.asc}},additionalProperties:!1}],messages:{unexpectedInterfacePropertiesOrder:'Expected "{{second}}" to come before "{{first}}"'}},defaultOptions:[{type:r.alphabetical,order:n.asc}],create:s=>({TSInterfaceBody:l=>{let d=h(s.options.at(0),{type:r.alphabetical,order:n.asc});if(l.body.length>1){let c=s.getSourceCode().text,o=l.body.map(e=>{var a,i,p;let t;if(e.type===f.AST_NODE_TYPES.TSPropertySignature)if(e.key.type===f.AST_NODE_TYPES.Identifier)({name:t}=e.key);else if(e.key.type===f.AST_NODE_TYPES.Literal)t=`${e.key.value}`;else{let u;if((a=e.typeAnnotation)!=null&&a.range.at(0))u=e.typeAnnotation.range.at(0);else{let b=e.optional?1:0;u=e.range.at(1)-b}t=c.slice(e.range.at(0),u)}else e.type===f.AST_NODE_TYPES.TSIndexSignature?t=c.slice(e.range.at(0),((i=e.typeAnnotation)==null?void 0:i.range.at(0))??e.range.at(1)):t=c.slice(e.range.at(0),((p=e.returnType)==null?void 0:p.range.at(0))??e.range.at(1));return{size:y(e.range),node:e,name:t}});for(let e=1;e<o.length;e++){let t=o.at(e-1),a=o.at(e);if(m(t,a,d)){let i=l.body[e];s.report({messageId:"unexpectedInterfacePropertiesOrder",data:{first:t.name,second:a.name},node:i,fix:p=>E(p,c,o,d)})}}}}})}),N="sort-jsx-props",k=g({name:N,meta:{type:"suggestion",docs:{description:"Enforce sorted JSX props",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[r.alphabetical,r.natural,r["line-length"]],default:r.natural},order:{enum:[n.asc,n.desc],default:n.asc}},additionalProperties:!1}],messages:{unexpectedJSXPropsOrder:'Expected "{{second}}" to come before "{{first}}"'}},defaultOptions:[{type:r.alphabetical,order:n.asc}],create:s=>({JSXElement:l=>{let d=h(s.options.at(0),{type:r.alphabetical,order:n.asc});l.openingElement.attributes.reduce((o,e)=>(e.type==="JSXAttribute"?o.at(-1).push(e):o.push([]),o),[[]]).forEach(o=>{let e=o.map(t=>({name:t.name.type===f.AST_NODE_TYPES.JSXNamespacedName?`${t.name.namespace.name}:${t.name.name.name}`:t.name.name,size:y(t.range),node:t}));for(let t=1;t<e.length;t++){let a=e.at(t-1),i=e.at(t);m(a,i,d)&&s.report({messageId:"unexpectedJSXPropsOrder",data:{first:a.name,second:i.name},node:i.node,fix:p=>{let u=s.getSourceCode().text;return E(p,u,e,d)}})}})}})}),A="sort-map-elements",v=g({name:A,meta:{type:"suggestion",docs:{description:"Enforce sorted Map elements",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[r.alphabetical,r.natural,r["line-length"]],default:r.natural},order:{enum:[n.asc,n.desc],default:n.asc}},additionalProperties:!1}],messages:{unexpectedMapElementsOrder:'Expected "{{second}}" to come before "{{first}}"'}},defaultOptions:[{type:r.alphabetical,order:n.asc}],create:s=>({NewExpression:l=>{if(l.callee.type===f.AST_NODE_TYPES.Identifier&&l.callee.name==="Map"&&l.arguments[0].type===f.AST_NODE_TYPES.ArrayExpression){let d=h(s.options.at(0),{type:r.alphabetical,order:n.asc}),[{elements:c}]=l.arguments,o=s.getSourceCode().text;c.length>1&&c.reduce((t,a)=>(a===null||a.type===f.AST_NODE_TYPES.SpreadElement?t.push([]):t.at(-1).push(a),t),[[]]).forEach(t=>{let a=t.map(i=>{let p;if(i.type===f.AST_NODE_TYPES.ArrayExpression){let[u]=i.elements;u?u.type===f.AST_NODE_TYPES.Literal?p=u.raw:p=o.slice(...u.range):p=`${u}`}else p=o.slice(...i.range);return{size:y(i.range),node:i,name:p}});for(let i=1;i<a.length;i++){let p=a.at(i-1),u=a.at(i);m(p,u,d)&&s.report({messageId:"unexpectedMapElementsOrder",data:{first:p.name,second:u.name},node:u.node,fix:b=>{let S=s.getSourceCode(),{text:Y}=S;return E(b,Y,a,d)}})}})}}})}),P="sort-named-exports",J=g({name:P,meta:{type:"suggestion",docs:{description:"Enforce sorted named exports",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[r.alphabetical,r.natural,r["line-length"]],default:r.natural},order:{enum:[n.asc,n.desc],default:n.asc}},additionalProperties:!1}],messages:{unexpectedNamedExportsOrder:'Expected "{{second}}" to come before "{{first}}"'}},defaultOptions:[{type:r.alphabetical,order:n.asc}],create:s=>({ExportNamedDeclaration:l=>{let d=h(s.options.at(0),{type:r.alphabetical,order:n.asc});if(l.specifiers.length>1){let c=l.specifiers.map(o=>{let{range:e,local:{name:t}}=o;return{size:y(e),node:o,name:t}});for(let o=1;o<c.length;o++){let e=c.at(o-1),t=c.at(o);if(m(e,t,d)){let a=l.specifiers[o];s.report({messageId:"unexpectedNamedExportsOrder",data:{first:e.name,second:t.name},node:a,fix:i=>{let p=s.getSourceCode(),{text:u}=p;return E(i,u,c,d)}})}}}}})}),D="sort-named-imports",X=g({name:D,meta:{type:"suggestion",docs:{description:"Enforce sorted named imports",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[r.alphabetical,r.natural,r["line-length"]],default:r.natural},order:{enum:[n.asc,n.desc],default:n.asc}},additionalProperties:!1}],messages:{unexpectedNamedImportsOrder:'Expected "{{second}}" to come before "{{first}}"'}},defaultOptions:[{type:r.alphabetical,order:n.asc}],create:s=>({ImportDeclaration:l=>{let d=h(s.options.at(0),{type:r.alphabetical,order:n.asc});if(l.specifiers.length>1){let c=l.specifiers.map(o=>{let{range:e,local:{name:t}}=o;return{size:y(e),node:o,name:t}});for(let o=1;o<c.length;o++){let e=c.at(o-1),t=c.at(o);if(m(e,t,d)){let a=l.specifiers[o];s.report({messageId:"unexpectedNamedImportsOrder",data:{first:e.name,second:t.name},node:a,fix:i=>{let p=s.getSourceCode(),{text:u}=p;return E(i,u,c,d)}})}}}}})}),j="sort-object-keys",w=g({name:j,meta:{type:"suggestion",docs:{description:"Enforce sorted object keys",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[r.alphabetical,r.natural,r["line-length"]],default:r.natural},order:{enum:[n.asc,n.desc],default:n.asc}},additionalProperties:!1}],messages:{unexpectedObjectKeysOrder:'Expected "{{second}}" to come before "{{first}}"'}},defaultOptions:[{type:r.alphabetical,order:n.asc}],create:s=>({ObjectExpression:l=>{if(l.properties.length>1){let d=h(s.options.at(0),{type:r.alphabetical,order:n.asc}),c=s.getSourceCode().text;(e=>e.reduce((t,a)=>{if(a.type===f.AST_NODE_TYPES.SpreadElement)return t.push([]),t;let i;a.key.type===f.AST_NODE_TYPES.Identifier?{name:i}=a.key:a.key.type===f.AST_NODE_TYPES.Literal?i=`${a.key.value}`:i=c.slice(...a.key.range);let p={size:y(a.range),node:a,name:i};return t.at(-1).push(p),t},[[]]))(l.properties).forEach(e=>{if(e.length>1)for(let t=1;t<e.length;t++){let a=e.at(t-1),i=e.at(t);m(a,i,d)&&s.report({messageId:"unexpectedObjectKeysOrder",data:{first:a.name,second:i.name},node:i.node,fix:p=>E(p,c,e,d)})}})}}})}),I="sort-union-types",q=g({name:I,meta:{type:"suggestion",docs:{description:"Enforce sorted union types",recommended:!1},fixable:"code",schema:[{type:"object",properties:{type:{enum:[r.alphabetical,r.natural,r["line-length"]],default:r.natural},order:{enum:[n.asc,n.desc],default:n.asc}},additionalProperties:!1}],messages:{unexpectedUnionTypesOrder:'Expected "{{second}}" to come before "{{first}}"'}},defaultOptions:[{type:r.alphabetical,order:n.asc}],create:s=>({TSUnionType:l=>{let d=s.getSourceCode().text,c=h(s.options.at(0),{type:r.alphabetical,order:n.asc}),o=l.types.map(e=>{let{range:t}=e,a=d.slice(...t);return{size:y(t),node:e,name:a}});for(let e=1;e<o.length;e++){let t=o.at(e-1),a=o.at(e);if(m(t,a,c)){let i=l.types[e];s.report({messageId:"unexpectedUnionTypesOrder",data:{first:t.name,second:a.name},node:i,fix:p=>{let u=s.getSourceCode(),{text:b}=u;return E(p,b,o,c)}})}}}})});let O=s=>{let l={[T]:["error",{spreadLast:!0}],[_]:["error"],[x]:["error"],[N]:["error"],[A]:["error"],[P]:["error"],[D]:["error"],[j]:["error"],[I]:["error"]};return{plugins:["perfectionist"],rules:Object.fromEntries(Object.entries(l).map(([d,[c,o={}]])=>[`perfectionist/${d}`,[c,Object.assign(o,s)]]))}};const K={name:$,rules:{[T]:R,[_]:U,[x]:z,[N]:k,[A]:v,[P]:J,[D]:X,[j]:w,[I]:q},configs:{"recommended-alphabetical":O({type:r.alphabetical,order:n.asc}),"recommended-natural":O({type:r.natural,order:n.asc}),"recommended-line-length":O({type:r["line-length"],order:n.desc})}};module.exports=K;
|
|
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;
|