esbuild-plugin-glsl
Version:
An esbuild plugin that adds support for shader imports.
13 lines (12 loc) • 2.97 kB
JavaScript
/**
* esbuild-plugin-glsl v1.4.0 build Thu Mar 20 2025
* https://github.com/vanruesc/esbuild-plugin-glsl
* Copyright 2020 Raoul van Rüschen
* @license Zlib
*/
;var S=Object.create;var h=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var M=(t,n)=>{for(var r in n)h(t,r,{get:n[r],enumerable:!0})},y=(t,n,r,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of b(n))!P.call(t,s)&&s!==r&&h(t,s,{get:()=>n[s],enumerable:!(o=$(n,s))||o.enumerable});return t};var x=(t,n,r)=>(r=t!=null?S(F(t)):{},y(n||!t||!t.__esModule?h(r,"default",{value:t,enumerable:!0}):r,t)),A=t=>y(h({},"__esModule",{value:!0}),t);var I={};M(I,{default:()=>G,glsl:()=>G});module.exports=A(I);function j(t,n=null){let r=/(?:\/\*[\s\S]*?\*\/)|(?:\/\/.*\n)/g,o=/(?:\/[/*]!)|(?:@license)|(?:@preserve)/m;if(n===null)return t.replace(r,"");let s=0;for(let a of t.matchAll(r))if(o.test(a[0])){let l=`[[LEGAL_COMMENT_${s++}]]`;n.push({contents:a[0],placeholder:l}),t=t.replace(a[0],l)}else t=t.replace(a[0],"");return t}function E(t,n){let r=/\s*([{}=*,+/><&|[\]()\\!?:;-])\s*/g,o=/(\w<\w+>)\s*(\w)/g,s=t.replace(/\r/g,""),a=[];s=j(s,n?a:null);let l=!0,i=!1;s=s.split(/\n+/).reduce((g,e)=>(e=e.trim().replace(/\s{2,}|\t/," "),e.startsWith("#")?(i&&g.push(`
`),g.push(e,`
`),i=!1):e.length>0&&(e=e.replace(r,"$1"),!l&&/\w/.test(e[0])&&(e=" "+e),e=e.replace(o,"$1 $2"),g.push(e),l=!/\w/.test(e[e.length-1]),i=!0),g),[]).join("");for(let g of a)s=s.replace(g.placeholder,`
${g.contents.trim()}
`);return s.replace(/\n{2,}/g,`
`).trim()}var R=x(require("fs"),1),C=x(require("util"),1),w=x(require("path"),1),B=C.promisify(R.readFile);async function L(t,n,r){let o=await B(t,"utf8");if(!r)return{contents:o};let s=[],a=[],l=new Set,i=/#include +["']([.\\/\w-]+)["']/g,g=/\r|\n|\r\n/g,e=i.exec(o);for(;e!==null;){let u=e[0],d=e[1],c=w.join(w.dirname(t),d);try{let m=n.get(c);if(m===void 0){let p=await L(c,n,r);p.warnings?.forEach(f=>a.push(f)),p.watchFiles?.forEach(f=>l.add(f)),m=p.contents,n.set(c,m)}s.push({file:c,contents:m,target:u}),l.add(c),e=i.exec(o)}catch{if(e===null)break;let p=o.split(g),f=p.indexOf(e[0]),O=p[f];a.push({text:`File from <${e[0]}> not found`,location:{file:d,line:f+1,length:d.length,column:O.indexOf(d),lineText:O}}),s.push({file:c,contents:"",target:e[0]}),e=i.exec(o)}}for(let u of s)o=o.replace(u.target,u.contents);return n.set(t,o),{contents:o,warnings:a,watchFiles:[...l]}}function G({minify:t,resolveIncludes:n=!0,preserveLegalComments:r}={}){let o=new Map;return{name:"glsl",setup(s){async function a(l){let{contents:i,warnings:g,watchFiles:e}=await L(l.path,o,n);return t??=s.initialOptions.minify??!1,r??=s.initialOptions.legalComments!=="none",i=t?`export default \`${E(i,r)}\``:`export default \`${i}\``,{contents:i,warnings:g,watchFiles:e,loader:"js"}}s.onLoad({filter:/\.(?:frag|vert|glsl|wgsl)$/},a)}}}0&&(module.exports={glsl});