@invinite-org/chartlang-runtime 1.0.2 → 1.1.1

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 (567) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +10 -2
  3. package/dist/buildComputeContext.js.map +1 -1
  4. package/dist/createScriptRunner.d.ts +55 -4
  5. package/dist/createScriptRunner.d.ts.map +1 -1
  6. package/dist/createScriptRunner.js +103 -35
  7. package/dist/createScriptRunner.js.map +1 -1
  8. package/dist/dep/DepOutputStore.d.ts +92 -0
  9. package/dist/dep/DepOutputStore.d.ts.map +1 -0
  10. package/dist/dep/DepOutputStore.js +0 -0
  11. package/dist/dep/DepOutputStore.js.map +1 -0
  12. package/dist/dep/DepRunner.d.ts +146 -0
  13. package/dist/dep/DepRunner.d.ts.map +1 -0
  14. package/dist/dep/DepRunner.js +243 -0
  15. package/dist/dep/DepRunner.js.map +1 -0
  16. package/dist/dep/depOutput.d.ts +50 -0
  17. package/dist/dep/depOutput.d.ts.map +1 -0
  18. package/dist/dep/depOutput.js +92 -0
  19. package/dist/dep/depOutput.js.map +1 -0
  20. package/dist/dep/emissionFilter.d.ts +70 -0
  21. package/dist/dep/emissionFilter.d.ts.map +1 -0
  22. package/dist/dep/emissionFilter.js +105 -0
  23. package/dist/dep/emissionFilter.js.map +1 -0
  24. package/dist/dep/index.d.ts +8 -0
  25. package/dist/dep/index.d.ts.map +1 -0
  26. package/dist/dep/index.js +7 -0
  27. package/dist/dep/index.js.map +1 -0
  28. package/dist/emit/alert.js.map +1 -1
  29. package/dist/emit/alertConditionEmission.js.map +1 -1
  30. package/dist/emit/applyPlotOverride.d.ts +24 -0
  31. package/dist/emit/applyPlotOverride.d.ts.map +1 -0
  32. package/dist/emit/applyPlotOverride.js +48 -0
  33. package/dist/emit/applyPlotOverride.js.map +1 -0
  34. package/dist/emit/draw/annotations/arrow.js +1 -1
  35. package/dist/emit/draw/annotations/arrow.js.map +1 -1
  36. package/dist/emit/draw/annotations/arrowMarkDown.js +1 -1
  37. package/dist/emit/draw/annotations/arrowMarkDown.js.map +1 -1
  38. package/dist/emit/draw/annotations/arrowMarkUp.js +1 -1
  39. package/dist/emit/draw/annotations/arrowMarkUp.js.map +1 -1
  40. package/dist/emit/draw/annotations/arrowMarker.js +1 -1
  41. package/dist/emit/draw/annotations/arrowMarker.js.map +1 -1
  42. package/dist/emit/draw/annotations/text.js +1 -1
  43. package/dist/emit/draw/annotations/text.js.map +1 -1
  44. package/dist/emit/draw/boxes/circle.js +1 -1
  45. package/dist/emit/draw/boxes/circle.js.map +1 -1
  46. package/dist/emit/draw/boxes/ellipse.d.ts +1 -1
  47. package/dist/emit/draw/boxes/ellipse.js +1 -1
  48. package/dist/emit/draw/boxes/ellipse.js.map +1 -1
  49. package/dist/emit/draw/boxes/marker.js +1 -1
  50. package/dist/emit/draw/boxes/marker.js.map +1 -1
  51. package/dist/emit/draw/boxes/path.d.ts +1 -1
  52. package/dist/emit/draw/boxes/path.js +1 -1
  53. package/dist/emit/draw/boxes/path.js.map +1 -1
  54. package/dist/emit/draw/boxes/polyline.d.ts +1 -1
  55. package/dist/emit/draw/boxes/polyline.js +1 -1
  56. package/dist/emit/draw/boxes/polyline.js.map +1 -1
  57. package/dist/emit/draw/boxes/rectangle.js +1 -1
  58. package/dist/emit/draw/boxes/rectangle.js.map +1 -1
  59. package/dist/emit/draw/boxes/rotatedRectangle.js +1 -1
  60. package/dist/emit/draw/boxes/rotatedRectangle.js.map +1 -1
  61. package/dist/emit/draw/boxes/triangle.d.ts +1 -1
  62. package/dist/emit/draw/boxes/triangle.js +1 -1
  63. package/dist/emit/draw/boxes/triangle.js.map +1 -1
  64. package/dist/emit/draw/channels/disjointChannel.js +1 -1
  65. package/dist/emit/draw/channels/disjointChannel.js.map +1 -1
  66. package/dist/emit/draw/channels/flatTopBottom.d.ts +1 -2
  67. package/dist/emit/draw/channels/flatTopBottom.d.ts.map +1 -1
  68. package/dist/emit/draw/channels/flatTopBottom.js +1 -1
  69. package/dist/emit/draw/channels/flatTopBottom.js.map +1 -1
  70. package/dist/emit/draw/channels/regressionTrend.d.ts +3 -4
  71. package/dist/emit/draw/channels/regressionTrend.d.ts.map +1 -1
  72. package/dist/emit/draw/channels/regressionTrend.js +1 -1
  73. package/dist/emit/draw/channels/regressionTrend.js.map +1 -1
  74. package/dist/emit/draw/channels/trendChannel.js +1 -1
  75. package/dist/emit/draw/channels/trendChannel.js.map +1 -1
  76. package/dist/emit/draw/containers/frame.d.ts +1 -1
  77. package/dist/emit/draw/containers/frame.js +2 -2
  78. package/dist/emit/draw/containers/frame.js.map +1 -1
  79. package/dist/emit/draw/containers/group.d.ts +1 -2
  80. package/dist/emit/draw/containers/group.d.ts.map +1 -1
  81. package/dist/emit/draw/containers/group.js +2 -2
  82. package/dist/emit/draw/containers/group.js.map +1 -1
  83. package/dist/emit/draw/curves/arc.js +1 -1
  84. package/dist/emit/draw/curves/arc.js.map +1 -1
  85. package/dist/emit/draw/curves/brush.js +1 -1
  86. package/dist/emit/draw/curves/brush.js.map +1 -1
  87. package/dist/emit/draw/curves/curve.js +1 -1
  88. package/dist/emit/draw/curves/curve.js.map +1 -1
  89. package/dist/emit/draw/curves/doubleCurve.js +1 -1
  90. package/dist/emit/draw/curves/doubleCurve.js.map +1 -1
  91. package/dist/emit/draw/curves/highlighter.js +1 -1
  92. package/dist/emit/draw/curves/highlighter.js.map +1 -1
  93. package/dist/emit/draw/curves/pen.js +1 -1
  94. package/dist/emit/draw/curves/pen.js.map +1 -1
  95. package/dist/emit/draw/cycles/cyclicLines.js +1 -1
  96. package/dist/emit/draw/cycles/cyclicLines.js.map +1 -1
  97. package/dist/emit/draw/cycles/sineLine.js +1 -1
  98. package/dist/emit/draw/cycles/sineLine.js.map +1 -1
  99. package/dist/emit/draw/cycles/timeCycles.js +1 -1
  100. package/dist/emit/draw/cycles/timeCycles.js.map +1 -1
  101. package/dist/emit/draw/elliott/elliottCorrectionWave.js +1 -1
  102. package/dist/emit/draw/elliott/elliottCorrectionWave.js.map +1 -1
  103. package/dist/emit/draw/elliott/elliottDoubleCombo.js +1 -1
  104. package/dist/emit/draw/elliott/elliottDoubleCombo.js.map +1 -1
  105. package/dist/emit/draw/elliott/elliottImpulseWave.js +1 -1
  106. package/dist/emit/draw/elliott/elliottImpulseWave.js.map +1 -1
  107. package/dist/emit/draw/elliott/elliottTriangleWave.js +1 -1
  108. package/dist/emit/draw/elliott/elliottTriangleWave.js.map +1 -1
  109. package/dist/emit/draw/elliott/elliottTripleCombo.js +1 -1
  110. package/dist/emit/draw/elliott/elliottTripleCombo.js.map +1 -1
  111. package/dist/emit/draw/fibA/fibChannel.js +1 -1
  112. package/dist/emit/draw/fibA/fibChannel.js.map +1 -1
  113. package/dist/emit/draw/fibA/fibRetracement.js +1 -1
  114. package/dist/emit/draw/fibA/fibRetracement.js.map +1 -1
  115. package/dist/emit/draw/fibA/fibTimeZone.d.ts +1 -2
  116. package/dist/emit/draw/fibA/fibTimeZone.d.ts.map +1 -1
  117. package/dist/emit/draw/fibA/fibTimeZone.js +1 -1
  118. package/dist/emit/draw/fibA/fibTimeZone.js.map +1 -1
  119. package/dist/emit/draw/fibA/fibTrendExtension.js +1 -1
  120. package/dist/emit/draw/fibA/fibTrendExtension.js.map +1 -1
  121. package/dist/emit/draw/fibA/fibWedge.js +1 -1
  122. package/dist/emit/draw/fibA/fibWedge.js.map +1 -1
  123. package/dist/emit/draw/fibB/fibCircles.d.ts +1 -2
  124. package/dist/emit/draw/fibB/fibCircles.d.ts.map +1 -1
  125. package/dist/emit/draw/fibB/fibCircles.js +1 -1
  126. package/dist/emit/draw/fibB/fibCircles.js.map +1 -1
  127. package/dist/emit/draw/fibB/fibSpeedArcs.js +1 -1
  128. package/dist/emit/draw/fibB/fibSpeedArcs.js.map +1 -1
  129. package/dist/emit/draw/fibB/fibSpeedFan.js +1 -1
  130. package/dist/emit/draw/fibB/fibSpeedFan.js.map +1 -1
  131. package/dist/emit/draw/fibB/fibSpiral.d.ts +1 -2
  132. package/dist/emit/draw/fibB/fibSpiral.d.ts.map +1 -1
  133. package/dist/emit/draw/fibB/fibSpiral.js +1 -1
  134. package/dist/emit/draw/fibB/fibSpiral.js.map +1 -1
  135. package/dist/emit/draw/fibB/fibTrendTime.d.ts +1 -2
  136. package/dist/emit/draw/fibB/fibTrendTime.d.ts.map +1 -1
  137. package/dist/emit/draw/fibB/fibTrendTime.js +1 -1
  138. package/dist/emit/draw/fibB/fibTrendTime.js.map +1 -1
  139. package/dist/emit/draw/gann/gannBox.js +1 -1
  140. package/dist/emit/draw/gann/gannBox.js.map +1 -1
  141. package/dist/emit/draw/gann/gannFan.js +1 -1
  142. package/dist/emit/draw/gann/gannFan.js.map +1 -1
  143. package/dist/emit/draw/gann/gannSquare.js +1 -1
  144. package/dist/emit/draw/gann/gannSquare.js.map +1 -1
  145. package/dist/emit/draw/gann/gannSquareFixed.js +1 -1
  146. package/dist/emit/draw/gann/gannSquareFixed.js.map +1 -1
  147. package/dist/emit/draw/handle.d.ts +2 -2
  148. package/dist/emit/draw/handle.js +2 -2
  149. package/dist/emit/draw/handle.js.map +1 -1
  150. package/dist/emit/draw/index.js.map +1 -1
  151. package/dist/emit/draw/lines/crossLine.js +1 -1
  152. package/dist/emit/draw/lines/crossLine.js.map +1 -1
  153. package/dist/emit/draw/lines/horizontalLine.d.ts +1 -1
  154. package/dist/emit/draw/lines/horizontalLine.js +1 -1
  155. package/dist/emit/draw/lines/horizontalLine.js.map +1 -1
  156. package/dist/emit/draw/lines/horizontalRay.js +1 -1
  157. package/dist/emit/draw/lines/horizontalRay.js.map +1 -1
  158. package/dist/emit/draw/lines/line.d.ts +1 -1
  159. package/dist/emit/draw/lines/line.d.ts.map +1 -1
  160. package/dist/emit/draw/lines/line.js +2 -3
  161. package/dist/emit/draw/lines/line.js.map +1 -1
  162. package/dist/emit/draw/lines/trendAngle.js +1 -1
  163. package/dist/emit/draw/lines/trendAngle.js.map +1 -1
  164. package/dist/emit/draw/lines/verticalLine.js +1 -1
  165. package/dist/emit/draw/lines/verticalLine.js.map +1 -1
  166. package/dist/emit/draw/namespace.d.ts +1 -1
  167. package/dist/emit/draw/namespace.js +1 -1
  168. package/dist/emit/draw/namespace.js.map +1 -1
  169. package/dist/emit/draw/patterns/abcdPattern.js +1 -1
  170. package/dist/emit/draw/patterns/abcdPattern.js.map +1 -1
  171. package/dist/emit/draw/patterns/cypherPattern.d.ts +1 -2
  172. package/dist/emit/draw/patterns/cypherPattern.d.ts.map +1 -1
  173. package/dist/emit/draw/patterns/cypherPattern.js +1 -1
  174. package/dist/emit/draw/patterns/cypherPattern.js.map +1 -1
  175. package/dist/emit/draw/patterns/headAndShoulders.js +1 -1
  176. package/dist/emit/draw/patterns/headAndShoulders.js.map +1 -1
  177. package/dist/emit/draw/patterns/threeDrivesPattern.js +1 -1
  178. package/dist/emit/draw/patterns/threeDrivesPattern.js.map +1 -1
  179. package/dist/emit/draw/patterns/trianglePattern.d.ts +1 -1
  180. package/dist/emit/draw/patterns/trianglePattern.js +1 -1
  181. package/dist/emit/draw/patterns/trianglePattern.js.map +1 -1
  182. package/dist/emit/draw/patterns/xabcdPattern.js +1 -1
  183. package/dist/emit/draw/patterns/xabcdPattern.js.map +1 -1
  184. package/dist/emit/draw/pitchforks/pitchfan.js +1 -1
  185. package/dist/emit/draw/pitchforks/pitchfan.js.map +1 -1
  186. package/dist/emit/draw/pitchforks/pitchfork.d.ts +1 -1
  187. package/dist/emit/draw/pitchforks/pitchfork.js +2 -2
  188. package/dist/emit/draw/pitchforks/pitchfork.js.map +1 -1
  189. package/dist/emit/draw/pushDrawing.js.map +1 -1
  190. package/dist/emit/draw/subIdAllocator.d.ts +1 -1
  191. package/dist/emit/draw/subIdAllocator.js +1 -1
  192. package/dist/emit/draw/subIdAllocator.js.map +1 -1
  193. package/dist/emit/draw/table/table.d.ts +1 -1
  194. package/dist/emit/draw/table/table.js.map +1 -1
  195. package/dist/emit/emissionsQueue.js.map +1 -1
  196. package/dist/emit/hash.js.map +1 -1
  197. package/dist/emit/hline.d.ts +6 -4
  198. package/dist/emit/hline.d.ts.map +1 -1
  199. package/dist/emit/hline.js +5 -2
  200. package/dist/emit/hline.js.map +1 -1
  201. package/dist/emit/index.d.ts +2 -1
  202. package/dist/emit/index.d.ts.map +1 -1
  203. package/dist/emit/index.js +2 -1
  204. package/dist/emit/index.js.map +1 -1
  205. package/dist/emit/logEmission.js.map +1 -1
  206. package/dist/emit/paneResolver.d.ts +52 -11
  207. package/dist/emit/paneResolver.d.ts.map +1 -1
  208. package/dist/emit/paneResolver.js +69 -26
  209. package/dist/emit/paneResolver.js.map +1 -1
  210. package/dist/emit/plot.d.ts.map +1 -1
  211. package/dist/emit/plot.js +2 -1
  212. package/dist/emit/plot.js.map +1 -1
  213. package/dist/emit/runtimeError.js.map +1 -1
  214. package/dist/execution/dispose.d.ts.map +1 -1
  215. package/dist/execution/dispose.js +7 -0
  216. package/dist/execution/dispose.js.map +1 -1
  217. package/dist/execution/drain.js.map +1 -1
  218. package/dist/execution/index.js.map +1 -1
  219. package/dist/execution/onBarClose.d.ts +9 -13
  220. package/dist/execution/onBarClose.d.ts.map +1 -1
  221. package/dist/execution/onBarClose.js +28 -59
  222. package/dist/execution/onBarClose.js.map +1 -1
  223. package/dist/execution/onBarTick.d.ts +4 -10
  224. package/dist/execution/onBarTick.d.ts.map +1 -1
  225. package/dist/execution/onBarTick.js +24 -57
  226. package/dist/execution/onBarTick.js.map +1 -1
  227. package/dist/execution/onHistory.js.map +1 -1
  228. package/dist/execution/runComputeStep.d.ts +68 -0
  229. package/dist/execution/runComputeStep.d.ts.map +1 -0
  230. package/dist/execution/runComputeStep.js +96 -0
  231. package/dist/execution/runComputeStep.js.map +1 -0
  232. package/dist/execution/secondaryStream.js.map +1 -1
  233. package/dist/index.d.ts +3 -1
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +2 -1
  236. package/dist/index.js.map +1 -1
  237. package/dist/inputs/index.js.map +1 -1
  238. package/dist/inputs/resolveInputs.js.map +1 -1
  239. package/dist/internal.d.ts +12 -0
  240. package/dist/internal.d.ts.map +1 -0
  241. package/dist/internal.js +14 -0
  242. package/dist/internal.js.map +1 -0
  243. package/dist/persistentStateStore.js.map +1 -1
  244. package/dist/persistentStateStore.runtime.d.ts +18 -4
  245. package/dist/persistentStateStore.runtime.d.ts.map +1 -1
  246. package/dist/persistentStateStore.runtime.js +111 -18
  247. package/dist/persistentStateStore.runtime.js.map +1 -1
  248. package/dist/persistentStateStore.validate.d.ts +11 -1
  249. package/dist/persistentStateStore.validate.d.ts.map +1 -1
  250. package/dist/persistentStateStore.validate.js +32 -3
  251. package/dist/persistentStateStore.validate.js.map +1 -1
  252. package/dist/primitives.js.map +1 -1
  253. package/dist/request/alignHtfSeriesCache.js.map +1 -1
  254. package/dist/request/alignHtfSeriesToLtf.d.ts +2 -2
  255. package/dist/request/alignHtfSeriesToLtf.js +2 -2
  256. package/dist/request/alignHtfSeriesToLtf.js.map +1 -1
  257. package/dist/request/bucketLtfBarsByMainContainment.js.map +1 -1
  258. package/dist/request/bucketLtfBarsCache.js.map +1 -1
  259. package/dist/request/index.js.map +1 -1
  260. package/dist/request/lowerTf.js.map +1 -1
  261. package/dist/request/pushOnce.js.map +1 -1
  262. package/dist/request/requestNamespace.js.map +1 -1
  263. package/dist/request/security.js.map +1 -1
  264. package/dist/request/streamBars.js.map +1 -1
  265. package/dist/ringBuffer.d.ts +2 -2
  266. package/dist/ringBuffer.js +1 -1
  267. package/dist/ringBuffer.js.map +1 -1
  268. package/dist/runtimeContext.d.ts +65 -7
  269. package/dist/runtimeContext.d.ts.map +1 -1
  270. package/dist/runtimeContext.js.map +1 -1
  271. package/dist/seriesView.d.ts +1 -1
  272. package/dist/seriesView.js +1 -1
  273. package/dist/seriesView.js.map +1 -1
  274. package/dist/state/index.js.map +1 -1
  275. package/dist/state/lifecycle.js.map +1 -1
  276. package/dist/state/stateNamespace.d.ts.map +1 -1
  277. package/dist/state/stateNamespace.js +13 -2
  278. package/dist/state/stateNamespace.js.map +1 -1
  279. package/dist/state/stateSlot.js.map +1 -1
  280. package/dist/stateStore.d.ts +7 -4
  281. package/dist/stateStore.d.ts.map +1 -1
  282. package/dist/stateStore.js.map +1 -1
  283. package/dist/streamState.d.ts +1 -1
  284. package/dist/streamState.js +1 -1
  285. package/dist/streamState.js.map +1 -1
  286. package/dist/ta/adl.js +2 -2
  287. package/dist/ta/adl.js.map +1 -1
  288. package/dist/ta/adr.d.ts +3 -3
  289. package/dist/ta/adr.js +5 -5
  290. package/dist/ta/adr.js.map +1 -1
  291. package/dist/ta/adx.d.ts +1 -1
  292. package/dist/ta/adx.js +3 -3
  293. package/dist/ta/adx.js.map +1 -1
  294. package/dist/ta/alma.d.ts +3 -3
  295. package/dist/ta/alma.js +5 -5
  296. package/dist/ta/alma.js.map +1 -1
  297. package/dist/ta/anchoredVolumeProfile.js.map +1 -1
  298. package/dist/ta/anchoredVwap.d.ts +1 -1
  299. package/dist/ta/anchoredVwap.js +3 -3
  300. package/dist/ta/anchoredVwap.js.map +1 -1
  301. package/dist/ta/ao.js +2 -2
  302. package/dist/ta/ao.js.map +1 -1
  303. package/dist/ta/aroon.js +2 -2
  304. package/dist/ta/aroon.js.map +1 -1
  305. package/dist/ta/aroonOsc.js +2 -2
  306. package/dist/ta/aroonOsc.js.map +1 -1
  307. package/dist/ta/atr.d.ts +1 -1
  308. package/dist/ta/atr.js +3 -3
  309. package/dist/ta/atr.js.map +1 -1
  310. package/dist/ta/barssince.js +1 -1
  311. package/dist/ta/barssince.js.map +1 -1
  312. package/dist/ta/bb.d.ts +1 -1
  313. package/dist/ta/bb.js +3 -3
  314. package/dist/ta/bb.js.map +1 -1
  315. package/dist/ta/bbPercentB.js +2 -2
  316. package/dist/ta/bbPercentB.js.map +1 -1
  317. package/dist/ta/bbw.js +2 -2
  318. package/dist/ta/bbw.js.map +1 -1
  319. package/dist/ta/bop.js +2 -2
  320. package/dist/ta/bop.js.map +1 -1
  321. package/dist/ta/cci.js +2 -2
  322. package/dist/ta/cci.js.map +1 -1
  323. package/dist/ta/chaikinOsc.d.ts +1 -1
  324. package/dist/ta/chaikinOsc.js +3 -3
  325. package/dist/ta/chaikinOsc.js.map +1 -1
  326. package/dist/ta/chandeKrollStop.d.ts +1 -1
  327. package/dist/ta/chandeKrollStop.js +3 -3
  328. package/dist/ta/chandeKrollStop.js.map +1 -1
  329. package/dist/ta/chandelier.d.ts +1 -1
  330. package/dist/ta/chandelier.js +3 -3
  331. package/dist/ta/chandelier.js.map +1 -1
  332. package/dist/ta/change.js +1 -1
  333. package/dist/ta/change.js.map +1 -1
  334. package/dist/ta/chop.js +2 -2
  335. package/dist/ta/chop.js.map +1 -1
  336. package/dist/ta/cmf.js +2 -2
  337. package/dist/ta/cmf.js.map +1 -1
  338. package/dist/ta/cmo.js +2 -2
  339. package/dist/ta/cmo.js.map +1 -1
  340. package/dist/ta/connorsRsi.d.ts +1 -1
  341. package/dist/ta/connorsRsi.js +3 -3
  342. package/dist/ta/connorsRsi.js.map +1 -1
  343. package/dist/ta/coppock.js +2 -2
  344. package/dist/ta/coppock.js.map +1 -1
  345. package/dist/ta/crossover.d.ts +1 -1
  346. package/dist/ta/crossover.js +2 -2
  347. package/dist/ta/crossover.js.map +1 -1
  348. package/dist/ta/crossunder.d.ts +1 -1
  349. package/dist/ta/crossunder.js +2 -2
  350. package/dist/ta/crossunder.js.map +1 -1
  351. package/dist/ta/dema.js +2 -2
  352. package/dist/ta/dema.js.map +1 -1
  353. package/dist/ta/dmi.d.ts +1 -1
  354. package/dist/ta/dmi.js +3 -3
  355. package/dist/ta/dmi.js.map +1 -1
  356. package/dist/ta/donchian.js +2 -2
  357. package/dist/ta/donchian.js.map +1 -1
  358. package/dist/ta/dpo.js +2 -2
  359. package/dist/ta/dpo.js.map +1 -1
  360. package/dist/ta/ema.d.ts +1 -1
  361. package/dist/ta/ema.js +3 -3
  362. package/dist/ta/ema.js.map +1 -1
  363. package/dist/ta/envelope.js +2 -2
  364. package/dist/ta/envelope.js.map +1 -1
  365. package/dist/ta/eom.d.ts +1 -1
  366. package/dist/ta/eom.js +3 -3
  367. package/dist/ta/eom.js.map +1 -1
  368. package/dist/ta/fisher.js +2 -2
  369. package/dist/ta/fisher.js.map +1 -1
  370. package/dist/ta/fixedRangeVolumeProfile.js.map +1 -1
  371. package/dist/ta/highest.js +1 -1
  372. package/dist/ta/highest.js.map +1 -1
  373. package/dist/ta/historicalVolatility.d.ts +1 -1
  374. package/dist/ta/historicalVolatility.js +3 -3
  375. package/dist/ta/historicalVolatility.js.map +1 -1
  376. package/dist/ta/hma.js +2 -2
  377. package/dist/ta/hma.js.map +1 -1
  378. package/dist/ta/ichimoku.d.ts +1 -1
  379. package/dist/ta/ichimoku.js +3 -3
  380. package/dist/ta/ichimoku.js.map +1 -1
  381. package/dist/ta/index.js.map +1 -1
  382. package/dist/ta/kama.js +2 -2
  383. package/dist/ta/kama.js.map +1 -1
  384. package/dist/ta/keltner.js +2 -2
  385. package/dist/ta/keltner.js.map +1 -1
  386. package/dist/ta/klinger.js +2 -2
  387. package/dist/ta/klinger.js.map +1 -1
  388. package/dist/ta/kst.js +2 -2
  389. package/dist/ta/kst.js.map +1 -1
  390. package/dist/ta/lib/adxFromDi.js +2 -2
  391. package/dist/ta/lib/adxFromDi.js.map +1 -1
  392. package/dist/ta/lib/applyOffset.js +2 -2
  393. package/dist/ta/lib/applyOffset.js.map +1 -1
  394. package/dist/ta/lib/computeMa.js +2 -2
  395. package/dist/ta/lib/computeMa.js.map +1 -1
  396. package/dist/ta/lib/computeMaOfFloat64.js +2 -2
  397. package/dist/ta/lib/computeMaOfFloat64.js.map +1 -1
  398. package/dist/ta/lib/directionalState.js +2 -2
  399. package/dist/ta/lib/directionalState.js.map +1 -1
  400. package/dist/ta/lib/donchianMid.js +2 -2
  401. package/dist/ta/lib/donchianMid.js.map +1 -1
  402. package/dist/ta/lib/emaFloat64.js +2 -2
  403. package/dist/ta/lib/emaFloat64.js.map +1 -1
  404. package/dist/ta/lib/linearRegression.js +2 -2
  405. package/dist/ta/lib/linearRegression.js.map +1 -1
  406. package/dist/ta/lib/maTypes.js.map +1 -1
  407. package/dist/ta/lib/pearson.js +2 -2
  408. package/dist/ta/lib/pearson.js.map +1 -1
  409. package/dist/ta/lib/pickCandleSource.js +2 -2
  410. package/dist/ta/lib/pickCandleSource.js.map +1 -1
  411. package/dist/ta/lib/readSourceField.js +2 -2
  412. package/dist/ta/lib/readSourceField.js.map +1 -1
  413. package/dist/ta/lib/rollingStddev.js +2 -2
  414. package/dist/ta/lib/rollingStddev.js.map +1 -1
  415. package/dist/ta/lib/smaFloat64.js +2 -2
  416. package/dist/ta/lib/smaFloat64.js.map +1 -1
  417. package/dist/ta/lib/smmaFloat64.js +2 -2
  418. package/dist/ta/lib/smmaFloat64.js.map +1 -1
  419. package/dist/ta/lib/sourceValue.js.map +1 -1
  420. package/dist/ta/lib/trSeries.js +2 -2
  421. package/dist/ta/lib/trSeries.js.map +1 -1
  422. package/dist/ta/lib/volume-profile/bucketEdges.js.map +1 -1
  423. package/dist/ta/lib/volume-profile/bucketizeVolume.js.map +1 -1
  424. package/dist/ta/lib/volume-profile/developingSeries.js.map +1 -1
  425. package/dist/ta/lib/volume-profile/index.js.map +1 -1
  426. package/dist/ta/lib/volume-profile/intercept.js.map +1 -1
  427. package/dist/ta/lib/volume-profile/scaffold.js.map +1 -1
  428. package/dist/ta/lib/volume-profile/tooHeavy.js.map +1 -1
  429. package/dist/ta/lib/volume-profile/types.js.map +1 -1
  430. package/dist/ta/lib/volume-profile/valueArea.js.map +1 -1
  431. package/dist/ta/lib/volume-profile/volumeProfileShared.js.map +1 -1
  432. package/dist/ta/lib/vwmaFloat64.js +2 -2
  433. package/dist/ta/lib/vwmaFloat64.js.map +1 -1
  434. package/dist/ta/lib/wilderDirectional.js +2 -2
  435. package/dist/ta/lib/wilderDirectional.js.map +1 -1
  436. package/dist/ta/lib/wilderSmoothing.js +2 -2
  437. package/dist/ta/lib/wilderSmoothing.js.map +1 -1
  438. package/dist/ta/lib/wmaFloat64.js +2 -2
  439. package/dist/ta/lib/wmaFloat64.js.map +1 -1
  440. package/dist/ta/lowest.js +1 -1
  441. package/dist/ta/lowest.js.map +1 -1
  442. package/dist/ta/lsma.js +2 -2
  443. package/dist/ta/lsma.js.map +1 -1
  444. package/dist/ta/maRibbon.js +2 -2
  445. package/dist/ta/maRibbon.js.map +1 -1
  446. package/dist/ta/macd.d.ts +1 -1
  447. package/dist/ta/macd.js +4 -4
  448. package/dist/ta/macd.js.map +1 -1
  449. package/dist/ta/massIndex.d.ts +1 -1
  450. package/dist/ta/massIndex.js +3 -3
  451. package/dist/ta/massIndex.js.map +1 -1
  452. package/dist/ta/mcginley.js +2 -2
  453. package/dist/ta/mcginley.js.map +1 -1
  454. package/dist/ta/median.js +2 -2
  455. package/dist/ta/median.js.map +1 -1
  456. package/dist/ta/mfi.d.ts +1 -1
  457. package/dist/ta/mfi.js +3 -3
  458. package/dist/ta/mfi.js.map +1 -1
  459. package/dist/ta/momentum.js +2 -2
  460. package/dist/ta/momentum.js.map +1 -1
  461. package/dist/ta/netVolume.d.ts +1 -1
  462. package/dist/ta/netVolume.js +3 -3
  463. package/dist/ta/netVolume.js.map +1 -1
  464. package/dist/ta/nvi.d.ts +1 -1
  465. package/dist/ta/nvi.js +3 -3
  466. package/dist/ta/nvi.js.map +1 -1
  467. package/dist/ta/nz.js +1 -1
  468. package/dist/ta/nz.js.map +1 -1
  469. package/dist/ta/obv.js +2 -2
  470. package/dist/ta/obv.js.map +1 -1
  471. package/dist/ta/persistence.js.map +1 -1
  472. package/dist/ta/pivotsHighLow.js +2 -2
  473. package/dist/ta/pivotsHighLow.js.map +1 -1
  474. package/dist/ta/pivotsStandard.d.ts +1 -1
  475. package/dist/ta/pivotsStandard.js +3 -3
  476. package/dist/ta/pivotsStandard.js.map +1 -1
  477. package/dist/ta/pmo.js +2 -2
  478. package/dist/ta/pmo.js.map +1 -1
  479. package/dist/ta/ppo.d.ts +1 -1
  480. package/dist/ta/ppo.js +3 -3
  481. package/dist/ta/ppo.js.map +1 -1
  482. package/dist/ta/psar.js +2 -2
  483. package/dist/ta/psar.js.map +1 -1
  484. package/dist/ta/pvi.d.ts +1 -1
  485. package/dist/ta/pvi.js +3 -3
  486. package/dist/ta/pvi.js.map +1 -1
  487. package/dist/ta/pvo.d.ts +1 -1
  488. package/dist/ta/pvo.js +3 -3
  489. package/dist/ta/pvo.js.map +1 -1
  490. package/dist/ta/pvt.d.ts +1 -1
  491. package/dist/ta/pvt.js +3 -3
  492. package/dist/ta/pvt.js.map +1 -1
  493. package/dist/ta/registry.js.map +1 -1
  494. package/dist/ta/roc.js +2 -2
  495. package/dist/ta/roc.js.map +1 -1
  496. package/dist/ta/rsi.d.ts +1 -1
  497. package/dist/ta/rsi.js +3 -3
  498. package/dist/ta/rsi.js.map +1 -1
  499. package/dist/ta/rvgi.js +2 -2
  500. package/dist/ta/rvgi.js.map +1 -1
  501. package/dist/ta/rvi.d.ts +1 -1
  502. package/dist/ta/rvi.js +3 -3
  503. package/dist/ta/rvi.js.map +1 -1
  504. package/dist/ta/sessionVolumeProfile.js.map +1 -1
  505. package/dist/ta/sma.d.ts +1 -1
  506. package/dist/ta/sma.js +3 -3
  507. package/dist/ta/sma.js.map +1 -1
  508. package/dist/ta/smi.js +2 -2
  509. package/dist/ta/smi.js.map +1 -1
  510. package/dist/ta/smma.js +2 -2
  511. package/dist/ta/smma.js.map +1 -1
  512. package/dist/ta/stdev.d.ts +1 -1
  513. package/dist/ta/stdev.js +3 -3
  514. package/dist/ta/stdev.js.map +1 -1
  515. package/dist/ta/stoch.js +2 -2
  516. package/dist/ta/stoch.js.map +1 -1
  517. package/dist/ta/stochRsi.js +2 -2
  518. package/dist/ta/stochRsi.js.map +1 -1
  519. package/dist/ta/supertrend.d.ts +1 -1
  520. package/dist/ta/supertrend.js +3 -3
  521. package/dist/ta/supertrend.js.map +1 -1
  522. package/dist/ta/tema.js +2 -2
  523. package/dist/ta/tema.js.map +1 -1
  524. package/dist/ta/trendStrengthIndex.d.ts +2 -2
  525. package/dist/ta/trendStrengthIndex.js +4 -4
  526. package/dist/ta/trendStrengthIndex.js.map +1 -1
  527. package/dist/ta/trix.d.ts +1 -1
  528. package/dist/ta/trix.js +3 -3
  529. package/dist/ta/trix.js.map +1 -1
  530. package/dist/ta/tsi.js +2 -2
  531. package/dist/ta/tsi.js.map +1 -1
  532. package/dist/ta/ulcerIndex.js +2 -2
  533. package/dist/ta/ulcerIndex.js.map +1 -1
  534. package/dist/ta/ultimateOsc.js +2 -2
  535. package/dist/ta/ultimateOsc.js.map +1 -1
  536. package/dist/ta/valuewhen.js +1 -1
  537. package/dist/ta/valuewhen.js.map +1 -1
  538. package/dist/ta/visibleRangeVolumeProfile.d.ts +2 -2
  539. package/dist/ta/visibleRangeVolumeProfile.js +2 -2
  540. package/dist/ta/visibleRangeVolumeProfile.js.map +1 -1
  541. package/dist/ta/vol.js +2 -2
  542. package/dist/ta/vol.js.map +1 -1
  543. package/dist/ta/volatilityStop.d.ts +1 -1
  544. package/dist/ta/volatilityStop.js +3 -3
  545. package/dist/ta/volatilityStop.js.map +1 -1
  546. package/dist/ta/vortex.d.ts +1 -1
  547. package/dist/ta/vortex.js +3 -3
  548. package/dist/ta/vortex.js.map +1 -1
  549. package/dist/ta/vwap.d.ts +3 -3
  550. package/dist/ta/vwap.js +5 -5
  551. package/dist/ta/vwap.js.map +1 -1
  552. package/dist/ta/vwma.js +2 -2
  553. package/dist/ta/vwma.js.map +1 -1
  554. package/dist/ta/williamsFractal.js +2 -2
  555. package/dist/ta/williamsFractal.js.map +1 -1
  556. package/dist/ta/williamsR.js +2 -2
  557. package/dist/ta/williamsR.js.map +1 -1
  558. package/dist/ta/wma.js +2 -2
  559. package/dist/ta/wma.js.map +1 -1
  560. package/dist/ta/zigZag.js +2 -2
  561. package/dist/ta/zigZag.js.map +1 -1
  562. package/dist/views/barstateView.js.map +1 -1
  563. package/dist/views/index.js.map +1 -1
  564. package/dist/views/refreshRuntimeViews.js.map +1 -1
  565. package/dist/views/symInfoView.js.map +1 -1
  566. package/dist/views/timeframeView.js.map +1 -1
  567. package/package.json +7 -3
