/**
 * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.
 * Original file: /npm/wesl@0.7.23/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,error:i}=t,a={file:e,line:r,column:s,length:o};if(i.weslLocation=a,!_)throw i;const c={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 u=`throw new Error(${JSON.stringify(i.message+"")})`;u+="\n//# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(c)))),u+="\n//# sourceURL="+c.sources[0];let l=0;"stackTraceLimit"in Error&&(l=Error.stackTraceLimit,Error.stackTraceLimit=1);try{(0,eval)(u)}catch(t){throw"stackTraceLimit"in Error&&(Error.stackTraceLimit=l),i.message="",t.cause=i,t.weslLocation=a,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,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,e,n){const{start:r}=t;return{kind:"binary-expression",operator:e,left:t,right:n,start:r,end:n.end}}function Yt(t,e,n,r){return{kind:"call-expression",function:t,templateArgs:e??void 0,arguments:n,start:t.start,end:r}}function Zt(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 Qt(t,e){const n=t.peek();return n&&"word"===n.kind||ee(t,e),t.nextToken(),n}function te(t,e="Expected expression"){const n=Ne(t);return n||ee(t.stream,e),t.options.preserveExpressions&&t.addElem(n),n}function ee(t,e){const n=t,r=n.peek();throw new Gt(e,r?r.span:[n.checkpoint(),n.checkpoint()])}function ne(t,e){const n=[];for(;;){const r=e(t);if(null===r)break;if(n.push(r),!t.stream.matchText(","))break}return n}function*re(t,e){for(let n=e(t);n;n=e(t))yield n}function se(t){const[e,n]=t.span;return{kind:"name",name:t.text,start:e,end:n}}function oe(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 ie(t,e,n,r){const s={kind:"ref",ident:e,srcModule:t.srcModule,start:n,end:r};return e.refIdentElem=s,s}function ae(t){const{kind:e}=t;return"@if"===e||"@elif"===e||"@else"===e}function ce(t){return t.some((t=>ae(t.attribute)))}function ue(t,e){e?.length&&(t.attributes=e)}function le(t,e){t.ident.declElem=e}function de(t,e){le(t.decl,e)}const pe={"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"<":7,"<=":7,">":7,">=":7,"<<":8,">>":8,"+":9,"-":9,"*":10,"/":10,"%":10};function fe(t){return pe[t.text]||0}function me(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 he(t,e,n){const r=me(e);var s;return function(t,e){const n=me(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?!xe(e)&&"logicalOr"!==e:"logicalOr"!==n||!xe(e)&&"logicalAnd"!==e}(e,n)||ee(t,`'${e}' requires parentheses after ${n}`),"shift"!==(s=r)&&"relational"!==s||n!==r||ee(t,`'${e}' cannot be chained`),r}function xe(t){return"bitAnd"===t||"bitXor"===t||"bitOr"===t}const ge=new Set(["as","import","package","super","self"]),ke=new Set(["package","super"]);function be(t){const e=t.peek();if(!e||!ve(e,!0))return null;const n=e.span[0];t.nextToken();const r=[e.text];for(;t.matchText("::");){const e=t.peek();e&&ve(e,!1)||ee(t,"Expected identifier after '::'"),t.nextToken(),r.push(e.text)}return{parts:r,start:n,end:t.checkpoint()}}function ve(t,e){return"word"===t.kind||"keyword"===t.kind&&(!ge.has(t.text)||e&&ke.has(t.text))}function Ee(t){const e=be(t.stream);if(!e)return null;const{parts:n,start:r,end:s}=e,o=t.createRefIdent(n.join("::"));Xt(t,"type");const i=ie(t,o,r,s);return t.saveIdent(o),t.addElem(i),Kt("type",r,t,{name:o,templateParams:t.stream.nextTemplateStartToken()?we(t):void 0})}function we(t){const{stream:e}=t;if(Se(e))return[];const n=[ye(t)];for(;e.matchText(",");)n.push(ye(t));return Se(e)||ee(e,"Expected '>' or ',' after template parameter"),n}function Se(t){return!!t.peek()?.text.startsWith(">")&&(t.nextTemplateEndToken()||ee(t,"Expected '>' to close template parameters"),!0)}function ye(t){const e=Ne(t,{inTemplate:!0});if(e)return e;ee(t.stream,"Expected expression in template parameters")}function $e(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=we(t);if("("!==e.peek()?.text)return e.reset(n),null;return r}(t);if(!r.matchText("("))return null;const o=[];for(;;){const i=Te(r);if(null!==i)return Yt(e,s,o,i);const a=n(t);if(a||ee(r,"Expected expression"),o.push(a),r.matchText(","))continue;const c=Te(r);if(null!==c)return Yt(e,s,o,c);ee(r,"Expected ',' or ')' in function arguments")}}function Te(t){const e=t.matchText(")");return e?e.span[1]:null}function Ne(t,e){const{conditionRef:n,inTemplate:r}=!0===e?{conditionRef:!0,inTemplate:!1}:e??{},s=!!n||void 0,o=Me(t,s);return o?_e(t,{prec:1,left:o,group:"unary",condRef:s,inTemplate:r}).expr:null}function Me(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=Me(t,e);return o||ee(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=Ne(t,e);s||ee(n,"Expected expression after '('");const o=Zt(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=be(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=ie(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=we(t);return{kind:"type",name:n.ident,templateParams:r,start:n.start,end:t.stream.checkpoint(),contents:[]}}(t,e);return n?e?n:Ae(t,n):null}(t,e)}function _e(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(!Pe(e,a))break;const s=fe(e);if(s<r)break;n.nextToken(),u=he(n,e.text,u);let o=Me(t,i);o||ee(n,"Expected expression after binary operator");const d=n.peek();if(Pe(d,a)){const e=fe(d);e>s&&(o=_e(t,{prec:e,left:o,group:"unary",condRef:i,inTemplate:a}).expr)}c=Jt(c,{value:(l=e).text,span:l.span},o)}var l;return{expr:c,group:u}}function Pe(t,e){return!!function(t){return!!t&&t.text in pe}(t)&&(!e||!t.text.startsWith(">"))}function Ae(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,se(Qt(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,te(t,"Expected expression in array index"),Zt(n,"]","array index").span[1]):null}(t,e)||$e(t,e,Ne)}(t,e);return n?Ae(t,n):e}function Be(t){return[...re(t,je)]}function je(t){const{stream:e}=t,n=e.checkpoint();if(!e.matchText("@"))return null;e.reset(n);const r=Le(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;Zt(n,"(","@builtin");const r=Qt(n,"Expected identifier in @builtin");return Zt(n,")","@builtin parameter"),Oe({kind:"@builtin",param:se(r)},e,n.checkpoint())}(t,s);if("interpolate"===i)return function(t,e){const{stream:n}=t;Zt(n,"(","@interpolate");const r=ne(t,De);return Zt(n,")","@interpolate parameters"),Oe({kind:"@interpolate",params:r},e,n.checkpoint())}(t,s);if("diagnostic"===i)return function(t,e){const{stream:n}=t;Zt(n,"(","@diagnostic");const r=se(Qt(n,"Expected severity in @diagnostic"));Zt(n,",","@diagnostic severity");const s=se(Qt(n,"Expected rule in @diagnostic"));let o;o=n.matchText(".")?[s,se(Qt(n,"Expected rule after namespace"))]:[s,null];return Zt(n,")","@diagnostic parameters"),Oe({kind:"@diagnostic",severity:r,rule:o},e,n.checkpoint())}(t,s);let a;e.matchText("(")&&(t.parsingAttrParam=i,a=function(t){return ne(t,Fe)}(t),t.parsingAttrParam=void 0,Zt(e,")","attribute parameters"));if("must_use"===i&&void 0!==a)throw new Gt("@must_use does not accept parameters",[s,e.checkpoint()]);return Oe({kind:"@attribute",name:i,params:a},s,e.checkpoint())}(t);return s||null}function Ie(t,e,n){const{stream:r}=t,s=r.checkpoint();if(!r.matchSequence("@",e))return null;Zt(r,"(",`@${e}`);const o=Ne(t,!0);return o?(r.matchText(","),Zt(r,")",`@${e} expression`),n({kind:"translate-time-expression",expression:(i={value:o,span:[s,r.checkpoint()]}).value,span:i.span})):null;var i}function Re(t){return{kind:"@if",param:t}}function Ce(t){return{kind:"@elif",param:t}}function Le(t){const{stream:e}=t,n=e.peek();if("@"!==n?.text)return null;const r=n.span[0],s=function(t){return Ie(t,"if",Re)}(t);if(s)return Oe(s,r,e.checkpoint());const o=function(t){return Ie(t,"elif",Ce)}(t);if(o)return Oe(o,r,e.checkpoint());const i=function(t){return t.stream.matchSequence("@","else")?{kind:"@else"}:null}(t);return i?Oe(i,r,e.checkpoint()):null}function Oe(t,e,n){return{kind:"attribute",attribute:t,start:e,end:n,contents:[]}}function De(t){return se(Qt(t.stream,"Expected identifier"))}function Fe(t){const{stream:e}=t,n=e.checkpoint();Xt(t,"expression"),Ne(t);const r=e.checkpoint();return{kind:"expression",start:n,end:r,contents:zt(t,n,r)}}function Ue(t){const{stream:e}=t,n=e.checkpoint(),r=Be(t),s=r.length>0?r:void 0,o=qe(t,"enable",s)||qe(t,"requires",s)||function(t,e){const{stream:n}=t,r=n.matchText("diagnostic");if(!r)return null;Zt(n,"(","diagnostic");const s=se(Qt(n,"Expected severity in diagnostic"));Zt(n,",","diagnostic severity");const o=se(Qt(n,"Expected rule name in diagnostic"));let i=null;n.matchText(".")&&(i=se(Qt(n,"Expected subrule name after '.'")));return n.matchText(","),Zt(n,")","diagnostic rule"),Zt(n,";","diagnostic directive"),Ge({kind:"diagnostic",severity:s,rule:[o,i]},r,n,e)}(t,s);return o||e.reset(n),o}function qe(t,e,n){const{stream:r}=t,s=r.matchText(e);if(!s)return null;const o=ne(t,We);return Zt(r,";",`${e} directive`),Ge({kind:e,extensions:o},s,r,n)}function We(t){return se(Qt(t.stream,"Expected identifier in name list"))}function Ge(t,e,n,r){const s={kind:"directive",directive:t,start:r?.[0]?.start??e.span[0],end:n.checkpoint()};return ue(s,r),s}function Xe(t,e){const n=gn(t,"if",e);if(null===n)return null;te(t,"Expected condition expression after 'if'");const r=hn(t,"Expected '{' after if condition");return t.addElem(r),function(t){const{stream:e}=t;for(;e.matchText("else");){if(e.matchText("if")){te(t,"Expected expression after 'else if'");const e=hn(t,"Expected '{' after else if");t.addElem(e);continue}const n=hn(t,"Expected '{' after else");t.addElem(n);break}}(t),kn(n,t,e)}function ze(t,e){const n=gn(t,"switch",e);return null===n?null:(te(t,"Expected expression after 'switch'"),function(t){const{stream:e}=t;Be(t),Zt(e,"{","switch expression");for(;!e.matchText("}");){const n=e.checkpoint(),r=Be(t);Xt(t,"switch-clause",r.length?r:void 0),e.matchText("case")?(Ke(t),Ve(t,"Expected '{' after case value")):e.matchText("default")?Ve(t,"Expected '{' after 'default'"):ee(e,"Expected 'case', 'default', or '}' in switch");const s=Kt("switch-clause",n,t,{});ue(s,r.length?r:void 0),t.addElem(s)}}(t),kn(n,t,e))}function Ke(t){const{stream:e}=t;for(te(t,"Expected expression after 'case'");e.matchText(",");)te(t,"Expected expression after ',' in case values")}function Ve(t,e){t.stream.matchText(":");const n=Be(t),r=mn(t,n.length>0?n:void 0);r||ee(t.stream,e),t.addElem(r)}function He(t,e){return Ye(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 Je(t,e=!0){const n=t.stream.matchKind("word");if(!n)return null;const r=n.span[0];Xt(t,"typeDecl");const s=oe(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=Ee(t);e||ee(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 Ye(t,e,n,r,s){const{stream:o}=t,i=o.matchText(e);if(!i)return null;const a=xn(s,i.span[0]);t.pushScope("partial"),Xt(t,e,s);const c=Je(t,r);c||ee(o,`Expected identifier after '${e}'`),t.addElem(c),n?(Zt(o,"=",`${e} identifier`),te(t)):o.matchText("=")&&te(t),Zt(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 ue(d,s),de(c,d),d}function Ze(t,e){const n=t.stream.matchText("const_assert");if(!n)return null;const r=xn(e,n.span[0]);Xt(t,"assert",e),te(t),Zt(t.stream,";","const_assert expression");const s=Kt("assert",r,t,{});return ue(s,e),s}function Qe(t){const{stream:e}=t;if(e.nextTemplateStartToken())for(;;){const t=e.peek();if(t||ee(e,"Unclosed template in var declaration"),t.text.startsWith(">"))return void e.nextTemplateEndToken();e.nextToken()}}function tn(t,e){return nn(t,"var",!0,!1,e)}function en(t,e){return nn(t,"let",!1,!0,e)}function nn(t,e,n,r,s){const{stream:o}=t,i=o.matchText(e);if(!i)return null;const a=xn(s,i.span[0]);Xt(t,e,s),n&&Qe(t);const c=Je(t,!1);c||ee(o,`Expected identifier after '${e}'`),t.addElem(c),r?(Zt(o,"=",`${e} identifier (${e} requires initialization)`),te(t)):o.matchText("=")&&te(t),Zt(o,";",`${e} declaration`);const u=Kt(e,a,t,{name:c});return ue(u,s),de(c,u),u}const rn=new Set(["=","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>="]);function sn(t,e){const{stream:n}=t,r=xn(e,n.checkpoint());return function(t,e,n){const{stream:r}=t;if(!r.matchText("return"))return null;Xt(t,"statement",n);const s=Ne(t);s&&t.options.preserveExpressions&&t.addElem(s);return Zt(r,";","return statement"),kn(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")&&te(t,"Expected condition after 'break if'");return Zt(r,";","break statement"),kn(e,t,n)}(t,r,e)||on(t,r,e,"continue")||on(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;an(r)||ee(r,"Expected assignment operator after '_'");return Xt(t,"statement",n),te(t,"Expected expression after assignment operator"),Zt(r,";","assignment"),kn(e,t,n)}(t,r,e)||function(t,e,n){const{stream:r}=t;Xt(t,"statement",n);const s=Ne(t);if(!s)return zt(t,e,e),r.reset(e),null;t.options.preserveExpressions&&t.addElem(s);un(r)||cn(t);return Zt(r,";","expression"),kn(e,t,n)}(t,r,e)}function on(t,e,n,r){const{stream:s}=t;return s.matchText(r)?(Xt(t,"statement",n),Zt(s,";",`${r} statement`),kn(e,t,n)):null}function an(t){return!!t.nextIf((({text:t})=>rn.has(t)))}function cn(t){return!!an(t.stream)&&(te(t,"Expected expression after assignment operator"),!0)}function un(t){return!!t.nextIf((({text:t})=>"++"===t||"--"===t))}function ln(t,e){const{stream:n}=t,r=gn(t,"for",e);if(null===r)return null;t.pushScope(),Zt(n,"(","'for'"),function(t){const{stream:e}=t,n=tn(t);if(n)t.addElem(n);else{const n=Ne(t);n&&t.options.preserveExpressions&&t.addElem(n),Zt(e,";","for loop init")}}(t);const s=Ne(t);s&&t.options.preserveExpressions&&t.addElem(s),Zt(n,";","for loop condition"),function(t){const e=Ne(t);e&&t.options.preserveExpressions&&t.addElem(e);un(t.stream)||cn(t)}(t),Zt(n,")","for loop header");const o=hn(t,"Expected '{' after for loop header");return t.addElem(o),t.popScope(),kn(r,t,e)}function dn(t,e){const n=gn(t,"while",e);if(null===n)return null;te(t,"Expected condition expression after 'while'");const r=hn(t,"Expected '{' after while condition");return t.addElem(r),kn(n,t,e)}function pn(t,e){const n=gn(t,"loop",e);if(null===n)return null;const r=hn(t,"Expected '{' after 'loop'",!0);return t.addElem(r),kn(n,t,e)}function fn(t,e){const n=gn(t,"continuing",e,"continuing");if(null===n)return null;const r=hn(t,"Expected '{' after 'continuing'");return t.addElem(r),kn(n,t,e,"continuing")}function mn(t,e,n){const r=t.stream.matchText("{");if(!r)return null;const s=xn(e,r.span[0]);Xt(t,"statement",e);const o=n?.noScope||function(t){return!!t&&ce(t)}(e);return o||t.pushScope(),function(t,e){const{stream:n}=t;for(;!n.matchText("}");){const r=bn(t);if(r||ee(n,"Expected statement or '}'"),t.addElem(r),e&&"continuing"===r.kind){Zt(n,"}","continuing block");break}}}(t,n?.loopBody),o||t.popScope(),kn(s,t,e)}function hn(t,e,n){const r=Be(t),s=mn(t,r.length>0?r:void 0,n?{loopBody:n}:void 0);return s||ee(t.stream,e),s}function xn(t,e){return t?.[0]?.start??e}function gn(t,e,n,r="statement"){const s=t.stream.checkpoint();if(!t.stream.matchText(e))return null;const o=xn(n,s);return Xt(t,r,n),o}function kn(t,e,n,r="statement"){const s=Kt(r,t,e,{});return ue(s,n),s}function bn(t){const{stream:e}=t,n=e.checkpoint(),r=Be(t),s=e.peek();if(!s||"}"===s.text)return e.reset(n),null;const o=r.length>0&&ce(r);o&&t.pushScope("partial");const i=r.length>0?r:void 0,a=w([tn,en,He,Ze,mn,Xe,ze,ln,dn,pn,fn,sn],(e=>e(t,i)));return a?(function(t,e,n){if(e){t.popScope().condAttribute=function(t){return t.find((t=>ae(t.attribute)))?.attribute}(n)}}(t,o,r),a):null}function vn(t,e,n,r,s){const o=r?[e,...n,r,s]:[e,...n,s];return t?.length?[...t,...o]:o}function En(t){const e=Be(t);if("word"!==t.stream.peek()?.kind)return null;Xt(t,"param",e.length?e:void 0);const n=Je(t,!1);if(!n)throw new Error("Unexpected: peek succeeded but parseTypedDecl failed");t.addElem(n);const r=Kt("param",xn(e,n.start),t,{name:n});return de(n,r),ue(r,e.length>0?e:void 0),r}function wn(t){const{stream:e}=t,n=Le(t),r=function(t){const e=t.matchText("import");if(!e)return null;const n=function(t){if(t.matchSequence("package","::"))return[Nn("package")];const e=[];for(;t.matchSequence("super","::");)e.push(Nn("super"));return e.length>0?e:null}(t)??[],r=Sn(t)||yn(t);r||ee(t,"invalid import, expected { or name");t.matchText(";")||ee(t,"invalid import, expected ';'");return{statement:"import-statement"===r.kind?$n(n,r):Tn(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 Sn(t){if(!t.matchText("{"))return null;const e="invalid import collection, expected name",n=yn(t);n||ee(t,e);const r=[n];for(;t.matchText(",")&&"}"!==t.peek()?.text;){const n=yn(t);n||ee(t,e+" after ','"),r.push(n)}return t.matchText("}")||ee(t,"invalid import collection, expected }"),{kind:"import-collection",subtrees:r}}function yn(t){const e=function(t){const e=t.peek();if(!e)return null;const{text:n,kind:r}=e;return"word"!==r&&"keyword"!==r||ge.has(n)?null:(t.nextToken(),n)}(t);if(!e)return null;if(t.matchText("::")){const n=Nn(e),r=Sn(t);if(r)return Tn([n],r);const s=yn(t);if(s)return $n([n],s);ee(t,"invalid import, expected '{' or name")}if(t.matchText("as")){const n=t.matchKind("word");return n||ee(t,"invalid alias, expected name"),Tn([],Mn(e,n.text))}return Tn([],Mn(e))}function $n(t,e){return{...e,segments:t.concat(e.segments)}}function Tn(t,e){return{kind:"import-statement",segments:t,finalSegment:e}}function Nn(t){return{kind:"import-segment",name:t}}function Mn(t,e){return{kind:"import-item",name:t,as:e}}function _n(t){const{stream:e}=t,n=e.checkpoint(),r=Be(t),s=e.matchKind("word");if(!s)return e.reset(n),null;const o=xn(r,s.span[0]);Xt(t,"member",r.length?r:void 0);const i=se(s);t.addElem(i),Zt(e,":","struct member name");const a=Ee(t);a||ee(e,"Expected type after ':'"),t.addElem(a);const c=Kt("member",o,t,{name:i,typeRef:a});return ue(c,r.length?r:void 0),c}const Pn=[He,function(t,e){return Ye(t,"override",!1,!0,e)},function(t,e){const{stream:n}=t,r=n.matchText("var");if(!r)return null;const s=xn(e,r.span[0]);t.pushScope("partial"),Xt(t,"gvar",e),Qe(t);const o=Je(t);o||ee(n,"Expected identifier after 'var'"),t.addElem(o),n.matchText("=")&&te(t),Zt(n,";","var declaration"),o.decl.ident.dependentScope=t.currentScope(),t.popScope();const i=Kt("gvar",s,t,{name:o});return ue(i,e),de(o,i),i},function(t,e){const{stream:n}=t,r=n.matchText("alias");if(!r)return null;const s=xn(e,r.span[0]);Xt(t,"alias",e);const o=oe(t,Qt(n,"Expected identifier after 'alias'"),!0);t.addElem(o),t.saveIdent(o.ident),Zt(n,"=","alias name"),t.pushScope();const i=Ee(t);i||ee(n,"Expected type after '=' in alias declaration"),t.addElem(i),o.ident.dependentScope=t.currentScope(),t.popScope(),Zt(n,";","alias declaration");const a=Kt("alias",s,t,{name:o,typeRef:i});return ue(a,e),le(o,a),a},function(t,e){const{stream:n}=t,r=n.matchText("struct");if(!r)return null;const s=xn(e,r.span[0]),o=oe(t,Qt(n,"Expected identifier after 'struct'"),!0);t.saveIdent(o.ident),Xt(t,"struct",e),t.addElem(o),Zt(n,"{","struct name"),t.pushScope();const i=function(t){const e=ne(t,_n);for(const n of e)t.addElem(n);return e}(t);o.ident.dependentScope=t.currentScope(),t.popScope(),Zt(n,"}","struct member");const a=Kt("struct",s,t,{name:o,members:i});return ue(a,e),le(o,a),a},function(t,e){const{stream:n}=t,r=n.matchText("fn");if(!r)return null;const s=xn(e,r.span[0]),o=oe(t,Qt(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=[];Zt(e,"(","function name");for(;!e.matchText(")");){const r=En(t);if(r||ee(e,"Expected function parameter or ')'"),n.push(r),!e.matchText(",")){Zt(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=Be(t),r=Ee(t);r||ee(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 mn(t,void 0,{noScope:!0})}(t);d||ee(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:vn(e,o,a,u,d)};return ue(p,e),le(o,p),p},Ze];function An(t){for(!function(t){const e=function(t){return[...re(t,wn)]}(t);for(const n of e)t.addElem(n),t.state.stable.imports.push(n.imports)}(t),function(t){const e=re(t,Ue);for(const n of e)t.addElem(n)}(t);Bn(t););}function Bn(t){const{stream:e}=t;if(e.matchText(";"))return!0;const n=Be(t),r=ce(n);r&&t.pushScope("partial");const s=function(t,e){const n=e.length?e:void 0,r=w(Pn,(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&&ee(e,"Expected declaration after attributes"),!1)}var jn=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 In="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+/),Rn="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 Cn=class{cache=new Ln(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}},Ln=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 On(t){const[e,n]=t;if("string"==typeof n){const t=`(${Un(n)})`;return Dn(e,new RegExp(t)),t}return Dn(e,n),`(${n.source})`}function Dn(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 Fn=/[$+*.?|(){}[\]\\/^]/g;function Un(t){return t.replace(Fn,"\\$&")}function qn(t){const e=t.split(/\s+/).sort(((t,e)=>e.length-t.length)).filter((t=>t)).map(Un);return new RegExp(e.join("|"))}var Wn=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 Gn=new Set(In.concat(Rn)),Xn=new class{groups;exp;constructor(t){this.groups=Object.keys(t);const e=Object.entries(t).map(On).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:qn("& && -> @ / ! [ ] { } :: : , == = != >>= >> >= > <<= << <= < % - -- . + ++ | || ( ) ; * ~ ^ // /* */ += -= *= /= %= &= |= ^= _"),invalid:/[^]/});var zn=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 Cn(new Wn(t,Xn))}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 Gn.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 Kn(t,e){const{ctx:n,state:r}=function(t,e){const n=new zn(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 jn(n,o,e),state:o}}(t,e);try{Xt(n,"module"),An(n);const t=r.stable.moduleElem;return t.contents=zt(n,0,t.end),r.stable}catch(e){if(e instanceof Gt)throw new Vn({cause:e,src:t});throw new Vn({cause:new Gt(e instanceof Error?e.message:String(e),[0,0]),src:t})}}var Vn=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 Hn(t,e){return Kn(t,e)}function Jn(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 Yn(t){const{rootAst:e,resolver:n,virtuals:r,accumulateUnbound:s}=t,{conditions:o={},mangler:i=Lt}=t,{discoveryMode:a}=t,c=e.srcModule.modulePath.split("::")[0],u=a?er(e.rootScope):tr(e.rootScope,o),{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:o,knownDecls:d,virtuals:r,mangler:i,packageName:c,foundScopes:new Set,globalNames:l,globalStatements:new Map,unbound:s?[]:void 0,discoveryMode:a},f={decls:new Map(u.map((t=>[t.originalName,t]))),parent:null};return{decls:[...u.flatMap((t=>sr(t,p))),...rr(e.rootScope,p,f)],globalNames:l,newStatements:[...p.globalStatements.values()],unbound:p.unbound}}function Zn(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*Qn(t,e){let n=!1;for(const r of t.contents){const t=R(Zn(r),n,e);n=t.nextElseState,t.valid&&(yield r)}}function tr(t,e){return lr(Qn(t,e))}function er(t){return lr(t.contents)}function nr(t,e,n){return function(t,e){const n=t;return n._validRootDecls??=tr(t,e),n._validRootDecls}(t,n).find((t=>t.originalName===e))}function rr(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:Qn(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=or(t,n,e);s&&r.push(s)}else{const r="scope"===t.kind?jt(n):n;s.push(...rr(t,e,r))}return{newGlobals:r,newFromChildren:s}}(t,e,n);return[o,i,r?[]:ir(o,e)].flat()}function sr(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=tr(n,e);r._scopeDecls={decls:new Map(t.map((t=>[t.originalName,t])))}}return r._scopeDecls}(t,e.conditions);return r?rr(n,e,jt(r)):[]}function or(t,e,n){if(t.refersTo||t.std)return;if(t.conditionRef)return;if(t.attrParam&&!Z.has(t.attrParam))return;const r=ar(t,e)??function(t,e){const{conditions:n,unbound:r,discoveryMode:s}=e,o=s?void 0:n,i=Jn(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&&!ur(t.originalName)&&cr(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 r=n.fn(e.conditions);return n.ast=Hn({modulePath:e.packageName+"::"+t,debugFilePath:t,src:r}),n.ast}(t[0],n);if(!s)return;const o=nr(s.rootScope,k(t),n.conditions);if(o)return{decl:o,moduleAst:s}}(c,t.ast.srcModule,e);u||(r?cr(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);ur(t.originalName)?t.std=!0:n.unbound||A(t,`unresolved identifier '${t.originalName}'`)}function ir(t,e){return t.flatMap((t=>sr(t,e)))}function ar(t,e){const n=e.decls.get(t.originalName);return n?{decl:n,moduleAst:t.ast}:e.parent?ar(t,e.parent):void 0}function cr(t,e,n){const{srcModule:r,start:s,end:o}=n.refIdentElem;t.push({path:e,srcModule:r,start:s,end:o})}function ur(t){return Q(t)||tt(t)||et(t)}function lr(t){return[...t].flatMap((t=>{const{kind:e}=t;return"decl"===e?[t]:"partial"===e?lr(t.contents):[]}))}function dr(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 pr(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 fr=/^lib\.w[eg]sl$/i;var mr=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=Hn({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?kr(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=gr(t,this.packageName,e);this.resolveModule(n)}return this.astCache.entries()}},hr=class{resolvers;constructor(t){this.resolvers=t}resolveModule(t){for(const e of this.resolvers){const n=e.resolveModule(t);if(n)return n}}},xr=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=Hn({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=kr(this.sources,"lib",["wesl","wgsl"]);if(t)return t}return kr(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 gr(t,e,n){if(t.includes("::"))return t;if(n&&fr.test(t))return e;return e+"::"+pr(dr(t)).replaceAll("/","::")}function kr(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 br(t){return vr(t).map((t=>t.path))}function vr(t){const e={resolver:t,conditions:{},knownDecls:new Set,foundScopes:new Set,globalNames:new Set,globalStatements:new Map,mangler:Lt,packageName:"package",unbound:[],dontFollowDecls:!0,discoveryMode:!0};for(const[,n]of t.allModules()){const t=er(n.rootScope),r={decls:new Map(t.map((t=>[t.originalName,t]))),parent:null};for(const n of E(t,(t=>t.dependentScope)))rr(n,e,jt(r));rr(n.rootScope,e,r)}return e.unbound}var Er=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 wr(t,e,n,r="package"){const s=new Er(e),o=s.resolveModule(n);if(!o)throw new Error(`root module not found: '${n}'`);const i=Yn({rootAst:o,resolver:s,accumulateUnbound:!0,discoveryMode:!0}),a=new Map(Object.keys(t).map((t=>[gr(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 Sr(t){return t.replace(/^@/,"").replaceAll("/","__").replaceAll("-","_")}function*yr(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 $r=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 Tr=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 Nr=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 Tr({text:t.map((t=>t.#t.join(""))).join("")},t.flatMap((t=>t.#c)));return e.compact(),e}};async function Mr(t){return new $r(_r(t))}function _r(t){const{weslSrc:e,libs:n=[],packageName:r,debugWeslRoot:s}=t,{resolver:o}=t,i=[];if(o)i.push(o);else{if(!e)throw new Error("Either resolver or weslSrc must be provided");i.push(new mr(e,{packageName:r,debugWeslRoot:s}))}if(n.length>0){const t=function(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 xr(t,e)))}(n,s);i.push(...t)}const a=1===i.length?i[0]:new hr(i);return Pr({...t,resolver:a})}function Pr(t){const{transformedAst:e,newDecls:n,newStatements:r}=Ar(t);return Nr.build(function(t,e,n,r,s={}){const o=r.map((t=>function(t,e){const{elem:n,srcModule:r}=t,{src:s,debugFilePath:o}=r,i=new Nr({text:s,path:o});return nt({srcBuilder:i,rootElems:[n],conditions:e}),i.addNl(),i}(t,s))),i=new Nr({text:e.src,path:e.debugFilePath});nt({srcBuilder:i,rootElems:[t],conditions:s,extracting:!1});const a=n.map((t=>function(t,e){const{src:n,debugFilePath:r}=t.srcModule,s=new Nr({text:n,path:r});return nt({srcBuilder:s,rootElems:[t.declElem],conditions:e,skipConditionalFiltering:!0}),s}(t,s)));return[...o,i,...a]}(e.moduleElem,e.srcModule,n,r,t.conditions))}function Ar(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,Br(o),o),{globalNames:c,decls:u,newStatements:l}=Yn({rootAst:a,resolver:e,conditions:i,virtuals:jr(t.virtualLibs,r),mangler:n});return{transformedAst:Ir(a,c,s),newDecls:u,newStatements:l}}function Br(t){return t.includes("::")?t:t.includes("/")||t.endsWith(".wesl")||t.endsWith(".wgsl")?"package::"+t.replace(/\.(wesl|wgsl)$/,"").replace(/^\.\//,"").replaceAll("/","::"):"package::"+t}function jr(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 Ir(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 Rr(t,e){e(t),t.contents&&t.contents.forEach((t=>{Rr(t,e)}))}function Cr(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=>Fr(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 Lr(t){return`<${t.map(Or).join(", ")}>`}function Or(t){return void 0===t?"?":"type"===t.kind?function(t){if(!t)return"?";const{name:e,templateParams:n}=t,r=n?Lr(n):"";return`${Dr(e)}${r}`}(t):ht(t)}function Dr(t){if("string"==typeof t)return t;if(t.std)return t.originalName;const e=gt(t);return e.mangledName||e.originalName}function Fr(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?Dr(t.ident):`?${t.kind}?`})).join(" "):"name"===t.kind?t.name:void c(t)}const Ur=qn(H);function qr(){return{transform:Wr}}function Wr(t){const e=structuredClone(t),{moduleElem:n,globalNames:r,notableElems:s}=e,o=Xr(n);Gr(n,o);const i=o.flatMap((t=>Kr(t,r))),a=Hr(n);a.forEach((({memberRef:t,struct:e})=>{Yr(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 Gr(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 Xr(t){const e=t.contents.filter((t=>"struct"===t.kind)).filter(zr);return e.forEach((t=>{t.bindingStruct=!0})),e}function zr(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 Kr(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(Cr).join(" ")??"",c=function(t,e){if("ptr"===t.originalName){const t=e??[],n=[t[0]];return t[2]&&n.push(t[2]),{storage:Lr(n),varType:Or(t?.[1])}}}(s,o)??function(t,e){if("string"!=typeof t)return{varType:(t.std?t.originalName:"??")+(e?Lr(e):""),storage:""}}(s,o)??function(t,e){if(Ur.test(t.originalName))return{varType:t+(e?Lr(e):""),storage:""}}(s,o);if(!c)return console.log("unhandled case transforming member",s),Vr(a,i,"","??");const{storage:u,varType:l}=c;return Vr(a,i,u,l)}))}function Vr(t,e,n,r){return{kind:"synthetic",text:`${t} var${n} ${e} : ${r};\n`}}function Hr(t){const e=[];return Rr(t,(t=>{"memberRef"===t.kind&&e.push(t)})),E(e,Jr)}function Jr(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 Yr(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?Fr(s):"",i={kind:"synthetic",text:r.mangledVarName+o};return t.contents=[i],i}async function Zr(t,e){if(!t)throw new Error("No GPU adapter");return t.requestDevice(e).then(Qr)}function Qr(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,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}qn(K),qn(V);export{xr as BundleResolver,hr as CompositeResolver,$r as LinkedWesl,Gt as ParseError,mr as RecordResolver,Tr as SrcMap,Nr as SrcMapBuilder,Er as TrackingResolver,Vn as WeslParseError,zn as WeslStream,_r as _linkSync,Et as astToString,St as attributeToString,Ar as bindAndTransform,Yn as bindIdents,rr as bindIdentsRecursive,qr as bindingStructsPlugin,X as childIdent,G as childScope,W as containsScope,e as debug,_t as debugContentsToString,wr as discoverModules,q as emptyScope,$ as errorHighlight,gr as fileToModulePath,E as filterMap,I as filterValidElements,er as findAllRootDecls,w as findMap,Hr as findRefsToBindingStructs,br as findUnboundIdents,vr as findUnboundRefs,tr as findValidRootDecls,Jn as flatImports,m as groupBy,f as grouped,Bt as identToString,k as last,Ct as lengthPrefixMangle,Mr as link,Pr as linkRegistry,It as liveDeclsToString,t as log,Wr as lowerBindingStructs,jt as makeLiveDecls,Qr as makeWeslDevice,g as mapForward,S as mapValues,Xr as markBindingStructs,Gr 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,pr as noSuffix,dr as normalize,qt as normalizeDebugRoot,Br as normalizeModuleName,yr as npmNameVariations,y as offsetToLineNumber,b as overlapTail,Hn as parseSrcModule,h as partition,nr as publicDecl,p as replaceWords,Zr as requestWeslDevice,O as resetScopeIds,Ut as resolveModulePath,K as sampledTextureTypes,Sr 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,Yr as transformBindingReference,Kr as transformBindingStruct,Rt as underscoreMangle,n as validation,Z as wgslStandardAttributes,r as withLoggerAsync};export default null;
//# sourceMappingURL=/sm/6a2275d770f6a7c19ff37c02c15cefdbd174951631067e6239c84486603cf8c9.map