@three-blocks/devtools 1.0.0-alpha.176.g8ff8a72e6369 → 1.0.0-alpha.189.g39cef51b7325
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -2
- package/LICENSE +1 -2
- package/NOTICE +19 -27
- package/README.md +89 -144
- package/dist/browser/shader-capture.js +2 -2
- package/dist/{browser-smoke-76626IZQ.js → browser-smoke-HB7ZXQGR.js} +1 -1
- package/dist/chunk-3HTNEAVD.cjs +1 -0
- package/dist/chunk-3TQVLKUH.js +14 -0
- package/dist/chunk-54BHFG2E.js +76 -0
- package/dist/{chunk-ZKK6E42X.js → chunk-77HY5X2T.js} +1 -1
- package/dist/chunk-NEWSG5RX.js +3 -0
- package/dist/chunk-UQOPSJR6.js +6 -0
- package/dist/chunk-WNNN3UJI.js +93 -0
- package/dist/chunk-ZKXUYNSG.js +18 -0
- package/dist/cli.js +21 -21
- package/dist/index.d.ts +14 -10
- package/dist/index.js +21 -21
- package/dist/shader-browser-6TM4RNUL.js +2 -0
- package/dist/shader-browser-ZHG2JISC.js +1 -0
- package/dist/shader-capture-server.d.ts +6 -8
- package/dist/shader-capture-server.js +15 -15
- package/dist/{shader-config-4EXO5DKK.js → shader-config-BYBJUL3C.js} +1 -1
- package/dist/{shader-transform-CUkZn5Oa.d.ts → shader-transform-DSFaVrux.d.ts} +2 -0
- package/dist/{shader-watch-QHTNTSZE.js → shader-watch-Z3VGP4QB.js} +1 -1
- package/dist/shader-workflow-SO7WCR4Y.js +2 -0
- package/dist/{status-DV2BYZHR.js → status-CFJSWBDI.js} +1 -1
- package/dist/transform.cjs +1 -1
- package/dist/transform.d.ts +1 -1
- package/dist/transform.js +1 -1
- package/dist/webpack-loader.cjs +1 -1
- package/dist/webpack-loader.d.ts +1 -1
- package/dist/webpack-loader.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-26FK4CRS.js +0 -6
- package/dist/chunk-4EHPYBKA.cjs +0 -1
- package/dist/chunk-HRYYNBVC.js +0 -3
- package/dist/chunk-INDAJN42.js +0 -94
- package/dist/chunk-ME3X2KFY.js +0 -14
- package/dist/chunk-SCJNCGMF.js +0 -17
- package/dist/chunk-VGJ3V4QQ.js +0 -78
- package/dist/shader-browser-65V22LLL.js +0 -1
- package/dist/shader-browser-JII6ZFCW.js +0 -2
- package/dist/shader-workflow-U4G565EB.js +0 -2
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var Pt=Object.defineProperty;var l=(e,t)=>Pt(e,"name",{value:t,configurable:true});var Ae="three-webgpu-r185-v1",et=["fragmentNode","vertexNode","colorNode","positionNode","normalNode","opacityNode","alphaTestNode","backdropNode","backdropAlphaNode","emissiveNode","metalnessNode","roughnessNode","clearcoatNode","clearcoatRoughnessNode","transmissionNode","thicknessNode","iorNode","outputNode","mrtNode","depthNode","castShadowNode","receivedShadowNode","maskNode","envNode"];var z=["_renderContexts","_renderContexts"],P=Object.freeze({renderContextMrt:"three-r185-render-context-mrt",renderContextInput:"three-r185-render-context-input",skinningEvent:"three-r185-skinning-event",morphUpdateEvent:"three-r185-morph-update-event",maxMip:"three-r185-max-mip",morphTargetTexture:"three-r185-morph-target-texture"});function Te(e){let t=/^(.*)-([^-]+)-(-?\d+)$/u.exec(e);if(t?.[1]===void 0||t[2]===void 0||t[3]===void 0)return;let n=Number(t[3]);if(Number.isSafeInteger(n))return {attachmentState:t[1],mrtState:t[2],callDepth:n}}l(Te,"parseThreeR185RenderContextKey");function tt(e){return e==="185"||e===185}l(tt,"supportsThreeR185Revision");function Ot(e){let t=e.constructor;return (typeof t=="function"||typeof t=="object"&&t!==null)&&typeof Reflect.get(t,"name")=="string"?String(Reflect.get(t,"name")):"unknown"}l(Ot,"constructorName");function je(e){let t=e,n=l(i=>t[i]===true,"flag"),r=typeof t.textureNode=="object"&&t.textureNode!==null||typeof t.nodeUniform=="object"&&t.nodeUniform!==null;return n("isNodeUniformsGroup")?"NodeUniformsGroup":n("isUniformsGroup")?"UniformsGroup":n("isNodeUniformBuffer")?"NodeUniformBuffer":n("isUniformBuffer")?"UniformBuffer":n("isStorageBuffer")?r?"NodeStorageBuffer":"StorageBuffer":n("isSampledCubeTexture")?r?"NodeSampledCubeTexture":"SampledCubeTexture":n("isSampledTexture3D")?"NodeSampledTexture3D":n("isSampled3DTexture")?"Sampled3DTexture":n("isSampledArrayTexture")?r?"NodeSampledArrayTexture":"SampledArrayTexture":n("isSampledTexture")?r?"NodeSampledTexture":"SampledTexture":n("isSampler")?r?"NodeSampler":"Sampler":typeof t.kind=="string"?t.kind:Ot(e)}l(je,"capturedBindingKind");var nt="three-blocks.shader-capture.runtime.v1";var Ft=Symbol.for("three-blocks.shader-capture.cache.v1"),Dt=Symbol.for("three-blocks.shader-capture.cache-value.v1"),$e="/__three-blocks/shaders/capture",oe="/__three-blocks/shaders/telemetry",Re=4096,Kt=4,Ht=65536,zt=1e3,Gt=/^[a-z0-9][a-z0-9_-]{0,63}$/u,qt=new Set(["cameraProjectionMatrix","cameraProjectionMatrixInverse","cameraViewMatrix","cameraWorldMatrix","cameraNormalMatrix","cameraPosition"]),rt=["lightPosition","lightTargetPosition","lightViewPosition","lightShadowMatrix"],Wt=new Set(["_texture","_width","_height","_maxMip","_matrixUniform","_flipYUniform"]),Jt={bias:"shadowBias",intensity:"shadowIntensity",normalBias:"shadowNormalBias",radius:"shadowRadius",blurSamples:"shadowBlurSamples",mapSize:"shadowMapSize"},x={buildCalls:0,renderBuilds:0,computeBuilds:0,registeredBuilds:0,registeredRenderBuilds:0,registeredComputeBuilds:0,buildMs:0,injected:0,injectedRender:0,injectedCompute:0,missed:0,missedRender:0,missedCompute:0,missedKeys:[]},A={capture:false,forceLive:false,settleFrames:60,readiness:{},transform:1},St=new WeakMap,ot=new WeakSet,it=new WeakSet,Ue=new WeakMap,Pe=new Set,wt=new WeakMap,pe=[],ge=[],st=new WeakMap,at=new WeakMap,ct=new WeakMap,D,ce=0,Ce=false,se=false,K="default",J,Y,W=false,Oe=0,de,dt=false,B,_,me={},ne,re=false;function he(e){return /^.+\/input-[a-zA-Z0-9_-]+-\d{4}$/u.test(e)}l(he,"isAutomaticInputContainerKey");function p(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}l(p,"isRecord");function Le(e,t=new Set){if(e===null||typeof e!="object"||t.has(e))return;if(t.add(e),Array.isArray(e)){for(let r of e){let i=Le(r,t);if(i)return i}return}let n=e;for(let r of ["key","container"]){let i=n[r];if(typeof i=="string"&&he(i))return i}for(let r of Object.values(n)){let i=Le(r,t);if(i)return i}}l(Le,"automaticInputContainerReference");function Ie(e,t=new Set){if(e===null||typeof e!="object"||t.has(e))return;if(t.add(e),Array.isArray(e)){for(let s of e){let o=Ie(s,t);if(o)return o}return}let n=e,r=n.container,i=n.path;if(typeof r=="string"&&Array.isArray(i)){let s=i.filter(o=>typeof o=="string");if(r==="@renderer"&&s.includes(z[0])||r==="@object"&&s.includes("_renderer"))return `${r}.${s.join(".")}`}for(let s of Object.values(n)){let o=Ie(s,t);if(o)return o}}l(Ie,"transientRendererReference");function ye(e){return p(e)&&e.isNode===true}l(ye,"isNode");function N(e){if(p(e)&&typeof e.getSelf=="function"){let t=e.getSelf();return ye(t)?t:void 0}return ye(e)?e:void 0}l(N,"nodeFrom");function ut(e){let t=new Map;if(e.isNode!==true)return t;t.set(e,[]);let n=[e];for(let r=0;r<n.length;r++){let i=n[r];if(!i||typeof i.getSerializeChildren!="function")continue;let s=t.get(i)??[],o=0;for(let c of i.getSerializeChildren()){let a=N(c.childNode);if(a&&!t.has(a)&&(t.set(a,[...s,o]),n.push(a)),o++,o>Re)throw new Error("Shader node graph exceeds the capture child limit.")}}return t}l(ut,"indexNodeGraph");function Nt(e){if(e.k==="owned"){let t=Nt(e.owner);return t===e.owner?e:{...e,owner:t}}if(e.k==="container"&&e.key==="@renderer"&&e.path.length>=4&&e.path[0]===z[0]&&e.path[1]===z[1]&&e.path.at(-1)==="mrt"){let t=e.path[2],n=typeof t=="string"?Te(t):void 0;if(n!==void 0){let r=At(n.attachmentState);return {k:"recipe",id:P.renderContextMrt,version:1,input:{attachmentState:n.attachmentState,callDepth:n.callDepth,...r===void 0?{}:{samples:r}}}}}return e}l(Nt,"stableRenderContextAddress");function At(e){let t=e.split(":");if(t.length!==6)return;let n=Number(t[3]);return Number.isSafeInteger(n)&&n>=0?n:void 0}l(At,"renderAttachmentSamples");function Yt(e,t){let n=p(e)?e:{},r={isDepthTexture:n.isDepthTexture===true,isRenderTargetTexture:n.isRenderTargetTexture===true,isDataTexture:n.isDataTexture===true,isData3DTexture:n.isData3DTexture===true,isCubeTexture:n.isCubeTexture===true,format:typeof n.format=="number"?n.format:null,type:typeof n.type=="number"?n.type:null,compareFunction:typeof n.compareFunction=="number"?n.compareFunction:null};typeof n.name=="string"&&n.name.length>0&&(r.name=n.name),typeof n.colorSpace=="string"&&n.colorSpace.length>0&&(r.colorSpace=n.colorSpace);let i=At(t);return i!==void 0&&(r.samples=i),r}l(Yt,"textureResourceSignature");function Xt(e,t){if(e.k!=="inputNode"||e.value.container!=="@renderer")return e;let n=e.value.path;if(n.length<4||n[0]!==z[0]||n[1]!==z[1]||typeof n[2]!="string")return e;let r=Te(n[2]);if(r===void 0)return e;let i=n[3]==="depthTexture"&&n.length===4?"depthTexture":n[3]==="textures"&&n.length===5&&Number.isSafeInteger(n[4])?"texture":void 0;if(i===void 0)return e;let{k:s,value:o,...c}=e;return {k:"recipe",id:P.renderContextInput,version:1,input:{attachmentState:r.attachmentState,callDepth:r.callDepth,mrt:r.mrtState!=="default",resource:i,...i==="texture"?{index:Number(n[4])}:{},texture:Yt(t,r.attachmentState),node:c}}}l(Xt,"stableRenderContextInputAddress");function R(e){if(!p(e))return typeof e;let t=e.constructor;return (typeof t=="function"||p(t))&&typeof t.name=="string"?t.name:"unknown"}l(R,"constructorName");function ft(e){if(!p(e))return R(e);let t=p(e.image)?e.image:void 0;return [R(e),typeof e.uuid=="string"?`uuid=${e.uuid}`:"",typeof e.name=="string"&&e.name?`name=${e.name}`:"",e.isRenderTargetTexture===true?"renderTarget":"",e.isPMREMTexture===true?"pmrem":"",t&&typeof t.width=="number"&&typeof t.height=="number"?`${t.width}x${t.height}`:"",typeof e.format=="number"?`format=${e.format}`:"",typeof e.type=="number"?`type=${e.type}`:""].filter(Boolean).join("/")}l(ft,"textureLabel");function ue(e,t){return typeof e=="string"&&e.length>0?e.slice(0,512):t}l(ue,"boundedLabel");function Zt(){return typeof performance=="object"&&typeof performance.now=="function"?performance.now():Date.now()}l(Zt,"now");function Tt(e){return p(e)&&typeof e.then=="function"}l(Tt,"promiseLike");function Qt(e){A={capture:e.capture===true,forceLive:e.forceLive===true,settleFrames:Number.isSafeInteger(e.settleFrames)&&e.settleFrames>=0?e.settleFrames:60,settleTimeoutMs:Number.isSafeInteger(e.settleTimeoutMs)&&Number(e.settleTimeoutMs)>=1e3?Number(e.settleTimeoutMs):3e4,visibilityGuard:e.visibilityGuard===true,...typeof e.captureId=="string"?{captureId:e.captureId}:{},...typeof e.sessionKey=="string"?{sessionKey:e.sessionKey}:{},...typeof e.token=="string"?{token:e.token}:{},readiness:{...typeof e.readiness?.selector=="string"?{selector:e.readiness.selector}:{},...typeof e.readiness?.global=="string"?{global:e.readiness.global}:{}},transform:e.transform},ne=void 0,re=false,J=void 0,Y=void 0,W=false,Oe=0,de=void 0,_=void 0,Reflect.set(globalThis,Ft,n=>{p(n)&<(n);});let t=Reflect.get(globalThis,Dt);p(t)&<(t),(A.capture||jt())&&en();}l(Qt,"configureThreeBlocksShaderCapture");function jt(){let e=Reflect.get(globalThis,"location"),t=p(e)?Reflect.get(e,"search"):void 0;if(typeof t!="string")return false;let n=new URLSearchParams(t),r=n.get("threeBlocksShaderMode");return n.get("capture")==="1"||r==="live"||r==="precompiled"}l(jt,"drivenShaderSession");function He(){return A.capture||A.forceLive||jt()}l(He,"shaderSessionActive");function lt(e){if(B=e,!A.capture)return;let t=Ct(),n=e.automaticRegistrationPrefix,r=typeof n=="function"?Reflect.apply(n,e,[t]):void 0;typeof r=="string"&&(_=r);}l(lt,"adoptCaptureCache");function Vt(e){if(!A.capture||B===void 0)return;let t=B.automaticRegistrationPrefix,n=typeof t=="function"?Reflect.apply(t,B,[e]):void 0;if(typeof n=="string"){_=n;return}let r=B.enableAutomaticRegistration;if(typeof r=="function"){_="auto";try{Reflect.apply(r,B,[{scene:e,prefix:_}]);}catch(i){throw _=void 0,i}}}l(Vt,"ensureCaptureAutomaticRegistration");function en(){if(dt)return;let e=globalThis,t=e.requestAnimationFrame;if(typeof t!="function")return;dt=true;let n=0,r=0,i=false,s=new Map,o=l(()=>{i||s.size===0||(i=true,Reflect.apply(t,e,[()=>{i=false;let c=[...s.values()];s.clear();let a=n++*(1e3/60);for(let d of c)try{d(a);}catch(u){queueMicrotask(()=>{throw u});}o();}]));},"schedule");Reflect.set(e,"requestAnimationFrame",c=>{let a=++r;return s.set(a,c),o(),a}),Reflect.set(e,"cancelAnimationFrame",c=>{s.delete(c);});}l(en,"installDeterministicRaf");function I(e,t){if(!B)return;let n=B[e];return typeof n=="function"?Reflect.apply(n,B,t):void 0}l(I,"cacheCall");function Ct(){if(B&&typeof B.activeScene=="string"&&B.activeScene!=="default")return B.activeScene;let e=Reflect.get(globalThis,"location"),t=p(e)?Reflect.get(e,"search"):void 0,n=typeof t=="string"?new URLSearchParams(t).get("captureId"):null;return n!==null&&Gt.test(n)?n:B&&typeof B.activeScene=="string"?B.activeScene:"default"}l(Ct,"activeShaderCaptureScene");function X(){return Ct()}l(X,"activeScene");function ae(e,t,n,r){let i=I(e==="compute"?"registrationForCompute":"registrationForRender",e==="compute"?[t,n]:[t,n,r]);return (!p(i)||typeof i.key!="string")&&(Vt(n),i=I(e==="compute"?"registrationForCompute":"registrationForRender",e==="compute"?[t,n]:[t,n,r])),p(i)&&typeof i.key=="string"?i:void 0}l(ae,"sceneRegistration");function tn(e){return e.key}l(tn,"capturedRegistrationKey");function ze(e,t){let n=t==="compute"?e.object:e.material;return n!==null&&typeof n=="object"?n:void 0}l(ze,"builderTarget");function xt(e){return e.material===null||e.material===void 0?"compute":"render"}l(xt,"buildKind");function xe(e){if(!p(e))return;let t={};for(let n of ["uuid","id","name","type"]){let r=e[n];typeof r=="string"?t[n]=ue(r,""):(typeof r=="number"&&Number.isFinite(r)||typeof r=="boolean")&&(t[n]=r);}return Object.keys(t).length===0?void 0:t}l(xe,"objectIdentity");function nn(e,t,n,r){if(ge.length>=Re)return;let i=e==="compute"?t.object:t.material,s=ue(p(i)?i.name??i.type:void 0,"unknown"),o=I("registrations",[n]),c=xe(i),a=p(r)?xe(r.material):void 0;ge.push({kind:e,name:s,reason:e==="compute"?`unregistered compute "${s}"`:`unregistered material "${s}"`,...c===void 0?{}:{target:c},...a===void 0?{}:{renderObjectMaterial:a},...Array.isArray(o)?{registrations:o.slice(0,16).flatMap(d=>{if(!p(d))return [];let u=xe(d.target);return [{...typeof d.key=="string"?{key:ue(d.key,"")}:{},...typeof d.kind=="string"?{kind:ue(d.kind,"")}:{},...u??{},sameTarget:d.target===i,...p(r)?{sameRenderObjectMaterial:d.target===r.material}:{}}]})}:{}});}l(nn,"addSkipped");function pt(e,t,n=s=>{x.buildMs+=s;},r=Zt,i){let s=e[t];typeof s=="function"&&Reflect.set(e,t,l(function(...c){let a=r(),d;try{d=Reflect.apply(s,this,c);}catch(u){throw n(r()-a),u}return Tt(d)?Promise.resolve(d).then(u=>(n(r()-a),i?.(),u),u=>{throw n(r()-a),u}):(n(r()-a),i?.(),d)},"timedBuild"));}l(pt,"wrapThreeBlocksCaptureTimedBuild");function vt(e,t,n){if(!He()||!p(e)||!p(t)||ot.has(e))return;ot.add(e);let r=X(),i=I("containers",[r]);Ue.set(e,new Set(Array.isArray(i)?i.filter(b=>p(b)&&typeof b.key=="string").map(b=>String(b.key)):[]));let s=p(n)&&p(n.material)?n:void 0,o=s?"render":xt(e),c=o==="render"&&s?be("render",s):ze(e,o);c&&(s&&wt.set(e,s),ae(o,c,X(),s));let a=[];St.set(e,a);let d=e.getUniformFromNode;typeof d=="function"&&Reflect.set(e,"getUniformFromNode",l(function(j,g,f,m){let y=Reflect.apply(d,this,[j,g,f,m]),k=N(j),S=typeof f=="string"?f:this.shaderStage;if(k&&typeof g=="string"&&(S==="vertex"||S==="fragment"||S==="compute")){let v=p(y)&&typeof y.name=="string"?y.name:typeof m=="string"?m:null;a.push({node:k,type:g,stage:S,name:v,...typeof k.id=="number"?{nid:k.id}:{}});}return y},"captureUniform"));let u=l(()=>{it.has(e)||(it.add(e),Bt(e,t));},"recordBuild");pt(e,"build",void 0,void 0,u),pt(e,"buildAsync",void 0,void 0,u);}l(vt,"instrumentThreeBlocksShaderBuilder");function te(e){return Object.assign(Object.create(Object.getPrototypeOf(e)),e)}l(te,"cloneCaptureRecord");function rn(e){let t=Object.create(e);for(let o of ["object","material","scene","camera","lightsNode","context","vertexShader","fragmentShader","computeShader","observer","hardwareClipping","updateNodes","updateBeforeNodes","updateAfterNodes"]){let c=e[o];Reflect.set(t,o,o==="material"&&p(c)?te(c):Array.isArray(c)?[...c]:c);}let n=typeof e.getAttributesArray=="function"?Reflect.apply(e.getAttributesArray,e,[]):[],r=Array.isArray(n)?n.map(o=>p(o)?te(o):o):[];Reflect.set(t,"getAttributesArray",()=>r);let i=typeof e.getBindings=="function"?Reflect.apply(e.getBindings,e,[]):[],s=Array.isArray(i)?i.map(o=>{if(!p(o))return o;let c=te(o),a=Array.isArray(o.bindings)?o.bindings.map(d=>{if(!p(d))return d;let u=te(d);return Array.isArray(d.uniforms)&&Reflect.set(u,"uniforms",d.uniforms.map(b=>p(b)?te(b):b)),u}):[];return Reflect.set(c,"bindings",a),c}):[];return Reflect.set(t,"getBindings",()=>s),t}l(rn,"snapshotBuilderState");function Bt(e,t){if(!He()||A.capture&&se||!p(e)||!p(t))return;x.buildCalls++,Y=Date.now(),W=false;let n=xt(e);n==="compute"?x.computeBuilds++:x.renderBuilds++;let r=X();K=r;let i=Ue.get(e)??new Set,s=I("containers",[r]);if(Array.isArray(s))for(let d of s)p(d)&&typeof d.key=="string"&&he(d.key)&&!i.has(d.key)&&Pe.add(d.key);Ue.delete(e);let o=ze(e,n),c=n==="render"?wt.get(e)??(p(e.object)?e.object:void 0):void 0,a=o?ae(n,o,r,c):void 0;if(a){x.registeredBuilds++,n==="compute"?x.registeredComputeBuilds++:x.registeredRenderBuilds++;let d=tn(a);if(pe.length<Re){let u=rn(e),b={scene:r,key:d,kind:n,builder:u,renderer:t,...c?{renderObject:c}:{},journal:[...St.get(e)??[]]};pe.push(b);}}else nn(n,e,r,c);Et();}l(Bt,"recordThreeBlocksShaderBuild");function be(e,t){return e==="compute"?t!==null&&typeof t=="object"?t:void 0:p(t)&&t.material!==null&&typeof t.material=="object"?t.material:void 0}l(be,"targetForProvider");function gt(e,t,n){if(A.capture&&se)return;let r=X();K=r;let i=be(e,t),s=e==="render"&&p(t)?t:void 0,o=i?ae(e,i,r,s):void 0;n!=null?(x.injected++,e==="compute"?x.injectedCompute++:x.injectedRender++):o&&(x.missed++,e==="compute"?x.missedCompute++:x.missedRender++,x.missedKeys.length<Re&&!x.missedKeys.includes(o.key)&&x.missedKeys.push(o.key)),A.capture||Et();}l(gt,"recordProviderResult");function on(e){let t=e.debug;if(!p(t))return;let n=t.onNodeBuilderCreated,r=ct.get(e);if(n===r)return;let i=typeof n=="function"?n:void 0,s=l(function(c,a){i!==void 0&&Reflect.apply(i,this,[c,a]),vt(c,e,a);},"captureNodeBuilder");ct.set(e,s),t.onNodeBuilderCreated=s;}l(on,"installCaptureBuilderCallback");function sn(e,t,n){if(!p(e))return;if(n!==void 0&&!tt(n))throw new Error(`@three-blocks/devtools supports Three.js 0.185.x capture; received revision ${JSON.stringify(n)}.`);if(!He())return;if(p(t)&&t!==me&&(me=t,fe=void 0),on(e),A.forceLive){let a=at.get(e);a||(a={__threeBlocksCaptureForceLive:true,getForRender(d){let u=be("render",d);u&&ae("render",u,X(),p(d)?d:void 0);},getForCompute(d){let u=be("compute",d);u&&ae("compute",u,X());}},at.set(e,a)),e.nodeBuilderStateProvider=a;return}let r=e.nodeBuilderStateProvider;if(!p(r))return;let i=st.get(r);if(i){e.nodeBuilderStateProvider=i;return}if(r.__threeBlocksCaptureWrapper===true)return;let s=r.getForRender,o=r.getForCompute;if(typeof s!="function"||typeof o!="function")return;let c={__threeBlocksCaptureWrapper:true,getForRender(a,d){let u=Reflect.apply(s,r,[a,d]);return gt("render",a,u),u},getForCompute(a,d){let u=Reflect.apply(o,r,[a,d]);return gt("compute",a,u),u}};st.set(r,c),e.nodeBuilderStateProvider=c;}l(sn,"prepareThreeBlocksShaderRenderer");var an=Object.freeze({configureThreeBlocksShaderCapture:Qt,instrumentThreeBlocksShaderBuilder:vt,prepareThreeBlocksShaderRenderer:sn,recordThreeBlocksShaderBuild:Bt});Reflect.set(globalThis,Symbol.for(nt),an);function cn(e){return N(e)}l(cn,"unwrapTsl");var fe;function L(){if(fe)return fe;let e=new Map;for(let[t,n]of Object.entries(me)){let r=cn(n);r&&!e.has(r)&&e.set(r,t);}return fe=e,e}l(L,"tslMap");function dn(e,t){if(!(!t||!p(e._nodes)||typeof e._nodes.getEnvironmentNode!="function"))return N(Reflect.apply(e._nodes.getEnvironmentNode,e._nodes,[t]))}l(dn,"sceneEnvironmentNode");var mt=new WeakMap;function un(e,t,n){let r=Reflect.get(e,"getLightNodes");if(typeof r!="function")return [];let i=Reflect.get(t,"getDataFromNode");if(typeof i=="function"){let c=Reflect.apply(i,t,[e]),a=p(c)?c.lightNodes:void 0;if(Array.isArray(a))return a.map(N).filter(d=>d!==void 0)}let o=Reflect.apply(r,e,[{renderer:n,context:{materialLightings:[]},getDataFromNode(c){let a=mt.get(c);return a||(a={},mt.set(c,a)),a}}]);return Array.isArray(o)?o.map(N).filter(c=>c!==void 0):[]}l(un,"lightNodes");function ht(e,t){let n=Reflect.get(me,e);return typeof n=="function"?N(Reflect.apply(n,void 0,[t])):void 0}l(ht,"lightUniform");function ve(e){if(!e)return [];let t=[],n=Reflect.get(e,"traverse");return typeof n=="function"&&Reflect.apply(n,e,[r=>{r!==null&&typeof r=="object"&&Reflect.get(r,"isLight")===true&&t.push(r);}]),t}l(ve,"sceneLights");function fn(e){if(!e)return [];let t=[],n=Reflect.get(e,"traverse");return typeof n=="function"&&Reflect.apply(n,e,[r=>{r!==null&&typeof r=="object"&&t.push(r);}]),t}l(fn,"sceneObjects");function ln(e){return !(Reflect.get(e,"isNode")===true||Reflect.get(e,"isObject3D")===true||Reflect.get(e,"isTexture")===true||Reflect.get(e,"isMaterial")===true||ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof Set||e instanceof Promise)}l(ln,"isScannable");function pn(e,t,n,r=()=>false,i=false){let s=new Set,o=[{value:e,path:[],depth:0}];for(let c=0;c<o.length;c++){let a=o[c];if(!a||s.has(a.value)||a.depth>Kt)continue;let{value:d,path:u,depth:b}=a;s.add(d);let j=Array.isArray(d)?Array.from(d,(g,f)=>[f,g]):d instanceof Map?[...d.entries()].filter(g=>typeof g[0]=="string"||typeof g[0]=="number").map(([g,f])=>[`map:${String(g)}`,f]):Object.keys(d).map(g=>[g,Reflect.get(d,g)]);for(let[g,f]of j){if(f===null||typeof f!="object")continue;let m=[...u,g];if(!r(m))if(ye(f)){let y=N(f);y&&t(y,m),i&&o.push({value:y??f,path:m,depth:b+1});}else n(f,m),ln(f)&&o.push({value:f,path:m,depth:b+1});}}}l(pn,"scanContainer");function gn(e){if(new Uint8Array(new Uint16Array([258]).buffer)[0]!==2)throw new Error("Shader capture requires a little-endian host.");let t=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),n=t.toBase64;if(typeof n=="function")return n.call(t);let r="",i=32768;for(let s=0;s<t.length;s+=i)r+=String.fromCharCode(...t.subarray(s,s+i));return btoa(r)}l(gn,"bytesToBase64");function yt(e){if(typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean")return e;if(p(e)){for(let[t,n]of [["isVector2","v2"],["isVector3","v3"],["isVector4","v4"],["isColor","c"],["isMatrix3","m3"],["isMatrix4","m4"]])if(e[t]===true&&typeof e.toArray=="function"){let r=Reflect.apply(e.toArray,e,[]);if(Array.isArray(r)&&r.every(i=>typeof i=="number"&&Number.isFinite(i)))return {t:n,a:r}}}}l(yt,"serializeValueItem");function bt(e){if(Array.isArray(e)){let r=e.map(yt);return r.every(i=>i!==void 0)?{t:"arr",items:r}:void 0}let t=yt(e);if(t!==void 0)return t;if(p(e)&&e.isTexture===true&&e.image==null&&e.isRenderTargetTexture!==true&&e.version===0&&(e.name===""||e.name===void 0))return {t:"tex"};if(!p(e)||e.isDataTexture!==true||!p(e.image))return;let n=e.image.data;if(!(!ArrayBuffer.isView(n)||typeof Reflect.get(n,"length")!="number"||Number(Reflect.get(n,"length"))>Ht))return {t:"dtex",arrayType:R(n),data:gn(n),width:typeof e.image.width=="number"?e.image.width:0,height:typeof e.image.height=="number"?e.image.height:0,format:typeof e.format=="number"?e.format:0,type:typeof e.type=="number"?e.type:0,minFilter:typeof e.minFilter=="number"?e.minFilter:0,magFilter:typeof e.magFilter=="number"?e.magFilter:0,wrapS:typeof e.wrapS=="number"?e.wrapS:0,wrapT:typeof e.wrapT=="number"?e.wrapT:0,name:typeof e.name=="string"?e.name:""}}l(bt,"serializeStaticValue");function mn(e){if(!(Object.hasOwn(e,"update")||Object.hasOwn(e,"updateBefore")||Object.hasOwn(e,"updateAfter"))){if(Reflect.get(e,"isStorageTextureNode")===true)return "storageTexture";if(Reflect.get(e,"isStorageBufferNode")===true)return "storage";switch(R(e)){case "BufferNode":return "buffer";case "BufferAttributeNode":return "bufferAttribute";case "Texture3DNode":return "texture3D";case "CubeTextureNode":return "cubeTexture";case "TextureNode":return "texture";case "UniformArrayNode":return "uniformArray";case "UniformNode":return "uniform";case "PMREMNode":return "pmremTexture";default:return}}}l(mn,"inputClass");function Rt(e,t){let n=R(e);return n!==R(t)||["TextureNode","Texture3DNode","CubeTextureNode"].includes(n)||!!N(Reflect.get(e,"compareNode"))!=!!N(Reflect.get(t,"compareNode"))||Reflect.get(e,"access")!==Reflect.get(t,"access")?false:R(e)==="BufferAttributeNode"?["bufferType","bufferStride","bufferOffset","usage","instanced"].every(r=>Reflect.get(e,r)===Reflect.get(t,r)):true}l(Rt,"hasEquivalentSharedInputShape");function hn(e){if(e.k==="inputNode")return e.value;if(e.k==="container")return {container:e.key,path:[...e.path,"value"]};if(e.k==="anchor"&&e.path.length===0)return {container:"@material",path:[e.slot,"value"]}}l(hn,"sharedTextureValueLocation");function yn(e){if(e?.k==="container")return {container:e.key,path:e.path};if(e?.k==="anchor"&&e.path.length===0)return {container:"@material",path:[e.slot]}}l(yn,"sharedTextureNodeLocation");function kt(e,t){if(e.isDataArrayTexture!==true||e.format!==1023||e.type!==1015||!p(e.image)||e.image.data===null||typeof e.image.data!="object"||R(e.image.data)!=="Float32Array")return false;let n=t.morphAttributes,r=t.attributes;if(!p(n)||!p(r)||!p(r.position))return false;let i=Array.isArray(n.position)?n.position:[],s=Array.isArray(n.normal)?n.normal:[],o=Array.isArray(n.color)?n.color:[],c=i.length>0?i:s.length>0?s:o;if(c.length===0)return false;let a=r.position.count;if(!Number.isSafeInteger(a)||Number(a)<0)return false;let d=o.length>0?3:s.length>0?2:1,u=Number(a)*d,b=1;return u>4096&&(b=Math.ceil(u/4096),u=4096),e.image.width===u&&e.image.height===b&&e.image.depth===c.length&&Reflect.get(e.image.data,"length")===u*b*4*c.length}l(kt,"isThreeR185MorphTargetTexture");function Fe(e,t=new Set){if(e===null||typeof e!="object"||t.has(e))return false;if(t.add(e),Array.isArray(e))return e.some(r=>Fe(r,t));let n=e;return n.k==="recipe"?true:Object.values(n).some(r=>Fe(r,t))}l(Fe,"addressUsesRecipe");var De=class{static{l(this,"RecipeCollisionIndex");}#t=new Map;register(t,n,r,i){if(!Fe(t)||t.k==="recipe"&&t.id===P.skinningEvent)return;let s=JSON.stringify(t),o=this.#t.get(s);if(o!==void 0&&o.source!==n)throw new Error(`Shader recipe collision between "${o.shaderKey}" (${o.usage}) and "${r}" (${i}) for ${s}. Register the live resources in distinct stable application containers or make their structural recipe signatures unique.`);o===void 0&&this.#t.set(s,{source:n,shaderKey:r,usage:i});}};function G(e){return e.includes("_inspector")||e.includes("_renderer")||e.includes("_lastRenderer")||e.includes("renderer")||e.some(t=>typeof t=="string"&&t.startsWith("_cached"))}l(G,"applicationContainerPathIsTransient");var Ke=class{static{l(this,"CaptureClassifier");}#t;#a;#e=new Map;#c=new Map;#n=new Map;#d=new Map;#o=[];#s=[];#l=0;constructor(t,n){this.#t=t,this.#a=n;let r=t.kind==="compute"?ye(t.target)?[{slot:"compute",node:t.target}]:[]:et.flatMap(g=>{let f=N(Reflect.get(t.target,g));return f?[{slot:g,node:f}]:[]});for(let g of r)this.#r(g.node,{k:"anchor",key:t.key,slot:g.slot,path:[]});let i=N(t.builder.lightsNode);this.#s.length=0;let s=this.#s;if(i){let g=un(i,t.builder,t.renderer);this.#o.push(`lights=${g.length}`);for(let f=0;f<g.length;f++){let m=g[f];if(!m)continue;let y={k:"lightNode",light:f};this.#r(m,y);let k=Reflect.get(m,"light");if(Reflect.get(m,"isAnalyticLightNode")===true){let S=N(Reflect.get(m,"baseColorNode")),v=S??N(Reflect.get(m,"colorNode"));v&&this.#e.set(v,{k:"owned",owner:y,path:[S!==void 0||k!==null&&typeof k=="object"&&Reflect.get(k,"castShadow")===true?"baseColorNode":"colorNode"]});}if(k!==null&&typeof k=="object")for(let S of rt){s[f]=k;let v=ht(S,k);this.#o.push(`${f}/${S}=${v?`${R(v)}:${R(Reflect.get(v,"value"))}:${String(Reflect.get(v,"updateType"))}`:"missing"}`),v&&this.#r(v,{k:"lightUniform",fn:S,light:f});}}}else this.#o.push("lights=missing");let o=t.builder.scene!==null&&typeof t.builder.scene=="object"?t.builder.scene:null;for(let[g,f]of ve(o).entries()){if(s.includes(f))continue;let m=s.length+g;for(let y of rt){let k=ht(y,f);k&&this.#r(k,{k:"lightUniform",fn:y,light:m,sceneLight:g});}}let c=dn(t.renderer,o);c&&this.#r(c,{k:"sceneEnv"});let a=l((g,f,m,y=false)=>{this.#n.has(f)||this.#n.set(f,{container:g,path:[]}),pn(f,(k,S)=>this.#r(k,{k:"container",key:g,path:S}),(k,S)=>{this.#n.has(k)||this.#n.set(k,{container:g,path:S});},m,y);},"scan");if(t.kind==="render")for(let g of Object.getOwnPropertyNames(t.target)){let f=N(Reflect.get(t.target,g));f&&!this.#e.has(f)&&this.#e.set(f,{k:"container",key:"@material",path:[g]});}let d=I("containers",[t.scene]),u=Array.isArray(d)?d.find(g=>p(g)&&typeof g.key=="string"&&g.key.includes("/resource-batched-text-")):void 0;if(p(u)&&typeof u.key=="string"&&u.target!==null&&typeof u.target=="object"&&a(u.key,u.target,G,true),Array.isArray(d)){for(let g of d)if(g!==u&&p(g)&&typeof g.key=="string"&&g.target!==null&&typeof g.target=="object"){let f=g.key;if(he(f)||Pe.has(f))continue;a(f,g.target,G,true);}}if(t.kind==="render"){a("@material",t.target,k=>k.some(S=>typeof S=="string"&&S.startsWith("_")),true),t.renderObject&&a("@renderObject",t.renderObject,k=>k.length===1&&k[0]!=="context");let g=Reflect.get(t.renderer,"getMRT"),f=Reflect.get(t.builder,"context"),y=(p(f)?N(f.mrt):void 0)??(typeof g=="function"?N(Reflect.apply(g,t.renderer,[])):void 0);t.renderObject&&y&&this.#r(y,{k:"container",key:"@renderObject",path:["context","mrt"]});}let b=t.builder.object;b!==null&&typeof b=="object"&&a("@object",b,g=>G(g)||t.kind==="compute"&&g.some(f=>typeof f=="string"&&f.startsWith("_")),t.kind==="compute"),o&&a("@scene",o,G);for(let[g,f]of fn(o).entries())a(`@sceneObject:${g}`,f,G);a("@renderer",t.renderer,g=>g.length>=1&&g[0]==="_inspector"||g.length===2&&g[0]==="_nodes"&&g[1]==="nodeBuilderCache");let j=I("containers",[t.scene]);if(Array.isArray(j)){for(let g of j)if(p(g)&&typeof g.key=="string"&&g.target!==null&&typeof g.target=="object"){let f=g.key;if(he(f)||Pe.has(f))continue;a(f,g.target,G,true);}}}#i(t,n,r,i){let s=Reflect.get(t,"value"),o=this.#c.get(t)??i??(r.k==="recipe"&&r.id===P.renderContextInput&&s!==null&&typeof s=="object"?s:t);return this.#c.set(t,o),this.#a.register(r,o,this.#t.key,n),r}#r(t,n){!this.#e.has(t)&&!L().has(t)&&this.#e.set(t,n);for(let[r,i]of ut(t))r===t||this.#e.has(r)||L().has(r)||this.#e.set(r,{k:"owned",owner:n,path:i});}#u(t){if(R(t)!=="ReferenceNode")return;let n=Reflect.get(t,"property"),r=Reflect.get(t,"uniformType");if(typeof n!="string"||n.length===0||typeof r!="string"||r.length===0)return;let i=Reflect.get(t,"object"),s=i!==null&&typeof i=="object"?this.#n.get(i):void 0;if(i!==null&&typeof i=="object"&&s===void 0)return;let o=N(Reflect.get(t,"group")),c=o?L().get(o):void 0;if(o&&c===void 0)return;let a=Reflect.get(t,"count");if(a!==null&&(!Number.isSafeInteger(a)||Number(a)<0))return;let d=Reflect.get(t,"name");return {k:"reference",property:n,uniformType:r,...a===null?{}:{count:Number(a)},...s===void 0?{}:{object:s},...c===void 0?{}:{group:c},...typeof d=="string"&&d.length>0?{name:d}:{}}}#f(t){if(R(t)!=="EventNode"||Reflect.get(t,"eventType")!=="object")return;let n=this.#t.builder.object,r=Reflect.get(t,"callback"),i=typeof r=="function"?Function.prototype.toString.call(r):"";if(!p(n)||!i.includes("morphTargetsRelative")||!i.includes("morphTargetInfluences")||!i.includes(".reduce")||!i.includes(".update"))return;let s=n.morphTargetInfluences,o=n.geometry;if(!Array.isArray(s)||!p(o))return;let c=o.morphAttributes;if(!p(c))return;let a=Array.isArray(c.position)?c.position:[],d=Array.isArray(c.normal)?c.normal:[],u=Array.isArray(c.color)?c.color:[],b=a.length>0?a:d.length>0?d:u;if(b.length===0||b.length!==s.length)return;let j=this.#t.journal.some(m=>{let y=Reflect.get(m.node,"value");return R(m.node)==="TextureNode"&&m.type==="texture"&&m.stage==="vertex"&&Reflect.get(m.node,"sampler")===false&&p(y)&&kt(y,o)}),g=this.#t.journal.flatMap((m,y)=>R(m.node)==="UniformArrayNode"?[`${y}:${m.type}/${m.stage}:same=${Reflect.get(m.node,"array")===s}:length=${Array.isArray(Reflect.get(m.node,"array"))?Reflect.get(m.node,"array").length:"na"}`]:[]);if(this.#o.push(`morph=${String(Reflect.get(n,"name")??"")}:targets=${b.length}:influences=${s.length}:texture=${j}:arrays=[${g.join(",")}]`),!j)return;let f=this.#t.journal.flatMap((m,y)=>{let k=Reflect.get(m.node,"array");if(R(m.node)!=="UniformArrayNode"||m.type!=="buffer"||m.stage!=="vertex"||k!==s&&(!Array.isArray(k)||k.length!==s.length))return [];let S=this.#t.journal[y-1];return S===void 0||R(S.node)!=="UniformNode"||S.type!=="float"||S.stage!=="vertex"||typeof Reflect.get(S.node,"value")!="number"||!Number.isFinite(Reflect.get(S.node,"value"))?[]:[{base:S.node,influences:m.node,count:s.length}]});return f.length===1?f[0]:void 0}#p(t){if(R(t)!=="EventNode"||Reflect.get(t,"eventType")!=="object")return;let n=this.#t.builder.object,r=Reflect.get(t,"callback"),i=typeof r=="function"?Function.prototype.toString.call(r):"";if(p(n)&&n.isSkinnedMesh===true&&i.includes("skeleton"))return {k:"recipe",id:P.skinningEvent,version:1};let s=this.#f(t);if(s){let o=this.#e.get(s.base),c=this.#e.get(s.influences);return o===void 0||c===void 0?void 0:{k:"recipe",id:P.morphUpdateEvent,version:1,input:{base:o,influences:c,count:s.count}}}}#g(t){if(R(t)!=="MaxMipLevelNode")return;let n=N(Reflect.get(t,"textureNode"));if(!n)return;let r=this.classify(n,"max-mip texture owner");return {k:"recipe",id:P.maxMip,version:1,input:r}}#m(t){if(R(t)!=="TextureNode"||Reflect.get(t,"sampler")!==false)return;let n=Reflect.get(t,"value"),r=this.#t.builder.object,i=p(r)?r.geometry:void 0;if(!(!p(r)||!p(n)||!p(i)||this.#n.has(n)||Reflect.get(r,"morphTexture")===n||!kt(n,i)))return {k:"recipe",id:P.morphTargetTexture,version:1}}noteUpdateNode(t){if(this.#e.has(t))return;let n=this.#f(t);if(n){let s=Reflect.get(n.influences,"elementType");this.#e.set(n.influences,{k:"inputNode",nodeClass:"uniformArray",value:{container:"@object",path:["morphTargetInfluences"]},access:null,uniformType:typeof s=="string"?s:null});}if(R(t)==="PMREMNode"){let s=this.classify(t,"PMREM update node ownership");for(let o of ["_texture","_width","_height","_maxMip"]){let c=N(Reflect.get(t,o));c&&this.#e.set(c,{k:"owned",owner:s,path:[o]});}return}let r;if(Reflect.get(t,"isMaterialReferenceNode")===true){let s=Reflect.get(t,"property"),o=Reflect.get(t,"uniformType"),c=Reflect.get(t,"referenceType"),a=typeof o=="string"||o===null?o:c;typeof s=="string"&&(typeof a=="string"||a===null)&&(r={k:"materialCache",property:s,type:a});}else r=this.#u(t);if(r===void 0){["TextureNode","Texture3DNode","CubeTextureNode"].includes(R(t))&&(r=this.classify(t,"texture update node ownership"));let s=r===void 0&&Reflect.get(t,"isTextureNode")===true?bt(Reflect.get(t,"value")):void 0;if(p(s)&&s.t==="tex"&&this.classify(t,"update node ownership"),r===void 0)return}this.#e.set(t,r);let i=N(Reflect.get(t,"node"));i&&this.#e.set(i,{k:"owned",owner:r,path:["node"],prime:"reference"});}shouldOmitUpdateNode(t){return R(t)==="InspectorNode"?true:R(t)==="EventNode"&&Reflect.get(t,"eventType")==="frame"&&p(this.#t.builder.object)&&Reflect.get(this.#t.builder.object,"isInstancedMesh")===true}#h(t){let n=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,r=this.#s.map((o,c)=>({light:o,address:{light:c}}));for(let[o,c]of ve(n).entries())this.#s.includes(c)||r.push({light:c,address:{light:this.#s.length+o,sceneLight:o}});if(r.length===0)return;if(Reflect.get(t,"isReferenceNode")===true){let o=Reflect.get(t,"object"),c=Reflect.get(t,"property");if(o===null||typeof o!="object"||typeof c!="string")return;let a=Jt[c],d=c==="near"?"shadowCameraNear":c==="far"?"shadowCameraFar":void 0;for(let u of r){let b=Reflect.get(u.light,"shadow");if(!(b===null||typeof b!="object")){if(a!==void 0&&b===o)return {k:"lightUniform",fn:a,...u.address};if(d!==void 0&&Reflect.get(b,"camera")===o)return {k:"lightUniform",fn:d,...u.address}}}return}if(Reflect.get(t,"isUniformNode")!==true)return;let i=Reflect.get(t,"update");if(typeof i!="function"||typeof Reflect.get(t,"value")!="number")return;let s=l(()=>{try{Reflect.apply(i,t,[{}]);}catch{}},"invoke");for(let o of r){let c=Reflect.get(o.light,"shadow"),a=c!==null&&typeof c=="object"?Reflect.get(c,"camera"):void 0;if(!(a===null||typeof a!="object"))for(let d of ["shadowCameraNear","shadowCameraFar"]){let u=d==="shadowCameraNear"?"near":"far",b=Reflect.get(a,u);if(typeof b!="number")continue;let j=b+12345.625,g=false;try{Reflect.set(a,u,j),s(),g=Reflect.get(t,"value")===j;}finally{Reflect.set(a,u,b),s();}if(g)return {k:"lightUniform",fn:d,...o.address}}}}classify(t,n){let r=Reflect.get(t,"name");if(typeof r=="string"&&qt.has(r))return {k:"namedRenderUniform",name:r};let i=this.#e.get(t);if(i)return this.#i(t,n,Nt(i));let s=this.#u(t);if(s)return this.#e.set(t,s),s;let o=this.#p(t);if(o)return this.#e.set(t,o),this.#i(t,n,o);let c=this.#g(t);if(c)return this.#e.set(t,c),this.#i(t,n,c);let a=this.#m(t);if(a){this.#e.set(t,a);let h=Reflect.get(t,"value");return this.#i(t,n,a,h!==null&&typeof h=="object"?h:t)}let d=N(Reflect.get(t,"referenceNode")),u=d!==void 0?this.#e.get(d):void 0;if(n.startsWith("uniform ")&&u!==void 0)return this.#e.set(t,u),u;let b=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,j=Reflect.get(t,"light");if(j!==null&&typeof j=="object"){let h=ve(b).indexOf(j);if(h>=0){let w={k:"lightNode",light:h,sceneLight:h};return Reflect.get(t,"isShadowBaseNode")===true?{k:"owned",owner:w,path:["shadowNode"]}:w}}let g=Reflect.get(t,"value"),f=Reflect.get(t,"array");if(g!==null&&typeof g=="object"||f!==null&&typeof f=="object")for(let[h,w]of this.#e){if(h===t)continue;let T=g!==null&&typeof g=="object"&&Reflect.get(h,"value")===g,C=f!==null&&typeof f=="object"&&Reflect.get(h,"array")===f;if(!(!T&&!C)){if(Rt(h,t))return this.#e.set(t,w),w;if(T&&["TextureNode","Texture3DNode","CubeTextureNode"].includes(R(t))){let $=hn(w);if($!==void 0){this.#n.set(g,$);break}}}}if(g!==null&&typeof g=="object")for(let[h,w]of L()){if(Reflect.get(h,"isViewportNode")!==true)continue;let T=N(Reflect.get(h,"_output"));if(T===void 0||Reflect.get(T,"value")!==g||!Rt(T,t))continue;let C={k:"owned",owner:{k:"tsl",name:w},path:["_output"]};return this.#e.set(t,C),C}let m=L().get(t);if(m)return {k:"tsl",name:m};for(let[h,w]of this.#e)for(let T of Object.getOwnPropertyNames(h))if(Reflect.get(h,T)===t){if((w.k==="inputNode"||w.k==="inputValue"||w.k==="recipe")&&!Wt.has(T))continue;let C={k:"owned",owner:w,path:[T]};return this.#e.set(t,C),C}for(let[h,w]of L()){for(let T of Object.getOwnPropertyNames(h))if(Reflect.get(h,T)===t)return {k:"owned",owner:{k:"tsl",name:w},path:[T]};for(let[T,C]of ut(h))if(T===t)return {k:"owned",owner:{k:"tsl",name:w},path:C}}if(R(t)==="ViewportTextureNode"){let h={k:"inputValue",nodeClass:"viewportMipTexture",json:{viewport:this.#l++}};return this.#e.set(t,h),h}if(R(t)==="PassMultipleTextureNode"){let h=N(Reflect.get(t,"passNode")),w=Reflect.get(t,"textureName"),T=Reflect.get(t,"previousTexture")===true?"_previousTextureNodes":"_textureNodes",C=h?this.#e.get(h)??[...this.#e].find(([F])=>N(F)===h)?.[1]:void 0,$=h?Reflect.get(h,T):void 0,V=p($)&&typeof w=="string"?N(Reflect.get($,w)):void 0;if(C&&typeof w=="string"&&V){let F={k:"owned",owner:C,path:[T,w]};return this.#e.set(t,F),F}this.#o.push(`passTexture=${R(h)}/${String(w)}/${T} owner=${C?JSON.stringify(C):"missing"} collection=${R($)} canonical=${R(V)}`);}let y=mn(t);if(y){let h=y==="uniformArray"?Reflect.get(t,"array"):Reflect.get(t,"value"),w=Reflect.get(t,"access"),T=y==="uniformArray"?Reflect.get(t,"elementType"):y==="storage"||y==="buffer"||y==="bufferAttribute"?Reflect.get(t,"bufferType"):Reflect.get(t,"uniformType"),C=typeof w=="string"?w:null,$=typeof T=="string"?T:null,V=N(Reflect.get(t,"group"))??N(Reflect.get(t,"groupNode")),F=V?L().get(V):void 0,qe=F?{group:F}:{},Se=Reflect.get(t,"bufferCount"),We=y==="storage"||y==="buffer"?{bufferCount:Number.isSafeInteger(Se)&&Number(Se)>=0?Number(Se):0,...y==="storage"?{atomic:Reflect.get(t,"isAtomic")===true,pbo:Reflect.get(t,"isPBO")===true}:{}}:{},ee=h!==null&&typeof h=="object"?this.#n.get(h):void 0;if(!ee&&h!==null&&typeof h=="object"){let U=Reflect.get(h,"array");U!==null&&typeof U=="object"&&(ee=this.#n.get(U));}let Je=y==="bufferAttribute"?{stride:Number.isSafeInteger(Reflect.get(t,"bufferStride"))?Number(Reflect.get(t,"bufferStride")):0,offset:Number.isSafeInteger(Reflect.get(t,"bufferOffset"))?Number(Reflect.get(t,"bufferOffset")):0,usage:Number.isSafeInteger(Reflect.get(t,"usage"))?Number(Reflect.get(t,"usage")):0,instanced:Reflect.get(t,"instanced")===true||h!==null&&typeof h=="object"&&(Reflect.get(h,"isInstancedBufferAttribute")===true||Reflect.get(h,"isInstancedInterleavedBuffer")===true)||ee?.path.includes("instanceMatrix")===true||ee?.path.includes("instanceColor")===true}:{},Ye=["texture","cubeTexture","texture3D"].includes(y)&&N(Reflect.get(t,"compareNode"))?{comparison:true}:{},Xe=["texture","cubeTexture"].includes(y)?yn(u):void 0,Ze=Xe??ee,$t=Xe===void 0?y:`${y}Reference`,we=Reflect.get(t,"name"),Qe=typeof we=="string"&&we.length>0?{name:we}:{},H=Ze?{k:"inputNode",nodeClass:$t,value:Ze,access:C,uniformType:$,...Qe,...qe,...We,...Je,...Ye}:void 0;if(!H){let U=bt(h);U!==void 0&&(H={k:"inputValue",nodeClass:y,json:U,access:C,uniformType:$,...Qe,...qe,...We,...Je,...Ye});}if(H){let U=JSON.stringify(H),Ne=this.#d.get(U)??0;this.#d.set(U,Ne+1);let Ut=Ne===0?H:{...H,n:Ne},Ve=Xt(Ut,h);return this.#e.set(t,Ve),this.#i(t,n,Ve,h!==null&&typeof h=="object"?h:t)}}let k=this.#h(t);if(k)return this.#e.set(t,k),this.#i(t,n,k);let S=l(h=>R(h)===R(t)&&R(Reflect.get(h,"value"))===R(Reflect.get(t,"value"))&&Reflect.get(h,"updateType")===Reflect.get(t,"updateType"),"comparable"),v=[...L()].filter(([h])=>S(h)).slice(0,8).map(([,h])=>h),ke=[...this.#e].filter(([h])=>S(h)).slice(0,8).map(([h,w])=>`${JSON.stringify(w)}@${ft(Reflect.get(h,"value"))}`),M=p(Reflect.get(t,"value"))?Reflect.get(Reflect.get(t,"value"),"uuid"):void 0,Z=typeof M=="string"?[...this.#e].filter(([h])=>p(Reflect.get(h,"value"))&&Reflect.get(Reflect.get(h,"value"),"uuid")===M).slice(0,12).map(([h,w])=>`${R(h)}:${JSON.stringify(w)}`):[],Q=I("containers",[this.#t.scene]),_t=Array.isArray(Q)?Q.slice(0,64).flatMap(h=>{if(!p(h)||typeof h.key!="string"||!p(h.target))return [];let w=h.target,T=Object.keys(w).filter(C=>Reflect.get(w,C)===Reflect.get(t,"value"));return [`${h.key}/${R(w)}${T.length>0?`:${T.join(",")}`:""}`]}):[],Ge=R(t)==="EventNode"?Reflect.get(t,"callback"):void 0,Mt=typeof Ge=="function"?Function.prototype.toString.call(Ge).replaceAll(/\s+/gu," ").slice(0,320):void 0,E=this.#t.builder.object;throw new Error(`Cannot address ${R(t)}${typeof r=="string"&&r?` "${r}"`:""} used by ${n} for shader key "${this.#t.key}". Node metadata: value=${R(Reflect.get(t,"value"))}, update=${typeof Reflect.get(t,"update")=="function"?Reflect.get(t,"update").name||"anonymous":"none"}, updateType=${String(Reflect.get(t,"updateType"))}.`+(y?` Input metadata: class=${y}, value=${R(Reflect.get(t,"value"))}, access=${String(Reflect.get(t,"access"))}, uniformType=${String(Reflect.get(t,"uniformType"))}.`:"")+` Similar semantic inputs: tsl=[${v.join(", ")}], paths=[${ke.join(", ")}].`+(p(Reflect.get(t,"value"))&&Reflect.get(Reflect.get(t,"value"),"isTexture")===true?` Texture value: ${ft(Reflect.get(t,"value"))}.`:"")+(Z.length>0?` Same-texture paths: [${Z.join(", ")}].`:"")+` Classifier diagnostics: ${this.#o.join("; ")}. Registered containers: [${_t.join(", ")}].`+(Reflect.get(t,"isStorageBufferNode")===true?` Storage metadata: type=${String(Reflect.get(t,"bufferType"))}, count=${String(Reflect.get(t,"bufferCount"))}, value=${R(Reflect.get(t,"value"))}.`:"")+(R(t)==="MaterialReferenceNode"?` Material reference metadata: flag=${String(Reflect.get(t,"isMaterialReferenceNode"))}, property=${String(Reflect.get(t,"property"))}, uniformType=${String(Reflect.get(t,"uniformType"))}.`:"")+(R(t)==="EventNode"?` Event metadata: type=${String(Reflect.get(t,"eventType"))}, object=${R(E)}, objectName=${p(E)?String(E.name??""):""}, instanced=${p(E)&&E.isInstancedMesh===true}, skinned=${p(E)&&E.isSkinnedMesh===true}, morphs=${p(E)&&Array.isArray(E.morphTargetInfluences)?E.morphTargetInfluences.length:0}, callback=${Mt??"none"}.`:""))}};function Be(e){return Array.isArray(e)?e.map(N).filter(t=>t!==void 0):[]}l(Be,"nodeArray");function bn(e,t,n){let r=t.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),i=new RegExp(`struct\\s+${r}Struct\\s*\\{([\\s\\S]*?)\\};`,"u"),s=[e.vertexShader,e.fragmentShader,e.computeShader].filter(a=>typeof a=="string"),o;for(let a of s){let d=i.exec(a)?.[1];if(d!==void 0&&(o=[...d.matchAll(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*:/gmu)].map(u=>u[1]).filter(u=>u!==void 0),o.length>0))break}if(!o||o.length===0)return;let c=new Map(n.map(a=>[a.name,a.type]));if(!o.some(a=>!c.has(a)))return o.map(a=>({name:a,type:c.get(a)}))}l(bn,"wgslUniformLayout");var Rn=[{directive:/(?:^|\n)\s*enable\s+subgroups\s*;/u,feature:"subgroups"},{directive:/(?:^|\n)\s*enable\s+subgroups[-_]f16\s*;/u,feature:"subgroups-f16"},{directive:/(?:^|\n)\s*enable\s+f16\s*;/u,feature:"shader-f16"},{directive:/(?:^|\n)\s*enable\s+clip_distances\s*;/u,feature:"clip-distances"},{directive:/(?:^|\n)\s*enable\s+dual_source_blending\s*;/u,feature:"dual-source-blending"}];function kn(e){let t=[];for(let n of Rn)e.some(r=>r!==null&&n.directive.test(r))&&t.push(n.feature);return t}l(kn,"shaderRequirements");function Sn(e,t){let n=new Map,r=new Set,i=[];for(let s of e){let o=t(s.node,`uniform ${s.name??"<generated>"}`),c=JSON.stringify(o),a=n.get(c);a===void 0&&(a=new Map,n.set(c,a));let d=a.get(s.nid);d===void 0&&(d=a.size,a.set(s.nid,d));let u=`${c}\0${d}\0${s.stage}`;r.has(u)||(r.add(u),i.push({address:o,instance:d,type:s.type,stage:s.stage,name:s.name}));}return i}l(Sn,"reduceJournal");function wn(e,t){if(t==="NodeStorageBuffer"||t==="StorageBuffer"){let n=e.access;return typeof n=="string"?{access:n}:{}}if(t.includes("Sampled")){let n=e.store===true,r=e.access;return {store:n,...n&&typeof r=="string"?{access:r}:{}}}return {}}l(wn,"capturedBindingAccess");function Nn(e,t){let n=ze(e.builder,e.kind);if(!n)throw new Error(`Shader key "${e.key}" has no live build target.`);let r=new Ke({...e,target:n},t),i=Be(e.builder.updateNodes),s=Be(e.builder.updateBeforeNodes),o=Be(e.builder.updateAfterNodes);for(let f of [...i,...s,...o])r.noteUpdateNode(f);let c=Sn(e.journal,(f,m)=>r.classify(f,m)),a=typeof e.builder.getAttributesArray=="function"?Reflect.apply(e.builder.getAttributesArray,e.builder,[]):[],d=Array.isArray(a)?a.map((f,m)=>{if(!p(f)||typeof f.name!="string"||typeof f.type!="string")throw new Error(`Shader attribute ${m} is invalid.`);let y=N(f.node);return {name:f.name,type:f.type,node:y?r.classify(y,`attribute ${f.name}`):null}}):[],u=typeof e.builder.getBindings=="function"?Reflect.apply(e.builder.getBindings,e.builder,[]):[],b=Array.isArray(u)?u.map((f,m)=>{if(!p(f)||!Array.isArray(f.bindings))throw new Error(`Shader bind group ${m} is invalid.`);return {name:typeof f.name=="string"?f.name:`group-${m}`,bindings:f.bindings.map((y,k)=>{if(!p(y)||typeof y.name!="string")throw new Error(`Shader binding ${m}/${k} is invalid.`);let S=je(y),v;if(S==="NodeUniformsGroup"){if(!Array.isArray(y.uniforms))throw new Error(`Shader uniform group ${m}/${k} has no member list.`);let ke=y.uniforms.map((M,Z)=>{if(!p(M)||typeof M.name!="string"||typeof M.getType!="function")throw new Error(`Shader uniform ${m}/${k}/${Z} is invalid.`);let Q=Reflect.apply(M.getType,M,[]);if(typeof Q!="string")throw new Error(`Shader uniform ${m}/${k}/${Z} has no stable type.`);return {name:M.name,type:Q}});v=bn(e.builder,y.name,c)??ke;}return {name:y.name,kind:S,...wn(y,S),...v===void 0?{}:{uniforms:v}}})}}):[],j=p(e.builder.observer)?{hasNode:e.builder.observer.hasNode===true,hasAnimation:e.builder.observer.hasAnimation===true}:null,g=l(f=>typeof e.builder[f]=="string"?e.builder[f]:null,"shader");return {key:e.key,vertexShader:g("vertexShader"),fragmentShader:g("fragmentShader"),computeShader:g("computeShader"),declarations:c,attributes:d,bindGroups:b,updateNodes:i.filter(f=>!r.shouldOmitUpdateNode(f)).map(f=>r.classify(f,"updateNodes")),updateBeforeNodes:s.filter(f=>!r.shouldOmitUpdateNode(f)).map(f=>r.classify(f,"updateBeforeNodes")),updateAfterNodes:o.filter(f=>!r.shouldOmitUpdateNode(f)).map(f=>r.classify(f,"updateAfterNodes")),requirements:kn([g("vertexShader"),g("fragmentShader"),g("computeShader")]),observer:j,hardwareClipping:e.builder.hardwareClipping===true}}l(Nn,"entryFromSnapshot");function q(e){return (e??"").replace(/\b(nodeUniform|nodeVar|nodeVarying|nodeAttribute|NodeBuffer_|nodeCode)\d+\b/gu,"$1#").split(`
|
|
1
|
+
var An=Object.defineProperty;var p=(t,e)=>An(t,"name",{value:e,configurable:true});var De="three-webgpu-r185-v1",Ke=["fragmentNode","vertexNode","colorNode","positionNode","normalNode","opacityNode","alphaTestNode","backdropNode","backdropAlphaNode","emissiveNode","metalnessNode","roughnessNode","clearcoatNode","clearcoatRoughnessNode","transmissionNode","thicknessNode","iorNode","outputNode","mrtNode","depthNode","castShadowNode","receivedShadowNode","maskNode","envNode"];var J=["_renderContexts","_renderContexts"],j=Object.freeze({renderContextMrt:"three-r185-render-context-mrt",renderContextInput:"three-r185-render-context-input",skinningEvent:"three-r185-skinning-event",previousBoneMatrices:"three-r185-previous-bone-matrices",previousInstanceMatrices:"three-r185-previous-instance-matrices",previousInstanceMatricesEvent:"three-r185-previous-instance-matrices-event",dynamicLightData:"three-r185-dynamic-light-data",morphUpdateEvent:"three-r185-morph-update-event",maxMip:"three-r185-max-mip",morphTargetTexture:"three-r185-morph-target-texture",cubeMap:"three-r185-cube-map",passTexture:"three-r185-pass-texture",reflector:"three-r185-reflector",object3D:"three-r185-object3d",passSetupOutput:"three-r185-pass-setup-output",retainedLightUniform:"three-r185-retained-light-uniform",retainedReference:"three-r185-retained-reference",retainedShadowChild:"three-r185-retained-shadow-child",retainedShadowFar:"three-r185-retained-shadow-far",materialSteps:"three-r185-material-steps"});function Ge(t){let e=/^(.*)-([^-]+)-(-?\d+)$/u.exec(t);if(e?.[1]===void 0||e[2]===void 0||e[3]===void 0)return;let n=Number(e[3]);if(Number.isSafeInteger(n))return {attachmentState:e[1],mrtState:e[2],callDepth:n}}p(Ge,"parseThreeR185RenderContextKey");function Mt(t){return t==="185"||t===185}p(Mt,"supportsThreeR185Revision");function Tn(t){let e=t.constructor;return (typeof e=="function"||typeof e=="object"&&e!==null)&&typeof Reflect.get(e,"name")=="string"?String(Reflect.get(e,"name")):"unknown"}p(Tn,"constructorName");function ze(t){let e=t,n=p(o=>e[o]===true,"flag"),r=typeof e.textureNode=="object"&&e.textureNode!==null||typeof e.nodeUniform=="object"&&e.nodeUniform!==null;return n("isNodeUniformsGroup")?"NodeUniformsGroup":n("isUniformsGroup")?"UniformsGroup":n("isNodeUniformBuffer")?"NodeUniformBuffer":n("isUniformBuffer")?"UniformBuffer":n("isStorageBuffer")?r?"NodeStorageBuffer":"StorageBuffer":n("isSampledCubeTexture")?r?"NodeSampledCubeTexture":"SampledCubeTexture":n("isSampledTexture3D")?"NodeSampledTexture3D":n("isSampled3DTexture")?"Sampled3DTexture":n("isSampledArrayTexture")?r?"NodeSampledArrayTexture":"SampledArrayTexture":n("isSampledTexture")?r?"NodeSampledTexture":"SampledTexture":n("isSampler")?r?"NodeSampler":"Sampler":typeof e.kind=="string"?e.kind:Tn(t)}p(ze,"capturedBindingKind");var Lt="three-webgpu-r186dev-v1";function Ot(t){return t==="186dev"}p(Ot,"supportsThreeR186DevRevision");var It="three-blocks.shader-capture.runtime.v1";var xn=Symbol.for("three-blocks.shader-capture.cache.v1"),Cn=Symbol.for("three-blocks.shader-capture.cache-value.v1"),_n=Symbol.for("three-blocks.shader-input-registry.v1"),nt="/__three-blocks/shaders/capture",pe="/__three-blocks/shaders/telemetry",Me=4096,Bn=5,En=65536,Ut=256*1024,Mn=1e3,Ln=/^[a-z0-9][a-z0-9_-]{0,63}$/u,je=De,On=new Set(["cameraProjectionMatrix","cameraProjectionMatrixInverse","cameraViewMatrix","cameraWorldMatrix","cameraNormalMatrix","cameraPosition"]),We=["lightPosition","lightTargetPosition","lightViewPosition","lightShadowMatrix"],In=new Set(["_texture","_width","_height","_maxMip","_matrixUniform","_flipYUniform"]),Un={bias:"shadowBias",intensity:"shadowIntensity",normalBias:"shadowNormalBias",radius:"shadowRadius",blurSamples:"shadowBlurSamples",mapSize:"shadowMapSize"},M={buildCalls:0,renderBuilds:0,computeBuilds:0,registeredBuilds:0,registeredRenderBuilds:0,registeredComputeBuilds:0,buildMs:0,injected:0,injectedRender:0,injectedCompute:0,missed:0,missedRender:0,missedCompute:0,missedKeys:[]},_={capture:false,forceLive:false,settleFrames:60,readiness:{},transform:1},nn=new WeakMap,Pt=new WeakSet,$t=new WeakSet,rt=new WeakMap,ot=new Set,rn=new WeakMap,ve=[],xe=[],Ft=new WeakMap,Dt=new WeakMap,Kt=new WeakMap,Q,we=0,He=false,ye=false,ee="default",re,oe,ne=false,it=0,Ne,Gt=false,I,K,Ce={},fe,le=false;function _e(t){return /^.+\/input-[a-zA-Z0-9_-]+-\d{4}$/u.test(t)}p(_e,"isAutomaticInputContainerKey");function l(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}p(l,"isRecord");function on(){let t=Reflect.get(globalThis,_n);return l(t)&&t.version===1?t:void 0}p(on,"retainedInputRegistry");function F(t){let e=on(),n=e?.keyFor;if(typeof n!="function")return;let r=Reflect.apply(n,e,[t]);return typeof r=="string"&&r.startsWith("@three-blocks-input:")?r:void 0}p(F,"retainedInputKey");function zt(t){if(t===null||typeof t!="object")return;let e=on(),n=e?.locationForValue;if(typeof n=="function"){let i=Reflect.apply(n,e,[t]);if(l(i)&&typeof i.key=="string"&&i.key.startsWith("@three-blocks-input:")&&Array.isArray(i.path)&&i.path.every(s=>s==="value"||s==="array"))return {container:i.key,path:i.path}}let r=e?.keyForValue;if(typeof r!="function")return;let o=Reflect.apply(r,e,[t]);return typeof o=="string"&&o.startsWith("@three-blocks-input:")?{container:o,path:["value"]}:void 0}p(zt,"retainedInputValueLocation");function st(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return;if(e.add(t),Array.isArray(t)){for(let r of t){let o=st(r,e);if(o)return o}return}let n=t;for(let r of ["key","container"]){let o=n[r];if(typeof o=="string"&&_e(o))return o}for(let r of Object.values(n)){let o=st(r,e);if(o)return o}}p(st,"automaticInputContainerReference");function at(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return;if(e.add(t),Array.isArray(t)){for(let i of t){let s=at(i,e);if(s)return s}return}let n=t,r=n.container,o=n.path;if(typeof r=="string"&&Array.isArray(o)){let i=o.filter(s=>typeof s=="string");if(r==="@renderer"&&i.includes(J[0])||r==="@object"&&i.includes("_renderer"))return `${r}.${i.join(".")}`}for(let i of Object.values(n)){let s=at(i,e);if(s)return s}}p(at,"transientRendererReference");function Be(t){return l(t)&&t.isNode===true}p(Be,"isNode");function w(t){if(l(t)&&typeof t.getSelf=="function"){let e=t.getSelf();return Be(e)?e:void 0}return Be(t)?t:void 0}p(w,"nodeFrom");function he(t){let e=new Map;if(t.isNode!==true)return e;e.set(t,[]);let n=[t];for(let r=0;r<n.length;r++){let o=n[r];if(!o||typeof o.getSerializeChildren!="function")continue;let i=e.get(o)??[],s=0;for(let d of o.getSerializeChildren()){let a=w(d.childNode);if(a&&!e.has(a)&&(e.set(a,[...i,s]),n.push(a)),s++,s>Me)throw new Error("Shader node graph exceeds the capture child limit.")}}return e}p(he,"indexNodeGraph");function dt(t){if(t.k==="owned"){let e=dt(t.owner);return e===t.owner?t:{...t,owner:e}}if(t.k==="container"&&t.key==="@renderer"&&t.path.length>=4&&t.path[0]===J[0]&&t.path[1]===J[1]&&t.path.at(-1)==="mrt"){let e=t.path[2],n=typeof e=="string"?Ge(e):void 0;if(n!==void 0){let r=sn(n.attachmentState);return {k:"recipe",id:j.renderContextMrt,version:1,input:{attachmentState:n.attachmentState,callDepth:n.callDepth,...r===void 0?{}:{samples:r}}}}}return t}p(dt,"stableRenderContextAddress");function Pn(t){for(;t.k==="owned";)t=t.owner;return t.k==="container"&&t.key.startsWith("@three-blocks-input:")&&!t.key.startsWith("@three-blocks-input:setup-")}p(Pn,"addressUsesGenericRetainedInputRoot");function sn(t){let e=t.split(":");if(e.length!==6)return;let n=Number(e[3]);return Number.isSafeInteger(n)&&n>=0?n:void 0}p(sn,"renderAttachmentSamples");function $n(t,e){let n=l(t)?t:{},r={isDepthTexture:n.isDepthTexture===true,isRenderTargetTexture:n.isRenderTargetTexture===true,isDataTexture:n.isDataTexture===true,isData3DTexture:n.isData3DTexture===true,isCubeTexture:n.isCubeTexture===true,format:typeof n.format=="number"?n.format:null,type:typeof n.type=="number"?n.type:null,compareFunction:typeof n.compareFunction=="number"?n.compareFunction:null};typeof n.name=="string"&&n.name.length>0&&(r.name=n.name),typeof n.colorSpace=="string"&&n.colorSpace.length>0&&(r.colorSpace=n.colorSpace);let o=sn(e);return o!==void 0&&(r.samples=o),r}p($n,"textureResourceSignature");function Fn(t,e){if(t.k!=="inputNode"||t.value.container!=="@renderer")return t;let n=t.value.path;if(n.length<4||n[0]!==J[0]||n[1]!==J[1]||typeof n[2]!="string")return t;let r=Ge(n[2]);if(r===void 0)return t;let o=n[3]==="depthTexture"&&n.length===4?"depthTexture":n[3]==="textures"&&n.length===5&&Number.isSafeInteger(n[4])?"texture":void 0;if(o===void 0)return t;let{k:i,value:s,...d}=t;return {k:"recipe",id:j.renderContextInput,version:1,input:{attachmentState:r.attachmentState,callDepth:r.callDepth,mrt:r.mrtState!=="default",resource:o,...o==="texture"?{index:Number(n[4])}:{},texture:$n(e,r.attachmentState),node:d}}}p(Fn,"stableRenderContextInputAddress");function m(t){if(!l(t))return typeof t;let e=t.constructor;return (typeof e=="function"||l(e))&&typeof e.name=="string"?e.name:"unknown"}p(m,"constructorName");function Wt(t){if(!l(t))return m(t);let e=l(t.image)?t.image:void 0;return [m(t),typeof t.uuid=="string"?`uuid=${t.uuid}`:"",typeof t.name=="string"&&t.name?`name=${t.name}`:"",t.isRenderTargetTexture===true?"renderTarget":"",t.isPMREMTexture===true?"pmrem":"",e&&typeof e.width=="number"&&typeof e.height=="number"?`${e.width}x${e.height}`:"",typeof t.format=="number"?`format=${t.format}`:"",typeof t.type=="number"?`type=${t.type}`:""].filter(Boolean).join("/")}p(Wt,"textureLabel");function Se(t,e){return typeof t=="string"&&t.length>0?t.slice(0,512):e}p(Se,"boundedLabel");function Dn(){return typeof performance=="object"&&typeof performance.now=="function"?performance.now():Date.now()}p(Dn,"now");function an(t){return l(t)&&typeof t.then=="function"}p(an,"promiseLike");function Kn(t){_={capture:t.capture===true,forceLive:t.forceLive===true,settleFrames:Number.isSafeInteger(t.settleFrames)&&t.settleFrames>=0?t.settleFrames:60,settleTimeoutMs:Number.isSafeInteger(t.settleTimeoutMs)&&Number(t.settleTimeoutMs)>=1e3?Number(t.settleTimeoutMs):3e4,visibilityGuard:t.visibilityGuard===true,...typeof t.captureId=="string"?{captureId:t.captureId}:{},...typeof t.sessionKey=="string"?{sessionKey:t.sessionKey}:{},...typeof t.token=="string"?{token:t.token}:{},readiness:{...typeof t.readiness?.selector=="string"?{selector:t.readiness.selector}:{},...typeof t.readiness?.global=="string"?{global:t.readiness.global}:{}},transform:t.transform},fe=void 0,le=false,re=void 0,oe=void 0,ne=false,it=0,Ne=void 0,K=void 0,Reflect.set(globalThis,xn,n=>{l(n)&&Ht(n);});let e=Reflect.get(globalThis,Cn);l(e)&&Ht(e),(_.capture||dn())&&zn();}p(Kn,"configureThreeBlocksShaderCapture");function dn(){let t=Reflect.get(globalThis,"location"),e=l(t)?Reflect.get(t,"search"):void 0;if(typeof e!="string")return false;let n=new URLSearchParams(e),r=n.get("threeBlocksShaderMode");return n.get("capture")==="1"||r==="live"||r==="precompiled"}p(dn,"drivenShaderSession");function ht(){return _.capture||_.forceLive||dn()}p(ht,"shaderSessionActive");function Ht(t){if(I=t,!_.capture)return;let e=cn(),n=t.automaticRegistrationPrefix,r=typeof n=="function"?Reflect.apply(n,t,[e]):void 0;typeof r=="string"&&(K=r);}p(Ht,"adoptCaptureCache");function Gn(t){if(!_.capture||I===void 0)return;let e=I.automaticRegistrationPrefix,n=typeof e=="function"?Reflect.apply(e,I,[t]):void 0;if(typeof n=="string"){K=n;return}let r=I.enableAutomaticRegistration;if(typeof r=="function"){K="auto";try{Reflect.apply(r,I,[{scene:t,prefix:K}]);}catch(o){throw K=void 0,o}}}p(Gn,"ensureCaptureAutomaticRegistration");function zn(){if(Gt)return;let t=globalThis,e=t.requestAnimationFrame;if(typeof e!="function")return;Gt=true;let n=0,r=0,o=false,i=new Map,s=p(()=>{o||i.size===0||(o=true,Reflect.apply(e,t,[()=>{o=false;let d=[...i.values()];i.clear();let a=n++*(1e3/60);for(let u of d)try{u(a);}catch(f){queueMicrotask(()=>{throw f});}s();}]));},"schedule");Reflect.set(t,"requestAnimationFrame",d=>{let a=++r;return i.set(a,d),s(),a}),Reflect.set(t,"cancelAnimationFrame",d=>{i.delete(d);});}p(zn,"installDeterministicRaf");function H(t,e){if(!I)return;let n=I[t];return typeof n=="function"?Reflect.apply(n,I,e):void 0}p(H,"cacheCall");function cn(){if(I&&typeof I.activeScene=="string"&&I.activeScene!=="default")return I.activeScene;let t=Reflect.get(globalThis,"location"),e=l(t)?Reflect.get(t,"search"):void 0,n=typeof e=="string"?new URLSearchParams(e).get("captureId"):null;return n!==null&&Ln.test(n)?n:I&&typeof I.activeScene=="string"?I.activeScene:"default"}p(cn,"activeShaderCaptureScene");function ie(){return cn()}p(ie,"activeScene");function me(t,e,n,r){let o=H(t==="compute"?"registrationForCompute":"registrationForRender",t==="compute"?[e,n]:[e,n,r]);return (!l(o)||typeof o.key!="string")&&(Gn(n),o=H(t==="compute"?"registrationForCompute":"registrationForRender",t==="compute"?[e,n]:[e,n,r])),l(o)&&typeof o.key=="string"?o:void 0}p(me,"sceneRegistration");function Wn(t){return t.key}p(Wn,"capturedRegistrationKey");function gt(t,e){let n=e==="compute"?t.object:t.material;return n!==null&&typeof n=="object"?n:void 0}p(gt,"builderTarget");function un(t){return t.material===null||t.material===void 0?"compute":"render"}p(un,"buildKind");function qe(t){if(!l(t))return;let e={};for(let n of ["uuid","id","name","type"]){let r=t[n];typeof r=="string"?e[n]=Se(r,""):(typeof r=="number"&&Number.isFinite(r)||typeof r=="boolean")&&(e[n]=r);}return Object.keys(e).length===0?void 0:e}p(qe,"objectIdentity");function Hn(t,e,n,r){if(xe.length>=Me)return;let o=t==="compute"?e.object:e.material,i=Se(l(o)?o.name??o.type:void 0,"unknown"),s=H("registrations",[n]),d=qe(o),a=l(r)?qe(r.material):void 0;xe.push({kind:t,name:i,reason:t==="compute"?`unregistered compute "${i}"`:`unregistered material "${i}"`,...d===void 0?{}:{target:d},...a===void 0?{}:{renderObjectMaterial:a},...Array.isArray(s)?{registrations:s.slice(0,16).flatMap(u=>{if(!l(u))return [];let f=qe(u.target);return [{...typeof u.key=="string"?{key:Se(u.key,"")}:{},...typeof u.kind=="string"?{kind:Se(u.kind,"")}:{},...f??{},sameTarget:u.target===o,...l(r)?{sameRenderObjectMaterial:u.target===r.material}:{}}]})}:{}});}p(Hn,"addSkipped");function qt(t,e,n=i=>{M.buildMs+=i;},r=Dn,o){let i=t[e];typeof i=="function"&&Reflect.set(t,e,p(function(...d){let a=r(),u;try{u=Reflect.apply(i,this,d);}catch(f){throw n(r()-a),f}return an(u)?Promise.resolve(u).then(f=>(n(r()-a),o?.(),f),f=>{throw n(r()-a),f}):(n(r()-a),o?.(),u)},"timedBuild"));}p(qt,"wrapThreeBlocksCaptureTimedBuild");function fn(t,e,n){if(!ht()||!l(t)||!l(e)||Pt.has(t))return;Pt.add(t);let r=ie(),o=H("containers",[r]);rt.set(t,new Set(Array.isArray(o)?o.filter(g=>l(g)&&typeof g.key=="string").map(g=>String(g.key)):[]));let i=l(n)&&l(n.material)?n:void 0,s=i?"render":un(t),d=s==="render"&&i?Ee("render",i):gt(t,s);d&&(i&&rn.set(t,i),me(s,d,ie(),i));let a=[];nn.set(t,a);let u=t.getUniformFromNode;typeof u=="function"&&Reflect.set(t,"getUniformFromNode",p(function(k,N,S,c){let y=Reflect.apply(u,this,[k,N,S,c]),R=w(k),b=typeof S=="string"?S:this.shaderStage;if(R&&typeof N=="string"&&(b==="vertex"||b==="fragment"||b==="compute")){let A=l(y)&&typeof y.name=="string"?y.name:typeof c=="string"?c:null;a.push({node:R,type:N,stage:b,name:A,...typeof R.id=="number"?{nid:R.id}:{}});}return y},"captureUniform"));let f=p(()=>{$t.has(t)||($t.add(t),ln(t,e));},"recordBuild");qt(t,"build",void 0,void 0,f),qt(t,"buildAsync",void 0,void 0,f);}p(fn,"instrumentThreeBlocksShaderBuilder");function ce(t){return Object.assign(Object.create(Object.getPrototypeOf(t)),t)}p(ce,"cloneCaptureRecord");function qn(t){let e=Object.create(t);for(let s of ["object","material","scene","camera","lightsNode","context","vertexShader","fragmentShader","computeShader","observer","hardwareClipping","updateNodes","updateBeforeNodes","updateAfterNodes"]){let d=t[s];Reflect.set(e,s,s==="material"&&l(d)?ce(d):Array.isArray(d)?[...d]:d);}let n=typeof t.getAttributesArray=="function"?Reflect.apply(t.getAttributesArray,t,[]):[],r=Array.isArray(n)?n.map(s=>l(s)?ce(s):s):[];Reflect.set(e,"getAttributesArray",()=>r);let o=typeof t.getBindings=="function"?Reflect.apply(t.getBindings,t,[]):[],i=Array.isArray(o)?o.map(s=>{if(!l(s))return s;let d=ce(s),a=Array.isArray(s.bindings)?s.bindings.map(u=>{if(!l(u))return u;let f=ce(u);return Array.isArray(u.uniforms)&&Reflect.set(f,"uniforms",u.uniforms.map(g=>l(g)?ce(g):g)),f}):[];return Reflect.set(d,"bindings",a),d}):[];return Reflect.set(e,"getBindings",()=>i),e}p(qn,"snapshotBuilderState");function ln(t,e){if(!ht()||_.capture&&ye||!l(t)||!l(e))return;M.buildCalls++,oe=Date.now(),ne=false;let n=un(t);n==="compute"?M.computeBuilds++:M.renderBuilds++;let r=ie();ee=r;let o=rt.get(t)??new Set,i=H("containers",[r]);if(Array.isArray(i))for(let u of i)l(u)&&typeof u.key=="string"&&_e(u.key)&&!o.has(u.key)&&ot.add(u.key);rt.delete(t);let s=gt(t,n),d=n==="render"?rn.get(t)??(l(t.object)?t.object:void 0):void 0,a=s?me(n,s,r,d):void 0;if(a){M.registeredBuilds++,n==="compute"?M.registeredComputeBuilds++:M.registeredRenderBuilds++;let u=Wn(a);if(ve.length<Me){let f=qn(t),g={scene:r,key:u,kind:n,builder:f,renderer:e,...d?{renderObject:d}:{},journal:[...nn.get(t)??[]]};ve.push(g);}}else Hn(n,t,r,d);hn();}p(ln,"recordThreeBlocksShaderBuild");function Ee(t,e){return t==="compute"?e!==null&&typeof e=="object"?e:void 0:l(e)&&e.material!==null&&typeof e.material=="object"?e.material:void 0}p(Ee,"targetForProvider");function Jt(t,e,n){if(_.capture&&ye)return;let r=ie();ee=r;let o=Ee(t,e),i=t==="render"&&l(e)?e:void 0,s=o?me(t,o,r,i):void 0;n!=null?(M.injected++,t==="compute"?M.injectedCompute++:M.injectedRender++):s&&(M.missed++,t==="compute"?M.missedCompute++:M.missedRender++,M.missedKeys.length<Me&&!M.missedKeys.includes(s.key)&&M.missedKeys.push(s.key)),_.capture||hn();}p(Jt,"recordProviderResult");function Jn(t){let e=t.debug;if(!l(e))return;let n=e.onNodeBuilderCreated,r=Kt.get(t);if(n===r)return;let o=typeof n=="function"?n:void 0,i=p(function(d,a){o!==void 0&&Reflect.apply(o,this,[d,a]),fn(d,t,a);},"captureNodeBuilder");Kt.set(t,i),e.onNodeBuilderCreated=i;}p(Jn,"installCaptureBuilderCallback");function Yn(t,e,n){if(!l(t))return;if(n!==void 0)if(Mt(n))je=De;else if(Ot(n))je=Lt;else throw new Error(`@three-blocks/devtools supports Three.js revisions 185 and 186dev capture; received ${JSON.stringify(n)}.`);let r=Reflect.get(t,"backend");if(l(r)&&r.isWebGLBackend===true||!ht())return;if(l(e)&&e!==Ce&&(Ce=e,Ae=void 0),Jn(t),_.forceLive){let u=Dt.get(t);u||(u={__threeBlocksCaptureForceLive:true,getForRender(f){let g=Ee("render",f);g&&me("render",g,ie(),l(f)?f:void 0);},getForCompute(f){let g=Ee("compute",f);g&&me("compute",g,ie());}},Dt.set(t,u)),t.nodeBuilderStateProvider=u;return}let o=t.nodeBuilderStateProvider;if(!l(o))return;let i=Ft.get(o);if(i){t.nodeBuilderStateProvider=i;return}if(o.__threeBlocksCaptureWrapper===true)return;let s=o.getForRender,d=o.getForCompute;if(typeof s!="function"||typeof d!="function")return;let a={__threeBlocksCaptureWrapper:true,getForRender(u,f,g){let k=Reflect.apply(s,o,[u,f,g]);return Jt("render",u,k),k},getForCompute(u,f,g){let k=Reflect.apply(d,o,[u,f,g]);return Jt("compute",u,k),k}};Ft.set(o,a),t.nodeBuilderStateProvider=a;}p(Yn,"prepareThreeBlocksShaderRenderer");var Xn=Object.freeze({configureThreeBlocksShaderCapture:Kn,instrumentThreeBlocksShaderBuilder:fn,prepareThreeBlocksShaderRenderer:Yn,recordThreeBlocksShaderBuild:ln});Reflect.set(globalThis,Symbol.for(It),Xn);function Vn(t){return w(t)}p(Vn,"unwrapTsl");var Ae;function z(){if(Ae)return Ae;let t=new Map;for(let[e,n]of Object.entries(Ce)){let r=Vn(n);r&&!t.has(r)&&t.set(r,e);}return Ae=t,t}p(z,"tslMap");function Zn(t,e){if(!(!e||!l(t._nodes)||typeof t._nodes.getEnvironmentNode!="function"))return w(Reflect.apply(t._nodes.getEnvironmentNode,t._nodes,[e]))}p(Zn,"sceneEnvironmentNode");function Qn(t,e){if(!(!e||!l(t._nodes)||typeof t._nodes.getBackgroundNode!="function"))return w(Reflect.apply(t._nodes.getBackgroundNode,t._nodes,[e]))}p(Qn,"sceneBackgroundNode");var Yt=new WeakMap;function er(t,e,n){let r=Reflect.get(t,"getLightNodes");if(typeof r!="function")return [];let o=Reflect.get(e,"getDataFromNode");if(typeof o=="function")for(let d of ["fragment","vertex","compute","any"]){let a=Reflect.apply(o,e,[t,d]),u=l(a)?a.lightNodes:void 0;if(Array.isArray(u))return u.map(w).filter(f=>f!==void 0)}let s=Reflect.apply(r,t,[{renderer:n,context:{materialLightings:[]},getDataFromNode(d){let a=Yt.get(d);return a||(a={},Yt.set(d,a)),a}}]);return Array.isArray(s)?s.map(w).filter(d=>d!==void 0):[]}p(er,"lightNodes");function Je(t,e){let n=Reflect.get(Ce,t);return typeof n=="function"?w(Reflect.apply(n,void 0,[e])):void 0}p(Je,"lightUniform");function Ye(t){if(!t)return [];let e=[],n=Reflect.get(t,"traverse");return typeof n=="function"&&Reflect.apply(n,t,[r=>{r!==null&&typeof r=="object"&&Reflect.get(r,"isLight")===true&&e.push(r);}]),e}p(Ye,"sceneLights");function ue(t){if(!t)return [];let e=[],n=Reflect.get(t,"traverse");return typeof n=="function"&&Reflect.apply(n,t,[r=>{r!==null&&typeof r=="object"&&e.push(r);}]),e}p(ue,"sceneObjects");function tr(t){let e=[],n=new Set,r=p((o,i)=>{if(n.has(o))return;n.add(o),e.push([o,i]);let s=Reflect.get(o,"children");if(Array.isArray(s))for(let[d,a]of s.entries())l(a)&&a.isObject3D===true&&r(a,[...i,"children",d]);},"visit");return r(t,[]),e}p(tr,"object3DPaths");function nr(t){return !(Reflect.get(t,"isNode")===true||Reflect.get(t,"isObject3D")===true||Reflect.get(t,"isTexture")===true||Reflect.get(t,"isMaterial")===true||ArrayBuffer.isView(t)||t instanceof ArrayBuffer||t instanceof Set||t instanceof Promise)}p(nr,"isScannable");function ct(t,e,n,r=()=>false,o=false){let i=new Set,s=[{value:t,path:[],depth:0}];for(let d=0;d<s.length;d++){let a=s[d];if(!a||i.has(a.value)||a.depth>Bn)continue;let{value:u,path:f,depth:g}=a;i.add(u);let k=Array.isArray(u)?Array.from(u,(N,S)=>[S,N]):u instanceof Map?[...u.entries()].filter(N=>typeof N[0]=="string"||typeof N[0]=="number").map(([N,S])=>[`map:${String(N)}`,S]):Object.keys(u).map(N=>[N,Reflect.get(u,N)]);for(let[N,S]of k){if(S===null||typeof S!="object")continue;let c=[...f,N];if(!r(c))if(Be(S)){let y=w(S);y&&e(y,c),o&&s.push({value:y??S,path:c,depth:g+1});}else n(S,c),nr(S)&&s.push({value:S,path:c,depth:g+1});}}}p(ct,"scanContainer");function pn(t){if(new Uint8Array(new Uint16Array([258]).buffer)[0]!==2)throw new Error("Shader capture requires a little-endian host.");let e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),n=e.toBase64;if(typeof n=="function")return n.call(e);let r="",o=32768;for(let i=0;i<e.length;i+=o)r+=String.fromCharCode(...e.subarray(i,i+o));return btoa(r)}p(pn,"bytesToBase64");function rr(t){if(!ArrayBuffer.isView(t)||m(t)!=="Float32Array")throw new Error(`RangeNode setup produced an unsupported ${m(t)} buffer.`);if(t.byteLength>Ut)throw new Error(`RangeNode setup buffer is ${t.byteLength} bytes; embedded shader inputs are limited to ${Ut} bytes.`);return {t:"f32",data:pn(t)}}p(rr,"serializeRangeBuffer");function Xt(t){if(typeof t=="number"&&Number.isFinite(t)||typeof t=="boolean")return t;if(l(t)){for(let[e,n]of [["isVector2","v2"],["isVector3","v3"],["isVector4","v4"],["isColor","c"],["isMatrix3","m3"],["isMatrix4","m4"]])if(t[e]===true&&typeof t.toArray=="function"){let r=Reflect.apply(t.toArray,t,[]);if(Array.isArray(r)&&r.every(o=>typeof o=="number"&&Number.isFinite(o)))return {t:n,a:r}}}}p(Xt,"serializeValueItem");function Vt(t){if(Array.isArray(t)){let r=t.map(Xt);return r.every(o=>o!==void 0)?{t:"arr",items:r}:void 0}let e=Xt(t);if(e!==void 0)return e;if(l(t)&&t.isTexture===true&&t.image==null&&t.isRenderTargetTexture!==true&&t.version===0&&(t.name===""||t.name===void 0))return {t:"tex"};if(!l(t)||t.isDataTexture!==true||!l(t.image))return;let n=t.image.data;if(!(!ArrayBuffer.isView(n)||typeof Reflect.get(n,"length")!="number"||Number(Reflect.get(n,"length"))>En))return {t:"dtex",arrayType:m(n),data:pn(n),width:typeof t.image.width=="number"?t.image.width:0,height:typeof t.image.height=="number"?t.image.height:0,format:typeof t.format=="number"?t.format:0,type:typeof t.type=="number"?t.type:0,minFilter:typeof t.minFilter=="number"?t.minFilter:0,magFilter:typeof t.magFilter=="number"?t.magFilter:0,wrapS:typeof t.wrapS=="number"?t.wrapS:0,wrapT:typeof t.wrapT=="number"?t.wrapT:0,name:typeof t.name=="string"?t.name:""}}p(Vt,"serializeStaticValue");function Xe(t){if(!(Object.hasOwn(t,"update")||Object.hasOwn(t,"updateBefore")||Object.hasOwn(t,"updateAfter"))){if(Reflect.get(t,"isStorageTextureNode")===true)return "storageTexture";if(Reflect.get(t,"isStorageBufferNode")===true)return "storage";switch(m(t)){case "BufferNode":return "buffer";case "BufferAttributeNode":return "bufferAttribute";case "Texture3DNode":return "texture3D";case "CubeTextureNode":return "cubeTexture";case "TextureNode":return "texture";case "UniformArrayNode":return "uniformArray";case "UniformNode":return "uniform";case "PMREMNode":return "pmremTexture";default:return}}}p(Xe,"inputClass");function Zt(t,e){let n=m(t);return n!==m(e)||["TextureNode","Texture3DNode","CubeTextureNode"].includes(n)||!!w(Reflect.get(t,"compareNode"))!=!!w(Reflect.get(e,"compareNode"))||Reflect.get(t,"access")!==Reflect.get(e,"access")?false:m(t)==="BufferAttributeNode"?["bufferType","bufferStride","bufferOffset","usage","instanced"].every(r=>Reflect.get(t,r)===Reflect.get(e,r)):true}p(Zt,"hasEquivalentSharedInputShape");function or(t){if(t.k==="inputNode")return t.value;if(t.k==="container")return {container:t.key,path:[...t.path,"value"]};if(t.k==="anchor"&&t.path.length===0)return {container:"@material",path:[t.slot,"value"]}}p(or,"sharedTextureValueLocation");function Qt(t){if(t?.k==="container")return {container:t.key,path:t.path};if(t?.k==="anchor"&&t.path.length===0)return {container:"@material",path:[t.slot]}}p(Qt,"sharedTextureNodeLocation");function en(t,e){if(t.isDataArrayTexture!==true||t.format!==1023||t.type!==1015||!l(t.image)||t.image.data===null||typeof t.image.data!="object"||m(t.image.data)!=="Float32Array")return false;let n=e.morphAttributes,r=e.attributes;if(!l(n)||!l(r)||!l(r.position))return false;let o=Array.isArray(n.position)?n.position:[],i=Array.isArray(n.normal)?n.normal:[],s=Array.isArray(n.color)?n.color:[],d=o.length>0?o:i.length>0?i:s;if(d.length===0)return false;let a=r.position.count;if(!Number.isSafeInteger(a)||Number(a)<0)return false;let u=s.length>0?3:i.length>0?2:1,f=Number(a)*u,g=1;return f>4096&&(g=Math.ceil(f/4096),f=4096),t.image.width===f&&t.image.height===g&&t.image.depth===d.length&&Reflect.get(t.image.data,"length")===f*g*4*d.length}p(en,"isThreeR185MorphTargetTexture");function ir(t){let e=H("registrations",[t]),n=new Map;if(Array.isArray(e))for(let a of e){if(!l(a))continue;let u=[],f=w(a.owner);f&&u.push(f);let g=a.target;if(a.kind==="compute"){let k=w(g);k&&u.push(k);}else if(g!==null&&typeof g=="object")for(let k of Ke){let N=w(Reflect.get(g,k));N&&u.push(N);}for(let k of u)for(let N of he(k).keys()){let S=F(N);S!==void 0&&!n.has(S)&&n.set(S,N);}}let r=[...n].map(([a,u])=>({key:a,node:u})),o=new Map,i=new Map,s=p((a,u)=>{let f=i.get(a);(f===void 0||u.path.length<f.path.length)&&i.set(a,u);},"rememberNearestValue");for(let a of r)o.set(a.node,{k:"container",key:a.key,path:[]});let d=p((a,u)=>{let f=o.get(a)??u;o.has(a)||o.set(a,f);for(let[g,k]of he(a))g===a||o.has(g)||o.set(g,{k:"owned",owner:f,path:k});},"indexGraph");for(let a of r){let u={k:"container",key:a.key,path:[]};s(a.node,{container:a.key,path:[]}),d(a.node,u),ct(a.node,(f,g)=>d(f,{k:"container",key:a.key,path:g}),(f,g)=>s(f,{container:a.key,path:g}),Y,true);}return {roots:r,nodes:o,values:i}}p(ir,"buildRetainedGraphIndex");function ut(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return false;if(e.add(t),Array.isArray(t))return t.some(r=>ut(r,e));let n=t;return n.k==="recipe"?true:Object.values(n).some(r=>ut(r,e))}p(ut,"addressUsesRecipe");function ft(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return false;if(e.add(t),Array.isArray(t))return t.some(r=>ft(r,e));let n=t;return n.k==="recipe"&&typeof n.id=="string"?[j.skinningEvent,j.previousBoneMatrices,j.previousInstanceMatrices,j.previousInstanceMatricesEvent,j.dynamicLightData,j.morphTargetTexture,j.morphUpdateEvent,j.cubeMap,j.passTexture,j.reflector,j.object3D,j.passSetupOutput,j.retainedReference,j.retainedShadowChild,j.retainedShadowFar,j.materialSteps].includes(n.id):Object.values(n).some(r=>ft(r,e))}p(ft,"addressUsesContextScopedRecipe");var lt=class{static{p(this,"RecipeCollisionIndex");}#t=new Map;#i=new WeakMap;#e=0;viewportInput(e){let n=this.#i.get(e);return n===void 0&&(n=this.#e++,this.#i.set(e,n)),n}register(e,n,r,o){if(!ut(e)||ft(e))return;let i=JSON.stringify(e),s=this.#t.get(i);if(s!==void 0&&s.source!==n)throw new Error(`Shader recipe collision between "${s.shaderKey}" (${s.usage}) and "${r}" (${o}) for ${i}. Register the live resources in distinct stable application containers or make their structural recipe signatures unique.`);s===void 0&&this.#t.set(i,{source:n,shaderKey:r,usage:o});}};function Y(t){return t.includes("_inspector")||t.includes("_renderer")||t.includes("_lastRenderer")||t.includes("_lastCullingRenderer")||t.includes("renderer")||t.some(e=>typeof e=="string"&&e.startsWith("_cached"))}p(Y,"applicationContainerPathIsTransient");function sr(t){return t.some(e=>typeof e=="string"&&e.startsWith("_"))||t[0]==="contextNode"&&t[1]==="value"&&typeof t[2]=="string"&&t[2].startsWith("renderPipeline")}p(sr,"materialPathIsTransient");var pt=class{static{p(this,"CaptureClassifier");}#t;#i;#e=new Map;#c=new Map;#r=new Map;#u=new Map;#s=[];#f=new Set;#l=[];#a=[];constructor(e,n){this.#t=e,this.#i=n;let r=e.kind==="compute"?Be(e.target)?[{slot:"compute",node:e.target}]:[]:Ke.flatMap(c=>{let y=w(Reflect.get(e.target,c));return y?[{slot:c,node:y}]:[]});for(let c of r)this.#o(c.node,{k:"anchor",key:e.key,slot:c.slot,path:[]});let o=w(e.builder.lightsNode);this.#a.length=0;let i=this.#a;if(o){let c=er(o,e.builder,e.renderer);this.#l.push(...c),this.#s.push(`lights=${c.length}`);for(let y of c){let R=Reflect.get(y,"light");if(R===null||typeof R!="object")continue;let b=i.length;i.push(R);let A={k:"lightNode",light:b};if(this.#o(y,A),Reflect.get(y,"isAnalyticLightNode")===true){let v=w(Reflect.get(y,"baseColorNode")),B=v??w(Reflect.get(y,"colorNode"));B&&this.#e.set(B,{k:"owned",owner:A,path:[v!==void 0||R!==null&&typeof R=="object"&&Reflect.get(R,"castShadow")===true?"baseColorNode":"colorNode"]});}for(let v of We){let B=Je(v,R);this.#s.push(`${b}/${v}=${B?`${m(B)}:${m(Reflect.get(B,"value"))}:${String(Reflect.get(B,"updateType"))}`:"missing"}`),B&&this.#o(B,{k:"lightUniform",fn:v,light:b});}}}else this.#s.push("lights=missing");let s=e.builder.scene!==null&&typeof e.builder.scene=="object"?e.builder.scene:null;for(let[c,y]of Ye(s).entries()){if(i.includes(y))continue;let R=i.length+c;for(let b of We){let A=Je(b,y);A&&this.#o(A,{k:"lightUniform",fn:b,light:R,sceneLight:c});}}let d=Zn(e.renderer,s);d&&this.#o(d,{k:"sceneEnv"});let a=p((c,y,R,b=false)=>{this.#r.has(y)||this.#r.set(y,{container:c,path:[]}),ct(y,(A,v)=>this.#o(A,{k:"container",key:c,path:v}),(A,v)=>{this.#r.has(A)||this.#r.set(A,{container:c,path:v});},R,b);},"scan");if(e.kind==="render")for(let c of Object.getOwnPropertyNames(e.target)){let y=w(Reflect.get(e.target,c));y&&!this.#e.has(y)&&this.#e.set(y,{k:"container",key:"@material",path:[c]});}let u=H("containers",[e.scene]),f=Array.isArray(u)?u.find(c=>l(c)&&typeof c.key=="string"&&c.key.includes("/resource-batched-text-")):void 0;if(l(f)&&typeof f.key=="string"&&f.target!==null&&typeof f.target=="object"&&a(f.key,f.target,Y,true),Array.isArray(u)){for(let c of u)if(c!==f&&l(c)&&typeof c.key=="string"&&c.target!==null&&typeof c.target=="object"){let y=c.key;if(_e(y)||ot.has(y))continue;a(y,c.target,Y,true);}}if(e.kind==="render"){a("@material",e.target,sr,true),e.renderObject&&a("@renderObject",e.renderObject,A=>A.length===1&&A[0]!=="context");let c=Reflect.get(e.renderer,"getMRT"),y=Reflect.get(e.builder,"context"),b=(l(y)?w(y.mrt):void 0)??(typeof c=="function"?w(Reflect.apply(c,e.renderer,[])):void 0);e.renderObject&&b&&this.#o(b,{k:"container",key:"@renderObject",path:["context","mrt"]});}let g=e.builder.object;g!==null&&typeof g=="object"&&a("@object",g,c=>Y(c)||e.kind==="compute"&&c.some(y=>typeof y=="string"&&y.startsWith("_")),e.kind==="compute"),s&&a("@scene",s,Y);let k=Qn(e.renderer,s),N=k?this.#m(k):void 0;if(k&&N){this.#o(k,N);let c=w(Reflect.get(k,"_cubeTextureNode"));c&&this.#e.set(c,{k:"owned",owner:N,path:["_cubeTextureNode"]});}for(let[c,y]of ue(s).entries())a(`@sceneObject:${c}`,y,Y);a("@renderer",e.renderer,c=>c.length>=1&&c[0]==="_inspector"||c.length===2&&c[0]==="_nodes"&&c[1]==="nodeBuilderCache");let S=H("containers",[e.scene]);if(Array.isArray(S)){for(let c of S)if(l(c)&&typeof c.key=="string"&&c.target!==null&&typeof c.target=="object"){let y=c.key;if(_e(y)||ot.has(y))continue;a(y,c.target,Y,true);}}for(let[c,y]of e.retainedGraph.values){let R=this.#r.get(c);(R===void 0||R.container==="@renderer"&&R.path[0]===J[0]&&R.path[1]===J[1])&&this.#r.set(c,y);}for(let[c,y]of e.retainedGraph.nodes)!this.#e.has(c)&&!z().has(c)&&Xe(c)===void 0&&this.#e.set(c,y);}#n(e,n,r,o){let i=Reflect.get(e,"value"),s=this.#c.get(e)??o??(r.k==="recipe"&&r.id===j.renderContextInput&&i!==null&&typeof i=="object"?i:e);return this.#c.set(e,s),this.#i.register(r,s,this.#t.key,n),r}#o(e,n){!this.#e.has(e)&&!z().has(e)&&this.#e.set(e,n);for(let[r,o]of he(e))r===e||this.#e.has(r)||z().has(r)||this.#e.set(r,{k:"owned",owner:n,path:o});}#N(e){let n=w(Reflect.get(this.#t.target,"contextNode")),r=n?Reflect.get(n,"value"):void 0,o=l(r)?r.renderPipelineState:void 0,i=l(o)?w(o.viewOffsetOwner):void 0;if(!i||Reflect.get(i,"camera")!==e)return;let s=F(i);return s===void 0?void 0:{container:s,path:["camera"]}}#d(e){let n=F(e);if(n!==void 0)return {k:"container",key:n,path:[]};let r=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null;for(let[o,i]of ue(r).entries()){let s=Reflect.get(i,"shadow");if(l(s)&&w(s.shadowNode)===e)return {k:"container",key:`@sceneObject:${o}`,path:["shadow","shadowNode"]}}return this.#e.get(e)}#S(e){let n=p((o,i)=>{let s=Reflect.get(o,"shadow");if(!(Reflect.get(o,"isLight")!==true&&(Reflect.get(o,"isObject3D")!==true||!l(s)))){for(let d of We)if(Je(d,o)===e)return {k:"recipe",id:j.retainedLightUniform,version:1,input:{fn:d,light:i}}}},"address");for(let{key:o,node:i}of this.#t.retainedGraph.roots){let s,d=p((a,u)=>{s??=n(a,{container:o,path:u});},"inspect");if(d(i,[]),s===void 0&&ct(i,()=>{},d,Y),s===void 0)for(let a of Object.getOwnPropertyNames(i)){let u=Reflect.get(i,a);if(!(!l(u)||u.isObject3D!==true))for(let[f,g]of tr(u))s??=n(f,{container:o,path:[a,...g]});}if(s!==void 0)return s}let r=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null;for(let[o,i]of ue(r).entries()){let s=Reflect.get(i,"shadow"),d=l(s)?Reflect.get(s,"shadowNode"):void 0,a=l(d)?Reflect.get(d,"lights"):void 0;if(Array.isArray(a))for(let[u,f]of a.entries()){if(f===null||typeof f!="object")continue;let g=n(f,{container:`@sceneObject:${o}`,path:["shadow","shadowNode","lights",u]});if(g!==void 0)return g}}}#A(e){if(m(e)!=="UniformNode"||Reflect.get(e,"name")!=="shadowFar"||Reflect.get(e,"updateType")!=="render")return;let n=Reflect.get(e,"update");if(typeof n!="function")return;let r=Reflect.get(e,"value"),o=[],i=0;for(let[d,a]of this.#e){if(Reflect.get(d,"isShadowBaseNode")!==true||Reflect.get(d,"isShadowNode")===true)continue;let u=Reflect.get(d,"maxFar"),f=Reflect.get(d,"camera"),g=l(f)?f.far:void 0;if(typeof u!="number"||!Number.isFinite(u)||typeof g!="number"||!Number.isFinite(g))continue;let k=100000025e-2+i*2;i++;try{Reflect.set(d,"maxFar",k),Reflect.set(f,"far",k+1),Reflect.apply(n,e,[{}]),Reflect.get(e,"value")===k&&o.push(this.#d(d)??a);}catch{}finally{Reflect.set(d,"maxFar",u),Reflect.set(f,"far",g);try{Reflect.apply(n,e,[{}]);}catch{Reflect.set(e,"value",r);}}}let s=o.length===1?o[0]:void 0;if(s!==void 0)return {k:"recipe",id:j.retainedShadowFar,version:1,input:{owner:s}}}#T(e){if(Reflect.get(e,"isShadowNode")!==true)return;let n=[];for(let o of this.#e.keys()){if(Reflect.get(o,"isShadowBaseNode")!==true||Reflect.get(o,"isShadowNode")===true)continue;let i=Reflect.get(o,"_shadowNodes"),s=Reflect.get(o,"lights");if(!Array.isArray(i)||!Array.isArray(s)||i.length===0||i.length!==s.length)continue;let d=i.indexOf(e),a=this.#d(o);d>=0&&a!==void 0&&n.push({owner:a,index:d,count:i.length});}let r=n.length===1?n[0]:void 0;if(r!==void 0)return {k:"recipe",id:j.retainedShadowChild,version:1,input:{owner:r.owner,index:r.index,count:r.count}}}#j(e){let n=[];for(let r of this.#e.keys()){if(Reflect.get(r,"isShadowBaseNode")!==true||Reflect.get(r,"isShadowNode")===true)continue;let o=Reflect.get(r,"lights");if(!(!Array.isArray(o)||o.length===0))for(let[i,s]of o.entries()){let d=this.#d(r);l(s)&&s.shadow===e&&d!==void 0&&n.push({owner:d,path:["lights",i,"shadow"],ownerCount:o.length});}}return n.length===1?n[0]:void 0}#v(e){let n=[];for(let r of this.#e.keys()){if(Reflect.get(r,"isShadowBaseNode")!==true||Reflect.get(r,"isShadowNode")===true)continue;let o=this.#d(r);if(o?.k!=="container")continue;let i=Reflect.get(r,"lights");if(!(!Array.isArray(i)||i.length===0))for(let[s,d]of i.entries()){let a=l(d)?d.shadow:void 0,u=l(a)?a.map:void 0;if(!l(u))continue;u._depthTexture===e&&n.push({container:o.key,path:[...o.path,"lights",s,"shadow","map","_depthTexture"]});let f=u.textures;if(Array.isArray(f))for(let[g,k]of f.entries())k===e&&n.push({container:o.key,path:[...o.path,"lights",s,"shadow","map","textures",g]});}}return n.length===1?n[0]:void 0}#p(e){if(!["ReferenceNode","ReferenceBaseNode"].includes(m(e)))return;let n=Reflect.get(e,"property"),r=Reflect.get(e,"uniformType");if(typeof n!="string"||n.length===0||typeof r!="string"||r.length===0)return;let o=Reflect.get(e,"object"),i=o!==null&&typeof o=="object"?this.#j(o):void 0,s=o!==null&&typeof o=="object"?this.#N(o)??this.#r.get(o):void 0,d=w(o),a=d?this.#d(d):void 0;if(o!==null&&typeof o=="object"&&s===void 0&&a===void 0&&i===void 0)return;let u=w(Reflect.get(e,"group")),f=u?z().get(u):void 0;if(u&&f===void 0)return;let g=Reflect.get(e,"count");if(g!==null&&(!Number.isSafeInteger(g)||Number(g)<0))return;let k=Reflect.get(e,"name"),N=i?.owner??a;return N!==void 0?{k:"recipe",id:j.retainedReference,version:1,input:{owner:N,...i===void 0?{}:{path:i.path,ownerCount:i.ownerCount},property:n,uniformType:r,...g===null?{}:{count:Number(g)},...f===void 0?{}:{group:f},...typeof k=="string"&&k.length>0?{name:k}:{}}}:{k:"reference",property:n,uniformType:r,...g===null?{}:{count:Number(g)},...s===void 0?{}:{object:s},...f===void 0?{}:{group:f},...typeof k=="string"&&k.length>0?{name:k}:{}}}#h(e){if(Reflect.get(e,"isMaterialReferenceNode")!==true)return;let n=Reflect.get(e,"property"),r=Reflect.get(e,"uniformType"),o=Reflect.get(e,"referenceType"),i=typeof r=="string"||r===null?r:o;return typeof n=="string"&&(typeof i=="string"||i===null)?{k:"materialCache",property:n,type:i}:void 0}#x(e){if(m(e)!=="UniformNode"||Reflect.get(e,"nodeType")!=="int"||Reflect.get(e,"updateType")!=="render")return;let n=this.#t.builder.material,r=this.#t.builder.object,o=l(r)?r.material:void 0,i=Reflect.get(e,"update");if(typeof i!="function")return;let s=[];l(n)&&s.push({owner:"material",target:n}),l(o)&&o!==n&&s.push({owner:"objectMaterial",target:o});let d=Reflect.get(e,"value"),a=[];for(let{owner:u,target:f}of s){let g=f.steps;if(!Number.isSafeInteger(g)||Number(g)<0||Number(g)>2147483647)continue;let k=Number(g)===2147483647?2147483646:Number(g)+1;try{Reflect.set(f,"steps",k),Reflect.apply(i,e,[{material:n,object:r}]),Reflect.get(e,"value")===k&&a.push(u);}catch{}finally{Reflect.set(f,"steps",g);try{Reflect.apply(i,e,[{material:n,object:r}]);}catch{Reflect.set(e,"value",d);}}}if(a.length===1)return a[0]==="material"?{k:"recipe",id:j.materialSteps,version:1}:{k:"recipe",id:j.materialSteps,version:1,input:{owner:"objectMaterial"}}}#g(e){if(!this.#l.includes(e)||Reflect.get(e,"light")!==void 0)return;let n=m(e);return /^[A-Za-z][A-Za-z0-9]*LightDataNode$/u.test(n)?{k:"recipe",id:j.dynamicLightData,version:1,input:{type:n}}:void 0}#C(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;let n=this.#t.builder.object,r=Reflect.get(e,"callback");if(!l(n)||n.isSkinnedMesh!==true||typeof r!="function")return;let o=n.skeleton;if(!l(o))return;let i=o.boneMatrices,s=o.bones,d=o.update;if(!ArrayBuffer.isView(i)||m(i)!=="Float32Array"||!Array.isArray(s)||s.length===0||typeof d!="function")return;let a=i;if(a.length!==s.length*16)return;let u=this.#t.journal.filter(b=>{let A=Reflect.get(b.node,"value");return m(b.node)==="BufferNode"&&b.type==="buffer"&&b.stage==="vertex"&&Reflect.get(b.node,"bufferType")==="mat4"&&Reflect.get(b.node,"bufferCount")===s.length&&A!==a&&ArrayBuffer.isView(A)&&m(A)==="Float32Array"&&Reflect.get(A,"length")===a.length}),f=[...new Set(u.map(b=>Reflect.get(b.node,"value")))];if(f.length===0)return;let g=new Float32Array(a),k=f.map(b=>new Float32Array(b)),N=Object.getOwnPropertyDescriptor(o,"update"),S={},c=[];try{if(!Reflect.set(o,"update",()=>{}))return;for(let b=0;b<a.length;b++)a[b]=-100000.5-b;Reflect.apply(r,e,[{object:n,frameId:S}]),c=f.filter(b=>b.every((A,v)=>A===a[v]));}catch{return}finally{a.set(g);for(let[b,A]of f.entries())A.set(k[b]);N===void 0?Reflect.deleteProperty(o,"update"):Object.defineProperty(o,"update",N);}let y=c[0];if(c.length!==1||y===void 0)return;let R={k:"recipe",id:j.previousBoneMatrices,version:1,input:{count:s.length}};for(let b of u)Reflect.get(b.node,"value")===y&&(this.#e.set(b.node,R),this.#c.set(b.node,o));}#_(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;let n=this.#t.builder.object,r=Reflect.get(e,"callback");if(!l(n)||n.isInstancedMesh!==true||typeof r!="function")return;let o=n.instanceMatrix,i=l(o)?o.array:void 0,s=l(o)?o.count:void 0;if(!ArrayBuffer.isView(i)||m(i)!=="Float32Array"||!Number.isSafeInteger(s)||Number(s)<1||Reflect.get(i,"length")!==Number(s)*16)return;let d=i,a=this.#t.journal.filter(c=>{let y=Reflect.get(c.node,"value");return m(c.node)==="BufferNode"&&c.type==="buffer"&&c.stage==="vertex"&&Reflect.get(c.node,"bufferType")==="mat4"&&Reflect.get(c.node,"bufferCount")===s&&y!==d&&ArrayBuffer.isView(y)&&m(y)==="Float32Array"&&Reflect.get(y,"length")===d.length}),u=[...new Set(a.map(c=>Reflect.get(c.node,"value")))];if(u.length===0)return;let f=new Float32Array(d),g=u.map(c=>new Float32Array(c)),k=[];try{for(let c=0;c<d.length;c++)d[c]=-200000.5-c;Reflect.apply(r,e,[{object:n}]),k=u.filter(c=>c.every((y,R)=>y===d[R]));}catch{return}finally{d.set(f);for(let[c,y]of u.entries())y.set(g[c]);}let N=k[0];if(k.length!==1||N===void 0)return;let S={k:"recipe",id:j.previousInstanceMatrices,version:1,input:{count:Number(s)}};for(let c of a)Reflect.get(c.node,"value")===N&&(this.#e.set(c.node,S),this.#c.set(c.node,n));this.#f.add(e);}#y(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;let n=this.#t.builder.object,r=Reflect.get(e,"callback"),o=typeof r=="function"?Function.prototype.toString.call(r):"";if(!l(n)||!o.includes("morphTargetsRelative")||!o.includes("morphTargetInfluences")||!o.includes(".reduce")||!o.includes(".update"))return;let i=n.morphTargetInfluences,s=n.geometry,d=n.morphTexture;if(!l(s))return;let a=n.isInstancedMesh===true&&i===void 0&&s.morphTargetsRelative===true&&Number.isSafeInteger(n.count)&&Number(n.count)>1&&l(d);if(!Array.isArray(i)&&!a)return;let u=s.morphAttributes;if(!l(u))return;let f=Array.isArray(u.position)?u.position:[],g=Array.isArray(u.normal)?u.normal:[],k=Array.isArray(u.color)?u.color:[],N=f.length>0?f:g.length>0?g:k;if(N.length===0||Array.isArray(i)&&N.length!==i.length)return;let S=this.#t.journal.some(R=>{let b=Reflect.get(R.node,"value");return m(R.node)==="TextureNode"&&R.type==="texture"&&R.stage==="vertex"&&Reflect.get(R.node,"sampler")===false&&l(b)&&en(b,s)}),c=this.#t.journal.flatMap((R,b)=>m(R.node)==="UniformArrayNode"?[`${b}:${R.type}/${R.stage}:same=${Reflect.get(R.node,"array")===i}:length=${Array.isArray(Reflect.get(R.node,"array"))?Reflect.get(R.node,"array").length:"na"}`]:[]);if(this.#s.push(`morph=${String(Reflect.get(n,"name")??"")}:targets=${N.length}:influences=${Array.isArray(i)?i.length:"none"}:texture=${S}:arrays=[${c.join(",")}]`),!S)return;if(a){let R=this.#t.journal.filter(x=>m(x.node)==="TextureNode"&&x.type==="texture"&&x.stage==="vertex"&&Reflect.get(x.node,"value")===d);if(R.length!==1)return;let b=[];for(let x of this.#t.journal){let U=Reflect.get(x.node,"value");m(x.node)==="UniformNode"&&x.type==="float"&&x.stage==="vertex"&&typeof U=="number"&&Number.isFinite(U)&&!b.some(O=>O.node===x.node)&&b.push({node:x.node,value:U});}let A=[];try{for(let[x,U]of b.entries()){let O=-100000.5-x;if(!Reflect.set(U.node,"value",O)||Reflect.get(U.node,"value")!==O)return}try{Reflect.apply(r,e,[{object:n}]);}catch{}A=b.filter(x=>Reflect.get(x.node,"value")===1).map(x=>x.node);}finally{for(let x of b)Reflect.set(x.node,"value",x.value);}let v=A[0],B=R[0]?.node;return A.length===1&&v!==void 0&&B!==void 0?{base:v,morphTexture:B,count:N.length}:void 0}if(!Array.isArray(i))return;let y=this.#t.journal.flatMap((R,b)=>{let A=Reflect.get(R.node,"array");if(m(R.node)!=="UniformArrayNode"||R.type!=="buffer"||R.stage!=="vertex"||A!==i&&(!Array.isArray(A)||A.length!==i.length))return [];let v=this.#t.journal[b-1];return v===void 0||m(v.node)!=="UniformNode"||v.type!=="float"||v.stage!=="vertex"||typeof Reflect.get(v.node,"value")!="number"||!Number.isFinite(Reflect.get(v.node,"value"))?[]:[{base:v.node,influences:R.node,count:i.length}]});return y.length===1?y[0]:void 0}#B(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;if(this.#f.has(e))return {k:"recipe",id:j.previousInstanceMatricesEvent,version:1};let n=this.#t.builder.object,r=Reflect.get(e,"callback"),o=typeof r=="function"?Function.prototype.toString.call(r):"";if(l(n)&&n.isSkinnedMesh===true&&o.includes("skeleton"))return {k:"recipe",id:j.skinningEvent,version:1};let i=this.#y(e);if(i){let s=this.#e.get(i.base),d=i.influences===void 0?void 0:this.#e.get(i.influences),a=i.morphTexture===void 0?void 0:this.#e.get(i.morphTexture);return s===void 0||d===void 0==(a===void 0)?void 0:{k:"recipe",id:j.morphUpdateEvent,version:1,input:d===void 0?{base:s,morphTexture:a,count:i.count}:{base:s,influences:d,count:i.count}}}}#E(e){if(m(e)!=="MaxMipLevelNode")return;let n=w(Reflect.get(e,"textureNode"));if(!n)return;let r=this.classify(n,"max-mip texture owner");return {k:"recipe",id:j.maxMip,version:1,input:r}}#m(e){if(m(e)!=="CubeMapNode")return;let n=w(Reflect.get(e,"envNode"));if(n)return {k:"recipe",id:j.cubeMap,version:1,input:this.classify(n,"cube-map environment")}}#b(e){if(m(e)!=="Object3DNode")return;let n=Reflect.get(e,"scope");if(!["direction","worldMatrix","position","scale","viewPosition","radius"].includes(String(n)))return;let r=Reflect.get(e,"object3d");if(r===null||typeof r!="object")return;let o=this.#t.builder.object,i="object";if(r!==o){let a=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,u=ue(a).indexOf(r);if(u<0)return;i={sceneObject:u};}let s={k:"recipe",id:j.object3D,version:1,input:{scope:String(n),object:i}};this.#e.set(e,s);let d=w(Reflect.get(e,"uniformNode"));return d&&this.#e.set(d,{k:"owned",owner:s,path:["uniformNode"]}),this.#n(e,"Object3DNode",s,r)}#R(e){let n=w(Reflect.get(e,"textureNode")),r=n?w(Reflect.get(n,"passNode")):void 0;if(!r||Reflect.get(r,"isPassNode")!==true||typeof Reflect.get(r,"setup")!="function")return;let o=F(r),i=this.#e.get(r)??(o?{k:"container",key:o,path:[]}:void 0);if(i===void 0)return;let s={k:"recipe",id:j.passSetupOutput,version:1,input:{owner:i}};return this.#o(e,s),this.#n(e,"pass setup output",s,r)}#k(e){if(m(e)!=="ReflectorNode")return;let n=w(Reflect.get(e,"_reflectorBaseNode")),r=n?w(Reflect.get(n,"textureNode")):void 0;if(!n||m(n)!=="ReflectorBaseNode"||!r||m(r)!=="ReflectorNode")return;let o=Reflect.get(n,"target");if(o===null||typeof o!="object")return;let i=Reflect.get(o,"parent"),s=this.#t.builder.object,d=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,a=null;if(i!==null&&typeof i=="object")if(i===s)a="object";else {let B=ue(d).indexOf(i);if(B<0)return;a={sceneObject:B};}let u=p((B,x)=>{if(B===null||typeof B!="object")return;let U=x.map(O=>Reflect.get(B,O));return U.every(O=>typeof O=="number"&&Number.isFinite(O))?U:void 0},"components"),f=u(Reflect.get(o,"position"),["x","y","z"]),g=u(Reflect.get(o,"quaternion"),["x","y","z","w"]),k=u(Reflect.get(o,"scale"),["x","y","z"]),N=Reflect.get(n,"resolutionScale"),S=Reflect.get(n,"samples");if(!f||!g||!k||typeof N!="number"||!Number.isFinite(N)||!Number.isSafeInteger(S)||Number(S)<0)return;let c=i!==null&&typeof i=="object"?Reflect.get(i,"children"):void 0,y=Array.isArray(c)?c.indexOf(o):-1;if(i!==null&&y<0)return;let R={k:"recipe",id:j.reflector,version:1,input:{resolutionScale:N,generateMipmaps:Reflect.get(n,"generateMipmaps")===true,bounces:Reflect.get(n,"bounces")===true,depth:Reflect.get(n,"depth")===true,samples:Number(S),parent:a,targetIndex:y,position:f,quaternion:g,scale:k}};this.#e.set(r,R),this.#e.set(n,{k:"owned",owner:R,path:["_reflectorBaseNode"]});let b=w(Reflect.get(r,"_depthNode")),A={k:"owned",owner:R,path:["_depthNode"]};b&&this.#e.set(b,A);let v=e===b?A:R;return this.#e.set(e,v),v}#M(e){if(m(e)!=="TextureNode"||Reflect.get(e,"sampler")!==false)return;let n=Reflect.get(e,"value"),r=this.#t.builder.object,o=l(r)?r.geometry:void 0;if(!(!l(r)||!l(n)||!l(o)||this.#r.has(n)||Reflect.get(r,"morphTexture")===n||!en(n,o)))return {k:"recipe",id:j.morphTargetTexture,version:1}}noteUpdateNode(e){let n=this.#e.get(e);if(n){let a=["ReferenceNode","ReferenceBaseNode"].includes(m(e))?w(Reflect.get(e,"node")):void 0;a&&this.#e.set(a,{k:"owned",owner:n,path:["node"],prime:"reference"});return}let r=m(e)==="RTTNode"?F(e):void 0;if(r?.startsWith("@three-blocks-input:setup-rtt-")===true){let a={k:"container",key:r,path:[]};this.#e.set(e,a);let u=Reflect.get(e,"value");u!==null&&typeof u=="object"&&this.#r.set(u,{container:r,path:["value"]});return}if(this.#R(e))return;let o=this.#g(e);if(o){this.#o(e,o);return}this.#C(e),this.#_(e);let i=this.#y(e);if(i?.influences){let a=Reflect.get(i.influences,"elementType");this.#e.set(i.influences,{k:"inputNode",nodeClass:"uniformArray",value:{container:"@object",path:["morphTargetInfluences"]},access:null,uniformType:typeof a=="string"?a:null});}if(m(e)==="PMREMNode"){let a=this.classify(e,"PMREM update node ownership");for(let u of ["_texture","_width","_height","_maxMip"]){let f=w(Reflect.get(e,u));f&&this.#e.set(f,{k:"owned",owner:a,path:[u]});}return}if(m(e)==="ReflectorBaseNode"){let a=w(Reflect.get(e,"textureNode"));a&&this.#k(a);}if(m(e)==="Object3DNode"){this.#b(e);return}if(m(e)==="CubeMapNode"){let a=this.classify(e,"cube-map update node ownership"),u=w(Reflect.get(e,"envNode")),f=w(Reflect.get(e,"_cubeTextureNode"));f&&f!==u&&this.#e.set(f,{k:"owned",owner:a,path:["_cubeTextureNode"]});return}let s=this.#h(e)??this.#p(e);if(s===void 0&&["ReferenceNode","ReferenceBaseNode"].includes(m(e))){let a=F(e);a!==void 0&&(s={k:"container",key:a,path:[]});}if(s===void 0){["TextureNode","Texture3DNode","CubeTextureNode"].includes(m(e))&&(s=this.classify(e,"texture update node ownership"));let a=s===void 0&&Reflect.get(e,"isTextureNode")===true?Vt(Reflect.get(e,"value")):void 0;if(l(a)&&a.t==="tex"&&this.classify(e,"update node ownership"),s===void 0)return}this.#e.set(e,s);let d=w(Reflect.get(e,"node"));d&&this.#e.set(d,{k:"owned",owner:s,path:["node"],prime:"reference"});}shouldOmitUpdateNode(e){return m(e)==="InspectorNode"?true:m(e)==="EventNode"&&Reflect.get(e,"eventType")==="frame"&&l(this.#t.builder.object)&&Reflect.get(this.#t.builder.object,"isInstancedMesh")===true}#L(e){if(Reflect.get(e,"isTextureNode")!==true)return;let n=Reflect.get(e,"update");if(typeof n!="function")return;let r=p(()=>{try{Reflect.apply(n,e,[{}]);}catch{}},"invoke");for(let o of this.#w()){if(Reflect.get(o.light,"isSpotLight")!==true)continue;let i=Reflect.get(o.light,"map");if(i===null||typeof i!="object")continue;let s={},d=false;try{Reflect.set(o.light,"map",s),r(),d=Reflect.get(e,"value")===s;}finally{Reflect.set(o.light,"map",i),r();}if(d)return {k:"lightUniform",fn:"spotLightMap",...o.address}}}#w(){let e=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,n=this.#a.map((r,o)=>({light:r,address:{light:o}}));for(let[r,o]of Ye(e).entries())this.#a.includes(o)||n.push({light:o,address:{light:this.#a.length+r,sceneLight:r}});return n}#O(e){let n=this.#w();if(n.length===0)return;if(Reflect.get(e,"isReferenceNode")===true){let i=Reflect.get(e,"object"),s=Reflect.get(e,"property");if(i===null||typeof i!="object"||typeof s!="string")return;let d=Un[s],a=s==="near"?"shadowCameraNear":s==="far"?"shadowCameraFar":void 0;for(let u of n){let f=Reflect.get(u.light,"shadow");if(!(f===null||typeof f!="object")){if(d!==void 0&&f===i)return {k:"lightUniform",fn:d,...u.address};if(a!==void 0&&Reflect.get(f,"camera")===i)return {k:"lightUniform",fn:a,...u.address}}}return}if(Reflect.get(e,"isUniformNode")!==true)return;let r=Reflect.get(e,"update");if(typeof r!="function"||typeof Reflect.get(e,"value")!="number")return;let o=p(()=>{try{Reflect.apply(r,e,[{}]);}catch{}},"invoke");for(let i of n){let s=Reflect.get(i.light,"shadow"),d=s!==null&&typeof s=="object"?Reflect.get(s,"camera"):void 0;if(!(d===null||typeof d!="object"))for(let a of ["shadowCameraNear","shadowCameraFar"]){let u=a==="shadowCameraNear"?"near":"far",f=Reflect.get(d,u);if(typeof f!="number")continue;let g=f+12345.625,k=false;try{Reflect.set(d,u,g),o(),k=Reflect.get(e,"value")===g;}finally{Reflect.set(d,u,f),o();}if(k)return {k:"lightUniform",fn:a,...i.address}}}}#I(e){if(m(e)!=="BufferNode")return false;let n=Reflect.get(this.#t.builder,"getNodeProperties");if(typeof n!="function")return false;for(let r of this.#e.keys()){if(m(r)!=="RangeNode")continue;let o=Reflect.apply(n,this.#t.builder,[r]),i=l(o)?w(o.outputNode):void 0;if(i&&he(i).has(e))return true}return false}classify(e,n){let r=Reflect.get(e,"name");if(typeof r=="string"&&On.has(r))return {k:"namedRenderUniform",name:r};let o=this.#A(e);if(o)return this.#e.set(e,o),this.#n(e,n,o);let i=this.#T(e);if(i)return this.#e.set(e,i),this.#n(e,n,i);let s=this.#e.get(e),d=this.#t.retainedGraph.nodes.get(e);if(s&&s!==d)return this.#n(e,n,dt(s));let a=this.#b(e);if(a)return a;let u=this.#R(e);if(u)return u;let f=this.#p(e);if(f)return this.#e.set(e,f),f.k==="recipe"?this.#n(e,n,f):f;let g=this.#h(e);if(g)return this.#e.set(e,g),g;let k=this.#x(e);if(k)return this.#e.set(e,k),this.#n(e,n,k);let N=this.#g(e);if(N)return this.#e.set(e,N),this.#n(e,n,N);let S=this.#B(e);if(S)return this.#e.set(e,S),this.#n(e,n,S);let c=this.#E(e);if(c){this.#e.set(e,c);let h=w(Reflect.get(e,"textureNode")),T=h?Reflect.get(h,"value"):void 0;return this.#n(e,n,c,T!==null&&typeof T=="object"?T:h)}let y=this.#m(e);if(y)return this.#e.set(e,y),this.#n(e,n,y);let R=this.#M(e);if(R){this.#e.set(e,R);let h=Reflect.get(e,"value");return this.#n(e,n,R,h!==null&&typeof h=="object"?h:e)}let b=w(Reflect.get(e,"referenceNode")),A=b!==void 0?this.#e.get(b):void 0;if(b!==void 0&&A===void 0){let h=F(b);h&&(A={k:"container",key:h,path:[]});}let v=Reflect.get(e,"value"),B=v!==null&&typeof v=="object"?this.#r.get(v)??zt(v):void 0,x=Qt(A);if(n.startsWith("uniform ")&&A!==void 0&&w(Reflect.get(e,"compareNode"))===void 0&&(x?.container.startsWith("@three-blocks-input:")!==true||B===void 0))return this.#e.set(e,A),A;let U=m(e)==="ReflectorNode"?F(e):void 0;if(U!==void 0){let h={k:"container",key:U,path:[]};return this.#e.set(e,h),h}let O=this.#k(b&&m(b)==="ReflectorNode"?b:e);if(O)return this.#e.set(e,O),this.#n(e,n,O);let gn=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,Le=Reflect.get(e,"light");if(Le!==null&&typeof Le=="object"){let h=Ye(gn).indexOf(Le);if(h>=0){let T={k:"lightNode",light:h,sceneLight:h};return Reflect.get(e,"isShadowBaseNode")===true?{k:"owned",owner:T,path:["shadowNode"]}:T}}let Oe=this.#S(e);if(Oe)return this.#e.set(e,Oe),this.#n(e,n,Oe);let Ie=this.#L(e);if(Ie)return this.#e.set(e,Ie),Ie;let G=Reflect.get(e,"value"),se=Reflect.get(e,"array");if(G!==null&&typeof G=="object"||se!==null&&typeof se=="object")for(let[h,T]of this.#e){if(h===e)continue;let C=G!==null&&typeof G=="object"&&Reflect.get(h,"value")===G,E=se!==null&&typeof se=="object"&&Reflect.get(h,"array")===se;if(!(!C&&!E)){if(Zt(h,e))return this.#e.set(e,T),T;if(C&&["TextureNode","Texture3DNode","CubeTextureNode"].includes(m(e))){let P=or(T);if(P!==void 0){this.#r.set(G,P);break}}}}if(G!==null&&typeof G=="object")for(let[h,T]of z()){if(Reflect.get(h,"isViewportNode")!==true)continue;let C=w(Reflect.get(h,"_output"));if(C===void 0||Reflect.get(C,"value")!==G||!Zt(C,e))continue;let E={k:"owned",owner:{k:"tsl",name:T},path:["_output"]};return this.#e.set(e,E),E}let yt=z().get(e);if(yt)return {k:"tsl",name:yt};let mt=Xe(e),Ue=mt==="uniformArray"?Reflect.get(e,"array"):Reflect.get(e,"value"),bt=Ue!==null&&typeof Ue=="object"?this.#r.get(Ue):void 0;if(!(bt!==void 0&&!bt.container.startsWith("@three-blocks-input:"))){for(let[h,T]of this.#e)for(let C of Object.getOwnPropertyNames(h))if(Reflect.get(h,C)===e){if(mt!==void 0&&Pn(T)||(T.k==="inputNode"||T.k==="inputValue"||T.k==="recipe")&&!In.has(C))continue;let E={k:"owned",owner:T,path:[C]};return this.#e.set(e,E),E}}for(let[h,T]of z()){for(let C of Object.getOwnPropertyNames(h))if(Reflect.get(h,C)===e)return {k:"owned",owner:{k:"tsl",name:T},path:[C]};for(let[C,E]of he(h))if(C===e)return {k:"owned",owner:{k:"tsl",name:T},path:E}}let Rt={ViewportDepthTextureNode:"viewportDepthTexture",ViewportSharedTextureNode:"viewportSharedTexture",ViewportTextureNode:"viewportMipTexture"}[m(e)];if(Rt!==void 0){let h={k:"inputValue",nodeClass:Rt,json:{viewport:this.#i.viewportInput(e)}};return this.#e.set(e,h),h}let be=m(e)==="PassTextureNode"?e:b&&m(b)==="PassTextureNode"?b:void 0;if(be){let h=w(Reflect.get(be,"passNode")),T=h?F(h):void 0,C=h?this.#e.get(h)??(T?{k:"container",key:T,path:[]}:void 0):void 0,E=h?Object.getOwnPropertyNames(h).filter(P=>w(Reflect.get(h,P))===be):[];if(C&&E.length===1){let P={k:"owned",owner:C,path:[E[0]]};return this.#e.set(be,P),this.#e.set(e,P),P}}if(m(e)==="PassMultipleTextureNode"){let h=w(Reflect.get(e,"passNode")),T=Reflect.get(e,"textureName"),C=Reflect.get(e,"previousTexture")===true,E=C?"_previousTextureNodes":"_textureNodes",P=h?F(h):void 0,X=h?this.#e.get(h)??[...this.#e].find(([q])=>w(q)===h)?.[1]??(P?{k:"container",key:P,path:[]}:void 0):void 0,te=h?Reflect.get(h,E):void 0,ae=l(te)&&typeof T=="string"?w(Reflect.get(te,T)):void 0;if(X&&typeof T=="string"&&ae){let q={k:"recipe",id:j.passTexture,version:1,input:{owner:X,name:T,previous:C}};return this.#e.set(e,q),q}this.#s.push(`passTexture=${m(h)}/${String(T)}/${E} owner=${X?JSON.stringify(X):"missing"} collection=${m(te)} canonical=${m(ae)}`);}let Re=F(e),L=Xe(e);if(L){let h=L==="uniformArray"?Reflect.get(e,"array"):Reflect.get(e,"value"),T=Reflect.get(e,"access"),C=L==="uniformArray"?Reflect.get(e,"elementType"):L==="storage"||L==="buffer"||L==="bufferAttribute"?Reflect.get(e,"bufferType"):Reflect.get(e,"uniformType"),E=typeof T=="string"?T:null,P=typeof C=="string"?C:null,X=w(Reflect.get(e,"group"))??w(Reflect.get(e,"groupNode")),te=X?z().get(X):void 0,ae=te?{group:te}:{},q=Reflect.get(e,"bufferCount"),Tt=L==="storage"||L==="buffer"?{bufferCount:Number.isSafeInteger(q)&&Number(q)>=0?Number(q):0,...L==="storage"?{atomic:Reflect.get(e,"isAtomic")===true,pbo:Reflect.get(e,"isPBO")===true}:{}}:{},jt=h!==null&&typeof h=="object"?zt(h):void 0,kn=h!==null&&typeof h=="object"&&(Reflect.get(h,"isStorageBufferAttribute")===true||Reflect.get(h,"isStorageInstancedBufferAttribute")===true),ke=h!==null&&typeof h=="object"?this.#r.get(h):void 0,wn=ke!==void 0&&!ke.container.startsWith("@")?ke:void 0,V=h!==null&&typeof h=="object"?this.#v(h)??wn??(kn?jt:void 0)??ke??jt:void 0;if(!V&&h!==null&&typeof h=="object"){let $=Reflect.get(h,"array");$!==null&&typeof $=="object"&&(V=this.#r.get($));}let vt=L==="bufferAttribute"?{stride:Number.isSafeInteger(Reflect.get(e,"bufferStride"))?Number(Reflect.get(e,"bufferStride")):0,offset:Number.isSafeInteger(Reflect.get(e,"bufferOffset"))?Number(Reflect.get(e,"bufferOffset")):0,usage:Number.isSafeInteger(Reflect.get(e,"usage"))?Number(Reflect.get(e,"usage")):0,instanced:Reflect.get(e,"instanced")===true||h!==null&&typeof h=="object"&&(Reflect.get(h,"isInstancedBufferAttribute")===true||Reflect.get(h,"isInstancedInterleavedBuffer")===true)||V?.path.includes("instanceMatrix")===true||V?.path.includes("instanceColor")===true}:{},xt=["texture","cubeTexture","texture3D"].includes(L)&&w(Reflect.get(e,"compareNode"))?{comparison:true}:{},de=["texture","cubeTexture"].includes(L)?Qt(A):void 0,Ct=de!==void 0&&(de.container.startsWith("@three-blocks-input:")!==true||V===void 0||V.container===de.container),_t=Ct?de:V??de,Nn=Ct?`${L}Reference`:L,$e=Reflect.get(e,"name"),Bt=typeof $e=="string"&&$e.length>0?{name:$e}:{},Z=_t?{k:"inputNode",nodeClass:Nn,value:_t,access:E,uniformType:P,...Bt,...ae,...Tt,...vt,...xt}:void 0;if(!Z&&Re!==void 0){let $={k:"container",key:Re,path:[]};return this.#e.set(e,$),$}if(!Z){let $=this.#I(e)?rr(h):Vt(h);$!==void 0&&(Z={k:"inputValue",nodeClass:L,json:$,access:E,uniformType:P,...Bt,...ae,...Tt,...vt,...xt});}if(Z){let $=JSON.stringify(Z),Fe=this.#u.get($)??0;this.#u.set($,Fe+1);let Sn=Fe===0?Z:{...Z,n:Fe},Et=Fn(Sn,h);return this.#e.set(e,Et),this.#n(e,n,Et,h!==null&&typeof h=="object"?h:e)}}if(s)return this.#n(e,n,dt(s));if(Re!==void 0){let h={k:"container",key:Re,path:[]};return this.#e.set(e,h),h}let Pe=this.#O(e);if(Pe)return this.#e.set(e,Pe),this.#n(e,n,Pe);let kt=p(h=>m(h)===m(e)&&m(Reflect.get(h,"value"))===m(Reflect.get(e,"value"))&&Reflect.get(h,"updateType")===Reflect.get(e,"updateType"),"comparable"),yn=[...z()].filter(([h])=>kt(h)).slice(0,8).map(([,h])=>h),mn=[...this.#e].filter(([h])=>kt(h)).slice(0,8).map(([h,T])=>`${JSON.stringify(T)}@${Wt(Reflect.get(h,"value"))}`),wt=l(Reflect.get(e,"value"))?Reflect.get(Reflect.get(e,"value"),"uuid"):void 0,Nt=typeof wt=="string"?[...this.#e].filter(([h])=>l(Reflect.get(h,"value"))&&Reflect.get(Reflect.get(h,"value"),"uuid")===wt).slice(0,12).map(([h,T])=>`${m(h)}:${JSON.stringify(T)}`):[],St=H("containers",[this.#t.scene]),bn=Array.isArray(St)?St.slice(0,64).flatMap(h=>{if(!l(h)||typeof h.key!="string"||!l(h.target))return [];let T=h.target,C=Object.keys(T).filter(E=>Reflect.get(T,E)===Reflect.get(e,"value"));return [`${h.key}/${m(T)}${C.length>0?`:${C.join(",")}`:""}`]}):[],At=m(e)==="EventNode"?Reflect.get(e,"callback"):void 0,Rn=typeof At=="function"?Function.prototype.toString.call(At).replaceAll(/\s+/gu," ").slice(0,320):void 0,D=this.#t.builder.object;throw new Error(`Cannot address ${m(e)}${typeof r=="string"&&r?` "${r}"`:""} used by ${n} for shader key "${this.#t.key}". Node metadata: value=${m(Reflect.get(e,"value"))}, update=${typeof Reflect.get(e,"update")=="function"?Reflect.get(e,"update").name||"anonymous":"none"}, updateType=${String(Reflect.get(e,"updateType"))}.`+(L?` Input metadata: class=${L}, value=${m(Reflect.get(e,"value"))}, access=${String(Reflect.get(e,"access"))}, uniformType=${String(Reflect.get(e,"uniformType"))}.`:"")+` Similar semantic inputs: tsl=[${yn.join(", ")}], paths=[${mn.join(", ")}].`+(l(Reflect.get(e,"value"))&&Reflect.get(Reflect.get(e,"value"),"isTexture")===true?` Texture value: ${Wt(Reflect.get(e,"value"))}.`:"")+(Nt.length>0?` Same-texture paths: [${Nt.join(", ")}].`:"")+` Classifier diagnostics: ${this.#s.join("; ")}. Registered containers: [${bn.join(", ")}].`+(Reflect.get(e,"isStorageBufferNode")===true?` Storage metadata: type=${String(Reflect.get(e,"bufferType"))}, count=${String(Reflect.get(e,"bufferCount"))}, value=${m(Reflect.get(e,"value"))}.`:"")+(m(e)==="MaterialReferenceNode"?` Material reference metadata: flag=${String(Reflect.get(e,"isMaterialReferenceNode"))}, property=${String(Reflect.get(e,"property"))}, uniformType=${String(Reflect.get(e,"uniformType"))}.`:"")+(m(e)==="EventNode"?` Event metadata: type=${String(Reflect.get(e,"eventType"))}, object=${m(D)}, objectName=${l(D)?String(D.name??""):""}, instanced=${l(D)&&D.isInstancedMesh===true}, skinned=${l(D)&&D.isSkinnedMesh===true}, morphs=${l(D)&&Array.isArray(D.morphTargetInfluences)?D.morphTargetInfluences.length:0}, callback=${Rn??"none"}.`:""))}};function Ve(t){return Array.isArray(t)?t.map(w).filter(e=>e!==void 0):[]}p(Ve,"nodeArray");function ar(t,e,n){let r=e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),o=new RegExp(`struct\\s+${r}Struct\\s*\\{([\\s\\S]*?)\\};`,"u"),i=[t.vertexShader,t.fragmentShader,t.computeShader].filter(a=>typeof a=="string"),s;for(let a of i){let u=o.exec(a)?.[1];if(u!==void 0&&(s=[...u.matchAll(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*:/gmu)].map(f=>f[1]).filter(f=>f!==void 0),s.length>0))break}if(!s||s.length===0)return;let d=new Map(n.map(a=>[a.name,a.type]));if(!s.some(a=>!d.has(a)))return s.map(a=>({name:a,type:d.get(a)}))}p(ar,"wgslUniformLayout");var dr=[{directive:/(?:^|\n)\s*enable\s+subgroups\s*;/u,feature:"subgroups"},{directive:/(?:^|\n)\s*enable\s+subgroups[-_]f16\s*;/u,feature:"subgroups-f16"},{directive:/(?:^|\n)\s*enable\s+f16\s*;/u,feature:"shader-f16"},{directive:/(?:^|\n)\s*enable\s+clip_distances\s*;/u,feature:"clip-distances"},{directive:/(?:^|\n)\s*enable\s+dual_source_blending\s*;/u,feature:"dual-source-blending"}];function cr(t){let e=[];for(let n of dr)t.some(r=>r!==null&&n.directive.test(r))&&e.push(n.feature);return e}p(cr,"shaderRequirements");function ur(t,e){let n=new Map,r=new Set,o=[];for(let i of t){let s=e(i.node,`uniform ${i.name??"<generated>"}`),d=JSON.stringify(s),a=n.get(d);a===void 0&&(a=new Map,n.set(d,a));let u=a.get(i.nid);u===void 0&&(u=a.size,a.set(i.nid,u));let f=`${d}\0${u}\0${i.stage}`;r.has(f)||(r.add(f),o.push({address:s,instance:u,type:i.type,stage:i.stage,name:i.name}));}return o}p(ur,"reduceJournal");function fr(t,e){if(e==="NodeStorageBuffer"||e==="StorageBuffer"){let n=t.access;return typeof n=="string"?{access:n}:{}}if(e.includes("Sampled")){let n=t.store===true,r=t.access;return {store:n,...n&&typeof r=="string"?{access:r}:{}}}return {}}p(fr,"capturedBindingAccess");function lr(t,e,n){let r=gt(t.builder,t.kind);if(!r)throw new Error(`Shader key "${t.key}" has no live build target.`);let o=new pt({...t,target:r,retainedGraph:n},e),i=Ve(t.builder.updateNodes),s=Ve(t.builder.updateBeforeNodes),d=Ve(t.builder.updateAfterNodes);for(let c of [...i,...s,...d])o.noteUpdateNode(c);let a=ur(t.journal,(c,y)=>o.classify(c,y)),u=typeof t.builder.getAttributesArray=="function"?Reflect.apply(t.builder.getAttributesArray,t.builder,[]):[],f=Array.isArray(u)?u.map((c,y)=>{if(!l(c)||typeof c.name!="string"||typeof c.type!="string")throw new Error(`Shader attribute ${y} is invalid.`);let R=w(c.node);return {name:c.name,type:c.type,node:R?o.classify(R,`attribute ${c.name}`):null}}):[],g=typeof t.builder.getBindings=="function"?Reflect.apply(t.builder.getBindings,t.builder,[]):[],k=Array.isArray(g)?g.map((c,y)=>{if(!l(c)||!Array.isArray(c.bindings))throw new Error(`Shader bind group ${y} is invalid.`);return {name:typeof c.name=="string"?c.name:`group-${y}`,bindings:c.bindings.map((R,b)=>{if(!l(R)||typeof R.name!="string")throw new Error(`Shader binding ${y}/${b} is invalid.`);let A=ze(R),v;if(A==="NodeUniformsGroup"){if(!Array.isArray(R.uniforms))throw new Error(`Shader uniform group ${y}/${b} has no member list.`);let B=R.uniforms.map((x,U)=>{if(!l(x)||typeof x.name!="string"||typeof x.getType!="function")throw new Error(`Shader uniform ${y}/${b}/${U} is invalid.`);let O=Reflect.apply(x.getType,x,[]);if(typeof O!="string")throw new Error(`Shader uniform ${y}/${b}/${U} has no stable type.`);return {name:x.name,type:O}});v=ar(t.builder,R.name,a)??B;}return {name:R.name,kind:A,...fr(R,A),...v===void 0?{}:{uniforms:v}}})}}):[],N=l(t.builder.observer)?{hasNode:t.builder.observer.hasNode===true,hasAnimation:t.builder.observer.hasAnimation===true}:null,S=p(c=>typeof t.builder[c]=="string"?t.builder[c]:null,"shader");return {key:t.key,vertexShader:S("vertexShader"),fragmentShader:S("fragmentShader"),computeShader:S("computeShader"),declarations:a,attributes:f,bindGroups:k,updateNodes:i.filter(c=>!o.shouldOmitUpdateNode(c)).map(c=>o.classify(c,"updateNodes")),updateBeforeNodes:s.filter(c=>!o.shouldOmitUpdateNode(c)).map(c=>o.classify(c,"updateBeforeNodes")),updateAfterNodes:d.filter(c=>!o.shouldOmitUpdateNode(c)).map(c=>o.classify(c,"updateAfterNodes")),requirements:cr([S("vertexShader"),S("fragmentShader"),S("computeShader")]),observer:N,hardwareClipping:t.builder.hardwareClipping===true}}p(lr,"entryFromSnapshot");function Ze(t){return (t??"").replace(/\b(nodeUniform|nodeVar|nodeVarying|nodeAttribute|NodeBuffer_|nodeCode)\d+\b/gu,"$1#").split(`
|
|
2
2
|
`).sort().join(`
|
|
3
|
-
`)}
|
|
3
|
+
`)}p(Ze,"canonicalShader");function tn(t){let{key:e,vertexShader:n,fragmentShader:r,computeShader:o,...i}=t;return JSON.stringify({...i,vertexShader:Ze(n),fragmentShader:Ze(r),computeShader:Ze(o)})}p(tn,"captureEntryState");var W=class{static{p(this,"CapturePool");}values=[];#t=new Map;intern(e,n=JSON.stringify(e)){let r=this.#t.get(n);return r===void 0&&(r=this.values.length,this.#t.set(n,r),this.values.push(e)),r}};function pr(t){let e=new W,n=new W,r=new W,o=new W,i=new W,s=new W,d=new W,a={};for(let u of Object.keys(t).sort()){let f=t[u];if(f===void 0)continue;let g=p(c=>c===null?null:e.intern(c,c),"moduleAt"),k=f.declarations.map(c=>[n.intern(c.address),c.instance,c.type,c.stage,c.name]),N=f.requirements.length===0?void 0:s.intern(f.requirements),S={vertex:g(f.vertexShader),fragment:g(f.fragmentShader),compute:g(f.computeShader),declarations:k,layout:r.intern(f.bindGroups),attributes:o.intern(f.attributes.map(c=>({name:c.name,type:c.type,node:c.node===null?null:n.intern(c.node)}))),updates:[i.intern(f.updateNodes.map(c=>n.intern(c))),i.intern(f.updateBeforeNodes.map(c=>n.intern(c))),i.intern(f.updateAfterNodes.map(c=>n.intern(c)))],...N===void 0?{}:{requirements:N},observer:f.observer,hardwareClipping:f.hardwareClipping};a[u]=d.intern(S);}return {modules:e.values,nodes:n.values,layouts:r.values,attributePlans:o.values,updatePlans:i.values,requirementPlans:s.values,states:d.values,entries:a}}p(pr,"poolCaptureEntries");function hr(t,e){let n={},r=[],o=new lt,i=ir(t);for(let s of ve.filter(d=>d.scene===t))try{let d=lr(s,o,i),a=st(d);if(a)throw new Error(`Shader key "${d.key}" captured the automatic input container "${a}". Automatically discovered input containers are capture-only; register a stable application container or retain the value under the material/compute root.`);let u=at(d);if(u)throw new Error(`Shader key "${d.key}" captured the transient renderer path "${u}". Renderer contexts must use a semantic recipe, and renderer back-references are never stable replay roots.`);let f=n[d.key];f?tn(f)!==tn(d)&&r.push(`Shader key "${d.key}" produced conflicting precompiled states in one capture.`):n[d.key]=d;}catch(d){r.push(d instanceof Error?d.stack??d.message:String(d));}return {protocolVersion:2,compatibility:je,scene:t,...K===void 0?{}:{automatic:{prefix:K}},...pr(n),skipped:[...xe],errors:r,stats:{...M},timing:{...re===void 0?{}:{readiness:re},...oe===void 0?{}:{lastBuild:oe},settled:Date.now()},provenance:e}}p(hr,"buildPayload");async function gr(){let t=globalThis,e=l(t.navigator)?t.navigator:{},n=ve.find(f=>f.scene===ee)?.renderer,r=l(n?.backend)?n.backend:{},o=l(r.device)?r.device:{},i=l(o.adapterInfo)?o.adapterInfo:void 0;if(i===void 0&&l(e.gpu)&&typeof e.gpu.requestAdapter=="function"){let f=await Promise.race([Promise.resolve(Reflect.apply(e.gpu.requestAdapter,e.gpu,[])).catch(()=>{}),new Promise(g=>setTimeout(()=>g(void 0),Mn))]);l(f)&&(i=l(f.info)?f.info:f);}let s=["description","device","architecture","vendor"].flatMap(f=>{let g=i?.[f];return typeof g=="string"&&g.length>0?[g]:[]}),d=o.features,u=typeof(d!==null&&typeof d=="object"?Reflect.get(d,Symbol.iterator):void 0)=="function"?[...d].filter(f=>typeof f=="string").sort():[];return {userAgent:typeof e.userAgent=="string"?e.userAgent:"unknown browser",adapter:[...new Set(s)].join(" \xB7 ")||"WebGPU adapter",features:u}}p(gr,"captureProvenance");function Qe(t){if(_.captureId===void 0)return;let e=Reflect.get(globalThis,"dispatchEvent"),n=Reflect.get(globalThis,"CustomEvent");if(!(typeof e!="function"||typeof n!="function"))try{let r=Reflect.construct(n,["three-blocks:shader-capture",{detail:{...t,active:!0}}]);Reflect.apply(e,globalThis,[r]);}catch{}}p(Qe,"publishOverlayCaptureState");async function ge(t,e){let n=_.captureId!==void 0,r=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",..._.token===void 0?{}:{"X-Three-Blocks-Capture-Token":_.token}},body:JSON.stringify(n?{captureId:_.captureId,payload:e}:e)});if(!r.ok){let o=await r.text().catch(()=>""),i=o;try{let s=JSON.parse(o);l(s)&&typeof s.error=="string"&&(i=s.error);}catch{}throw n&&Qe({stage:"error",scene:ee,error:i||`Shader devtools endpoint ${t} returned HTTP ${r.status}.`}),new Error(i||`Shader devtools endpoint ${t} returned HTTP ${r.status}.`)}if(n&&t===pe&&l(e)&&Qe(e),n&&t===nt){let o=await r.json().catch(()=>{}),i=l(o)&&Number.isSafeInteger(o.pipelines)?Number(o.pipelines):0;Qe({stage:"complete",scene:ee,pipelines:i});}if(t===nt&&_.sessionKey!==void 0)try{let o=Reflect.get(globalThis,"sessionStorage"),i=l(o)?o.removeItem:void 0;typeof i=="function"&&Reflect.apply(i,o,[_.sessionKey]);}catch{}}p(ge,"postJson");async function et(){await ge(pe,Te(true,"writing")),_.capture&&!ye&&(await ge(nt,hr(ee,await gr())),ye=true,we++,Q&&clearTimeout(Q),Q=void 0);}p(et,"reportSettled");function tt(t){console.error("[three-blocks] shader capture report failed",t);}p(tt,"reportSettledFailure");function Te(t,e=t?"writing":"building"){return {protocolVersion:1,compatibility:je,transform:_.transform,scene:ee,settled:t,stage:e,stats:{...M},timing:{...re===void 0?{}:{readiness:re},...oe===void 0?{}:{lastBuild:oe},...t?{settled:Date.now()}:{}},...K===void 0?{}:{automatic:{prefix:K}},skipped:[...xe]}}p(Te,"telemetryPayload");function yr(t,e){let n=t;for(let r of e.split(".")){if(!l(n)&&typeof n!="function")return;n=Reflect.get(n,r);}return n}p(yr,"readinessGlobalValue");function mr(t,e=_.readiness){if(e.selector!==void 0){let n=Reflect.get(t,"document");if(!l(n))return false;let r=Reflect.get(n,"querySelector");if(typeof r!="function"||Reflect.apply(r,n,[e.selector])===null)return false}if(e.global!==void 0){let n=yr(t,e.global);return n===true?true:an(n)?(n!==fe&&(fe=n,le=false,Promise.resolve(n).then(()=>{fe===n&&(le=true);},r=>{fe===n&&(le=false),console.error(`[three-blocks] shader readiness global ${e.global} rejected`,r);})),le):false}return true}p(mr,"pageLoadingIsComplete");function hn(){if(_.capture&&ye)return;He||(He=true,queueMicrotask(()=>{He=false,ge(pe,Te(false)).catch(()=>{});})),Q&&clearTimeout(Q);let t=++we,e=globalThis,n=e.requestAnimationFrame;if(typeof n=="function"&&_.settleFrames>0){let o=_.settleFrames,i=p(()=>{if(t!==we)return;if(!mr(e)){Reflect.apply(n,e,[i]);return}let s=Date.now();re??=s,Ne??=s;let d=Reflect.get(e,"document"),a=Reflect.get(globalThis,Symbol.for("three-blocks.shader-capture.worker-visible.v1")),u=_.visibilityGuard&&(l(d)&&d.hidden===true||a===false),f=Math.max(0,s-Ne);if(Ne=s,u){ne||(ne=true,ge(pe,Te(false,"hidden")).catch(()=>{})),Reflect.apply(n,e,[i]);return}if(it+=Math.min(f,250),ne||(ne=true,ge(pe,Te(false,"settling")).catch(()=>{})),it>=(_.settleTimeoutMs??3e4)){et().catch(tt);return}if(o--,o<=0){et().catch(tt);return}Reflect.apply(n,e,[i]);},"frame");Reflect.apply(n,e,[i]);return}let r=Math.max(250,Math.min(3e4,_.settleFrames*(1e3/60)));Q=setTimeout(()=>{Q=void 0,t===we&&et().catch(tt);},r);}p(hn,"scheduleSettledReport");export{cn as activeShaderCaptureScene,ze as capturedBindingKind,Kn as configureThreeBlocksShaderCapture,fn as instrumentThreeBlocksShaderBuilder,mr as pageLoadingIsComplete,Yn as prepareThreeBlocksShaderRenderer,ln as recordThreeBlocksShaderBuild,qt as wrapThreeBlocksCaptureTimedBuild};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {b,a as a$3}from'./chunk-
|
|
2
|
+
import {b,a as a$3}from'./chunk-UQOPSJR6.js';import'./chunk-76WRV5MZ.js';import'./chunk-JMS5NTP7.js';import'./chunk-3TQVLKUH.js';import'./chunk-WNNN3UJI.js';import {a as a$2,b as b$1,c as c$1}from'./chunk-NE7SC2BX.js';import'./chunk-ZT6T2W4B.js';import'./chunk-NEWSG5RX.js';import {a as a$1}from'./chunk-ZDNZCQUQ.js';import {j,a as a$4,c}from'./chunk-5L2VS3BN.js';import {a}from'./chunk-HOZDD6PW.js';import {randomUUID}from'crypto';import {mkdir,realpath,writeFile,rename,rm}from'fs/promises';import F from'path';import {PNG}from'pngjs';var ye="virtual:three-blocks-devtools/browser-smoke",ve=`\0${ye}`,Ke=`/@id/__x00__${ye}`,Be=9e4;async function Ee(){try{let[e,r]=await Promise.all([import('playwright'),import('vite')]);return {chromium:e.chromium,vite:r}}catch(e){throw new Error('Browser smoke and preview require the optional "playwright" and "vite" packages. Install both in the project and run `npx playwright install chromium`.',{cause:e})}}a(Ee,"loadBrowserSmokeTools");function V(e,r,o,t,n){let a=e??n;if(!Number.isSafeInteger(a)||a<o||a>t)throw new Error(`${r} must be an integer in ${o}...${t}.`);return a}a(V,"boundedInteger");function _e(e,r,o,t,n){let a=e??n;if(!Number.isFinite(a)||a<o||a>t)throw new Error(`${r} must be a finite number in ${o}...${t}.`);return a}a(_e,"boundedRatio");function Pe(e){let r=e??"/";if(r.length===0||r.length>2048||/[\u0000-\u001f\u007f]/u.test(r))throw new Error("Browser smoke route must be a bounded project URL.");let o=new URL(r,"http://three-blocks.invalid/");if(o.origin!=="http://three-blocks.invalid"||o.hash.length>0)throw new Error("Browser smoke route must stay within the project and have no fragment.");return `${o.pathname}${o.search}`}a(Pe,"safeRoute");function N(e,r){return e[r]===true}a(N,"booleanField");function $(e,r){if(!a$1(e)||!a$1(e.value))return {source:"missing",backend:"unknown",worker:false,workerReady:false,assetsReady:false,compileEnd:false,textEnabled:r,textReady:!r,firstFrame:false};let o=e.value,t=e.source==="public";if(t&&o.protocolVersion!==1)return {source:"public",backend:"unknown",worker:false,workerReady:false,assetsReady:false,compileEnd:false,textEnabled:r,textReady:!r,firstFrame:false};let n=a$1(o.readiness)?o.readiness:o,a=o.worker,d=t&&a$1(a)?a.offscreenCanvas===true&&a.visible===true:a===true;return {source:t?"public":"legacy",backend:t&&a$1(a)?a.offscreenCanvas===true?"OffscreenCanvas":"MainThread":a===true?"OffscreenCanvas":"unknown",worker:d,workerReady:N(n,"workerReady"),assetsReady:N(n,"assetsReady")||N(n,"loadEnd"),compileEnd:N(n,"compileEnd"),textEnabled:r,textReady:!r||N(n,"textReady"),firstFrame:N(n,"firstFrame")}}a($,"parseBrowserSmokeLifecycle");function ie(e){let r=PNG.sync.read(e),o=Math.floor(r.width*.25),t=Math.floor(r.width*.75),n=Math.floor(r.height*.25),a=Math.floor(r.height*.75),d=0,c=0;for(let f=n;f<a;f+=2)for(let p=o;p<t;p+=2){let h=(f*r.width+p)*4,l=r.data[h],i=r.data[h+1],s=r.data[h+2];l===void 0||i===void 0||s===void 0||(d+=Math.max(l,i,s),c+=1);}return c===0?0:d/c}a(ie,"screenshotLuminance");function Je(){return `
|
|
3
3
|
import * as THREE from 'three/webgpu';
|
|
4
4
|
import { createAssetLoaderRegistry, createAssetManager, createThreeAssetAdapters, defineAssets } from 'three-blocks/assets';
|
|
5
5
|
import { SceneHotReloader } from 'three-blocks/hmr';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var fs=require('fs'),module$1=require('module'),d=require('path'),shaders=require('three-blocks/shaders'),vite=require('three-blocks/vite');require('fs/promises'),require('crypto');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var d__default=/*#__PURE__*/_interopDefault(d);var x=Object.defineProperty;var i=(e,r)=>x(e,"name",{value:r,configurable:true});function g(e){let r=e.split("?",1)[0];return r===void 0?false:r.split(d__default.default.sep).join("/").endsWith("/build/three.webgpu.js")}i(g,"isThreeWebGPUModule");function M(e){let r=/^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/u.exec(e);return r?.[1]==="0"&&r[2]==="185"}i(M,"supportedVersion");function h(e,r,t={}){if(!M(r))throw new Error(`Shader provider transform ${shaders.THREE_WEBGPU_R185_COMPATIBILITY} supports Three.js 0.185.x; received "${r}".`);let n=vite.transformThreeWebgpuProviderHooks(e,{threeVersion:r,...t.threeRevision===void 0?{}:{threeRevision:t.threeRevision},id:"three/build/three.webgpu.js"}),s=n.state==="already-applied",o=n.code;return t.instrumentCapture&&(o=vite.transformThreeWebgpuCaptureInstrumentation(o,{...t.captureRuntimeImport===void 0?{}:{runtimeImport:t.captureRuntimeImport}}).code),{code:o,alreadyPresent:s,captureApplied:t.instrumentCapture===true}}i(h,"applyShaderProviderTransform");var y="@three-blocks/devtools/webpack-loader";function w(e){if(typeof e=="string")return e===y;if(Array.isArray(e))return e.some(w);if(e===null||typeof e!="object")return false;let r=e;return r.loader===y||w(r.use)}i(w,"webpackRuleUsesShaderLoader");function E(e){let r=S(process.cwd()),t=i(s=>T(r,s),"exact"),n={...e.resolve?.alias,...t("three")===void 0?{}:{three$:t("three")},...t("three/webgpu")===void 0?{}:{"three/webgpu$":t("three/webgpu")},...t("three/tsl")===void 0?{}:{"three/tsl$":t("three/tsl")},"three/addons":d__default.default.join(r.root,"examples/jsm"),"three/examples/jsm":d__default.default.join(r.root,"examples/jsm")};return {...e,resolve:{...e.resolve,alias:n}}}i(E,"withTargetThreeAliases");function k(e){let r=E(e),t=r.module?.rules??[];return t.some(w)?r:{...r,module:{...r.module,rules:[...t,{enforce:"pre",test:/three[\\/]build[\\/]three\.webgpu\.js$/u,use:[{loader:y}]}]}}}i(k,"withShaderWebpackRule");function Sr(e){return k(e)}i(Sr,"withThreeBlocksWebpack");function br(e){let t=e.webpack;return {...e,webpack(n,...s){let o=t?.call(this,n,...s)??n,a=s[0];return a!==null&&typeof a=="object"&&Reflect.get(a,"isServer")===true?E(o):k(o)}}}i(br,"withThreeBlocksNext");function S(e){let r;try{r=module$1.createRequire(d__default.default.join(d__default.default.resolve(e),"package.json")).resolve("three");}catch(o){throw new Error("The shader adapter could not resolve Three.js from the target project.",{cause:o})}let t=d__default.default.dirname(r),n,s;for(;;){let o=d__default.default.join(t,"package.json");if(fs.existsSync(o)){let c=JSON.parse(fs.readFileSync(o,"utf8"));if(c.name==="three"){n=o,s=c;break}}let a=d__default.default.dirname(t);if(a===t)break;t=a;}if(n===void 0)throw new Error(`The shader adapter could not locate Three.js package metadata from ${r}.`);if(typeof s?.version!="string"||s.version.length===0)throw new Error(`The resolved Three.js package has no version: ${n}`);return {root:d__default.default.dirname(n),version:s.version,exports:s.exports}}i(S,"resolveThreePackage");function F(e=process.cwd()){return S(e).version}i(F,"resolveShaderAdapterThreeVersion");function R(e){return {version:e.threeVersion??F(e.root),capture:e.capture??process.env.THREE_BLOCKS_SHADER_TOOL==="1"}}i(R,"resolvedOptions");function Er(e,r,t={}){if(!g(r))return null;let n=R(t);return h(e,n.version,{instrumentCapture:n.capture})}i(Er,"transformThreeWebGPUModule");function m(e){if(typeof e=="string")return e;if(Array.isArray(e)){for(let t of e){let n=m(t);if(n!==void 0)return n}return}if(e===null||typeof e!="object")return;let r=e;for(let t of ["browser","import","default"]){let n=m(r[t]);if(n!==void 0)return n}}i(m,"exportTarget");function T(e,r){if(e.exports===null||typeof e.exports!="object")return;let t=e.exports,n=r==="three"?".":`./${r.slice(6)}`,s=m(t[n]);if(s!==void 0)return d__default.default.resolve(e.root,s);for(let[o,a]of Object.entries(t)){let c=o.indexOf("*");if(c<0)continue;let u=o.slice(0,c),l=o.slice(c+1);if(!n.startsWith(u)||!n.endsWith(l))continue;let p=n.slice(u.length,n.length-l.length),f=m(a);if(f!==void 0)return d__default.default.resolve(e.root,f.replaceAll("*",p))}}i(T,"resolveThreeExport");function kr(e={}){let r=e.root??process.cwd(),t=S(r),n={version:e.threeVersion??t.version,capture:e.capture??process.env.THREE_BLOCKS_SHADER_TOOL==="1"};return {name:"three-blocks-shader-provider",setup(s){s.onResolve?.({filter:/^three(?:\/.*)?$/},o=>{let a=T(t,o.path);return a===void 0?void 0:{path:a}}),s.onLoad({filter:/three[\\/]build[\\/]three\.webgpu\.js$/},async o=>{let a=await new Promise((u,l)=>{fs.readFile(o.path,"utf8",(p,f)=>{p?l(p):u(f);});});return {contents:h(a,n.version,{instrumentCapture:n.capture}).code,loader:"js"}});}}}i(kr,"createEsbuildShaderPlugin");function Rr(e={}){let r=R(e);return {name:"three-blocks-shader-provider",enforce:"pre",transform(t,n){return g(n)?{code:h(t,r.version,{instrumentCapture:r.capture}).code,map:null}:null}}}i(Rr,"createRollupShaderPlugin");exports.a=i;exports.b=y;exports.c=Sr;exports.d=br;exports.e=F;exports.f=Er;exports.g=kr;exports.h=Rr;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {b,e as e$2,a as a$3,d as d$1,c as c$2,j as j$1,i as i$1,f as f$2,h as h$2,g as g$1}from'./chunk-WNNN3UJI.js';import {a as a$4}from'./chunk-ZT6T2W4B.js';import {e as e$1,f,b as b$1,h as h$1,g,c as c$3}from'./chunk-NEWSG5RX.js';import {a as a$2,c as c$1}from'./chunk-ZDNZCQUQ.js';import {j,a as a$1,c,d,k as k$1,h,e,i,f as f$1}from'./chunk-5L2VS3BN.js';import {a}from'./chunk-HOZDD6PW.js';import {realpath,readdir,readFile,lstat,mkdir,writeFile}from'fs/promises';import ve from'os';import P from'path';import {SHADER_ADDRESS_SCHEMA_VERSION,SHADER_RECIPE_SCHEMA_VERSION,SHADER_HYDRATION_SCHEMA_VERSION}from'three-blocks/shaders';import {createRequire}from'module';var Be=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".wgsl",".glsl",".vert",".frag",".json",".css"],Ie=new Set(Be),Pe=/^(?:three-blocks\.shaders\.json|(?:precompile|three-blocks\.shaders)\.config\.(?:cjs|cts|js|mjs|mts|ts))$/u,lr=/(?:^|\/)scene\.(?:cjs|cts|js|jsx|mjs|mts|ts|tsx)$/u,ur=/\b(?:export\s+)?(?:async\s+)?function\s+createScene\b|\bcreateScene\s*=\s*(?:async\s*)?\(/u,fr=/\b(?:[A-Za-z_$][\w$]*\.)*(?:shaders|shaderCache|sceneShaders)\s*\.\s*(?:material|pipeline|compute|container)\s*\(/u,hr=/\b(import|export)(?!\s*\()\s*(type\b\s*)?(?:[^"'();]*?\bfrom\s*)?["']([^"']+)["']/gu,mr=/\bimport\s*\(\s*["']([^"']+)["']\s*\)/gu,pr=/\b(?:import|export)(?!\s*\()\s*(?:[^"'();]*?\bfrom\s*)?["']([^"']+)["']|\bimport\s*\(\s*["']([^"']+)["']\s*\)/gu,gr=/^[0-9A-Za-z][0-9A-Za-z.+_-]{0,127}$/u,Oe=4096,Sr="./shaders";function qe(e,r){let t=P.relative(e,r).split(P.sep).join("/");if(t.length===0||/[\u0000-\u001f\u007f]/u.test(t))throw new Error("Semantic input has an unsafe relative path.");return t}a(qe,"portableRelativePath");function Ce(e,r){try{return new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch{throw new Error(`Shader-relevant source ${JSON.stringify(r)} is not valid UTF-8.`)}}a(Ce,"sourceText");function Ae(e,r){let t="",n="code";for(let i=0;i<e.length;i++){let s=e[i]??"",a=e[i+1]??"";if(n==="code"){if(s==="/"&&a==="/"){t+=" ",n="line-comment",i++;continue}if(s==="/"&&a==="*"){t+=" ",n="block-comment",i++;continue}if(s==="'"||s==='"'||s==="`"){n=s==="'"?"single":s==='"'?"double":"template",t+=r?s:" ";continue}t+=s;continue}if(n==="line-comment"){s===`
|
|
3
|
+
`?(t+=`
|
|
4
|
+
`,n="code"):t+=" ";continue}if(n==="block-comment"){s==="*"&&a==="/"?(t+=" ",n="code",i++):t+=s===`
|
|
5
|
+
`?`
|
|
6
|
+
`:" ";continue}let l=n==="single"?"'":n==="double"?'"':"`";if(s==="\\"&&a.length>0){t+=r?`${s}${a}`:" ",i++;continue}t+=r?s:s===`
|
|
7
|
+
`?`
|
|
8
|
+
`:" ",s===l&&(n="code");}return t}a(Ae,"lexicalSource");function yr(e){let r=new Set,t=Ae(e,true);for(let n of t.matchAll(hr))n[2]===void 0&&n[3]!==void 0&&r.add(n[3]);for(let n of t.matchAll(mr))n[1]!==void 0&&r.add(n[1]);return [...r].sort()}a(yr,"importSpecifiers");function wr(e){let r=new Set;for(let t of Ae(e,true).matchAll(pr)){let n=t[1]??t[2];n!==void 0&&r.add(n);}return [...r].sort()}a(wr,"runtimeSpecifiers");function Ge(e){return (e.split(/[?#]/u,1)[0]??e).replaceAll("\\","/")}a(Ge,"cleanSpecifier");function vr(e,r,t){let n=Ge(r),i;if(n.startsWith("./")||n.startsWith("../"))i=P.posix.normalize(P.posix.join(P.posix.dirname(e),n));else if(n.startsWith("@/"))i=`src/${n.slice(2)}`;else if(n.startsWith("/src/"))i=n.slice(1);else return;if(i===".three-blocks"||i.startsWith(".three-blocks/"))return;let s=P.posix.extname(i).toLowerCase(),a=new Set([i]);if(s.length===0||!Ie.has(s)){for(let l of Be)a.add(`${i}${l}`);for(let l of Be)a.add(`${i}/index${l}`);}else if([".js",".mjs",".cjs",".jsx"].includes(s)){let l=i.slice(0,-s.length);for(let u of [".ts",".tsx",".mts",".cts"])a.add(`${l}${u}`);}return [...a].find(l=>t.has(l))}a(vr,"resolveProjectImport");function br(e,r){let t=Ae(r,false);return lr.test(e)||ur.test(t)||fr.test(t)}a(br,"isShaderRoot");async function me(e,r){let t=await realpath(e);if(r!==void 0){let o={},h=0;for(let m of r){let b=await j(t,P.join(t,m),a$1.semanticInput,"Declared shader semantic input");if(h+=b.data.byteLength,h>a$1.semanticTotal)throw new Error("Declared shader semantic inputs exceed the total inspection size limit.");o[m]=c(b.data);}return o}let n=new Map,i=P.join(t,"src");if(await d(i))for(let o of await k$1(t,i,h=>Ie.has(P.extname(h).toLowerCase()))){let h=await j(t,o,a$1.semanticInput,"Shader semantic input");n.set(qe(t,o),h.data);}for(let o of await readdir(t,{withFileTypes:true})){if(!o.isFile()||!Pe.test(o.name)&&!Ie.has(P.extname(o.name).toLowerCase()))continue;let h=await j(t,P.join(t,o.name),a$1.semanticInput,Pe.test(o.name)?"Shader configuration input":"Shader semantic input");n.set(o.name,h.data);}if(n.size>Oe)throw new Error(`Shader input discovery exceeds the ${Oe}-file limit.`);let s=new Set,a=new Map;for(let[o,h]of n){if(!o.includes("/")&&Pe.test(o)&&s.add(o),!o.startsWith("src/"))continue;let m=Ce(h,o);a.set(o,m),br(o,m)&&s.add(o);}if(s.size===0)throw new Error("No shader registration or scene source root was found.");let l=new Set,u=[...s].sort();for(;u.length>0;){let o=u.shift();if(o===void 0||l.has(o))continue;let h=n.get(o);if(h===void 0)continue;l.add(o);let m=a.get(o)??Ce(h,o);for(let b of yr(m)){let R=vr(o,b,n);R!==void 0&&!l.has(R)&&u.push(R);}u.sort();}let f=0,w={};for(let o of [...l].sort()){let h=n.get(o);if(h===void 0)throw new Error(`Shader input ${JSON.stringify(o)} disappeared during inspection.`);if(f+=h.byteLength,f>a$1.semanticTotal)throw new Error("Semantic shader inputs exceed the total inspection size limit.");w[o]=c(h);}return w}a(me,"snapshotShaderInputs");function je(e){if(typeof e=="string")return e;if(a$2(e))return je(e.import)??je(e.default)}a(je,"conditionalImportTarget");async function ze(e,r){let t=e;for(;;){let n=P.join(t,"node_modules",...r.split("/"),"package.json");if(await d(n)){let s=await h(n,a$1.packageJson,`${r} package.json`),a=JSON.parse(s.data.toString("utf8"));if(!a$2(a)||a.name!==r||typeof a.version!="string"||!gr.test(a.version))throw new Error(`Installed ${r} package metadata is invalid.`);return {root:P.dirname(s.path),manifest:a}}let i=P.dirname(t);if(i===t)break;t=i;}throw new Error(`Cannot verify the installed ${r} package.`)}a(ze,"findInstalledPackage");async function Er(e$1,r){if(!a$2(r.exports))throw new Error("Installed three-blocks package has no public exports map.");let t=je(r.exports[Sr]);if(t===void 0||!t.startsWith("./"))throw new Error("Installed three-blocks shader export has no import target.");let n=await realpath(e$1),i=[P.resolve(n,t)],s=new Map,a=0;for(;i.length>0;){let u=i.shift();if(u===void 0)break;let f=await h(u,a$1.semanticInput,"Three Blocks shader runtime module");if(!e(n,f.path)||f.path===n)throw new Error("Three Blocks shader runtime closure escapes its package.");let w=qe(n,f.path);if(s.has(w))continue;if(a+=f.data.byteLength,a>a$1.semanticTotal)throw new Error("Three Blocks shader runtime closure exceeds the inspection limit.");s.set(w,c(f.data));let o=Ce(f.data,w);for(let h of wr(o)){let m=Ge(h);if(!m.startsWith("./")&&!m.startsWith("../"))continue;let b=P.resolve(P.dirname(f.path),m);if(!e(n,b))throw new Error("Three Blocks shader runtime import escapes its package.");i.push(b);}if(i.sort(),s.size+i.length>Oe)throw new Error("Three Blocks shader runtime closure exceeds the file limit.")}let l=[...s].sort((u,f)=>u[0].localeCompare(f[0])).map(([u,f])=>`${u}\0${f}`).join(`
|
|
9
|
+
`);return c(l)}a(Er,"shaderRuntimeClosure");async function se(e){let[r,t]=await Promise.all([ze(e,"three"),ze(e,"three-blocks")]);return {three:String(r.manifest.version),threeBlocks:String(t.manifest.version),threeBlocksShaderClosure:await Er(t.root,t.manifest)}}a(se,"readInstalledShaderRuntime");var Je=4096,Rr=createRequire(import.meta.url),Ye,k=new Proxy({},{get(e,r){return Ye??=Rr("typescript"),Reflect.get(Ye,r)}});function z(e){let r=e;for(;k.isParenthesizedExpression(r)||k.isAsExpression(r)||k.isSatisfiesExpression(r)||k.isNonNullExpression(r);)r=r.expression;return r}a(z,"unwrap");function xr(e){if(k.isIdentifier(e)||k.isStringLiteral(e)||k.isNumericLiteral(e))return e.text}a(xr,"propertyName");function pe(e,r){let t=new Map;for(let n of e.properties){if(!k.isPropertyAssignment(n))throw new Error(`${r} may contain only static property assignments.`);let i=xr(n.name);if(i===void 0||t.has(i))throw new Error(`${r} contains a computed or duplicate property.`);t.set(i,n.initializer);}return t}a(pe,"properties");function ge(e,r){if(e===void 0)throw new Error(`${r} is missing.`);let t=z(e);if(!k.isObjectLiteralExpression(t))throw new Error(`${r} must be a static object literal.`);return t}a(ge,"objectLiteral");function Se(e,r){if(e===void 0)throw new Error(`${r} is missing.`);let t=z(e);if(!k.isStringLiteral(t)&&!k.isNoSubstitutionTemplateLiteral(t))throw new Error(`${r} must be a string literal.`);return t.text}a(Se,"stringLiteral");function ye(e,r){if(e===void 0)throw new Error(`${r} is missing.`);let t=z(e);if(!k.isNumericLiteral(t))throw new Error(`${r} must be a numeric literal.`);return Number(t.text)}a(ye,"numericLiteral");function Xe(e,r){if(e===void 0)throw new Error(`${r} is missing.`);let t=z(e);if(!k.isArrayLiteralExpression(t))throw new Error(`${r} must be a static array literal.`);return t.elements}a(Xe,"arrayLiteral");function Tr(e,r){if(e===void 0)throw new Error(`${r} is missing.`);let t=z(e);if(t.kind===k.SyntaxKind.NullKeyword)return null;if(!k.isNumericLiteral(t))throw new Error(`${r} must be null or a numeric literal.`);return Number(t.text)}a(Tr,"numericOrNullLiteral");function $r(e){return e.parseDiagnostics??[]}a($r,"parseDiagnostics");function Ze(e,r,t,n){let i=k.createSourceFile(r,e,k.ScriptTarget.Latest,true,k.ScriptKind.TS),s=$r(i);if(s.length>0)throw new Error(`Shader manifest is not valid TypeScript: ${k.flattenDiagnosticMessageText(s[0]?.messageText??"parse error"," ")}`);let a$1=i.statements.filter(k.isExportAssignment).filter(m=>!m.isExportEquals);if(a$1.length!==1)throw new Error("Shader manifest must contain exactly one default export.");let l=pe(ge(a$1[0]?.expression,"Shader manifest default export"),"Shader manifest"),u=l.get("version");if(u===void 0||!k.isNumericLiteral(z(u))||Number(z(u).getText(i))!==3)throw new Error("Shader manifest version must be the numeric literal 3.");if(Se(l.get("scene"),"Shader manifest scene")!==t)throw new Error(`Shader manifest scene does not match "${t}".`);if(n){if(Se(l.get("three"),"Shader manifest Three.js version")!==n.three||Se(l.get("threeBlocks"),"Shader manifest Three Blocks version")!==n.threeBlocks)throw new Error("Shader manifest runtime versions do not match its receipt.");let m=pe(ge(l.get("runtime"),"Shader manifest runtime"),"Shader manifest runtime");if(Se(m.get("id"),"Shader manifest runtime id")!==n.compatibility||ye(m.get("address"),"Shader manifest address schema")!==n.address||ye(m.get("recipe"),"Shader manifest recipe schema")!==n.recipe||ye(m.get("hydration"),"Shader manifest hydration schema")!==n.hydration)throw new Error("Shader manifest runtime compatibility schemas do not match its receipt.")}let f=pe(ge(l.get("entries"),"Shader manifest entries"),"Shader manifest entries");if(f.size===0||f.size>Je)throw new Error(`Shader manifest must contain between 1 and ${Je} entries.`);let w=Xe(l.get("modules"),"Shader manifest modules").map((m,b)=>{let R=z(m);if(!k.isStringLiteral(R)&&!k.isNoSubstitutionTemplateLiteral(R))throw new Error(`Shader manifest module ${b} must be a WGSL string literal.`);if(R.text.length===0)throw new Error(`Shader manifest module ${b} is empty.`);return R.text}),o=Xe(l.get("states"),"Shader manifest states").map((m,b)=>{let R=pe(ge(m,`Shader manifest state ${b}`),`Shader manifest state ${b}`),E=a((T,B)=>{let N=Tr(R.get(T),`Shader manifest state ${b} ${T}`);if(N===null)return false;let p=w[N];if(p===void 0||!p.includes(B))throw new Error(`Shader manifest state ${b} ${T} does not reference a ${B} module.`);return true},"moduleAt"),I=E("vertex","@vertex"),O=E("fragment","@fragment"),A=E("compute","@compute");if(A&&(I||O))throw new Error(`Shader manifest state ${b} mixes render and compute stages.`);if(!A&&!I&&!O)throw new Error(`Shader manifest state ${b} contains no shader stage.`);return {vertex:I,fragment:O,compute:A}}),h={render:0,vertex:0,fragment:0,compute:0};for(let[m,b]of f){if(m.length===0||/[\u0000-\u001f\u007f]/.test(m))throw new Error("Shader manifest contains an invalid entry key.");let R=ye(b,`Shader manifest entry "${m}"`),E=o[R];if(E===void 0)throw new Error(`Shader manifest entry "${m}" references an absent state.`);(E.vertex||E.fragment)&&(h.render+=1),E.vertex&&(h.vertex+=1),E.fragment&&(h.fragment+=1),E.compute&&(h.compute+=1);}return h}a(Ze,"inspectPrecompiledManifest");function Mr(e,r){return e.render===r.render&&e.vertex===r.vertex&&e.fragment===r.fragment&&e.compute===r.compute}a(Mr,"sameCoverage");function Pr(e){let r=e.some(n=>n.state==="invalid")?"invalid":e.some(n=>n.state==="missing")?"missing":e.some(n=>n.state==="stale")?"stale":"fresh",t=e.filter(n=>n.state===r);return {state:r,reason:r==="fresh"?`${e.length} configured shader scene${e.length===1?" is":"s are"} fresh.`:t.map(n=>`${n.scene}: ${n.reason}`).join("; ")}}a(Pr,"classifyMatrix");function Br(e,r){let t=e.tool;if(!t)return "Shader receipt has no public tool compatibility metadata.";if(t.compatibility!==r)return "Shader receipt targets a different runtime compatibility contract.";if(t.transform!==b)return "Shader receipt uses a different provider transform version.";if(t.address!==SHADER_ADDRESS_SCHEMA_VERSION||t.recipe!==SHADER_RECIPE_SCHEMA_VERSION||t.hydration!==SHADER_HYDRATION_SCHEMA_VERSION)return "Shader receipt uses incompatible address, recipe, or hydration schemas."}a(Br,"exactToolCompatibility");function Ir(e,r){let t=Object.keys(r).filter(s=>Object.hasOwn(e,s)&&e[s]!==r[s]),n=Object.keys(r).filter(s=>!Object.hasOwn(e,s)),i=Object.keys(e).filter(s=>!Object.hasOwn(r,s));return {...t.length>0?{changedInputs:t}:{},...n.length>0?{addedInputs:n}:{},...i.length>0?{removedInputs:i}:{}}}a(Ir,"inputChanges");async function we(e=process.cwd(),r){let t=await e$1(e),n=await f(t),i$1=P.join(t,b$1),s=a(()=>({schemaVersion:1,root:t,state:"missing",reason:`${b$1}/meta.json is absent.`,scenes:n.scenes.map(a=>({scene:a.key,state:"missing",reason:"No committed shader receipt."}))}),"missing");if(!await d(i$1)||!await d(P.join(i$1,"meta.json")))return s();try{let a=await i(t,i$1,"Shader artifact directory"),l=await j(a,P.join(a,"meta.json"),a$1.receipt,"Shader receipt"),u=c$1(JSON.parse(l.data.toString("utf8"))),f=await e$2(a,l.data),w=r??await se(t),o=a$3(w.three),h=new Set(n.scenes.map(p=>p.key)),b=Object.keys(u.scenes).filter(p=>!h.has(p));if(b.length>0)throw new Error(`Shader receipt contains unconfigured scenes: ${b.join(", ")}.`);let R=Br(u,o);if(R)throw new Error(R);let E=u.runtime.three!==w.three||u.runtime.threeBlocks!==w.threeBlocks,I=u.runtime.threeBlocksShaderClosure!==w.threeBlocksShaderClosure,O=u.tool?.version!==a$4,A=P.join(t,n.publicDir??"public"),T=[];for(let p of n.scenes){let d=u.scenes[p.key];if(!d){T.push({scene:p.key,state:"missing",reason:"Scene is absent from the complete receipt matrix."});continue}let $=await j(a,P.join(a,d.artifact),a$1.manifest,"Shader manifest");if(c($.data)!==d.artifactHash)throw new Error(`Shader artifact checksum differs for scene "${p.key}".`);if(d.asset!==void 0&&d.assetHash!==void 0){let V=await j(A,P.join(A,d.asset),a$1.manifest,"Static shader manifest");if(c(V.data)!==d.assetHash)throw new Error(`Static shader manifest checksum differs for scene "${p.key}".`)}if(d.bytes!==void 0&&d.bytes!==$.data.byteLength)throw new Error(`Shader artifact byte count differs for scene "${p.key}".`);let S=Ze($.data.toString("utf8"),$.path,p.key,{three:u.runtime.three,threeBlocks:u.runtime.threeBlocks,compatibility:o,address:SHADER_ADDRESS_SCHEMA_VERSION,recipe:SHADER_RECIPE_SCHEMA_VERSION,hydration:SHADER_HYDRATION_SCHEMA_VERSION});if(!Mr(S,d.coverage))throw new Error(`Shader coverage differs for scene "${p.key}".`);if(!n.allowLiveBuilds&&d.skipped&&d.skipped.render+d.skipped.compute>0)throw new Error(`Scene "${p.key}" contains skipped live builds but allowLiveBuilds is false.`);let C=await me(t,p.inputs),v=Ir(d.inputs,C),g=(v.changedInputs?.length??0)+(v.addedInputs?.length??0)+(v.removedInputs?.length??0),y=E||I||O||g>0,x=f?.scenes[p.key],L=x===void 0||f===void 0?void 0:{...x,schemaVersion:f.schemaVersion,measuredAt:f.measuredAt,source:f.source,...f.source==="committed-capture"?{adapter:f.adapter,platform:f.platform}:{}};T.push({scene:p.key,state:y?"stale":"fresh",reason:E?"Installed runtime versions differ from the receipt.":I?"Installed three-blocks/shaders runtime closure differs from the receipt.":O?`Receipt was generated by @three-blocks/devtools ${u.tool?.version??"unknown"}.`:g>0?`${g} semantic shader input${g===1?"":"s"} changed.`:"Manifest, runtime, schemas, transform, and semantic inputs match.",coverage:S,...!y&&L!==void 0&&L.builds===S.render+S.compute?{timing:L}:{},...v});}let B=Pr(T),N=B.state==="fresh"&&f!==void 0&&T.every(p=>p.timing!==void 0)?f:void 0;return {schemaVersion:1,root:t,...B,scenes:T,runtime:w,receipt:u,...N===void 0?{}:{timing:N}}}catch(a){let l=a instanceof Error?a.message:String(a);return {schemaVersion:1,root:t,state:"invalid",reason:l,scenes:n.scenes.map(u=>({scene:u.key,state:"invalid",reason:l}))}}}a(we,"inspectShaderMatrix");var sr=".three-blocks/shaders/pending-capture";function jr(e){return (e instanceof Error?`${e.name}: ${e.message}`:String(e)).includes("ShaderHydrationError:")}a(jr,"isShaderHydrationFailure");async function Ar(e,r,t){if(r.length===0)return;let n=P.join(e,b$1,"meta.json"),i=await readFile(n);if(c(i)!==c(t))throw new Error("Shader receipt changed before failed scenes could be marked for recapture.");let s=c$1(JSON.parse(i.toString("utf8"))),a=c(t),l=new Set(r),u=c$1({...s,scenes:Object.fromEntries(Object.entries(s.scenes).map(([f,w])=>[f,l.has(f)?{...w,inputs:{...w.inputs,[sr]:a}}:w]))});await f$1(n,`${d$1(u)}
|
|
10
|
+
`);}a(Ar,"markShaderScenesForRecapture");function Dr(e,r){return d$1(e)===d$1(r)}a(Dr,"equalSnapshot");async function St(e={}){let r=e.root?await realpath(e.root):await e$1(e.start),t=e.config===void 0?await h$1(r):void 0,n=e.config??t?.config??await f(r),i=e.runtime??await se(r),s=n.scenes,a$1,l={},u;if(e.ifStale){let S=await we(r,i);if(S.state==="fresh"&&S.scenes.every(C=>C.timing!==void 0))return {schemaVersion:1,root:r,skipped:true,reason:S.reason,scenes:[]};if(S.state!=="invalid"&&S.receipt!==void 0){let C=S.state==="fresh";s=n.scenes.filter(v=>{let g=S.scenes.find(y=>y.scene===v.key);return g?.state!=="fresh"||C&&g.timing===void 0}),a$1=S.receipt;for(let v of S.scenes){if(v.state!=="fresh"||v.timing===void 0)continue;let{builds:g,liveBuildMs:y,precompiledBuildMs:x,avoidedBuildMs:L,runs:V,spreadMs:W}=v.timing;l[v.scene]={builds:g,liveBuildMs:y,precompiledBuildMs:x,avoidedBuildMs:L,runs:V,spreadMs:W},v.timing.source==="committed-capture"&&v.timing.adapter!==void 0&&v.timing.platform!==void 0&&(u={adapter:v.timing.adapter,platform:v.timing.platform});}}}let f$1=performance.now(),w=a$1!==void 0&&(a$1.runtime.three!==i.three||a$1.runtime.threeBlocks!==i.threeBlocks||a$1.runtime.threeBlocksShaderClosure!==i.threeBlocksShaderClosure||a$1.tool?.version!==a$4)?c(d$1({runtime:a$1.runtime,tool:a$1.tool})):void 0,o=a(async()=>new Map(await Promise.all(n.scenes.map(async S=>[S.key,await me(r,S.inputs)]))),"snapshotInputs"),h=await o(),m=a(async()=>{let S=await o();for(let C of n.scenes){let v=h.get(C.key),g=S.get(C.key);if(v===void 0||g===void 0||!Dr(v,g))throw new Error(`Semantic shader inputs changed during capture for scene "${C.key}"; the current scene was not committed.`)}},"assertInputsUnchanged"),b=e.driver===void 0,R=e.driver===void 0&&e.driverKind===void 0&&e.serve===void 0&&e.url===void 0?await g(r):void 0,E=e.serve??R?.serve,I=e.driverKind??R?.driverKind??(E===void 0?"vite":"static");if(e.url!==void 0&&(e.serve!==void 0||e.driverKind!==void 0))throw new Error("--url cannot be combined with --driver or --serve.");if(I==="vite"&&E!==void 0)throw new Error("--serve requires the static shader driver.");if(I==="static"&&E===void 0&&e.driver===void 0)throw new Error("The static shader driver requires --serve <built-directory>.");let O=e.driver===void 0?await import('./shader-browser-6TM4RNUL.js'):void 0,A=e.driver??(e.url!==void 0?O.createAttachedPlaywrightShaderDriver({root:r,runtime:i,url:e.url,...e.headed!==void 0?{headed:e.headed}:{}}):I==="static"?O.createStaticPlaywrightShaderDriver({root:r,runtime:i,serve:E,...e.headed!==void 0?{headed:e.headed}:{}}):O.createPlaywrightShaderDriver({root:r,runtime:i,...e.headed!==void 0?{headed:e.headed}:{}})),T=new Map,B=[],N=a$1!==void 0&&n.scenes.every(S=>a$1?.scenes[S.key]!==void 0),p=a$1,d,$=e.attempts??2;if(!Number.isSafeInteger($)||$<1||$>5)throw new Error("Shader capture attempts must be an integer in 1...5.");try{for(let[g,y]of s.entries()){e.onSceneStart?.(y.key,g,s.length);let x,L,V=0;for(;V<$;V++)try{if(x=c$2(await A.capture(y,n),{scene:y.key,runtime:i}),x.skipped.length>0&&!n.allowLiveBuilds)throw new Error(`Scene "${y.key}" contains ${x.skipped.length} unregistered live shader build${x.skipped.length===1?"":"s"} while allowLiveBuilds is false.`);break}catch(W){L=W,x=void 0,V+1<$&&e.onSceneRetry?.(y.key,V+2,$,n.timeoutMs,W);}if(!x)throw new Error(`Shader capture "${y.key}" failed after ${$} attempts: ${L instanceof Error?L.message:String(L)}`);if(T.set(y.key,x),B.push({scene:y.key,attempts:V+1,coverage:x.coverage,skipped:x.skipped.length,startupBuilds:x.stats.registeredBuilds,startupBuildMs:x.stats.buildMs,...x.timing===void 0?{}:{timing:x.timing}}),N&&p!==void 0){await m();let W=new Map(n.scenes.map(U=>{let J=U.key===y.key?h.get(U.key):p?.scenes[U.key]?.inputs;if(J===void 0)throw new Error(`Shader checkpoint is missing scene "${U.key}".`);return w!==void 0&&!T.has(U.key)&&(J={...J,[sr]:w}),[U.key,J]}));d=await j$1({root:r,scenes:n.scenes,captures:new Map([[y.key,x]]),runtime:i,inputs:W,previousReceipt:p,publicDirectory:n.publicDir??"public"}),p=d.receipt;}}await m(),d??=await j$1({root:r,scenes:n.scenes,captures:T,runtime:i,inputs:h,...a$1===void 0?{}:{previousReceipt:a$1},publicDirectory:n.publicDir??"public"});let S={...l};for(let g of B)S[g.scene]={builds:g.coverage.render+g.coverage.compute,liveBuildMs:g.startupBuildMs,precompiledBuildMs:0,avoidedBuildMs:g.startupBuildMs,runs:1,spreadMs:0};if(e.commitTiming===!0){let g=u??{adapter:T.values().next().value?.provenance?.adapter??"WebGPU adapter",platform:`${ve.platform()}/${ve.arch()}`};await i$1(r,S,await(A.timingEnvironment?.()??g));}else await f$2(r,S);let C=await readFile(P.join(d.directory,"meta.json")),v=await e$2(d.directory,C);return {schemaVersion:1,root:r,skipped:!1,reason:`Wrote ${B.length} shader scene${B.length===1?"":"s"}.`,durationMs:performance.now()-f$1,scenes:B,measurement:{beforeBuilds:B.reduce((g,y)=>g+y.startupBuilds,0),afterBuilds:0,firstFrameDeltaMs:-B.reduce((g,y)=>g+y.startupBuildMs,0),source:"capture-build-phase"},...t===void 0?{}:{configuration:{created:t.created,file:t.file}},written:d,...v===void 0?{}:{timing:v}}}finally{b&&await A.close();}}a(St,"captureShaders");function _r(e){return ["workerReady","assetsReady",...e.requiresText?["textReady"]:[],"compileEnd","firstFrame"]}a(_r,"requiredReadiness");function nr(e){if(e.length===0)throw new Error("Cannot take the median of an empty shader timing capture.");let r=[...e].sort((s,a)=>s-a),t=Math.floor(r.length/2),n=r[t];if(n===void 0)throw new Error("Shader timing median is unavailable.");if(r.length%2===1)return n;let i=r[t-1];if(i===void 0)throw new Error("Shader timing median pair is unavailable.");return (i+n)/2}a(nr,"median");function De(e,r,t,n){if(e.scene!==r.key||e.mode!==t)throw new Error(`Browser observation identity differs for scene "${r.key}".`);if(e.compatibility!==n||e.transform!==b)throw new Error(`Browser observation compatibility differs for scene "${r.key}".`);let i=_r(r).filter(s=>e.readiness[s]!==true);if(i.length>0)throw new Error(`Scene "${r.key}" ${t} observation is missing readiness bits: ${i.join(", ")}.`);if(e.errors.length>0)throw new Error(`Scene "${r.key}" ${t} browser errors:
|
|
11
|
+
- ${e.errors.join(`
|
|
12
|
+
- `)}`)}a(De,"assertObservation");function Lr(e,r,t,n){if(r.render>0&&t.stats.registeredRenderBuilds===0)throw new Error(`Scene "${e.key}" live baseline exercised no registered render pipeline.`);if(r.compute>0&&t.stats.registeredComputeBuilds===0)throw new Error(`Scene "${e.key}" live baseline exercised no registered compute kernel.`);ar(e,r,n);}a(Lr,"assertZeroBuild");function ar(e,r,t){if(t.stats.registeredRenderBuilds!==0||t.stats.registeredComputeBuilds!==0){let n=t.stats.missedKeys??[];throw new Error(`Scene "${e.key}" injected path performed ${t.stats.registeredRenderBuilds} render and ${t.stats.registeredComputeBuilds} compute registered live builds.`+(n.length>0?` Missed keys: ${n.join(", ")}.`:""))}if(r.render>0&&t.stats.injectedRender===0)throw new Error(`Scene "${e.key}" injected no render entries.`);if(r.compute>0&&t.stats.injectedCompute===0)throw new Error(`Scene "${e.key}" injected no compute entries.`);if(t.stats.missed!==0||t.stats.missedRender!==0||t.stats.missedCompute!==0)throw new Error(`Scene "${e.key}" injected path reported shader manifest misses.`)}a(ar,"assertPrecompiledZeroBuild");async function Nr(e,r,t,n,i){let s=P.join(e,c$3);if(await d(s)){let l=await lstat(s);if(l.isSymbolicLink()||!l.isDirectory())throw new Error("Shader parity artifact directory is not a real directory.")}else await mkdir(s,{recursive:true});let a=[`${r}.live.png`,`${r}.precompiled.png`,`${r}.diff.png`];return await Promise.all([t,n,i].map(async(l,u)=>{let f=a[u];if(f===void 0)throw new Error("Parity artifact mapping failed.");let w=P.join(s,f);if(await d(w)){let o=await lstat(w);if(o.isSymbolicLink()||!o.isFile())throw new Error(`Shader parity target is not a regular file: ${f}.`)}await writeFile(w,l,{mode:384});})),a.map(l=>`${c$3}/${l}`)}a(Nr,"writeParityFailure");async function yt(e={}){let r=e.root?await realpath(e.root):await e$1(e.start),t=e.runtime??await se(r),n=a$3(t.three),i=await we(r,t);if(i.state!=="fresh")throw new Error(`Shader no-GPU validation is ${i.state}: ${i.reason}`);if(e.skipBrowser)return {schemaVersion:1,root:r,noGpu:i,browser:"skipped",scenes:[]};if(e.parityOnly===true&&e.commitTiming===true)throw new Error("Parity-only shader verification cannot commit timing.");let s=e.runs??5;if(!Number.isSafeInteger(s)||s<1||s>100)throw new Error("Shader timing runs must be an integer in 1...100.");let a$1=e.config??await f(r),l=await readFile(P.join(r,b$1,"meta.json")),u=c$1(JSON.parse(l.toString("utf8")));if(i.receipt===void 0||d$1(u)!==d$1(i.receipt))throw new Error("Shader receipt changed after no-GPU validation; restart browser parity verification.");let f$1=e.driver===void 0,w=e.driver===void 0&&e.driverKind===void 0&&e.serve===void 0&&e.url===void 0?await g(r):void 0,o=e.serve??w?.serve,h=e.driverKind??w?.driverKind??(o===void 0?"vite":"static");if(e.url!==void 0&&(e.serve!==void 0||e.driverKind!==void 0))throw new Error("--url cannot be combined with --driver or --serve.");if(h==="vite"&&o!==void 0)throw new Error("--serve requires the static shader driver.");if(h==="static"&&o===void 0&&e.driver===void 0)throw new Error("The static shader driver requires --serve <built-directory>.");let m=e.driver===void 0?await import('./shader-browser-6TM4RNUL.js'):void 0,{compareShaderScreenshots:b}=await import('./shader-parity-XPKQQK26.js'),R=a(()=>e.url!==void 0?m.createAttachedPlaywrightShaderDriver({root:r,runtime:t,url:e.url,...e.headed!==void 0?{headed:e.headed}:{}}):h==="static"?m.createStaticPlaywrightShaderDriver({root:r,runtime:t,serve:o,...e.headed!==void 0?{headed:e.headed}:{}}):m.createPlaywrightShaderDriver({root:r,runtime:t,...e.headed!==void 0?{headed:e.headed}:{}}),"createDriver"),E=e.driver??R(),I=e.driver??R();await h$2(r,a$1.scenes.map(N=>N.key),l);let O=[],A={},T=[],B=new Set;try{for(let[p,d]of a$1.scenes.entries()){e.onSceneStart?.(d.key,p,a$1.scenes.length);let $=i.scenes.find(M=>M.scene===d.key);if(!$?.coverage)throw new Error(`Fresh receipt has no coverage for scene "${d.key}".`);let S=$.coverage,C=a(async M=>{let te=M?"live":"precompiled",Y=M?"precompiled":"live",oe=M?E:I,de=M?I:E,q=await oe.observe(d,te,a$1),j=await de.observe(d,Y,a$1,q.frame),X=q.mode==="live"?q:j,Z=q.mode==="precompiled"?q:j;De(X,d,"live",n),De(Z,d,"precompiled",n),Lr(d,S,X,Z);let F=b(X.screenshot,Z.screenshot,a$1.parity.channelTolerance,d.maxDiffRatio??a$1.parity.maxDiffRatio);if(!F.matches){let or=await Nr(r,d.key,X.screenshot,Z.screenshot,F.diff),dr=F.nonBlack?`${F.differentPixels}/${F.totalPixels} pixels differ (${(F.diffRatio*100).toFixed(3)}%).`:`rendered output is black (live=${F.baselineLuminance.toFixed(4)}, precompiled=${F.precompiledLuminance.toFixed(4)}).`;throw new Error(`Shader parity failed for scene "${d.key}" at completed frames live=${X.frame}, precompiled=${Z.frame}: ${dr} Artifacts: ${or.join(", ")}`)}return {live:X,precompiled:Z,parity:F}},"observePair"),v,g,y;if(e.parityOnly===!0)try{v=await C(!0);}catch(M){jr(M)&&B.add(d.key),T.push({scene:d.key,error:M}),e.onSceneError?.(d.key,M);continue}else {await C(!0);let M=[];for(let j=0;j<s;j++)M.push(await C(j%2===0));let te=M[M.length-1];if(te===void 0)throw new Error(`Shader timing produced no runs for scene "${d.key}".`);if(v=te,g=await I.observePublished(d,a$1),De(g,d,"precompiled",n),ar(d,S,g),y=d.runtimeMotion?b(g.beforeScreenshot,g.screenshot,a$1.parity.channelTolerance,1):void 0,y&&y.diffRatio<1e-4)throw new Error(`Published scene "${d.key}" stopped animating during its normal 120-frame soak (changed ${y.differentPixels}/${y.totalPixels} canvas pixels).`);let Y=nr(M.map(j=>j.live.stats.buildMs)),oe=nr(M.map(j=>j.precompiled.stats.buildMs)),de=Math.max(0,Y-oe),q=M.map(j=>Math.max(0,j.live.stats.buildMs-j.precompiled.stats.buildMs));A[d.key]={builds:S.render+S.compute,liveBuildMs:Y,precompiledBuildMs:oe,avoidedBuildMs:de,runs:s,spreadMs:Math.max(...q.map(j=>Math.abs(j-de)))};}let{diff:x,...L}=v.parity,{screenshot:V,...W}=v.live,{screenshot:U,...J}=v.precompiled,be;if(g!==void 0){let{beforeScreenshot:M,screenshot:te,...Y}=g;be=Y;}O.push({scene:d.key,coverage:S,live:W,precompiled:J,...be===void 0?{}:{published:be},parity:L,...y===void 0?{}:{runtimeMotion:{differentPixels:y.differentPixels,totalPixels:y.totalPixels,diffRatio:y.diffRatio}}}),await g$1(r,[d.key],l);}if(e.parityOnly===!0){if(await Ar(r,[...B],l),T.length>0)throw new Error(`Shader parity failed for ${T.length}/${a$1.scenes.length} scene(s):
|
|
13
|
+
`+T.map(p=>{let d=p.error instanceof Error?p.error.message:String(p.error);return ` - ${p.scene}: ${d}`}).join(`
|
|
14
|
+
`));return {schemaVersion:1,root:r,noGpu:i,browser:"passed",scenes:O}}if(e.commitTiming===!0){let p={adapter:"WebGPU adapter",platform:`${ve.platform()}/${ve.arch()}`},d=await(E.timingEnvironment?.()??p),$=await i$1(r,A,d);return {schemaVersion:1,root:r,noGpu:i,browser:"passed",scenes:O,timing:$.local,committedTiming:$.committed}}let N=await f$2(r,A);return {schemaVersion:1,root:r,noGpu:i,browser:"passed",scenes:O,timing:N}}finally{f$1&&(await I.close(),await E.close());}}a(yt,"testShaders");export{Ze as a,me as b,se as c,we as d,St as e,yt as f};
|