esbuild-plugin-glsl-minify
Version:
A GLSL plugin for esbuild.
8 lines (7 loc) • 2.9 kB
JavaScript
/**
* esbuild-plugin-glsl-minify v0.0.1 build Tue Sep 20 2022
* https://github.com/w8r/esbuild-plugin-glsl
* @license Zlib
*/
import*as c from"fs";import*as u from"util";var n=new Set(["x","y","z","w","r","g","b","a","s","t","xy"]),l=new Set(["attribute","uniform","varying","layout","centroid","flat","smooth","noperspective","patch","sample","subroutine","in","out","inout","invariant","discard","mat2","mat3","mat4","dmat2","dmat3","dmat4","mat2x2","mat2x3","mat2x4","dmat2x2","dmat2x3","dmat2x4","mat3x2","mat3x3","mat3x4","dmat3x2","dmat3x3","dmat3x4","mat4x2","mat4x3","mat4x4","dmat4x2","dmat4x3","dmat4x4","vec2","vec3","vec4","ivec2","ivec3","ivec4","bvec2","bvec3","bvec4","dvec2","dvec3","dvec4","uvec2","uvec3","uvec4","lowp","mediump","highp","precision","sampler1D","sampler2D","sampler3D","samplerCube","sampler1DShadow","sampler2DShadow","samplerCubeShadow","sampler1DArray","sampler2DArray","sampler1DArrayShadow","sampler2DArrayShadow","isampler1D","isampler2D","isampler3D","isamplerCube","isampler1DArray","isampler2DArray","usampler1D","usampler2D","usampler3D","usamplerCube","usampler1DArray","usampler2DArray","sampler2DRect","sampler2DRectShadow","isampler2DRect","usampler2DRect","samplerBuffer","isamplerBuffer","usamplerBuffer","sampler2DMS","isampler2DMS","usampler2DMS","sampler2DMSArray","isampler2DMSArray","usampler2DMSArray","samplerCubeArray","samplerCubeArrayShadow","isamplerCubeArray","usamplerCubeArray","auto","if","break","int","case","long","char","register","continue","return","default","short","do","sizeof","double","static","else","struct","entry","switch","extern","typedef","float","union","for","unsigned","goto","while","enum","void","const","signed","volatile","byte","ushort","ubyte","define","bool","endif","define","include","ifdef","floor","pow","mix","sin","cos","tan","asin","acos","atan","exp","log","sqrt","main","abs","sign","ceil","fract","mod","min","clamp","max","step","smoothstep","length","distance","dot","cross","normalize","faceforward","reflect","refract","texture2D","true","false"]);var D="a".charCodeAt(0),x=0;function i(){let e="",r=++x;do e=String.fromCharCode(D+(r-1)%26)+e,r=(r-1)/26|0;while(r!==0);return o(e)&&(e=i()),e}var o=e=>l.has(e),y=e=>/^((a_|u_|gl_)|([A-Z0-9_]+$))/.test(e),h=e=>{if(e.length>4)return!1;for(let r of e)if(!n.has(r))return!1;return!0},a=new Map,S=e=>{let r=a.get(e);return a.has(e)||(o(e)||y(e)||h(e)?r=e:r=i(),a.set(e,r)),a.get(e)},m=e=>e.replace(/[a-zA-Z_]\w*/g,S);function p(e,r){return(r?m(e):e).replace(/\/\/.*/g,"").replace(/\/\*+\s+(.|\n)*?\*\//gm,"").replace(/^\s+/gm,"").replace(/ +/gm," ").replace(/\n+/gm,`
`)}function R({minify:e=!1,mangle:r=!1}={}){let t=u.promisify(c.readFile);return{name:"glsl",setup(f){async function d(g){let s=await t(g.path,"utf8");return{contents:e?p(s,r):s,loader:"text"}}f.onLoad({filter:/\.(?:frag|vert|glsl|wgsl)$/},d)}}}export{R as default,R as glsl};