@@ -1,37 +1,46 @@
1
1
  // Copyright (c) 2026 Invinite. Licensed under the MIT License.
2
2
  // See the LICENSE file in the repo root for full license text.
3
3
  import { pushDiagnostic } from "./emissionsQueue.js";
4
+ const SANITISE_PANE_KEY = /[^a-zA-Z0-9_-]/g;
4
5
  /**
5
- * Resolve the pane requested by a `plot()` call against the Phase-1
6
- * runtime contract: every non-`"overlay"` pane folds back to
7
- * `"overlay"` and a `unsupported-pane` diagnostic is pushed.
6
+ * Derive the stable non-overlay pane key for a script from its
7
+ * manifest name. The name is sanitised (`/[^a-zA-Z0-9_-]/g` `-`) so
8
+ * it fits the `string` shape on `PlotEmission.pane` and cannot collide
9
+ * with the `script:` prefix structure (e.g. a `:` in the name becomes
10
+ * `-`); an empty name falls back to `"script:default"`. Both the
11
+ * primary runner and every dep / sibling sub-runner key off this so a
12
+ * script's distinct name yields a distinct subpane.
8
13
  *
9
- * Phase 1's canvas2d adapter declares `subPanes: 0`; even adapters
10
- * that grow `subPanes >= 1` later get the runtime fold until Phase 2
11
- * lights up sub-pane routing. The two branches differ only in the
12
- * diagnostic `message` both still return `"overlay"`.
14
+ * @since 0.2
15
+ * @stable
16
+ * @example
17
+ * // resolveScriptPane({ name: "RSI Cross", ... }) === "script:RSI-Cross"
18
+ * // resolveScriptPane({ name: "", ... }) === "script:default"
19
+ */
20
+ export function resolveScriptPane(manifest) {
21
+ const sanitised = manifest.name.replace(SANITISE_PANE_KEY, "-");
22
+ return `script:${sanitised === "" ? "default" : sanitised}`;
23
+ }
24
+ /**
25
+ * Resolve a script's mount-time default pane from `manifest.overlay`.
26
+ * `overlay` absent / `true` → `"overlay"` (the price pane); `overlay
27
+ * === false` → the script-owned subpane key from
28
+ * {@link resolveScriptPane}. The runner sets `RuntimeContext.defaultPane`
29
+ * to this once at mount; {@link resolvePane} reads it for any `plot()` /
30
+ * `hline()` call with no explicit `pane`.
13
31
  *
14
- * @since 0.1
32
+ * @since 0.2
33
+ * @stable
15
34
  * @example
16
- * // import { resolvePane } from "@invinite-org/chartlang-runtime/emit";
17
- * // const pane = resolvePane(undefined, ctx, "demo.ts:1:1#0");
18
- * // pane === "overlay"
35
+ * // resolveDefaultPane({ name: "x", overlay: false, ... }) === "script:x"
36
+ * // resolveDefaultPane({ name: "x", ... }) === "overlay"
19
37
  */
