@plasmohq/prettier-plugin-sort-imports
Version:
A prettier plugins to sort imports in provided RegEx order
4 lines (2 loc) • 8.07 kB
JavaScript
var ce=Object.create;var P=Object.defineProperty;var fe=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var de=Object.getPrototypeOf,ge=Object.prototype.hasOwnProperty;var Ie=(e,r)=>{for(var t in r)P(e,t,{get:r[t],enumerable:!0})},F=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of ue(r))!ge.call(e,i)&&i!==t&&P(e,i,{get:()=>r[i],enumerable:!(o=fe(r,i))||o.enumerable});return e};var g=(e,r,t)=>(t=e!=null?ce(de(e)):{},F(r||!e||!e.__esModule?P(t,"default",{value:e,enumerable:!0}):t,e)),Se=e=>F(P({},"__esModule",{value:!0}),e);var _e={};Ie(_e,{default:()=>Te});module.exports=Se(_e);var se=require("prettier/plugins/babel"),pe=require("prettier/plugins/flow"),ae=require("prettier/plugins/typescript");var oe=require("@babel/parser"),ie=g(require("@babel/traverse")),ne=require("@babel/types");var W=g(require("@babel/generator")),w=require("@babel/types");var v=require("@babel/types"),M=require("module");var G=`
`,D="unsortable",L="other",h="value",O="type",T="side-effect",_="prettier-ignore",A=[h,O],I="<THIRD_PARTY_MODULES>",k=`^(?:node:)?(?:${M.builtinModules.join("|")})$`,he="PRETTIER_PLUGIN_SORT_IMPORTS_NEW_LINE",S=(0,v.expressionStatement)((0,v.stringLiteral)(he));var R=e=>e.reduce((r,t)=>(Array.isArray(t.leadingComments)&&t.leadingComments.length>0&&(r=[...r,...t.leadingComments]),r),[]);function Oe(e,r){return e[0]<r[0]?-1:e[0]>r[0]?1:0}function ye(e){return e[0]!==null&&e[1]!==null&&Number.isSafeInteger(e[0])&&Number.isSafeInteger(e[1])}function Ne(e,r){return e[1]>r[0]&&r[1]>e[0]}function Pe(e,r){return[Math.min(e[0],r[0]),Math.max(e[1],r[1])]}function ve(e){let r=[];for(let t of e){let o=r[r.length-1];o!==void 0&&Ne(o,t)?r[r.length-1]=Pe(o,t):r.push(t)}return r}function De(e,r){if(e.length===0)return e;let t=[],o=(s,a)=>a>s,i=e[0];o(0,i[0])&&t.push([0,i[0]]);for(let s=0;s<e.length-1;s+=1){let a=e[s],p=e[s+1],m=a[1],c=p[0];o(m,c)&&t.push([m,c])}let n=e[e.length-1];return o(n[1],r)&&t.push([n[1],r]),t}var B=(e,r)=>{let t=r.map(n=>[n.start,n.end]).filter(ye).sort(Oe),o=ve(t);return De(o,e.length).map(n=>e.substring(n[0],n[1])).join("")};var U=({nodesToOutput:e,allOriginalImportNodes:r=e,originalCode:t,directives:o,interpreter:i})=>{let n=R(e),s=R(o),a=[...e,...r,...n,...s,...i?[i]:[],...o],p=B(t,a),m=(0,w.file)({type:"Program",body:e,directives:o,sourceType:"module",interpreter:i,sourceFile:"",leadingComments:[],innerComments:[],trailingComments:[],start:0,end:0,loc:{start:{line:0,column:0},end:{line:0,column:0}}}),{code:c}=(0,W.default)(m);return c.replace(/"PRETTIER_PLUGIN_SORT_IMPORTS_NEW_LINE";/gi,G)+p.trim()};var j=e=>e.map(r=>{let t=r.startsWith("["),o;if(t)try{o=JSON.parse(r)}catch{throw Error("Invalid JSON in importOrderParserPlugins: "+r)}else o=r;return o});var y=require("@babel/types"),H=g(require("lodash.clone")),V=g(require("lodash.isequal")),Y=(e,r)=>{let t=r.map(H.default),o=e[0].leadingComments;return t.forEach(y.removeComments),t.forEach((i,n)=>{(0,V.default)(e[0].loc,i.loc)||(0,y.addComments)(i,"leading",r[n].leadingComments||[])}),o&&(0,y.addComments)(t[0],"leading",o),t};var b=e=>(e??[]).some(r=>r.value.trim()==="prettier-sort-ignore");var $=e=>{let r=e.specifiers.length===0;return b(e.leadingComments)||r?D:L};var X=g(require("lodash.clone"));var u=g(require("javascript-natural-sort"));var q=(e,r)=>{let t=r.map(o=>({group:o,regExp:new RegExp(o)}));for(let{group:o,regExp:i}of t)if(e.source.value.match(i)!==null)return o;return I};var z=e=>(e.specifiers.sort((r,t)=>r.type!==t.type?r.type==="ImportDefaultSpecifier"?-1:1:(0,u.default)(r.local.name,t.local.name)),e);var Q=(e,r)=>e.sort((t,o)=>{if(r.importOrderGroupNamespaceSpecifiers){let i=be(t,o);if(i!==0)return i}return(0,u.default)(t.source.value,o.source.value)});function be(e,r){let t=e.specifiers.find(i=>i.type==="ImportNamespaceSpecifier")?1:0;return(r.specifiers.find(i=>i.type==="ImportNamespaceSpecifier")?1:0)-t}var Z=(e,r)=>{u.default.insensitive=r.importOrderCaseInsensitive;let{importOrder:t}=r,{importOrderSeparation:o,importOrderSortSpecifiers:i,importOrderGroupNamespaceSpecifiers:n,importOrderBuiltinModulesToTop:s}=r,a=e.map(X.default),p=[];t.includes(I)||(t=[I,...t]),s&&(t=[k,...t]);let m=t.reduce((l,f)=>x(f)?l:{...l,[f]:[]},{}),c=t.filter(l=>!x(l)&&l!==I);for(let l of a){let f=q(l,c);m[f].push(l)}for(let l of t){if(x(l)){let d=p[p.length-1];if(!d||Ce(d))continue;p.push(S);continue}let f=m[l];if(f.length===0)continue;let N=Q(f,{importOrderGroupNamespaceSpecifiers:n});i&&N.forEach(d=>z(d)),p.push(...N),o&&p.push(S)}return p};function x(e){return e.trim()===""}function Ce(e){return e.type==="ExpressionStatement"}var J=e=>b(e.leadingComments)?_:e.specifiers.length===0?T:e.importKind==="type"?O:h;function Re(e){return A.includes(e)}function xe(e){return e.reduce((r,t)=>{let o=J(t);return Re(o)&&r[o].push(t),r},{[h]:[],[O]:[]})}function Ee(e){return e.source.value}function K(e){return e.type==="ImportNamespaceSpecifier"}function ee(e){return e.type==="ImportDefaultSpecifier"}function Fe(e,r){return!(e.specifiers.some(K)||r.specifiers.some(K)||e.specifiers.some(ee)&&r.specifiers.some(ee))}function Me(e,r){return Fe(e,r)?(e.specifiers.push(...r.specifiers),e.leadingComments=[...e.leadingComments||[],...r.leadingComments||[]],e.innerComments=[...e.innerComments||[],...r.innerComments||[]],e.trailingComments=[...e.trailingComments||[],...r.trailingComments||[]],!0):!1}function Ge({context:e,nodesToDelete:r,insertableNode:t}){let o=Ee(t);e[o]?Me(e[o],t)&&r.push(t):e[o]=t}var re=e=>{let r=[];for(let t of Object.values(xe(e))){let o={};for(let i of t)Ge({context:o,nodesToDelete:r,insertableNode:i})}return e.filter(t=>!r.includes(t))};var te=(e,r)=>{let{importOrderSeparation:t,importOrderMergeDuplicateImports:o}=r,i=e.reduce((s,a)=>{let p=$(a),m=s[s.length-1];return m===void 0||m.type!==p?s.push({type:p,nodes:[a]}):m.nodes.push(a),s},[]),n=[];for(let s of i){if(s.type===D)n.push(...s.nodes);else{let a=o?re(s.nodes):s.nodes,p=Z(a,r);n.push(...p)}t&&n.push(S)}return n.length>0&&!t&&n.push(S),Y(e,n)};function C(e,r){let{importOrderParserPlugins:t,importOrder:o,importOrderBuiltinModulesToTop:i,importOrderCaseInsensitive:n,importOrderGroupNamespaceSpecifiers:s,importOrderMergeDuplicateImports:a,importOrderSeparation:p,importOrderSortSpecifiers:m}=r,c=[],l={sourceType:"module",plugins:j(t)},f=(0,oe.parse)(e,l),N=f.program.directives,d=f.program.interpreter;if((0,ie.default)(f,{ImportDeclaration(E){E.findParent(le=>(0,ne.isTSModuleDeclaration)(le))||c.push(E.node)}}),c.length===0)return e;let me=te(c,{importOrder:o,importOrderBuiltinModulesToTop:i,importOrderCaseInsensitive:n,importOrderGroupNamespaceSpecifiers:s,importOrderMergeDuplicateImports:a,importOrderSeparation:p,importOrderSortSpecifiers:m});return U({nodesToOutput:me,allOriginalImportNodes:c,originalCode:e,directives:N,interpreter:d})}var Le={importOrder:{type:"path",category:"Global",array:!0,default:[{value:[]}],description:"Provide an order to sort imports."},importOrderCaseInsensitive:{type:"boolean",category:"Global",default:!1,description:"Provide a case sensitivity boolean flag"},importOrderParserPlugins:{type:"path",category:"Global",array:!0,default:[{value:["typescript","jsx"]}],description:"Provide a list of plugins for special syntax"},importOrderSeparation:{type:"boolean",category:"Global",default:!1,description:"Should imports be separated by new line?"},importOrderGroupNamespaceSpecifiers:{type:"boolean",category:"Global",default:!1,description:"Should namespace specifiers be grouped at the top of their group?"},importOrderSortSpecifiers:{type:"boolean",category:"Global",default:!1,description:"Should specifiers be sorted?"},importOrderBuiltinModulesToTop:{type:"boolean",category:"Global",default:!1,description:"Should node-builtins be hoisted to the top?"},importOrderMergeDuplicateImports:{type:"boolean",category:"Global",default:!1,description:"Should duplicate imports be merged?"}},Te={parsers:{babel:{...se.parsers.babel,preprocess:C},flow:{...pe.parsers.flow,preprocess:C},typescript:{...ae.parsers.typescript,preprocess:C}},options:Le};