esbuild-plugin-class-modules
Version:
> An esbuild plugin to compile your css stylesheets using [Sass-lang](https://sass-lang.com/documentation/js-api/modules#compile), [PostCSS](https://postcss.org) and [CSS Modules.](https://github.com/css-modules/css-modules) > Supports global and local sc
6 lines (5 loc) • 4.03 kB
JavaScript
var _=Object.defineProperty,A=Object.defineProperties;var E=Object.getOwnPropertyDescriptors;var R=Object.getOwnPropertySymbols;var H=Object.prototype.hasOwnProperty,K=Object.prototype.propertyIsEnumerable;var L=(t,e,o)=>e in t?_(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,I=(t,e)=>{for(var o in e||(e={}))H.call(e,o)&&L(t,o,e[o]);if(R)for(var o of R(e))K.call(e,o)&&L(t,o,e[o]);return t},q=(t,e)=>A(t,E(e));var v=(t,e,o)=>new Promise((m,f)=>{var p=n=>{try{u(o.next(n))}catch(i){f(i)}},h=n=>{try{u(o.throw(n))}catch(i){f(i)}},u=n=>n.done?m(n.value):Promise.resolve(n.value).then(p,h);u((o=o.apply(t,e)).next())});import Q from"postcss";import V from"postcss-modules";import{stat as x,readFile as X}from"fs/promises";import S from"path";var Y=process.cwd(),O="inqnuam-sass-ns",Z=/\.global\.(s?css|sass)$/,ss=/(^|(\s*))import\s*((".*")|('.*'))/g,ts=/.*require\s?\((\s*(\s*?".*"\s*?)|(\s*'.*'\s*?))\s*?\)/g,W=new Map,es=t=>S.win32.normalize(t).replace(/\\/g,"/"),os=(t,e)=>v(void 0,null,function*(){let o=!1,m=!1,{mtimeMs:f}=yield x(t),p=W.get(t);if(!p||f>p.mtimeMs){p&&(o=f>p.mtimeMs);let h=yield X(t,{encoding:"utf-8"}),u=h.match(ss),n=h.match(ts),i=[];if(u&&(i=u.map(r=>r.trim()).filter(r=>r&&!r.startsWith("//")).map(r=>r.split("import").filter(Boolean).map(a=>a.trim().replace(/"|'/g,""))[0]).filter(Boolean)),n){let r=n.filter(a=>!a.includes("=")).map(a=>a.split("require").filter(Boolean).map(b=>b.replace(/\("|\('|'\)|"\)/g,""))[0]).filter(Boolean);i=i.concat(r)}W.set(t,{mtimeMs:f,globalImport:i}),m=i.includes(e)}else m=p.globalImport.includes(e);return{isOutdatedContent:o,isGlobalScoped:m}}),B={filter:/(\.modules?)?\.((s)?css|sass)$/i,options:{sass:{},postcss:[],cssModules:{globalModulePaths:[Z]}}},y=new Map,ns=(t,e)=>`
import "${t}";
export default ${e};
`,is=(t=B)=>{var p,h,u,n,i,r;let e=(p=t.filter)!=null?p:B.filter,o=(u=(h=t.options)==null?void 0:h.postcss)!=null?u:[],m=(i=(n=t.options)==null?void 0:n.cssModules)!=null?i:B.options.cssModules,f=(r=m.getJSON)!=null?r:(a,b)=>{};return{name:"inqnuam-sass-plugin",setup:a=>v(void 0,null,function*(){let b=yield import("sass"),{compile:z}=b.default,P=a.initialOptions.sourcemap;a.onResolve({filter:/^inqnuam-sass-ns/},s=>({path:s.path,namespace:O,pluginData:{resolveDir:s.resolveDir}})),a.onResolve({filter:e},s=>v(void 0,null,function*(){if(s.namespace==O)return;let c=!1,l=!1;if(s.importer){let{isOutdatedContent:D,isGlobalScoped:w}=yield os(s.importer,s.path);l=D,c=w}let g=[];s.path.startsWith("/")?g=[s.path]:s.path.startsWith(".")?g=[s.resolveDir,s.path]:g=[Y,"node_modules",s.path];let M=S.resolve(...g);return{path:M,namespace:O,watchFiles:[M],pluginData:{kind:s.kind,isGlobal:c,isOutdated:l,resolveDir:S.dirname(M)}}})),a.onLoad({filter:/^inqnuam-sass-ns/},s=>{var c;return{contents:y.get(s.path).value,resolveDir:(c=s.pluginData)==null?void 0:c.resolveDir,loader:"css"}}),a.onLoad({filter:/.*/,namespace:O},s=>v(void 0,null,function*(){var w,G,j;let c=es(`${O}:${s.path}`),l=y.get(c),g=(yield x(s.path)).mtimeMs,M=s.pluginData.kind=="entry-point"||s.pluginData.isGlobal;(s.pluginData.isOutdated||g>(l==null?void 0:l.mtimeMs))&&(y.delete(c),l=null);let D="";if(!l){let F=q(I({},(w=t.options)==null?void 0:w.sass),{charset:!1});P&&(F.sourceMap=!0,F.sourceMapIncludeSources=!0);let k=z(s.path,F);if(D=k.css,P){let d=JSON.stringify(k.sourceMap),U="/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+(Buffer.from(d,"utf8")||"").toString("base64")+" */";D+=`
`.repeat(2)+U}let N="",$="",J=q(I({},m),{getJSON(d,C){N=JSON.stringify(C),f(d,C)}});M&&(J.scopeBehaviour="global");try{let d={from:s.path};P&&(d.map={inline:!0});let{css:C}=yield Q([...o,V(J)]).process(D,d);$=C}catch(d){console.error(d)}let T=$;l={mtimeMs:Date.now(),value:T,pure:D,json:N,kind:s.pluginData.kind},y.set(c,l)}return M?{resolveDir:(G=s.pluginData)==null?void 0:G.resolveDir,contents:l.pure,loader:"css"}:{contents:ns(c,l.json),loader:"js",resolveDir:(j=s.pluginData)==null?void 0:j.resolveDir}}))})}},us=is;export{is as classModules,us as default};