20
- export function resolvePane(requested, ctx, slotId) {
21
- const pane = requested ?? "overlay";
22
- if (pane === "overlay")
23
- return "overlay";
24
- if (ctx.capabilities.subPanes >= 1) {
25
- pushDiagnostic(ctx.emissions, {
26
- kind: "diagnostic",
27
- severity: "warning",
28
- code: "unsupported-pane",
29
- message: `Pane "${pane}" requested but Phase-1 runtime flattens to overlay.`,
30
- slotId,
31
- bar: ctx.barIndex(),
32
- });
33
- return "overlay";
34
- }
38
+ export function resolveDefaultPane(manifest) {
39
+ return manifest.overlay === false ? resolveScriptPane(manifest) : "overlay";
40
+ }
41
+ function resolveNamedPane(pane, ctx, slotId) {
42
+ if (ctx.capabilities.subPanes >= 1)
43
+ return pane;
35
44
  pushDiagnostic(ctx.emissions, {
36
45
  kind: "diagnostic",
37
46
  severity: "warning",
@@ -42,4 +51,38 @@ export function resolvePane(requested, ctx, slotId) {
42
51
  });
43
52
  return "overlay";
44
53
  }
54
+ /**
55
+ * Resolve the pane a `plot()` / `hline()` call routes to. Four
56
+ * branches:
57
+ * - `"overlay"` → `"overlay"` (the price pane; never folds).
58
+ * - `undefined` → `ctx.defaultPane` (the script's mount-time default
59
+ * from `manifest.overlay`).
60
+ * - `"new"` → `ctx.scriptPane` (one stable subpane per script, so
61
+ * every `"new"` callsite in a script joins the same subpane).
62
+ * - any other string → returned unchanged when
63
+ * `capabilities.subPanes >= 1`; otherwise folded to `"overlay"`
64
+ * with an `unsupported-pane` diagnostic (the bare-bones adapter
65
+ * compat path).
66
+ *
67
+ * The Phase-1 signature returned the literal `"overlay"` and folded every
68
+ * non-overlay request; the four-branch router widens the return type to
69
+ * `string` and the new `undefined` / `"new"` / named-pass-through
70
+ * branches arrive at `@since 0.2`.
71
+ *
72
+ * @since 0.2
73
+ * @stable
74
+ * @example
75
+ * // import { resolvePane } from "@invinite-org/chartlang-runtime/emit";
76
+ * // const pane = resolvePane("rsi", ctx, "demo.ts:1:1#0");
77
+ * // pane === "rsi" // when ctx.capabilities.subPanes >= 1
78
+ */
79
+ export function resolvePane(requested, ctx, slotId) {
80
+ if (requested === "overlay")
81
+ return "overlay";
82
+ if (requested === undefined)
83
+ return ctx.defaultPane;
84
+ if (requested === "new")
85
+ return resolveNamedPane(ctx.scriptPane, ctx, slotId);
86
+ return resolveNamedPane(requested, ctx, slotId);
87
+ }
45
88
  //# sourceMappingURL=paneResolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paneResolver.js","sourceRoot":"","sources":["../../src/emit/paneResolver.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,WAAW,CACvB,SAA6B,EAC7B,GAAmB,EACnB,MAAc;IAEd,MAAM,IAAI,GAAG,SAAS,IAAI,SAAS,CAAC;IACpC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,IAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;QACjC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;YAC1B,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,SAAS,IAAI,sDAAsD;YAC5E,MAAM;YACN,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;QAC1B,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,uCAAuC,IAAI,sBAAsB;QAC1E,MAAM;QACN,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;KACtB,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"paneResolver.js","sourceRoot":"","sources":["../../src/emit/paneResolver.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAK/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAE5C;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAwB;IACtD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAChE,OAAO,UAAU,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAwB;IACvD,OAAO,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,GAAmB,EAAE,MAAc;IACvE,IAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;QAC1B,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,uCAAuC,IAAI,sBAAsB;QAC1E,MAAM;QACN,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;KACtB,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,WAAW,CACvB,SAA6B,EAC7B,GAAmB,EACnB,MAAc;IAEd,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,WAAW,CAAC;IACpD,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9E,OAAO,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { ScriptManifest } from \"@invinite-org/chartlang-core\";\n\nimport type { RuntimeContext } from \"../runtimeContext.js\";\nimport { pushDiagnostic } from \"./emissionsQueue.js\";\n\nconst SANITISE_PANE_KEY = /[^a-zA-Z0-9_-]/g;\n\n/**\n * Derive the stable non-overlay pane key for a script from its\n * manifest name. The name is sanitised (`/[^a-zA-Z0-9_-]/g` → `-`) so\n * it fits the `string` shape on `PlotEmission.pane` and cannot collide\n * with the `script:` prefix structure (e.g. a `:` in the name becomes\n * `-`); an empty name falls back to `\"script:default\"`. Both the\n * primary runner and every dep / sibling sub-runner key off this so a\n * script's distinct name yields a distinct subpane.\n *\n * @since 0.2\n * @stable\n * @example\n * // resolveScriptPane({ name: \"RSI Cross\", ... }) === \"script:RSI-Cross\"\n * // resolveScriptPane({ name: \"\", ... }) === \"script:default\"\n */\nexport function resolveScriptPane(manifest: ScriptManifest): string {\n const sanitised = manifest.name.replace(SANITISE_PANE_KEY, \"-\");\n return `script:${sanitised === \"\" ? \"default\" : sanitised}`;\n}\n\n/**\n * Resolve a script's mount-time default pane from `manifest.overlay`.\n * `overlay` absent / `true` → `\"overlay\"` (the price pane); `overlay\n * === false` → the script-owned subpane key from\n * {@link resolveScriptPane}. The runner sets `RuntimeContext.defaultPane`\n * to this once at mount; {@link resolvePane} reads it for any `plot()` /\n * `hline()` call with no explicit `pane`.\n *\n * @since 0.2\n * @stable\n * @example\n * // resolveDefaultPane({ name: \"x\", overlay: false, ... }) === \"script:x\"\n * // resolveDefaultPane({ name: \"x\", ... }) === \"overlay\"\n */\nexport function resolveDefaultPane(manifest: ScriptManifest): string {\n return manifest.overlay === false ? resolveScriptPane(manifest) : \"overlay\";\n}\n\nfunction resolveNamedPane(pane: string, ctx: RuntimeContext, slotId: string): string {\n if (ctx.capabilities.subPanes >= 1) return pane;\n pushDiagnostic(ctx.emissions, {\n kind: \"diagnostic\",\n severity: \"warning\",\n code: \"unsupported-pane\",\n message: `Adapter declares subPanes: 0; pane \"${pane}\" folded to overlay.`,\n slotId,\n bar: ctx.barIndex(),\n });\n return \"overlay\";\n}\n\n/**\n * Resolve the pane a `plot()` / `hline()` call routes to. Four\n * branches:\n * - `\"overlay\"` → `\"overlay\"` (the price pane; never folds).\n * - `undefined` → `ctx.defaultPane` (the script's mount-time default\n * from `manifest.overlay`).\n * - `\"new\"` → `ctx.scriptPane` (one stable subpane per script, so\n * every `\"new\"` callsite in a script joins the same subpane).\n * - any other string → returned unchanged when\n * `capabilities.subPanes >= 1`; otherwise folded to `\"overlay\"`\n * with an `unsupported-pane` diagnostic (the bare-bones adapter\n * compat path).\n *\n * The Phase-1 signature returned the literal `\"overlay\"` and folded every\n * non-overlay request; the four-branch router widens the return type to\n * `string` and the new `undefined` / `\"new\"` / named-pass-through\n * branches arrive at `@since 0.2`.\n *\n * @since 0.2\n * @stable\n * @example\n * // import { resolvePane } from \"@invinite-org/chartlang-runtime/emit\";\n * // const pane = resolvePane(\"rsi\", ctx, \"demo.ts:1:1#0\");\n * // pane === \"rsi\" // when ctx.capabilities.subPanes >= 1\n */\nexport function resolvePane(\n requested: string | undefined,\n ctx: RuntimeContext,\n slotId: string,\n): string {\n if (requested === \"overlay\") return \"overlay\";\n if (requested === undefined) return ctx.defaultPane;\n if (requested === \"new\") return resolveNamedPane(ctx.scriptPane, ctx, slotId);\n return resolveNamedPane(requested, ctx, slotId);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"plot.d.ts","sourceRoot":"","sources":["../../src/emit/plot.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAwHrE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;AAC5E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"plot.d.ts","sourceRoot":"","sources":["../../src/emit/plot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAwHrE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;AAC5E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC"}
package/dist/emit/plot.js CHANGED
@@ -1,6 +1,7 @@
1
1
  // Copyright (c) 2026 Invinite. Licensed under the MIT License.
2
2
  // See the LICENSE file in the repo root for full license text.
3
3
  import { ACTIVE_RUNTIME_CONTEXT } from "../runtimeContext.js";
4
+ import { applyPlotOverride } from "./applyPlotOverride.js";
4
5
  import { pushDiagnostic, pushPlot } from "./emissionsQueue.js";
5
6
  import { resolvePane } from "./paneResolver.js";
6
7
  const OUTSIDE_CTX_MESSAGE = "plot called outside an active script step";
@@ -99,7 +100,7 @@ function plotImpl(ctx, slotId, value, opts) {
99
100
  meta: {},
100
101
  pane,
101
102
  };
102
- pushPlot(ctx.emissions, emission);
103
+ pushPlot(ctx.emissions, applyPlotOverride(emission, ctx.plotOverrides[slotId]));
103
104
  }
104
105
  /**
105
106
  * Implementation signature for {@link plot}. Branches on
@@ -1 +1 @@
1
- {"version":3,"file":"plot.js","sourceRoot":"","sources":["../../src/emit/plot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plot.js","sourceRoot":"","sources":["../../src/emit/plot.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { PlotEmission, PlotStyle } from \"@invinite-org/chartlang-adapter-kit\";\nimport type { PlotOpts, Series } from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { applyPlotOverride } from \"./applyPlotOverride.js\";\nimport { pushDiagnostic, pushPlot } from \"./emissionsQueue.js\";\nimport { resolvePane } from \"./paneResolver.js\";\n\nconst OUTSIDE_CTX_MESSAGE = \"plot called outside an active script step\";\n\nfunction isSeriesNumber(v: unknown): v is Series<number> {\n return typeof v === \"object\" && v !== null && \"current\" in v;\n}\n\nfunction isNumberOrSeries(v: unknown): v is number | Series<number> {\n return typeof v === \"number\" || isSeriesNumber(v);\n}\n\nfunction resolveValue(value: number | Series<number>): number | null {\n const resolved = typeof value === \"number\" ? value : value.current;\n return Number.isFinite(resolved) ? resolved : null;\n}\n\nfunction buildStyle(opts: PlotOpts): PlotStyle {\n const style = opts.style;\n if (style === undefined) {\n return {\n kind: \"line\",\n lineWidth: opts.lineWidth ?? 1,\n lineStyle: opts.lineStyle ?? \"solid\",\n };\n }\n switch (style.kind) {\n case \"histogram\":\n return { kind: \"histogram\", baseline: style.baseline ?? 0 };\n case \"marker\":\n return { kind: \"marker\", shape: style.shape, size: style.size };\n case \"shape\":\n return {\n kind: \"shape\",\n shape: style.shape,\n size: style.size,\n ...(style.location === undefined ? {} : { location: style.location }),\n };\n case \"character\":\n return {\n kind: \"character\",\n char: style.char,\n size: style.size,\n ...(style.location === undefined ? {} : { location: style.location }),\n };\n case \"arrow\":\n return { kind: \"arrow\", direction: style.direction, size: style.size };\n case \"candle-override\":\n return {\n kind: \"candle-override\",\n bull: style.bull,\n bear: style.bear,\n ...(style.doji === undefined ? {} : { doji: style.doji }),\n };\n case \"bar-override\":\n return { kind: \"bar-override\", color: style.color };\n case \"bg-color\":\n return {\n kind: \"bg-color\",\n color: style.color,\n ...(style.transp === undefined ? {} : { transp: style.transp }),\n };\n case \"bar-color\":\n return { kind: \"bar-color\", color: style.color };\n case \"horizontal-histogram\":\n return { kind: \"horizontal-histogram\", buckets: style.buckets };\n case \"line\":\n case \"step-line\":\n case \"horizontal-line\":\n return {\n kind: style.kind,\n lineWidth: opts.lineWidth ?? 1,\n lineStyle: opts.lineStyle ?? \"solid\",\n };\n }\n}\n\nfunction plotImpl(\n ctx: RuntimeContext,\n slotId: string,\n value: number | Series<number>,\n opts: PlotOpts,\n): void {\n const style: PlotStyle = buildStyle(opts);\n\n if (!ctx.capabilities.plots.has(style.kind)) {\n pushDiagnostic(ctx.emissions, {\n kind: \"diagnostic\",\n severity: \"warning\",\n code: \"unsupported-plot-kind\",\n message: `Adapter cannot render plot kind \"${style.kind}\".`,\n slotId,\n bar: ctx.barIndex(),\n });\n return;\n }\n\n const pane = resolvePane(opts.pane, ctx, slotId);\n\n const emission: PlotEmission = {\n kind: \"plot\",\n slotId,\n title: opts.title ?? \"\",\n style,\n bar: ctx.barIndex(),\n time: ctx.stream.bar.time,\n value: resolveValue(value),\n color: opts.color ?? null,\n meta: {},\n pane,\n };\n\n pushPlot(ctx.emissions, applyPlotOverride(emission, ctx.plotOverrides[slotId]));\n}\n\n/**\n * Emit a plot line for the current bar (script-facing overload).\n *\n * The runtime export is dual-signature: scripts call `plot(value, opts?)`\n * (the surface declared on `@invinite-org/chartlang-core`'s\n * `ComputeContext`), and Task 2's compiler transformer rewrites every\n * callsite to inject the compiler-issued slot id as the leading\n * argument — see the sibling `plot(slotId, value, opts?)` overload.\n * A direct invocation without a slot id (i.e. outside a compiled\n * bundle) throws the sentinel error.\n *\n * Plot kind is always `\"line\"` in Phase 1; `\"horizontal-line\"` ships\n * via the sibling {@link hline} primitive. Phase 2+ extends the `kind`\n * variants additively.\n *\n * @since 0.1\n * @example\n * import { defineIndicator, ta, plot } from \"@invinite-org/chartlang-core\";\n * export default defineIndicator({\n * name: \"EMA(20)\",\n * apiVersion: 1,\n * compute({ bar, ta, plot }) {\n * plot(ta.ema(bar.close, 20), { color: \"#26a69a\", title: \"EMA\" });\n * },\n * });\n */\nexport function plot(value: number | Series<number>, opts?: PlotOpts): void;\n/**\n * Emit a plot line for the current bar (compiler-injected overload).\n *\n * Task 2's callsite-id transformer rewrites every script-side\n * `plot(value, opts?)` into `plot(slotId, value, opts?)`. The runtime\n * branches on `typeof arg1 === \"string\"` so the compiler-emitted\n * bundle dispatches here directly.\n *\n * @since 0.1\n * @example\n * // Internal — the compiler rewrites every script callsite, e.g.\n * // `plot(close)` becomes `plot(\"demo.chart.ts:5:13#0\", close)`.\n * // const fn: typeof plot = plot;\n * // void fn;\n */\nexport function plot(slotId: string, value: number | Series<number>, opts?: PlotOpts): void;\n/**\n * Implementation signature for {@link plot}. Branches on\n * `typeof arg1 === \"string\"` to dispatch the script-facing vs\n * compiler-injected overload.\n *\n * @since 0.1\n * @example\n * // const fn: typeof plot = plot;\n * // void fn;\n */\nexport function plot(\n arg1: string | number | Series<number>,\n arg2?: number | Series<number> | PlotOpts,\n arg3?: PlotOpts,\n): void {\n if (typeof arg1 !== \"string\") {\n throw new Error(OUTSIDE_CTX_MESSAGE);\n }\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (!ctx) throw new Error(OUTSIDE_CTX_MESSAGE);\n if (!isNumberOrSeries(arg2)) {\n throw new Error(OUTSIDE_CTX_MESSAGE);\n }\n plotImpl(ctx, arg1, arg2, arg3 ?? {});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeError.js","sourceRoot":"","sources":["../../src/emit/runtimeError.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,MAAM,sBAAsB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAO5D;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC3C,OAAO,CACH,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,UAAU,IAAI,GAAG;QAChB,GAAuC,CAAC,QAAQ,KAAK,sBAAsB;QAC5E,SAAS,IAAI,GAAG;QAChB,OAAQ,GAAsC,CAAC,OAAO,KAAK,QAAQ,CACtE,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"runtimeError.js","sourceRoot":"","sources":["../../src/emit/runtimeError.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,MAAM,sBAAsB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAO5D;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC3C,OAAO,CACH,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,UAAU,IAAI,GAAG;QAChB,GAAuC,CAAC,QAAQ,KAAK,sBAAsB;QAC5E,SAAS,IAAI,GAAG;QAChB,OAAQ,GAAsC,CAAC,OAAO,KAAK,QAAQ,CACtE,CAAC;AACN,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nconst RUNTIME_ERROR_SENTINEL = Symbol(\"runtime-error-halt\");\n\ntype RuntimeErrorHalt = Readonly<{\n sentinel: typeof RUNTIME_ERROR_SENTINEL;\n message: string;\n}>;\n\n/**\n * Create the private sentinel thrown by `runtime.error(...)`.\n *\n * @since 0.5\n * @stable\n * @example\n * const halt = makeRuntimeErrorHalt(\"invariant\");\n * void halt;\n */\nexport function makeRuntimeErrorHalt(message: string): RuntimeErrorHalt {\n return Object.freeze({ sentinel: RUNTIME_ERROR_SENTINEL, message });\n}\n\n/**\n * Identify the private `runtime.error(...)` halt sentinel.\n *\n * @since 0.5\n * @stable\n * @example\n * const hit = isRuntimeErrorHalt(makeRuntimeErrorHalt(\"x\"));\n * void hit;\n */\nexport function isRuntimeErrorHalt(err: unknown): err is RuntimeErrorHalt {\n return (\n typeof err === \"object\" &&\n err !== null &&\n \"sentinel\" in err &&\n (err as { readonly sentinel?: unknown }).sentinel === RUNTIME_ERROR_SENTINEL &&\n \"message\" in err &&\n typeof (err as { readonly message?: unknown }).message === \"string\"\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"dispose.d.ts","sourceRoot":"","sources":["../../src/execution/dispose.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAgChD"}
1
+ {"version":3,"file":"dispose.d.ts","sourceRoot":"","sources":["../../src/execution/dispose.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAuChD"}
@@ -22,6 +22,13 @@ import { flushStateSlots } from "../state/index.js";
22
22
  * // dispose(state);
23
23
  */
24
24
  export function dispose(state) {
25
+ for (const dep of state.depRunners) {
26
+ dispose(dep.state);
27
+ }
28
+ for (const sibling of state.siblingRunners) {
29
+ dispose(sibling.state);
30
+ }
31
+ state.depOutputStore?.dispose();
25
32
  flushStateSlots(state.runtimeContext);
26
33
  for (const buf of Object.values(state.mainStream.ohlcv)) {
27
34
  buf.reset();
@@ -1 +1 @@
1
- {"version":3,"file":"dispose.js","sourceRoot":"","sources":["../../src/execution/dispose.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAG/D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,OAAO,CAAC,KAAkB;IACtC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;QAClE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,GAAG,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACjC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;IAC3B,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;IAC9B,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC;IAC5B,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;IACjC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC1C,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAClD,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACxC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAC9C,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;IACjD,KAAK,CAAC,cAAc,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;IACvD,KAAK,CAAC,cAAc,CAAC,4BAA4B,CAAC,KAAK,EAAE,CAAC;IAC1D,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;IACjD,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAClD,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,qBAAqB,CAAC;IAC5D,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACpB,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"dispose.js","sourceRoot":"","sources":["../../src/execution/dispose.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAG/D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,OAAO,CAAC,KAAkB;IACtC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;IAChC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;QAClE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,GAAG,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACjC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;IAC3B,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;IAC9B,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC;IAC5B,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;IACjC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC1C,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAClD,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACxC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAC9C,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;IACjD,KAAK,CAAC,cAAc,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;IACvD,KAAK,CAAC,cAAc,CAAC,4BAA4B,CAAC,KAAK,EAAE,CAAC;IAC1D,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;IACjD,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAClD,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,qBAAqB,CAAC;IAC5D,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACpB,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;AACvB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { RunnerState } from \"../createScriptRunner.js\";\nimport { flushStateSlots } from \"../state/index.js\";\n\n/**\n * Tear down the runner's buffers and state. After `dispose`:\n *\n * - Every OHLCV ring buffer's `length` is 0 (via `RingBufferLike.reset`).\n * - The `taSlots` map is empty (Task 7 primitives lose their hidden\n * state).\n * - Runtime `state.*` slots are flushed into `StateStore`, then the\n * runner-local slot map is cleared. The backing `StateStore` remains\n * host-owned so warm restart can restore the snapshot.\n * - The four emission arrays are reset to empty (`drain()` after\n * `dispose` returns empty arrays).\n *\n * `state.barIndex` is NOT reset — `dispose` is one-shot. Re-use after\n * `dispose` is not supported and not tested.\n *\n * @since 0.1\n * @example\n * // import { dispose } from \"@invinite-org/chartlang-runtime\";\n * // dispose(state);\n */\nexport function dispose(state: RunnerState): void {\n for (const dep of state.depRunners) {\n dispose(dep.state);\n }\n for (const sibling of state.siblingRunners) {\n dispose(sibling.state);\n }\n state.depOutputStore?.dispose();\n flushStateSlots(state.runtimeContext);\n for (const buf of Object.values(state.mainStream.ohlcv)) {\n buf.reset();\n }\n for (const stream of state.runtimeContext.secondaryStreams.values()) {\n for (const buf of Object.values(stream.ohlcv)) {\n buf.reset();\n }\n stream.taSlots.clear();\n }\n state.mainStream.taSlots.clear();\n state.emissions.plots = [];\n state.emissions.drawings = [];\n state.emissions.alerts = [];\n state.emissions.diagnostics = [];\n state.runtimeContext.drawingSlots.clear();\n state.runtimeContext.drawingSubIdCounters.clear();\n state.runtimeContext.stateSlots.clear();\n state.runtimeContext.secondaryStreams.clear();\n state.runtimeContext.requestSecurityBars.clear();\n state.runtimeContext.requestSecurityAlignments.clear();\n state.runtimeContext.requestSecurityAscendingBars.clear();\n state.runtimeContext.requestLowerTfViews.clear();\n state.runtimeContext.diagnosedRequestKeys.clear();\n state.runtimeContext.diagnosedInputKeys.clear();\n const counters = state.runtimeContext.drawingBucketCounters;\n counters.lines = 0;\n counters.labels = 0;\n counters.boxes = 0;\n counters.polylines = 0;\n counters.other = 0;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"drain.js","sourceRoot":"","sources":["../../src/execution/drain.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAM/D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,KAAK,CAAC,KAAkB;IACpC,MAAM,GAAG,GAAoB,MAAM,CAAC,MAAM,CAAC;QACvC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK;QAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ;QAClC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM;QAC9B,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE;QACtD,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;QAC1B,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW;QACxC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO;QAChC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK;KAC/B,CAAC,CAAC;IACH,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;IAC3B,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;IAC9B,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC;IAC5B,KAAK,CAAC,SAAS,CAAC,eAAe,GAAG,EAAE,CAAC;IACrC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC;IAC1B,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;IACjC,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"drain.js","sourceRoot":"","sources":["../../src/execution/drain.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAM/D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,KAAK,CAAC,KAAkB;IACpC,MAAM,GAAG,GAAoB,MAAM,CAAC,MAAM,CAAC;QACvC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK;QAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ;QAClC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM;QAC9B,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE;QACtD,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;QAC1B,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW;QACxC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO;QAChC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK;KAC/B,CAAC,CAAC;IACH,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;IAC3B,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;IAC9B,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC;IAC5B,KAAK,CAAC,SAAS,CAAC,eAAe,GAAG,EAAE,CAAC;IACrC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC;IAC1B,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;IACjC,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { RunnerEmissions } from \"@invinite-org/chartlang-adapter-kit\";\n\nimport type { RunnerState } from \"../createScriptRunner.js\";\n\n/**\n * Snapshot and reset. Returns the runner's currently-accumulated\n * emissions as a frozen `RunnerEmissions` object, then clears the\n * runner's queues by reassigning each array to a fresh empty array —\n * the adapter holds the snapshot's arrays, the runner gets fresh\n * containers for the next step.\n *\n * A second `drain` immediately after the first returns empty arrays\n * but the same `fromBar` / `toBar` (those are not reset until the next\n * step). The §6.7 invariant 4 (\"queues cleared at start of every step\")\n * is enforced by `onBarClose` / `onBarTick`, not by `drain`.\n *\n * @since 0.1\n * @example\n * // import { drain } from \"@invinite-org/chartlang-runtime\";\n * // const emissions = drain(state);\n * // void emissions.plots;\n */\nexport function drain(state: RunnerState): RunnerEmissions {\n const out: RunnerEmissions = Object.freeze({\n plots: state.emissions.plots,\n drawings: state.emissions.drawings,\n alerts: state.emissions.alerts,\n alertConditions: state.emissions.alertConditions ?? [],\n logs: state.emissions.logs,\n diagnostics: state.emissions.diagnostics,\n fromBar: state.emissions.fromBar,\n toBar: state.emissions.toBar,\n });\n state.emissions.plots = [];\n state.emissions.drawings = [];\n state.emissions.alerts = [];\n state.emissions.alertConditions = [];\n state.emissions.logs = [];\n state.emissions.diagnostics = [];\n return out;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nexport { drain } from \"./drain.js\";\nexport { dispose } from \"./dispose.js\";\nexport { onBarClose } from \"./onBarClose.js\";\nexport { onBarTick } from \"./onBarTick.js\";\nexport { onHistory } from \"./onHistory.js\";\n"]}
@@ -1,22 +1,18 @@
1
1
  import type { Bar } from "@invinite-org/chartlang-core";
2
2
  import type { RunnerState } from "../createScriptRunner.js";
3
- import { type EventKind } from "../views/index.js";
3
+ import type { EventKind } from "../views/index.js";
4
4
  /**
5
5
  * §6.7 main step. Appends every OHLCV ring buffer, mutates the runner's
6
- * shared `BarView` in place, clears the per-bar emission queues, and
7
- * runs the script's `compute` under `ACTIVE_RUNTIME_CONTEXT`. The four
8
- * §6.7 invariants hold at the end of step 3 (right before `compute`).
6
+ * shared `BarView` in place, walks the bundle's dep + sibling sub-runners
7
+ * (no-op for single-script callers), then runs the primary's `compute`.
8
+ * If any dep halted this bar, the primary's plot / drawing / alert / log
9
+ * queues are dropped (diagnostics stay).
9
10
  *
10
- * The derived sources (`hl2` / `hlc3` / `ohlc4` / `hlcc4`) come from
11
- * `rawBar` directly cheaper than `ohlcv.X.at(0)` and sidesteps
12
- * `noNonNullAssertion`. The buffer and the `BarView` carry identical
13
- * values either way.
11
+ * The four §6.7 invariants hold at the end of the primary's compute.
12
+ * `barIndex` advances exactly once per close. Errors thrown by `compute`
13
+ * propagate out of `onBarClose`; the host (Task 9) owns containment.
14
14
  *
15
- * `barIndex` advances exactly once per close. Errors thrown by
16
- * `compute` propagate out of `onBarClose`; the host (Task 9) owns
17
- * containment.
18
- *
19
- * @since 0.1
15
+ * @since 0.1 extended to walk dep + sibling sub-runners in 0.7.
20
16
  * @example
21
17
  * // import { onBarClose } from "@invinite-org/chartlang-runtime";
22
18
  * // await onBarClose(state, rawBar);
@@ -1 +1 @@
1
- {"version":3,"file":"onBarClose.d.ts","sourceRoot":"","sources":["../../src/execution/onBarClose.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAM5D,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,mBAAmB,CAAC;AAExE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,UAAU,CAC5B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,GAAG,EACX,SAAS,GAAE,SAAmB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
1
+ {"version":3,"file":"onBarClose.d.ts","sourceRoot":"","sources":["../../src/execution/onBarClose.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAWnD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAC5B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,GAAG,EACX,SAAS,GAAE,SAAmB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -1,28 +1,27 @@
1
1
  // Copyright (c) 2026 Invinite. Licensed under the MIT License.
2
2
  // See the LICENSE file in the repo root for full license text.
3
- import { buildComputeContext } from "../buildComputeContext.js";
4
- import { isRuntimeErrorHalt, pushDiagnostic } from "../emit/index.js";
5
- import { resetSubIdCounters } from "../emit/draw/index.js";
6
- import { ACTIVE_RUNTIME_CONTEXT } from "../runtimeContext.js";
7
- import { commitStateSlots, flushStateSlots } from "../state/index.js";
3
+ import { runDepStep, runSiblingStep } from "../dep/index.js";
8
4
  import { appendBarToStream, updateFallbackViewport } from "../streamState.js";
9
- import { refreshRuntimeViews } from "../views/index.js";
5
+ import { resetBarEmissions, runComputeBody } from "./runComputeStep.js";
6
+ function clearVisualEmissions(state) {
7
+ state.emissions.plots = [];
8
+ state.emissions.drawings = [];
9
+ state.emissions.alerts = [];
10
+ state.emissions.alertConditions = [];
11
+ state.emissions.logs = [];
12
+ }
10
13
  /**
11
14
  * §6.7 main step. Appends every OHLCV ring buffer, mutates the runner's
12
- * shared `BarView` in place, clears the per-bar emission queues, and
13
- * runs the script's `compute` under `ACTIVE_RUNTIME_CONTEXT`. The four
14
- * §6.7 invariants hold at the end of step 3 (right before `compute`).
15
- *
16
- * The derived sources (`hl2` / `hlc3` / `ohlc4` / `hlcc4`) come from
17
- * `rawBar` directly — cheaper than `ohlcv.X.at(0)` and sidesteps
18
- * `noNonNullAssertion`. The buffer and the `BarView` carry identical
19
- * values either way.
15
+ * shared `BarView` in place, walks the bundle's dep + sibling sub-runners
16
+ * (no-op for single-script callers), then runs the primary's `compute`.
17
+ * If any dep halted this bar, the primary's plot / drawing / alert / log
18
+ * queues are dropped (diagnostics stay).
20
19
  *
21
- * `barIndex` advances exactly once per close. Errors thrown by
22
- * `compute` propagate out of `onBarClose`; the host (Task 9) owns
23
- * containment.
20
+ * The four §6.7 invariants hold at the end of the primary's compute.
21
+ * `barIndex` advances exactly once per close. Errors thrown by `compute`
22
+ * propagate out of `onBarClose`; the host (Task 9) owns containment.
24
23
  *
25
- * @since 0.1
24
+ * @since 0.1 — extended to walk dep + sibling sub-runners in 0.7.
26
25
  * @example
27
26
  * // import { onBarClose } from "@invinite-org/chartlang-runtime";
28
27
  * // await onBarClose(state, rawBar);
@@ -30,48 +29,18 @@ import { refreshRuntimeViews } from "../views/index.js";
30
29
  export async function onBarClose(state, rawBar, eventKind = "close") {
31
30
  appendBarToStream(state.mainStream, rawBar);
32
31
  updateFallbackViewport(state.mainStream);
33
- state.emissions.plots = [];
34
- state.emissions.drawings = [];
35
- state.emissions.alerts = [];
36
- state.emissions.alertConditions = [];
37
- state.emissions.logs = [];
38
- state.emissions.diagnostics = [];
39
- state.emissions.fromBar = state.barIndex;
40
- state.emissions.toBar = state.barIndex;
41
- state.runtimeContext.requestSecurityAlignments.clear();
42
- state.runtimeContext.requestSecurityAscendingBars.clear();
43
- state.runtimeContext.logBudget = 0;
44
- state.runtimeContext.logBudgetExceededDiagnosed = false;
45
- ACTIVE_RUNTIME_CONTEXT.current = state.runtimeContext;
46
- state.runtimeContext.isTick = false;
47
- try {
48
- resetSubIdCounters(state.runtimeContext);
49
- refreshRuntimeViews(state, eventKind);
50
- try {
51
- await Promise.resolve(state.compute(buildComputeContext(state)));
52
- commitStateSlots(state.runtimeContext);
53
- flushStateSlots(state.runtimeContext);
54
- }
55
- catch (err) {
56
- if (!isRuntimeErrorHalt(err))
57
- throw err;
58
- state.emissions.plots = [];
59
- state.emissions.drawings = [];
60
- state.emissions.alerts = [];
61
- state.emissions.alertConditions = [];
62
- state.emissions.logs = [];
63
- pushDiagnostic(state.emissions, {
64
- kind: "diagnostic",
65
- severity: "error",
66
- code: "runtime-error-thrown",
67
- message: err.message,
68
- slotId: null,
69
- bar: state.barIndex,
70
- });
71
- }
32
+ state.depErroredThisBar = false;
33
+ resetBarEmissions(state);
34
+ state.depOutputStore?.beginBar();
35
+ for (const dep of state.depRunners) {
36
+ await runDepStep(dep, state, rawBar, eventKind, false);
37
+ }
38
+ for (const sibling of state.siblingRunners) {
39
+ await runSiblingStep(sibling, state, rawBar, eventKind, false);
72
40
  }
73
- finally {
74
- ACTIVE_RUNTIME_CONTEXT.current = null;
41
+ await runComputeBody({ state, eventKind, isTick: false });
42
+ if (state.depErroredThisBar) {
43
+ clearVisualEmissions(state);
75
44
  }
76
45
  state.barIndex += 1;
77
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"onBarClose.js","sourceRoot":"","sources":["../../src/execution/onBarClose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onBarClose.js","sourceRoot":"","sources":["../../src/execution/onBarClose.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAK/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAExE,SAAS,oBAAoB,CAAC,KAAkB;IAC5C,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;IAC3B,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;IAC9B,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC;IAC5B,KAAK,CAAC,SAAS,CAAC,eAAe,GAAG,EAAE,CAAC;IACrC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC5B,KAAkB,EAClB,MAAW,EACX,YAAuB,OAAO;IAE9B,iBAAiB,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5C,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEzC,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC;IAChC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzB,KAAK,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC;IAEjC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAE1D,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;AACxB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { Bar } from \"@invinite-org/chartlang-core\";\n\nimport type { RunnerState } from \"../createScriptRunner.js\";\nimport { runDepStep, runSiblingStep } from \"../dep/index.js\";\nimport { appendBarToStream, updateFallbackViewport } from \"../streamState.js\";\nimport type { EventKind } from \"../views/index.js\";\nimport { resetBarEmissions, runComputeBody } from \"./runComputeStep.js\";\n\nfunction clearVisualEmissions(state: RunnerState): void {\n state.emissions.plots = [];\n state.emissions.drawings = [];\n state.emissions.alerts = [];\n state.emissions.alertConditions = [];\n state.emissions.logs = [];\n}\n\n/**\n * §6.7 main step. Appends every OHLCV ring buffer, mutates the runner's\n * shared `BarView` in place, walks the bundle's dep + sibling sub-runners\n * (no-op for single-script callers), then runs the primary's `compute`.\n * If any dep halted this bar, the primary's plot / drawing / alert / log\n * queues are dropped (diagnostics stay).\n *\n * The four §6.7 invariants hold at the end of the primary's compute.\n * `barIndex` advances exactly once per close. Errors thrown by `compute`\n * propagate out of `onBarClose`; the host (Task 9) owns containment.\n *\n * @since 0.1 — extended to walk dep + sibling sub-runners in 0.7.\n * @example\n * // import { onBarClose } from \"@invinite-org/chartlang-runtime\";\n * // await onBarClose(state, rawBar);\n */\nexport async function onBarClose(\n state: RunnerState,\n rawBar: Bar,\n eventKind: EventKind = \"close\",\n): Promise<void> {\n appendBarToStream(state.mainStream, rawBar);\n updateFallbackViewport(state.mainStream);\n\n state.depErroredThisBar = false;\n resetBarEmissions(state);\n state.depOutputStore?.beginBar();\n\n for (const dep of state.depRunners) {\n await runDepStep(dep, state, rawBar, eventKind, false);\n }\n for (const sibling of state.siblingRunners) {\n await runSiblingStep(sibling, state, rawBar, eventKind, false);\n }\n\n await runComputeBody({ state, eventKind, isTick: false });\n\n if (state.depErroredThisBar) {\n clearVisualEmissions(state);\n }\n\n state.barIndex += 1;\n}\n"]}
@@ -2,20 +2,14 @@ import type { Bar } from "@invinite-org/chartlang-core";
2
2
  import type { RunnerState } from "../createScriptRunner.js";
3
3
  /**
4
4
  * §6.7 tick path. Replaces the head slot on every close-side OHLCV
5
- * buffer (close / high / low / volume / derived sources) — does NOT
6
- * advance the buffer length. `time` and `open` are NOT replaced: ticks
7
- * happen within the in-progress bar whose open time was set on the
8
- * preceding `onBarClose`.
9
- *
10
- * The runtime exposes `state.runtimeContext.isTick = true` for the
11
- * duration of `compute`. Task 7 stateful primitives read this flag to
12
- * switch between `append` and `replaceHead` slot updates. `isTick` is
13
- * reset to `false` in the finally block regardless of compute outcome.
5
+ * buffer does NOT advance the buffer length. `time` and `open` are
6
+ * NOT replaced. Walks the bundle's dep + sibling sub-runners (no-op for
7
+ * single-script callers) before driving the primary's `compute`.
14
8
  *
15
9
  * `state.barIndex` is NOT incremented — consecutive ticks share the
16
10
  * in-progress bar's index.
17
11
  *
18
- * @since 0.1
12
+ * @since 0.1 — extended to walk dep + sibling sub-runners in 0.7.
19
13
  * @example
20
14
  * // import { onBarTick } from "@invinite-org/chartlang-runtime";
21
15
  * // await onBarTick(state, tickBar);
@@ -1 +1 @@
1
- {"version":3,"file":"onBarTick.d.ts","sourceRoot":"","sources":["../../src/execution/onBarTick.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAQ5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C9E"}
1
+ {"version":3,"file":"onBarTick.d.ts","sourceRoot":"","sources":["../../src/execution/onBarTick.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAa5D;;;;;;;;;;;;;GAaG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB9E"}
@@ -1,28 +1,25 @@
1
1
  // Copyright (c) 2026 Invinite. Licensed under the MIT License.
2
2
  // See the LICENSE file in the repo root for full license text.
3
- import { buildComputeContext } from "../buildComputeContext.js";
4
- import { isRuntimeErrorHalt, pushDiagnostic } from "../emit/index.js";
5
- import { resetSubIdCounters } from "../emit/draw/index.js";
6
- import { ACTIVE_RUNTIME_CONTEXT } from "../runtimeContext.js";
7
- import { resetTentativeStateSlots } from "../state/index.js";
3
+ import { runDepStep, runSiblingStep } from "../dep/index.js";
8
4
  import { replaceTickHead, updateFallbackViewport } from "../streamState.js";
9
- import { refreshRuntimeViews } from "../views/index.js";
5
+ import { resetBarEmissions, runComputeBody } from "./runComputeStep.js";
6
+ function clearVisualEmissions(state) {
7
+ state.emissions.plots = [];
8
+ state.emissions.drawings = [];
9
+ state.emissions.alerts = [];
10
+ state.emissions.alertConditions = [];
11
+ state.emissions.logs = [];
12
+ }
10
13
  /**
11
14
  * §6.7 tick path. Replaces the head slot on every close-side OHLCV
12
- * buffer (close / high / low / volume / derived sources) — does NOT
13
- * advance the buffer length. `time` and `open` are NOT replaced: ticks
14
- * happen within the in-progress bar whose open time was set on the
15
- * preceding `onBarClose`.
16
- *
17
- * The runtime exposes `state.runtimeContext.isTick = true` for the
18
- * duration of `compute`. Task 7 stateful primitives read this flag to
19
- * switch between `append` and `replaceHead` slot updates. `isTick` is
20
- * reset to `false` in the finally block regardless of compute outcome.
15
+ * buffer does NOT advance the buffer length. `time` and `open` are
16
+ * NOT replaced. Walks the bundle's dep + sibling sub-runners (no-op for
17
+ * single-script callers) before driving the primary's `compute`.
21
18
  *
22
19
  * `state.barIndex` is NOT incremented — consecutive ticks share the
23
20
  * in-progress bar's index.
24
21
  *
25
- * @since 0.1
22
+ * @since 0.1 — extended to walk dep + sibling sub-runners in 0.7.
26
23
  * @example
27
24
  * // import { onBarTick } from "@invinite-org/chartlang-runtime";
28
25
  * // await onBarTick(state, tickBar);
@@ -30,48 +27,18 @@ import { refreshRuntimeViews } from "../views/index.js";
30
27
  export async function onBarTick(state, rawBar) {
31
28
  replaceTickHead(state.mainStream, rawBar);
32
29
  updateFallbackViewport(state.mainStream);
33
- state.emissions.plots = [];
34
- state.emissions.drawings = [];
35
- state.emissions.alerts = [];
36
- state.emissions.alertConditions = [];
37
- state.emissions.logs = [];
38
- state.emissions.diagnostics = [];
39
- state.emissions.fromBar = state.barIndex;
40
- state.emissions.toBar = state.barIndex;
41
- state.runtimeContext.requestSecurityAlignments.clear();
42
- state.runtimeContext.requestSecurityAscendingBars.clear();
43
- state.runtimeContext.logBudget = 0;
44
- state.runtimeContext.logBudgetExceededDiagnosed = false;
45
- ACTIVE_RUNTIME_CONTEXT.current = state.runtimeContext;
46
- state.runtimeContext.isTick = true;
47
- try {
48
- resetSubIdCounters(state.runtimeContext);
49
- resetTentativeStateSlots(state.runtimeContext);
50
- refreshRuntimeViews(state, "tick");
51
- try {
52
- await Promise.resolve(state.compute(buildComputeContext(state)));
53
- }
54
- catch (err) {
55
- if (!isRuntimeErrorHalt(err))
56
- throw err;
57
- state.emissions.plots = [];
58
- state.emissions.drawings = [];
59
- state.emissions.alerts = [];
60
- state.emissions.alertConditions = [];
61
- state.emissions.logs = [];
62
- pushDiagnostic(state.emissions, {
63
- kind: "diagnostic",
64
- severity: "error",
65
- code: "runtime-error-thrown",
66
- message: err.message,
67
- slotId: null,
68
- bar: state.barIndex,
69
- });
70
- }
30
+ state.depErroredThisBar = false;
31
+ resetBarEmissions(state);
32
+ state.depOutputStore?.beginBar();
33
+ for (const dep of state.depRunners) {
34
+ await runDepStep(dep, state, rawBar, "tick", true);
35
+ }
36
+ for (const sibling of state.siblingRunners) {
37
+ await runSiblingStep(sibling, state, rawBar, "tick", true);
71
38
  }
72
- finally {
73
- state.runtimeContext.isTick = false;
74
- ACTIVE_RUNTIME_CONTEXT.current = null;
39
+ await runComputeBody({ state, eventKind: "tick", isTick: true });
40
+ if (state.depErroredThisBar) {
41
+ clearVisualEmissions(state);
75
42
  }
76
43
  }
77
44
  //# sourceMappingURL=onBarTick.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"onBarTick.js","sourceRoot":"","sources":["../../src/execution/onBarTick.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onBarTick.js","sourceRoot":"","sources":["../../src/execution/onBarTick.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAK/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAExE,SAAS,oBAAoB,CAAC,KAAkB;IAC5C,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;IAC3B,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;IAC9B,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC;IAC5B,KAAK,CAAC,SAAS,CAAC,eAAe,GAAG,EAAE,CAAC;IACrC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAkB,EAAE,MAAW;IAC3D,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1C,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEzC,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC;IAChC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzB,KAAK,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC;IAEjC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACL,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { Bar } from \"@invinite-org/chartlang-core\";\n\nimport type { RunnerState } from \"../createScriptRunner.js\";\nimport { runDepStep, runSiblingStep } from \"../dep/index.js\";\nimport { replaceTickHead, updateFallbackViewport } from \"../streamState.js\";\nimport { resetBarEmissions, runComputeBody } from \"./runComputeStep.js\";\n\nfunction clearVisualEmissions(state: RunnerState): void {\n state.emissions.plots = [];\n state.emissions.drawings = [];\n state.emissions.alerts = [];\n state.emissions.alertConditions = [];\n state.emissions.logs = [];\n}\n\n/**\n * §6.7 tick path. Replaces the head slot on every close-side OHLCV\n * buffer — does NOT advance the buffer length. `time` and `open` are\n * NOT replaced. Walks the bundle's dep + sibling sub-runners (no-op for\n * single-script callers) before driving the primary's `compute`.\n *\n * `state.barIndex` is NOT incremented — consecutive ticks share the\n * in-progress bar's index.\n *\n * @since 0.1 — extended to walk dep + sibling sub-runners in 0.7.\n * @example\n * // import { onBarTick } from \"@invinite-org/chartlang-runtime\";\n * // await onBarTick(state, tickBar);\n */\nexport async function onBarTick(state: RunnerState, rawBar: Bar): Promise<void> {\n replaceTickHead(state.mainStream, rawBar);\n updateFallbackViewport(state.mainStream);\n\n state.depErroredThisBar = false;\n resetBarEmissions(state);\n state.depOutputStore?.beginBar();\n\n for (const dep of state.depRunners) {\n await runDepStep(dep, state, rawBar, \"tick\", true);\n }\n for (const sibling of state.siblingRunners) {\n await runSiblingStep(sibling, state, rawBar, \"tick\", true);\n }\n\n await runComputeBody({ state, eventKind: \"tick\", isTick: true });\n\n if (state.depErroredThisBar) {\n clearVisualEmissions(state);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"onHistory.js","sourceRoot":"","sources":["../../src/execution/onHistory.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAK/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAkB,EAAE,IAAwB;IACxE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;IACtC,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC;IAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;IAClC,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC;IACD,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;IAC9B,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACpC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;IAChC,KAAK,CAAC,SAAS,CAAC,eAAe,GAAG,eAAe,CAAC;IAClD,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IAC1C,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;IAClC,qEAAqE;AACzE,CAAC"}
1
+ {"version":3,"file":"onHistory.js","sourceRoot":"","sources":["../../src/execution/onHistory.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAK/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAkB,EAAE,IAAwB;IACxE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;IACtC,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC;IAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;IAClC,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC;IACD,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;IAC9B,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACpC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;IAChC,KAAK,CAAC,SAAS,CAAC,eAAe,GAAG,eAAe,CAAC;IAClD,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IAC1C,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;IAClC,qEAAqE;AACzE,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { Bar } from \"@invinite-org/chartlang-core\";\n\nimport type { RunnerState } from \"../createScriptRunner.js\";\nimport { onBarClose } from \"./onBarClose.js\";\n\n/**\n * Bulk-fill warmup. Walks `bars` forward and runs `onBarClose` per\n * entry, preserving the §6.4 determinism contract (every bar passes\n * through `compute` in source order). A Phase-2 optimisation could\n * pre-fill ring buffers without re-running compute, but stay correct\n * first.\n *\n * Emissions accumulate across the bulk walk: PLAN §6.1 promises\n * `drain()` returns every emission \"since the last drain\", but\n * `onBarClose` resets the per-bar queues at the top of each bar. Without\n * the accumulator below, a host that pushes a `{ kind: \"history\", bars }`\n * event and drains once afterwards (as `canvas2d-adapter` does) would\n * only see the final bar's emissions. We seed the accumulators from\n * the pre-history queues so an undrained prior emission isn't silently\n * dropped, then write the merged arrays back at the end. `fromBar`\n * reverts to the first bar of the walk; `toBar` is left as the final\n * `onBarClose` set it (the last bar's index).\n *\n * Errors thrown by `compute` propagate immediately — subsequent bars\n * do not run. The host (Task 9) owns containment + reporting.\n *\n * @since 0.1\n * @example\n * // import { onHistory } from \"@invinite-org/chartlang-runtime\";\n * // await onHistory(state, historicalBars);\n * // const out = drain(state); // every bar's emissions, not just the last.\n */\nexport async function onHistory(state: RunnerState, bars: ReadonlyArray<Bar>): Promise<void> {\n if (bars.length === 0) return;\n const fromBar = state.barIndex;\n const plots = state.emissions.plots;\n const drawings = state.emissions.drawings;\n const alerts = state.emissions.alerts;\n const alertConditions = state.emissions.alertConditions ?? [];\n const logs = state.emissions.logs;\n const diagnostics = state.emissions.diagnostics;\n for (const bar of bars) {\n await onBarClose(state, bar, \"history\");\n plots.push(...state.emissions.plots);\n drawings.push(...state.emissions.drawings);\n alerts.push(...state.emissions.alerts);\n alertConditions.push(...(state.emissions.alertConditions ?? []));\n logs.push(...state.emissions.logs);\n diagnostics.push(...state.emissions.diagnostics);\n }\n state.emissions.plots = plots;\n state.emissions.drawings = drawings;\n state.emissions.alerts = alerts;\n state.emissions.alertConditions = alertConditions;\n state.emissions.logs = logs;\n state.emissions.diagnostics = diagnostics;\n state.emissions.fromBar = fromBar;\n // `toBar` was set to the last bar's index by the final `onBarClose`.\n}\n"]}