prettier-plugin-tailwind-styled-components
Version:
A Prettier plugin for sorting and formatting Tailwind CSS classes when using Tailwind Styled-Components.
10 lines (9 loc) • 4.12 kB
JavaScript
import {createRequire as __global__createRequire__} from 'module'
import {dirname as __global__dirname__} from 'path'
import {fileURLToPath} from 'url'
const require=__global__createRequire__(import.meta.url)
const __filename=fileURLToPath(import.meta.url)
const __dirname=__global__dirname__(__filename)
var P=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(t,s)=>(typeof require<"u"?require:t)[s]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});import*as L from"prettier/plugins/acorn";import*as f from"prettier/plugins/babel";import*as O from"prettier/plugins/flow";import*as k from"prettier/plugins/meriyah";import*as S from"prettier/plugins/typescript";var T=(r,t)=>{let s=(e,a,o,l,i={})=>{if(typeof t=="function"){if(t(e,a,o,l,i)===!1)return}else if(e.type in t&&t[e.type](e,a,o,l,i)===!1)return;let n=Object.keys(e);for(let y=0;y<n.length;y++){let p=e[n[y]];if(Array.isArray(p))for(let u=0;u<p.length;u++)p[u]!==null&&s(p[u],e,n[y],u,{...i});else typeof(p==null?void 0:p.type)=="string"&&s(p,e,n[y],y,{...i})}};s(r)},q=r=>(r==null?void 0:r.type)==="TemplateLiteral"||(r==null?void 0:r.type)==="Template"&&typeof r.value=="string",m=r=>r.replace(/\r\n\t/g," ").replace(/\s+/g," ").trim(),B=(r,t)=>{var s,e;return(r.tag.type==="MemberExpression"&&((s=r.tag.object)==null?void 0:s.type)==="Identifier"&&r.tag.object.name===t||r.tag.type==="CallExpression"&&((e=r.tag.callee)==null?void 0:e.type)==="Identifier"&&r.tag.callee.name===t)&&q(r.quasi)},g=r=>r.endOfLine==="lf"?`
`:r.endOfLine==="cr"?"\r":r.endOfLine==="crlf"?`\r
`:"",w=r=>r.useTabs?" ":" ".repeat(r.tabWidth),h=(r,t)=>{let s=g(t),e=w(t);return r.startsWith(s)?r:`${s}${e}${r}`},d=(r,t,s)=>{let e=g(t);if(!r.endsWith(e)){if(s){let a=w(t);return`${r}${e}${a}`}return`${r}${e}`}return r},j=(r,t,s)=>{let e=g(t),a=w(t),o=r.split(" ");return s.splice(0,o.length).join(`${e}${a}`)},A=r=>/[\S]/g.exec(r),C=(r,t,s,e)=>{if(A(r)){let a=m(r);return a=j(a,t,s),a=h(a,t),a=d(a,t,e),a}if(e){let a=m(r);return a=d(a,t,e),a}return r},$=(r,t,s)=>{if(Array.isArray(r.quasis))for(let e=0;e<r.quasis.length;e++){let a=r.quasis[e];a.value&&(a.value.raw=C(a.value.raw,t,s.rawClassList,!a.tail),a.value.cooked=C(a.value.cooked,t,s.cookedClassList,!a.tail))}},x=r=>{if(Array.isArray(r.quasis)){let t=r.quasis.map(i=>{var n;return((n=i.value)==null?void 0:n.raw)||""}).join(""),s=r.quasis.map(i=>{var n;return((n=i.value)==null?void 0:n.cooked)||""}).join(""),a=m(t).split(" "),l=m(s).split(" ");return{rawClassList:a,cookedClassList:l}}return{rawClassList:[],cookedClassList:[]}},_=(r,t)=>e=>{if(!(!e.quasi||!e.tag)&&B(e,t)){let a=x(e.quasi);$(e.quasi,r,a)}},V=(r,t)=>{var o,l;if(!Array.isArray(r.body))return;let s=t.tailwindStyledComponentsImport||"tailwind-styled-components",a=(((o=r.body.find(i=>{var n;return i.type==="ImportDeclaration"&&((n=i.source)==null?void 0:n.value)===s}))==null?void 0:o.specifiers)||[]).find(i=>{var n;return i.type==="ImportDefaultSpecifier"||i.type==="ImportSpecifier"&&((n=i.imported)==null?void 0:n.name)==="default"});return(l=a==null?void 0:a.local)==null?void 0:l.name},I=async(r,t)=>{let s=V(r,t);s&&T(r,_(t,s))},b=(r,t)=>{var l;if(!t.plugins)return r;let s={...r},e="prettier-plugin-tailwindcss",a=null;try{a=P.resolve(e)}catch{return s}let o=t.plugins.find(i=>i.name===e||i.name===a);return o&&Object.assign(s,(l=o.parsers)==null?void 0:l.typescript),s},c=async r=>({...r,preprocess(t,s){let e=b(r,s);return e.preprocess?e.preprocess(t,s):t},async parse(t,s){let a=await b(r,s).parse(t,s);return await I(a,s),a}}),z={babel:c(f.parsers.babel),"babel-flow":c(f.parsers["babel-flow"]),flow:c(O.parsers.flow),typescript:c(S.parsers.typescript),"babel-ts":c(f.parsers["babel-ts"]),acorn:c(L.parsers.acorn),meriyah:c(k.parsers.meriyah),__js_expression:c(f.parsers.__js_expression)},v={},F={tailwindStyledComponentsImport:{type:"string",default:"tailwind-styled-components",category:"Tailwind Styled Components",description:"Tailwind styled components import"}};export{c as createParser,F as options,z as parsers,v as printers};