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