esbuild-plugin-rdi
Version:
ESBuild plugin to remove duplicate require statements from minified build.
3 lines (2 loc) • 1.71 kB
JavaScript
import u from"fs";import g from"path";var h=()=>(Date.now()*Math.random()).toString(36).slice(0,8),d=`esbuild-plugin-rdi-${h()}`,m=/(var |,)/,f=/require\(['"][^'"]*['"]\)/g,R=/require\(['"]/g,E=(e,i)=>{let c=new RegExp(`(var |,)[a-zA-Z_$][\\w$]*=require\\(["']${i}["']\\)[;,]?`,"g"),o=new RegExp(`[=]require\\(['"]${i}['"]\\)[;,]?`),r=e.match(c);if(r!==null&&r.length>1){let s=r[0].replace(o,"").replace(m,"");for(let p=1;p<r.length;p++){let n=r[p];/^,.*,$/.test(n)?n=n.slice(1):/^,.*;$/.test(n)?n=n.replace(";",""):/^var .*,$/.test(n)&&(n=n.slice(4)),e=e.replace(n,"");let a=r[p].replace(o,"").replace(m,"");e=e.replace(new RegExp(`(?<!--)\\b${a}\\b`,"g"),s)}}return e},w=e=>{var r;let i=e.match(f),c=(r=i==null?void 0:i.map(s=>s.replace(R,"").slice(0,-2)))!=null?r:[],o=[...new Set(c)];o.sort((s,p)=>p.length-s.length);for(let s of o)e=E(e,s);return e},x=(e,i,c)=>{var s,p,n,a;let o=(s=e.outputFiles)==null?void 0:s.filter(t=>t.text.trim()===""&&t.path.includes("chunk")).map(t=>t.path.split(g.sep).pop()),r=new RegExp(`import *"[^"]*(${(o==null?void 0:o.join("|"))||"--no-empty-chunks--"})";[
\r ]*`,"g");(p=e.outputFiles)==null||p.filter(t=>!t.path.endsWith(".map")&&!t.path.endsWith(".d.js")).forEach(t=>{let l=t.text;l=l.replace(r,""),t.path.endsWith(".js")&&(l=w(l)),t.contents=new TextEncoder().encode(l)}),e.outputFiles=(n=e.outputFiles)==null?void 0:n.filter(t=>t.text.trim()!==""),(c===void 0||c)&&((a=e.outputFiles)==null||a.forEach(t=>{u.mkdirSync(g.dirname(t.path),{recursive:!0}),u.writeFileSync(t.path,t.contents)}))},k=(e,i={})=>{let c=e.initialOptions.write;e.initialOptions.write=!1,e.initialOptions.minify&&e.onEnd(o=>x(o,i,c))},q=(e={})=>({name:d,setup:i=>k(i,e)});export{q as rdiPlugin};