esbuild-plugin-tailwindcss
Version:
Esbuild plugin for TailwindCSS
2 lines (1 loc) • 1.13 kB
JavaScript
import y from"node:fs/promises";import L from"node:path";import $ from"@tailwindcss/postcss";import v from"autoprefixer";import A from"postcss";import b from"postcss-modules";import x from"node:crypto";var c=t=>x.createHash("sha256").update(t).digest("hex");var u=t=>n=>{let{postcssPlugins:i={},cssModules:{enabled:d=!1,filter:m=/\.module\.css$/,exclude:g=[]}={}}=t,o="tailwindcss-module",e=new Map,f=async s=>{let O=L.basename(s.path),l=d&&m.test(O),p=[...i?.prepend||[],$(),v(),...i?.append||[]];l&&p.push(b({globalModulePaths:g,getJSON:(T,S)=>e.set(s.path,S)}));let w=await y.readFile(s.path,"utf8"),{css:r}=await A(p).process(w,{from:s.path});if(!l)return{contents:r,loader:"css"};let a=`${o}://${c(s.path)}`,R=JSON.stringify(e.get(s.path)),M=`import "${a}"; export default ${R};`;return e.set(a,r),{contents:M,loader:"js"}},P=s=>({contents:e.get(s.path)?.toString(),loader:"css"}),h=s=>({path:s.path,namespace:o});n.onLoad({filter:/\.css$/},f),n.onLoad({filter:/.*/,namespace:o},P),n.onResolve({filter:new RegExp(`^${o}://`)},h)};var C=(t={})=>({name:"tailwindcss",setup:u(t)});var D=C;export{D as default,C as tailwindPlugin};