solve-engine 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/{BytecodeBuilder-DGGeByAP.d.cts → BytecodeBuilder-BGq9ZiO3.d.cts} +2 -1
  2. package/dist/{BytecodeBuilder-DGGeByAP.d.ts → BytecodeBuilder-BGq9ZiO3.d.ts} +2 -1
  3. package/dist/{PackageCompatibility-UsSZIfHs.d.ts → PackageCompatibility-4QtIErfx.d.ts} +1 -1
  4. package/dist/{PackageCompatibility-cEClSSkz.d.cts → PackageCompatibility-CCdud__Q.d.cts} +1 -1
  5. package/dist/{PackageRegistry-B3yJHSxX.d.ts → PackageRegistry-B7wkfSrY.d.ts} +5 -5
  6. package/dist/{PackageRegistry-BsLmAVZJ.d.cts → PackageRegistry-Hx85XD01.d.cts} +5 -5
  7. package/dist/{Parselet-C4Wu055_.d.cts → Parselet-CTNpfuEB.d.cts} +2 -2
  8. package/dist/{Parselet-B-zoPrTa.d.ts → Parselet-DONNUpur.d.ts} +2 -2
  9. package/dist/{ScopeManager-DkpnlKuz.d.ts → ScopeManager-BkbDXK_R.d.ts} +3 -3
  10. package/dist/{ScopeManager-t6SnP6Ce.d.cts → ScopeManager-Cvgypcu4.d.cts} +3 -3
  11. package/dist/{VMCheckpoints-CsHmQVaD.d.ts → VMCheckpoints-9zBQnTsN.d.ts} +3 -3
  12. package/dist/{VMCheckpoints-C_jQvABf.d.cts → VMCheckpoints-CBMGiSqw.d.cts} +3 -3
  13. package/dist/{Value-CCi_Eecs.d.cts → Value-D1XlMwe2.d.cts} +40 -5
  14. package/dist/{Value-CCi_Eecs.d.ts → Value-D1XlMwe2.d.ts} +40 -5
  15. package/dist/chunk-3AVWA5IZ.cjs +2 -0
  16. package/dist/chunk-3AVWA5IZ.cjs.map +1 -0
  17. package/dist/chunk-3DD2RVBI.cjs +3 -0
  18. package/dist/chunk-3DD2RVBI.cjs.map +1 -0
  19. package/dist/{chunk-RDMJNRDO.js → chunk-4XTD4B77.js} +3 -3
  20. package/dist/{chunk-RDMJNRDO.js.map → chunk-4XTD4B77.js.map} +1 -1
  21. package/dist/chunk-5FGOIDLS.cjs +2 -0
  22. package/dist/chunk-5FGOIDLS.cjs.map +1 -0
  23. package/dist/chunk-5OIXCVB2.js +3 -0
  24. package/dist/chunk-5OIXCVB2.js.map +1 -0
  25. package/dist/{chunk-NGJMCVH4.cjs → chunk-B4P4M4ZW.cjs} +3 -3
  26. package/dist/{chunk-NGJMCVH4.cjs.map → chunk-B4P4M4ZW.cjs.map} +1 -1
  27. package/dist/{chunk-TWC7K3ZX.js → chunk-GHW2X7PS.js} +2 -2
  28. package/dist/{chunk-TWC7K3ZX.js.map → chunk-GHW2X7PS.js.map} +1 -1
  29. package/dist/chunk-GKDZ7TSX.cjs +2 -0
  30. package/dist/chunk-GKDZ7TSX.cjs.map +1 -0
  31. package/dist/{chunk-7RTKJMYS.js → chunk-HMEZJXLX.js} +2 -2
  32. package/dist/{chunk-7RTKJMYS.js.map → chunk-HMEZJXLX.js.map} +1 -1
  33. package/dist/{chunk-FDE5HWDI.cjs → chunk-HOQU47MF.cjs} +2 -2
  34. package/dist/{chunk-FDE5HWDI.cjs.map → chunk-HOQU47MF.cjs.map} +1 -1
  35. package/dist/chunk-IO374J6Z.js +2 -0
  36. package/dist/chunk-IO374J6Z.js.map +1 -0
  37. package/dist/{chunk-D5MTMRHS.cjs → chunk-KSDTVFXA.cjs} +4 -4
  38. package/dist/{chunk-D5MTMRHS.cjs.map → chunk-KSDTVFXA.cjs.map} +1 -1
  39. package/dist/{chunk-YUJNMUKM.cjs → chunk-OVQ3V4CG.cjs} +2 -2
  40. package/dist/{chunk-YUJNMUKM.cjs.map → chunk-OVQ3V4CG.cjs.map} +1 -1
  41. package/dist/{chunk-XNIWQHXY.js → chunk-P6BLASAA.js} +2 -2
  42. package/dist/{chunk-XNIWQHXY.js.map → chunk-P6BLASAA.js.map} +1 -1
  43. package/dist/{chunk-AXMQG5TS.cjs → chunk-R7T3NGUE.cjs} +2 -2
  44. package/dist/{chunk-AXMQG5TS.cjs.map → chunk-R7T3NGUE.cjs.map} +1 -1
  45. package/dist/{chunk-CT5TC3JX.cjs → chunk-SOSUS2SK.cjs} +3 -3
  46. package/dist/chunk-SOSUS2SK.cjs.map +1 -0
  47. package/dist/chunk-SWKYVSMP.js +2 -0
  48. package/dist/chunk-SWKYVSMP.js.map +1 -0
  49. package/dist/chunk-T4Y5XOT2.js +3 -0
  50. package/dist/chunk-T4Y5XOT2.js.map +1 -0
  51. package/dist/{chunk-LOM3H5ZD.js → chunk-T52Y5G24.js} +4 -4
  52. package/dist/{chunk-LOM3H5ZD.js.map → chunk-T52Y5G24.js.map} +1 -1
  53. package/dist/{chunk-JFAJN3C2.cjs → chunk-VBSMA7WJ.cjs} +2 -2
  54. package/dist/chunk-VBSMA7WJ.cjs.map +1 -0
  55. package/dist/{chunk-RSF25YSJ.js → chunk-VYWGUMFW.js} +2 -2
  56. package/dist/{chunk-RSF25YSJ.js.map → chunk-VYWGUMFW.js.map} +1 -1
  57. package/dist/chunk-XTM4HTRB.js +2 -0
  58. package/dist/{chunk-LBNX7TXI.js.map → chunk-XTM4HTRB.js.map} +1 -1
  59. package/dist/{chunk-E6Z4NQAS.js → chunk-YNMMRH44.js} +2 -2
  60. package/dist/chunk-YNMMRH44.js.map +1 -0
  61. package/dist/chunk-Z5KBBQOJ.cjs +2 -0
  62. package/dist/{chunk-YFWAR766.cjs.map → chunk-Z5KBBQOJ.cjs.map} +1 -1
  63. package/dist/chunk-ZJPAPBP3.js +2 -0
  64. package/dist/chunk-ZJPAPBP3.js.map +1 -0
  65. package/dist/{chunk-N7N7MPMK.cjs → chunk-ZOOVGXMK.cjs} +2 -2
  66. package/dist/{chunk-N7N7MPMK.cjs.map → chunk-ZOOVGXMK.cjs.map} +1 -1
  67. package/dist/constants.cjs +1 -1
  68. package/dist/constants.js +1 -1
  69. package/dist/engine.cjs +1 -1
  70. package/dist/engine.d.cts +8 -8
  71. package/dist/engine.d.ts +8 -8
  72. package/dist/engine.js +1 -1
  73. package/dist/format.cjs +1 -1
  74. package/dist/format.d.cts +1 -1
  75. package/dist/format.d.ts +1 -1
  76. package/dist/format.js +1 -1
  77. package/dist/index.cjs +1 -1
  78. package/dist/index.d.cts +8 -8
  79. package/dist/index.d.ts +8 -8
  80. package/dist/index.js +1 -1
  81. package/dist/language.d.cts +7 -7
  82. package/dist/language.d.ts +7 -7
  83. package/dist/packages.cjs +1 -1
  84. package/dist/packages.d.cts +7 -7
  85. package/dist/packages.d.ts +7 -7
  86. package/dist/packages.js +1 -1
  87. package/dist/parser.cjs +1 -1
  88. package/dist/parser.d.cts +4 -4
  89. package/dist/parser.d.ts +4 -4
  90. package/dist/parser.js +1 -1
  91. package/dist/{pipeline-72QmQlGx.d.ts → pipeline-BH7BFOTJ.d.ts} +3 -3
  92. package/dist/{pipeline-DCQicwWX.d.cts → pipeline-DY0rhgQG.d.cts} +3 -3
  93. package/dist/resolvers.d.cts +2 -2
  94. package/dist/resolvers.d.ts +2 -2
  95. package/dist/testing.cjs +2 -2
  96. package/dist/testing.d.cts +7 -7
  97. package/dist/testing.d.ts +7 -7
  98. package/dist/testing.js +1 -1
  99. package/dist/uom.cjs +1 -1
  100. package/dist/uom.d.cts +2 -2
  101. package/dist/uom.d.ts +2 -2
  102. package/dist/uom.js +1 -1
  103. package/dist/vm.cjs +1 -1
  104. package/dist/vm.d.cts +7 -7
  105. package/dist/vm.d.ts +7 -7
  106. package/dist/vm.js +1 -1
  107. package/dist/worker.cjs +2 -2
  108. package/dist/worker.cjs.map +1 -1
  109. package/dist/worker.d.cts +22 -6
  110. package/dist/worker.d.ts +22 -6
  111. package/dist/worker.js +2 -2
  112. package/dist/worker.js.map +1 -1
  113. package/package.json +1 -1
  114. package/dist/chunk-2HQWM5OB.js +0 -3
  115. package/dist/chunk-2HQWM5OB.js.map +0 -1
  116. package/dist/chunk-6G3PMEPA.js +0 -2
  117. package/dist/chunk-6G3PMEPA.js.map +0 -1
  118. package/dist/chunk-6INX773F.cjs +0 -2
  119. package/dist/chunk-6INX773F.cjs.map +0 -1
  120. package/dist/chunk-6ZNNPXXE.cjs +0 -3
  121. package/dist/chunk-6ZNNPXXE.cjs.map +0 -1
  122. package/dist/chunk-ANJPS6FF.cjs +0 -2
  123. package/dist/chunk-ANJPS6FF.cjs.map +0 -1
  124. package/dist/chunk-B5NBFGNP.js +0 -3
  125. package/dist/chunk-B5NBFGNP.js.map +0 -1
  126. package/dist/chunk-CT5TC3JX.cjs.map +0 -1
  127. package/dist/chunk-E6Z4NQAS.js.map +0 -1
  128. package/dist/chunk-EVAOPEO4.js +0 -2
  129. package/dist/chunk-EVAOPEO4.js.map +0 -1
  130. package/dist/chunk-JFAJN3C2.cjs.map +0 -1
  131. package/dist/chunk-LBNX7TXI.js +0 -2
  132. package/dist/chunk-PS272DZJ.cjs +0 -2
  133. package/dist/chunk-PS272DZJ.cjs.map +0 -1
  134. package/dist/chunk-QEYTENAK.js +0 -2
  135. package/dist/chunk-QEYTENAK.js.map +0 -1
  136. package/dist/chunk-YFWAR766.cjs +0 -2
