/**
 * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.48.0.
 * Original file: /npm/wesl@0.7.27/dist/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
let t=console.log;const e=!0,n=!0;async function r(e,n){const r=t;try{return t=e,await n()}finally{t=r}}function s(e,n,...r){if("string"==typeof e)return void o(t,e,n,...r);const{src:s,positions:i}=function(t,e){const n=t.mapPositions(...[e].flat()),{src:r}=n[0];let s;s=n[1]?.src?.path===r.path&&n[1]?.src?.text===r.text?n.map(t=>t.position):n[0].position;return{src:r,positions:s}}(e,n);o(t,s.text,i,...r)}function o(t,e,n,...r){t(...r);const{line:s,lineNum:o,linePos:a,linePos2:c}=function(t,e){let n,r;"number"==typeof e?n=e:[n,r]=e;const s=function(t){const e=i.get(t);if(e)return e;const n=[...t.matchAll(/\n/g)].map(t=>t.index+1);return n.unshift(0),i.set(t,n),n}(t);let o,a=0,c=s.length-1;n>=s[c]&&(a=c);for(;a+1<c;){const t=a+c>>1;n>=s[t]?a=t:c=t}void 0!==r&&r>=s[a]&&r<s[c]&&(o=r-s[a]);const u=t.slice(s[a],s[a+1]||t.length);return{line:"\n"===u.slice(-1)?u.slice(0,-1):u,linePos:n-s[a],linePos2:o,lineNum:a+1}}(e,n);t(s,`  Ln ${o}`),t(function(t,e){const n=" ".repeat(Math.max(0,t)),r=e?e-t:1;return n+"^".repeat(Math.max(1,r))}(a,c))}const i=new Map;function a(t,e){!function(t,e){if(!t)throw new Error(e)}(t,e)}function c(t){throw new u("Unreachable value",{data:t})}var u=class extends Error{data;constructor(t,e){super(t,e),this.data=e?.data}};function l(t,e,n,r){const s=t.get(e)||new Map;t.set(e,s),s.set(n,r)}const d=/\b(\w+)\b/gi;function p(t,e){return t.replaceAll(d,t=>t in e?e[t]:t)}function f(t,e,n=e){const r=[];for(let s=0;s<t.length;s+=n)r.push(t.slice(s,s+e));return r}function m(t,e){const n=new Map;for(const r of t){const t=e(r),s=n.get(t)||[];s.push(r),n.set(t,s)}return n}function h(t,e){const n=[],r=[];for(const s of t)e(s)?n.push(s):r.push(s);return[n,r]}function x(t,e,n){const r=[n];let s=n;for(let n=0;n<t.length;n++)s=e(t[n],s),r.push(s);return r}function g(t,e){const n=Object.entries(t).map(([t,n])=>[t,n in e?e[n]:n]);return Object.fromEntries(n)}function k(t){return t[t.length-1]}function b(t,e){let n=Math.min(t.length,e.length);for(;n>0&&!v(t.slice(-n),e.slice(0,n));)n--;if(n)return e.slice(n)}function v(t,e){return t.length===e.length&&t.every((t,n)=>t===e[n])}function E(t,e){const n=[];for(const r of t){const t=e(r);t&&n.push(t)}return n}function w(t,e){for(const n of t){const t=e(n);if(t)return t}}function S(t,e){return Object.fromEntries(Object.entries(t).map(([t,n])=>[t,e(n)]))}function y(t,e){const n=Math.min(e.length,Math.max(0,t));let r=0,s=1;for(;;){const t=e.indexOf("\n",r);if(-1===t||n<=t){return[s,n-r+1]}r=t+1,s+=1}}function $(t,e){let n=t.lastIndexOf("\n",e[0]);n=-1===n?0:n+1;let r=t.indexOf("\n",e[0]);-1===r&&(r=t.length);const s=e[1]-e[0],o=Math.max(1,s),i=Math.max(0,e[0]-n);return[t.slice(n,r)," ".repeat(i)+"^".repeat(o)]}const T={};function N(t){if("number"==typeof t)return M(t);let e="";for(let n=0;n<t.length;n+=1)e+=M(t[n]);return e}function M(t){let e,n="";e=t<0?-t<<1|1:t<<1;do{let t=31&e;e>>>=5,e>0&&(t|=32),n+=T[t]}while(e>0);return n}"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".split("").forEach((t,e)=>{T[e]=t});const _="document"in globalThis;function P(t){const{url:e,text:n,lineNumber:r,lineColumn:s,length:o,offset:i,error:a}=t,c={file:e,line:r,column:s,length:o,offset:i};if(a.weslLocation=c,!_)throw a;const u={version:3,file:null,sources:[e],sourcesContent:[n??null],names:[],mappings:N([0,0,Math.max(0,r-1),Math.max(0,s-1)])+","+N([18,0,Math.max(0,r-1),Math.max(0,s-1)+o])};let l=`throw new Error(${JSON.stringify(a.message+"")})`;l+="\n//# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(u)))),l+="\n//# sourceURL="+u.sources[0];let d=0;"stackTraceLimit"in Error&&(d=Error.stackTraceLimit,Error.stackTraceLimit=1);try{(0,eval)(l)}catch(t){throw"stackTraceLimit"in Error&&(Error.stackTraceLimit=d),a.message="",t.cause=a,t.weslLocation=c,t}}function A(t,e){const{refIdentElem:n,originalName:r}=t,s=e??`'${r}'`;if(!n)throw new Error(s);B(n,s)}function B(t,e=""){const{srcModule:n,start:r,end:o}=t,{debugFilePath:i,src:a}=n,c=`${e} in file: ${i}`;s(a,[r,o],c);const[u,l]=y(r,a);P({url:i,text:a,lineNumber:u,lineColumn:l,length:o-r,offset:r,error:new Error(c)})}function j(t,e){const{kind:n}=t;if("unary-expression"===n)return a("!"===t.operator.value),!j(t.expression,e);if("binary-expression"!==n){if("literal"===n){const{value:e}=t;return a("true"===e||"false"===e),"true"===e}if("parenthesized-expression"===n)return j(t.expression,e);if("ref"===n)return e[t.ident.originalName]??!1;throw new Error(`unexpected @if expression ${JSON.stringify(t)}`)}{const n=t.operator.value;a("||"===n||"&&"===n);const r=j(t.left,e);if("||"===n)return r||j(t.right,e);if("&&"===n)return r&&j(t.right,e);c(n)}}function I(t,e){let n=!1;return t.flatMap(t=>{const r=t.attributes,{valid:s,nextElseState:o}=function(t,e,n){return R(C(t),e,n)}(r,n,e);return n=o,s?[t]:[]})}function R(t,e,n){if(!t)return{valid:!0,nextElseState:e};if("@if"===t.kind){const e=function(t,e){return j(t.param.expression,e)}(t,n);return{valid:e,nextElseState:!e}}if("@elif"===t.kind){if(!e)return{valid:!1,nextElseState:!1};const r=function(t,e){return j(t.param.expression,e)}(t,n);return{valid:r,nextElseState:!r}}return{valid:e,nextElseState:!1}}function C(t){if(t)for(const e of t){const t=e.attribute.kind;if("@if"===t||"@elif"===t||"@else"===t)return e.attribute}}function L(t,e){e&&(a(t.kind===e.kind),a(t.parent===e.parent),a(!e.condAttribute),t.contents=t.contents.concat(e.contents))}function O(){D=0,F=0}let D=0,F=0;function U(){return F++}function q(t,e="scope"){return{id:D++,kind:e,parent:t,contents:[]}}function W(t,e){if(e===t)return!0;for(const n of t.contents)if(G(n)&&W(n,e))return!0;return!1}function G(t){const{kind:e}=t;return"partial"===e||"scope"===e}function X(t){return!G(t)}const z="bitcast all any select arrayLength \n  abs acos acosh asin asinh atan atanh atan2 ceil clamp cos cosh \n  countLeadingZeros countOneBits countTrailingZeros cross \n  degrees determinant distance dot dot4U8Packed dot4I8Packed \n  exp exp2 extractBits faceForward firstLeadingBit firstTrailingBit \n  floor fma fract frexp insertBits inverseSqrt ldexp length log log2\n  max min mix modf normalize pow quantizeToF16 radians reflect refract\n  reverseBits round saturate sign sin sinh smoothstep sqrt step tan tanh\n  transpose trunc\n  dpdx dpdxCoarse dpdxFine dpdy dpdyCoarse dpdyFine fwidth \n  fwidthCoarse fwidthFine\n  textureDimensions textureGather textureGatherCompare textureLoad\n  textureNumLayers textureNumLevels textureNumSamples\n  textureSample textureSampleBias textureSampleCompare textureSampleCompareLevel\n  textureSampleGrad textureSampleLevel textureSampleBaseClampToEdge\n  textureStore\n  atomicLoad atomicStore atomicAdd atomicSub atomicMax atomicMin\n  atomicAnd atomicOr atomicXor atomicExchange atomicCompareExchangeWeak\n  pack4x8snorm pack4x8unorm pack4xI8 pack4xU8 pack4xI8Clamp pack4xU8Clamp\n  pack2x16snorm pack2x16unorm pack2x16float\n  unpack4x8snorm unpack4x8unorm unpack4xI8 unpack4xU8 \n  unpack2x16snorm unpack2x16unorm unpack2x16float\n  storageBarrier textureBarrier workgroupBarrier workgroupUniformLoad\n  subgroupAdd subgroupAll subgroupAnd subgroupAny subgroupBallot \n  subgroupBroadcast subgroupBroadcastFirst subgroupElect \n  subgroupExclusiveAdd subgroupExclusiveMul subgroupInclusiveAdd \n  subgroupInclusiveMul subgroupMax subgroupMin subgroupMul subgroupOr \n  subgroupShuffle subgroupShuffleUp subgroupShuffleXor subgroupXor\n  quadBroadcast quadSwapDiagonal quadSwapX quadSwapY".split(/\s+/),K="\n  texture_1d texture_2d texture_2d_array texture_3d \n  texture_cube texture_cube_array\n",V="\n  texture_multisampled_2d texture_depth_multisampled_2d\n",H="\n  texture_storage_1d texture_storage_2d texture_storage_2d_array \n  texture_storage_3d\n",J=`array atomic bool f16 f32 i32 \n  mat2x2 mat2x3 mat2x4 mat3x2 mat3x3 mat3x4 mat4x2 mat4x3 mat4x4\n  mat2x2f mat2x3f mat2x4f mat3x2f mat3x3f mat3x4f\n  mat4x2f mat4x3f mat4x4f\n  mat2x2h mat2x3h mat2x4h mat3x2h mat3x3h mat3x4h\n  mat4x2h mat4x3h mat4x4h\n  u32 vec2 vec3 vec4 ptr\n  vec2i vec3i vec4i vec2u vec3u vec4u\n  vec2f vec3f vec4f vec2h vec3h vec4h\n  ${K}\n  ${V}\n  texture_external\n  ${H}\n  texture_depth_2d texture_depth_2d_array texture_depth_cube\n  texture_depth_cube_array\n  sampler sampler_comparison\n  rgba8unorm rgba8snorm rgba8uint rgba8sint\n  rgba16uint rgba16sint rgba16float \n  r32uint r32sint r32float rg32uint rg32sint rg32float\n  rgba32uint rgba32sint rgba32float\n  bgra8unorm`.split(/\s+/),Y="read write read_write \n  function private workgroup uniform storage\n  rgba8unorm rgba8snorm rgba8uint rgba8sint \n  rgba16uint rgba16sint rgba16float \n  r32uint r32sint r32float rg32uint rg32sint rg32float\n  rgba32uint rgba32sint rgba32float bgra8unorm".split(/\s+/),Z=new Set(["align","binding","blend_src","compute","const","fragment","group","id","invariant","location","must_use","size","vertex","workgroup_size"]);function Q(t){return J.includes(t)}function tt(t){return z.includes(t)||Q(t)}function et(t){return Y.includes(t)}function nt(t){const{srcBuilder:e,rootElems:n,conditions:r}=t,{extracting:s=!0,skipConditionalFiltering:o=!1}=t,i={conditions:r,srcBuilder:e,extracting:s},a=o?n:I(n,r);for(const t of a)rt(t,i)}function rt(t,e){switch(t.kind){case"import":return;case"text":return void function(t,e){e.srcBuilder.addCopy(t.start,t.end)}(t,e);case"name":return void function(t,e){e.srcBuilder.add(t.name,t.start,t.end)}(t,e);case"synthetic":return void function(t,e){const{text:n}=t;e.srcBuilder.addSynthetic(n,n,0,n.length)}(t,e);case"ref":return void lt(t,e);case"decl":return void dt(t,e);case"literal":case"binary-expression":case"unary-expression":case"call-expression":case"parenthesized-expression":case"component-expression":case"component-member-expression":return void pt(t,e);case"param":case"typeDecl":case"member":case"memberRef":case"expression":case"type":case"switch-clause":return void it(t,e);case"stuff":return void function(t,e){at(t,e)}(t,e);case"module":return void function(t,e){const n=I(t.contents,e.conditions);for(const t of n)"text"===t.kind&&""===t.srcModule.src.slice(t.start,t.end).trim()||rt(t,e)}(t,e);case"var":case"let":case"statement":case"continuing":return void function(t,e){t.contents.length>0&&"attribute"===t.contents[0].kind||ot(t.attributes,e);it(t,e)}(t,e);case"override":case"const":case"assert":case"alias":case"gvar":return void function(t,e){st(e),t.contents.length>0&&"attribute"===t.contents[0].kind||ot(t.attributes,e);at(t,e)}(t,e);case"fn":return st(e),void function(t,e){const{attributes:n,name:r,params:s,returnAttributes:o,returnType:i,body:a}=t,{conditions:c,srcBuilder:u}=e;ot(n,e),u.add("fn ",r.start-3,r.start),dt(r,e),u.appendNext("(");const l=I(s,c);l.forEach((t,n)=>{t.contents.length>0&&"attribute"===t.contents[0].kind||ot(t.attributes,e),ut(t,e),n<l.length-1&&u.appendNext(", ")}),u.appendNext(") "),i&&(u.appendNext("-> "),ot(o,e),ut(i,e),u.appendNext(" "));it(a,e)}(t,e);case"struct":return st(e),void function(t,e){const{attributes:n,name:r,members:s,start:o}=t,{srcBuilder:i,conditions:a}=e,c=I(s,a),u=c.length;if(0===u)return void function(t){const{name:e,members:n}=t,r=n.length?"(with current conditions)":"";B(e,`struct '${e.ident.originalName}' has no members ${r}`)}(t);ot(n,e),i.add("struct ",o,r.start),dt(r,e),1===u?(i.appendNext(" { "),at(c[0],e),i.appendNext(" }"),i.addNl()):(i.appendNext(" {"),i.addNl(),c.forEach(t=>{i.appendNext("  "),ut(t,e),i.appendNext(","),i.addNl()}),i.appendNext("}"),i.addNl())}(t,e);case"attribute":return void ft(t,e);case"directive":return void function(t,e){const{directive:n}=t,{kind:r}=n;if("diagnostic"===r){const r=`diagnostic${mt(n.severity,n.rule)};`;e.srcBuilder.add(r,t.start,t.end)}else if("enable"===r){const r=n.extensions.map(t=>t.name).join(", ");e.srcBuilder.add(`enable ${r};`,t.start,t.end)}else if("requires"===r){const r=n.extensions.map(t=>t.name).join(", ");e.srcBuilder.add(`requires ${r};`,t.start,t.end)}else c(r)}(t,e);default:c(t)}}function st(t){t.srcBuilder.addNl(),t.srcBuilder.addNl()}function ot(t,e){t?.forEach(t=>{ft(t,e)&&e.srcBuilder.add(" ",t.start,t.end)})}function it(t,e){const n=I(t.contents,e.conditions);for(const t of n)rt(t,e)}function at(t,e){const n=I(t.contents,e.conditions),r=n.findIndex(t=>!ct(t)),s=n.findLastIndex(t=>!ct(t));n.forEach((t,n)=>{if("text"===t.kind){let o=t.srcModule.src.slice(t.start,t.end);n===r&&(o=o.trimStart()),n===s&&(o=o.trimEnd()),o&&e.srcBuilder.add(o,t.start,t.end)}else rt(t,e)})}function ct(t){if("attribute"!==t.kind)return!1;const{kind:e}=t.attribute;return"@if"===e||"@elif"===e||"@else"===e}function ut(t,e){I(t.contents,e.conditions).forEach(t=>{if("text"===t.kind){const{srcModule:e,start:n,end:r}=t;if(""===e.src.slice(n,r).trim())return}rt(t,e)})}function lt(t,e){if(t.ident.std)e.srcBuilder.add(t.ident.originalName,t.start,t.end);else{const n=xt(gt(t.ident));e.srcBuilder.add(n,t.start,t.end)}}function dt(t,e){const n=xt(t.ident);e.srcBuilder.add(n,t.start,t.end)}function pt(t,e){const{kind:n}=t;if("literal"!==n)if("ref"!==n)if("type"!==n){if("binary-expression"===n)return pt(t.left,e),e.srcBuilder.add(` ${t.operator.value} `,t.operator.span[0],t.operator.span[1]),void pt(t.right,e);if("unary-expression"===n)return e.srcBuilder.add(t.operator.value,t.operator.span[0],t.operator.span[1]),void pt(t.expression,e);if("parenthesized-expression"!==n){if("call-expression"!==n)return"component-expression"===n?(pt(t.base,e),void pt(t.access,e)):"component-member-expression"===n?(pt(t.base,e),void("name"===t.access.kind&&e.srcBuilder.add(t.access.name,t.access.start,t.access.end))):void c(n);if(pt(t.function,e),t.templateArgs)for(const n of t.templateArgs)rt(n,e);for(const n of t.arguments)pt(n,e)}else pt(t.expression,e)}else it(t,e);else lt(t,e);else e.srcBuilder.add(t.value,t.start,t.end)}function ft(t,e){const{kind:n}=t.attribute;if("@if"===n||"@elif"===n||"@else"===n)return!1;if("@attribute"===n)return!!Z.has(t.attribute.name)&&(function(t,e){if("@attribute"!==t.attribute.kind)return;const{params:n}=t.attribute;if(!n||0===n.length)return void e.srcBuilder.add("@"+t.attribute.name,t.start,t.end);e.srcBuilder.add("@"+t.attribute.name+"(",t.start,n[0].start);for(let t=0;t<n.length;t++)it(n[t],e),t<n.length-1&&e.srcBuilder.add(",",n[t].end,n[t+1].start);e.srcBuilder.add(")",n[n.length-1].end,t.end)}(t,e),!0);if("@builtin"===n)return e.srcBuilder.add("@builtin("+t.attribute.param.name+")",t.start,t.end),!0;if("@diagnostic"===n){const n="@diagnostic"+mt(t.attribute.severity,t.attribute.rule);return e.srcBuilder.add(n,t.start,t.end),!0}if("@interpolate"===n){const n=t.attribute.params.map(t=>t.name).join(", ");return e.srcBuilder.add(`@interpolate(${n})`,t.start,t.end),!0}c(n)}function mt(t,e){const n=e[0].name+(null!==e[1]?"."+e[1].name:"");return`(${t.name}, ${n})`}function ht(t){const{kind:e}=t;switch(e){case"binary-expression":{const e=ht(t.left),n=ht(t.right);return`${e} ${t.operator.value} ${n}`}case"unary-expression":return`${t.operator.value}${ht(t.expression)}`;case"ref":return t.ident.originalName;case"literal":return t.value;case"parenthesized-expression":return`(${ht(t.expression)})`;case"component-expression":return`${ht(t.base)}[${t.access}]`;case"component-member-expression":return`${ht(t.base)}.${t.access}`;case"call-expression":{const e=t.function;return`${"ref"===e.kind?e.ident.originalName:e.name.originalName}${t.templateArgs?"<...>":""}(${t.arguments.map(ht).join(", ")})`}case"type":return t.name.originalName;default:c(e)}}function xt(t){return t.isGlobal?(a(t.mangledName,`ERR: mangled name not found for decl ident ${Bt(t)}`),t.mangledName):t.mangledName||t.originalName}function gt(t){let e=t;do{if("decl"===e.kind)return e;e=e.refersTo}while(e);throw new Error(`unresolved identifer: ${t.originalName}`)}function kt(t){return[...t.segments.map(t=>t.name),bt(t.finalSegment)].join("::")}function bt(t){if("import-item"===t.kind){const{name:e,as:n}=t;return`${e}${n?` as ${n}`:""}`}if("import-collection"===t.kind)return`{${t.subtrees.map(t=>kt(t)).join(", ")}}`;c(t)}var vt=class{#t=[];#e=0;#n;#r=!0;#s=!1;#o;maxWidth;indent;constructor(t=0,e=60,n=2){this.maxWidth=e,this.indent=t,this.#n=" ".repeat(t),this.#o=" ".repeat(n)}nl(){this.#t.push("\n"),this.#e=0,this.#r=!1,this.#s=!1}add(t){this.#e+function(t){const e=t.indexOf("\n");return-1===e?t.length:e}(t)>this.maxWidth&&this.hangingNl(),0===this.#e&&(this.#t.push(this.#n),this.#s&&this.#t.push(this.#o),this.#e=this.indent),this.#t.push(t),this.#e+=t.length}addBlock(t,e=!0){this.#t.push(t),e&&this.nl()}get result(){return this.#t.join("")}get oneLine(){return this.#r}hangingNl(){this.nl(),this.#s=!0}};function Et(t,e=0){const{kind:n}=t,r=new vt(e,150);r.add(n),function(t,e){const{kind:n}=t;if("assert"===n||"module"===n||"param"===n||"stuff"===n||"switch-clause"===n)return;if("text"===n)e.add(` '${t.srcModule.src.slice(t.start,t.end)}'`);else if("var"===n||"let"===n||"gvar"===n||"const"===n||"override"===n)yt(t.name,e),$t(t.attributes,e);else if("struct"===n)e.add(" "+t.name.ident.originalName);else if("member"===n)$t(t.attributes,e),e.add(` ${t.name.name}: ${Mt(t.typeRef)}`);else if("name"===n)e.add(" "+t.name);else if("memberRef"===n){const n=t.extraComponents?_t(t.extraComponents):"";e.add(` ${t.name.ident.originalName}.${t.member.name}${n}`)}else if("fn"===n)!function(t,e){const{name:n,params:r,returnType:s,attributes:o}=t,i=r.map(t=>{const{originalName:e}=t.name.decl.ident;return`${e}: ${Mt(t.name.typeRef)}`});e.add(` ${n.ident.originalName}(${i.join(", ")})`),$t(o,e),s&&e.add(" -> "+Mt(s))}(t,e);else if("alias"===n){const n="decl"===t.name.ident.kind?"%":"";e.add(` ${n}${t.name.ident.originalName}=${Mt(t.typeRef)}`)}else if("attribute"===n)wt(t.attribute,e);else if("expression"===n){const n=t.contents.map(t=>"text"===t.kind?`'${t.srcModule.src.slice(t.start,t.end)}'`:Et(t)).join(" ");e.add(" "+n)}else if("type"===n){const n="string"==typeof t.name?t.name:t.name.originalName,r=t.templateParams?.map(Nt).join(", ");e.add(r?` ${n}<${r}>`:` ${n}`)}else"synthetic"===n?e.add(` '${t.text}'`):"import"===n?(e.add(" "+(kt(t.imports)+";")),$t(t.attributes,e)):"ref"===n?e.add(" "+t.ident.originalName):"typeDecl"===n?yt(t,e):"decl"===n?e.add(" %"+t.ident.originalName):"directive"===n?function(t,e){const{directive:n,attributes:r}=t,{kind:s}=n;if("diagnostic"===s){const{severity:t,rule:r}=n,s=mt(t,r);e.add(` diagnostic${s}`)}else"enable"===s||"requires"===s?e.add(` ${s} ${n.extensions.map(t=>t.name).join(", ")}`):c(s);$t(r,e)}(t,e):"statement"===n||"continuing"===n?$t(t.attributes,e):"literal"===n?e.add(` literal(${t.value})`):"binary-expression"===n?e.add(` binop(${t.operator.value})`):"unary-expression"===n?e.add(` unop(${t.operator.value})`):"call-expression"===n?e.add(" call"):"parenthesized-expression"===n?e.add(" parens"):"component-expression"===n?e.add(" []"):"component-member-expression"===n?e.add(" ."):c(n)}(t,r);let s=[];return"contents"in t&&(s=t.contents.map(t=>Et(t,e+2))),s.length&&(r.nl(),r.addBlock(s.join("\n"),!1)),r.result}function wt(t,e){const{kind:n}=t;if("@attribute"===n){const{name:n,params:r}=t,s=r?.length?`(${r.map(Tt).join(", ")})`:"";e.add(` @${n}${s}`)}else"@builtin"===n?e.add(` @builtin(${t.param.name})`):"@diagnostic"===n?e.add(` @diagnostic${mt(t.severity,t.rule)}`):"@if"===n||"@elif"===n?e.add(` ${n}(${ht(t.param.expression)})`):"@else"===n?e.add(" @else"):"@interpolate"===n?e.add(` @interpolate(${t.params.map(t=>t.name).join(", ")})`):c(n)}function St(t){const e=new vt(0,150);return wt(t,e),e.result}function yt(t,e){const{decl:n,typeRef:r}=t;e.add(" %"+n.ident.originalName),r&&e.add(" : "+Mt(r))}function $t(t,e){t?.forEach(t=>{var n;e.add(" "+("@attribute"===(n=t.attribute).kind?"@"+n.name:n.kind))})}function Tt(t){return"contents"in t?t.contents.map(t=>"text"===t.kind?`'${t.srcModule.src.slice(t.start,t.end)}'`:Et(t)).join(" "):Et(t)}function Nt(t){return"string"==typeof t?t:"type"===t.kind?Mt(t):Et(t)}function Mt(t){if(!t)return"?type?";const e="string"==typeof t.name?t.name:t.name.originalName,n=t.templateParams?.map(Nt).join(", ");return n?`${e}<${n}>`:e}function _t(t){return t.contents.map(t=>"text"===t.kind?t.srcModule.src.slice(t.start,t.end):"ref"===t.kind?t.ident.originalName:`?${t.kind}?`).join(" ")}function Pt(t,e=0,n=!0){const{contents:r,kind:s,condAttribute:o}=t,i=new vt(e),a=o&&St(o);a&&i.add(a+" "),"partial"===s&&i.add("-"),i.add("{ ");const c=r.length-1;let u=!1,l=!1;return r.forEach((t,r)=>{if(G(t)){const r=Pt(t,e+2,n);u||i.nl(),i.addBlock(r),u=!0,l=!0}else{u&&i.add("  "),u=!1;const e=t;n?i.add(function(t){const{kind:e,originalName:n}=t;return`${"decl"===e?"%":""}${n}`}(e)):i.add(Bt(e)),r<c&&i.add(" ")}}),!l&&i.oneLine?i.add(" }"):(l&&!u&&i.nl(),i.add("}")),i.add(` #${t.id}`),i.result}function At(t){return Pt(t,0,!1)}function Bt(t){if(!t)return JSON.stringify(t);const{kind:e,originalName:n}=t,r=t.id?`#${t.id}`:"";if("ref"===e)return`${n} ${r} -> ${Bt(t.refersTo)}`;{const{mangledName:e}=t;return`%${n}${e?`(${e})`:""} ${r} `}}function jt(t=null){return{decls:new Map,parent:t}}function It(t){const{decls:e,parent:n}=t;return`decls: { ${Array.from(e.entries()).map(([t,e])=>`${t}:${Bt(e)}`).join(", ")} }, parent: ${n?It(n):"null"}`}function Rt(t,e){const{modulePath:n}=e;return[...n.split("::"),t.originalName].map(t=>{const e=(t.match(/_/g)??[]).length;return e>0?"_"+e+t:t}).join("_")}function Ct(t,e){return"_"+[...e.modulePath.split("::"),t.originalName].map(t=>{return e=t,[...e].length+t;var e}).join("")}function Lt(t,e,n,r){return Ot(n,r)}function Ot(t,e){let n=t,r=0;for(;e.has(n);)n=t+r++;return n}function Dt(t,e,n){const r=n?Ut(t,n):t,s=r[0];if("package"===s||s===e)return r.slice(1).join("/")}function Ft(t,e,n){const r=n?.split("::");return Dt(t.split("::"),e,r)}function Ut(t,e){const n="package"===t[0]?[e[0],...t.slice(1)]:t,r=n.lastIndexOf("super");return-1===r?n:[...e.slice(0,-(r+1)),...n.slice(r+1)]}function qt(t){return void 0===t?"./":""===t?"":t.endsWith("/")?t:t+"/"}function Wt(t){return function t(e,n,r,s){if(r.length>0){const[o,...i]=r;return t([...e,o.name],[...n,o.name],i,s)}if("import-collection"===s.kind)return s.subtrees.flatMap(r=>t(e,n,r.segments,r.finalSegment));if("import-item"===s.kind)return[{importPath:[...e,s.as??s.name],modulePath:[...n,s.name]}];c(s)}([],[],t.segments,t.finalSegment)}var Gt=class extends Error{span;constructor(t,e){super(t),this.span=e}};function Xt(t,e,n=[]){t.state.context.openElems.push({kind:e,contents:[...n]})}function zt(t,e,n){const r=t.state.context.openElems.pop();if(!r)throw new Error("No open element to close");return function(t,e,n,r){const{srcModule:s}=t.state.stable,o=e.slice().sort((t,e)=>t.start-e.start),i=[];let a=n;for(const t of o)a<t.start&&i.push(Vt(s,a,t.start)),i.push(t),a=t.end;a<r&&i.push(Vt(s,a,r));return i}(t,r.contents,e,n)}function Kt(t,e,n,r){const s=n.stream.checkpoint();return{kind:t,start:e,end:s,contents:zt(n,e,s),...r}}function Vt(t,e,n){return{kind:"text",start:e,end:n,srcModule:t}}function Ht(t){const[e,n]=t.span;return{kind:"literal",value:t.text,start:e,end:n}}function Jt(t){return{value:t.text,span:t.span}}function Yt(t,e,n){const{start:r}=t;return{kind:"binary-expression",operator:e,left:t,right:n,start:r,end:n.end}}function Zt(t,e,n,r){return{kind:"call-expression",function:t,templateArgs:e??void 0,arguments:n,start:t.start,end:r}}function Qt(t,e,n){const r=t.matchText(e);if(!r){const r=t.checkpoint();throw new Gt(n?`Expected '${e}' after ${n}`:`Expected '${e}'`,[r,r])}return r}function te(t,e){const n=t.peek();return n&&"word"===n.kind||ne(t,e),t.nextToken(),n}function ee(t,e="Expected expression"){const n=Me(t);return n||ne(t.stream,e),t.options.preserveExpressions&&t.addElem(n),n}function ne(t,e){const n=t,r=n.peek();throw new Gt(e,r?r.span:[n.checkpoint(),n.checkpoint()])}function re(t,e){const n=[];for(;;){const r=e(t);if(null===r)break;if(n.push(r),!t.stream.matchText(","))break}return n}function*se(t,e){for(let n=e(t);n;n=e(t))yield n}function oe(t){const[e,n]=t.span;return{kind:"name",name:t.text,start:e,end:n}}function ie(t,e,n){const r=t.createDeclIdent(e.text,n),[s,o]=e.span;return{kind:"decl",ident:r,srcModule:t.srcModule,start:s,end:o}}function ae(t,e,n,r){const s={kind:"ref",ident:e,srcModule:t.srcModule,start:n,end:r};return e.refIdentElem=s,s}function ce(t){const{kind:e}=t;return"@if"===e||"@elif"===e||"@else"===e}function ue(t){return t.some(t=>ce(t.attribute))}function le(t,e){e?.length&&(t.attributes=e)}function de(t,e){t.ident.declElem=e}function pe(t,e){de(t.decl,e)}const fe={"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"<":7,"<=":7,">":7,">=":7,"<<":8,">>":8,"+":9,"-":9,"*":10,"/":10,"%":10};function me(t){return fe[t.text]||0}function he(t){switch(t){case"*":case"/":case"%":case"+":case"-":default:return"arithmetic";case"<<":case">>":return"shift";case"<":case">":case"<=":case">=":case"==":case"!=":return"relational";case"&":return"bitAnd";case"^":return"bitXor";case"|":return"bitOr";case"&&":return"logicalAnd";case"||":return"logicalOr"}}function xe(t,e,n){const r=he(e);var s;return function(t,e){const n=he(t);return"shift"===n?"unary"===e:"bitAnd"===n?"unary"===e||"bitAnd"===e:"bitXor"===n?"unary"===e||"bitXor"===e:"bitOr"===n?"unary"===e||"bitOr"===e:"logicalAnd"===n?!ge(e)&&"logicalOr"!==e:"logicalOr"!==n||!ge(e)&&"logicalAnd"!==e}(e,n)||ne(t,`'${e}' requires parentheses after ${n}`),"shift"!==(s=r)&&"relational"!==s||n!==r||ne(t,`'${e}' cannot be chained`),r}function ge(t){return"bitAnd"===t||"bitXor"===t||"bitOr"===t}const ke=new Set(["as","import","package","super","self"]),be=new Set(["package","super"]);function ve(t){const e=t.peek();if(!e||!Ee(e,!0))return null;const n=e.span[0];t.nextToken();const r=[e.text];for(;t.matchText("::");){const e=t.peek();e&&Ee(e,!1)||ne(t,"Expected identifier after '::'"),t.nextToken(),r.push(e.text)}return{parts:r,start:n,end:t.checkpoint()}}function Ee(t,e){return"word"===t.kind||"keyword"===t.kind&&(!ke.has(t.text)||e&&be.has(t.text))}function we(t){const e=ve(t.stream);if(!e)return null;const{parts:n,start:r,end:s}=e,o=t.createRefIdent(n.join("::"));Xt(t,"type");const i=ae(t,o,r,s);return t.saveIdent(o),t.addElem(i),Kt("type",r,t,{name:o,templateParams:t.stream.nextTemplateStartToken()?Se(t):void 0})}function Se(t){const{stream:e}=t;if(ye(e))return[];const n=[$e(t)];for(;e.matchText(",");)n.push($e(t));return ye(e)||ne(e,"Expected '>' or ',' after template parameter"),n}function ye(t){return!!t.peek()?.text.startsWith(">")&&(t.nextTemplateEndToken()||ne(t,"Expected '>' to close template parameters"),!0)}function $e(t){const e=Me(t,{inTemplate:!0});if(e)return e;ne(t.stream,"Expected expression in template parameters")}function Te(t,e,n){if("ref"!==e.kind&&"type"!==e.kind)return null;const{stream:r}=t,s="type"===e.kind?e.templateParams??null:function(t){const{stream:e}=t,n=e.checkpoint();if(!e.nextTemplateStartToken())return null;const r=Se(t);if("("!==e.peek()?.text)return e.reset(n),null;return r}(t);if(!r.matchText("("))return null;const o=[];for(;;){const i=Ne(r);if(null!==i)return Zt(e,s,o,i);const a=n(t);if(a||ne(r,"Expected expression"),o.push(a),r.matchText(","))continue;const c=Ne(r);if(null!==c)return Zt(e,s,o,c);ne(r,"Expected ',' or ')' in function arguments")}}function Ne(t){const e=t.matchText(")");return e?e.span[1]:null}function Me(t,e){const{conditionRef:n,inTemplate:r}=!0===e?{conditionRef:!0,inTemplate:!1}:e??{},s=!!n||void 0,o=_e(t,s);return o?Pe(t,{prec:1,left:o,group:"unary",condRef:s,inTemplate:r}).expr:null}function _e(t,e){const{stream:n}=t,r=n.peek();if(!r)return null;if("-!&*~".includes(r.text)){n.nextToken();const s=function(t){return{value:t.text,span:t.span}}(r),o=_e(t,e);return o||ne(n,"Expected expression after unary operator"),function(t,e){const[n]=t.span;return{kind:"unary-expression",operator:t,expression:e,start:n,end:e.end}}(s,o)}return function(t,e){const n=function(t,e){const{stream:n}=t,r=n.matchText("(");if(!r)return null;const s=Me(t,e);s||ne(n,"Expected expression after '('");const o=Qt(n,")","expression");return{kind:"parenthesized-expression",expression:s,start:r.span[0],end:o.span[1]}}(t,e)||function(t){const e=t.matchKind("number");return e?Ht(e):function(t){const e=t.matchKind("keyword","true")||t.matchKind("keyword","false");return e?Ht(e):null}(t)}(t.stream)||function(t,e){const n=function(t,e){const n=ve(t.stream);if(!n)return null;const{parts:r,start:s,end:o}=n,i=t.createRefIdent(r.join("::"));e&&(i.conditionRef=!0);const a=ae(t,i,s,o);return e||(t.saveIdent(i),t.addElem(a)),a}(t,e);if(!n)return null;if(!t.stream.nextTemplateStartToken())return n;const r=Se(t);return{kind:"type",name:n.ident,templateParams:r,start:n.start,end:t.stream.checkpoint(),contents:[]}}(t,e);return n?e?n:Be(t,n):null}(t,e)}function Pe(t,e){const{stream:n}=t,{prec:r,left:s,group:o}=e,{condRef:i,inTemplate:a}=e;let c=s,u=o;for(;;){const e=n.peek();if(!Ae(e,a))break;const s=me(e);if(s<r)break;n.nextToken(),u=xe(n,e.text,u);let o=_e(t,i);o||ne(n,"Expected expression after binary operator");const l=n.peek();if(Ae(l,a)){const e=me(l);e>s&&(o=Pe(t,{prec:e,left:o,group:"unary",condRef:i,inTemplate:a}).expr)}c=Yt(c,Jt(e),o)}return{expr:c,group:u}}function Ae(t,e){return!!function(t){return!!t&&t.text in fe}(t)&&(!e||!t.text.startsWith(">"))}function Be(t,e){const n=function(t,e){return function(t,e){return t.stream.matchText(".")?function(t,e){return{kind:"component-member-expression",base:t,access:e,start:t.start,end:e.end}}(e,oe(te(t.stream,"Expected identifier after '.'"))):null}(t,e)||function(t,e){const{stream:n}=t;return n.matchText("[")?function(t,e,n){return{kind:"component-expression",base:t,access:e,start:t.start,end:n}}(e,ee(t,"Expected expression in array index"),Qt(n,"]","array index").span[1]):null}(t,e)||Te(t,e,Me)}(t,e);return n?Be(t,n):e}function je(t){return[...se(t,Ie)]}function Ie(t){const{stream:e}=t,n=e.checkpoint();if(!e.matchText("@"))return null;e.reset(n);const r=Oe(t);if(r)return r;const s=function(t){const{stream:e}=t,n=e.checkpoint(),r=e.matchText("@");if(!r)return null;const s=r.span[0],o=e.peek();if(!o||"word"!==o.kind&&"keyword"!==o.kind)return e.reset(n),null;e.nextToken();const i=o.text;if("builtin"===i)return function(t,e){const{stream:n}=t;Qt(n,"(","@builtin");const r=te(n,"Expected identifier in @builtin");return Qt(n,")","@builtin parameter"),De({kind:"@builtin",param:oe(r)},e,n.checkpoint())}(t,s);if("interpolate"===i)return function(t,e){const{stream:n}=t;Qt(n,"(","@interpolate");const r=re(t,Fe);return Qt(n,")","@interpolate parameters"),De({kind:"@interpolate",params:r},e,n.checkpoint())}(t,s);if("diagnostic"===i)return function(t,e){const{stream:n}=t;Qt(n,"(","@diagnostic");const r=oe(te(n,"Expected severity in @diagnostic"));Qt(n,",","@diagnostic severity");const s=oe(te(n,"Expected rule in @diagnostic"));let o;o=n.matchText(".")?[s,oe(te(n,"Expected rule after namespace"))]:[s,null];return Qt(n,")","@diagnostic parameters"),De({kind:"@diagnostic",severity:r,rule:o},e,n.checkpoint())}(t,s);let a;e.matchText("(")&&(t.parsingAttrParam=i,a=function(t){return re(t,Ue)}(t),t.parsingAttrParam=void 0,Qt(e,")","attribute parameters"));if("must_use"===i&&void 0!==a)throw new Gt("@must_use does not accept parameters",[s,e.checkpoint()]);return De({kind:"@attribute",name:i,params:a},s,e.checkpoint())}(t);return s||null}function Re(t,e,n){const{stream:r}=t,s=r.checkpoint();if(!r.matchSequence("@",e))return null;Qt(r,"(",`@${e}`);const o=Me(t,!0);return o?(r.matchText(","),Qt(r,")",`@${e} expression`),n({kind:"translate-time-expression",expression:(i={value:o,span:[s,r.checkpoint()]}).value,span:i.span})):null;var i}function Ce(t){return{kind:"@if",param:t}}function Le(t){return{kind:"@elif",param:t}}function Oe(t){const{stream:e}=t,n=e.peek();if("@"!==n?.text)return null;const r=n.span[0],s=function(t){return Re(t,"if",Ce)}(t);if(s)return De(s,r,e.checkpoint());const o=function(t){return Re(t,"elif",Le)}(t);if(o)return De(o,r,e.checkpoint());const i=function(t){return t.stream.matchSequence("@","else")?{kind:"@else"}:null}(t);return i?De(i,r,e.checkpoint()):null}function De(t,e,n){return{kind:"attribute",attribute:t,start:e,end:n,contents:[]}}function Fe(t){return oe(te(t.stream,"Expected identifier"))}function Ue(t){const{stream:e}=t,n=e.checkpoint();Xt(t,"expression"),Me(t);const r=e.checkpoint();return{kind:"expression",start:n,end:r,contents:zt(t,n,r)}}function qe(t){const{stream:e}=t,n=e.checkpoint(),r=je(t),s=r.length>0?r:void 0,o=We(t,"enable",s)||We(t,"requires",s)||function(t,e){const{stream:n}=t,r=n.matchText("diagnostic");if(!r)return null;Qt(n,"(","diagnostic");const s=oe(te(n,"Expected severity in diagnostic"));Qt(n,",","diagnostic severity");const o=oe(te(n,"Expected rule name in diagnostic"));let i=null;n.matchText(".")&&(i=oe(te(n,"Expected subrule name after '.'")));return n.matchText(","),Qt(n,")","diagnostic rule"),Qt(n,";","diagnostic directive"),Xe({kind:"diagnostic",severity:s,rule:[o,i]},r,n,e)}(t,s);return o||e.reset(n),o}function We(t,e,n){const{stream:r}=t,s=r.matchText(e);if(!s)return null;const o=re(t,Ge);return Qt(r,";",`${e} directive`),Xe({kind:e,extensions:o},s,r,n)}function Ge(t){return oe(te(t.stream,"Expected identifier in name list"))}function Xe(t,e,n,r){const s={kind:"directive",directive:t,start:r?.[0]?.start??e.span[0],end:n.checkpoint()};return le(s,r),s}function ze(t,e){const n=kn(t,"if",e);if(null===n)return null;ee(t,"Expected condition expression after 'if'");const r=xn(t,"Expected '{' after if condition");return t.addElem(r),function(t){const{stream:e}=t;for(;e.matchText("else");){if(e.matchText("if")){ee(t,"Expected expression after 'else if'");const e=xn(t,"Expected '{' after else if");t.addElem(e);continue}const n=xn(t,"Expected '{' after else");t.addElem(n);break}}(t),bn(n,t,e)}function Ke(t,e){const n=kn(t,"switch",e);return null===n?null:(ee(t,"Expected expression after 'switch'"),function(t){const{stream:e}=t;je(t),Qt(e,"{","switch expression");for(;!e.matchText("}");){const n=e.checkpoint(),r=je(t);Xt(t,"switch-clause",r.length?r:void 0),e.matchText("case")?(Ve(t),He(t,"Expected '{' after case value")):e.matchText("default")?He(t,"Expected '{' after 'default'"):ne(e,"Expected 'case', 'default', or '}' in switch");const s=Kt("switch-clause",n,t,{});le(s,r.length?r:void 0),t.addElem(s)}}(t),bn(n,t,e))}function Ve(t){const{stream:e}=t;for(ee(t,"Expected expression after 'case'");e.matchText(",");)ee(t,"Expected expression after ',' in case values")}function He(t,e){t.stream.matchText(":");const n=je(t),r=hn(t,n.length>0?n:void 0);r||ne(t.stream,e),t.addElem(r)}function Je(t,e){return Ze(t,"const",!0,function(t){let e=t.currentScope();for(;"partial"===e.kind&&e.parent;)e=e.parent;return null===e.parent}(t),e)}function Ye(t,e=!0){const n=t.stream.matchKind("word");if(!n)return null;const r=n.span[0];Xt(t,"typeDecl");const s=ie(t,n,e);t.addElem(s),t.saveIdent(s.ident);const{typeRef:o,typeScope:i}=function(t){if(!t.stream.matchText(":"))return{};t.pushScope();const e=we(t);e||ne(t.stream,"Expected type after ':'");t.addElem(e);const n=t.currentScope();return t.popScope(),{typeRef:e,typeScope:n}}(t),a=t.stream.checkpoint();return{kind:"typeDecl",decl:s,typeRef:o,typeScope:i,start:r,end:a,contents:zt(t,r,a)}}function Ze(t,e,n,r,s){const{stream:o}=t,i=o.matchText(e);if(!i)return null;const a=gn(s,i.span[0]);t.pushScope("partial"),Xt(t,e,s);const c=Ye(t,r);c||ne(o,`Expected identifier after '${e}'`),t.addElem(c),n?(Qt(o,"=",`${e} identifier`),ee(t)):o.matchText("=")&&ee(t),Qt(o,";",`${e} declaration`);const u=o.checkpoint(),l=zt(t,a,u);c.decl.ident.dependentScope=t.currentScope(),t.popScope();const d={kind:e,name:c,start:a,end:u,contents:l};return le(d,s),pe(c,d),d}function Qe(t,e){const n=t.stream.matchText("const_assert");if(!n)return null;const r=gn(e,n.span[0]);Xt(t,"assert",e),ee(t),Qt(t.stream,";","const_assert expression");const s=Kt("assert",r,t,{});return le(s,e),s}function tn(t){const{stream:e}=t;if(e.nextTemplateStartToken())for(;;){const t=e.peek();if(t||ne(e,"Unclosed template in var declaration"),t.text.startsWith(">"))return void e.nextTemplateEndToken();e.nextToken()}}function en(t,e){return rn(t,"var",!0,!1,e)}function nn(t,e){return rn(t,"let",!1,!0,e)}function rn(t,e,n,r,s){const{stream:o}=t,i=o.matchText(e);if(!i)return null;const a=gn(s,i.span[0]);Xt(t,e,s),n&&tn(t);const c=Ye(t,!1);c||ne(o,`Expected identifier after '${e}'`),t.addElem(c),r?(Qt(o,"=",`${e} identifier (${e} requires initialization)`),ee(t)):o.matchText("=")&&ee(t),Qt(o,";",`${e} declaration`);const u=Kt(e,a,t,{name:c});return le(u,s),pe(c,u),u}const sn=new Set(["=","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>="]);function on(t,e){const{stream:n}=t,r=gn(e,n.checkpoint());return function(t,e,n){const{stream:r}=t;if(!r.matchText("return"))return null;Xt(t,"statement",n);const s=Me(t);s&&t.options.preserveExpressions&&t.addElem(s);return Qt(r,";","return statement"),bn(e,t,n)}(t,r,e)||function(t,e,n){const{stream:r}=t;if(!r.matchText("break"))return null;Xt(t,"statement",n),r.matchText("if")&&ee(t,"Expected condition after 'break if'");return Qt(r,";","break statement"),bn(e,t,n)}(t,r,e)||an(t,r,e,"continue")||an(t,r,e,"discard")||function(t,e){return t.matchText(";")?{kind:"statement",start:e,end:t.checkpoint(),contents:[]}:null}(n,r)||function(t,e,n){const{stream:r}=t;if(!r.matchText("_"))return null;cn(r)||ne(r,"Expected assignment operator after '_'");return Xt(t,"statement",n),ee(t,"Expected expression after assignment operator"),Qt(r,";","assignment"),bn(e,t,n)}(t,r,e)||function(t,e,n){const{stream:r}=t;Xt(t,"statement",n);const s=Me(t);if(!s)return zt(t,e,e),r.reset(e),null;t.options.preserveExpressions&&t.addElem(s);ln(r)||un(t);return Qt(r,";","expression"),bn(e,t,n)}(t,r,e)}function an(t,e,n,r){const{stream:s}=t;return s.matchText(r)?(Xt(t,"statement",n),Qt(s,";",`${r} statement`),bn(e,t,n)):null}function cn(t){return!!t.nextIf(({text:t})=>sn.has(t))}function un(t){return!!cn(t.stream)&&(ee(t,"Expected expression after assignment operator"),!0)}function ln(t){return!!t.nextIf(({text:t})=>"++"===t||"--"===t)}function dn(t,e){const{stream:n}=t,r=kn(t,"for",e);if(null===r)return null;t.pushScope(),Qt(n,"(","'for'"),function(t){const{stream:e}=t,n=en(t);if(n)t.addElem(n);else{const n=Me(t);n&&t.options.preserveExpressions&&t.addElem(n),Qt(e,";","for loop init")}}(t);const s=Me(t);s&&t.options.preserveExpressions&&t.addElem(s),Qt(n,";","for loop condition"),function(t){const e=Me(t);e&&t.options.preserveExpressions&&t.addElem(e);ln(t.stream)||un(t)}(t),Qt(n,")","for loop header");const o=xn(t,"Expected '{' after for loop header");return t.addElem(o),t.popScope(),bn(r,t,e)}function pn(t,e){const n=kn(t,"while",e);if(null===n)return null;ee(t,"Expected condition expression after 'while'");const r=xn(t,"Expected '{' after while condition");return t.addElem(r),bn(n,t,e)}function fn(t,e){const n=kn(t,"loop",e);if(null===n)return null;const r=xn(t,"Expected '{' after 'loop'",!0);return t.addElem(r),bn(n,t,e)}function mn(t,e){const n=kn(t,"continuing",e,"continuing");if(null===n)return null;const r=xn(t,"Expected '{' after 'continuing'");return t.addElem(r),bn(n,t,e,"continuing")}function hn(t,e,n){const r=t.stream.matchText("{");if(!r)return null;const s=gn(e,r.span[0]);Xt(t,"statement",e);const o=n?.noScope||function(t){return!!t&&ue(t)}(e);return o||t.pushScope(),function(t,e){const{stream:n}=t;for(;!n.matchText("}");){const r=vn(t);if(r||ne(n,"Expected statement or '}'"),t.addElem(r),e&&"continuing"===r.kind){Qt(n,"}","continuing block");break}}}(t,n?.loopBody),o||t.popScope(),bn(s,t,e)}function xn(t,e,n){const r=je(t),s=hn(t,r.length>0?r:void 0,n?{loopBody:n}:void 0);return s||ne(t.stream,e),s}function gn(t,e){return t?.[0]?.start??e}function kn(t,e,n,r="statement"){const s=t.stream.checkpoint();if(!t.stream.matchText(e))return null;const o=gn(n,s);return Xt(t,r,n),o}function bn(t,e,n,r="statement"){const s=Kt(r,t,e,{});return le(s,n),s}function vn(t){const{stream:e}=t,n=e.checkpoint(),r=je(t),s=e.peek();if(!s||"}"===s.text)return e.reset(n),null;const o=r.length>0&&ue(r);o&&t.pushScope("partial");const i=r.length>0?r:void 0,a=w([en,nn,Je,Qe,hn,ze,Ke,dn,pn,fn,mn,on],e=>e(t,i));return a?(function(t,e,n){if(e){t.popScope().condAttribute=function(t){return t.find(t=>ce(t.attribute))?.attribute}(n)}}(t,o,r),a):null}function En(t,e,n,r,s){const o=r?[e,...n,r,s]:[e,...n,s];return t?.length?[...t,...o]:o}function wn(t){const e=je(t);if("word"!==t.stream.peek()?.kind)return null;Xt(t,"param",e.length?e:void 0);const n=Ye(t,!1);if(!n)throw new Error("Unexpected: peek succeeded but parseTypedDecl failed");t.addElem(n);const r=Kt("param",gn(e,n.start),t,{name:n});return pe(n,r),le(r,e.length>0?e:void 0),r}function Sn(t){const{stream:e}=t,n=Oe(t),r=function(t){const e=t.matchText("import");if(!e)return null;const n=function(t){if(t.matchSequence("package","::"))return[Mn("package")];const e=[];for(;t.matchSequence("super","::");)e.push(Mn("super"));return e.length>0?e:null}(t)??[],r=yn(t)||$n(t);r||ne(t,"invalid import, expected { or name");t.matchText(";")||ne(t,"invalid import, expected ';'");return{statement:"import-statement"===r.kind?Tn(n,r):Nn(n,r),importPos:e.span[0]}}(e);if(!r)return n&&e.reset(n.start),null;const{statement:s,importPos:o}=r;return{kind:"import",imports:s,start:n?.start??o,end:e.checkpoint(),attributes:n?[n]:void 0}}function yn(t){if(!t.matchText("{"))return null;const e="invalid import collection, expected name",n=$n(t);n||ne(t,e);const r=[n];for(;t.matchText(",")&&"}"!==t.peek()?.text;){const n=$n(t);n||ne(t,e+" after ','"),r.push(n)}return t.matchText("}")||ne(t,"invalid import collection, expected }"),{kind:"import-collection",subtrees:r}}function $n(t){const e=function(t){const e=t.peek();if(!e)return null;const{text:n,kind:r}=e;return"word"!==r&&"keyword"!==r||ke.has(n)?null:(t.nextToken(),n)}(t);if(!e)return null;if(t.matchText("::")){const n=Mn(e),r=yn(t);if(r)return Nn([n],r);const s=$n(t);if(s)return Tn([n],s);ne(t,"invalid import, expected '{' or name")}if(t.matchText("as")){const n=t.matchKind("word");return n||ne(t,"invalid alias, expected name"),Nn([],_n(e,n.text))}return Nn([],_n(e))}function Tn(t,e){return{...e,segments:t.concat(e.segments)}}function Nn(t,e){return{kind:"import-statement",segments:t,finalSegment:e}}function Mn(t){return{kind:"import-segment",name:t}}function _n(t,e){return{kind:"import-item",name:t,as:e}}function Pn(t){const{stream:e}=t,n=e.checkpoint(),r=je(t),s=e.matchKind("word");if(!s)return e.reset(n),null;const o=gn(r,s.span[0]);Xt(t,"member",r.length?r:void 0);const i=oe(s);t.addElem(i),Qt(e,":","struct member name");const a=we(t);a||ne(e,"Expected type after ':'"),t.addElem(a);const c=Kt("member",o,t,{name:i,typeRef:a});return le(c,r.length?r:void 0),c}const An=[Je,function(t,e){return Ze(t,"override",!1,!0,e)},function(t,e){const{stream:n}=t,r=n.matchText("var");if(!r)return null;const s=gn(e,r.span[0]);t.pushScope("partial"),Xt(t,"gvar",e),tn(t);const o=Ye(t);o||ne(n,"Expected identifier after 'var'"),t.addElem(o),n.matchText("=")&&ee(t),Qt(n,";","var declaration"),o.decl.ident.dependentScope=t.currentScope(),t.popScope();const i=Kt("gvar",s,t,{name:o});return le(i,e),pe(o,i),i},function(t,e){const{stream:n}=t,r=n.matchText("alias");if(!r)return null;const s=gn(e,r.span[0]);Xt(t,"alias",e);const o=ie(t,te(n,"Expected identifier after 'alias'"),!0);t.addElem(o),t.saveIdent(o.ident),Qt(n,"=","alias name"),t.pushScope();const i=we(t);i||ne(n,"Expected type after '=' in alias declaration"),t.addElem(i),o.ident.dependentScope=t.currentScope(),t.popScope(),Qt(n,";","alias declaration");const a=Kt("alias",s,t,{name:o,typeRef:i});return le(a,e),de(o,a),a},function(t,e){const{stream:n}=t,r=n.matchText("struct");if(!r)return null;const s=gn(e,r.span[0]),o=ie(t,te(n,"Expected identifier after 'struct'"),!0);t.saveIdent(o.ident),Xt(t,"struct",e),t.addElem(o),Qt(n,"{","struct name"),t.pushScope();const i=function(t){const e=re(t,Pn);for(const n of e)t.addElem(n);return e}(t);o.ident.dependentScope=t.currentScope(),t.popScope(),Qt(n,"}","struct member");const a=Kt("struct",s,t,{name:o,members:i});return le(a,e),de(o,a),a},function(t,e){const{stream:n}=t,r=n.matchText("fn");if(!r)return null;const s=gn(e,r.span[0]),o=ie(t,te(n,"Expected identifier after 'fn'"),!0);t.saveIdent(o.ident),t.pushScope();const i=t.currentScope();t.pushScope();const a=function(t){const{stream:e}=t,n=[];Qt(e,"(","function name");for(;!e.matchText(")");){const r=wn(t);if(r||ne(e,"Expected function parameter or ')'"),n.push(r),!e.matchText(",")){Qt(e,")","function parameter");break}}return n}(t),c=t.currentScope();t.state.context.scope=i;const{returnType:u,returnAttributes:l}=function(t){const{stream:e}=t;if(!e.matchText("->"))return{};const n=je(t),r=we(t);r||ne(e,"Expected type after '->'");return{returnType:r,returnAttributes:n.length>0?n:void 0}}(t);t.state.context.scope=c;const d=function(t){return hn(t,void 0,{noScope:!0})}(t);d||ne(n,"Expected function body"),t.popScope(),o.ident.dependentScope=t.currentScope(),t.popScope();const p={kind:"fn",name:o,params:a,body:d,returnType:u,returnAttributes:l,start:s,end:n.checkpoint(),contents:En(e,o,a,u,d)};return le(p,e),de(o,p),p},Qe];function Bn(t){for(!function(t){const e=function(t){return[...se(t,Sn)]}(t);for(const n of e)t.addElem(n),t.state.stable.imports.push(n.imports)}(t),function(t){const e=se(t,qe);for(const n of e)t.addElem(n)}(t);jn(t););}function jn(t){const{stream:e}=t;if(e.matchText(";"))return!0;const n=je(t),r=ue(n);r&&t.pushScope("partial");const s=function(t,e){const n=e.length?e:void 0,r=w(An,e=>e(t,n));if(r)return function(t,e,n){n.length&&e.start>n[0].start&&(e.start=n[0].start);if(t.addElem(e),"assert"===e.kind){const{stable:n}=t.state;n.moduleAsserts??=[],n.moduleAsserts.push(e)}}(t,r,e),!0;return!1}(t,n);return r&&s&&function(t,e){const n=t.popScope();n.condAttribute=w(e,({attribute:t})=>{return"@if"===(e=t).kind||"@elif"===e.kind||"@else"===e.kind?t:void 0;var e})}(t,n),!!s||(n.length&&ne(e,"Expected declaration after attributes"),!1)}var In=class{src;srcModule;stream;state;options;constructor(t,e,n){this.stream=t,this.state=e,this.srcModule=e.stable.srcModule,this.src=this.srcModule.src,this.options=n??{}}position(){return this.stream.checkpoint()}currentScope(){return this.state.context.scope}addElem(t){const{openElems:e}=this.state.context;e.length>0&&e[e.length-1].contents.push(t)}pushScope(t="scope"){const{scope:e}=this.state.context,n=q(e,t);e.contents.push(n),this.state.context.scope=n}popScope(){const t=this.state.context,e=t.scope;return e.parent&&(t.scope=e.parent),e}isModuleScope(){let t=this.currentScope();for(;"partial"===t.kind&&t.parent;)t=t.parent;return null===t.parent}parsingAttrParam;createRefIdent(t){const e={kind:"ref",originalName:t,ast:this.state.stable,id:U(),refIdentElem:null};return this.parsingAttrParam&&(e.attrParam=this.parsingAttrParam),e}createDeclIdent(t,e=!1){return{kind:"decl",originalName:t,containingScope:this.state.context.scope,isGlobal:e,id:U(),srcModule:this.srcModule,declElem:null}}saveIdent(t){this.state.context.scope.contents.push(t)}};const Rn="alias break case const const_assert continue continuing \n  default diagnostic discard else enable false fn for if \n  let loop override requires return struct switch true var while".split(/\s+/),Cn="NULL Self abstract active alignas alignof as asm asm_fragment async attribute auto await\n  become cast catch class co_await co_return co_yield coherent column_major\n  common compile compile_fragment concept const_cast consteval constexpr constinit crate\n  debugger decltype delete demote demote_to_helper do dynamic_cast\n  enum explicit export extends extern external fallthrough filter final finally friend from fxgroup\n  get goto groupshared highp impl implements import inline instanceof interface layout lowp\n  macro macro_rules match mediump meta mod module move mut mutable\n  namespace new nil noexcept noinline nointerpolation non_coherent noncoherent noperspective null nullptr\n  of operator package packoffset partition pass patch pixelfragment precise precision premerge\n  priv protected pub public readonly ref regardless register reinterpret_cast require resource restrict\n  self set shared sizeof smooth snorm static static_assert static_cast std subroutine super\n  target template this thread_local throw trait try type typedef typeid typename typeof\n  union unless unorm unsafe unsized use using varying virtual volatile wgsl where with writeonly yield".split(/\s+/);var Ln=class{cache=new On(5);inner;constructor(t){this.inner=t}checkpoint(){return this.inner.checkpoint()}reset(t){this.inner.reset(t)}nextToken(){const t=this.checkpoint(),e=this.cache.get(t);if(void 0!==e)return this.reset(e.checkpoint),e.token;{const e=this.inner.nextToken(),n=this.checkpoint();return this.cache.set(t,{token:e,checkpoint:n}),e}}get src(){return this.inner.src}},On=class extends Map{max;constructor(t){super(),this.max=t}set(t,e){if(this.size>this.max){const t=this.keys().next().value;t&&this.delete(t)}return super.set(t,e)}};function Dn(t){const[e,n]=t;if("string"==typeof n){const t=`(${qn(n)})`;return Fn(e,new RegExp(t)),t}return Fn(e,n),`(${n.source})`}function Fn(t,e){if(new RegExp("|"+e.source).exec("").length>1)throw new Error(`match expression groups must be non-capturing: ${t}: /${e.source}/. Use (?:...) instead.`)}const Un=/[$+*.?|(){}[\]\\/^]/g;function qn(t){return t.replace(Un,"\\$&")}function Wn(t){const e=t.split(/\s+/).sort((t,e)=>e.length-t.length).filter(t=>t).map(qn);return new RegExp(e.join("|"))}var Gn=class{position=0;text;matchers;constructor(t,e){this.text=t,this.matchers=e}checkpoint(){return this.position}reset(t){this.position=t}nextToken(){const t=this.matchers.execAt(this.text,this.position);return null===t?null:(this.position=t.span[1],t)}get src(){return this.text}};const Xn=new Set(Rn.concat(Cn)),zn=new class{groups;exp;constructor(t){this.groups=Object.keys(t);const e=Object.entries(t).map(Dn).join("|");this.exp=new RegExp(e,"dyu")}execAt(t,e){this.exp.lastIndex=e;const n=function(t){if(void 0!==t)for(let e=1;e<t.length;e++){const n=t[e];if(void 0!==n)return{span:n,groupDex:e-1}}}(this.exp.exec(t)?.indices);if(n){const{span:e,groupDex:r}=n;return{kind:this.groups[r],span:e,text:t.slice(e[0],e[1])}}return null}}({word:/(?:(?:[_\p{XID_Start}][\p{XID_Continue}]+)|(?:[\p{XID_Start}]))/u,number:new RegExp(/(?:0[fh])|(?:[1-9][0-9]*[fh])/.source+/|(?:[0-9]*\.[0-9]+(?:[eE][+-]?[0-9]+)?[fh]?)/.source+/|(?:[0-9]+\.[0-9]*(?:[eE][+-]?[0-9]+)?[fh]?)/.source+/|(?:[0-9]+[eE][+-]?[0-9]+[fh]?)/.source+/|(?:0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+(?:[pP][+-]?[0-9]+[fh]?)?)/.source+/|(?:0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*(?:[pP][+-]?[0-9]+[fh]?)?)/.source+/|(?:0[xX][0-9a-fA-F]+[pP][+-]?[0-9]+[fh]?)/.source+/|(?:0[xX][0-9a-fA-F]+[iu]?)/.source+/|(?:0[iu]?)|(?:[1-9][0-9]*[iu]?)/.source),blankspaces:/[ \t\n\v\f\r\u{0085}\u{200E}\u{200F}\u{2028}\u{2029}]+/u,commentStart:/\/\/|\/\*/,symbol:Wn("& && -> @ / ! [ ] { } :: : , == = != >>= >> >= > <<= << <= < % - -- . + ++ | || ( ) ; * ~ ^ // /* */ += -= *= /= %= &= |= ^= _"),invalid:/[^]/});var Kn=class{stream;eolPattern=/[\n\v\f\u{0085}\u{2028}\u{2029}]|\r\n?/gu;blockCommentPattern=/\/\*|\*\//g;src;constructor(t){this.src=t,this.stream=new Ln(new Gn(t,zn))}checkpoint(){return this.stream.checkpoint()}reset(t){this.stream.reset(t)}nextToken(){for(;;){const t=this.stream.nextToken();if(null===t)return null;const e=t.kind;if("blankspaces"!==e){if("commentStart"!==e){if("word"===e){const e=t;return Xn.has(t.text)&&(e.kind="keyword"),e}if("invalid"===e)throw new Gt("Invalid token "+t.text,t.span);return t}"//"===t.text?this.stream.reset(this.skipToEol(t.span[1])):this.stream.reset(this.skipBlockComment(t.span[1]))}}}peek(){const t=this.checkpoint(),e=this.nextToken();return this.reset(t),e}matchText(t){const e=this.peek();return e?.text===t?(this.nextToken(),e):null}matchKind(t,e){const n=this.peek();return n?.kind!==t||e&&n.text!==e?null:(this.nextToken(),n)}nextIf(t){const e=this.peek();return e&&t(e)?(this.nextToken(),e):null}matchSequence(...t){const e=this.checkpoint(),n=[];for(const r of t){const t=this.matchText(r);if(!t)return this.reset(e),null;n.push(t)}return n}skipToEol(t){return this.eolPattern.lastIndex=t,null===this.eolPattern.exec(this.src)?this.src.length:this.eolPattern.lastIndex}skipBlockComment(t){let e=t;for(;;){this.blockCommentPattern.lastIndex=e;const t=this.blockCommentPattern.exec(this.src);if(null===t)throw new Gt("Unclosed block comment!",[e,e]);if("*/"===t[0])return this.blockCommentPattern.lastIndex;if("/*"!==t[0])throw new Error("Unreachable, invalid block comment pattern");e=this.skipBlockComment(this.blockCommentPattern.lastIndex)}}nextTemplateStartToken(){const t=this.stream.checkpoint(),e=this.nextToken();return this.stream.reset(t),null===e||"symbol"!==e.kind?null:"<"===e.text?this.isTemplateStart(e.span[1])?(this.stream.reset(e.span[1]),e):(this.stream.reset(t),null):null}nextTemplateEndToken(){const t=this.stream.checkpoint(),e=this.nextToken();if(this.stream.reset(t),null===e)return null;if("symbol"===e.kind&&">"===e.text[0]){const t=e.span[0];return this.stream.reset(t+1),{kind:"symbol",span:[t,t+1],text:">"}}return null}isTemplateStart(t){this.stream.reset(t);let e=1;for(;;){const t=this.stream.nextToken();if(null===t)return!1;if("symbol"===t.kind)if("<"===t.text)e+=1;else if(">"===t.text[0]){if(">"===t.text||">="===t.text)e-=1;else{if(">>="!==t.text&&">>"!==t.text)throw new Error("This case should never be reached, looks like we forgot one of the tokens that start with >");e-=2}if(e<=0)return!0}else if("("===t.text)this.skipBracketsTo(")");else if("["===t.text)this.skipBracketsTo("]");else if("=="===t.text||"!="===t.text||";"===t.text||"{"===t.text||":"===t.text||"&&"===t.text||"||"===t.text)return!1}}skipBracketsTo(t){for(;;){const e=this.stream.nextToken();if(null===e){const t=this.stream.checkpoint();throw new Gt("Unclosed bracket!",[t,t])}if("symbol"===e.kind)if("("===e.text)this.skipBracketsTo(")");else if("["===e.text)this.skipBracketsTo("]");else if(e.text===t)return}}};function Vn(t,e){const{ctx:n,state:r}=function(t,e){const n=new Kn(t.src),r=q(null),s={kind:"module",contents:[],start:0,end:t.src.length},o={context:{scope:r,openElems:[]},stable:{srcModule:t,moduleElem:s,rootScope:r,imports:[]}};return{ctx:new In(n,o,e),state:o}}(t,e);try{Xt(n,"module"),Bn(n);const t=r.stable.moduleElem;return t.contents=zt(n,0,t.end),r.stable}catch(e){if(e instanceof Gt)throw new Hn({cause:e,src:t});throw new Hn({cause:new Gt(e instanceof Error?e.message:String(e),[0,0]),src:t})}}var Hn=class extends Error{span;src;constructor(t){const e=t.src.src,[n,r]=y(t.cause.span[0],e);let s=`${t.src.debugFilePath}:${n}:${r}`;s+=` error: ${t.cause.message}\n`,s+=$(e,t.cause.span).join("\n"),super(s,{cause:t.cause}),this.span=t.cause.span,this.src=t.src}};function Jn(t,e){return Vn(t,e)}function Yn(t,e){if(t._flatImports&&!e)return t._flatImports;const n=t.moduleElem.contents.filter(t=>"import"===t.kind),r=(e?I(n,e):n).map(t=>t.imports).flatMap(Wt);return e||(t._flatImports=r),r}function Zn(t){const{rootAst:e,resolver:n,virtuals:r,accumulateUnbound:s,discoveryMode:o}=t,{conditions:i={},mangler:a=Lt}=t,c=e.srcModule.modulePath.split("::")[0],u=o?nr(e.rootScope):er(e.rootScope,i),{globalNames:l,knownDecls:d}=function(t){for(const e of t)e.mangledName=e.originalName;const e=new Set(t);return{globalNames:new Set(t.map(t=>t.originalName)),knownDecls:e}}(u),p={resolver:n,conditions:i,knownDecls:d,virtuals:r,mangler:a,packageName:c,rootModulePath:e.srcModule.modulePath,foundScopes:new Set,globalNames:l,globalStatements:new Map,unbound:s?[]:void 0,discoveryMode:o},f={decls:new Map(u.map(t=>[t.originalName,t])),parent:null},m=u.flatMap(t=>or(t,p)),{rootScope:h}=e;return{decls:[...m,...sr(h,p,f)],globalNames:l,newStatements:[...p.globalStatements.values()],unbound:p.unbound}}function Qn(t){if("decl"!==t.kind||"partial"!==t.containingScope.kind)return"decl"===t.kind?C(t.declElem?.attributes):"partial"===t.kind||"scope"===t.kind?t.condAttribute:void 0}function*tr(t,e){let n=!1;for(const r of t.contents){const t=R(Qn(r),n,e);n=t.nextElseState,t.valid&&(yield r)}}function er(t,e){return dr(tr(t,e))}function nr(t){return dr(t.contents)}function rr(t,e,n){return function(t,e){const n=t;return n._validRootDecls??=er(t,e),n._validRootDecls}(t,n).find(t=>t.originalName===e)}function sr(t,e,n){const{dontFollowDecls:r,foundScopes:s}=e;if(s.has(t))return[];s.add(t);const{newGlobals:o,newFromChildren:i}=function(t,e,n){const r=[],s=[],o=e.discoveryMode?t.contents:tr(t,e.conditions);for(const t of o)if("decl"===t.kind)n.decls.set(t.originalName,t);else if("ref"===t.kind){const s=ir(t,n,e);s&&r.push(s)}else{const r="scope"===t.kind?jt(n):n;s.push(...sr(t,e,r))}return{newGlobals:r,newFromChildren:s}}(t,e,n);return[o,i,r?[]:ar(o,e)].flat()}function or(t,e){const{dependentScope:n}=t;if(!n)return[];const r=function(t,e){a(t.isGlobal,Bt(t));let n=t.containingScope;for(;n.parent;)n=n.parent;a("scope"===n.kind);const r=n;if(!r._scopeDecls){const t=er(n,e);r._scopeDecls={decls:new Map(t.map(t=>[t.originalName,t]))}}return r._scopeDecls}(t,e.conditions);return r?sr(n,e,jt(r)):[]}function ir(t,e,n){if(t.refersTo||t.std)return;if(t.conditionRef)return;if(t.attrParam&&!Z.has(t.attrParam))return;const r=cr(t,e)??function(t,e){const{conditions:n,unbound:r,discoveryMode:s}=e,o=s?void 0:n,i=Yn(t.ast,o),a=t.originalName.split("::"),c=function(t,e){const n=e.find(e=>e.importPath.at(-1)===t[0]);if(n)return[...n.modulePath,...t.slice(1)]}(a,i)??function(t){if(t.length>1)return t}(a);if(!c)return void(r&&!lr(t.originalName)&&ur(r,a,t));const u=function(t,e,n){const r=Ut(t,e.modulePath.split("::")).slice(0,-1).join("::"),s=n.resolver.resolveModule(r)??function(t,e){const n=e.virtuals?.[t];if(!n)return;if(n.ast)return n.ast;const{conditions:r,rootModulePath:s,packageName:o}=e,i=n.fn({conditions:r,rootModulePath:s,packageName:o});return n.ast=Jn({modulePath:o+"::"+t,debugFilePath:t,src:i}),n.ast}(t[0],n);if(!s)return;const o=k(t),i=rr(s.rootScope,o,n.conditions);if(i)return{decl:i,moduleAst:s}}(c,t.ast.srcModule,e);u||(r?ur(r,c,t):A(t,`module not found for '${c.join("::")}'`));return u}(t,n);if(r)return t.refersTo=r.decl,function(t,e,n){const{decl:r,moduleAst:s}=e,{knownDecls:o,globalNames:i,mangler:a,globalStatements:c}=n;if(o.has(r))return;o.add(r);if(function(t,e,n,r,s){if(e.mangledName)return;const o=t.lastIndexOf("::"),i=-1===o?t:t.slice(o+2),a=e.isGlobal?s(e,r,i,n):e.originalName;e.mangledName=a,n.add(a)}(t.originalName,r,i,r.srcModule,a),!r.isGlobal)return;for(const t of s.moduleAsserts??[])c.set(t,{srcModule:r.srcModule,elem:t});return r}(t,r,n);lr(t.originalName)?t.std=!0:n.unbound||A(t,`unresolved identifier '${t.originalName}'`)}function ar(t,e){return t.flatMap(t=>or(t,e))}function cr(t,e){const n=e.decls.get(t.originalName);return n?{decl:n,moduleAst:t.ast}:e.parent?cr(t,e.parent):void 0}function ur(t,e,n){const{srcModule:r,start:s,end:o}=n.refIdentElem;t.push({path:e,srcModule:r,start:s,end:o})}function lr(t){return Q(t)||tt(t)||et(t)}function dr(t){return[...t].flatMap(t=>{const{kind:e}=t;return"decl"===e?[t]:"partial"===e?dr(t.contents):[]})}function pr(t){const e=t.split("/").filter(t=>"."!==t),n=[];return e.forEach(t=>{""!==t&&(".."===t&&n.length&&".."!==n[n.length-1]?n.pop():n.push(t))}),n.join("/")}function fr(t){const e=t.lastIndexOf("/"),n=-1===e?0:e+1,r=t.indexOf(".",n),s=-1===r?t.length:r;return t.slice(0,s)}const mr=/^lib\.w[eg]sl$/i;var hr=class{astCache=new Map;sources;packageName;debugWeslRoot;constructor(t,e={}){const{packageName:n="package",debugWeslRoot:r}=e;this.sources=t,this.packageName=n,this.debugWeslRoot=qt(r)}resolveModule(t){const e=this.astCache.get(t);if(e)return e;const n=this.findSource(t);if(void 0===n)return;const r=Jn({modulePath:t,debugFilePath:this.modulePathToDebugPath(t),src:n});return this.astCache.set(t,r),r}findSource(t){if(void 0!==this.sources[t])return this.sources[t];const e=this.moduleToFilePath(t);return void 0!==e?vr(this.sources,e):void 0}moduleToFilePath(t){return Ft(t,this.packageName)}modulePathToDebugPath(t){const e=this.moduleToFilePath(t)??t;return this.debugWeslRoot+e+".wesl"}allModules(){for(const t of Object.keys(this.sources)){const e="package"!==this.packageName,n=br(t,this.packageName,e);this.resolveModule(n)}return this.astCache.entries()}},xr=class{resolvers;constructor(t){this.resolvers=t}resolveModule(t){for(const e of this.resolvers){const n=e.resolveModule(t);if(n)return n}}},gr=class{astCache=new Map;sources;packageName;debugWeslRoot;constructor(t,e){this.sources=t.modules,this.packageName=t.name,this.debugWeslRoot=qt(e)}resolveModule(t){const e=this.packageName+"::";if(t!==this.packageName&&!t.startsWith(e))return;const n=this.astCache.get(t);if(n)return n;const r=this.findSource(t);if(!r)return;const s=Jn({modulePath:t,debugFilePath:this.modulePathToDebugPath(t),src:r});return this.astCache.set(t,s),s}findSource(t){const e=this.moduleToFilePath(t);if(t===this.packageName){const t=vr(this.sources,"lib",["wesl","wgsl"]);if(t)return t}return vr(this.sources,e)}moduleToFilePath(t){return Ft(t,this.packageName)??t}modulePathToDebugPath(t){const e=this.moduleToFilePath(t);return this.debugWeslRoot+this.packageName+"/"+e+".wesl"}};function kr(t){const e=new Map;return{resolveModule(n){const r=e.get(n);if(r)return r;const s=t.resolveModule(n);if(!s)return;const o=Jn(s.srcModule);return e.set(n,o),o}}}function br(t,e,n){if(t.includes("::"))return t;if(n&&mr.test(t))return e;return e+"::"+fr(pr(t)).replaceAll("/","::")}function vr(t,e,n=["wesl","wgsl"]){for(const r of["","./"]){const s=r+e;if(void 0!==t[s])return t[s];for(const e of n){const n=`${s}.${e}`;if(void 0!==t[n])return t[n]}}}function Er(t){return wr(t).map(t=>t.path)}function wr(t){const e={resolver:t,conditions:{},knownDecls:new Set,foundScopes:new Set,globalNames:new Set,globalStatements:new Map,mangler:Lt,packageName:"package",rootModulePath:"package::main",unbound:[],dontFollowDecls:!0,discoveryMode:!0};for(const[,n]of t.allModules()){const t=nr(n.rootScope),r={decls:new Map(t.map(t=>[t.originalName,t])),parent:null};for(const n of E(t,t=>t.dependentScope))sr(n,e,jt(r));sr(n.rootScope,e,r)}return e.unbound}var Sr=class{visited=new Set;#i;constructor(t){this.#i=t}resolveModule(t){const e=this.#i.resolveModule(t);return e&&this.visited.add(t),e}};function yr(t,e,n,r="package"){const s=new Sr(e),o=s.resolveModule(n);if(!o)throw new Error(`root module not found: '${n}'`);const i=Zn({rootAst:o,resolver:s,accumulateUnbound:!0,discoveryMode:!0}),a=new Map(Object.keys(t).map(t=>[br(t,r,!1),t])),c=[...s.visited].map(t=>a.get(t)).filter(t=>void 0!==t).map(e=>[e,t[e]]),u=(i.unbound??[]).map(t=>t.path);return{weslSrc:Object.fromEntries(c),unbound:u}}function $r(t){return t.replace(/^@/,"").replaceAll("/","__").replaceAll("-","_")}function*Tr(t){const[e,n]=function(t,e){const n=t.indexOf(e);return-1===n?[t,""]:[t.slice(0,n),t.slice(n)]}(t,"/");let r=e,s="";if(e.includes("__")){const[t,...n]=e.split("__");r=n.join("__"),s=`@${t}/`}yield`${s}${r}${n}`,yield`${s}${r.replaceAll("_","-")}${n}`}var Nr=class{sourceMap;constructor(t){this.sourceMap=t}createShaderModule(t,e){if(!("injectError"in t))return t.createShaderModule({...e,code:this.dest});t.pushErrorScope("validation");const n=t.createShaderModule({...e,code:this.dest});t.popErrorScope();const{promise:r,resolve:s}=Promise.withResolvers();return t.injectError("validation",r),n.getCompilationInfo().then(t=>{if(0===t.messages.length)return void s(null);const e=this.mapGPUCompilationInfo(t),r=function(t,e){if(0===t.messages.length)return null;let n=`Compilation log for [Invalid ShaderModule (${e.label||"unlabled"})]:\n`;const r=t.messages.filter(t=>"error"===t.type).length;r>0&&(n+=`${r} error(s) generated while compiling the shader:\n`);for(const e of t.messages){const{lineNum:t,linePos:r}=e;n+=`${e.module.url}:${t}:${r}`,n+=` ${e.type}: ${e.message}\n`;const s=e.module.text;s&&(n+=$(s,[e.offset,e.offset+e.length]).join("\n"))}return n}(e,n);a(null!==r);const o=new GPUValidationError(r);o.cause=new Error("createShaderModule failed"),o.compilationInfo=e,s(o)}),n}get dest(){return this.sourceMap.dest.text}mapGPUCompilationInfo(t){return{__brand:t.__brand,messages:t.messages.map(t=>this.mapGPUCompilationMessage(t))}}mapGPUCompilationMessage(t){const e=this.sourceMap,n=e.destToSrc(t.offset),r=(t.length>0?e.destToSrc(t.offset+t.length):n).position-n.position,[s,o]=y(n.position,n.src.text);return{__brand:t.__brand,type:t.type,message:t.message,offset:n.position,length:r,lineNum:s,linePos:o,module:{url:n.src.path??"",text:n.src.text}}}};var Mr=class t{entries;dest;constructor(t,e=[]){this.dest=t,this.entries=e}addEntries(t){this.entries.push(...t)}mapPositions(...t){return t.map(t=>this.destToSrc(t))}compact(){if(!this.entries.length)return;let t=this.entries[0];const e=[t];for(let n=1;n<this.entries.length;n++){const r=this.entries[n];r.src.path===t.src.path&&r.src.text===t.src.text&&t.destEnd===r.destStart&&t.srcEnd===r.srcStart&&t.srcEnd-t.srcStart===t.destEnd-t.destStart?(t.destEnd=r.destEnd,t.srcEnd=r.srcEnd):(e.push(r),t=r)}this.entries=e}sort(){this.entries.sort((t,e)=>t.destStart-e.destStart)}merge(e){if(e===this)return this;const n=e.entries.filter(t=>t.src.path===this.dest.path&&t.src.text===this.dest.text);if(0===n.length)return console.log("other source map does not link to this one"),e;n.sort((t,e)=>t.srcStart-e.srcStart);const r=n.map(t=>{const{src:e,position:n}=this.destToSrc(t.srcStart),{src:r,position:s}=this.destToSrc(t.srcEnd);if(r!==e)throw new Error("NYI, need to split");return{src:e,srcStart:n,srcEnd:s,destStart:t.destStart,destEnd:t.destEnd}}),s=e.entries.filter(t=>t.src.path!==this.dest.path||t.src.text!==this.dest.text),o=new t(e.dest,[...s,...r]);return o.sort(),o}destToSrc(t){const e=this.entries.find(e=>e.destStart<=t&&e.destEnd>=t);return e?{src:e.src,position:e.srcStart+t-e.destStart}:{src:this.dest,position:t}}};var _r=class{#t=[];#a=0;#c=[];source;constructor(t){this.source=t}add(t,e,n){const r=this.#a;this.#a+=t.length;const s=this.#a;this.#t.push(t),this.#c.push({src:this.source,srcStart:e,srcEnd:n,destStart:r,destEnd:s})}appendNext(t){const e=this.#c.at(-1)?.destEnd??0;this.add(t,e,e+t.length)}addSynthetic(t,e,n,r){const s=this.#a;this.#a+=t.length;const o=this.#a;this.#t.push(t),this.#c.push({src:{text:e},srcStart:n,srcEnd:r,destStart:s,destEnd:o})}addNl(){const{srcStart:t,srcEnd:e}=this.#c.at(-1)??{srcStart:0,srcEnd:0};this.add("\n",t,e)}addCopy(t,e){const n=this.source.text.slice(t,e);this.add(n,t,e)}static build(t){const e=new Mr({text:t.map(t=>t.#t.join("")).join("")},t.flatMap(t=>t.#c));return e.compact(),e}};async function Pr(t){return new Nr(Ar(t))}function Ar(t){const{weslSrc:e,libs:n=[],packageName:r,debugWeslRoot:s,resolver:o}=t;if(!o&&!e)throw new Error("Either resolver or weslSrc must be provided");const i=[o??new hr(e,{packageName:r,debugWeslRoot:s}),...Br(n,s)],a=1===i.length?i[0]:new xr(i);return jr({...t,resolver:a})}function Br(t,e){return function(t){const e=[],n=new Set;function r(t){n.has(t)||(n.add(t),e.push(t),t.dependencies?.forEach(r))}return t.forEach(r),e}(t).map(t=>new gr(t,e))}function jr(t){const{transformedAst:e,newDecls:n,newStatements:r}=Ir(t),s=function(t,e,n,r,s={}){const o=r.map(t=>Or(t.srcModule,t.elem,s,{addNl:!0})),i=Dr(e);nt({srcBuilder:i,rootElems:[t],conditions:s,extracting:!1});const a=n.map(t=>Or(t.srcModule,t.declElem,s,{skipConditionalFiltering:!0}));return[...o,i,...a]}(e.moduleElem,e.srcModule,n,r,t.conditions);return _r.build(s)}function Ir(t){const{resolver:e,mangler:n,constants:r,config:s}=t,{rootModuleName:o="main",conditions:i={}}=t,a=function(t,e,n){const r=t.resolveModule(e);if(!r)throw console.log(`root module not found: ${e} (from ${n})`),new Error(`Root module not found: ${n}`);return r}(e,Rr(o),o),{globalNames:c,decls:u,newStatements:l}=Zn({rootAst:a,resolver:e,conditions:i,virtuals:Cr(t.virtualLibs,r),mangler:n});return{transformedAst:Lr(a,c,s),newDecls:u,newStatements:l}}function Rr(t){return t.includes("::")?t:t.includes("/")||t.endsWith(".wesl")||t.endsWith(".wgsl")?"package::"+t.replace(/\.(wesl|wgsl)$/,"").replace(/^\.\//,"").replaceAll("/","::"):"package::"+t}function Cr(t,e){let n=t;if(e){const t=()=>Object.entries(e).map(([t,e])=>`const ${t} = ${e};`).join("\n");n={...n,constants:t}}return n&&S(n,t=>({fn:t}))}function Lr(t,e,n){const{moduleElem:r,srcModule:s}=t,o={moduleElem:r,srcModule:s,globalNames:e,notableElems:{}};return E(n?.plugins??[],t=>t.transform).reduce((t,e)=>e(t),o)}function Or(t,e,n,r={}){const s=Dr(t);return nt({srcBuilder:s,rootElems:[e],conditions:n,skipConditionalFiltering:r.skipConditionalFiltering}),r.addNl&&s.addNl(),s}function Dr(t){return new _r({text:t.src,path:t.debugFilePath})}function Fr(t,e){e(t),t.contents&&t.contents.forEach(t=>{Fr(t,e)})}function Ur(t){const{kind:e}=t.attribute;if("@attribute"===e){const{params:e}=t.attribute;return void 0===e||0===e.length?"@"+t.attribute.name:`@${t.attribute.name}(${e.map(t=>Xr(t)).join(", ")})`}return"@builtin"===e?"@builtin("+t.attribute.param.name+")":"@diagnostic"===e?"@diagnostic"+mt(t.attribute.severity,t.attribute.rule):"@if"===e?`@if(${ht(t.attribute.param.expression)})`:"@elif"===e?`@elif(${ht(t.attribute.param.expression)})`:"@else"===e?"@else":"@interpolate"===e?`@interpolate(${t.attribute.params.map(t=>t.name).join(", ")})`:void c(e)}function qr(t){return`<${t.map(Wr).join(", ")}>`}function Wr(t){return void 0===t?"?":"type"===t.kind?function(t){if(!t)return"?";const{name:e,templateParams:n}=t,r=n?qr(n):"";return`${Gr(e)}${r}`}(t):ht(t)}function Gr(t){if("string"==typeof t)return t;if(t.std)return t.originalName;const e=gt(t);return e.mangledName||e.originalName}function Xr(t){if("translate-time-expression"===t.kind)throw new Error("Not supported");return"expression"===t.kind||"stuff"===t.kind?t.contents.map(t=>{const{kind:e}=t;return"text"===e?t.srcModule.src.slice(t.start,t.end):"ref"===e?Gr(t.ident):`?${t.kind}?`}).join(" "):"name"===t.kind?t.name:void c(t)}const zr=Wn(H);function Kr(){return{transform:Vr}}function Vr(t){const e=structuredClone(t),{moduleElem:n,globalNames:r,notableElems:s}=e,o=Jr(n);Hr(n,o);const i=o.flatMap(t=>Zr(t,r)),a=ts(n);a.forEach(({memberRef:t,struct:e})=>{ns(t,e)}),a.forEach(({intermediates:t})=>{t.forEach(t=>{t.contents=[]})});const c=function(t){return t.contents.filter(t=>"struct"!==t.kind||!t.bindingStruct)}(n);return n.contents=[...i,...c],s.bindingStructs=o,{...e,moduleElem:n}}function Hr(t,e){const n=function(t,e){for(const n of t){const{params:t}=n;for(const r of t){const t=((r.name?.typeRef?.name)?.refersTo)?.declElem,s=e.find(e=>e===t);if(s)return{fn:n,struct:s}}}}(t.contents.filter(t=>"fn"===t.kind),e);if(n){const{fn:t,struct:e}=n;e.entryFn=t}}function Jr(t){const e=t.contents.filter(t=>"struct"===t.kind).filter(Yr);return e.forEach(t=>{t.bindingStruct=!0}),e}function Yr(t){return t.members.some(({attributes:t})=>function(t){return!!t&&t.some(({attribute:t})=>"@attribute"===t.kind&&("binding"===t.name||"group"===t.name))}(t))}function Zr(t,e){return t.members.map(t=>{const{typeRef:n,name:r}=t,{name:s}=n,o=n?.templateParams,i=Ot(r.name,e);t.mangledVarName=i,e.add(i);const a=t.attributes?.map(Ur).join(" ")??"",c=function(t,e){if("ptr"===t.originalName){const t=e??[],n=[t[0]];return t[2]&&n.push(t[2]),{storage:qr(n),varType:Wr(t?.[1])}}}(s,o)??function(t,e){if("string"!=typeof t)return{varType:(t.std?t.originalName:"??")+(e?qr(e):""),storage:""}}(s,o)??function(t,e){if(zr.test(t.originalName))return{varType:t+(e?qr(e):""),storage:""}}(s,o);if(!c)return console.log("unhandled case transforming member",s),Qr(a,i,"","??");const{storage:u,varType:l}=c;return Qr(a,i,u,l)})}function Qr(t,e,n,r){return{kind:"synthetic",text:`${t} var${n} ${e} : ${r};\n`}}function ts(t){const e=[];return Fr(t,t=>{"memberRef"===t.kind&&e.push(t)}),E(e,es)}function es(t){const e=function(t){const e=gt(t).declElem;if(e&&"param"===e.kind){const t=e.name.typeRef?.name;if("string"!=typeof t){if(t?.std)return;const n=gt(t).declElem;return"struct"===n?.kind?{struct:n,intermediates:[e]}:void 0}}}(t.name.ident);if(e?.struct.bindingStruct)return{memberRef:t,...e}}function ns(t,e){const n=t.member.name,r=e.members.find(t=>t.name.name===n);if(!r||!r.mangledVarName)return console.log(`missing mangledVarName for ${n}`),{kind:"synthetic",text:n};const{extraComponents:s}=t,o=s?Xr(s):"",i={kind:"synthetic",text:r.mangledVarName+o};return t.contents=[i],i}async function rs(t,e){if(!t)throw new Error("No GPU adapter");return t.requestDevice(e).then(ss)}function ss(t){const e=[];var n;return t.injectError=(n,r)=>{const s=e.findLast(t=>t.filter===n);void 0!==s?s.errors.push(r):r.then(e=>{null!==e&&function(e){t.addEventListener("uncapturederror",t=>{if(!t.defaultPrevented)if("compilationInfo"in t.error){const e=t.error;if(e.compilationInfo)for(const t of e.compilationInfo.messages)P({url:t.module.url,text:t.module.text??null,lineNumber:t.lineNum,lineColumn:t.linePos,length:t.length,offset:t.offset,error:new Error(t.type+": "+t.message)});else console.error(t.error.message)}else console.error(t.error.message)},{once:!0}),t.dispatchEvent(new GPUUncapturedErrorEvent("uncapturederror",{error:e}))}(e)})},t.pushErrorScope=(n=t.pushErrorScope,function(t){return e.push({filter:t,errors:[]}),n.call(this,t)}),t.popErrorScope=(t=>function(){const n=e.pop();if(void 0===n)throw new DOMException("popErrorScope called on empty error scope stack","OperationError");return n.errors.push(t.call(this)),Promise.all(n.errors).then(t=>t.find(t=>null!==t)??null)})(t.popErrorScope),t}Wn(K),Wn(V);export{gr as BundleResolver,xr as CompositeResolver,Nr as LinkedWesl,Gt as ParseError,hr as RecordResolver,Mr as SrcMap,_r as SrcMapBuilder,Sr as TrackingResolver,Hn as WeslParseError,Kn as WeslStream,Ar as _linkSync,Et as astToString,St as attributeToString,Ir as bindAndTransform,Zn as bindIdents,sr as bindIdentsRecursive,Kr as bindingStructsPlugin,X as childIdent,G as childScope,W as containsScope,e as debug,_t as debugContentsToString,yr as discoverModules,q as emptyScope,$ as errorHighlight,br as fileToModulePath,E as filterMap,I as filterValidElements,nr as findAllRootDecls,w as findMap,ts as findRefsToBindingStructs,Er as findUnboundIdents,wr as findUnboundRefs,er as findValidRootDecls,Yn as flatImports,kr as freshResolver,m as groupBy,f as grouped,Bt as identToString,k as last,Ct as lengthPrefixMangle,Pr as link,jr as linkRegistry,It as liveDeclsToString,t as log,Vr as lowerBindingStructs,jt as makeLiveDecls,ss as makeWeslDevice,g as mapForward,S as mapValues,Jr as markBindingStructs,Hr as markEntryTypes,L as mergeScope,Lt as minimalMangle,Ot as minimallyMangledName,Dt as modulePartsToRelativePath,Ft as moduleToRelativePath,l as multiKeySet,V as multisampledTextureTypes,U as nextIdentId,fr as noSuffix,pr as normalize,qt as normalizeDebugRoot,Rr as normalizeModuleName,Tr as npmNameVariations,y as offsetToLineNumber,b as overlapTail,Jn as parseSrcModule,h as partition,rr as publicDecl,p as replaceWords,rs as requestWeslDevice,O as resetScopeIds,Ut as resolveModulePath,K as sampledTextureTypes,$r as sanitizePackageName,x as scan,Pt as scopeToString,At as scopeToStringLong,s as srcLog,et as stdEnumerant,Y as stdEnumerants,tt as stdFn,z as stdFns,Q as stdType,J as stdTypes,H as textureStorageTypes,ns as transformBindingReference,Zr as transformBindingStruct,Rt as underscoreMangle,n as validation,Z as wgslStandardAttributes,r as withLoggerAsync};export default null;
//# sourceMappingURL=/sm/d555d05c00fcd5baa4db4cad275bb26813aa21e41c740ff0617f2b24d75543d7.map