shaderkit 0.1.14 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +352 -3
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/ast.ts +137 -0
- package/src/generator.ts +170 -0
- package/src/index.ts +2 -0
- package/src/parser.ts +568 -0
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const q=["vec2","vec2i","vec2u","vec2f","vec2h","vec3","vec3i","vec3u","vec3f","vec3h","vec4","vec4i","vec4u","vec4f","vec4h","mat2x2","mat2x2f","mat2x2h","mat2x3","mat2x3f","mat2x3h","mat2x4","mat2x4f","mat2x4h","mat3x2","mat3x2f","mat3x2h","mat3x3","mat3x3f","mat3x3h","mat3x4","mat3x4f","mat3x4h","mat4x2","mat4x2f","mat4x2h","mat4x3","mat4x3f","mat4x3h","mat4x4","mat4x4f","mat4x4h","array","atomic","bool","f32","f16","i32","ptr","sampler","sampler_comparison","texture_1d","texture_2d","texture_2d_array","texture_3d","texture_cube","texture_cube_array","texture_multisampled_2d","texture_storage_1d","texture_storage_2d","texture_storage_2d_array","texture_storage_3d","texture_depth_2d","texture_depth_2d_array","texture_depth_cube","texture_depth_cube_array","texture_depth_multisampled_2d","u32","alias","bitcast","break","case","const","const_assert","continue","continuing","default","discard","else","enable","false","fn","for","if","let","loop","override","return","struct","switch","true","var","while","Hullshader","NULL","Self","abstract","active","alignas","alignof","as","asm","asm_fragment","async","attribute","auto","await","become","bf16","binding_array","cast","catch","class","co_await","co_return","co_yield","coherent","column_major","common","compile","compile_fragment","concept","const_cast","consteval","constexpr","constinit","crate","debugger","decltype","delete","demote","demote_to_helper","do","dynamic_cast","enum","explicit","export","extends","extern","external","f64","fallthrough","filter","final","finally","friend","from","fxgroup","get","goto","groupshared","handle","highp","i16","i64","i8","impl","implements","import","inline","instanceof","interface","layout","lowp","macro","macro_rules","match","mediump","meta","mod","module","move","mut","mutable","namespace","new","nil","noexcept","noinline","nointerpolation","noperspective","null","nullptr","of","operator","package","packoffset","partition","pass","patch","pixelfragment","precise","precision","premerge","priv","protected","pub","public","quat","readonly","ref","regardless","register","reinterpret_cast","requires","resource","restrict","self","set","shared","sizeof","smooth","snorm","static","static_assert","static_cast","std","subroutine","super","target","template","this","thread_local","throw","trait","try","type","typedef","typeid","typename","typeof","u16","u64","u8","union","unless","unorm","unsafe","unsized","use","using","varying","virtual","volatile","wgsl","where","with","writeonly","yield","@align","@binding","@builtin","@compute","@const","@fragment","@group","@id","@interpolate","@invariant","@location","@size","@vertex","@workgroup_size","perspective","linear","flat","center","centroid","sample","vertex_index","instance_index","position","front_facing","frag_depth","local_invocation_id","local_invocation_index","global_invocation_id","workgroup_id","num_workgroups","sample_index","sample_mask","read","write","read_write","function","private","workgroup","uniform","storage","rgba8unorm","rgba8snorm","rgba8uint","rgba8sint","rgba16uint","rgba16sint","rgba16float","r32uint","r32sint","r32float","rg32uint","rg32sint","rg32float","rgba32uint","rgba32sint","rgba32float","bgra8unorm","f16","all","any","select","arrayLength","abs","acos","acosh","asin","asinh","atan","atanh","atan2","ceil","clamp","cos","cosh","countLeadingZeros","countOneBits","countTrailingZeros","cross","degrees","determinant","distance","dot","exp","exp2","extractBits","faceForward","firstLeadingBit","firstTrailingBit","floor","fma","fract","frexp","insertBits","inverseSqrt","ldexp","length","log","log2","max","min","mix","modf","normalize","pow","quantizeToF16","radians","reflect","refract","reverseBits","round","saturate","sign","sin","sinh","smoothstep","sqrt","step","tan","tanh","transpose","trunc","dpdx","dpdxCoarse","dpdxFine","dpdy","dpdyCoarse","dpdyFine","fwidth","fwidthCoarse","fwidthFine","textureDimensions","textureGather","textureGatherCompare","textureLoad","textureNumLayers","textureNumLevels","textureNumSamples","textureSample","textureSampleBias","textureSampleCompare","textureSampleCompareLevel","textureSampleGrad","textureSampleLevel","textureSampleBaseClampToEdge","atomicLoad","atomicStore","atomicAdd","atomicSub","atomicMax","atomicMin","atomicAnd","atomicOr","atomicXor","atomicExchange","atomicCompareExchangeWeak","pack4x8snorm","pack4x8unorm","pack2x16snorm","pack2x16unorm","pack2x16float","unpack4x8snorm","unpack4x8unorm","unpack2x16snorm","unpack2x16unorm","unpack2x16float","storageBarrier","workgroupBarrier","workgroupUniformLoad"],U=["const","uniform","layout","centroid","flat","smooth","break","continue","do","for","while","switch","case","default","if","else","in","out","inout","float","int","void","bool","true","false","invariant","discard","return","mat2","mat3","mat4","mat2x2","mat2x3","mat2x4","mat3x2","mat3x3","mat3x4","mat4x2","mat4x3","mat4x4","vec2","vec3","vec4","ivec2","ivec3","ivec4","bvec2","bvec3","bvec4","uint","uvec2","uvec3","uvec4","lowp","mediump","highp","precision","sampler2D","sampler3D","samplerCube","sampler2DShadow","samplerCubeShadow","sampler2DArray","sampler2DArrayShadow","isampler2D","isampler3D","isamplerCube","isampler2DArray","usampler2D","usampler3D","usamplerCube","usampler2DArray","struct","attribute","varying","coherent","volatile","restrict","readonly","writeonly","resource","atomic_uint","noperspective","patch","sample","subroutine","common","partition","active","asm","class","union","enum","typedef","template","this","goto","inline","noinline","volatile","public","static","extern","external","interface","long","short","double","half","fixed","unsigned","superp","input","output","hvec2","hvec3","hvec4","dvec2","dvec3","dvec4","fvec2","fvec3","fvec4","sampler3DRect","filter","image1D","image2D","image3D","imageCube","iimage1D","iimage2D","iimage3D","iimageCube","uimage1D","uimage2D","uimage3D","uimageCube","image1DArray","image2DArray","iimage1DArray","iimage2DArray","uimage1DArray","uimage2DArray","imageBuffer","iimageBuffer","uimageBuffer","sampler1D","sampler1DShadow","sampler1DArray","sampler1DArrayShadow","isampler1D","isampler1DArray","usampler1D","usampler1DArray","sampler2DRect","sampler2DRectShadow","isampler2DRect","usampler2DRect","samplerBuffer","isamplerBuffer","usamplerBuffer","sampler2DMS","isampler2DMS","usampler2DMS","sampler2DMSArray","isampler2DMSArray","usampler2DMSArray","sizeof","cast","namespace","using","#define","#undef","#if","#ifdef","#ifndef","#else","#elif","#endif","#error","#pragma","#extension","#version","#line","defined","__LINE__","__FILE__","__VERSION__","GL_ES","gl_VertexID","gl_InstanceID","gl_Position","gl_PointSize","gl_FragCoord","gl_FrontFacing","gl_FragDepth","gl_PointCoord","gl_MaxVertexAttribs","gl_MaxVertexUniformVectors","gl_MaxVertexOutputVectors","gl_MaxFragmentInputVectors","gl_MaxVertexTextureImageUnits","gl_MaxCombinedTextureImageUnits","gl_MaxTextureImageUnits","gl_MaxFragmentUniformVectors","gl_MaxDrawBuffers","gl_MinProgramTexelOffset","gl_MaxProgramTexelOffset","gl_DepthRangeParameters","gl_DepthRange","radians","degrees","sin","cos","tan","asin","acos","atan","sinh","cosh","tanh","asinh","acosh","atanh","pow","exp","log","exp2","log2","sqrt","inversesqrt","abs","sign","floor","trunc","round","roundEven","ceil","fract","mod","modf","min","max","clamp","mix","step","smoothstep","isnan","isinf","floatBitsToInt","floatBitsToUint","intBitsToFloat","uintBitsToFloat","packSnorm2x16","unpackSnorm2x16","packUnorm2x16","unpackUnorm2x16","packHalf2x16","unpackHalf2x16","length","distance","dot","cross","normalize","faceforward","reflect","refract","matrixCompMult","outerProduct","transpose","determinant","inverse","lessThan","lessThanEqual","greaterThan","greaterThanEqual","equal","notEqual","any","all","not","textureSize","texture","textureProj","textureLod","textureOffset","texelFetch","texelFetchOffset","textureProjOffset","textureLodOffset","textureProjLod","textureProjLodOffset","textureGrad","textureGradOffset","textureProjGrad","textureProjGradOffset","dFdx","dFdy","fwidth","#include","gl_DrawID","gl_ViewID_OVR","GL_OVR_multiview2"],j=["//","/*","*/",":",",",".","{","[","(","?","}","]",")",";","~","--","++","!","&","|","^","/","==",">",">=","<","<=","&&","||","^^","-","*","!=","+","%","<<",">>","=","+=","&=","|=","^=","/=","*=","%=","<<=",">>=","-="],W=[...j,"#","\\"],$=[...j,"->","@"],ae=RegExp.prototype.test.bind(/\bfn\s+\w+\s*\(|\b(var|let|const)\s+\w+\s*[:=]/),N=RegExp.prototype.test.bind(/^(\d+\.\d*|\d*\.\d+)([eEpP][-+]?\d+)?[fFhH]?$/),re=RegExp.prototype.test.bind(/^(0[xX][\w\d]+|\d+)[iIuU]?$/),oe=RegExp.prototype.test.bind(/^(true|false)$/),ie=48,ne=57,le=65,se=90,ue=10,me=13,pe=9,ce=32,de=95,H=47,Y=42,fe=35,xe=64,Z=e=>ie<=e&&e<=ne,ge=e=>(e&=-33,le<=e&&e<=se),ve=e=>e===ue||e===me,K=e=>ve(e)||e===pe||e===ce,X=e=>ge(e)||Z(e)||e===de,he=e=>e===fe||e===xe;function J(e,o=0){const i=[];let p=-1;const[d,f]=ae(e)?[q,$]:[U,W];for(;o<e.length;){let a=e[o];const s=e.charCodeAt(o++);if(K(s)){for(;K(e.charCodeAt(o));)a+=e[o++];i.push({type:"whitespace",value:a})}else if(Z(s)){for(;N(a+e[o])||re(a+e[o]);)a+=e[o++];N(a)?i.push({type:"float",value:a}):i.push({type:"int",value:a})}else if(X(s)){for(;X(e.charCodeAt(o));)a+=e[o++];oe(a)?i.push({type:"bool",value:a}):d.includes(he(p)?String.fromCharCode(p)+a:a)?i.push({type:"keyword",value:a}):i.push({type:"identifier",value:a})}else if(s===H&&(e.charCodeAt(o)===H||e.charCodeAt(o)===Y)){const u=e.charCodeAt(o)===Y?"*/":`
|
|
2
|
-
`;for(;!
|
|
3
|
-
#`:
|
|
4
|
-
`:m+=n.value}return m.
|
|
1
|
+
class re{constructor(t){this.value=t}}class R{constructor(t){this.value=t}}class k{constructor(t,a){this.name=t,this.parameters=a}}class q{constructor(t,a){this.name=t,this.value=a}}class I{constructor(t,a,n,s,c){this.layout=t,this.qualifiers=a,this.kind=n,this.type=s,this.declarations=c}}class se{constructor(t,a){this.name=t,this.members=a}}class le{constructor(t,a,n,s,c){this.name=t,this.type=a,this.qualifiers=n,this.args=s,this.body=c}}class P{constructor(t,a,n){this.operator=t,this.left=a,this.right=n}}class V{constructor(t,a,n){this.operator=t,this.left=a,this.right=n}}class ie{constructor(t,a,n){this.test=t,this.consequent=a,this.alternate=n}}class oe{constructor(t,a){this.callee=t,this.args=a}}class ue{constructor(t,a){this.object=t,this.property=a}}class B{constructor(t,a){this.type=t,this.members=a}}class ce{constructor(t){this.body=t}}class pe{constructor(t,a,n){this.test=t,this.consequent=a,this.alternate=n}}class me{constructor(t,a,n,s){this.init=t,this.test=a,this.update=n,this.body=s}}class fe{constructor(t,a){this.test=t,this.body=a}}class de{constructor(t,a){this.test=t,this.body=a}}class ${constructor(t,a){this.test=t,this.consequent=a}}class he{constructor(t,a){this.discriminant=t,this.cases=a}}class ve{constructor(t){this.argument=t}}class ge{constructor(t,a){this.name=t,this.value=a}}class xe{constructor(t,a){this.precision=t,this.type=a}}class ye{}class _e{}class we{}const be=["vec2","vec2i","vec2u","vec2f","vec2h","vec3","vec3i","vec3u","vec3f","vec3h","vec4","vec4i","vec4u","vec4f","vec4h","mat2x2","mat2x2f","mat2x2h","mat2x3","mat2x3f","mat2x3h","mat2x4","mat2x4f","mat2x4h","mat3x2","mat3x2f","mat3x2h","mat3x3","mat3x3f","mat3x3h","mat3x4","mat3x4f","mat3x4h","mat4x2","mat4x2f","mat4x2h","mat4x3","mat4x3f","mat4x3h","mat4x4","mat4x4f","mat4x4h","array","atomic","bool","f32","f16","i32","ptr","sampler","sampler_comparison","texture_1d","texture_2d","texture_2d_array","texture_3d","texture_cube","texture_cube_array","texture_multisampled_2d","texture_storage_1d","texture_storage_2d","texture_storage_2d_array","texture_storage_3d","texture_depth_2d","texture_depth_2d_array","texture_depth_cube","texture_depth_cube_array","texture_depth_multisampled_2d","u32","alias","bitcast","break","case","const","const_assert","continue","continuing","default","discard","else","enable","false","fn","for","if","let","loop","override","return","struct","switch","true","var","while","Hullshader","NULL","Self","abstract","active","alignas","alignof","as","asm","asm_fragment","async","attribute","auto","await","become","bf16","binding_array","cast","catch","class","co_await","co_return","co_yield","coherent","column_major","common","compile","compile_fragment","concept","const_cast","consteval","constexpr","constinit","crate","debugger","decltype","delete","demote","demote_to_helper","do","dynamic_cast","enum","explicit","export","extends","extern","external","f64","fallthrough","filter","final","finally","friend","from","fxgroup","get","goto","groupshared","handle","highp","i16","i64","i8","impl","implements","import","inline","instanceof","interface","layout","lowp","macro","macro_rules","match","mediump","meta","mod","module","move","mut","mutable","namespace","new","nil","noexcept","noinline","nointerpolation","noperspective","null","nullptr","of","operator","package","packoffset","partition","pass","patch","pixelfragment","precise","precision","premerge","priv","protected","pub","public","quat","readonly","ref","regardless","register","reinterpret_cast","requires","resource","restrict","self","set","shared","sizeof","smooth","snorm","static","static_assert","static_cast","std","subroutine","super","target","template","this","thread_local","throw","trait","try","type","typedef","typeid","typename","typeof","u16","u64","u8","union","unless","unorm","unsafe","unsized","use","using","varying","virtual","volatile","wgsl","where","with","writeonly","yield","@align","@binding","@builtin","@compute","@const","@fragment","@group","@id","@interpolate","@invariant","@location","@size","@vertex","@workgroup_size","perspective","linear","flat","center","centroid","sample","vertex_index","instance_index","position","front_facing","frag_depth","local_invocation_id","local_invocation_index","global_invocation_id","workgroup_id","num_workgroups","sample_index","sample_mask","read","write","read_write","function","private","workgroup","uniform","storage","rgba8unorm","rgba8snorm","rgba8uint","rgba8sint","rgba16uint","rgba16sint","rgba16float","r32uint","r32sint","r32float","rg32uint","rg32sint","rg32float","rgba32uint","rgba32sint","rgba32float","bgra8unorm","f16","all","any","select","arrayLength","abs","acos","acosh","asin","asinh","atan","atanh","atan2","ceil","clamp","cos","cosh","countLeadingZeros","countOneBits","countTrailingZeros","cross","degrees","determinant","distance","dot","exp","exp2","extractBits","faceForward","firstLeadingBit","firstTrailingBit","floor","fma","fract","frexp","insertBits","inverseSqrt","ldexp","length","log","log2","max","min","mix","modf","normalize","pow","quantizeToF16","radians","reflect","refract","reverseBits","round","saturate","sign","sin","sinh","smoothstep","sqrt","step","tan","tanh","transpose","trunc","dpdx","dpdxCoarse","dpdxFine","dpdy","dpdyCoarse","dpdyFine","fwidth","fwidthCoarse","fwidthFine","textureDimensions","textureGather","textureGatherCompare","textureLoad","textureNumLayers","textureNumLevels","textureNumSamples","textureSample","textureSampleBias","textureSampleCompare","textureSampleCompareLevel","textureSampleGrad","textureSampleLevel","textureSampleBaseClampToEdge","atomicLoad","atomicStore","atomicAdd","atomicSub","atomicMax","atomicMin","atomicAnd","atomicOr","atomicXor","atomicExchange","atomicCompareExchangeWeak","pack4x8snorm","pack4x8unorm","pack2x16snorm","pack2x16unorm","pack2x16float","unpack4x8snorm","unpack4x8unorm","unpack2x16snorm","unpack2x16unorm","unpack2x16float","storageBarrier","workgroupBarrier","workgroupUniformLoad"],De=["const","uniform","layout","centroid","flat","smooth","break","continue","do","for","while","switch","case","default","if","else","in","out","inout","float","int","void","bool","true","false","invariant","discard","return","mat2","mat3","mat4","mat2x2","mat2x3","mat2x4","mat3x2","mat3x3","mat3x4","mat4x2","mat4x3","mat4x4","vec2","vec3","vec4","ivec2","ivec3","ivec4","bvec2","bvec3","bvec4","uint","uvec2","uvec3","uvec4","lowp","mediump","highp","precision","sampler2D","sampler3D","samplerCube","sampler2DShadow","samplerCubeShadow","sampler2DArray","sampler2DArrayShadow","isampler2D","isampler3D","isamplerCube","isampler2DArray","usampler2D","usampler3D","usamplerCube","usampler2DArray","struct","attribute","varying","coherent","volatile","restrict","readonly","writeonly","resource","atomic_uint","noperspective","patch","sample","subroutine","common","partition","active","asm","class","union","enum","typedef","template","this","goto","inline","noinline","volatile","public","static","extern","external","interface","long","short","double","half","fixed","unsigned","superp","input","output","hvec2","hvec3","hvec4","dvec2","dvec3","dvec4","fvec2","fvec3","fvec4","sampler3DRect","filter","image1D","image2D","image3D","imageCube","iimage1D","iimage2D","iimage3D","iimageCube","uimage1D","uimage2D","uimage3D","uimageCube","image1DArray","image2DArray","iimage1DArray","iimage2DArray","uimage1DArray","uimage2DArray","imageBuffer","iimageBuffer","uimageBuffer","sampler1D","sampler1DShadow","sampler1DArray","sampler1DArrayShadow","isampler1D","isampler1DArray","usampler1D","usampler1DArray","sampler2DRect","sampler2DRectShadow","isampler2DRect","usampler2DRect","samplerBuffer","isamplerBuffer","usamplerBuffer","sampler2DMS","isampler2DMS","usampler2DMS","sampler2DMSArray","isampler2DMSArray","usampler2DMSArray","sizeof","cast","namespace","using","#define","#undef","#if","#ifdef","#ifndef","#else","#elif","#endif","#error","#pragma","#extension","#version","#line","defined","__LINE__","__FILE__","__VERSION__","GL_ES","gl_VertexID","gl_InstanceID","gl_Position","gl_PointSize","gl_FragCoord","gl_FrontFacing","gl_FragDepth","gl_PointCoord","gl_MaxVertexAttribs","gl_MaxVertexUniformVectors","gl_MaxVertexOutputVectors","gl_MaxFragmentInputVectors","gl_MaxVertexTextureImageUnits","gl_MaxCombinedTextureImageUnits","gl_MaxTextureImageUnits","gl_MaxFragmentUniformVectors","gl_MaxDrawBuffers","gl_MinProgramTexelOffset","gl_MaxProgramTexelOffset","gl_DepthRangeParameters","gl_DepthRange","radians","degrees","sin","cos","tan","asin","acos","atan","sinh","cosh","tanh","asinh","acosh","atanh","pow","exp","log","exp2","log2","sqrt","inversesqrt","abs","sign","floor","trunc","round","roundEven","ceil","fract","mod","modf","min","max","clamp","mix","step","smoothstep","isnan","isinf","floatBitsToInt","floatBitsToUint","intBitsToFloat","uintBitsToFloat","packSnorm2x16","unpackSnorm2x16","packUnorm2x16","unpackUnorm2x16","packHalf2x16","unpackHalf2x16","length","distance","dot","cross","normalize","faceforward","reflect","refract","matrixCompMult","outerProduct","transpose","determinant","inverse","lessThan","lessThanEqual","greaterThan","greaterThanEqual","equal","notEqual","any","all","not","textureSize","texture","textureProj","textureLod","textureOffset","texelFetch","texelFetchOffset","textureProjOffset","textureLodOffset","textureProjLod","textureProjLodOffset","textureGrad","textureGradOffset","textureProjGrad","textureProjGradOffset","dFdx","dFdy","fwidth","#include","gl_DrawID","gl_ViewID_OVR","GL_OVR_multiview2"],Se=["//","/*","*/",":",",",".","{","[","(","?","}","]",")",";","~","--","++","!","&","|","^","/","==",">",">=","<","<=","&&","||","^^","-","*","!=","+","%","<<",">>","=","+=","&=","|=","^=","/=","*=","%=","<<=",">>=","-="],ke=[...Se,"#","\\"],Ee=[...Se,"->","@"],Ge=RegExp.prototype.test.bind(/\bfn\s+\w+\s*\(|\b(var|let|const)\s+\w+\s*[:=]/),Ce=RegExp.prototype.test.bind(/^(\d+\.\d*|\d*\.\d+)([eEpP][-+]?\d+)?[fFhH]?$/),ze=RegExp.prototype.test.bind(/^(0[xX][\w\d]+|\d+)[iIuU]?$/),Ue=RegExp.prototype.test.bind(/^(true|false)$/),je=48,We=57,Ne=65,He=90,Ye=10,Ze=13,Ke=9,Xe=32,Je=95,Le=47,Ae=42,Qe=35,et=64,Me=e=>je<=e&&e<=We,tt=e=>(e&=-33,Ne<=e&&e<=He),at=e=>e===Ye||e===Ze,Re=e=>at(e)||e===Ke||e===Xe,Be=e=>tt(e)||Me(e)||e===Je,nt=e=>e===Qe||e===et;function G(e,t=0){const a=[];let n=-1;const[s,c]=Ge(e)?[be,Ee]:[De,ke];for(;t<e.length;){let l=e[t];const u=e.charCodeAt(t++);if(Re(u)){for(;Re(e.charCodeAt(t));)l+=e[t++];a.push({type:"whitespace",value:l})}else if(Me(u)){for(;Ce(l+e[t])||ze(l+e[t]);)l+=e[t++];Ce(l)?a.push({type:"float",value:l}):a.push({type:"int",value:l})}else if(Be(u)){for(;Be(e.charCodeAt(t));)l+=e[t++];Ue(l)?a.push({type:"bool",value:l}):s.includes(nt(n)?String.fromCharCode(n)+l:l)?a.push({type:"keyword",value:l}):a.push({type:"identifier",value:l})}else if(u===Le&&(e.charCodeAt(t)===Le||e.charCodeAt(t)===Ae)){const i=e.charCodeAt(t)===Ae?"*/":`
|
|
2
|
+
`;for(;!l.endsWith(i);)l+=e[t++];a.push({type:"comment",value:l})}else{for(const i of c)i.length>l.length&&e.startsWith(i,t-1)&&(l=i);t+=l.length-1,a.push({type:"symbol",value:l})}n=u}return a}const Fe=RegExp.prototype.test.bind(/^\w/),rt=RegExp.prototype.test.bind(/[^\w\\]/),Oe=RegExp.prototype.test.bind(/^[_A-Za-z]/),st=RegExp.prototype.test.bind(/[;{}\\@]/),Te=RegExp.prototype.test.bind(/^(binding|group|layout|uniform|in|out|attribute|varying)$/);function lt(e,{mangle:t=!1,mangleMap:a=new Map,mangleExternals:n=!1}={}){var s,c,l,u,i,d,h,f,g,y,x,D,A,U,j,W,N,H,Y,Z,K,X;e=e.replace(/(^\s*#[^\\]*?)(\n|\/[\/\*])/gm,"$1\\$2");const J=new Map,v=G(e).filter(p=>p.type!=="whitespace"&&p.type!=="comment");let Q=-1,ee=-1,O=-1,E="";for(let p=0;p<v.length;p++){const _=v[p];(Te(_.value)||st((s=v[p-1])==null?void 0:s.value))&&(ee=p),_.value==="{"&&Oe((c=v[p-1])==null?void 0:c.value)?O=p-1:_.value==="}"&&(O=-1),Fe(_.value)&&Fe((l=v[p-1])==null?void 0:l.value)&&(E+=" "),rt(_.value)&&(((u=v[p-2])==null?void 0:u.value)==="#"&&((i=v[p-1])==null?void 0:i.value)==="include"||((d=v[p-3])==null?void 0:d.value)==="#"&&((h=v[p-2])==null?void 0:h.value)==="define")&&(E+=" ");let C=_.value;if(((f=v[p-1])==null?void 0:f.value)==="."&&(C=`${(g=v[p-2])==null?void 0:g.value}.`+C),_.type==="identifier"&&C!=="main"&&(typeof t=="boolean"?t:t(_,p,v))){const te=((y=v[p-1])==null?void 0:y.value)==="}"&&((x=v[p+1])==null?void 0:x.value)===";",T=Te((D=v[ee])==null?void 0:D.value),ae=T&&((A=v[p-1])==null?void 0:A.value)===",";let S=(U=a.get(C))!=null?U:J.get(C);if(!S&&O===-1&&(Oe((j=v[p-1])==null?void 0:j.value)||te||ae||((W=v[p-1])==null?void 0:W.type)==="symbol"&&((N=v[p+1])==null?void 0:N.value)===":")&&(n||!T)){const ne=n&&T||((H=v[p-2])==null?void 0:H.value)==="#"||te||ae||((Y=v[p-1])==null?void 0:Y.value)==="fn"&&(((Z=v[p-2])==null?void 0:Z.value)===")"||((K=v[p-3])==null?void 0:K.value)==="@")?a:J;for(;!S||ne.has(S);){S="",Q++;let M=Q;for(;M>0;)S=String.fromCharCode(97+(M-1)%26)+S,M=Math.floor(M/26)}ne.set(C,S)}E+=S!=null?S:_.value}else _.value==="#"&&((X=v[p-1])==null?void 0:X.value)!=="\\"?E+=`
|
|
3
|
+
#`:_.value==="\\"?E+=`
|
|
4
|
+
`:E+=_.value}return E.trim()}const qe=["+","-","~","!","++","--"],it=[">>=","<<=","|=","&=","^=","%=","/=","*=","-=","+=","=","?","||","^^","&&","|","^","&","!=","==",">=","<=",">","<",">>","<<","+","-","%","/","*"],ot=/^(void|bool|float|u?int|[uib]?vec\d|mat\d(x\d)?)$/,Ie=/^(const|uniform|in|out|inout|centroid|flat|smooth|invariant|lowp|mediump|highp)$/,ut=new RegExp(`${ot.source}|${Ie.source}|layout`),ct=RegExp.prototype.test.bind(ut),pt=RegExp.prototype.test.bind(/^[\(\[\{]$/),mt=RegExp.prototype.test.bind(/^[\)\]\}]$/);function z(e){return pt(e.value)?1:mt(e.value)?-1:0}let m=[],r=0;function w(e,t,a=0){const n=[];let s=0;for(;a<t.length;){const c=t[a++];if(n.push(c),s+=z(c),s===0&&c.value===e)break}return n}function b(e){const t=w(e,m,r);return r+=t.length,t}function o(e){var t,a,n;if(e.length===0)return null;const s=e[0],c=e[e.length-1];if(qe.includes(s.value)){const u=o(e.slice(1));return new P(s.value,null,u)}else if(qe.includes(c.value)){const u=o(e.slice(0,e.length-1));return new P(c.value,u,null)}if(s.value==="("){const u=w(")",e),i=o(u.slice(1,u.length-1)),d=e[u.length];if(d){const h=e.slice(u.length+1),f=o(h);return new V(d.value,i,f)}return i}let l=0;for(const u of it)for(let i=0;i<e.length;i++){const d=e[i];if(d.type==="symbol"){if(l+=z(d),l===0&&d.value===u)if(u==="?"){const h=e.slice(0,i),f=w(":",e,i+1).slice(0,-1),g=e.slice(i+f.length+2),y=o(h),x=o(f),D=o(g);return new ie(y,x,D)}else{const h=o(e.slice(0,i)),f=o(e.slice(i+1,e.length));return new V(u,h,f)}if(l<0)return o(e.slice(0,i))}}if(s.type==="bool"||s.type==="int"||s.type==="float")return new re(s.value);if(s.type==="identifier"||s.type==="keyword"){const u=e[1];if(u){if(u.value==="("){const i=new R(s.value),d=[],h=w(")",e,1).slice(1,-1);let f=0;for(;f<h.length;){const x=w(",",h,f);f+=x.length,((t=x[x.length-1])==null?void 0:t.value)===","&&x.pop();const D=o(x);D&&d.push(D)}const g=new oe(i,d);let y=3+f;if(((a=e[y])==null?void 0:a.value)==="."){const x=o([s,...e.slice(y)]);return x.object=g,x}return g}else if(u.value==="."){const i=new R(s.value),d=o([e[2]]),h=new ue(i,d);if(((n=e[3])==null?void 0:n.value)==="("&&c.value===")"){const f=o(e.slice(2));return f.callee=h,f}return h}else if(u.value==="["){let i=2;const d=new k(s.value,[]);e[i].value!=="]"&&d.parameters.push(o([e[i++]])),i++;const h=w(")",e,i).slice(1,-1),f=[];let g=0;for(;g<h.length;){const y=w(",",h,g);g+=y.length,y[y.length-1].value===","&&y.pop(),f.push(o(y))}return new B(d,f)}}else return new R(s.value)}return null}function Pe(e=[],t=null){r--;const a=null,n=new k(m[r++].value,null),s=[],c=b(";");let l=0;for(;l<c.length;){const u=c[l++].value;let i=null;c[l].value==="["&&(l++,i=new B(new k(n.name,[o([c[l++]])]),[]),l++);let d=null;const h=c[l++];if((h==null?void 0:h.value)==="="){const f=w(",",c,l);l+=f.length,d=o(f.slice(0,-1))}s.push(new q(u,d!=null?d:i))}return new I(t,e,a,n,s)}function ft(e){var t,a,n;r--;const s=new k(m[r++].value,null),c=m[r++].value,l=[],u=b(")").slice(1,-1);let i=0;for(;i<u.length;){const h=[];for(;u[i]&&u[i].type!=="identifier";)h.push(u[i++].value);const f=new k(h.pop(),null),g=w(",",u,i);i+=g.length;const y=g.shift().value;let x=null;((t=g[0])==null?void 0:t.value)==="["&&(g.shift(),x=new B(new k(f.name,[o([g.shift()])]),[]),g.shift()),((a=g[g.length-1])==null?void 0:a.value)===","&&g.pop();const D=(n=o(g))!=null?n:x,A=[new q(y,D)];l.push(new I(null,h,null,f,A))}let d=null;return m[r].value===";"?r++:d=L(),new le(c,s,e,l,d)}function Ve(){var e;r--;let t=null;if(m[r].value==="layout"){r++,t={};let n=null;for(;m[r]&&m[r].value!==")";){const s=m[r++];s.value===","&&(n=null),s.type!=="symbol"&&(n?t[n]=s.value:(n=s.value,t[n]=!0))}r++}const a=[];for(;m[r]&&Ie.test(m[r].value);)a.push(m[r++].value);return r++,((e=m[r+1])==null?void 0:e.value)==="("?ft(a):Pe(a,t)}function dt(){const e=m[r++].value;r++;const t=[];for(;m[r]&&m[r].value!=="}";)r++,t.push(Ve());return r++,r++,new se(e,t)}function ht(){const e=b(";");e.pop();const t=o(e);return new ve(t)}function $e(){const e=o(b(")")),t=L();let a=null;return m[r].value==="else"&&(r++,m[r].value==="if"?(r++,a=$e()):a=L()),new pe(e,t,a)}function vt(){const e=o(b(")")),t=L();return new fe(e,t)}function gt(){const e=r+(w(")",m,r).length-1);r++,r++;const t=Pe(),a=o(b(";").slice(0,-1)),n=o(m.slice(r,e));r=e,r++;const s=L();return new me(t,a,n,s)}function xt(){const e=L();r++;const t=o(b(")"));return r++,new de(t,e)}function yt(){const e=o(b(")")),t=r+w("}",m,r).length-1,a=[];for(;r<t;){const n=m[r++];if(n.value==="case"){const s=o(b(":").slice(0,-1)),c=F();a.push(new $(s,c))}else if(n.value==="default"){r++;const s=F();a.push(new $(null,s))}}return new he(e,a)}function _t(){const e=m[r++].value,t=new k(m[r++].value,null);return r++,new xe(e,t)}function wt(){const e=m[r++].value,t=b("\\").slice(0,-1);let a=null;if(e!=="else"&&e!=="endif")if(a=[],e==="define"){const n=o([t.shift()]),s=o(t);a.push(n,s)}else if(e==="extension"){const n=o([t.shift()]);t.shift();const s=o(t);a.push(n,s)}else e==="include"?a.push(o(t.slice(1,-1))):a.push(o(t));return new ge(e,a)}function F(){const e=[];let t=0;for(;r<m.length;){const a=m[r++];if(t+=z(a),t<0)break;let n=null;if(a.value==="#")n=wt();else if(a.type==="keyword")if(a.value==="case"||a.value==="default"){r--;break}else a.value==="struct"?n=dt():a.value==="continue"?(n=new ye,r++):a.value==="break"?(n=new _e,r++):a.value==="discard"?(n=new we,r++):a.value==="return"?n=ht():a.value==="if"?n=$e():a.value==="while"?n=vt():a.value==="for"?n=gt():a.value==="do"?n=xt():a.value==="switch"?n=yt():a.value==="precision"?n=_t():ct(a.value)&&m[r].value!=="["&&(n=Ve());if(n)e.push(n);else{const s=[a,...b(";")];s[s.length-1].value===";"&&s.pop();const c=o(s);c&&e.push(c)}}return e}function L(){r++;const e=F();return new ce(e)}const bt=/(^\s*#[^\\]*?)(\n|\/[\/\*])/gm;function Dt(e){return e=e.replace("#version 300 es",""),e=e.replace(bt,"$1\\$2"),m=G(e).filter(t=>t.type!=="whitespace"&&t.type!=="comment"),r=0,F()}export{B as ArrayExpression,V as BinaryExpression,ce as BlockStatement,_e as BreakStatement,oe as CallExpression,ye as ContinueStatement,we as DiscardStatement,de as DoWhileStatement,me as ForStatement,le as FunctionDeclaration,De as GLSL_KEYWORDS,ke as GLSL_SYMBOLS,R as Identifier,pe as IfStatement,re as Literal,ue as MemberExpression,xe as PrecisionStatement,ge as PreprocessorStatement,ve as ReturnStatement,se as StructDeclaration,$ as SwitchCase,he as SwitchStatement,ie as TernaryExpression,k as Type,P as UnaryExpression,I as VariableDeclaration,q as VariableDeclarator,be as WGSL_KEYWORDS,Ee as WGSL_SYMBOLS,fe as WhileStatement,lt as minify,Dt as parse,G as tokenize};
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/constants.ts","../src/tokenizer.ts","../src/minifier.ts"],"sourcesContent":null,"names":["WGSL_KEYWORDS","GLSL_KEYWORDS","SYMBOLS","GLSL_SYMBOLS","WGSL_SYMBOLS","isWGSL","isFloat","isInt","isBool","ZERO","NINE","A","Z","LF","CR","TAB","SPACE","UNDERSCORE","SLASH","STAR","HASH","AT","isDigit","c","isAlpha","isLine","isSpace","isIdent","isMacro","tokenize","code","index","tokens","prev","KEYWORDS","value","char","terminator","symbol","isWord","isSymbol","isName","isScoped","isStorage","minify","mangle","mangleMap","mangleExternals","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","mangleCache","token","mangleIndex","lineIndex","blockIndex","minified","i","prefix","namespace","storage","list","renamed","cache","j"],"mappings":"AACO,MAAMA,EAAgB,CAE3B,OACA,QACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,QAGA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UAGA,QACA,SACA,OACA,MACA,MACA,MAUA,MACA,UACA,qBACA,aACA,aACA,mBACA,aACA,eACA,qBACA,0BACA,qBACA,qBACA,2BACA,qBACA,mBACA,yBACA,qBACA,2BACA,gCACA,MAMA,QACA,UACA,QACA,OACA,QACA,eACA,WACA,aACA,UACA,UACA,OACA,SACA,QACA,KACA,MACA,KACA,MACA,OACA,WACA,SACA,SACA,SACA,OACA,MACA,QAGA,aACA,OACA,OACA,WACA,SACA,UACA,UACA,KACA,MACA,eACA,QACA,YACA,OACA,QACA,SACA,OACA,gBACA,OACA,QACA,QACA,WACA,YACA,WACA,WACA,eACA,SACA,UACA,mBACA,UACA,aACA,YACA,YACA,YACA,QACA,WACA,WACA,SACA,SACA,mBACA,KACA,eACA,OACA,WACA,SACA,UACA,SACA,WACA,MACA,cACA,SACA,QACA,UACA,SACA,OACA,UACA,MACA,OACA,cACA,SACA,QACA,MACA,MACA,KACA,OACA,aACA,SACA,SACA,aACA,YACA,SACA,OACA,QACA,cACA,QACA,UACA,OACA,MACA,SACA,OACA,MACA,UACA,YACA,MACA,MACA,WACA,WACA,kBACA,gBACA,OACA,UACA,KACA,WACA,UACA,aACA,YACA,OACA,QACA,gBACA,UACA,YACA,WACA,OACA,YACA,MACA,SACA,OACA,WACA,MACA,aACA,WACA,mBACA,WACA,WACA,WACA,OACA,MACA,SACA,SACA,SACA,QACA,SACA,gBACA,cACA,MACA,aACA,QACA,SACA,WACA,OACA,eACA,QACA,QACA,MACA,OACA,UACA,SACA,WACA,SACA,MACA,MACA,KACA,QACA,SACA,QACA,SACA,UACA,MACA,QACA,UACA,UACA,WACA,OACA,QACA,OACA,YACA,QAGA,SACA,WACA,WACA,WACA,SACA,YACA,SACA,MACA,eACA,aACA,YACA,QACA,UACA,kBAGA,cACA,SACA,OAGA,SACA,WACA,SAGA,eACA,iBACA,WACA,eACA,aACA,sBACA,yBACA,uBACA,eACA,iBACA,eACA,cAGA,OACA,QACA,aAGA,WACA,UACA,YACA,UACA,UAGA,aACA,aACA,YACA,YACA,aACA,aACA,cACA,UACA,UACA,WACA,WACA,WACA,YACA,aACA,aACA,cACA,aAGA,MAGA,MACA,MACA,SAGA,cAGA,MACA,OACA,QACA,OACA,QACA,OACA,QACA,QACA,OACA,QACA,MACA,OACA,oBACA,eACA,qBACA,QACA,UACA,cACA,WACA,MACA,MACA,OACA,cACA,cACA,kBACA,mBACA,QACA,MACA,QACA,QACA,aACA,cACA,QACA,SACA,MACA,OACA,MACA,MACA,MACA,OACA,YACA,MACA,gBACA,UACA,UACA,UACA,cACA,QACA,WACA,OACA,MACA,OACA,aACA,OACA,OACA,MACA,OACA,YACA,QAGA,OACA,aACA,WACA,OACA,aACA,WACA,SACA,eACA,aAGA,oBACA,gBACA,uBACA,cACA,mBACA,mBACA,oBACA,gBACA,oBACA,uBACA,4BACA,oBACA,qBACA,+BAGA,aACA,cACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,iBACA,4BAGA,eACA,eACA,gBACA,gBACA,gBAGA,iBACA,iBACA,kBACA,kBACA,kBAGA,iBACA,mBACA,sBACF,EAIaC,EAAgB,CAE3B,QACA,UACA,SACA,WACA,OACA,SACA,QACA,WACA,KACA,MACA,QACA,SACA,OACA,UACA,KACA,OACA,KACA,MACA,QACA,QACA,MACA,OACA,OACA,OACA,QACA,YACA,UACA,SACA,OACA,OACA,OACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,OACA,UACA,QACA,YACA,YACA,YACA,cACA,kBACA,oBACA,iBACA,uBACA,aACA,aACA,eACA,kBACA,aACA,aACA,eACA,kBACA,SAGA,YACA,UACA,WACA,WACA,WACA,WACA,YACA,WACA,cACA,gBACA,QACA,SACA,aACA,SACA,YACA,SACA,MACA,QACA,QACA,OACA,UACA,WACA,OACA,OACA,SACA,WACA,WACA,SACA,SACA,SACA,WACA,YACA,OACA,QACA,SACA,OACA,QACA,WACA,SACA,QACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,gBACA,SACA,UACA,UACA,UACA,YACA,WACA,WACA,WACA,aACA,WACA,WACA,WACA,aACA,eACA,eACA,gBACA,gBACA,gBACA,gBACA,cACA,eACA,eACA,YACA,kBACA,iBACA,uBACA,aACA,kBACA,aACA,kBACA,gBACA,sBACA,iBACA,iBACA,gBACA,iBACA,iBACA,cACA,eACA,eACA,mBACA,oBACA,oBACA,SACA,OACA,YACA,QAGA,UACA,SACA,MACA,SACA,UACA,QACA,QACA,SACA,SACA,UACA,aACA,WACA,QAGA,UAGA,WACA,WACA,cACA,QAGA,cACA,gBACA,cACA,eAGA,eACA,iBACA,eACA,gBAGA,sBACA,6BACA,4BACA,6BACA,gCACA,kCACA,0BACA,+BACA,oBACA,2BACA,2BAGA,0BACA,gBAGA,UACA,UACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QAGA,MACA,MACA,MACA,OACA,OACA,OACA,cAGA,MACA,OACA,QACA,QACA,QACA,YACA,OACA,QACA,MACA,OACA,MACA,MACA,QACA,MACA,OACA,aACA,QACA,QACA,iBACA,kBACA,iBACA,kBAGA,gBACA,kBACA,gBACA,kBACA,eACA,iBAGA,SACA,WACA,MACA,QACA,YACA,cACA,UACA,UACA,iBACA,eACA,YACA,cACA,UAGA,WAC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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/ast.ts","../src/constants.ts","../src/tokenizer.ts","../src/minifier.ts","../src/parser.ts"],"sourcesContent":null,"names":["Literal","value","Identifier","Type","name","parameters","VariableDeclarator","VariableDeclaration","layout","qualifiers","kind","type","declarations","StructDeclaration","members","FunctionDeclaration","args","body","UnaryExpression","operator","left","right","BinaryExpression","TernaryExpression","test","consequent","alternate","CallExpression","callee","MemberExpression","object","property","ArrayExpression","BlockStatement","IfStatement","ForStatement","init","update","WhileStatement","DoWhileStatement","SwitchCase","SwitchStatement","discriminant","cases","ReturnStatement","argument","PreprocessorStatement","PrecisionStatement","precision","ContinueStatement","BreakStatement","DiscardStatement","WGSL_KEYWORDS","GLSL_KEYWORDS","SYMBOLS","GLSL_SYMBOLS","WGSL_SYMBOLS","isWGSL","isFloat","isInt","isBool","ZERO","NINE","A","Z","LF","CR","TAB","SPACE","UNDERSCORE","SLASH","STAR","HASH","AT","isDigit","c","isAlpha","isLine","isSpace","isIdent","isMacro","tokenize","code","index","tokens","prev","KEYWORDS","char","terminator","symbol","isWord","isSymbol","isName","isScoped","isStorage","minify","mangle","mangleMap","mangleExternals","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","mangleCache","token","mangleIndex","lineIndex","blockIndex","minified","i","prefix","namespace","storage","list","renamed","cache","j","UNARY_OPERATORS","BINARY_OPERATORS","TYPE_REGEX","QUALIFIER_REGEX","VARIABLE_REGEX","isDeclaration","isOpen","isClose","getScopeDelta","readUntil","offset","output","scopeIndex","consumeUntil","parseExpression","first","last","leftBody","rightBody","testBody","consequentBody","alternateBody","second","scope","line","arg","expression","next","parseVariable","delimiter","parseFunction","header","parseBlock","parseIndeterminate","key","parseStruct","parseReturn","parseIf","parseWhile","parseFor","delimiterIndex","parseDoWhile","parseSwitch","parseStatements","parsePrecision","parsePreprocessor","statement","DIRECTIVE_REGEX","parse"],"mappings":"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,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UAGA,QACA,SACA,OACA,MACA,MACA,MAUA,MACA,UACA,qBACA,aACA,aACA,mBACA,aACA,eACA,qBACA,0BACA,qBACA,qBACA,2BACA,qBACA,mBACA,yBACA,qBACA,2BACA,gCACA,MAMA,QACA,UACA,QACA,OACA,QACA,eACA,WACA,aACA,UACA,UACA,OACA,SACA,QACA,KACA,MACA,KACA,MACA,OACA,WACA,SACA,SACA,SACA,OACA,MACA,QAGA,aACA,OACA,OACA,WACA,SACA,UACA,UACA,KACA,MACA,eACA,QACA,YACA,OACA,QACA,SACA,OACA,gBACA,OACA,QACA,QACA,WACA,YACA,WACA,WACA,eACA,SACA,UACA,mBACA,UACA,aACA,YACA,YACA,YACA,QACA,WACA,WACA,SACA,SACA,mBACA,KACA,eACA,OACA,WACA,SACA,UACA,SACA,WACA,MACA,cACA,SACA,QACA,UACA,SACA,OACA,UACA,MACA,OACA,cACA,SACA,QACA,MACA,MACA,KACA,OACA,aACA,SACA,SACA,aACA,YACA,SACA,OACA,QACA,cACA,QACA,UACA,OACA,MACA,SACA,OACA,MACA,UACA,YACA,MACA,MACA,WACA,WACA,kBACA,gBACA,OACA,UACA,KACA,WACA,UACA,aACA,YACA,OACA,QACA,gBACA,UACA,YACA,WACA,OACA,YACA,MACA,SACA,OACA,WACA,MACA,aACA,WACA,mBACA,WACA,WACA,WACA,OACA,MACA,SACA,SACA,SACA,QACA,SACA,gBACA,cACA,MACA,aACA,QACA,SACA,WACA,OACA,eACA,QACA,QACA,MACA,OACA,UACA,SACA,WACA,SACA,MACA,MACA,KACA,QACA,SACA,QACA,SACA,UACA,MACA,QACA,UACA,UACA,WACA,OACA,QACA,OACA,YACA,QAGA,SACA,WACA,WACA,WACA,SACA,YACA,SACA,MACA,eACA,aACA,YACA,QACA,UACA,kBAGA,cACA,SACA,OAGA,SACA,WACA,SAGA,eACA,iBACA,WACA,eACA,aACA,sBACA,yBACA,uBACA,eACA,iBACA,eACA,cAGA,OACA,QACA,aAGA,WACA,UACA,YACA,UACA,UAGA,aACA,aACA,YACA,YACA,aACA,aACA,cACA,UACA,UACA,WACA,WACA,WACA,YACA,aACA,aACA,cACA,aAGA,MAGA,MACA,MACA,SAGA,cAGA,MACA,OACA,QACA,OACA,QACA,OACA,QACA,QACA,OACA,QACA,MACA,OACA,oBACA,eACA,qBACA,QACA,UACA,cACA,WACA,MACA,MACA,OACA,cACA,cACA,kBACA,mBACA,QACA,MACA,QACA,QACA,aACA,cACA,QACA,SACA,MACA,OACA,MACA,MACA,MACA,OACA,YACA,MACA,gBACA,UACA,UACA,UACA,cACA,QACA,WACA,OACA,MACA,OACA,aACA,OACA,OACA,MACA,OACA,YACA,QAGA,OACA,aACA,WACA,OACA,aACA,WACA,SACA,eACA,aAGA,oBACA,gBACA,uBACA,cACA,mBACA,mBACA,oBACA,gBACA,oBACA,uBACA,4BACA,oBACA,qBACA,+BAGA,aACA,cACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,iBACA,4BAGA,eACA,eACA,gBACA,gBACA,gBAGA,iBACA,iBACA,kBACA,kBACA,kBAGA,iBACA,mBACA,sBACF,EAIaC,GAAgB,CAE3B,QACA,UACA,SACA,WACA,OACA,SACA,QACA,WACA,KACA,MACA,QACA,SACA,OACA,UACA,KACA,OACA,KACA,MACA,QACA,QACA,MACA,OACA,OACA,OACA,QACA,YACA,UACA,SACA,OACA,OACA,OACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,OACA,UACA,QACA,YACA,YACA,YACA,cACA,kBACA,oBACA,iBACA,uBACA,aACA,aACA,eACA,kBACA,aACA,aACA,eACA,kBACA,SAGA,YACA,UACA,WACA,WACA,WACA,WACA,YACA,WACA,cACA,gBACA,QACA,SACA,aACA,SACA,YACA,SACA,MACA,QACA,QACA,OACA,UACA,WACA,OACA,OACA,SACA,WACA,WACA,SACA,SACA,SACA,WACA,YACA,OACA,QACA,SACA,OACA,QACA,WACA,SACA,QACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,gBACA,SACA,UACA,UACA,UACA,YACA,WACA,WACA,WACA,aACA,WACA,WACA,WACA,aACA,eACA,eACA,gBACA,gBACA,gBACA,gBACA,cACA,eACA,eACA,YACA,kBACA,iBACA,uBACA,aACA,kBACA,aACA,kBACA,gBACA,sBACA,iBACA,iBACA,gBACA,iBACA,iBACA,cACA,eACA,eACA,mBACA,oBACA,oBACA,SACA,OACA,YACA,QAGA,UACA,SACA,MACA,SACA,UACA,QACA,QACA,SACA,SACA,UACA,aACA,WACA,QAGA,UAGA,WACA,WACA,cACA,QAGA,cACA,gBACA,cACA,eAGA,eACA,iBACA,eACA,gBAGA,sBACA,6BACA,4BACA,6BACA,gCACA,kCACA,0BACA,+BACA,oBACA,2BACA,2BAGA,0BACA,gBAGA,UACA,UACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QAGA,MACA,MACA,MACA,OACA,OACA,OACA,cAGA,MACA,OACA,QACA,QACA,QACA,YACA,OACA,QACA,MACA,OACA,MACA,MACA,QACA,MACA,OACA,aACA,QACA,QACA,iBACA,kBACA,iBACA,kBAGA,gBACA,kBACA,gBACA,kBACA,eACA,iBAGA,SACA,WACA,MACA,QACA,YACA,cACA,UACA,UACA,iBACA,eACA,YACA,cACA,UAGA,WACA,gBACA,cACA,mBACA,QACA,WACA,MACA,MACA,MAGA,cACA,UACA,cACA,aACA,gBACA,aACA,mBACA,oBACA,mBACA,iBACA,uBACA,cACA,oBACA,kBACA,wBAGA,OACA,OACA,SAGA,WAGA,YAIA,gBACA,mBACF,EAEMC,GAAU,CAEd,KACA,KACA,KAGA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IAGA,IACA,KACA,KACA,IAGA,IACA,IACA,IACA,IACA,KACA,IACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,IACA,IACA,KACA,KAGA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,IACF,EAGaC,GAAe,CAC1B,GAAGD,GAEH,IAEA,IACF,EAGaE,GAAe,CAC1B,GAAGF,GAEH,KAEA,GACF,EC13BMG,GAAS,OAAO,UAAU,KAAK,KAAK,gDAAgD,EAEpFC,GAAU,OAAO,UAAU,KAAK,KAAK,+CAA+C,EACpFC,GAAQ,OAAO,UAAU,KAAK,KAAK,6BAA6B,EAChEC,GAAS,OAAO,UAAU,KAAK,KAAK,gBAAgB,EAEpDC,GAAO,GACPC,GAAO,GACPC,GAAI,GACJC,GAAI,GACJC,GAAK,GACLC,GAAK,GACLC,GAAM,EACNC,GAAQ,GACRC,GAAa,GACbC,GAAQ,GACRC,GAAO,GACPC,GAAO,GACPC,GAAK,GAELC,GAAWC,GAAcd,IAAQc,GAAKA,GAAKb,GAC3Cc,GAAWD,IAAgBA,GAAK,IAAMZ,IAAKY,GAAKA,GAAKX,IACrDa,GAAUF,GAAcA,IAAMV,IAAMU,IAAMT,GAC1CY,GAAWH,GAAcE,GAAOF,CAAC,GAAKA,IAAMR,IAAOQ,IAAMP,GACzDW,GAAWJ,GAAcC,GAAQD,CAAC,GAAKD,GAAQC,CAAC,GAAKA,IAAMN,GAC3DW,GAAWL,GAAcA,IAAMH,IAAQG,IAAMF,GAKnC,SAAAQ,EAASC,EAAcC,EAAgB,EAAY,CACjE,MAAMC,EAAkB,CAAA,EAExB,IAAIC,EAAe,GACnB,KAAM,CAACC,EAAUhC,CAAO,EAAIG,GAAOyB,CAAI,EAAI,CAAC9B,GAAeI,EAAY,EAAI,CAACH,GAAeE,EAAY,EAChG4B,KAAAA,EAAQD,EAAK,QAAQ,CACtBjF,IAAAA,EAAQiF,EAAKC,CAAK,EAChBI,MAAAA,EAAOL,EAAK,WAAWC,GAAO,EAEhCL,GAAAA,GAAQS,CAAI,EAAG,CACjB,KAAOT,GAAQI,EAAK,WAAWC,CAAK,CAAC,GAAGlF,GAASiF,EAAKC,GAAO,EAC7DC,EAAO,KAAK,CAAE,KAAM,aAAc,MAAAnF,CAAO,CAAA,CAAA,SAChCyE,GAAQa,CAAI,EAAG,CACjB7B,KAAAA,GAAQzD,EAAQiF,EAAKC,CAAK,CAAC,GAAKxB,GAAM1D,EAAQiF,EAAKC,CAAK,CAAC,GAAGlF,GAASiF,EAAKC,GAAO,EACpFzB,GAAQzD,CAAK,EAAGmF,EAAO,KAAK,CAAE,KAAM,QAAS,MAAAnF,CAAO,CAAA,EACnDmF,EAAO,KAAK,CAAE,KAAM,MAAO,MAAAnF,CAAO,CAAA,CAAA,SAC9B8E,GAAQQ,CAAI,EAAG,CACxB,KAAOR,GAAQG,EAAK,WAAWC,CAAK,CAAC,GAAGlF,GAASiF,EAAKC,GAAO,EACzDvB,GAAO3D,CAAK,EAAGmF,EAAO,KAAK,CAAE,KAAM,OAAQ,MAAAnF,CAAO,CAAA,EAC7CqF,EAAS,SAASN,GAAQK,CAAI,EAAI,OAAO,aAAaA,CAAI,EAAIpF,EAAQA,CAAK,EAClFmF,EAAO,KAAK,CAAE,KAAM,UAAW,MAAAnF,CAAO,CAAA,EACnCmF,EAAO,KAAK,CAAE,KAAM,aAAc,MAAAnF,CAAO,CAAA,CACrC,SAAAsF,IAASjB,KAAUY,EAAK,WAAWC,CAAK,IAAMb,IAASY,EAAK,WAAWC,CAAK,IAAMZ,IAAO,CAClG,MAAMiB,EAAaN,EAAK,WAAWC,CAAK,IAAMZ,GAAO,KAAO;AAAA,EACrD,KAAA,CAACtE,EAAM,SAASuF,CAAU,GAAGvF,GAASiF,EAAKC,GAAO,EACzDC,EAAO,KAAK,CAAE,KAAM,UAAW,MAAAnF,CAAO,CAAA,CAAA,KACjC,CACL,UAAWwF,KAAUnC,EACfmC,EAAO,OAASxF,EAAM,QAAUiF,EAAK,WAAWO,EAAQN,EAAQ,CAAC,IAAWlF,EAAAwF,GAElFN,GAASlF,EAAM,OAAS,EACxBmF,EAAO,KAAK,CAAE,KAAM,SAAU,MAAAnF,CAAO,CAAA,CACvC,CACOoF,EAAAE,CACT,CAEOH,OAAAA,CACT,CChEA,MAAMM,GAAS,OAAO,UAAU,KAAK,KAAK,KAAK,EACzCC,GAAW,OAAO,UAAU,KAAK,KAAK,SAAS,EAC/CC,GAAS,OAAO,UAAU,KAAK,KAAK,YAAY,EAChDC,GAAW,OAAO,UAAU,KAAK,KAAK,UAAU,EAChDC,GAAY,OAAO,UAAU,KAAK,KAAK,2DAA2D,EAKjG,SAASC,GACdb,EACA,CAAE,OAAAc,EAAS,GAAO,UAAAC,EAAgB,IAAA,IAAO,gBAAAC,EAAkB,EAAM,EAA4B,CAAA,EACrF,CHzBHC,IAAAA,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EG2BEtC,EAAAA,EAAK,QAAQ,gCAAiC,QAAQ,EAEvD,MAAAuC,EAAkB,IAAA,IAClBrC,EAAkBH,EAASC,CAAI,EAAE,OAAQwC,GAAUA,EAAM,OAAS,cAAgBA,EAAM,OAAS,SAAS,EAEhH,IAAIC,EAAsB,GACtBC,GAAoB,GACpBC,EAAqB,GACrBC,EAAmB,GACvB,QAASC,EAAI,EAAGA,EAAI3C,EAAO,OAAQ2C,IAAK,CAChCL,MAAAA,EAAQtC,EAAO2C,CAAC,GAGlBjC,GAAU4B,EAAM,KAAK,GAAK7B,IAASM,EAAAf,EAAO2C,EAAI,CAAC,IAAZ,YAAA5B,EAAe,KAAK,KAAeyB,GAAAG,GAGtEL,EAAM,QAAU,KAAO9B,IAAOQ,EAAAhB,EAAO2C,EAAI,CAAC,IAAZ,YAAA3B,EAAe,KAAK,EAAGyB,EAAaE,EAAI,EACjEL,EAAM,QAAU,MAAkBG,EAAA,IAGvCnC,GAAOgC,EAAM,KAAK,GAAKhC,IAAOW,EAAAjB,EAAO2C,EAAI,CAAC,IAAZ,KAAA1B,OAAAA,EAAe,KAAK,IAAeyB,GAAA,KAInEnC,GAAS+B,EAAM,KAAK,MAClBpB,EAAAlB,EAAO2C,EAAI,CAAC,IAAZ,KAAAzB,OAAAA,EAAe,SAAU,OAAOC,EAAAnB,EAAO2C,EAAI,CAAC,IAAZ,KAAAxB,OAAAA,EAAe,SAAU,aACxDC,EAAApB,EAAO2C,EAAI,CAAC,IAAZ,KAAAvB,OAAAA,EAAe,SAAU,OAAOC,EAAArB,EAAO2C,EAAI,CAAC,IAAZ,KAAAtB,OAAAA,EAAe,SAAU,YAEhDqB,GAAA,KAEd,IAAIE,EAASN,EAAM,MACfhB,KAAAA,EAAAtB,EAAO2C,EAAI,CAAC,IAAZ,KAAArB,OAAAA,EAAe,SAAU,MAC3BsB,EAAS,IAAGrB,EAAAvB,EAAO2C,EAAI,CAAC,IAAZ,KAAA,OAAApB,EAAe,KAAK,IAAMqB,GAKtCN,EAAM,OAAS,cAEfM,IAAW,SACV,OAAOhC,GAAW,UAAYA,EAASA,EAAO0B,EAAOK,EAAG3C,CAAM,GAC/D,CACM,MAAA6C,KAAYrB,EAAAxB,EAAO2C,EAAI,CAAC,IAAZ,KAAAnB,OAAAA,EAAe,SAAU,OAAOC,EAAAzB,EAAO2C,EAAI,CAAC,IAAZ,KAAA,OAAAlB,EAAe,SAAU,IACrEqB,EAAUpC,IAAUgB,EAAA1B,EAAOwC,EAAS,IAAhB,KAAA,OAAAd,EAAmB,KAAK,EAC5CqB,GAAOD,KAAWnB,EAAA3B,EAAO2C,EAAI,CAAC,IAAZ,KAAA,OAAAhB,EAAe,SAAU,IAC7CqB,IAAAA,GAAUpB,EAAAf,EAAU,IAAI+B,CAAM,IAApB,KAAAhB,EAAyBS,EAAY,IAAIO,CAAM,EAC7D,GAEE,CAACI,GAEDP,IAAe,KAEdjC,IAAOqB,EAAA7B,EAAO2C,EAAI,CAAC,IAAZ,KAAA,OAAAd,EAAe,KAAK,GAE1BgB,IAEAE,MAECjB,EAAA9B,EAAO2C,EAAI,CAAC,IAAZ,YAAAb,EAAe,QAAS,YAAYC,EAAA/B,EAAO2C,EAAI,CAAC,IAAZ,KAAA,OAAAZ,EAAe,SAAU,OAE/DjB,GAAmB,CAACgC,GACrB,CAcM,MAAAG,GATHnC,GAAmBgC,KAEpBd,EAAAhC,EAAO2C,EAAI,CAAC,IAAZ,KAAA,OAAAX,EAAe,SAAU,KAEzBa,IAEAE,MAECd,EAAAjC,EAAO2C,EAAI,CAAC,IAAZ,KAAAV,OAAAA,EAAe,SAAU,SAASC,EAAAlC,EAAO2C,EAAI,CAAC,IAAZ,KAAA,OAAAT,EAAe,SAAU,OAAOC,EAAAnC,EAAO2C,EAAI,CAAC,IAAZ,KAAAR,OAAAA,EAAe,SAAU,KACnEtB,EAAYwB,EAEvC,KAAO,CAACW,GAAWC,GAAM,IAAID,CAAO,GAAG,CAC3BA,EAAA,GACVT,IAEA,IAAIW,EAAIX,EACR,KAAOW,EAAI,GACTF,EAAU,OAAO,aAAa,IAAOE,EAAI,GAAK,EAAG,EAAIF,EACjDE,EAAA,KAAK,MAAMA,EAAI,EAAE,CAEzB,CAEMD,GAAA,IAAIL,EAAQI,CAAO,CAC3B,CAEAN,GAAYM,GAAA,KAAAA,EAAWV,EAAM,KAAA,MAEzBA,EAAM,QAAU,OAAOF,EAAApC,EAAO2C,EAAI,CAAC,IAAZ,KAAAP,OAAAA,EAAe,SAAU,KAAkBM,GAAA;AAAA,GAC7DJ,EAAM,QAAU,KAAkBI,GAAA;AAAA,EACtCA,GAAYJ,EAAM,KAE3B,CAEA,OAAOI,EAAS,MAClB,CChGA,MAAMS,GAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,KAAM,IAAI,EAEjDC,GAAmB,CACvB,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,KACA,KACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,GACF,EAGMC,GAAa,oDACbC,GAAkB,mFAClBC,GAAiB,IAAI,OAAO,GAAGF,GAAW,MAAM,IAAIC,GAAgB,MAAM,SAAS,EAEnFE,GAAgB,OAAO,UAAU,KAAK,KAAKD,EAAc,EAEzDE,GAAS,OAAO,UAAU,KAAK,KAAK,YAAY,EAChDC,GAAU,OAAO,UAAU,KAAK,KAAK,YAAY,EAEvD,SAASC,EAAcrB,EAAsB,CACvCmB,OAAAA,GAAOnB,EAAM,KAAK,EAAU,EAC5BoB,GAAQpB,EAAM,KAAK,EAAU,GAC1B,CACT,CAEA,IAAItC,EAAkB,CAAA,EAClB2C,EAAY,EAEhB,SAASiB,EAAU/I,EAAegB,EAAegI,EAAiB,EAAY,CAC5E,MAAMC,EAAkB,CAAA,EACxB,IAAIC,EAAa,EAEVF,KAAAA,EAAShI,EAAK,QAAQ,CACrByG,MAAAA,EAAQzG,EAAKgI,GAAQ,EAC3BC,GAAAA,EAAO,KAAKxB,CAAK,EAEjByB,GAAcJ,EAAcrB,CAAK,EAC7ByB,IAAe,GAAKzB,EAAM,QAAUzH,EAAO,KACjD,CAEOiJ,OAAAA,CACT,CAEA,SAASE,EAAanJ,EAAwB,CAC5C,MAAMiJ,EAASF,EAAU/I,EAAOmF,EAAQ2C,CAAC,EACzCA,OAAAA,GAAKmB,EAAO,OACLA,CACT,CAEA,SAASG,EAAgBpI,EAA2B,CJ3G7C,IAAAkF,EAAAC,EAAAC,EI4GL,GAAIpF,EAAK,SAAW,EAAU,OAAA,KAExBqI,MAAAA,EAAQrI,EAAK,CAAC,EACdsI,EAAOtI,EAAKA,EAAK,OAAS,CAAC,EACjC,GAAIsH,GAAgB,SAASe,EAAM,KAAK,EAAG,CACzC,MAAMjI,EAAQgI,EAAgBpI,EAAK,MAAM,CAAC,CAAC,EAC3C,OAAO,IAAIC,EAAgBoI,EAAM,MAAO,KAAMjI,CAAK,CAC1C,SAAAkH,GAAgB,SAASgB,EAAK,KAAK,EAAG,CACzCnI,MAAAA,EAAOiI,EAAgBpI,EAAK,MAAM,EAAGA,EAAK,OAAS,CAAC,CAAC,EAC3D,OAAO,IAAIC,EAAgBqI,EAAK,MAAOnI,EAAM,IAAI,CACnD,CAEIkI,GAAAA,EAAM,QAAU,IAAK,CACjB,MAAAE,EAAWR,EAAU,IAAK/H,CAAI,EAC9BG,EAAOiI,EAAgBG,EAAS,MAAM,EAAGA,EAAS,OAAS,CAAC,CAAC,EAE7DrI,EAAWF,EAAKuI,EAAS,MAAM,EACrC,GAAIrI,EAAU,CACNsI,MAAAA,EAAYxI,EAAK,MAAMuI,EAAS,OAAS,CAAC,EAC1CnI,EAAQgI,EAAgBI,CAAS,EAEvC,OAAO,IAAInI,EAAiBH,EAAS,MAAOC,EAAMC,CAAK,CACzD,CAEOD,OAAAA,CACT,CAEA,IAAI+H,EAAa,EAEjB,UAAWhI,KAAYqH,GACrB,QAAST,EAAI,EAAGA,EAAI9G,EAAK,OAAQ8G,IAAK,CAC9BL,MAAAA,EAAQzG,EAAK8G,CAAC,EAChBL,GAAAA,EAAM,OAAS,SAInB,CAAA,GAFAyB,GAAcJ,EAAcrB,CAAK,EAE7ByB,IAAe,GAAKzB,EAAM,QAAUvG,EACtC,GAAIA,IAAa,IAAK,CACpB,MAAMuI,EAAWzI,EAAK,MAAM,EAAG8G,CAAC,EAC1B4B,EAAiBX,EAAU,IAAK/H,EAAM8G,EAAI,CAAC,EAAE,MAAM,EAAG,EAAE,EACxD6B,EAAgB3I,EAAK,MAAM8G,EAAI4B,EAAe,OAAS,CAAC,EAExDnI,EAAO6H,EAAgBK,CAAQ,EAC/BjI,EAAa4H,EAAgBM,CAAc,EAC3CjI,EAAY2H,EAAgBO,CAAa,EAE/C,OAAO,IAAIrI,GAAkBC,EAAMC,EAAYC,CAAS,CAAA,KACnD,CACL,MAAMN,EAAOiI,EAAgBpI,EAAK,MAAM,EAAG8G,CAAC,CAAC,EACvC1G,EAAQgI,EAAgBpI,EAAK,MAAM8G,EAAI,EAAG9G,EAAK,MAAM,CAAC,EAE5D,OAAO,IAAIK,EAAiBH,EAAUC,EAAMC,CAAK,CACnD,CAGF,GAAI8H,EAAa,EACf,OAAOE,EAAgBpI,EAAK,MAAM,EAAG8G,CAAC,CAAC,CAAA,CAE3C,CAGE,GAAAuB,EAAM,OAAS,QAAUA,EAAM,OAAS,OAASA,EAAM,OAAS,QAC3D,OAAA,IAAItJ,GAAQsJ,EAAM,KAAK,KACrBA,EAAM,OAAS,cAAgBA,EAAM,OAAS,UAAW,CAC5DO,MAAAA,EAAS5I,EAAK,CAAC,EAEhB4I,GAAAA,GAEMA,GAAAA,EAAO,QAAU,IAAK,CAC/B,MAAMjI,EAAS,IAAI1B,EAAWoJ,EAAM,KAAK,EACnCtI,EAAc,CAAA,EAEd8I,EAAQd,EAAU,IAAK/H,EAAM,CAAC,EAAE,MAAM,EAAG,EAAE,EAEjD,IAAIqH,EAAI,EACDA,KAAAA,EAAIwB,EAAM,QAAQ,CACvB,MAAMC,EAAOf,EAAU,IAAKc,EAAOxB,CAAC,EACpCA,GAAKyB,EAAK,SACN5D,EAAA4D,EAAKA,EAAK,OAAS,CAAC,IAApB,KAAA5D,OAAAA,EAAuB,SAAU,KAAK4D,EAAK,IAAI,EAE7CC,MAAAA,EAAMX,EAAgBU,CAAI,EAC5BC,GAAKhJ,EAAK,KAAKgJ,CAAG,CACxB,CAEA,MAAMC,EAAa,IAAItI,GAAeC,EAAQZ,CAAI,EAGlD,IAAI+G,EAAI,EAAIO,EACZ,KAAIlC,EAAAnF,EAAK8G,CAAC,IAAN,KAAA3B,OAAAA,EAAS,SAAU,IAAK,CACpB/E,MAAAA,EAAQgI,EAAgB,CAACC,EAAO,GAAGrI,EAAK,MAAM8G,CAAC,CAAC,CAAC,EACvD1G,OAAAA,EAAM,OAAS4I,EACR5I,CACT,CAEO4I,OAAAA,CAAA,SACEJ,EAAO,QAAU,IAAK,CAC/B,MAAM/H,EAAS,IAAI5B,EAAWoJ,EAAM,KAAK,EACnCvH,EAAWsH,EAAgB,CAACpI,EAAK,CAAC,CAAC,CAAC,EACpCG,EAAO,IAAIS,GAAiBC,EAAQC,CAAQ,EAG9CsE,KAAAA,EAAApF,EAAK,CAAC,IAAN,KAAA,OAAAoF,EAAS,SAAU,KAAOkD,EAAK,QAAU,IAAK,CAChD,MAAMlI,EAAQgI,EAAgBpI,EAAK,MAAM,CAAC,CAAC,EAC3CI,OAAAA,EAAM,OAASD,EACRC,CACT,CAEOD,OAAAA,CAAA,SACEyI,EAAO,QAAU,IAAK,CAC/B,IAAI9B,EAAI,EAER,MAAMpH,EAAO,IAAIR,EAAKmJ,EAAM,MAAO,CAAE,CAAA,EAEjCrI,EAAK8G,CAAC,EAAE,QAAU,KAAUpH,EAAA,WAAY,KAAK0I,EAAgB,CAACpI,EAAK8G,GAAG,CAAC,CAAC,CAAQ,EACpFA,IAEM+B,MAAAA,EAAQd,EAAU,IAAK/H,EAAM8G,CAAC,EAAE,MAAM,EAAG,EAAE,EAE3CjH,EAAiB,CAAA,EAEvB,IAAIwH,EAAI,EACDA,KAAAA,EAAIwB,EAAM,QAAQ,CACvB,MAAMI,EAAOlB,EAAU,IAAKc,EAAOxB,CAAC,EACpCA,GAAK4B,EAAK,OAENA,EAAKA,EAAK,OAAS,CAAC,EAAE,QAAU,KAAKA,EAAK,IAAI,EAE1CpJ,EAAA,KAAKuI,EAAgBa,CAAI,CAAE,CACrC,CAEO,OAAA,IAAIlI,EAAgBrB,EAAMG,CAAO,CAC1C,MAhES,QAAA,IAAIZ,EAAWoJ,EAAM,KAAK,CAiErC,CAEO,OAAA,IACT,CAEA,SAASa,GACP1J,EAAuB,GACvBD,EAAkD,KAC7B,CACrBuH,IAEA,MAAMrH,EAAO,KACPC,EAAO,IAAIR,EAAKiF,EAAO2C,GAAG,EAAE,MAAO,IAAI,EAEvCnH,EAAqC,CAAA,EAErCK,EAAOmI,EAAa,GAAG,EAC7B,IAAId,EAAI,EAEDA,KAAAA,EAAIrH,EAAK,QAAQ,CAChBb,MAAAA,EAAOa,EAAKqH,GAAG,EAAE,MAEvB,IAAIN,EAAqB,KACrB/G,EAAKqH,CAAC,EAAE,QAAU,MACpBA,IACAN,EAAS,IAAIhG,EAAgB,IAAI7B,EAAKQ,EAAK,KAAM,CAAC0I,EAAgB,CAACpI,EAAKqH,GAAG,CAAC,CAAC,CAAQ,CAAC,EAAG,CAAE,CAAA,EAC3FA,KAGF,IAAIrI,EAAoB,KAElBmK,MAAAA,EAAYnJ,EAAKqH,GAAG,EACtB,IAAA8B,GAAA,KAAA,OAAAA,EAAW,SAAU,IAAK,CAC5B,MAAM/I,EAAQ2H,EAAU,IAAK/H,EAAMqH,CAAC,EACpCA,GAAKjH,EAAM,OAEXpB,EAAQoJ,EAAgBhI,EAAM,MAAM,EAAG,EAAE,CAAC,CAC5C,CAEAT,EAAa,KAAK,IAAIN,EAAmBF,EAAMH,GAAA,KAAAA,EAAS+H,CAAM,CAAC,CACjE,CAEA,OAAO,IAAIzH,EAAoBC,EAAQC,EAAYC,EAAMC,EAAMC,CAAY,CAC7E,CAEA,SAASyJ,GAAc5J,EAA2C,CJ7R3D,IAAA0F,EAAAC,EAAAC,EI8RL0B,IAEMpH,MAAAA,EAAO,IAAIR,EAAKiF,EAAO2C,GAAG,EAAE,MAAO,IAAI,EACvC3H,EAAOgF,EAAO2C,GAAG,EAAE,MACnB/G,EAA8B,CAAA,EAG9BsJ,EAASlB,EAAa,GAAG,EAAE,MAAM,EAAG,EAAE,EAC5C,IAAId,EAAI,EACDA,KAAAA,EAAIgC,EAAO,QAAQ,CACxB,MAAM7J,EAAuB,CAAA,EAC7B,KAAO6J,EAAOhC,CAAC,GAAKgC,EAAOhC,CAAC,EAAE,OAAS,cACrC7H,EAAW,KAAK6J,EAAOhC,GAAG,EAAE,KAAK,EAEnC,MAAM3H,EAAO,IAAIR,EAAKM,EAAW,IAAA,EAAQ,IAAI,EAEvCsJ,EAAOf,EAAU,IAAKsB,EAAQhC,CAAC,EACrCA,GAAKyB,EAAK,OAEJ3J,MAAAA,EAAO2J,EAAK,MAAA,EAAS,MAE3B,IAAI/B,EAAqB,OACrB7B,EAAA4D,EAAK,CAAC,IAAN,YAAA5D,EAAS,SAAU,MACrB4D,EAAK,MAAM,EACX/B,EAAS,IAAIhG,EAAgB,IAAI7B,EAAKQ,EAAK,KAAM,CAAC0I,EAAgB,CAACU,EAAK,MAAQ,CAAA,CAAC,CAAQ,CAAC,EAAG,CAAE,CAAA,EAC/FA,EAAK,MAAM,KAGT3D,EAAA2D,EAAKA,EAAK,OAAS,CAAC,IAApB,YAAA3D,EAAuB,SAAU,KAAK2D,EAAK,IAAI,EAE7C,MAAA9J,GAAQoG,EAAAgD,EAAgBU,CAAI,IAApB,KAAA1D,EAAyB2B,EAEjCpH,EAAqC,CAAC,IAAIN,EAAmBF,EAAMH,CAAK,CAAC,EAE1Ee,EAAA,KAAK,IAAIT,EAAoB,KAAME,EAAY,KAAME,EAAMC,CAAY,CAAC,CAC/E,CAEA,IAAIK,EAAO,KACP,OAAAmE,EAAO2C,CAAC,EAAE,QAAU,IAAKA,IACxB9G,EAAOsJ,EAAW,EAEhB,IAAIxJ,GAAoBX,EAAMO,EAAMF,EAAYO,EAAMC,CAAI,CACnE,CAEA,SAASuJ,IAAgE,CJ1UlErE,IAAAA,EI2UL4B,IAEA,IAAIvH,EAAkD,KACtD,GAAI4E,EAAO2C,CAAC,EAAE,QAAU,SAAU,CAChCA,IAEAvH,EAAS,CAAA,EAET,IAAIiK,EAAqB,KACzB,KAAOrF,EAAO2C,CAAC,GAAK3C,EAAO2C,CAAC,EAAE,QAAU,KAAK,CACrCL,MAAAA,EAAQtC,EAAO2C,GAAG,EAEpBL,EAAM,QAAU,MAAW+C,EAAA,MAC3B/C,EAAM,OAAS,WAEd+C,EAIIjK,EAAAiK,CAAG,EAAI/C,EAAM,OAHpB+C,EAAM/C,EAAM,MACZlH,EAAOiK,CAAG,EAAI,IAIlB,CAEA1C,GACF,CAEA,MAAMtH,EAAuB,CAAA,EACtB2E,KAAAA,EAAO2C,CAAC,GAAKW,GAAgB,KAAKtD,EAAO2C,CAAC,EAAE,KAAK,GACtDtH,EAAW,KAAK2E,EAAO2C,GAAG,EAAE,KAAK,EAEnC,OAAAA,MAEO5B,EAAAf,EAAO2C,EAAI,CAAC,IAAZ,KAAA,OAAA5B,EAAe,SAAU,IAAMkE,GAAc5J,CAAU,EAAI0J,GAAc1J,EAAYD,CAAM,CACpG,CAEA,SAASkK,IAAiC,CAClCtK,MAAAA,EAAOgF,EAAO2C,GAAG,EAAE,MACzBA,IACA,MAAMjH,EAAiC,CAAA,EACvC,KAAOsE,EAAO2C,CAAC,GAAK3C,EAAO2C,CAAC,EAAE,QAAU,KACtCA,IACQjH,EAAA,KAAK0J,IAA2C,EAE1D,OAAAzC,IACAA,IAEO,IAAIlH,GAAkBT,EAAMU,CAAO,CAC5C,CAEA,SAAS6J,IAA+B,CAChC1J,MAAAA,EAAOmI,EAAa,GAAG,EAC7BnI,EAAK,IAAI,EAEH4B,MAAAA,EAAWwG,EAAgBpI,CAAI,EAE9B,OAAA,IAAI2B,GAAgBC,CAAe,CAC5C,CAEA,SAAS+H,IAAuB,CAC9B,MAAMpJ,EAAO6H,EAAgBD,EAAa,GAAG,CAAC,EACxC3H,EAAa8I,IAEnB,IAAI7I,EAAY,KACZ0D,OAAAA,EAAO2C,CAAC,EAAE,QAAU,SACtBA,IAEI3C,EAAO2C,CAAC,EAAE,QAAU,MACtBA,IACArG,EAAYkJ,GAAQ,GAEpBlJ,EAAY6I,EAAW,GAIpB,IAAIrI,GAAYV,EAAMC,EAAYC,CAAS,CACpD,CAEA,SAASmJ,IAA6B,CACpC,MAAMrJ,EAAO6H,EAAgBD,EAAa,GAAG,CAAC,EACxCnI,EAAOsJ,IAEN,OAAA,IAAIjI,GAAed,EAAMP,CAAI,CACtC,CAEA,SAAS6J,IAAyB,CAChC,MAAMC,EAAiBhD,GAAKiB,EAAU,IAAK5D,EAAQ2C,CAAC,EAAE,OAAS,GAE/DA,IACAA,IAEA,MAAM3F,EAAO+H,KACP3I,EAAO6H,EAAgBD,EAAa,GAAG,EAAE,MAAM,EAAG,EAAE,CAAC,EACrD/G,EAASgH,EAAgBjE,EAAO,MAAM2C,EAAGgD,CAAc,CAAC,EAE1DhD,EAAAgD,EACJhD,IAEA,MAAM9G,EAAOsJ,IAEb,OAAO,IAAIpI,GAAaC,EAAMZ,EAAMa,EAAQpB,CAAI,CAClD,CAEA,SAAS+J,IAAiC,CACxC,MAAM/J,EAAOsJ,IACbxC,IACA,MAAMvG,EAAO6H,EAAgBD,EAAa,GAAG,CAAC,EAC9C,OAAArB,IAEO,IAAIxF,GAAiBf,EAAMP,CAAI,CACxC,CAEA,SAASgK,IAA+B,CACtC,MAAMvI,EAAe2G,EAAgBD,EAAa,GAAG,CAAC,EAChD2B,EAAiBhD,EAAIiB,EAAU,IAAK5D,EAAQ2C,CAAC,EAAE,OAAS,EAExDpF,EAAsB,CAAA,EAC5B,KAAOoF,EAAIgD,GAAgB,CACnBrD,MAAAA,EAAQtC,EAAO2C,GAAG,EAEpBL,GAAAA,EAAM,QAAU,OAAQ,CACpBlG,MAAAA,EAAO6H,EAAgBD,EAAa,GAAG,EAAE,MAAM,EAAG,EAAE,CAAC,EACrD3H,EAAayJ,IACnBvI,EAAM,KAAK,IAAIH,EAAWhB,EAAMC,CAAU,CAAC,CAAA,SAClCiG,EAAM,QAAU,UAAW,CACpCK,IACA,MAAMtG,EAAayJ,IACnBvI,EAAM,KAAK,IAAIH,EAAW,KAAMf,CAAU,CAAC,CAC7C,CACF,CAEO,OAAA,IAAIgB,GAAgBC,EAAeC,CAAK,CACjD,CAEA,SAASwI,IAAqC,CACtC,MAAAnI,EAAYoC,EAAO2C,GAAG,EAAE,MACxBpH,EAAO,IAAIR,EAAKiF,EAAO2C,GAAG,EAAE,MAAO,IAAI,EAC7C,OAAAA,IACO,IAAIhF,GAAmBC,EAAkBrC,CAAI,CACtD,CAEA,SAASyK,IAA2C,CAC5ChL,MAAAA,EAAOgF,EAAO2C,GAAG,EAAE,MAEnB9G,EAAOmI,EAAa,IAAI,EAAE,MAAM,EAAG,EAAE,EAC3C,IAAInJ,EAAsB,KAEtBG,GAAAA,IAAS,QAAUA,IAAS,QAG9B,GAFAH,EAAQ,CAAA,EAEJG,IAAS,SAAU,CACfgB,MAAAA,EAAOiI,EAAgB,CAACpI,EAAK,MAAA,CAAQ,CAAC,EACtCI,EAAQgI,EAAgBpI,CAAI,EAC5BhB,EAAA,KAAKmB,EAAMC,CAAK,CAAA,SACbjB,IAAS,YAAa,CAC/B,MAAMgB,EAAOiI,EAAgB,CAACpI,EAAK,MAAA,CAAQ,CAAC,EAC5CA,EAAK,MAAM,EACLI,MAAAA,EAAQgI,EAAgBpI,CAAI,EAC5BhB,EAAA,KAAKmB,EAAMC,CAAK,CAAA,MACbjB,IAAS,UAClBH,EAAM,KAAKoJ,EAAgBpI,EAAK,MAAM,EAAG,EAAE,CAAC,CAAE,EAExChB,EAAA,KAAKoJ,EAAgBpI,CAAI,CAAE,EAI9B,OAAA,IAAI6B,GAAsB1C,EAAMH,CAAK,CAC9C,CAEA,SAASiL,GAAyB,CAChC,MAAMjK,EAAc,CAAA,EACpB,IAAIkI,EAAa,EAEVpB,KAAAA,EAAI3C,EAAO,QAAQ,CAClBsC,MAAAA,EAAQtC,EAAO2C,GAAG,EAGxB,GADAoB,GAAcJ,EAAcrB,CAAK,EAC7ByB,EAAa,EAAG,MAEpB,IAAIkC,EAAwB,KAExB,GAAA3D,EAAM,QAAU,IAClB2D,EAAYD,GAAkB,UACrB1D,EAAM,OAAS,UACxB,GAAIA,EAAM,QAAU,QAAUA,EAAM,QAAU,UAAW,CACvDK,IACA,KAAA,MACSL,EAAM,QAAU,SAAU2D,EAAYX,GAAY,EACpDhD,EAAM,QAAU,YAAa2D,EAAY,IAAIpI,GAAsB8E,KACnEL,EAAM,QAAU,SAAU2D,EAAY,IAAInI,GAAmB6E,KAC7DL,EAAM,QAAU,WAAY2D,EAAY,IAAIlI,GAAqB4E,KACjEL,EAAM,QAAU,SAAU2D,EAAYV,GAAY,EAClDjD,EAAM,QAAU,KAAM2D,EAAYT,GAAQ,EAC1ClD,EAAM,QAAU,QAAS2D,EAAYR,GAAW,EAChDnD,EAAM,QAAU,MAAO2D,EAAYP,GAAS,EAC5CpD,EAAM,QAAU,KAAM2D,EAAYL,GAAa,EAC/CtD,EAAM,QAAU,SAAU2D,EAAYJ,GAAY,EAClDvD,EAAM,QAAU,YAAa2D,EAAYF,GAAe,EACxDvC,GAAclB,EAAM,KAAK,GAAKtC,EAAO2C,CAAC,EAAE,QAAU,MAAKsD,EAAYb,GAAmB,GAG7Fa,GAAAA,EACFpK,EAAK,KAAKoK,CAAS,MACd,CACL,MAAMtB,EAAO,CAACrC,EAAO,GAAG0B,EAAa,GAAG,CAAC,EACrCW,EAAKA,EAAK,OAAS,CAAC,EAAE,QAAU,KAAKA,EAAK,IAAI,EAC5CE,MAAAA,EAAaZ,EAAgBU,CAAI,EACnCE,GAAYhJ,EAAK,KAAKgJ,CAAU,CACtC,CACF,CAEOhJ,OAAAA,CACT,CAEA,SAASsJ,GAA6B,CACpCxC,IACA,MAAM9G,EAAOiK,IACN,OAAA,IAAIjJ,GAAehB,CAAI,CAChC,CAEA,MAAMqK,GAAkB,gCAKjB,SAASC,GAAMrG,EAAqB,CAElC,OAAAA,EAAAA,EAAK,QAAQ,kBAAmB,EAAE,EAGlCA,EAAAA,EAAK,QAAQoG,GAAiB,QAAQ,EAGpClG,EAAAH,EAASC,CAAI,EAAE,OAAQwC,GAAUA,EAAM,OAAS,cAAgBA,EAAM,OAAS,SAAS,EAC7FK,EAAA,EAEGmD,EAAgB,CACzB"}
|
package/package.json
CHANGED
package/src/ast.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
export class Literal {
|
|
2
|
+
constructor(public value: string /*| number | boolean*/) {}
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export class Identifier {
|
|
6
|
+
constructor(public value: string) {}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export class Type {
|
|
10
|
+
constructor(public name: string, public parameters: (Type | Literal | Identifier)[] | null) {}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class VariableDeclarator {
|
|
14
|
+
constructor(public name: string, public value: AST | null) {}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class VariableDeclaration {
|
|
18
|
+
constructor(
|
|
19
|
+
public layout: Record<string, string | boolean> | null,
|
|
20
|
+
public qualifiers: string[],
|
|
21
|
+
public kind: 'var' | 'let' | 'const' | null,
|
|
22
|
+
public type: Type | Identifier,
|
|
23
|
+
public declarations: VariableDeclarator[],
|
|
24
|
+
) {}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export class StructDeclaration {
|
|
28
|
+
constructor(public name: string, public members: VariableDeclaration[]) {}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export class FunctionDeclaration {
|
|
32
|
+
constructor(
|
|
33
|
+
public name: string,
|
|
34
|
+
public type: Type | Identifier,
|
|
35
|
+
public qualifiers: string[],
|
|
36
|
+
public args: VariableDeclaration[],
|
|
37
|
+
public body: BlockStatement | null,
|
|
38
|
+
) {}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export class UnaryExpression {
|
|
42
|
+
constructor(public operator: string, public left: AST | null, public right: AST | null) {}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class BinaryExpression {
|
|
46
|
+
constructor(public operator: string, public left: AST, public right: AST) {}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export class TernaryExpression {
|
|
50
|
+
constructor(public test: AST, public consequent: AST, public alternate: AST) {}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export class CallExpression {
|
|
54
|
+
constructor(public callee: AST, public args: AST[]) {}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export class MemberExpression {
|
|
58
|
+
constructor(public object: AST, public property: AST) {}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export class ArrayExpression {
|
|
62
|
+
constructor(public type: Type, public members: AST[]) {}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export class BlockStatement {
|
|
66
|
+
constructor(public body: AST[]) {}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export class IfStatement {
|
|
70
|
+
constructor(public test: AST, public consequent: AST, public alternate: AST | null) {}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export class ForStatement {
|
|
74
|
+
constructor(public init: AST | null, public test: AST | null, public update: AST | null, public body: AST) {}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export class WhileStatement {
|
|
78
|
+
constructor(public test: AST, public body: AST) {}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export class DoWhileStatement {
|
|
82
|
+
constructor(public test: AST, public body: AST) {}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export class SwitchCase {
|
|
86
|
+
constructor(public test: AST | null, public consequent: AST[]) {}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export class SwitchStatement {
|
|
90
|
+
constructor(public discriminant: AST, public cases: SwitchCase[]) {}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export class ReturnStatement {
|
|
94
|
+
constructor(public argument: Literal | Identifier | UnaryExpression | null) {}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export class PreprocessorStatement {
|
|
98
|
+
constructor(public name: string, public value: AST[] | null) {}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export class PrecisionStatement {
|
|
102
|
+
constructor(public precision: 'lowp' | 'mediump' | 'highp', public type: Type) {}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export class ContinueStatement {}
|
|
106
|
+
|
|
107
|
+
export class BreakStatement {}
|
|
108
|
+
|
|
109
|
+
export class DiscardStatement {}
|
|
110
|
+
|
|
111
|
+
export type AST =
|
|
112
|
+
| Literal
|
|
113
|
+
| Identifier
|
|
114
|
+
| Type
|
|
115
|
+
| VariableDeclarator
|
|
116
|
+
| VariableDeclaration
|
|
117
|
+
| StructDeclaration
|
|
118
|
+
| FunctionDeclaration
|
|
119
|
+
| UnaryExpression
|
|
120
|
+
| BinaryExpression
|
|
121
|
+
| TernaryExpression
|
|
122
|
+
| CallExpression
|
|
123
|
+
| MemberExpression
|
|
124
|
+
| ArrayExpression
|
|
125
|
+
| BlockStatement
|
|
126
|
+
| IfStatement
|
|
127
|
+
| ForStatement
|
|
128
|
+
| WhileStatement
|
|
129
|
+
| DoWhileStatement
|
|
130
|
+
| SwitchCase
|
|
131
|
+
| SwitchStatement
|
|
132
|
+
| ReturnStatement
|
|
133
|
+
| PreprocessorStatement
|
|
134
|
+
| PrecisionStatement
|
|
135
|
+
| ContinueStatement
|
|
136
|
+
| BreakStatement
|
|
137
|
+
| DiscardStatement
|
package/src/generator.ts
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type AST,
|
|
3
|
+
Literal,
|
|
4
|
+
Identifier,
|
|
5
|
+
Type,
|
|
6
|
+
BlockStatement,
|
|
7
|
+
VariableDeclaration,
|
|
8
|
+
FunctionDeclaration,
|
|
9
|
+
CallExpression,
|
|
10
|
+
MemberExpression,
|
|
11
|
+
ArrayExpression,
|
|
12
|
+
IfStatement,
|
|
13
|
+
WhileStatement,
|
|
14
|
+
ForStatement,
|
|
15
|
+
DoWhileStatement,
|
|
16
|
+
SwitchStatement,
|
|
17
|
+
SwitchCase,
|
|
18
|
+
StructDeclaration,
|
|
19
|
+
UnaryExpression,
|
|
20
|
+
BinaryExpression,
|
|
21
|
+
TernaryExpression,
|
|
22
|
+
ReturnStatement,
|
|
23
|
+
PrecisionStatement,
|
|
24
|
+
ContinueStatement,
|
|
25
|
+
BreakStatement,
|
|
26
|
+
DiscardStatement,
|
|
27
|
+
PreprocessorStatement,
|
|
28
|
+
} from './ast'
|
|
29
|
+
|
|
30
|
+
const EOL_REGEX = /\n$/
|
|
31
|
+
|
|
32
|
+
// Punctuates expression statements
|
|
33
|
+
function punctuate(line: string): string {
|
|
34
|
+
if (!line.endsWith('\n')) line = line + ';\n'
|
|
35
|
+
return line
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// TODO: GLSL-only
|
|
39
|
+
function format(node: AST | null): string {
|
|
40
|
+
let line = ''
|
|
41
|
+
|
|
42
|
+
if (node instanceof Literal || node instanceof Identifier) {
|
|
43
|
+
line = node.value
|
|
44
|
+
} else if (node instanceof Type) {
|
|
45
|
+
line = node.parameters ? `${node.name}<${node.parameters.map(format).join(', ')}>` : node.name
|
|
46
|
+
} else if (node instanceof BlockStatement) {
|
|
47
|
+
const cr = node.body.length ? '\n' : ''
|
|
48
|
+
line = `{${cr}${node.body.map((node) => ' ' + punctuate(format(node))).join('')}}\n`
|
|
49
|
+
} else if (node instanceof VariableDeclaration) {
|
|
50
|
+
let layout = ''
|
|
51
|
+
if (node.layout) {
|
|
52
|
+
const args: string[] = []
|
|
53
|
+
for (const key in node.layout) {
|
|
54
|
+
const value = node.layout[key]
|
|
55
|
+
if (typeof value === 'string') args.push(`${key} = ${value}`)
|
|
56
|
+
else args.push(key)
|
|
57
|
+
}
|
|
58
|
+
layout = `layout(${args.join(', ')}) `
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const qualifiers = node.qualifiers.length ? `${node.qualifiers.join(' ')} ` : ''
|
|
62
|
+
|
|
63
|
+
let type = format(node.type)
|
|
64
|
+
|
|
65
|
+
let body = ''
|
|
66
|
+
if (node.declarations.length) {
|
|
67
|
+
const members: string[] = []
|
|
68
|
+
for (const declaration of node.declarations) {
|
|
69
|
+
let value = ''
|
|
70
|
+
|
|
71
|
+
if (declaration.value instanceof ArrayExpression) {
|
|
72
|
+
const t = declaration.value.type
|
|
73
|
+
const params = t.parameters ? t.parameters?.map(format).join(', ') : ''
|
|
74
|
+
value = `[${params}]`
|
|
75
|
+
|
|
76
|
+
if (declaration.value.members.length) {
|
|
77
|
+
value += ` = ${type}[${params}](${declaration.value.members.map(format).join(', ')})`
|
|
78
|
+
}
|
|
79
|
+
} else if (declaration.value) {
|
|
80
|
+
value = ` = ${format(declaration.value)}`
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
members.push(`${declaration.name}${value}`)
|
|
84
|
+
}
|
|
85
|
+
body = members.join(', ')
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
line = `${layout}${qualifiers}${type} ${body};\n`.trimStart()
|
|
89
|
+
} else if (node instanceof FunctionDeclaration) {
|
|
90
|
+
const qualifiers = node.qualifiers.length ? `${node.qualifiers.join(' ')} ` : ''
|
|
91
|
+
const args = node.args.map((node) => format(node).replace(';\n', '')).join(', ')
|
|
92
|
+
const body = node.body ? ` ${format(node.body)}` : ';\n'
|
|
93
|
+
line = `${qualifiers}${format(node.type)} ${node.name}(${args})${body}`
|
|
94
|
+
} else if (node instanceof CallExpression) {
|
|
95
|
+
line = `${format(node.callee)}(${node.args.map(format).join(', ')})`
|
|
96
|
+
} else if (node instanceof MemberExpression) {
|
|
97
|
+
line = `${format(node.object)}.${format(node.property)}`
|
|
98
|
+
} else if (node instanceof ArrayExpression) {
|
|
99
|
+
const params = node.type.parameters ? node.type.parameters?.map(format).join(', ') : ''
|
|
100
|
+
line = `${node.type.name}[${params}](${node.members.map(format).join(', ')})`
|
|
101
|
+
} else if (node instanceof IfStatement) {
|
|
102
|
+
const consequent = format(node.consequent).replace(EOL_REGEX, '')
|
|
103
|
+
const alternate = node.alternate ? ` else ${format(node.alternate).replace(EOL_REGEX, '')}` : ''
|
|
104
|
+
line = `if (${format(node.test)}) ${consequent}${alternate}\n`
|
|
105
|
+
} else if (node instanceof WhileStatement) {
|
|
106
|
+
line = `while (${format(node.test)}) ${format(node.body)}`
|
|
107
|
+
} else if (node instanceof ForStatement) {
|
|
108
|
+
const init = format(node.init).replace(';\n', '')
|
|
109
|
+
line = `for (${init}; ${format(node.test)}; ${format(node.update)}) ${format(node.body)}`
|
|
110
|
+
} else if (node instanceof DoWhileStatement) {
|
|
111
|
+
line = `do ${format(node.body).replace(EOL_REGEX, '')} while (${format(node.test)});\n`
|
|
112
|
+
} else if (node instanceof SwitchStatement) {
|
|
113
|
+
const cr = node.cases.length ? '\n' : ''
|
|
114
|
+
line = `switch (${format(node.discriminant)}) {${cr}${node.cases.map(format).join('')}}\n`
|
|
115
|
+
} else if (node instanceof SwitchCase) {
|
|
116
|
+
const header = node.test ? `case ${format(node.test)}:` : 'default:'
|
|
117
|
+
line = ` ${header}\n${node.consequent.map((node) => ` ${punctuate(format(node))}`).join('')}`
|
|
118
|
+
} else if (node instanceof StructDeclaration) {
|
|
119
|
+
const cr = node.members.length ? '\n' : ''
|
|
120
|
+
line = `struct ${node.name} {${cr}${node.members.map((node) => ` ${format(node)}`).join('')}};\n`
|
|
121
|
+
} else if (node instanceof UnaryExpression) {
|
|
122
|
+
line = node.left ? `${format(node.left)}${node.operator}` : `${node.operator}${format(node.right)}`
|
|
123
|
+
} else if (node instanceof BinaryExpression) {
|
|
124
|
+
line = `${format(node.left)} ${node.operator} ${format(node.right)}`
|
|
125
|
+
} else if (node instanceof TernaryExpression) {
|
|
126
|
+
line = `${format(node.test)} ? ${format(node.consequent)} : ${format(node.alternate)}`
|
|
127
|
+
} else if (node instanceof ReturnStatement) {
|
|
128
|
+
line = node.argument ? `return ${format(node.argument)};\n` : `return;\n`
|
|
129
|
+
} else if (node instanceof PrecisionStatement) {
|
|
130
|
+
line = `precision ${node.precision} ${node.type.name};\n`
|
|
131
|
+
} else if (node instanceof ContinueStatement) {
|
|
132
|
+
line = 'continue;\n'
|
|
133
|
+
} else if (node instanceof BreakStatement) {
|
|
134
|
+
line = 'break;\n'
|
|
135
|
+
} else if (node instanceof DiscardStatement) {
|
|
136
|
+
line = 'discard;\n'
|
|
137
|
+
} else if (node instanceof PreprocessorStatement) {
|
|
138
|
+
let value = ''
|
|
139
|
+
if (node.value) {
|
|
140
|
+
if (node.name === 'include') {
|
|
141
|
+
value = ` <${format(node.value[0])}>`
|
|
142
|
+
} else if (node.name === 'extension') {
|
|
143
|
+
value = ` ${node.value.map(format).join(': ')}`
|
|
144
|
+
} else {
|
|
145
|
+
value = ` ${node.value.map(format).join(' ')}`
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
line = `#${node.name}${value}\n`
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return line
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export interface GenerateOptions {
|
|
156
|
+
target: 'GLSL' // | 'WGSL'
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Generates a string of GLSL (WGSL WIP) code from an [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree).
|
|
161
|
+
*/
|
|
162
|
+
export function generate(ast: AST[], options: GenerateOptions): string {
|
|
163
|
+
let code = '#version 300 es\n'
|
|
164
|
+
|
|
165
|
+
for (let i = 0; i < ast.length; i++) {
|
|
166
|
+
code += punctuate(format(ast[i]))
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return code.trim()
|
|
170
|
+
}
|