@@ -1,2 +1,2 @@
1
- var a=class{constructor(){this.collectors=[];}register(t){this.collectors.push(t);}unregister(t){let e=this.collectors.indexOf(t);e!==-1&&this.collectors.splice(e,1);}clear(){this.collectors=[];}get hasCollectors(){return this.collectors.length>0}get collectorCount(){return this.collectors.length}firePipelineStart(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onPipelineStart?.(t);}fireTokenEmitted(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onTokenEmitted?.(t);}fireNormalizerStart(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onNormalizerStart?.(t);}fireTokenFused(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onTokenFused?.(t);}fireNormalizerEnd(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onNormalizerEnd?.(t);}fireParseletMatched(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onParseletMatched?.(t);}fireBytecodeBuilt(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onBytecodeBuilt?.(t);}fireVmStep(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onVmStep?.(t);}fireVmHalt(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onVmHalt?.(t);}fireCacheHit(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onCacheHit?.(t);}fireCacheMiss(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onCacheMiss?.(t);}firePipelineEnd(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onPipelineEnd?.(t);}collectReports(){let t=[];for(let e of this.collectors){let n=e.getReport();n&&t.push(n);}return t}reset(){for(let t of this.collectors)t.reset();}};var s=class{onPipelineStart(t){}onTokenEmitted(t){}onNormalizerStart(t){}onTokenFused(t){}onNormalizerEnd(t){}onParseletMatched(t){}onBytecodeBuilt(t){}onVmStep(t){}onVmHalt(t){}onCacheHit(t){}onCacheMiss(t){}onPipelineEnd(t){}};var i=class extends s{constructor(){super(...arguments);this.events=[];this.startNs=0;this.parseletEntries=new Map;this.totalTokens=0;this.cacheHitSeen=false;this.vmStepSeen=false;this.hasBytecodeBuilt=false;this.firstBytecodeOpcodesLength=0;this.parseletMatches=[];this.lastExpression="";this.lastInputType="";}get parseletMatchCount(){return this.parseletMatches.length}reset(){this.events=[],this.parseletEntries.clear(),this.startNs=0,this.totalTokens=0,this.cacheHitSeen=false,this.vmStepSeen=false,this.hasBytecodeBuilt=false,this.firstBytecodeOpcodesLength=0,this.parseletMatches=[],this.lastExpression="",this.lastInputType="";}stamp(e){let n=this.startNs!==0?performance.now()*1e6-this.startNs:0;return {...e,elapsedNs:n}}onPipelineStart(e){this.startNs===0&&(this.startNs=performance.now()*1e6),this.lastExpression=e.expression,this.lastInputType=e.inputType,this.events.push(this.stamp(e));}onTokenEmitted(e){this.events.push(this.stamp(e)),this.totalTokens++;}onNormalizerStart(e){this.events.push(this.stamp(e));}onTokenFused(e){this.events.push(this.stamp(e));}onNormalizerEnd(e){this.events.push(this.stamp(e));}onParseletMatched(e){this.events.push(this.stamp(e));let n=this.parseletEntries.get(e.parseletCategory);n?n.count++:this.parseletEntries.set(e.parseletCategory,{category:e.parseletCategory,count:1}),this.parseletMatches.push({tokenType:e.tokenType,tokenValue:e.tokenValue,parseletCategory:e.parseletCategory,parseletType:e.parseletType,isPrefix:e.isPrefix,bindingPower:e.bindingPower,tokenOffset:e.tokenOffset});}onBytecodeBuilt(e){this.events.push(this.stamp(e)),this.hasBytecodeBuilt||(this.hasBytecodeBuilt=true,this.firstBytecodeOpcodesLength=e.opcodesLength);}onVmStep(e){this.events.push(this.stamp(e)),this.vmStepSeen=true;}onVmHalt(e){this.events.push(this.stamp(e));}onCacheHit(e){this.events.push(this.stamp(e)),this.cacheHitSeen=true;}onCacheMiss(e){this.events.push(this.stamp(e));}onPipelineEnd(e){this.events.push(this.stamp(e));}getReport(){if(this.events.length===0)return;let e=performance.now()*1e6-this.startNs,n=new Map;for(let[,r]of this.parseletEntries)n.set(r.category,r.count);let c=this.firstBytecodeOpcodesLength,p=this.cacheHitSeen,d=this.totalTokens,o={events:this.events,parselets:this.parseletMatches.map(r=>({...r})),summary:{totalTokens:d,totalParselets:n.size,totalOpcodes:c,cacheHit:p,elapsedNs:e,parseCategories:n},metadata:{expression:this.lastExpression,inputType:this.lastInputType,timestamp:Date.now(),vmTraceEnabled:this.vmStepSeen},toJSON(){return {events:o.events,parselets:o.parselets,summary:{totalTokens:o.summary.totalTokens,totalParselets:o.summary.totalParselets,totalOpcodes:o.summary.totalOpcodes,cacheHit:o.summary.cacheHit,elapsedNs:o.summary.elapsedNs,parseCategories:Object.fromEntries(o.summary.parseCategories)},metadata:{...o.metadata}}}};return o}};var y={TokenEmitted:"token_emitted",NormalizerStart:"normalizer_start",TokenFused:"token_fused",NormalizerEnd:"normalizer_end",ParseletMatched:"parselet_matched",BytecodeBuilt:"bytecode_built",VmStep:"vm_step",VmHalt:"vm_halt",CacheHit:"cache_hit",CacheMiss:"cache_miss",PipelineStart:"pipeline_start",PipelineEnd:"pipeline_end"};export{a,i as b,y as c};//# sourceMappingURL=chunk-TWC7K3ZX.js.map
2
- //# sourceMappingURL=chunk-TWC7K3ZX.js.map
1
+ var a=class{constructor(){this.collectors=[];}register(t){this.collectors.push(t);}unregister(t){let e=this.collectors.indexOf(t);e!==-1&&this.collectors.splice(e,1);}clear(){this.collectors=[];}get hasCollectors(){return this.collectors.length>0}get collectorCount(){return this.collectors.length}firePipelineStart(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onPipelineStart?.(t);}fireTokenEmitted(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onTokenEmitted?.(t);}fireNormalizerStart(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onNormalizerStart?.(t);}fireTokenFused(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onTokenFused?.(t);}fireNormalizerEnd(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onNormalizerEnd?.(t);}fireParseletMatched(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onParseletMatched?.(t);}fireBytecodeBuilt(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onBytecodeBuilt?.(t);}fireVmStep(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onVmStep?.(t);}fireVmHalt(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onVmHalt?.(t);}fireCacheHit(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onCacheHit?.(t);}fireCacheMiss(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onCacheMiss?.(t);}firePipelineEnd(t){if(this.collectors.length!==0)for(let e of this.collectors)e.onPipelineEnd?.(t);}collectReports(){let t=[];for(let e of this.collectors){let n=e.getReport();n&&t.push(n);}return t}reset(){for(let t of this.collectors)t.reset();}};var s=class{onPipelineStart(t){}onTokenEmitted(t){}onNormalizerStart(t){}onTokenFused(t){}onNormalizerEnd(t){}onParseletMatched(t){}onBytecodeBuilt(t){}onVmStep(t){}onVmHalt(t){}onCacheHit(t){}onCacheMiss(t){}onPipelineEnd(t){}};var i=class extends s{constructor(){super(...arguments);this.events=[];this.startNs=0;this.parseletEntries=new Map;this.totalTokens=0;this.cacheHitSeen=false;this.vmStepSeen=false;this.hasBytecodeBuilt=false;this.firstBytecodeOpcodesLength=0;this.parseletMatches=[];this.lastExpression="";this.lastInputType="";}get parseletMatchCount(){return this.parseletMatches.length}reset(){this.events=[],this.parseletEntries.clear(),this.startNs=0,this.totalTokens=0,this.cacheHitSeen=false,this.vmStepSeen=false,this.hasBytecodeBuilt=false,this.firstBytecodeOpcodesLength=0,this.parseletMatches=[],this.lastExpression="",this.lastInputType="";}stamp(e){let n=this.startNs!==0?performance.now()*1e6-this.startNs:0;return {...e,elapsedNs:n}}onPipelineStart(e){this.startNs===0&&(this.startNs=performance.now()*1e6),this.lastExpression=e.expression,this.lastInputType=e.inputType,this.events.push(this.stamp(e));}onTokenEmitted(e){this.events.push(this.stamp(e)),this.totalTokens++;}onNormalizerStart(e){this.events.push(this.stamp(e));}onTokenFused(e){this.events.push(this.stamp(e));}onNormalizerEnd(e){this.events.push(this.stamp(e));}onParseletMatched(e){this.events.push(this.stamp(e));let n=this.parseletEntries.get(e.parseletCategory);n?n.count++:this.parseletEntries.set(e.parseletCategory,{category:e.parseletCategory,count:1}),this.parseletMatches.push({tokenType:e.tokenType,tokenValue:e.tokenValue,parseletCategory:e.parseletCategory,parseletType:e.parseletType,isPrefix:e.isPrefix,bindingPower:e.bindingPower,tokenOffset:e.tokenOffset});}onBytecodeBuilt(e){this.events.push(this.stamp(e)),this.hasBytecodeBuilt||(this.hasBytecodeBuilt=true,this.firstBytecodeOpcodesLength=e.opcodesLength);}onVmStep(e){this.events.push(this.stamp(e)),this.vmStepSeen=true;}onVmHalt(e){this.events.push(this.stamp(e));}onCacheHit(e){this.events.push(this.stamp(e)),this.cacheHitSeen=true;}onCacheMiss(e){this.events.push(this.stamp(e));}onPipelineEnd(e){this.events.push(this.stamp(e));}getReport(){if(this.events.length===0)return;let e=performance.now()*1e6-this.startNs,n=new Map;for(let[,r]of this.parseletEntries)n.set(r.category,r.count);let c=this.firstBytecodeOpcodesLength,p=this.cacheHitSeen,d=this.totalTokens,o={events:this.events,parselets:this.parseletMatches.map(r=>({...r})),summary:{totalTokens:d,totalParselets:n.size,totalOpcodes:c,cacheHit:p,elapsedNs:e,parseCategories:n},metadata:{expression:this.lastExpression,inputType:this.lastInputType,timestamp:Date.now(),vmTraceEnabled:this.vmStepSeen},toJSON(){return {events:o.events,parselets:o.parselets,summary:{totalTokens:o.summary.totalTokens,totalParselets:o.summary.totalParselets,totalOpcodes:o.summary.totalOpcodes,cacheHit:o.summary.cacheHit,elapsedNs:o.summary.elapsedNs,parseCategories:Object.fromEntries(o.summary.parseCategories)},metadata:{...o.metadata}}}};return o}};var y={TokenEmitted:"token_emitted",NormalizerStart:"normalizer_start",TokenFused:"token_fused",NormalizerEnd:"normalizer_end",ParseletMatched:"parselet_matched",BytecodeBuilt:"bytecode_built",VmStep:"vm_step",VmHalt:"vm_halt",CacheHit:"cache_hit",CacheMiss:"cache_miss",PipelineStart:"pipeline_start",PipelineEnd:"pipeline_end"};export{a,i as b,y as c};//# sourceMappingURL=chunk-GHW2X7PS.js.map
2
+ //# sourceMappingURL=chunk-GHW2X7PS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/diagnostics/pipeline.ts","../src/diagnostics/collector.ts","../src/diagnostics/timeline-collector.ts","../src/diagnostics/events.ts"],"names":["DiagnosticPipeline","collector","idx","event","c","reports","report","DiagnosticCollector","_event","TimelineDiagnosticCollector","elapsedNs","entry","parseCategories","totalOpcodes","cacheHit","totalTokens","e","DiagnosticEventType"],"mappings":"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","file":"chunk-TWC7K3ZX.js","sourcesContent":["import { DiagnosticCollector } from \"./collector\";\nimport { DiagnosticEvent } from \"./events\";\nimport { DiagnosticReport } from \"./events\";\n\n/**\n * Dispatches diagnostic events to all registered collectors.\n *\n * Performance guarantee: when no collectors are registered (production mode),\n * every dispatch method is a branch on `this.collectors.length === 0` which\n * modern JS engines will predict and eliminate. The overhead is a single\n * comparison per call, effectively zero.\n */\nexport class DiagnosticPipeline {\n private collectors: DiagnosticCollector[] = [];\n\n register(collector: DiagnosticCollector): void {\n this.collectors.push(collector);\n }\n\n unregister(collector: DiagnosticCollector): void {\n const idx = this.collectors.indexOf(collector);\n if (idx !== -1) this.collectors.splice(idx, 1);\n }\n\n clear(): void {\n this.collectors = [];\n }\n\n get hasCollectors(): boolean {\n return this.collectors.length > 0;\n }\n\n get collectorCount(): number {\n return this.collectors.length;\n }\n\n // Inline-optimized dispatchers, each checks length once then loops.\n // When collectors.length === 0, the JIT eliminates the entire method body.\n\n firePipelineStart(event: DiagnosticEvent & { type: \"pipeline_start\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onPipelineStart?.(event);\n }\n\n fireTokenEmitted(event: DiagnosticEvent & { type: \"token_emitted\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onTokenEmitted?.(event);\n }\n\n fireNormalizerStart(event: DiagnosticEvent & { type: \"normalizer_start\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onNormalizerStart?.(event);\n }\n\n fireTokenFused(event: DiagnosticEvent & { type: \"token_fused\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onTokenFused?.(event);\n }\n\n fireNormalizerEnd(event: DiagnosticEvent & { type: \"normalizer_end\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onNormalizerEnd?.(event);\n }\n\n fireParseletMatched(event: DiagnosticEvent & { type: \"parselet_matched\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onParseletMatched?.(event);\n }\n\n fireBytecodeBuilt(event: DiagnosticEvent & { type: \"bytecode_built\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onBytecodeBuilt?.(event);\n }\n\n fireVmStep(event: DiagnosticEvent & { type: \"vm_step\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onVmStep?.(event);\n }\n\n fireVmHalt(event: DiagnosticEvent & { type: \"vm_halt\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onVmHalt?.(event);\n }\n\n fireCacheHit(event: DiagnosticEvent & { type: \"cache_hit\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onCacheHit?.(event);\n }\n\n fireCacheMiss(event: DiagnosticEvent & { type: \"cache_miss\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onCacheMiss?.(event);\n }\n\n firePipelineEnd(event: DiagnosticEvent & { type: \"pipeline_end\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onPipelineEnd?.(event);\n }\n\n collectReports(): DiagnosticReport[] {\n const reports: DiagnosticReport[] = [];\n for (const c of this.collectors) {\n const report = c.getReport();\n if (report) reports.push(report);\n }\n return reports;\n }\n\n reset(): void {\n for (const c of this.collectors) c.reset();\n }\n}","import { DiagnosticEvent } from \"./events\";\nimport { DiagnosticReport } from \"./events\";\n\n/**\n * Interface for collecting diagnostic data during pipeline execution.\n *\n * All methods are implemented as concrete no-ops so subclasses only\n * need to override the ones they care about. This avoids optional\n * method issues with TypeScript's strict mode.\n *\n * The parameters are named `_event` because these base implementations\n * deliberately ignore them. Overrides are free to name theirs `event` and use\n * it; TypeScript does not match parameter names when checking overrides.\n */\nexport abstract class DiagnosticCollector {\n onPipelineStart(_event: DiagnosticEvent & { type: \"pipeline_start\" }): void {}\n onTokenEmitted(_event: DiagnosticEvent & { type: \"token_emitted\" }): void {}\n onNormalizerStart(_event: DiagnosticEvent & { type: \"normalizer_start\" }): void {}\n onTokenFused(_event: DiagnosticEvent & { type: \"token_fused\" }): void {}\n onNormalizerEnd(_event: DiagnosticEvent & { type: \"normalizer_end\" }): void {}\n onParseletMatched(_event: DiagnosticEvent & { type: \"parselet_matched\" }): void {}\n onBytecodeBuilt(_event: DiagnosticEvent & { type: \"bytecode_built\" }): void {}\n onVmStep(_event: DiagnosticEvent & { type: \"vm_step\" }): void {}\n onVmHalt(_event: DiagnosticEvent & { type: \"vm_halt\" }): void {}\n onCacheHit(_event: DiagnosticEvent & { type: \"cache_hit\" }): void {}\n onCacheMiss(_event: DiagnosticEvent & { type: \"cache_miss\" }): void {}\n onPipelineEnd(_event: DiagnosticEvent & { type: \"pipeline_end\" }): void {}\n\n abstract getReport(): DiagnosticReport | undefined;\n abstract reset(): void;\n}","import { DiagnosticCollector } from \"./collector\";\nimport { DiagnosticReport, DiagnosticReportJSON, DiagnosticEvent, CategorizedParselet } from \"./events\";\n\n/**\n * Collects all pipeline events with high-resolution timestamps.\n *\n * Overrides the zero-filled `elapsedNs` on every incoming event with a\n * real `performance.now()` delta from `onPipelineStart`. This enables\n * per-stage timing extraction from the event timeline (lexer/parser/\n * compiler/VM breakdown) rather than relying on a single total elapsed.\n *\n * Produces a complete DiagnosticReport at the end of evaluation.\n */\nexport class TimelineDiagnosticCollector extends DiagnosticCollector {\n private events: DiagnosticEvent[] = [];\n private startNs: number = 0;\n private parseletEntries: Map<string, { category: string; count: number }> = new Map();\n\n // Incrementally-maintained summary state. See getReport()'s doc comment\n // for why these exist. Each mirrors exactly what getReport() used to\n // recompute by rescanning the full `events` array on every call.\n private totalTokens = 0;\n private cacheHitSeen = false;\n private vmStepSeen = false;\n private hasBytecodeBuilt = false;\n private firstBytecodeOpcodesLength = 0;\n private parseletMatches: CategorizedParselet[] = [];\n private lastExpression = \"\";\n private lastInputType = \"\";\n\n /**\n * Current cumulative count of `parselet_matched` events seen since\n * construction (or the last `reset()`), a cheap peek that doesn't build\n * the full report (`getReport()` copies the whole `parseletMatches`\n * array). Used by `ExpressionEngine.evaluateExpressionWithDiagnostic()`\n * to capture a \"before\" baseline per line, since `parseletMatches` itself\n * is deliberately cumulative across an entire document pass (see\n * `onPipelineStart`'s doc comment) rather than reset per line.\n */\n get parseletMatchCount(): number {\n return this.parseletMatches.length;\n }\n\n reset(): void {\n this.events = [];\n this.parseletEntries.clear();\n this.startNs = 0;\n this.totalTokens = 0;\n this.cacheHitSeen = false;\n this.vmStepSeen = false;\n this.hasBytecodeBuilt = false;\n this.firstBytecodeOpcodesLength = 0;\n this.parseletMatches = [];\n this.lastExpression = \"\";\n this.lastInputType = \"\";\n }\n\n /** Stamp the real wall-clock `elapsedNs` onto an event before storing it. */\n private stamp<T extends DiagnosticEvent>(event: T): T {\n const elapsedNs = this.startNs !== 0\n ? performance.now() * 1e6 - this.startNs\n : 0;\n return { ...event, elapsedNs } as T;\n }\n\n onPipelineStart(event: DiagnosticEvent & { type: \"pipeline_start\" }): void {\n // Set once per collector lifetime (until an explicit reset()), not on\n // every pipeline, a multi-line evaluation pass fires pipeline_start\n // once per line, all appending to the SAME `events` array (see\n // buildLineStats() in the playground, which relies on that shared,\n // ever-growing array to slice out each line's own events via\n // cumulative-length diffing). Resetting the origin on every line meant\n // every individual line's own timestamps were self-consistent, but\n // nothing tied one line's clock to another's, any code trying to\n // compare or span timestamps ACROSS lines (e.g. \"how far into this\n // pass are we\") had no stable reference point to do it with.\n if (this.startNs === 0) {\n this.startNs = performance.now() * 1e6;\n }\n // Tracked incrementally (most-recent wins) so getReport()'s `metadata`\n // describes the line THIS report is actually about, reading\n // `events[0]` instead (the old code) froze `expression`/`inputType` on\n // the very first line ever evaluated in the session, forever, which is\n // wrong regardless of whether a field is meant to be cumulative or\n // per-line: nothing downstream ever wanted \"line 1's expression\" once\n // the document had moved on to line 50.\n this.lastExpression = event.expression;\n this.lastInputType = event.inputType;\n this.events.push(this.stamp(event));\n }\n\n onTokenEmitted(event: DiagnosticEvent & { type: \"token_emitted\" }): void {\n this.events.push(this.stamp(event));\n this.totalTokens++;\n }\n\n onNormalizerStart(event: DiagnosticEvent & { type: \"normalizer_start\" }): void {\n this.events.push(this.stamp(event));\n }\n\n onTokenFused(event: DiagnosticEvent & { type: \"token_fused\" }): void {\n this.events.push(this.stamp(event));\n }\n\n onNormalizerEnd(event: DiagnosticEvent & { type: \"normalizer_end\" }): void {\n this.events.push(this.stamp(event));\n }\n\n onParseletMatched(event: DiagnosticEvent & { type: \"parselet_matched\" }): void {\n this.events.push(this.stamp(event));\n\n const entry = this.parseletEntries.get(event.parseletCategory);\n if (entry) {\n entry.count++;\n } else {\n this.parseletEntries.set(event.parseletCategory, {\n category: event.parseletCategory,\n count: 1,\n });\n }\n\n this.parseletMatches.push({\n tokenType: event.tokenType,\n tokenValue: event.tokenValue,\n parseletCategory: event.parseletCategory,\n parseletType: event.parseletType,\n isPrefix: event.isPrefix,\n bindingPower: event.bindingPower,\n tokenOffset: event.tokenOffset,\n });\n }\n\n onBytecodeBuilt(event: DiagnosticEvent & { type: \"bytecode_built\" }): void {\n this.events.push(this.stamp(event));\n // Matches getReport()'s original behavior: the FIRST bytecode_built\n // event ever seen (not the most recent) wins, preserved as-is here\n // this rewrite only changes HOW that value is computed, not what it is.\n if (!this.hasBytecodeBuilt) {\n this.hasBytecodeBuilt = true;\n this.firstBytecodeOpcodesLength = event.opcodesLength;\n }\n }\n\n onVmStep(event: DiagnosticEvent & { type: \"vm_step\" }): void {\n this.events.push(this.stamp(event));\n this.vmStepSeen = true;\n }\n\n onVmHalt(event: DiagnosticEvent & { type: \"vm_halt\" }): void {\n this.events.push(this.stamp(event));\n }\n\n onCacheHit(event: DiagnosticEvent & { type: \"cache_hit\" }): void {\n this.events.push(this.stamp(event));\n this.cacheHitSeen = true;\n }\n\n onCacheMiss(event: DiagnosticEvent & { type: \"cache_miss\" }): void {\n this.events.push(this.stamp(event));\n }\n\n onPipelineEnd(event: DiagnosticEvent & { type: \"pipeline_end\" }): void {\n this.events.push(this.stamp(event));\n }\n\n/**\n * Build the summary/metadata/parselets report from this collector's\n * running state.\n *\n * These fields used to be recomputed by rescanning the FULL `events`\n * array on every single call (`.some()`/`.filter()`/a manual scan), since\n * `events` is never cleared except by an explicit `reset()` (which nothing\n * in `ExpressionEngine` currently calls, the cumulative-across-the-whole-\n * document design is deliberate, see `onPipelineStart`'s comment and the\n * playground's `buildLineStats()`, which slices per-line events out of\n * this ever-growing array via cumulative-length diffing), that meant\n * per-call cost grew linearly with total prior calls: O(n²) diagnostic-mode\n * evaluation over a document's lifetime. Fixed by maintaining each of these\n * incrementally as events arrive (see the `on*` handlers above), the same\n * pattern already used for `parseletEntries`. Every value produced here is\n * identical to what the old rescanning code produced, including its\n * existing \"first bytecode_built event wins\" quirk. This is a performance\n * fix, not a behavior change.\n */\ngetReport(): DiagnosticReport | undefined {\n if (this.events.length === 0) return undefined;\n\n const elapsedNs = performance.now() * 1e6 - this.startNs;\n\n const parseCategories = new Map<string, number>();\n for (const [, entry] of this.parseletEntries) {\n parseCategories.set(entry.category, entry.count);\n }\n\n const totalOpcodes = this.firstBytecodeOpcodesLength;\n const cacheHit = this.cacheHitSeen;\n const totalTokens = this.totalTokens;\n\n const report: DiagnosticReport = {\n events: this.events,\n parselets: this.parseletMatches.map((e) => ({ ...e })),\n summary: {\n totalTokens,\n totalParselets: parseCategories.size,\n totalOpcodes,\n cacheHit,\n elapsedNs,\n parseCategories,\n },\n metadata: {\n expression: this.lastExpression,\n inputType: this.lastInputType,\n timestamp: Date.now(),\n vmTraceEnabled: this.vmStepSeen,\n },\n toJSON(): DiagnosticReportJSON {\n return {\n events: report.events,\n parselets: report.parselets,\n summary: {\n totalTokens: report.summary.totalTokens,\n totalParselets: report.summary.totalParselets,\n totalOpcodes: report.summary.totalOpcodes,\n cacheHit: report.summary.cacheHit,\n elapsedNs: report.summary.elapsedNs,\n parseCategories: Object.fromEntries(report.summary.parseCategories),\n },\n metadata: { ...report.metadata },\n };\n },\n };\n\n return report;\n }\n}","\n\nimport type { MatrixData, RangeData, ColourData, SplitData } from \"@solve-js/vm/Value\";\nimport type { SymbolicNode } from \"@solve-js/symbolic\";\n\n/**\n * Diagnostic event types as string constants (not const enum, for cross-module compatibility with isolatedModules)\n */\nexport const DiagnosticEventType = {\n TokenEmitted: \"token_emitted\",\n NormalizerStart: \"normalizer_start\",\n TokenFused: \"token_fused\",\n NormalizerEnd: \"normalizer_end\",\n ParseletMatched: \"parselet_matched\",\n BytecodeBuilt: \"bytecode_built\",\n VmStep: \"vm_step\",\n VmHalt: \"vm_halt\",\n CacheHit: \"cache_hit\",\n CacheMiss: \"cache_miss\",\n PipelineStart: \"pipeline_start\",\n PipelineEnd: \"pipeline_end\",\n} as const;\n\n/** Discriminator naming which pipeline event a diagnostic record describes. */\nexport type EventType = (typeof DiagnosticEventType)[keyof typeof DiagnosticEventType];\n\n/** Base event, all events include a timestamp relative to pipeline start */\nexport interface BaseEvent {\n readonly type: string;\n readonly elapsedNs: number;\n readonly expression: string;\n}\n\n/** Emitted after each token is produced by the lexer */\nexport interface TokenEmittedEvent extends BaseEvent {\n readonly type: \"token_emitted\";\n readonly token: {\n readonly type: string;\n readonly value: string;\n readonly offset: number;\n readonly line: number;\n readonly col: number;\n };\n}\n\n/** Emitted when the parser resolves a parselet for a token */\nexport interface ParseletMatchedEvent extends BaseEvent {\n readonly type: \"parselet_matched\";\n readonly tokenType: string;\n readonly tokenValue: string;\n readonly parseletCategory: string;\n readonly parseletType: string;\n readonly isPrefix: boolean;\n readonly bindingPower?: number;\n readonly tokenOffset: number;\n}\n\n/** Emitted after bytecode is built */\nexport interface BytecodeBuiltEvent extends BaseEvent {\n readonly type: \"bytecode_built\";\n readonly opcodesLength: number;\n readonly numbersLength: number;\n readonly stringsLength: number;\n readonly isCached: boolean;\n}\n\n/** Emitted after each VM opcode execution (only when vmTrace is enabled) */\nexport interface VmStepEvent extends BaseEvent {\n readonly type: \"vm_step\";\n readonly opcode: number;\n readonly opcodeName: string;\n readonly ip: number;\n readonly stackDepth: number;\n readonly instructionNumber: number;\n readonly stack: ReadonlyArray<{\n readonly type: number;\n readonly value: number | bigint | string | boolean | MatrixData | RangeData | ColourData | SplitData | SymbolicNode;\n readonly unit?: string;\n }>;\n}\n\n/** Emitted when the VM halts with a result */\nexport interface VmHaltEvent extends BaseEvent {\n readonly type: \"vm_halt\";\n readonly result?: {\n readonly type: number;\n readonly value: number | bigint | string | boolean | MatrixData | RangeData | ColourData | SplitData | SymbolicNode;\n readonly unit?: string;\n };\n}\n\n/** Emitted on cache hit */\nexport interface CacheHitEvent extends BaseEvent {\n readonly type: \"cache_hit\";\n readonly cache: \"bytecode\" | \"line\";\n readonly key: string;\n}\n\n/** Emitted on cache miss */\nexport interface CacheMissEvent extends BaseEvent {\n readonly type: \"cache_miss\";\n readonly cache: \"bytecode\" | \"line\";\n readonly key: string;\n}\n\n/** Emitted when a pipeline evaluation begins */\nexport interface PipelineStartEvent extends BaseEvent {\n readonly type: \"pipeline_start\";\n readonly inputType: string;\n}\n\n/** Emitted when a pipeline evaluation completes */\nexport interface PipelineEndEvent extends BaseEvent {\n readonly type: \"pipeline_end\";\n readonly success: boolean;\n readonly error?: string;\n readonly totalTokens: number;\n readonly totalOpcodes: number;\n}\n\n/** Emitted when the normalizer begins its pass */\nexport interface NormalizerStartEvent extends BaseEvent {\n readonly type: \"normalizer_start\";\n readonly inputTokenCount: number;\n}\n\n/** Emitted when the normalizer fuses tokens */\nexport interface TokenFusedEvent extends BaseEvent {\n readonly type: \"token_fused\";\n readonly ruleName: string;\n readonly sourceTokenCount: number;\n readonly fusedTokenType: string;\n readonly fusedTokenValue: string;\n}\n\n/** Emitted when the normalizer completes its pass */\nexport interface NormalizerEndEvent extends BaseEvent {\n readonly type: \"normalizer_end\";\n readonly outputTokenCount: number;\n readonly fusionsCount: number;\n}\n\n/** Union of all event types */\nexport type DiagnosticEvent =\n | TokenEmittedEvent\n | NormalizerStartEvent\n | TokenFusedEvent\n | NormalizerEndEvent\n | ParseletMatchedEvent\n | BytecodeBuiltEvent\n | VmStepEvent\n | VmHaltEvent\n | CacheHitEvent\n | CacheMissEvent\n | PipelineStartEvent\n | PipelineEndEvent;\n\n/** Categorized parselet info */\nexport interface CategorizedParselet {\n readonly tokenType: string;\n readonly tokenValue: string;\n readonly parseletCategory: string;\n readonly parseletType: string;\n readonly isPrefix: boolean;\n readonly bindingPower?: number;\n readonly tokenOffset: number;\n}\n\n/** JSON-serializable representation of a DiagnosticReport */\nexport interface DiagnosticReportJSON {\n readonly events: readonly DiagnosticEvent[];\n readonly parselets: readonly CategorizedParselet[];\n readonly summary: {\n readonly totalTokens: number;\n readonly totalParselets: number;\n readonly totalOpcodes: number;\n readonly cacheHit: boolean;\n readonly elapsedNs: number;\n readonly parseCategories: Record<string, number>;\n };\n readonly metadata: {\n readonly expression: string;\n readonly inputType: string;\n readonly timestamp: number;\n readonly vmTraceEnabled: boolean;\n };\n}\n\n/** Structured diagnostic report */\nexport interface DiagnosticReport {\n readonly events: readonly DiagnosticEvent[];\n readonly parselets: readonly CategorizedParselet[];\n readonly summary: {\n readonly totalTokens: number;\n readonly totalParselets: number;\n readonly totalOpcodes: number;\n readonly cacheHit: boolean;\n readonly elapsedNs: number;\n readonly parseCategories: ReadonlyMap<string, number>;\n };\n readonly metadata: {\n readonly expression: string;\n readonly inputType: string;\n readonly timestamp: number;\n readonly vmTraceEnabled: boolean;\n };\n\n /** Serialize to a JSON-safe plain object */\n toJSON(): DiagnosticReportJSON;\n}\n\n/** JSON-serializable representation of a DiagnosticReport */\nexport interface DiagnosticReportJSON {\n readonly events: readonly DiagnosticEvent[];\n readonly parselets: readonly CategorizedParselet[];\n readonly summary: {\n readonly totalTokens: number;\n readonly totalParselets: number;\n readonly totalOpcodes: number;\n readonly cacheHit: boolean;\n readonly elapsedNs: number;\n readonly parseCategories: Record<string, number>;\n };\n readonly metadata: {\n readonly expression: string;\n readonly inputType: string;\n readonly timestamp: number;\n readonly vmTraceEnabled: boolean;\n };\n}"]}
1
+ {"version":3,"sources":["../src/diagnostics/pipeline.ts","../src/diagnostics/collector.ts","../src/diagnostics/timeline-collector.ts","../src/diagnostics/events.ts"],"names":["DiagnosticPipeline","collector","idx","event","c","reports","report","DiagnosticCollector","_event","TimelineDiagnosticCollector","elapsedNs","entry","parseCategories","totalOpcodes","cacheHit","totalTokens","e","DiagnosticEventType"],"mappings":"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","file":"chunk-GHW2X7PS.js","sourcesContent":["import { DiagnosticCollector } from \"./collector\";\nimport { DiagnosticEvent } from \"./events\";\nimport { DiagnosticReport } from \"./events\";\n\n/**\n * Dispatches diagnostic events to all registered collectors.\n *\n * Performance guarantee: when no collectors are registered (production mode),\n * every dispatch method is a branch on `this.collectors.length === 0` which\n * modern JS engines will predict and eliminate. The overhead is a single\n * comparison per call, effectively zero.\n */\nexport class DiagnosticPipeline {\n private collectors: DiagnosticCollector[] = [];\n\n register(collector: DiagnosticCollector): void {\n this.collectors.push(collector);\n }\n\n unregister(collector: DiagnosticCollector): void {\n const idx = this.collectors.indexOf(collector);\n if (idx !== -1) this.collectors.splice(idx, 1);\n }\n\n clear(): void {\n this.collectors = [];\n }\n\n get hasCollectors(): boolean {\n return this.collectors.length > 0;\n }\n\n get collectorCount(): number {\n return this.collectors.length;\n }\n\n // Inline-optimized dispatchers, each checks length once then loops.\n // When collectors.length === 0, the JIT eliminates the entire method body.\n\n firePipelineStart(event: DiagnosticEvent & { type: \"pipeline_start\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onPipelineStart?.(event);\n }\n\n fireTokenEmitted(event: DiagnosticEvent & { type: \"token_emitted\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onTokenEmitted?.(event);\n }\n\n fireNormalizerStart(event: DiagnosticEvent & { type: \"normalizer_start\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onNormalizerStart?.(event);\n }\n\n fireTokenFused(event: DiagnosticEvent & { type: \"token_fused\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onTokenFused?.(event);\n }\n\n fireNormalizerEnd(event: DiagnosticEvent & { type: \"normalizer_end\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onNormalizerEnd?.(event);\n }\n\n fireParseletMatched(event: DiagnosticEvent & { type: \"parselet_matched\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onParseletMatched?.(event);\n }\n\n fireBytecodeBuilt(event: DiagnosticEvent & { type: \"bytecode_built\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onBytecodeBuilt?.(event);\n }\n\n fireVmStep(event: DiagnosticEvent & { type: \"vm_step\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onVmStep?.(event);\n }\n\n fireVmHalt(event: DiagnosticEvent & { type: \"vm_halt\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onVmHalt?.(event);\n }\n\n fireCacheHit(event: DiagnosticEvent & { type: \"cache_hit\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onCacheHit?.(event);\n }\n\n fireCacheMiss(event: DiagnosticEvent & { type: \"cache_miss\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onCacheMiss?.(event);\n }\n\n firePipelineEnd(event: DiagnosticEvent & { type: \"pipeline_end\" }): void {\n if (this.collectors.length === 0) return;\n for (const c of this.collectors) c.onPipelineEnd?.(event);\n }\n\n collectReports(): DiagnosticReport[] {\n const reports: DiagnosticReport[] = [];\n for (const c of this.collectors) {\n const report = c.getReport();\n if (report) reports.push(report);\n }\n return reports;\n }\n\n reset(): void {\n for (const c of this.collectors) c.reset();\n }\n}","import { DiagnosticEvent } from \"./events\";\nimport { DiagnosticReport } from \"./events\";\n\n/**\n * Interface for collecting diagnostic data during pipeline execution.\n *\n * All methods are implemented as concrete no-ops so subclasses only\n * need to override the ones they care about. This avoids optional\n * method issues with TypeScript's strict mode.\n *\n * The parameters are named `_event` because these base implementations\n * deliberately ignore them. Overrides are free to name theirs `event` and use\n * it; TypeScript does not match parameter names when checking overrides.\n */\nexport abstract class DiagnosticCollector {\n onPipelineStart(_event: DiagnosticEvent & { type: \"pipeline_start\" }): void {}\n onTokenEmitted(_event: DiagnosticEvent & { type: \"token_emitted\" }): void {}\n onNormalizerStart(_event: DiagnosticEvent & { type: \"normalizer_start\" }): void {}\n onTokenFused(_event: DiagnosticEvent & { type: \"token_fused\" }): void {}\n onNormalizerEnd(_event: DiagnosticEvent & { type: \"normalizer_end\" }): void {}\n onParseletMatched(_event: DiagnosticEvent & { type: \"parselet_matched\" }): void {}\n onBytecodeBuilt(_event: DiagnosticEvent & { type: \"bytecode_built\" }): void {}\n onVmStep(_event: DiagnosticEvent & { type: \"vm_step\" }): void {}\n onVmHalt(_event: DiagnosticEvent & { type: \"vm_halt\" }): void {}\n onCacheHit(_event: DiagnosticEvent & { type: \"cache_hit\" }): void {}\n onCacheMiss(_event: DiagnosticEvent & { type: \"cache_miss\" }): void {}\n onPipelineEnd(_event: DiagnosticEvent & { type: \"pipeline_end\" }): void {}\n\n abstract getReport(): DiagnosticReport | undefined;\n abstract reset(): void;\n}","import { DiagnosticCollector } from \"./collector\";\nimport { DiagnosticReport, DiagnosticReportJSON, DiagnosticEvent, CategorizedParselet } from \"./events\";\n\n/**\n * Collects all pipeline events with high-resolution timestamps.\n *\n * Overrides the zero-filled `elapsedNs` on every incoming event with a\n * real `performance.now()` delta from `onPipelineStart`. This enables\n * per-stage timing extraction from the event timeline (lexer/parser/\n * compiler/VM breakdown) rather than relying on a single total elapsed.\n *\n * Produces a complete DiagnosticReport at the end of evaluation.\n */\nexport class TimelineDiagnosticCollector extends DiagnosticCollector {\n private events: DiagnosticEvent[] = [];\n private startNs: number = 0;\n private parseletEntries: Map<string, { category: string; count: number }> = new Map();\n\n // Incrementally-maintained summary state. See getReport()'s doc comment\n // for why these exist. Each mirrors exactly what getReport() used to\n // recompute by rescanning the full `events` array on every call.\n private totalTokens = 0;\n private cacheHitSeen = false;\n private vmStepSeen = false;\n private hasBytecodeBuilt = false;\n private firstBytecodeOpcodesLength = 0;\n private parseletMatches: CategorizedParselet[] = [];\n private lastExpression = \"\";\n private lastInputType = \"\";\n\n /**\n * Current cumulative count of `parselet_matched` events seen since\n * construction (or the last `reset()`), a cheap peek that doesn't build\n * the full report (`getReport()` copies the whole `parseletMatches`\n * array). Used by `ExpressionEngine.evaluateExpressionWithDiagnostic()`\n * to capture a \"before\" baseline per line, since `parseletMatches` itself\n * is deliberately cumulative across an entire document pass (see\n * `onPipelineStart`'s doc comment) rather than reset per line.\n */\n get parseletMatchCount(): number {\n return this.parseletMatches.length;\n }\n\n reset(): void {\n this.events = [];\n this.parseletEntries.clear();\n this.startNs = 0;\n this.totalTokens = 0;\n this.cacheHitSeen = false;\n this.vmStepSeen = false;\n this.hasBytecodeBuilt = false;\n this.firstBytecodeOpcodesLength = 0;\n this.parseletMatches = [];\n this.lastExpression = \"\";\n this.lastInputType = \"\";\n }\n\n /** Stamp the real wall-clock `elapsedNs` onto an event before storing it. */\n private stamp<T extends DiagnosticEvent>(event: T): T {\n const elapsedNs = this.startNs !== 0\n ? performance.now() * 1e6 - this.startNs\n : 0;\n return { ...event, elapsedNs } as T;\n }\n\n onPipelineStart(event: DiagnosticEvent & { type: \"pipeline_start\" }): void {\n // Set once per collector lifetime (until an explicit reset()), not on\n // every pipeline, a multi-line evaluation pass fires pipeline_start\n // once per line, all appending to the SAME `events` array (see\n // buildLineStats() in the playground, which relies on that shared,\n // ever-growing array to slice out each line's own events via\n // cumulative-length diffing). Resetting the origin on every line meant\n // every individual line's own timestamps were self-consistent, but\n // nothing tied one line's clock to another's, any code trying to\n // compare or span timestamps ACROSS lines (e.g. \"how far into this\n // pass are we\") had no stable reference point to do it with.\n if (this.startNs === 0) {\n this.startNs = performance.now() * 1e6;\n }\n // Tracked incrementally (most-recent wins) so getReport()'s `metadata`\n // describes the line THIS report is actually about, reading\n // `events[0]` instead (the old code) froze `expression`/`inputType` on\n // the very first line ever evaluated in the session, forever, which is\n // wrong regardless of whether a field is meant to be cumulative or\n // per-line: nothing downstream ever wanted \"line 1's expression\" once\n // the document had moved on to line 50.\n this.lastExpression = event.expression;\n this.lastInputType = event.inputType;\n this.events.push(this.stamp(event));\n }\n\n onTokenEmitted(event: DiagnosticEvent & { type: \"token_emitted\" }): void {\n this.events.push(this.stamp(event));\n this.totalTokens++;\n }\n\n onNormalizerStart(event: DiagnosticEvent & { type: \"normalizer_start\" }): void {\n this.events.push(this.stamp(event));\n }\n\n onTokenFused(event: DiagnosticEvent & { type: \"token_fused\" }): void {\n this.events.push(this.stamp(event));\n }\n\n onNormalizerEnd(event: DiagnosticEvent & { type: \"normalizer_end\" }): void {\n this.events.push(this.stamp(event));\n }\n\n onParseletMatched(event: DiagnosticEvent & { type: \"parselet_matched\" }): void {\n this.events.push(this.stamp(event));\n\n const entry = this.parseletEntries.get(event.parseletCategory);\n if (entry) {\n entry.count++;\n } else {\n this.parseletEntries.set(event.parseletCategory, {\n category: event.parseletCategory,\n count: 1,\n });\n }\n\n this.parseletMatches.push({\n tokenType: event.tokenType,\n tokenValue: event.tokenValue,\n parseletCategory: event.parseletCategory,\n parseletType: event.parseletType,\n isPrefix: event.isPrefix,\n bindingPower: event.bindingPower,\n tokenOffset: event.tokenOffset,\n });\n }\n\n onBytecodeBuilt(event: DiagnosticEvent & { type: \"bytecode_built\" }): void {\n this.events.push(this.stamp(event));\n // Matches getReport()'s original behavior: the FIRST bytecode_built\n // event ever seen (not the most recent) wins, preserved as-is here\n // this rewrite only changes HOW that value is computed, not what it is.\n if (!this.hasBytecodeBuilt) {\n this.hasBytecodeBuilt = true;\n this.firstBytecodeOpcodesLength = event.opcodesLength;\n }\n }\n\n onVmStep(event: DiagnosticEvent & { type: \"vm_step\" }): void {\n this.events.push(this.stamp(event));\n this.vmStepSeen = true;\n }\n\n onVmHalt(event: DiagnosticEvent & { type: \"vm_halt\" }): void {\n this.events.push(this.stamp(event));\n }\n\n onCacheHit(event: DiagnosticEvent & { type: \"cache_hit\" }): void {\n this.events.push(this.stamp(event));\n this.cacheHitSeen = true;\n }\n\n onCacheMiss(event: DiagnosticEvent & { type: \"cache_miss\" }): void {\n this.events.push(this.stamp(event));\n }\n\n onPipelineEnd(event: DiagnosticEvent & { type: \"pipeline_end\" }): void {\n this.events.push(this.stamp(event));\n }\n\n/**\n * Build the summary/metadata/parselets report from this collector's\n * running state.\n *\n * These fields used to be recomputed by rescanning the FULL `events`\n * array on every single call (`.some()`/`.filter()`/a manual scan), since\n * `events` is never cleared except by an explicit `reset()` (which nothing\n * in `ExpressionEngine` currently calls, the cumulative-across-the-whole-\n * document design is deliberate, see `onPipelineStart`'s comment and the\n * playground's `buildLineStats()`, which slices per-line events out of\n * this ever-growing array via cumulative-length diffing), that meant\n * per-call cost grew linearly with total prior calls: O(n²) diagnostic-mode\n * evaluation over a document's lifetime. Fixed by maintaining each of these\n * incrementally as events arrive (see the `on*` handlers above), the same\n * pattern already used for `parseletEntries`. Every value produced here is\n * identical to what the old rescanning code produced, including its\n * existing \"first bytecode_built event wins\" quirk. This is a performance\n * fix, not a behavior change.\n */\ngetReport(): DiagnosticReport | undefined {\n if (this.events.length === 0) return undefined;\n\n const elapsedNs = performance.now() * 1e6 - this.startNs;\n\n const parseCategories = new Map<string, number>();\n for (const [, entry] of this.parseletEntries) {\n parseCategories.set(entry.category, entry.count);\n }\n\n const totalOpcodes = this.firstBytecodeOpcodesLength;\n const cacheHit = this.cacheHitSeen;\n const totalTokens = this.totalTokens;\n\n const report: DiagnosticReport = {\n events: this.events,\n parselets: this.parseletMatches.map((e) => ({ ...e })),\n summary: {\n totalTokens,\n totalParselets: parseCategories.size,\n totalOpcodes,\n cacheHit,\n elapsedNs,\n parseCategories,\n },\n metadata: {\n expression: this.lastExpression,\n inputType: this.lastInputType,\n timestamp: Date.now(),\n vmTraceEnabled: this.vmStepSeen,\n },\n toJSON(): DiagnosticReportJSON {\n return {\n events: report.events,\n parselets: report.parselets,\n summary: {\n totalTokens: report.summary.totalTokens,\n totalParselets: report.summary.totalParselets,\n totalOpcodes: report.summary.totalOpcodes,\n cacheHit: report.summary.cacheHit,\n elapsedNs: report.summary.elapsedNs,\n parseCategories: Object.fromEntries(report.summary.parseCategories),\n },\n metadata: { ...report.metadata },\n };\n },\n };\n\n return report;\n }\n}","\n\nimport type { MatrixData, RangeData, ColourData, SplitData, ChartData } from \"@solve-js/vm/Value\";\nimport type { SymbolicNode } from \"@solve-js/symbolic\";\n\n/**\n * Diagnostic event types as string constants (not const enum, for cross-module compatibility with isolatedModules)\n */\nexport const DiagnosticEventType = {\n TokenEmitted: \"token_emitted\",\n NormalizerStart: \"normalizer_start\",\n TokenFused: \"token_fused\",\n NormalizerEnd: \"normalizer_end\",\n ParseletMatched: \"parselet_matched\",\n BytecodeBuilt: \"bytecode_built\",\n VmStep: \"vm_step\",\n VmHalt: \"vm_halt\",\n CacheHit: \"cache_hit\",\n CacheMiss: \"cache_miss\",\n PipelineStart: \"pipeline_start\",\n PipelineEnd: \"pipeline_end\",\n} as const;\n\n/** Discriminator naming which pipeline event a diagnostic record describes. */\nexport type EventType = (typeof DiagnosticEventType)[keyof typeof DiagnosticEventType];\n\n/** Base event, all events include a timestamp relative to pipeline start */\nexport interface BaseEvent {\n readonly type: string;\n readonly elapsedNs: number;\n readonly expression: string;\n}\n\n/** Emitted after each token is produced by the lexer */\nexport interface TokenEmittedEvent extends BaseEvent {\n readonly type: \"token_emitted\";\n readonly token: {\n readonly type: string;\n readonly value: string;\n readonly offset: number;\n readonly line: number;\n readonly col: number;\n };\n}\n\n/** Emitted when the parser resolves a parselet for a token */\nexport interface ParseletMatchedEvent extends BaseEvent {\n readonly type: \"parselet_matched\";\n readonly tokenType: string;\n readonly tokenValue: string;\n readonly parseletCategory: string;\n readonly parseletType: string;\n readonly isPrefix: boolean;\n readonly bindingPower?: number;\n readonly tokenOffset: number;\n}\n\n/** Emitted after bytecode is built */\nexport interface BytecodeBuiltEvent extends BaseEvent {\n readonly type: \"bytecode_built\";\n readonly opcodesLength: number;\n readonly numbersLength: number;\n readonly stringsLength: number;\n readonly isCached: boolean;\n}\n\n/** Emitted after each VM opcode execution (only when vmTrace is enabled) */\nexport interface VmStepEvent extends BaseEvent {\n readonly type: \"vm_step\";\n readonly opcode: number;\n readonly opcodeName: string;\n readonly ip: number;\n readonly stackDepth: number;\n readonly instructionNumber: number;\n readonly stack: ReadonlyArray<{\n readonly type: number;\n readonly value: number | bigint | string | boolean | MatrixData | RangeData | ColourData | SplitData | ChartData | SymbolicNode;\n readonly unit?: string;\n }>;\n}\n\n/** Emitted when the VM halts with a result */\nexport interface VmHaltEvent extends BaseEvent {\n readonly type: \"vm_halt\";\n readonly result?: {\n readonly type: number;\n readonly value: number | bigint | string | boolean | MatrixData | RangeData | ColourData | SplitData | ChartData | SymbolicNode;\n readonly unit?: string;\n };\n}\n\n/** Emitted on cache hit */\nexport interface CacheHitEvent extends BaseEvent {\n readonly type: \"cache_hit\";\n readonly cache: \"bytecode\" | \"line\";\n readonly key: string;\n}\n\n/** Emitted on cache miss */\nexport interface CacheMissEvent extends BaseEvent {\n readonly type: \"cache_miss\";\n readonly cache: \"bytecode\" | \"line\";\n readonly key: string;\n}\n\n/** Emitted when a pipeline evaluation begins */\nexport interface PipelineStartEvent extends BaseEvent {\n readonly type: \"pipeline_start\";\n readonly inputType: string;\n}\n\n/** Emitted when a pipeline evaluation completes */\nexport interface PipelineEndEvent extends BaseEvent {\n readonly type: \"pipeline_end\";\n readonly success: boolean;\n readonly error?: string;\n readonly totalTokens: number;\n readonly totalOpcodes: number;\n}\n\n/** Emitted when the normalizer begins its pass */\nexport interface NormalizerStartEvent extends BaseEvent {\n readonly type: \"normalizer_start\";\n readonly inputTokenCount: number;\n}\n\n/** Emitted when the normalizer fuses tokens */\nexport interface TokenFusedEvent extends BaseEvent {\n readonly type: \"token_fused\";\n readonly ruleName: string;\n readonly sourceTokenCount: number;\n readonly fusedTokenType: string;\n readonly fusedTokenValue: string;\n}\n\n/** Emitted when the normalizer completes its pass */\nexport interface NormalizerEndEvent extends BaseEvent {\n readonly type: \"normalizer_end\";\n readonly outputTokenCount: number;\n readonly fusionsCount: number;\n}\n\n/** Union of all event types */\nexport type DiagnosticEvent =\n | TokenEmittedEvent\n | NormalizerStartEvent\n | TokenFusedEvent\n | NormalizerEndEvent\n | ParseletMatchedEvent\n | BytecodeBuiltEvent\n | VmStepEvent\n | VmHaltEvent\n | CacheHitEvent\n | CacheMissEvent\n | PipelineStartEvent\n | PipelineEndEvent;\n\n/** Categorized parselet info */\nexport interface CategorizedParselet {\n readonly tokenType: string;\n readonly tokenValue: string;\n readonly parseletCategory: string;\n readonly parseletType: string;\n readonly isPrefix: boolean;\n readonly bindingPower?: number;\n readonly tokenOffset: number;\n}\n\n/** JSON-serializable representation of a DiagnosticReport */\nexport interface DiagnosticReportJSON {\n readonly events: readonly DiagnosticEvent[];\n readonly parselets: readonly CategorizedParselet[];\n readonly summary: {\n readonly totalTokens: number;\n readonly totalParselets: number;\n readonly totalOpcodes: number;\n readonly cacheHit: boolean;\n readonly elapsedNs: number;\n readonly parseCategories: Record<string, number>;\n };\n readonly metadata: {\n readonly expression: string;\n readonly inputType: string;\n readonly timestamp: number;\n readonly vmTraceEnabled: boolean;\n };\n}\n\n/** Structured diagnostic report */\nexport interface DiagnosticReport {\n readonly events: readonly DiagnosticEvent[];\n readonly parselets: readonly CategorizedParselet[];\n readonly summary: {\n readonly totalTokens: number;\n readonly totalParselets: number;\n readonly totalOpcodes: number;\n readonly cacheHit: boolean;\n readonly elapsedNs: number;\n readonly parseCategories: ReadonlyMap<string, number>;\n };\n readonly metadata: {\n readonly expression: string;\n readonly inputType: string;\n readonly timestamp: number;\n readonly vmTraceEnabled: boolean;\n };\n\n /** Serialize to a JSON-safe plain object */\n toJSON(): DiagnosticReportJSON;\n}\n\n/** JSON-serializable representation of a DiagnosticReport */\nexport interface DiagnosticReportJSON {\n readonly events: readonly DiagnosticEvent[];\n readonly parselets: readonly CategorizedParselet[];\n readonly summary: {\n readonly totalTokens: number;\n readonly totalParselets: number;\n readonly totalOpcodes: number;\n readonly cacheHit: boolean;\n readonly elapsedNs: number;\n readonly parseCategories: Record<string, number>;\n };\n readonly metadata: {\n readonly expression: string;\n readonly inputType: string;\n readonly timestamp: number;\n readonly vmTraceEnabled: boolean;\n };\n}"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkR7T3NGUE_cjs=require('./chunk-R7T3NGUE.cjs'),chunkZ5KBBQOJ_cjs=require('./chunk-Z5KBBQOJ.cjs'),chunk4BZIYU7S_cjs=require('./chunk-4BZIYU7S.cjs'),chunkVBSMA7WJ_cjs=require('./chunk-VBSMA7WJ.cjs'),chunkZOOVGXMK_cjs=require('./chunk-ZOOVGXMK.cjs'),chunk5FGOIDLS_cjs=require('./chunk-5FGOIDLS.cjs'),chunkIANAMBJQ_cjs=require('./chunk-IANAMBJQ.cjs'),chunkCIQOK7Q4_cjs=require('./chunk-CIQOK7Q4.cjs'),chunkSOMGSIO4_cjs=require('./chunk-SOMGSIO4.cjs');var Ct=class{constructor(){this.consumers=new Map;this.dependencies=new Map;this.writes=new Map;this.lineReads=new Map;this.dataSourceDependencies=new Map;this.dataSourceConsumers=new Map;}registerLine(a,o,u){let m=this.lineReads.get(a);if(m)for(let b of m){let h=this.consumers.get(b);h&&h.delete(a);}this.lineReads.set(a,new Set(o));for(let b of o)this.consumers.has(b)||this.consumers.set(b,new Set),this.consumers.get(b).add(a);if(u.length>0){this.dependencies.set(a,new Set(o)),this.writes.set(a,new Set(u));for(let b of u){let h=this.consumers.get(b);h&&h.delete(a);}}}registerLineDataSourceDependency(a,o,u){let m=JSON.stringify(u),b=`${o}:${m}`;this.dataSourceDependencies.has(a)||this.dataSourceDependencies.set(a,new Set),this.dataSourceDependencies.get(a).add(b),this.dataSourceConsumers.has(b)||this.dataSourceConsumers.set(b,new Set),this.dataSourceConsumers.get(b).add(a);}getAffectedLines(a){let o=new Set,u=[a];for(;u.length>0;){let m=u.pop(),b=this.consumers.get(m);if(b)for(let h of b){if(o.has(h))continue;o.add(h);let d=this.writes.get(h);if(d)for(let y of d)u.push(y);}}return o}getAffectedLinesInOrder(a){let o=this.getAffectedLines(a);if(o.size===0)return [];let u=new Map,m=new Map;for(let y of o)u.has(y)||u.set(y,0),m.has(y)||m.set(y,[]);let b=new Map;for(let y of o){let x=this.writes.get(y);if(x)for(let A of x)b.set(A,y);}for(let y of o){let x=this.lineReads.get(y);if(x)for(let A of x){let w=b.get(A);w!==void 0&&w!==y&&(m.get(w).push(y),u.set(y,(u.get(y)??0)+1));}}let h=[];for(let[y,x]of u)x===0&&h.push(y);if(h.length===0&&o.size>0){let y=Array.from(o).sort((x,A)=>x-A);h.push(y[0]);}let d=[];for(;h.length>0;){let y=h.shift();d.push(y);for(let x of m.get(y)??[]){let A=(u.get(x)??1)-1;u.set(x,A),A===0&&h.push(x);}}if(d.length<o.size){let y=new Set(d),x=Array.from(o).filter(A=>!y.has(A)).sort((A,w)=>A-w);d.push(...x);}return d}getAffectedLinesByDataSource(a,o){let u=JSON.stringify(o),m=`${a}:${u}`;return this.dataSourceConsumers.get(m)??new Set}removeLine(a){let o=this.lineReads.get(a);if(o){for(let m of o){let b=this.consumers.get(m);b&&b.delete(a);}this.lineReads.delete(a);}this.dependencies.delete(a),this.writes.delete(a);let u=this.dataSourceDependencies.get(a);if(u){for(let m of u)this.dataSourceConsumers.get(m)?.delete(a);this.dataSourceDependencies.delete(a);}}getConsumers(a){return this.consumers.get(a)??new Set}getDependencies(a){return this.dependencies.get(a)??new Set}getWrites(a){return this.writes.get(a)??new Set}getSnapshot(){let a={};for(let[h,d]of this.consumers)a[h]=Array.from(d);let o={};for(let[h,d]of this.writes)o[h]=Array.from(d);let u={};for(let[h,d]of this.lineReads)u[h]=Array.from(d);let m={};for(let[h,d]of this.dataSourceDependencies)m[h]=Array.from(d);let b={};for(let[h,d]of this.dataSourceConsumers)b[h]=Array.from(d);return {consumers:a,writes:o,reads:u,dataSourceDeps:m,dataSourceConsumers:b}}clear(){this.consumers.clear(),this.dependencies.clear(),this.writes.clear(),this.lineReads.clear(),this.dataSourceDependencies.clear(),this.dataSourceConsumers.clear();}};var Ot=class{constructor(){this.definitions=new Map;}write(a,o,u){this.definitions.has(a)||this.definitions.set(a,[]);let m=this.definitions.get(a);m.push({line:o,expr:u}),m.sort((b,h)=>b.line-h.line);}read(a,o){let u=this.definitions.get(a);if(u){for(let m=u.length-1;m>=0;m--)if(u[m].line<=o)return u[m].expr.lastResult}}invalidateDownstream(a,o){let u=this.definitions.get(a);if(!u)return;let m=u.findIndex(b=>b.line===o);m!==-1&&u.splice(m+1);}clear(){this.definitions.clear();}};function Jt(r){let a=new Date(r).getDay();return a===0||a===6}function vt(r,a){return Jt(r)?false:a?!a(r):true}function Ut(r){let a=new Date(r);return new Date(a.getFullYear(),a.getMonth(),a.getDate()).getTime()}function Rt(r,a,o,u){let m=Math.trunc(Math.abs(a)),b=a>=0?1:-1,h=new Date(r),d=0;for(;m>0;){if(h.setDate(h.getDate()+b),d++,d>u)return null;vt(h.getTime(),o)&&m--;}return h.getTime()}function Vt(r,a,o,u){let m=Ut(Math.min(r,a)),b=Ut(Math.max(r,a)),h=Math.round((b-m)/864e5);if(h>u)return null;let d=0,y=new Date(m);for(let x=0;x<=h;x++)vt(y.getTime(),o)&&d++,y.setDate(y.getDate()+1);return d}var Zt={0:{name:"sqrt",min:1,max:1},1:{name:"abs",min:1,max:1},2:{name:"sin",min:1,max:1},3:{name:"cos",min:1,max:1},4:{name:"tan",min:1,max:1},5:{name:"log",min:1,max:1},6:{name:"ceil",min:1,max:1},7:{name:"floor",min:1,max:1},8:{name:"round",min:1,max:2},9:{name:"min",min:1,max:1/0},10:{name:"max",min:1,max:1/0},11:{name:"asin",min:1,max:1},12:{name:"acos",min:1,max:1},13:{name:"atan",min:1,max:1},14:{name:"atan2",min:2,max:2},15:{name:"sinh",min:1,max:1},16:{name:"cosh",min:1,max:1},17:{name:"tanh",min:1,max:1},18:{name:"asinh",min:1,max:1},19:{name:"acosh",min:1,max:1},20:{name:"atanh",min:1,max:1},21:{name:"cbrt",min:1,max:1},22:{name:"clz32",min:1,max:1},23:{name:"expm1",min:1,max:1},24:{name:"exp",min:1,max:1},25:{name:"fround",min:1,max:1},26:{name:"hypot",min:1,max:1/0},27:{name:"imul",min:2,max:2},28:{name:"log10",min:1,max:1},29:{name:"log1p",min:1,max:1},30:{name:"log2",min:1,max:1},31:{name:"pow",min:2,max:2},32:{name:"random",min:0,max:0},33:{name:"sign",min:1,max:1},34:{name:"trunc",min:1,max:1},35:{name:"degtorad",min:1,max:1},36:{name:"radtodeg",min:1,max:1},37:{name:"roll",min:2,max:2},38:{name:"gcd",min:2,max:2},39:{name:"lcm",min:2,max:2},40:{name:"permutation",min:2,max:2},41:{name:"combination",min:2,max:2},42:{name:"average",min:0,max:1/0},43:{name:"median",min:0,max:1/0},44:{name:"total",min:0,max:1/0},45:{name:"count",min:0,max:1/0},46:{name:"proportion",min:3,max:3},47:{name:"clamp",min:3,max:3},48:{name:"hex",min:1,max:1},49:{name:"bin",min:1,max:1},50:{name:"int",min:1,max:1},51:{name:"compoundInterest",min:3,max:3},52:{name:"interestEarned",min:3,max:3},53:{name:"compoundInterestRate",min:3,max:3},54:{name:"compoundInterestYears",min:3,max:3},55:{name:"loanRepayment",min:4,max:4},56:{name:"loanInterest",min:4,max:4},57:{name:"monthlyPayment",min:3,max:3},58:{name:"taxAdd",min:2,max:2},59:{name:"taxRemove",min:2,max:2},60:{name:"inflationAdjust",min:3,max:3},61:{name:"root",min:2,max:2},62:{name:"fact",min:1,max:1},63:{name:"transpose",min:1,max:1},64:{name:"det",min:1,max:1},65:{name:"inv",min:1,max:1},66:{name:"dot",min:2,max:2},67:{name:"expand",min:1,max:1},68:{name:"factor",min:1,max:1},69:{name:"solve",min:3,max:3},70:{name:"der",min:2,max:3},71:{name:"integral",min:2,max:2},72:{name:"taylor",min:4,max:4},73:{name:"jacobian",min:1,max:1/0},74:{name:"imaginary",min:1,max:1},75:{name:"conj",min:1,max:1},76:{name:"re",min:1,max:1},77:{name:"im",min:1,max:1},78:{name:"cancel",min:1,max:1},79:{name:"apart",min:1,max:1},80:{name:"compoundInterestEvery",min:4,max:4},81:{name:"compoundInterestEarnedEvery",min:4,max:4},82:{name:"presentValue",min:3,max:3},83:{name:"roi",min:2,max:2},84:{name:"annualisedReturn",min:3,max:3},85:{name:"taxIn",min:2,max:2},86:{name:"taxOn",min:2,max:2},87:{name:"sind",min:1,max:1},88:{name:"cosd",min:1,max:1},89:{name:"tand",min:1,max:1},90:{name:"asind",min:1,max:1},91:{name:"acosd",min:1,max:1},92:{name:"atand",min:1,max:1},93:{name:"daysCount",min:1,max:1},94:{name:"asTwoUnits",min:3,max:3},95:{name:"makeRate",min:2,max:2},96:{name:"atRate",min:2,max:2},97:{name:"roundToPlaces",min:2,max:2},98:{name:"splitEach",min:2,max:2},99:{name:"savingsGoalPayment",min:3,max:3},100:{name:"savingsGoalPeriods",min:5,max:5},101:{name:"standardDeviation",min:0,max:1/0},102:{name:"sampleStandardDeviation",min:0,max:1/0},103:{name:"variance",min:0,max:1/0},104:{name:"sampleVariance",min:0,max:1/0},105:{name:"spread",min:0,max:1/0},106:{name:"mode",min:0,max:1/0},107:{name:"weightedAverage",min:2,max:1/0}};function ke(r){return r===1?"1 argument":`${r} arguments`}function en(r){return r.max===1/0?`at least ${ke(r.min)}`:r.min===r.max?ke(r.min):`${r.min} to ${ke(r.max)}`}function Bt(r,a){let o=Zt[r];if(o!==void 0&&!(a>=o.min&&a<=o.max))return chunkSOMGSIO4_cjs.c.execution("BUILTIN_ARITY_MISMATCH",`${o.name}() takes ${en(o)}, but was given ${a===0?"none":ke(a)}`,{functionName:o.name,expectedMin:o.min,expectedMax:o.max,actual:a})}function jn(r,a=200,o=5e4,u=50,m=1e5,b=2e6,h=1e4,d=100,y=-100,x=chunkZ5KBBQOJ_cjs.y,A){let w=[],I=new Map,L=0,j,$,n=[],Q=new Map,W=new Map,K=new Map;return {push(f){w.length<a&&w.push(f);},getMaxStackDepth(){return a},getMaxCollectionSize(){return m},getMaxAllocatedElements(){return b},getMaxFunctionCalls(){return h},getMaxDateOffsetYears(){return d},getMinDateOffsetYears(){return y},isHoliday(f){return A?A(f):false},pop(){return w.length===0?chunk5FGOIDLS_cjs.n(0):w.pop()},popNumber(){return c(w).toNumber()},popString(){return q(c(w),"VM.popString()")},peek(){return w[w.length-1]},getStack(){return w},registry:r,getVar(f){if(n.length>0){let e=n[n.length-1].get(f);if(e!==void 0)return e}return I.get(f)},setVar(f,e){I.set(f,e);},deleteVar(f){I.delete(f);},pushCallFrame(f){if(n.length>=u)throw chunkSOMGSIO4_cjs.c.execution("FUNCTION_RECURSION_LIMIT_EXCEEDED",`Function call nesting exceeded maximum depth of ${u} (possible infinite recursion, e.g. f(x) = f(x))`,{maxFunctionRecursionDepth:u});n.push(f);},popCallFrame(){n.pop();},getCallFrame(){return n.length>0?n[n.length-1]:void 0},defineUserFunction(f,e,t){Q.set(f,{name:f,params:e,program:t});},getUserFunction(f){return Q.get(f)},hasUserFunction(f){return Q.has(f)},getVariableEntries(){return Array.from(I.entries())},getUserFunctionDefs(){return Array.from(Q.values())},defineEquation(f,e,t){W.set(f,{variable:f,factorNames:e,rhsProgram:t});},getEquation(f){return W.get(f)},hasEquation(f){return W.has(f)},defineScalarEquation(f,e,t){K.set(f,{variable:f,lhsProgram:e,rhsProgram:t});},getScalarEquation(f){return K.get(f)},hasScalarEquation(f){return K.has(f)},reset(){w.length=0,I.clear(),n.length=0,Q.clear(),W.clear(),K.clear(),L=0,$&&($(),$=void 0),j=void 0;},get activeSignal(){return j},set activeSignal(f){j=f;},get abortCurrent(){return $},set abortCurrent(f){$=f;},context:x,getMaxInstructions(){return o},getInstructionCount(){return L},incrementInstructions(f){if(L+=f,L>o)throw chunkSOMGSIO4_cjs.c.execution("INSTRUCTION_LIMIT_EXCEEDED",`Execution exceeded maximum of ${o} instructions`)}}}function tn(r,a){return r.rows===1&&r.cols===1?a.data.length:a.rows===1&&a.cols===1?r.data.length:r.cols!==a.rows?0:r.rows*a.cols}function nn(r,a){return !Number.isInteger(a)||a<0?0:r.rows*r.cols*(1+(a<2?1:2*Math.floor(Math.log2(a))))}function c(r){if(r.length===0)throw chunkSOMGSIO4_cjs.c.internal({code:"STACK_UNDERFLOW",message:"Stack underflow: an opcode expected a value on the stack but it was empty",expected:"at least one value on the VM stack",found:"an empty stack",suggestion:"this indicates corrupted bytecode or a bug in a package's parselet (mismatched push/pop counts), not a user-input error"});return r.pop()}var jt="bytecode is caller input on this entry point: rebuild the program with the engine's compiler, or fix the hand-assembled stream";function an(r){return typeof r=="number"?chunkVBSMA7WJ_cjs.b(r):r}function se(r,a,o,u,m,b={}){let h=an(a);return chunkSOMGSIO4_cjs.c.validation({code:r,message:`Malformed bytecode: ${h} ${o}`,expected:u,found:m,suggestion:jt,context:typeof a=="number"?{opcode:a,opcodeName:h,...b}:{site:h,...b}})}function U(r,a,o,u){if(a>=r.length)throw se("MALFORMED_BYTECODE_TRUNCATED",o,`is missing its ${u}: the program ends mid-instruction`,`an operand byte at offset ${a}`,`a program only ${r.length} byte(s) long`,{offset:a,length:r.length,role:u});return r[a]}function je(r,a,o,u,m,b){let h=U(r,a,o,u);if(h>=m)throw se("MALFORMED_BYTECODE_CONSTANT_INDEX",o,`reads ${b} entry ${h}, which does not exist`,`an index below ${m}`,`${h}`,{index:h,poolSize:m,pool:b});return h}function z(r,a,o,u,m){return Se(o,U(r,a,u,m),u)}function Se(r,a,o){let u=r[a];if(typeof u!="string")throw se("MALFORMED_BYTECODE_CONSTANT_INDEX",o,`reads string-pool entry ${a}, which is ${a>=r.length?"past the end of the pool":"not a string"}`,`an index below ${r.length}, holding a string`,a>=r.length?`${a}`:typeof u,{index:a,poolSize:r.length,pool:"string-pool"});return u}function q(r,a,o){if(typeof r.value!="string")throw se("MALFORMED_BYTECODE_OPERAND_TYPE",a,`expected a ${o??"string"} on the stack`,o?`a string value holding the ${o}`:"a string value",`a ${chunk5FGOIDLS_cjs.g[r.type]??"unknown"} value`,o?{role:o,valueType:r.type}:{valueType:r.type});return r.value}function Ft(r,a,o){if(r!==0&&r!==1&&r!==2)throw se("MALFORMED_BYTECODE_BODY_KIND",o,`has body kind ${r}, which is not one this VM knows`,"0 (inline body), 1 (builtin function) or 2 (user-defined function)",`${r}`,{kind:r,ref:a})}function rn(r,a){try{return BigInt(r)}catch{throw se("MALFORMED_BYTECODE_BIGINT_LITERAL",a,`cannot read "${r}" as a whole number`,"a string holding an integer, with no decimal point or separators",`"${r}"`,{literal:r})}}function on(r){if(r===null||typeof r!="object")return `expected a bytecode program, got ${r===null?"null":typeof r}`;let a=r;return typeof a.opcodes?.length!="number"?"the program has no `opcodes` array":typeof a.numbers?.length!="number"?"the program has no `numbers` pool":typeof a.strings?.length!="number"?"the program has no `strings` pool":null}var Lt=64;function ze(r,a,o,u,m,b,h,d){let y=new Map;for(let A=0;A<r.length;A++)y.set(r[A],o[A]);u.pushCallFrame(y);let x;try{x=Ze(a,u,m,b,h,d);}finally{u.popCallFrame();}if(x.type==="pending")throw chunkSOMGSIO4_cjs.c.execution("MAP_REDUCE_ASYNC_UNSUPPORTED","map/reduce transform bodies calling an async operation (weather, stocks, currency, ...) aren't supported");if(x.type==="error")throw x.error;return x.value}function sn(r,a,o,u,m,b,h){let d=new Map(o.getCallFrame());d.set(r,chunk5FGOIDLS_cjs.J(chunkZOOVGXMK_cjs.q(r))),o.pushCallFrame(d);let y;try{y=Ze(a,o,u,m,b,h);}finally{o.popCallFrame();}if(y.type==="pending")throw chunkSOMGSIO4_cjs.c.execution("SYMBOLIC_ASYNC_UNSUPPORTED","an algebra verb's expression cannot call an async operation (weather, stocks, currency, ...)");if(y.type==="error")throw y.error;return y.value}function $t(r,a){if(r.type!==6||a.type!==6)return null;let o=r.unit,u=a.unit;if(o===void 0||u===void 0)return null;let m=o.indexOf("/"),b=u.indexOf("/");if(m<0||b<0||o.slice(0,m)!==u.slice(0,b))return null;let h=chunkCIQOK7Q4_cjs.a[o.slice(m+1).toLowerCase()],d=chunkCIQOK7Q4_cjs.a[u.slice(b+1).toLowerCase()];return h===void 0||d===void 0||h[0]!==d[0]?null:r.toNumber()*(d[1]/h[1])}function Pt(r,a){if(r.type!==6||a.type!==6)return null;let o=r.unit,u=a.unit;if(o===void 0||u===void 0||o.includes("/")||u.includes("/"))return null;let m=chunkZOOVGXMK_cjs.ua[o.toUpperCase()]!==void 0,b=chunkZOOVGXMK_cjs.ua[u.toUpperCase()]!==void 0;return m===b?null:chunk5FGOIDLS_cjs.u(r.toNumber()*a.toNumber(),m?o:u)}function Yt(r,a,o){if(r.type===5)return a.type===6&&a.unit!==void 0?chunkZ5KBBQOJ_cjs.c(a,a.unit,r.toNumber(),o):a.type!==5&&a.type!==0?null:chunk5FGOIDLS_cjs.M(r.toNumber()+o*a.toNumber());if(a.type!==5)return null;let u=1+o*a.toNumber();if(r.type===0){let m=r.toNumber()*u;return r.uncertainty!==void 0?chunk5FGOIDLS_cjs.q(m,Math.abs(r.uncertainty*u)):chunk5FGOIDLS_cjs.n(m)}return r.type===6&&r.unit!==void 0?chunkZ5KBBQOJ_cjs.c(r,r.unit,a.toNumber(),o):null}function un(r,a){let o=r.type===5?r:a.type===5?a:null;if(o===null)return null;let u=o===r?a:r;if(u.type!==0||u.uncertainty===void 0)return null;let m=o.toNumber();return chunk5FGOIDLS_cjs.q(u.toNumber()*m,Math.abs(u.uncertainty*m))}function ln(r,a){let o=r.type===6?r:a,u=r.type===6?a:r;return o.type!==6||o.unit===void 0||!chunk4BZIYU7S_cjs.c.isCurrency(o.unit)||u.type!==0&&u.type!==5||u.rational!==void 0?null:chunkZ5KBBQOJ_cjs.b(o,u.toNumber(),o.unit)}function cn(r,a){if(a.type===5&&r.type===0&&r.uncertainty!==void 0){let o=a.toNumber();return o===0?null:chunk5FGOIDLS_cjs.q(r.toNumber()/o,Math.abs(r.uncertainty/o))}if(r.type===5&&a.type===0&&a.uncertainty!==void 0){let o=a.toNumber();return o===0?null:chunk5FGOIDLS_cjs.q(r.toNumber()/o,Math.abs(r.toNumber()*a.uncertainty/(o*o)))}return null}function mn(r){if(r.type===6){let a=r.unit;if(a&&chunkIANAMBJQ_cjs.c(a)==="time")try{return chunkIANAMBJQ_cjs.e(r.toNumber(),a,"ms")}catch{}return 0}return r.toNumber()}var Xt=260;function zt(r,a,o){let u=Math.trunc(Math.abs(a)),b=(a>=0?1:-1)>0?o.getMaxDateOffsetYears():-o.getMinDateOffsetYears(),h=Math.floor(b*Xt);if(u>h)throw chunkSOMGSIO4_cjs.c.execution("DATE_OFFSET_LIMIT_EXCEEDED",`A date offset of ${u.toLocaleString("en-US")} workdays is about ${Math.round(u/Xt).toLocaleString("en-US")} years, past the limit of ${b} years for a workday offset`,{requestedWorkdays:u,limitYears:b,limitWorkdays:h});let d=h*7+7,y=Rt(r,a,x=>o.isHoliday(x),d);if(y===null)throw chunkSOMGSIO4_cjs.c.execution("DATE_OFFSET_LIMIT_EXCEEDED",`A working-day offset of ${u.toLocaleString("en-US")} could not be reached within the ${b}-year limit; the configured holiday calendar leaves too few working days`,{requestedWorkdays:u,limitYears:b,maxCalendarSteps:d});return y}var Gt=864e5,pn={month:1,months:1,mo:1,year:12,years:12,yr:12,y:12,a:12,decade:120,decades:120,dec:120,century:1200,centuries:1200,millennium:12e3,millennia:12e3};function fn(r,a){return new Date(r,a+1,0).getDate()}function Qt(r,a){let o=Math.trunc(a),u=new Date(r);u.setDate(u.getDate()+o);let m=u.getTime();return Number.isNaN(m)?r+a*Gt:m+(a-o)*Gt}function dn(r,a){let o=Math.trunc(a),u=new Date(r),m=u.getDate();u.setDate(1),u.setMonth(u.getMonth()+o),u.setDate(Math.min(m,fn(u.getFullYear(),u.getMonth())));let b=u.getTime(),h=chunkIANAMBJQ_cjs.e(1,"month","ms");return Number.isNaN(b)?r+a*h:b+(a-o)*h}function he(r,a,o,u){if(a.type===6&&a.unit!==void 0){let m=a.unit,b=o*a.toNumber();if(chunkIANAMBJQ_cjs.a(m))return zt(r,b,u);let h=pn[m];if(h!==void 0)return dn(r,b*h);if(chunkIANAMBJQ_cjs.c(m)==="time"){let d=0;try{d=chunkIANAMBJQ_cjs.e(1,m,"day");}catch{}if(Number.isInteger(d)&&d>=1)return Qt(r,b*d)}}return r+o*mn(a)}function Wt(r,a,o){let u=chunk5FGOIDLS_cjs.B(r.unit);if(a.type===6&&chunk5FGOIDLS_cjs.A(a.unit)){let m=chunk5FGOIDLS_cjs.B(a.unit);return m!==u?chunk5FGOIDLS_cjs.O("TIMECODE_FPS_MISMATCH",`Cannot combine timecodes at different frame rates (${u} fps vs ${m} fps)`):o===1?chunk5FGOIDLS_cjs.u(r.toNumber()+a.toNumber(),r.unit):chunk5FGOIDLS_cjs.u(r.toNumber()-a.toNumber(),"frames")}if(a.type===6&&a.unit==="frames")return chunk5FGOIDLS_cjs.u(r.toNumber()+o*a.toNumber(),r.unit);if(a.type===6&&a.unit&&chunkIANAMBJQ_cjs.c(a.unit)==="time"){let m=chunkIANAMBJQ_cjs.e(a.toNumber(),a.unit,"s");return chunk5FGOIDLS_cjs.u(r.toNumber()+o*m*u,r.unit)}return chunk5FGOIDLS_cjs.u(r.toNumber()+o*a.toNumber(),r.unit)}function ge(r){return r.type===10?r.value:r.toNumber()!==0}function Kt(r,a){let o=chunkZ5KBBQOJ_cjs.l(r,a);return chunk5FGOIDLS_cjs.O("INCOMPATIBLE_UNITS",o??`Cannot convert ${r} to ${a}: they do not measure the same thing`)}var Te=65536;function bn(r,a){if(!Number.isInteger(a)||a<0)return null;if(a===0)return 1;let o=Math.abs(r.toNumber());return o<=1?1:(o<=2?1:Math.log2(o))*a}function hn(r,a){let o=1n,u=r,m=a;for(;m>0n;)m%2n===1n&&(o*=u),m/=2n,m>0n&&(u*=u);return o}var Qe=Te;function Ht(r){let a=r<0n?-r:r;if(a===0n)return 0;let o=Number(a);return Number.isFinite(o)?Math.floor(Math.log2(o))+1:a.toString(16).length*4}function qt(r,a,o){let u=chunkZ5KBBQOJ_cjs.n(r),m=chunkZ5KBBQOJ_cjs.n(a);if(u===0n)return chunk5FGOIDLS_cjs.s(0n);let b=o*Number(m);if(b<=0||Ht(u)+b<=Qe)return chunk5FGOIDLS_cjs.s(o===1?u<<m:u>>m);throw chunkSOMGSIO4_cjs.c.execution("BIGINT_SHIFT_LIMIT_EXCEEDED",`Shifting by ${m} would build an exact integer of about ${(Ht(u)+b).toLocaleString("en-US")} bits, past the limit of ${Qe.toLocaleString("en-US")} bits`,{shift:String(m),limitBits:Qe})}function Je(r,a){let{numerator:o,denominator:u}=chunk5FGOIDLS_cjs.y(r.unit),m=chunkIANAMBJQ_cjs.c(u),b=chunkIANAMBJQ_cjs.c(a.unit);if(!m||m!==b)return chunk5FGOIDLS_cjs.O("RATE_MUL_MEASURE_MISMATCH",`Cannot multiply a "${u}"-denominated rate by "${a.unit}" \u2014 different measures`);let h=chunkIANAMBJQ_cjs.e(a.toNumber(),a.unit,u),d=r.toNumber()*h;return o?chunk5FGOIDLS_cjs.u(d,o):chunk5FGOIDLS_cjs.n(d)}function gn(r){if(Number.isNaN(r))return "NaN";if(!isFinite(r))return r>0?"Infinity":"-Infinity";let a=r<0,o=Math.abs(r),u=Math.floor(o),m=o-u;if(m<1e-9)return `${a?"-":""}${u}`;let b=0,h=1,d=1,y=0,x=m,A=1e6;for(let I=0;I<30;I++){let L=Math.floor(x+1e-9),j=L*h+b,$=L*y+d;if($>A||(b=h,h=j,d=y,y=$,Math.abs(m-h/y)<1e-9))break;let n=x-L;if(n<1e-9)break;x=1/n;}let w=u*y+h;return `${a?"-":""}${w}/${y}`}function yn(r){return r.d===1n?String(r.n):`${r.n}/${r.d}`}function Nn(r){let a=r.toNumber(),o=r.type===5?1+a:a;return `${Math.round(o*1e6)/1e6}x`}function xn(r){if(!Number.isFinite(r))return String(r);if(r===0)return "0e+0";let[a,o]=r.toExponential().split("e");return `${a.includes(".")?a.replace(/0+$/,"").replace(/\.$/,""):a}e${o}`}function Ze(r,a,o,u,m,b){let h=on(r);if(h)return {type:"error",error:chunkSOMGSIO4_cjs.c.validation({code:"MALFORMED_BYTECODE_PROGRAM",message:`Malformed bytecode: ${h}`,expected:"a BytecodeProgram with opcodes, numbers and strings",found:h,suggestion:jt})};let{opcodes:d,numbers:y,strings:x,userFunctionBodies:A,anonymousBodies:w}=r,I=0,L=0,j=a.getMaxInstructions(),$=a.getMaxStackDepth(),n=a.getStack(),Q=o?.hasCollectors??false,W=chunk5FGOIDLS_cjs.j();if(d.length===0)return {type:"value",value:chunk5FGOIDLS_cjs.n(0)};chunk5FGOIDLS_cjs.a(a);try{for(;I<d.length;){if(++L>j)throw chunkSOMGSIO4_cjs.c.execution("INSTRUCTION_LIMIT_EXCEEDED",`Execution exceeded maximum of ${j} instructions`);if(n.length>$)throw chunkSOMGSIO4_cjs.c.execution("STACK_LIMIT_EXCEEDED",`Execution exceeded maximum stack depth of ${$}`);let f=d[I++];if(Q){let e=n.map(t=>({type:t.type,value:t.value,unit:t.unit}));o.fireVmStep({type:chunkR7T3NGUE_cjs.c.VmStep,elapsedNs:0,expression:u??"",opcode:f,opcodeName:chunkVBSMA7WJ_cjs.b(f),ip:I-1,stackDepth:n.length,instructionNumber:L,stack:e});}switch(f){case 0:break;case 1:{let e=c(n);return {type:"value",value:W?chunk5FGOIDLS_cjs.k(e):e}}case 3:{let e=c(n);n.push(e),n.push(e);break}case 2:{let e=c(n),t=c(n);n.push(e),n.push(t);break}case 10:n.push(chunk5FGOIDLS_cjs.n(y[je(d,I++,f,"constant-pool index",y.length,"number-pool")]));break;case 11:n.push(chunk5FGOIDLS_cjs.s(rn(z(d,I++,x,f,"constant-pool index"),f)));break;case 16:{let e=chunkZOOVGXMK_cjs.ia(z(d,I++,x,f,"constant-pool index"));n.push(chunk5FGOIDLS_cjs.o(chunkZOOVGXMK_cjs.ra(e),e));break}case 12:n.push(chunk5FGOIDLS_cjs.r(y[je(d,I++,f,"constant-pool index",y.length,"number-pool")]));break;case 13:n.push(chunk5FGOIDLS_cjs.t(z(d,I++,x,f,"constant-pool index")));break;case 14:n.push(chunk5FGOIDLS_cjs.K(U(d,I++,f,"boolean operand")===1));break;case 20:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.uncertainty!==void 0||e.uncertainty!==void 0){let p=chunkZ5KBBQOJ_cjs.s(t,e,"add");if(p){n.push(p);break}}if(t.rational!==void 0||e.rational!==void 0){let p=chunkZ5KBBQOJ_cjs.r(t,e,"add");if(p){n.push(p);break}}let i=Yt(t,e,1),l=i===null?$t(t,e):null;i!==null?n.push(i):l!==null?n.push(chunk5FGOIDLS_cjs.u(l+e.toNumber(),e.unit)):t.type===0&&e.type===0?n.push(chunk5FGOIDLS_cjs.n(t.value+e.value)):t.type===10&&e.type===10?n.push(chunk5FGOIDLS_cjs.K(t.value&&e.value)):t.type===4?e.type===4?n.push(chunk5FGOIDLS_cjs.O("INVALID_DATETIME_OP","Cannot add two datetimes together")):n.push(chunk5FGOIDLS_cjs.L(he(t.toNumber(),e,1,a))):t.type===6&&chunk5FGOIDLS_cjs.A(t.unit)?n.push(Wt(t,e,1)):e.type===4?n.push(chunk5FGOIDLS_cjs.L(he(e.toNumber(),t,1,a))):n.push(chunkZ5KBBQOJ_cjs.u(t,e,(p,g)=>p+g,(p,g)=>p+g,"add"));break}case 21:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.uncertainty!==void 0||e.uncertainty!==void 0){let p=chunkZ5KBBQOJ_cjs.s(t,e,"sub");if(p){n.push(p);break}}if(t.rational!==void 0||e.rational!==void 0){let p=chunkZ5KBBQOJ_cjs.r(t,e,"sub");if(p){n.push(p);break}}let i=Yt(t,e,-1),l=i===null?$t(t,e):null;i!==null?n.push(i):l!==null?n.push(chunk5FGOIDLS_cjs.u(l-e.toNumber(),e.unit)):t.type===0&&e.type===0?n.push(chunk5FGOIDLS_cjs.n(t.value-e.value)):t.type===4?e.type===4?n.push(chunk5FGOIDLS_cjs.u(t.toNumber()-e.toNumber(),"ms")):n.push(chunk5FGOIDLS_cjs.L(he(t.toNumber(),e,-1,a))):t.type===6&&chunk5FGOIDLS_cjs.A(t.unit)?n.push(Wt(t,e,-1)):e.type===4?n.push(chunk5FGOIDLS_cjs.O("INVALID_DATETIME_OP","Cannot subtract a datetime from a value that is not a datetime")):n.push(chunkZ5KBBQOJ_cjs.u(t,e,(p,g)=>p-g,(p,g)=>p-g,"sub"));break}case 22:{let e=c(n),t=c(n),s=un(t,e);if(s){n.push(s);break}if(t.uncertainty!==void 0||e.uncertainty!==void 0){let l=chunkZ5KBBQOJ_cjs.s(t,e,"mul");if(l){n.push(l);break}}if(t.rational!==void 0||e.rational!==void 0){let l=chunkZ5KBBQOJ_cjs.r(t,e,"mul");if(l){n.push(l);break}}let i=ln(t,e);if(i){n.push(i);break}t.type===0&&e.type===0?n.push(chunk5FGOIDLS_cjs.n(t.value*e.value)):t.type===7&&e.type===7?(chunk5FGOIDLS_cjs.d(tn(t.value,e.value),"matrix cells"),n.push(chunkZOOVGXMK_cjs._(t.value,e.value))):t.type===6&&chunk5FGOIDLS_cjs.x(t.unit)&&e.type===6&&e.unit?n.push(Je(t,e)):e.type===6&&chunk5FGOIDLS_cjs.x(e.unit)&&t.type===6&&t.unit?n.push(Je(e,t)):Pt(t,e)!==null?n.push(Pt(t,e)):n.push(chunkZ5KBBQOJ_cjs.u(t,e,(l,p)=>l*p,(l,p)=>l*p,"mul"));break}case 23:{let e=c(n),t=c(n),s=cn(t,e);if(s){n.push(s);break}if(t.uncertainty!==void 0||e.uncertainty!==void 0){let i=chunkZ5KBBQOJ_cjs.s(t,e,"div");if(i){n.push(i);break}}if(t.type===6&&e.type===6){let{lv:i,rv:l,sameMeasure:p}=chunkZ5KBBQOJ_cjs.j(t,e);p?n.push(chunk5FGOIDLS_cjs.n(i/l)):chunk4BZIYU7S_cjs.c.isCurrency(t.unit)&&chunk4BZIYU7S_cjs.c.isCurrency(e.unit)?n.push(chunk5FGOIDLS_cjs.O("INCOMPATIBLE_UNITS",`Cannot combine incompatible units: ${t.unit} and ${e.unit}`)):n.push(chunk5FGOIDLS_cjs.w(i/l,t.unit,e.unit));}else {let i=chunkZ5KBBQOJ_cjs.r(t,e,"div");if(i){n.push(i);break}n.push(chunkZ5KBBQOJ_cjs.u(t,e,(l,p)=>l/p,(l,p)=>{if(p===0n)throw chunkZ5KBBQOJ_cjs.o();return l/p},"div"));}break}case 24:{let e=c(n),t=c(n);n.push(chunkZ5KBBQOJ_cjs.u(t,e,(s,i)=>s%i,(s,i)=>{if(i===0n)throw chunkZ5KBBQOJ_cjs.o();return s%i}));break}case 25:{let e=c(n),t=c(n);if(t.type===13){n.push(t);break}if(e.type===13){n.push(e);break}if(t.type===12){n.push(t);break}if(e.type===12){n.push(e);break}if(t.type===0&&e.type===0){n.push(chunk5FGOIDLS_cjs.n(chunkZ5KBBQOJ_cjs.q(t.value,e.value)));break}if(t.type===7||e.type===7){if(t.type!==7||e.type!==0){n.push(chunk5FGOIDLS_cjs.O("MATRIX_POWER_UNSUPPORTED",`^: a matrix may only be the base, raised to a whole number (as in "[1,2;3,4]^2"); "${chunk5FGOIDLS_cjs.g[t.type]} ^ ${chunk5FGOIDLS_cjs.g[e.type]}" has no matrix reading.`));break}chunk5FGOIDLS_cjs.d(nn(t.value,e.value),"matrix cells"),n.push(chunkZOOVGXMK_cjs.$(t.value,e.value));break}if(t.type===9||e.type===9){n.push(chunkZ5KBBQOJ_cjs.f(t,e));break}if(t.type===2||e.type===2){let s=bn(t,e.toNumber());if(s!==null){if(s>Te)throw chunkSOMGSIO4_cjs.c.execution("BIGINT_POW_LIMIT_EXCEEDED",`That power would build an exact integer of about ${Math.round(s).toLocaleString("en-US")} bits, past the limit of ${Te.toLocaleString("en-US")} bits`,{limitBits:Te});n.push(chunk5FGOIDLS_cjs.s(hn(chunkZ5KBBQOJ_cjs.n(t),chunkZ5KBBQOJ_cjs.n(e))));break}}n.push(chunk5FGOIDLS_cjs.n(chunkZ5KBBQOJ_cjs.q(t.toNumber(),e.toNumber())));break}case 26:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}e.type===2?n.push(chunk5FGOIDLS_cjs.s(-e.value)):e.type===6&&e.exact!==void 0?n.push(chunk5FGOIDLS_cjs.v(-e.toNumber(),e.unit,chunkZOOVGXMK_cjs.ma(e.exact))):e.type===6?n.push(chunk5FGOIDLS_cjs.u(-e.toNumber(),e.unit)):e.type===5?n.push(chunk5FGOIDLS_cjs.M(-e.toNumber())):e.type===9?n.push(chunkZ5KBBQOJ_cjs.g(e)):e.type===0&&e.rational!==void 0?n.push(chunk5FGOIDLS_cjs.p(-e.toNumber(),chunkZOOVGXMK_cjs.j(e.rational))):e.type===0&&e.exact!==void 0?n.push(chunk5FGOIDLS_cjs.o(-e.toNumber(),chunkZOOVGXMK_cjs.ma(e.exact))):n.push(chunk5FGOIDLS_cjs.n(-e.toNumber()));break}case 27:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}e.type===6&&e.exact!==void 0?n.push(chunk5FGOIDLS_cjs.v(e.toNumber(),e.unit,e.exact)):e.type===6?n.push(chunk5FGOIDLS_cjs.u(e.toNumber(),e.unit)):e.type===5?n.push(chunk5FGOIDLS_cjs.M(e.toNumber())):e.type===0&&e.rational!==void 0?n.push(chunk5FGOIDLS_cjs.p(e.toNumber(),e.rational)):e.type===0&&e.exact!==void 0?n.push(chunk5FGOIDLS_cjs.o(e.toNumber(),e.exact)):n.push(chunk5FGOIDLS_cjs.n(e.toNumber()));break}case 28:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}n.push(chunk5FGOIDLS_cjs.q(t.toNumber(),Math.abs(e.toNumber())));break}case 30:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}t.type===2||e.type===2?n.push(qt(t,e,1)):n.push(chunk5FGOIDLS_cjs.n(t.toNumber()<<e.toNumber()));break}case 31:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}t.type===2||e.type===2?n.push(qt(t,e,-1)):n.push(chunk5FGOIDLS_cjs.n(t.toNumber()>>e.toNumber()));break}case 32:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}n.push(chunk5FGOIDLS_cjs.n(t.toNumber()>>>e.toNumber()));break}case 33:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}t.type===2||e.type===2?n.push(chunk5FGOIDLS_cjs.s(chunkZ5KBBQOJ_cjs.n(t)&chunkZ5KBBQOJ_cjs.n(e))):n.push(chunk5FGOIDLS_cjs.n(t.toNumber()&e.toNumber()));break}case 34:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}t.type===2||e.type===2?n.push(chunk5FGOIDLS_cjs.s(chunkZ5KBBQOJ_cjs.n(t)|chunkZ5KBBQOJ_cjs.n(e))):n.push(chunk5FGOIDLS_cjs.n(t.toNumber()|e.toNumber()));break}case 35:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}t.type===2||e.type===2?n.push(chunk5FGOIDLS_cjs.s(chunkZ5KBBQOJ_cjs.n(t)^chunkZ5KBBQOJ_cjs.n(e))):n.push(chunk5FGOIDLS_cjs.n(t.toNumber()^e.toNumber()));break}case 36:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}e.type===2?n.push(chunk5FGOIDLS_cjs.s(~e.value)):n.push(chunk5FGOIDLS_cjs.n(~e.toNumber()));break}case 40:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.rational!==void 0||e.rational!==void 0){let i=chunkZ5KBBQOJ_cjs.t(t,e);if(i!==null){n.push(chunk5FGOIDLS_cjs.K(i===0));break}}if(t.type===0&&e.type===0)n.push(chunk5FGOIDLS_cjs.K(t.value===e.value));else if(t.type===2||e.type===2){let i=chunkZ5KBBQOJ_cjs.p(t,e);n.push(chunk5FGOIDLS_cjs.K(i===null?t.toNumber()===e.toNumber():i===0));}else if(t.type===3&&e.type===3)n.push(chunk5FGOIDLS_cjs.K(t.value===e.value));else if(t.type===6&&e.type===6){let{equal:i,sameMeasure:l}=chunkZ5KBBQOJ_cjs.k(t,e);n.push(chunk5FGOIDLS_cjs.K(l&&i));}else if(t.type===7&&e.type===7)n.push(chunkZOOVGXMK_cjs.aa(t.value,e.value,(i,l)=>i===l));else if(t.type===14||e.type===14)if(t.type===14&&e.type===14){let i=t.value,l=e.value;n.push(chunk5FGOIDLS_cjs.K(i.r===l.r&&i.g===l.g&&i.b===l.b&&i.a===l.a));}else n.push(chunk5FGOIDLS_cjs.K(!1));else n.push(chunk5FGOIDLS_cjs.K(t.toNumber()===e.toNumber()));break}case 41:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.rational!==void 0||e.rational!==void 0){let i=chunkZ5KBBQOJ_cjs.t(t,e);if(i!==null){n.push(chunk5FGOIDLS_cjs.K(i!==0));break}}if(t.type===0&&e.type===0)n.push(chunk5FGOIDLS_cjs.K(t.value!==e.value));else if(t.type===2||e.type===2){let i=chunkZ5KBBQOJ_cjs.p(t,e);n.push(chunk5FGOIDLS_cjs.K(i===null?t.toNumber()!==e.toNumber():i!==0));}else if(t.type===3&&e.type===3)n.push(chunk5FGOIDLS_cjs.K(t.value!==e.value));else if(t.type===6&&e.type===6){let{equal:i,sameMeasure:l}=chunkZ5KBBQOJ_cjs.k(t,e);n.push(chunk5FGOIDLS_cjs.K(!l||!i));}else if(t.type===7&&e.type===7)n.push(chunkZOOVGXMK_cjs.aa(t.value,e.value,(i,l)=>i!==l));else if(t.type===14||e.type===14)if(t.type===14&&e.type===14){let i=t.value,l=e.value;n.push(chunk5FGOIDLS_cjs.K(!(i.r===l.r&&i.g===l.g&&i.b===l.b&&i.a===l.a)));}else n.push(chunk5FGOIDLS_cjs.K(!0));else n.push(chunk5FGOIDLS_cjs.K(t.toNumber()!==e.toNumber()));break}case 42:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.rational!==void 0||e.rational!==void 0){let i=chunkZ5KBBQOJ_cjs.t(t,e);if(i!==null){n.push(chunk5FGOIDLS_cjs.K(i<0));break}}if(t.type===0&&e.type===0)n.push(chunk5FGOIDLS_cjs.K(t.value<e.value));else if(t.type===2||e.type===2){let i=chunkZ5KBBQOJ_cjs.p(t,e);n.push(chunk5FGOIDLS_cjs.K(i===null?t.toNumber()<e.toNumber():i<0));}else if(t.type===6&&e.type===6){let{lv:i,rv:l,equal:p,sameMeasure:g}=chunkZ5KBBQOJ_cjs.k(t,e);n.push(g?chunk5FGOIDLS_cjs.K(!p&&i<l):chunkZ5KBBQOJ_cjs.m(t,e));}else t.type===7&&e.type===7?n.push(chunkZOOVGXMK_cjs.aa(t.value,e.value,(i,l)=>i<l)):n.push(chunk5FGOIDLS_cjs.K(t.toNumber()<e.toNumber()));break}case 43:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.rational!==void 0||e.rational!==void 0){let i=chunkZ5KBBQOJ_cjs.t(t,e);if(i!==null){n.push(chunk5FGOIDLS_cjs.K(i<=0));break}}if(t.type===0&&e.type===0)n.push(chunk5FGOIDLS_cjs.K(t.value<=e.value));else if(t.type===2||e.type===2){let i=chunkZ5KBBQOJ_cjs.p(t,e);n.push(chunk5FGOIDLS_cjs.K(i===null?t.toNumber()<=e.toNumber():i<=0));}else if(t.type===6&&e.type===6){let{lv:i,rv:l,equal:p,sameMeasure:g}=chunkZ5KBBQOJ_cjs.k(t,e);n.push(g?chunk5FGOIDLS_cjs.K(p||i<=l):chunkZ5KBBQOJ_cjs.m(t,e));}else t.type===7&&e.type===7?n.push(chunkZOOVGXMK_cjs.aa(t.value,e.value,(i,l)=>i<=l)):n.push(chunk5FGOIDLS_cjs.K(t.toNumber()<=e.toNumber()));break}case 44:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.rational!==void 0||e.rational!==void 0){let i=chunkZ5KBBQOJ_cjs.t(t,e);if(i!==null){n.push(chunk5FGOIDLS_cjs.K(i>0));break}}if(t.type===0&&e.type===0)n.push(chunk5FGOIDLS_cjs.K(t.value>e.value));else if(t.type===2||e.type===2){let i=chunkZ5KBBQOJ_cjs.p(t,e);n.push(chunk5FGOIDLS_cjs.K(i===null?t.toNumber()>e.toNumber():i>0));}else if(t.type===6&&e.type===6){let{lv:i,rv:l,equal:p,sameMeasure:g}=chunkZ5KBBQOJ_cjs.k(t,e);n.push(g?chunk5FGOIDLS_cjs.K(!p&&i>l):chunkZ5KBBQOJ_cjs.m(t,e));}else t.type===7&&e.type===7?n.push(chunkZOOVGXMK_cjs.aa(t.value,e.value,(i,l)=>i>l)):n.push(chunk5FGOIDLS_cjs.K(t.toNumber()>e.toNumber()));break}case 45:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.rational!==void 0||e.rational!==void 0){let i=chunkZ5KBBQOJ_cjs.t(t,e);if(i!==null){n.push(chunk5FGOIDLS_cjs.K(i>=0));break}}if(t.type===0&&e.type===0)n.push(chunk5FGOIDLS_cjs.K(t.value>=e.value));else if(t.type===2||e.type===2){let i=chunkZ5KBBQOJ_cjs.p(t,e);n.push(chunk5FGOIDLS_cjs.K(i===null?t.toNumber()>=e.toNumber():i>=0));}else if(t.type===6&&e.type===6){let{lv:i,rv:l,equal:p,sameMeasure:g}=chunkZ5KBBQOJ_cjs.k(t,e);n.push(g?chunk5FGOIDLS_cjs.K(p||i>=l):chunkZ5KBBQOJ_cjs.m(t,e));}else t.type===7&&e.type===7?n.push(chunkZOOVGXMK_cjs.aa(t.value,e.value,(i,l)=>i>=l)):n.push(chunk5FGOIDLS_cjs.K(t.toNumber()>=e.toNumber()));break}case 130:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}n.push(chunk5FGOIDLS_cjs.K(ge(t)&&ge(e)));break}case 131:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}n.push(chunk5FGOIDLS_cjs.K(ge(t)||ge(e)));break}case 132:{let e=c(n),t=c(n),s=c(n),i=chunk5FGOIDLS_cjs.P(s);if(i){n.push(i);break}n.push(ge(s)?t:e);break}case 50:{let e=U(d,I++,f,"plugin-function index"),t=U(d,I++,f,"argument count"),s=[];for(let p=0;p<t;p++)s.push(c(n));s.reverse();let i=a.context.pluginFunctions[e],l=chunk5FGOIDLS_cjs.Q(s);if(l)n.push(l);else if(!i)n.push(chunk5FGOIDLS_cjs.n(0));else {let p=i(s,m);if(p instanceof Promise){let g=`plugin:${e}:${s.map(B=>String(B.value??"")).join("|")}`,E=a.activeSignal,C=a.context.pluginFunctionOwners[e]??"";return {type:"pending",queryKey:g,resolver:p,packageId:C,signal:E}}n.push(p);}break}case 51:{let e=U(d,I++,f,"builtin-function index"),t=U(d,I++,f,"argument count"),s=Bt(e,t);if(s)throw s;let i=[],l=!1;for(let E=0;E<t;E++){let C=c(n);C.type===9&&(l=!0),i.push(C);}let p=chunk5FGOIDLS_cjs.Q(i);if(p){n.push(p);break}let g=chunkZ5KBBQOJ_cjs.C[e];if(g){let E=i.reverse(),C=l&&!chunkZ5KBBQOJ_cjs.e.has(e);n.push(C?chunkZ5KBBQOJ_cjs.h(e,E):g(E));}break}case 150:{let e=U(d,I++,f,"function-body index"),t=A?.[e];if(!t)throw chunkSOMGSIO4_cjs.c.internal("INTERNAL_MISSING_FUNCTION_BODY",`Internal error: DEFINE_USER_FUNCTION referenced missing body index ${e}`,{bodyIdx:e});a.defineUserFunction(t.name,t.params,t.program);break}case 151:{let e=z(d,I++,x,f,"function-name index"),t=U(d,I++,f,"argument count"),s=[];for(let g=0;g<t;g++)s.push(c(n));s.reverse();let i=a.getUserFunction(e);if(!i)throw chunkSOMGSIO4_cjs.c.execution("UNDEFINED_FUNCTION",`Undefined function: ${e}`,{name:e});if(t!==i.params.length)throw chunkSOMGSIO4_cjs.c.execution("FUNCTION_ARITY_MISMATCH",`${e} expects ${i.params.length} argument(s) but got ${t}`,{name:e,expected:i.params.length,actual:t});let l=new Map;for(let g=0;g<i.params.length;g++)l.set(i.params[g],s[g]);chunk5FGOIDLS_cjs.f(),a.pushCallFrame(l);let p;try{p=Ze(i.program,a,o,u,m);}finally{a.popCallFrame();}if(p.type==="pending")throw chunkSOMGSIO4_cjs.c.execution("USER_FUNCTION_ASYNC_UNSUPPORTED",`${e}: user-defined functions with async bodies (weather, stocks, currency, ...) aren't supported`,{name:e});if(p.type==="error")throw p.error;n.push(p.value);break}case 60:{let e=z(d,I++,x,f,"variable-name index"),t=a.getVar(e);if(t!==void 0)n.push(t);else if(b)n.push(chunk5FGOIDLS_cjs.J(chunkZOOVGXMK_cjs.q(e)));else throw chunkSOMGSIO4_cjs.c.execution("UNDEFINED_VARIABLE",`Undefined variable: ${e}`,{varName:e});break}case 61:{let e=c(n),t=z(d,I++,x,f,"variable-name index");a.setVar(t,W?chunk5FGOIDLS_cjs.k(e):e),n.push(e);break}case 62:{let e=z(d,I++,x,f,"variable-name index"),t=chunkZ5KBBQOJ_cjs.J.get(e);if(t===void 0)throw chunkSOMGSIO4_cjs.c.internal({code:"GLOBAL_VARIABLE_NOT_RESOLVED",message:`Global variable "${e}" was read before it resolved`,expected:`global variable "${e}" to already be resolved (async preflight should guarantee this)`,found:"no value in the global variable store",context:{varName:e}});n.push(t);break}case 63:{let e=c(n),t=z(d,I++,x,f,"variable-name index");chunkZ5KBBQOJ_cjs.J.set(t,W?chunk5FGOIDLS_cjs.k(e):e),n.push(e);break}case 70:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}n.push(chunk5FGOIDLS_cjs.n(e.toNumber()));break}case 71:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}if(e.type===14){let s=e.value;n.push(chunk5FGOIDLS_cjs.G({r:s.r,g:s.g,b:s.b,a:s.a,format:"hex"}));break}n.push(chunk5FGOIDLS_cjs.r(e.type===2?e.value:e.toNumber()));break}case 74:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}n.push(chunk5FGOIDLS_cjs.M(e.toNumber()));break}case 140:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}n.push(chunk5FGOIDLS_cjs.t(e.rational!==void 0?yn(e.rational):gn(e.toNumber())));break}case 141:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}n.push(chunk5FGOIDLS_cjs.t(Nn(e)));break}case 142:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}n.push(chunk5FGOIDLS_cjs.t(xn(e.toNumber())));break}case 143:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}n.push(chunk5FGOIDLS_cjs.r(e.type===2?e.value:e.toNumber(),"bin"));break}case 144:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}n.push(chunk5FGOIDLS_cjs.r(e.type===2?e.value:e.toNumber(),"oct"));break}case 145:{let e=q(c(n),f,"converter name").toLowerCase(),t=c(n),s=chunk5FGOIDLS_cjs.P(t);if(s){n.push(s);break}let i=chunkZ5KBBQOJ_cjs.G.get(e);i?n.push(i(t)):n.push(chunk5FGOIDLS_cjs.O("UNKNOWN_AS_CONVERTER",`Unknown converter "as ${e}"`));break}case 80:{let e=q(c(n),f,"unit name"),t=c(n),s=chunk5FGOIDLS_cjs.P(t);if(s){n.push(s);break}let i=chunkZ5KBBQOJ_cjs.a(t,e);i?n.push(chunk5FGOIDLS_cjs.v(t.toNumber(),e,i)):n.push(chunk5FGOIDLS_cjs.u(t.toNumber(),e));break}case 81:{let e=q(c(n),f,"target unit name"),t=q(c(n),f,"source unit name"),s=c(n),i=chunk5FGOIDLS_cjs.P(s);if(i){n.push(i);break}let l=s.toNumber(),p=chunkIANAMBJQ_cjs.c(t),g=chunk4BZIYU7S_cjs.c.isCurrency(t)&&chunk4BZIYU7S_cjs.c.isCurrency(e);if(p&&chunkIANAMBJQ_cjs.c(e)===p)n.push(chunk5FGOIDLS_cjs.u(chunkIANAMBJQ_cjs.e(l,t,e),e));else if(g){let E=chunk4BZIYU7S_cjs.c.convertSync(l,t,e);E!==null?n.push(chunk5FGOIDLS_cjs.u(E,e)):n.push(chunk5FGOIDLS_cjs.O("CURRENCY_RATE_UNAVAILABLE",`No exchange rate available for ${t} to ${e}`));}else {let E=chunkIANAMBJQ_cjs.i(l,t,e);E!==null?n.push(chunk5FGOIDLS_cjs.u(E,e)):n.push(Kt(t,e));}break}case 85:{let e=q(c(n),f,"unit name"),t=chunkIANAMBJQ_cjs.f(e);n.push(chunk5FGOIDLS_cjs.t(t.length>0?t.join(", "):`No known units for "${e}"`));break}case 83:{let e=q(c(n),f,"unit name"),t=c(n),s=chunk5FGOIDLS_cjs.P(t);if(s){n.push(s);break}let{value:i,unit:l}=chunkIANAMBJQ_cjs.h(t.toNumber(),e);n.push(chunk5FGOIDLS_cjs.u(i,l));break}case 84:{let e=q(c(n),f,"target unit name"),t=c(n),s=chunk5FGOIDLS_cjs.P(t);if(s){n.push(s);break}if(t.type===6){let i=t.unit,l=t.toNumber(),p=chunkIANAMBJQ_cjs.c(i),g=chunk4BZIYU7S_cjs.c.isCurrency(i)&&chunk4BZIYU7S_cjs.c.isCurrency(e);if(p&&chunkIANAMBJQ_cjs.c(e)===p)n.push(chunk5FGOIDLS_cjs.u(chunkIANAMBJQ_cjs.e(l,i,e),e));else if(g){let E=chunk4BZIYU7S_cjs.c.convertSync(l,i,e);E!==null?n.push(chunk5FGOIDLS_cjs.u(E,e)):n.push(chunk5FGOIDLS_cjs.O("CURRENCY_RATE_UNAVAILABLE",`No exchange rate available for ${i} to ${e}`));}else {let E=chunkIANAMBJQ_cjs.i(l,i,e);E!==null?n.push(chunk5FGOIDLS_cjs.u(E,e)):n.push(Kt(i,e));}}else n.push(chunk5FGOIDLS_cjs.u(t.toNumber(),e));break}case 82:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}n.push(chunk5FGOIDLS_cjs.n(e.toNumber()));break}case 110:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(e.type!==6||!e.unit){n.push(chunk5FGOIDLS_cjs.O("RATE_MISSING_DENOMINATOR_UNIT",'Cannot build a rate: the right-hand side of "/" has no unit'));break}let i=t.type===6?t.unit??"":"";n.push(chunk5FGOIDLS_cjs.w(t.toNumber()/e.toNumber(),i,e.unit));break}case 111:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.type!==6||!chunk5FGOIDLS_cjs.x(t.unit)){n.push(chunk5FGOIDLS_cjs.O("RATE_MUL_LEFT_NOT_A_RATE",'Left-hand side of a rate multiplication must be a rate (e.g. "$50/week")'));break}if(e.type!==6||!e.unit){n.push(chunk5FGOIDLS_cjs.O("RATE_MUL_RIGHT_MISSING_UNIT","Right-hand side of a rate multiplication must have a unit matching the rate's denominator"));break}n.push(Je(t,e));break}case 112:{let e=q(c(n),f,"denominator unit name"),t=c(n),s=chunk5FGOIDLS_cjs.P(t);if(s){n.push(s);break}if(t.type!==6||!chunk5FGOIDLS_cjs.x(t.unit)){n.push(chunk5FGOIDLS_cjs.O("RATE_CONVERT_NOT_A_RATE","Cannot convert a non-rate value's denominator"));break}let{numerator:i,denominator:l}=chunk5FGOIDLS_cjs.y(t.unit),p=chunkIANAMBJQ_cjs.c(l),g=chunkIANAMBJQ_cjs.c(e);if(!p||p!==g){n.push(chunk5FGOIDLS_cjs.O("RATE_CONVERT_MEASURE_MISMATCH",`Cannot convert a "${l}"-denominated rate to "${e}" \u2014 different measures`));break}let E=chunkIANAMBJQ_cjs.e(1,e,l);n.push(chunk5FGOIDLS_cjs.w(t.toNumber()*E,i,e));break}case 120:{let e=c(n),t=chunk5FGOIDLS_cjs.P(e);if(t){n.push(t);break}let s=e.toNumber(),i=new Date,l=new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,0,0);l.setMinutes(s),n.push(chunk5FGOIDLS_cjs.L(l.getTime()));break}case 90:n.push(chunk5FGOIDLS_cjs.L(Date.now()));break;case 95:n.push(chunk5FGOIDLS_cjs.L(y[je(d,I++,f,"constant-pool index",y.length,"number-pool")]));break;case 91:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}n.push(chunk5FGOIDLS_cjs.L(he(t.toNumber(),e,1,a)));break}case 92:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}n.push(chunk5FGOIDLS_cjs.L(he(t.toNumber(),e,-1,a)));break}case 96:{let e=U(d,I++,f,"workday offset direction")===1?-1:1,t=c(n),s=c(n),i=chunk5FGOIDLS_cjs.P(s,t);if(i){n.push(i);break}if(t.type!==4){n.push(chunk5FGOIDLS_cjs.O(chunkSOMGSIO4_cjs.r.WORKDAY_OFFSET_EXPECTED_DATE,`"working days after/before/from" expects a date to count from, got ${chunk5FGOIDLS_cjs.g[t.type]??"an unsupported value"}`));break}n.push(chunk5FGOIDLS_cjs.L(zt(t.toNumber(),e*s.toNumber(),a)));break}case 97:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.type!==4||e.type!==4){n.push(chunk5FGOIDLS_cjs.O(chunkSOMGSIO4_cjs.r.WORKDAYS_BETWEEN_EXPECTED_DATES,`"working days between" expects two dates, got ${chunk5FGOIDLS_cjs.g[t.type]??"an unsupported value"} and ${chunk5FGOIDLS_cjs.g[e.type]??"an unsupported value"}`));break}let i=Math.ceil((a.getMaxDateOffsetYears()-a.getMinDateOffsetYears())*366),l=Vt(t.toNumber(),e.toNumber(),p=>a.isHoliday(p),i);if(l===null){n.push(chunk5FGOIDLS_cjs.O(chunkSOMGSIO4_cjs.r.WORKDAYS_BETWEEN_RANGE_TOO_LARGE,`The two dates are more than ${a.getMaxDateOffsetYears()-a.getMinDateOffsetYears()} years apart, past the working-day count's limit`));break}n.push(chunk5FGOIDLS_cjs.n(l));break}case 93:case 94:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}let i=e.toNumber(),l=t.toNumber(),p=new Date(l).getDay(),g=f===93?(i-p+7)%7:(p-i+7)%7;g===0&&(g=7),n.push(chunk5FGOIDLS_cjs.L(Qt(l,f===93?g:-g)));break}case 152:{let e=U(d,I++,f,"row count"),t=U(d,I++,f,"column count"),s=e*t,i=chunk5FGOIDLS_cjs.e(s,"matrix cells"),l=null;for(let p=s-1;p>=0;p--){let g=c(n);l===null&&(l=chunk5FGOIDLS_cjs.P(g)),i[p]=g.type===10||g.type===9?g.value:g.toNumber();}if(l){n.push(l);break}n.push(chunk5FGOIDLS_cjs.C(e,t,chunkZOOVGXMK_cjs.Y(e,t,i)));break}case 153:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.type!==7){n.push(chunk5FGOIDLS_cjs.O("MATRIX_INDEX_NOT_A_MATRIX",'Cannot index a non-matrix value with "[...]".'));break}let i=t.value,l=Math.trunc(e.toNumber());if(l<0||l>=i.data.length){n.push(chunk5FGOIDLS_cjs.O("MATRIX_INDEX_OUT_OF_BOUNDS",`Index ${l} is out of bounds for a ${i.rows}x${i.cols} matrix (valid range: 0-${i.data.length-1}).`));break}let p=chunkZOOVGXMK_cjs.S(i,l);n.push(chunkZOOVGXMK_cjs.X(p));break}case 154:{let e=c(n),t=c(n),s=c(n),i=chunk5FGOIDLS_cjs.P(s,t,e);if(i){n.push(i);break}if(s.type!==7){n.push(chunk5FGOIDLS_cjs.O("MATRIX_INDEX_NOT_A_MATRIX",'Cannot index a non-matrix value with "[...]".'));break}let l=s.value,p=Math.trunc(t.toNumber()),g=Math.trunc(e.toNumber());if(!chunkZOOVGXMK_cjs.U(l,p,g)){n.push(chunk5FGOIDLS_cjs.O("MATRIX_INDEX_OUT_OF_BOUNDS",`[${p}, ${g}] is out of bounds for a ${l.rows}x${l.cols} matrix.`));break}let E=chunkZOOVGXMK_cjs.T(l,p,g);n.push(chunkZOOVGXMK_cjs.X(E));break}case 156:{let e=c(n),t=c(n),s=chunk5FGOIDLS_cjs.P(t,e);if(s){n.push(s);break}if(t.type!==0||e.type!==0){n.push(chunk5FGOIDLS_cjs.O("INVALID_RANGE_BOUND",`A range's bounds must be plain numbers (e.g. "0:3").`));break}let i=t.value,l=e.value;if(!Number.isInteger(i)||!Number.isInteger(l)){n.push(chunk5FGOIDLS_cjs.O("NON_INTEGER_RANGE_BOUND",`A range's bounds must be whole numbers, got "${i}:${l}".`));break}if(i>l){n.push(chunk5FGOIDLS_cjs.O("DESCENDING_RANGE",`A range's min (${i}) cannot be greater than its max (${l}) \u2014 did you mean "${l}:${i}"?`));break}n.push(chunk5FGOIDLS_cjs.F(i,l));break}case 155:{let e=c(n),t=c(n),s=c(n),i=chunk5FGOIDLS_cjs.P(s,t,e);if(i){n.push(i);break}if(s.type!==7){n.push(chunk5FGOIDLS_cjs.O("MATRIX_INDEX_NOT_A_MATRIX",'Cannot slice a non-matrix value with "[...]".'));break}if(t.type!==8||e.type!==8){n.push(chunk5FGOIDLS_cjs.O("INVALID_MATRIX_SLICE_BOUND",'Matrix slicing needs range bounds (e.g. "a[0:1, 1:2]").'));break}let l=s.value,p=t.value,g=e.value;if(p.min<0||p.max>=l.rows||g.min<0||g.max>=l.cols){n.push(chunk5FGOIDLS_cjs.O("MATRIX_INDEX_OUT_OF_BOUNDS",`Slice [${p.min}:${p.max}, ${g.min}:${g.max}] is out of bounds for a ${l.rows}x${l.cols} matrix.`));break}let E=p.max-p.min+1,C=g.max-g.min+1,B=chunk5FGOIDLS_cjs.e(E*C,"matrix cells");for(let V=0;V<E;V++)for(let D=0;D<C;D++)B[V+D*E]=chunkZOOVGXMK_cjs.T(l,p.min+V,g.min+D);n.push(chunk5FGOIDLS_cjs.C(E,C,B));break}case 157:{let e=U(d,I++,f,"body kind"),t=U(d,I++,f,"body reference"),s=U(d,I++,f,"collection count");Ft(e,t,f);let i=new Array(s);for(let k=s-1;k>=0;k--)i[k]=c(n);let l=[],p;if(e===0){let k=w?.[t];if(!k)throw chunkSOMGSIO4_cjs.c.internal("INTERNAL_MISSING_ANONYMOUS_BODY",`Internal error: MAP_INVOKE referenced missing anonymous body index ${t}`,{ref:t});l=k.params,p=k.program;}else if(e===2){let k=Se(x,t,f),v=a.getUserFunction(k);if(!v){n.push(chunk5FGOIDLS_cjs.O("UNDEFINED_FUNCTION",`map: undefined function "${k}"`));break}if(v.params.length!==s){n.push(chunk5FGOIDLS_cjs.O("FUNCTION_ARITY_MISMATCH",`map: "${k}" expects ${v.params.length} argument(s) but ${s} collection(s) were given`));break}l=v.params,p=v.program;}let g=-1,E=new Array(s),C;for(let k=0;k<s;k++){let v=chunkZOOVGXMK_cjs.ea(i[k],a.getMaxCollectionSize());if(!Array.isArray(v)){C=v;break}if(chunk5FGOIDLS_cjs.c(v.length,"collection elements"),g===-1)g=v.length;else if(v.length!==g){C=chunk5FGOIDLS_cjs.O("MAP_COLLECTION_LENGTH_MISMATCH",`map: all collections must have the same length (got ${g} and ${v.length}).`);break}E[k]=v;}if(C){n.push(C);break}let B=chunk5FGOIDLS_cjs.e(g,"matrix cells"),V;for(let k=0;k<g;k++){let v=new Array(s);for(let ye=0;ye<s;ye++)v[ye]=E[ye][k];let ae=e===1?chunkZ5KBBQOJ_cjs.C[t]?.(v)??chunk5FGOIDLS_cjs.O("UNKNOWN_BUILTIN_FUNCTION",`map: unknown builtin function index ${t}`):ze(l,p,v,a,o,u,m,!!b),et=chunk5FGOIDLS_cjs.P(ae);if(et){V=et;break}B[k]=ae.type===10||ae.type===9?ae.value:ae.toNumber();}if(V){n.push(V);break}let D=i[0],R=D?.type===7?D.value:void 0;R&&R.rows*R.cols===g?n.push(chunk5FGOIDLS_cjs.C(R.rows,R.cols,B)):n.push(chunk5FGOIDLS_cjs.C(1,g,B));break}case 160:{let e=U(d,I++,f,"plot body reference"),t=U(d,I++,f,"plot expression"),s=Se(x,t,f),i=c(n).toNumber(),l=c(n).toNumber(),p=w?.[e];if(!p)throw chunkSOMGSIO4_cjs.c.internal("INTERNAL_MISSING_ANONYMOUS_BODY",`Internal error: PLOT_INVOKE referenced missing anonymous body index ${e}`,{ref:e});if(!Number.isFinite(l)||!Number.isFinite(i)){n.push(chunk5FGOIDLS_cjs.O("PLOT_INVALID_RANGE",`plot: the range bounds must be finite numbers (got ${l} to ${i})`));break}let g=[];for(let D=0;D<Lt;D++){let R=l+D/(Lt-1)*(i-l),k;try{k=ze(p.params,p.program,[chunk5FGOIDLS_cjs.n(R)],a,o,u,m,!!b).toNumber();}catch{continue}Number.isFinite(k)&&g.push([R,k]);}let E=g.map(D=>D[1]),C=E.length?Math.min(...E):0,B=E.length?Math.max(...E):0,V=D=>Number.isInteger(D)?String(D):String(Number(D.toFixed(2)));n.push(chunk5FGOIDLS_cjs.I({kind:"plot",points:g,label:`${s} over [${V(l)}, ${V(i)}]`,domain:[l,i],range:[C,B],expr:s}));break}case 158:{let e=U(d,I++,f,"body kind"),t=U(d,I++,f,"body reference"),s=U(d,I++,f,"initial-value flag");Ft(e,t,f);let i=s?c(n):void 0,l=c(n),p=[],g;if(e===0){let D=w?.[t];if(!D)throw chunkSOMGSIO4_cjs.c.internal("INTERNAL_MISSING_ANONYMOUS_BODY",`Internal error: REDUCE_INVOKE referenced missing anonymous body index ${t}`,{ref:t});p=D.params,g=D.program;}else if(e===2){let D=Se(x,t,f),R=a.getUserFunction(D);if(!R){n.push(chunk5FGOIDLS_cjs.O("UNDEFINED_FUNCTION",`reduce: undefined function "${D}"`));break}if(R.params.length!==2){n.push(chunk5FGOIDLS_cjs.O("FUNCTION_ARITY_MISMATCH",`reduce: "${D}" must take exactly 2 arguments (accumulator, element), got ${R.params.length}`));break}p=R.params,g=R.program;}let E=chunkZOOVGXMK_cjs.ea(l,a.getMaxCollectionSize());if(!Array.isArray(E)){n.push(E);break}chunk5FGOIDLS_cjs.c(E.length,"collection elements");let C,B;if(i!==void 0){let D=chunk5FGOIDLS_cjs.P(i);if(D){n.push(D);break}C=i,B=0;}else {if(E.length===0){n.push(chunk5FGOIDLS_cjs.O("REDUCE_EMPTY_COLLECTION","reduce: cannot reduce an empty collection without an initial value."));break}C=E[0],B=1;}let V;for(let D=B;D<E.length;D++){let R=[C,E[D]],k=e===1?chunkZ5KBBQOJ_cjs.C[t]?.(R)??chunk5FGOIDLS_cjs.O("UNKNOWN_BUILTIN_FUNCTION",`reduce: unknown builtin function index ${t}`):ze(p,g,R,a,o,u,m,!!b),v=chunk5FGOIDLS_cjs.P(k);if(v){V=v;break}C=k;}if(V){n.push(V);break}n.push(C);break}case 159:{let e=U(d,I++,f,"body reference"),t=w?.[e];if(!t)throw chunkSOMGSIO4_cjs.c.internal("INTERNAL_MISSING_ANONYMOUS_BODY",`Internal error: BIND_UNKNOWN referenced missing anonymous body index ${e}`,{ref:e});n.push(sn(t.params[0],t.program,a,o,u,m,!!b));break}}}let K=c(n);return {type:"value",value:W?chunk5FGOIDLS_cjs.k(K):K}}catch(K){return {type:"error",error:chunkSOMGSIO4_cjs.d(K)}}finally{chunk5FGOIDLS_cjs.b();}}exports.a=Ct;exports.b=Ot;exports.c=jn;exports.d=Ze;//# sourceMappingURL=chunk-GKDZ7TSX.cjs.map
2
+ //# sourceMappingURL=chunk-GKDZ7TSX.cjs.map