UNPKG

esbuild-raw-loader

Version:

An ESBuild and TSUP plugin that allows importing files as raw text. Useful for loading code files in documentation, interactive demos, or tools like react-live.

4 lines (3 loc) 1.8 kB
import l from"fs";import y from"path";var L=["ts","tsx","js","jsx","mjs","mts","module.css","module.scss","css","scss"],P=e=>({name:(e==null?void 0:e.name)||"esbuild-raw-plugin",setup(d){var b,h,g,w;let m=(h=(b=e==null?void 0:e.ext)==null?void 0:b.map(a=>a.replace(/^\./,"")))!=null?h:L;if(d.onResolve({filter:/\?(raw|text|buffer|binary|base64|dataurl|file)$/},a=>{let s=a.path.lastIndexOf("?"),r=s!==-1?a.path.slice(0,s):a.path,t=s!==-1?a.path.slice(s+1):void 0;return{path:r,namespace:"raw",pluginData:{fullPath:y.resolve(a.resolveDir,r),query:t}}}),d.onLoad({filter:/.*/,namespace:"raw"},a=>{var u;let{fullPath:s,query:r}=a.pluginData,t=s;if(l.existsSync(t)&&l.lstatSync(t).isDirectory()&&(t=y.join(t,"index")),!l.existsSync(t)){let f=m.find(x=>l.existsSync(`${t}.${x}`));f&&(t+=`.${f}`)}if(!l.existsSync(t))throw new Error(`File not found: ${s} Checked extensions: ${m.join(", ")}. You can customize extensions list using { ext: [...] }.`);let n=l.readFileSync(t),c=r==null?void 0:r.toLowerCase(),i=(u=e==null?void 0:e.loader)!=null?u:"text";switch(c){case"buffer":case"binary":i="binary";break;case"text":case"file":case"base64":case"dataurl":i=c;break;case"raw":break}return{contents:n,loader:i}}),e!=null&&e.customLoaders||e!=null&&e.textExtensions){let a=[...new Set([...Object.keys((g=e.customLoaders)!=null?g:{}),...(w=e==null?void 0:e.textExtensions)!=null?w:[]])].sort((r,t)=>t.length-r.length),s=new RegExp(`\\.(${a.map(r=>r.replace(/^\./,"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})$`);d.onLoad({filter:s},r=>{var u,f;let t=r.path,n=a.find(x=>t.endsWith(x)),c=(u=e.customLoaders)==null?void 0:u[n!=null?n:""];return!c&&((f=e==null?void 0:e.textExtensions)!=null&&f.includes(n!=null?n:""))&&(c="text"),c?{contents:l.readFileSync(t),loader:c}:void 0})}}});export{P as raw};