@invinite-org/chartlang-runtime 1.1.0 → 1.2.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 (616) hide show
  1. package/CHANGELOG.md +245 -0
  2. package/README.md +1 -2
  3. package/dist/barPoint.d.ts +20 -0
  4. package/dist/barPoint.d.ts.map +1 -0
  5. package/dist/barPoint.js +72 -0
  6. package/dist/barPoint.js.map +1 -0
  7. package/dist/bufferSnapshot.d.ts +102 -0
  8. package/dist/bufferSnapshot.d.ts.map +1 -0
  9. package/dist/bufferSnapshot.js +119 -0
  10. package/dist/bufferSnapshot.js.map +1 -0
  11. package/dist/buildComputeContext.js.map +1 -1
  12. package/dist/createScriptRunner.d.ts +6 -3
  13. package/dist/createScriptRunner.d.ts.map +1 -1
  14. package/dist/createScriptRunner.js +29 -5
  15. package/dist/createScriptRunner.js.map +1 -1
  16. package/dist/dep/DepOutputStore.js.map +1 -1
  17. package/dist/dep/DepRunner.d.ts.map +1 -1
  18. package/dist/dep/DepRunner.js +1 -0
  19. package/dist/dep/DepRunner.js.map +1 -1
  20. package/dist/dep/depOutput.js.map +1 -1
  21. package/dist/dep/emissionFilter.js.map +1 -1
  22. package/dist/dep/index.js.map +1 -1
  23. package/dist/emit/alert.js.map +1 -1
  24. package/dist/emit/alertConditionEmission.js.map +1 -1
  25. package/dist/emit/applyPlotOverride.js.map +1 -1
  26. package/dist/emit/draw/annotations/arrow.js +1 -1
  27. package/dist/emit/draw/annotations/arrow.js.map +1 -1
  28. package/dist/emit/draw/annotations/arrowMarkDown.js +1 -1
  29. package/dist/emit/draw/annotations/arrowMarkDown.js.map +1 -1
  30. package/dist/emit/draw/annotations/arrowMarkUp.js +1 -1
  31. package/dist/emit/draw/annotations/arrowMarkUp.js.map +1 -1
  32. package/dist/emit/draw/annotations/arrowMarker.js +1 -1
  33. package/dist/emit/draw/annotations/arrowMarker.js.map +1 -1
  34. package/dist/emit/draw/annotations/text.js +1 -1
  35. package/dist/emit/draw/annotations/text.js.map +1 -1
  36. package/dist/emit/draw/boxes/circle.js +1 -1
  37. package/dist/emit/draw/boxes/circle.js.map +1 -1
  38. package/dist/emit/draw/boxes/ellipse.d.ts +1 -1
  39. package/dist/emit/draw/boxes/ellipse.js +1 -1
  40. package/dist/emit/draw/boxes/ellipse.js.map +1 -1
  41. package/dist/emit/draw/boxes/fillBetween.d.ts +45 -0
  42. package/dist/emit/draw/boxes/fillBetween.d.ts.map +1 -0
  43. package/dist/emit/draw/boxes/fillBetween.js +36 -0
  44. package/dist/emit/draw/boxes/fillBetween.js.map +1 -0
  45. package/dist/emit/draw/boxes/marker.js +1 -1
  46. package/dist/emit/draw/boxes/marker.js.map +1 -1
  47. package/dist/emit/draw/boxes/path.d.ts +1 -1
  48. package/dist/emit/draw/boxes/path.js +1 -1
  49. package/dist/emit/draw/boxes/path.js.map +1 -1
  50. package/dist/emit/draw/boxes/polyline.d.ts +1 -1
  51. package/dist/emit/draw/boxes/polyline.js +1 -1
  52. package/dist/emit/draw/boxes/polyline.js.map +1 -1
  53. package/dist/emit/draw/boxes/rectangle.js +1 -1
  54. package/dist/emit/draw/boxes/rectangle.js.map +1 -1
  55. package/dist/emit/draw/boxes/rotatedRectangle.js +1 -1
  56. package/dist/emit/draw/boxes/rotatedRectangle.js.map +1 -1
  57. package/dist/emit/draw/boxes/triangle.d.ts +1 -1
  58. package/dist/emit/draw/boxes/triangle.js +1 -1
  59. package/dist/emit/draw/boxes/triangle.js.map +1 -1
  60. package/dist/emit/draw/channels/disjointChannel.js +1 -1
  61. package/dist/emit/draw/channels/disjointChannel.js.map +1 -1
  62. package/dist/emit/draw/channels/flatTopBottom.d.ts +1 -2
  63. package/dist/emit/draw/channels/flatTopBottom.d.ts.map +1 -1
  64. package/dist/emit/draw/channels/flatTopBottom.js +1 -1
  65. package/dist/emit/draw/channels/flatTopBottom.js.map +1 -1
  66. package/dist/emit/draw/channels/regressionTrend.d.ts +3 -4
  67. package/dist/emit/draw/channels/regressionTrend.d.ts.map +1 -1
  68. package/dist/emit/draw/channels/regressionTrend.js +1 -1
  69. package/dist/emit/draw/channels/regressionTrend.js.map +1 -1
  70. package/dist/emit/draw/channels/trendChannel.js +1 -1
  71. package/dist/emit/draw/channels/trendChannel.js.map +1 -1
  72. package/dist/emit/draw/containers/frame.d.ts +1 -1
  73. package/dist/emit/draw/containers/frame.js +2 -2
  74. package/dist/emit/draw/containers/frame.js.map +1 -1
  75. package/dist/emit/draw/containers/group.d.ts +1 -2
  76. package/dist/emit/draw/containers/group.d.ts.map +1 -1
  77. package/dist/emit/draw/containers/group.js +2 -2
  78. package/dist/emit/draw/containers/group.js.map +1 -1
  79. package/dist/emit/draw/curves/arc.js +1 -1
  80. package/dist/emit/draw/curves/arc.js.map +1 -1
  81. package/dist/emit/draw/curves/brush.js +1 -1
  82. package/dist/emit/draw/curves/brush.js.map +1 -1
  83. package/dist/emit/draw/curves/curve.js +1 -1
  84. package/dist/emit/draw/curves/curve.js.map +1 -1
  85. package/dist/emit/draw/curves/doubleCurve.js +1 -1
  86. package/dist/emit/draw/curves/doubleCurve.js.map +1 -1
  87. package/dist/emit/draw/curves/highlighter.js +1 -1
  88. package/dist/emit/draw/curves/highlighter.js.map +1 -1
  89. package/dist/emit/draw/curves/pen.js +1 -1
  90. package/dist/emit/draw/curves/pen.js.map +1 -1
  91. package/dist/emit/draw/cycles/cyclicLines.js +1 -1
  92. package/dist/emit/draw/cycles/cyclicLines.js.map +1 -1
  93. package/dist/emit/draw/cycles/sineLine.js +1 -1
  94. package/dist/emit/draw/cycles/sineLine.js.map +1 -1
  95. package/dist/emit/draw/cycles/timeCycles.js +1 -1
  96. package/dist/emit/draw/cycles/timeCycles.js.map +1 -1
  97. package/dist/emit/draw/elliott/elliottCorrectionWave.js +1 -1
  98. package/dist/emit/draw/elliott/elliottCorrectionWave.js.map +1 -1
  99. package/dist/emit/draw/elliott/elliottDoubleCombo.js +1 -1
  100. package/dist/emit/draw/elliott/elliottDoubleCombo.js.map +1 -1
  101. package/dist/emit/draw/elliott/elliottImpulseWave.js +1 -1
  102. package/dist/emit/draw/elliott/elliottImpulseWave.js.map +1 -1
  103. package/dist/emit/draw/elliott/elliottTriangleWave.js +1 -1
  104. package/dist/emit/draw/elliott/elliottTriangleWave.js.map +1 -1
  105. package/dist/emit/draw/elliott/elliottTripleCombo.js +1 -1
  106. package/dist/emit/draw/elliott/elliottTripleCombo.js.map +1 -1
  107. package/dist/emit/draw/fibA/fibChannel.js +1 -1
  108. package/dist/emit/draw/fibA/fibChannel.js.map +1 -1
  109. package/dist/emit/draw/fibA/fibRetracement.js +1 -1
  110. package/dist/emit/draw/fibA/fibRetracement.js.map +1 -1
  111. package/dist/emit/draw/fibA/fibTimeZone.d.ts +1 -2
  112. package/dist/emit/draw/fibA/fibTimeZone.d.ts.map +1 -1
  113. package/dist/emit/draw/fibA/fibTimeZone.js +1 -1
  114. package/dist/emit/draw/fibA/fibTimeZone.js.map +1 -1
  115. package/dist/emit/draw/fibA/fibTrendExtension.js +1 -1
  116. package/dist/emit/draw/fibA/fibTrendExtension.js.map +1 -1
  117. package/dist/emit/draw/fibA/fibWedge.js +1 -1
  118. package/dist/emit/draw/fibA/fibWedge.js.map +1 -1
  119. package/dist/emit/draw/fibB/fibCircles.d.ts +1 -2
  120. package/dist/emit/draw/fibB/fibCircles.d.ts.map +1 -1
  121. package/dist/emit/draw/fibB/fibCircles.js +1 -1
  122. package/dist/emit/draw/fibB/fibCircles.js.map +1 -1
  123. package/dist/emit/draw/fibB/fibSpeedArcs.js +1 -1
  124. package/dist/emit/draw/fibB/fibSpeedArcs.js.map +1 -1
  125. package/dist/emit/draw/fibB/fibSpeedFan.js +1 -1
  126. package/dist/emit/draw/fibB/fibSpeedFan.js.map +1 -1
  127. package/dist/emit/draw/fibB/fibSpiral.d.ts +1 -2
  128. package/dist/emit/draw/fibB/fibSpiral.d.ts.map +1 -1
  129. package/dist/emit/draw/fibB/fibSpiral.js +1 -1
  130. package/dist/emit/draw/fibB/fibSpiral.js.map +1 -1
  131. package/dist/emit/draw/fibB/fibTrendTime.d.ts +1 -2
  132. package/dist/emit/draw/fibB/fibTrendTime.d.ts.map +1 -1
  133. package/dist/emit/draw/fibB/fibTrendTime.js +1 -1
  134. package/dist/emit/draw/fibB/fibTrendTime.js.map +1 -1
  135. package/dist/emit/draw/gann/gannBox.js +1 -1
  136. package/dist/emit/draw/gann/gannBox.js.map +1 -1
  137. package/dist/emit/draw/gann/gannFan.js +1 -1
  138. package/dist/emit/draw/gann/gannFan.js.map +1 -1
  139. package/dist/emit/draw/gann/gannSquare.js +1 -1
  140. package/dist/emit/draw/gann/gannSquare.js.map +1 -1
  141. package/dist/emit/draw/gann/gannSquareFixed.js +1 -1
  142. package/dist/emit/draw/gann/gannSquareFixed.js.map +1 -1
  143. package/dist/emit/draw/handle.d.ts +11 -2
  144. package/dist/emit/draw/handle.d.ts.map +1 -1
  145. package/dist/emit/draw/handle.js +67 -12
  146. package/dist/emit/draw/handle.js.map +1 -1
  147. package/dist/emit/draw/index.js.map +1 -1
  148. package/dist/emit/draw/lines/crossLine.js +1 -1
  149. package/dist/emit/draw/lines/crossLine.js.map +1 -1
  150. package/dist/emit/draw/lines/horizontalLine.d.ts +1 -1
  151. package/dist/emit/draw/lines/horizontalLine.js +1 -1
  152. package/dist/emit/draw/lines/horizontalLine.js.map +1 -1
  153. package/dist/emit/draw/lines/horizontalRay.js +1 -1
  154. package/dist/emit/draw/lines/horizontalRay.js.map +1 -1
  155. package/dist/emit/draw/lines/line.d.ts +1 -1
  156. package/dist/emit/draw/lines/line.d.ts.map +1 -1
  157. package/dist/emit/draw/lines/line.js +2 -3
  158. package/dist/emit/draw/lines/line.js.map +1 -1
  159. package/dist/emit/draw/lines/trendAngle.js +1 -1
  160. package/dist/emit/draw/lines/trendAngle.js.map +1 -1
  161. package/dist/emit/draw/lines/verticalLine.js +1 -1
  162. package/dist/emit/draw/lines/verticalLine.js.map +1 -1
  163. package/dist/emit/draw/namespace.d.ts +5 -4
  164. package/dist/emit/draw/namespace.d.ts.map +1 -1
  165. package/dist/emit/draw/namespace.js +7 -4
  166. package/dist/emit/draw/namespace.js.map +1 -1
  167. package/dist/emit/draw/patterns/abcdPattern.js +1 -1
  168. package/dist/emit/draw/patterns/abcdPattern.js.map +1 -1
  169. package/dist/emit/draw/patterns/cypherPattern.d.ts +1 -2
  170. package/dist/emit/draw/patterns/cypherPattern.d.ts.map +1 -1
  171. package/dist/emit/draw/patterns/cypherPattern.js +1 -1
  172. package/dist/emit/draw/patterns/cypherPattern.js.map +1 -1
  173. package/dist/emit/draw/patterns/headAndShoulders.js +1 -1
  174. package/dist/emit/draw/patterns/headAndShoulders.js.map +1 -1
  175. package/dist/emit/draw/patterns/threeDrivesPattern.js +1 -1
  176. package/dist/emit/draw/patterns/threeDrivesPattern.js.map +1 -1
  177. package/dist/emit/draw/patterns/trianglePattern.d.ts +1 -1
  178. package/dist/emit/draw/patterns/trianglePattern.js +1 -1
  179. package/dist/emit/draw/patterns/trianglePattern.js.map +1 -1
  180. package/dist/emit/draw/patterns/xabcdPattern.js +1 -1
  181. package/dist/emit/draw/patterns/xabcdPattern.js.map +1 -1
  182. package/dist/emit/draw/pitchforks/pitchfan.js +1 -1
  183. package/dist/emit/draw/pitchforks/pitchfan.js.map +1 -1
  184. package/dist/emit/draw/pitchforks/pitchfork.d.ts +1 -1
  185. package/dist/emit/draw/pitchforks/pitchfork.js +2 -2
  186. package/dist/emit/draw/pitchforks/pitchfork.js.map +1 -1
  187. package/dist/emit/draw/pushDrawing.js.map +1 -1
  188. package/dist/emit/draw/subIdAllocator.d.ts +1 -1
  189. package/dist/emit/draw/subIdAllocator.js +1 -1
  190. package/dist/emit/draw/subIdAllocator.js.map +1 -1
  191. package/dist/emit/draw/table/table.d.ts +1 -1
  192. package/dist/emit/draw/table/table.js.map +1 -1
  193. package/dist/emit/emissionsQueue.js.map +1 -1
  194. package/dist/emit/hash.js.map +1 -1
  195. package/dist/emit/hline.js.map +1 -1
  196. package/dist/emit/index.js.map +1 -1
  197. package/dist/emit/logEmission.js.map +1 -1
  198. package/dist/emit/paneResolver.js.map +1 -1
  199. package/dist/emit/plot.d.ts +7 -0
  200. package/dist/emit/plot.d.ts.map +1 -1
  201. package/dist/emit/plot.js +13 -0
  202. package/dist/emit/plot.js.map +1 -1
  203. package/dist/emit/runtimeError.js.map +1 -1
  204. package/dist/execution/dispose.d.ts.map +1 -1
  205. package/dist/execution/dispose.js +16 -0
  206. package/dist/execution/dispose.js.map +1 -1
  207. package/dist/execution/drain.js.map +1 -1
  208. package/dist/execution/index.js.map +1 -1
  209. package/dist/execution/onBarClose.js.map +1 -1
  210. package/dist/execution/onBarTick.js.map +1 -1
  211. package/dist/execution/onHistory.js.map +1 -1
  212. package/dist/execution/runComputeStep.d.ts.map +1 -1
  213. package/dist/execution/runComputeStep.js +10 -1
  214. package/dist/execution/runComputeStep.js.map +1 -1
  215. package/dist/execution/secondaryStream.js.map +1 -1
  216. package/dist/index.d.ts +1 -1
  217. package/dist/index.d.ts.map +1 -1
  218. package/dist/index.js +1 -1
  219. package/dist/index.js.map +1 -1
  220. package/dist/inputs/index.js.map +1 -1
  221. package/dist/inputs/resolveInputs.js.map +1 -1
  222. package/dist/internal.js.map +1 -1
  223. package/dist/persistentStateStore.js.map +1 -1
  224. package/dist/persistentStateStore.runtime.d.ts.map +1 -1
  225. package/dist/persistentStateStore.runtime.js +21 -7
  226. package/dist/persistentStateStore.runtime.js.map +1 -1
  227. package/dist/persistentStateStore.validate.js.map +1 -1
  228. package/dist/primitives.js.map +1 -1
  229. package/dist/request/alignHtfSeriesCache.js.map +1 -1
  230. package/dist/request/alignHtfSeriesToLtf.d.ts +2 -2
  231. package/dist/request/alignHtfSeriesToLtf.js +2 -2
  232. package/dist/request/alignHtfSeriesToLtf.js.map +1 -1
  233. package/dist/request/bucketLtfBarsByMainContainment.js.map +1 -1
  234. package/dist/request/bucketLtfBarsCache.js.map +1 -1
  235. package/dist/request/index.d.ts +2 -1
  236. package/dist/request/index.d.ts.map +1 -1
  237. package/dist/request/index.js +2 -1
  238. package/dist/request/index.js.map +1 -1
  239. package/dist/request/lowerTf.js.map +1 -1
  240. package/dist/request/pushOnce.js.map +1 -1
  241. package/dist/request/requestNamespace.d.ts.map +1 -1
  242. package/dist/request/requestNamespace.js +16 -3
  243. package/dist/request/requestNamespace.js.map +1 -1
  244. package/dist/request/security.d.ts +20 -1
  245. package/dist/request/security.d.ts.map +1 -1
  246. package/dist/request/security.js +62 -23
  247. package/dist/request/security.js.map +1 -1
  248. package/dist/request/securityExprRunner.d.ts +133 -0
  249. package/dist/request/securityExprRunner.d.ts.map +1 -0
  250. package/dist/request/securityExprRunner.js +235 -0
  251. package/dist/request/securityExprRunner.js.map +1 -0
  252. package/dist/request/streamBars.d.ts +14 -1
  253. package/dist/request/streamBars.d.ts.map +1 -1
  254. package/dist/request/streamBars.js +39 -1
  255. package/dist/request/streamBars.js.map +1 -1
  256. package/dist/ringBuffer.d.ts +2 -2
  257. package/dist/ringBuffer.js +1 -1
  258. package/dist/ringBuffer.js.map +1 -1
  259. package/dist/runtimeContext.d.ts +51 -3
  260. package/dist/runtimeContext.d.ts.map +1 -1
  261. package/dist/runtimeContext.js.map +1 -1
  262. package/dist/seriesView.d.ts +43 -18
  263. package/dist/seriesView.d.ts.map +1 -1
  264. package/dist/seriesView.js +66 -43
  265. package/dist/seriesView.js.map +1 -1
  266. package/dist/state/index.d.ts +2 -1
  267. package/dist/state/index.d.ts.map +1 -1
  268. package/dist/state/index.js +2 -1
  269. package/dist/state/index.js.map +1 -1
  270. package/dist/state/lifecycle.d.ts +40 -0
  271. package/dist/state/lifecycle.d.ts.map +1 -1
  272. package/dist/state/lifecycle.js +53 -0
  273. package/dist/state/lifecycle.js.map +1 -1
  274. package/dist/state/seriesPersistence.d.ts +48 -0
  275. package/dist/state/seriesPersistence.d.ts.map +1 -0
  276. package/dist/state/seriesPersistence.js +87 -0
  277. package/dist/state/seriesPersistence.js.map +1 -0
  278. package/dist/state/seriesSlot.d.ts +105 -0
  279. package/dist/state/seriesSlot.d.ts.map +1 -0
  280. package/dist/state/seriesSlot.js +123 -0
  281. package/dist/state/seriesSlot.js.map +1 -0
  282. package/dist/state/stateNamespace.d.ts.map +1 -1
  283. package/dist/state/stateNamespace.js +28 -0
  284. package/dist/state/stateNamespace.js.map +1 -1
  285. package/dist/state/stateSlot.js.map +1 -1
  286. package/dist/stateStore.d.ts +2 -2
  287. package/dist/stateStore.js.map +1 -1
  288. package/dist/streamState.d.ts +26 -20
  289. package/dist/streamState.d.ts.map +1 -1
  290. package/dist/streamState.js +41 -67
  291. package/dist/streamState.js.map +1 -1
  292. package/dist/ta/adl.js +2 -2
  293. package/dist/ta/adl.js.map +1 -1
  294. package/dist/ta/adr.d.ts +3 -3
  295. package/dist/ta/adr.js +5 -5
  296. package/dist/ta/adr.js.map +1 -1
  297. package/dist/ta/adx.d.ts +3 -2
  298. package/dist/ta/adx.d.ts.map +1 -1
  299. package/dist/ta/adx.js +5 -4
  300. package/dist/ta/adx.js.map +1 -1
  301. package/dist/ta/alma.d.ts +6 -4
  302. package/dist/ta/alma.d.ts.map +1 -1
  303. package/dist/ta/alma.js +21 -8
  304. package/dist/ta/alma.js.map +1 -1
  305. package/dist/ta/anchoredVolumeProfile.js.map +1 -1
  306. package/dist/ta/anchoredVwap.d.ts +1 -1
  307. package/dist/ta/anchoredVwap.js +3 -3
  308. package/dist/ta/anchoredVwap.js.map +1 -1
  309. package/dist/ta/ao.js +2 -2
  310. package/dist/ta/ao.js.map +1 -1
  311. package/dist/ta/aroon.js +2 -2
  312. package/dist/ta/aroon.js.map +1 -1
  313. package/dist/ta/aroonOsc.js +2 -2
  314. package/dist/ta/aroonOsc.js.map +1 -1
  315. package/dist/ta/atr.d.ts +3 -2
  316. package/dist/ta/atr.d.ts.map +1 -1
  317. package/dist/ta/atr.js +5 -4
  318. package/dist/ta/atr.js.map +1 -1
  319. package/dist/ta/barssince.js +1 -1
  320. package/dist/ta/barssince.js.map +1 -1
  321. package/dist/ta/bb.d.ts +3 -2
  322. package/dist/ta/bb.d.ts.map +1 -1
  323. package/dist/ta/bb.js +5 -4
  324. package/dist/ta/bb.js.map +1 -1
  325. package/dist/ta/bbPercentB.js +2 -2
  326. package/dist/ta/bbPercentB.js.map +1 -1
  327. package/dist/ta/bbw.js +2 -2
  328. package/dist/ta/bbw.js.map +1 -1
  329. package/dist/ta/bop.js +2 -2
  330. package/dist/ta/bop.js.map +1 -1
  331. package/dist/ta/cci.js +2 -2
  332. package/dist/ta/cci.js.map +1 -1
  333. package/dist/ta/chaikinOsc.d.ts +3 -2
  334. package/dist/ta/chaikinOsc.d.ts.map +1 -1
  335. package/dist/ta/chaikinOsc.js +5 -4
  336. package/dist/ta/chaikinOsc.js.map +1 -1
  337. package/dist/ta/chandeKrollStop.d.ts +1 -1
  338. package/dist/ta/chandeKrollStop.js +3 -3
  339. package/dist/ta/chandeKrollStop.js.map +1 -1
  340. package/dist/ta/chandelier.d.ts +1 -1
  341. package/dist/ta/chandelier.js +3 -3
  342. package/dist/ta/chandelier.js.map +1 -1
  343. package/dist/ta/change.js +1 -1
  344. package/dist/ta/change.js.map +1 -1
  345. package/dist/ta/chop.js +2 -2
  346. package/dist/ta/chop.js.map +1 -1
  347. package/dist/ta/cmf.js +2 -2
  348. package/dist/ta/cmf.js.map +1 -1
  349. package/dist/ta/cmo.js +2 -2
  350. package/dist/ta/cmo.js.map +1 -1
  351. package/dist/ta/connorsRsi.d.ts +1 -1
  352. package/dist/ta/connorsRsi.js +3 -3
  353. package/dist/ta/connorsRsi.js.map +1 -1
  354. package/dist/ta/coppock.js +2 -2
  355. package/dist/ta/coppock.js.map +1 -1
  356. package/dist/ta/crossover.d.ts +3 -2
  357. package/dist/ta/crossover.d.ts.map +1 -1
  358. package/dist/ta/crossover.js +4 -3
  359. package/dist/ta/crossover.js.map +1 -1
  360. package/dist/ta/crossunder.d.ts +3 -2
  361. package/dist/ta/crossunder.d.ts.map +1 -1
  362. package/dist/ta/crossunder.js +4 -3
  363. package/dist/ta/crossunder.js.map +1 -1
  364. package/dist/ta/dema.js +2 -2
  365. package/dist/ta/dema.js.map +1 -1
  366. package/dist/ta/dmi.d.ts +4 -3
  367. package/dist/ta/dmi.d.ts.map +1 -1
  368. package/dist/ta/dmi.js +6 -5
  369. package/dist/ta/dmi.js.map +1 -1
  370. package/dist/ta/donchian.js +2 -2
  371. package/dist/ta/donchian.js.map +1 -1
  372. package/dist/ta/dpo.js +2 -2
  373. package/dist/ta/dpo.js.map +1 -1
  374. package/dist/ta/ema.d.ts +3 -2
  375. package/dist/ta/ema.d.ts.map +1 -1
  376. package/dist/ta/ema.js +5 -4
  377. package/dist/ta/ema.js.map +1 -1
  378. package/dist/ta/envelope.js +2 -2
  379. package/dist/ta/envelope.js.map +1 -1
  380. package/dist/ta/eom.d.ts +3 -1
  381. package/dist/ta/eom.d.ts.map +1 -1
  382. package/dist/ta/eom.js +5 -3
  383. package/dist/ta/eom.js.map +1 -1
  384. package/dist/ta/fisher.js +2 -2
  385. package/dist/ta/fisher.js.map +1 -1
  386. package/dist/ta/fixedRangeVolumeProfile.js.map +1 -1
  387. package/dist/ta/highest.js +1 -1
  388. package/dist/ta/highest.js.map +1 -1
  389. package/dist/ta/highestbars.d.ts +25 -0
  390. package/dist/ta/highestbars.d.ts.map +1 -0
  391. package/dist/ta/highestbars.js +106 -0
  392. package/dist/ta/highestbars.js.map +1 -0
  393. package/dist/ta/historicalVolatility.d.ts +3 -2
  394. package/dist/ta/historicalVolatility.d.ts.map +1 -1
  395. package/dist/ta/historicalVolatility.js +5 -4
  396. package/dist/ta/historicalVolatility.js.map +1 -1
  397. package/dist/ta/hma.js +2 -2
  398. package/dist/ta/hma.js.map +1 -1
  399. package/dist/ta/ichimoku.d.ts +3 -1
  400. package/dist/ta/ichimoku.d.ts.map +1 -1
  401. package/dist/ta/ichimoku.js +5 -3
  402. package/dist/ta/ichimoku.js.map +1 -1
  403. package/dist/ta/index.js.map +1 -1
  404. package/dist/ta/kama.js +2 -2
  405. package/dist/ta/kama.js.map +1 -1
  406. package/dist/ta/keltner.js +2 -2
  407. package/dist/ta/keltner.js.map +1 -1
  408. package/dist/ta/klinger.js +2 -2
  409. package/dist/ta/klinger.js.map +1 -1
  410. package/dist/ta/kst.js +2 -2
  411. package/dist/ta/kst.js.map +1 -1
  412. package/dist/ta/lib/adxFromDi.js +2 -2
  413. package/dist/ta/lib/adxFromDi.js.map +1 -1
  414. package/dist/ta/lib/computeMa.js +2 -2
  415. package/dist/ta/lib/computeMa.js.map +1 -1
  416. package/dist/ta/lib/computeMaOfFloat64.js +2 -2
  417. package/dist/ta/lib/computeMaOfFloat64.js.map +1 -1
  418. package/dist/ta/lib/directionalState.js +2 -2
  419. package/dist/ta/lib/directionalState.js.map +1 -1
  420. package/dist/ta/lib/donchianMid.js +2 -2
  421. package/dist/ta/lib/donchianMid.js.map +1 -1
  422. package/dist/ta/lib/emaFloat64.js +2 -2
  423. package/dist/ta/lib/emaFloat64.js.map +1 -1
  424. package/dist/ta/lib/linearRegression.js +2 -2
  425. package/dist/ta/lib/linearRegression.js.map +1 -1
  426. package/dist/ta/lib/maTypes.js.map +1 -1
  427. package/dist/ta/lib/pearson.js +2 -2
  428. package/dist/ta/lib/pearson.js.map +1 -1
  429. package/dist/ta/lib/pickCandleSource.js +2 -2
  430. package/dist/ta/lib/pickCandleSource.js.map +1 -1
  431. package/dist/ta/lib/readSourceField.js +2 -2
  432. package/dist/ta/lib/readSourceField.js.map +1 -1
  433. package/dist/ta/lib/rollingStddev.js +2 -2
  434. package/dist/ta/lib/rollingStddev.js.map +1 -1
  435. package/dist/ta/lib/smaFloat64.js +2 -2
  436. package/dist/ta/lib/smaFloat64.js.map +1 -1
  437. package/dist/ta/lib/smmaFloat64.js +2 -2
  438. package/dist/ta/lib/smmaFloat64.js.map +1 -1
  439. package/dist/ta/lib/sourceValue.js.map +1 -1
  440. package/dist/ta/lib/trSeries.js +2 -2
  441. package/dist/ta/lib/trSeries.js.map +1 -1
  442. package/dist/ta/lib/volume-profile/bucketEdges.js.map +1 -1
  443. package/dist/ta/lib/volume-profile/bucketizeVolume.js.map +1 -1
  444. package/dist/ta/lib/volume-profile/developingSeries.js.map +1 -1
  445. package/dist/ta/lib/volume-profile/index.js.map +1 -1
  446. package/dist/ta/lib/volume-profile/intercept.js.map +1 -1
  447. package/dist/ta/lib/volume-profile/scaffold.js.map +1 -1
  448. package/dist/ta/lib/volume-profile/tooHeavy.js.map +1 -1
  449. package/dist/ta/lib/volume-profile/types.js.map +1 -1
  450. package/dist/ta/lib/volume-profile/valueArea.js.map +1 -1
  451. package/dist/ta/lib/volume-profile/volumeProfileShared.js.map +1 -1
  452. package/dist/ta/lib/vwmaFloat64.js +2 -2
  453. package/dist/ta/lib/vwmaFloat64.js.map +1 -1
  454. package/dist/ta/lib/wilderDirectional.js +2 -2
  455. package/dist/ta/lib/wilderDirectional.js.map +1 -1
  456. package/dist/ta/lib/wilderSmoothing.js +2 -2
  457. package/dist/ta/lib/wilderSmoothing.js.map +1 -1
  458. package/dist/ta/lib/wmaFloat64.js +2 -2
  459. package/dist/ta/lib/wmaFloat64.js.map +1 -1
  460. package/dist/ta/lowest.js +1 -1
  461. package/dist/ta/lowest.js.map +1 -1
  462. package/dist/ta/lowestbars.d.ts +25 -0
  463. package/dist/ta/lowestbars.d.ts.map +1 -0
  464. package/dist/ta/lowestbars.js +102 -0
  465. package/dist/ta/lowestbars.js.map +1 -0
  466. package/dist/ta/lsma.js +2 -2
  467. package/dist/ta/lsma.js.map +1 -1
  468. package/dist/ta/maRibbon.js +2 -2
  469. package/dist/ta/maRibbon.js.map +1 -1
  470. package/dist/ta/macd.d.ts +3 -2
  471. package/dist/ta/macd.d.ts.map +1 -1
  472. package/dist/ta/macd.js +6 -5
  473. package/dist/ta/macd.js.map +1 -1
  474. package/dist/ta/massIndex.d.ts +3 -2
  475. package/dist/ta/massIndex.d.ts.map +1 -1
  476. package/dist/ta/massIndex.js +5 -4
  477. package/dist/ta/massIndex.js.map +1 -1
  478. package/dist/ta/mcginley.js +2 -2
  479. package/dist/ta/mcginley.js.map +1 -1
  480. package/dist/ta/median.js +2 -2
  481. package/dist/ta/median.js.map +1 -1
  482. package/dist/ta/mfi.d.ts +3 -1
  483. package/dist/ta/mfi.d.ts.map +1 -1
  484. package/dist/ta/mfi.js +5 -3
  485. package/dist/ta/mfi.js.map +1 -1
  486. package/dist/ta/momentum.js +2 -2
  487. package/dist/ta/momentum.js.map +1 -1
  488. package/dist/ta/netVolume.d.ts +3 -1
  489. package/dist/ta/netVolume.d.ts.map +1 -1
  490. package/dist/ta/netVolume.js +5 -3
  491. package/dist/ta/netVolume.js.map +1 -1
  492. package/dist/ta/nvi.d.ts +3 -1
  493. package/dist/ta/nvi.d.ts.map +1 -1
  494. package/dist/ta/nvi.js +5 -3
  495. package/dist/ta/nvi.js.map +1 -1
  496. package/dist/ta/nz.js +1 -1
  497. package/dist/ta/nz.js.map +1 -1
  498. package/dist/ta/obv.js +2 -2
  499. package/dist/ta/obv.js.map +1 -1
  500. package/dist/ta/persistence.d.ts.map +1 -1
  501. package/dist/ta/persistence.js +1 -40
  502. package/dist/ta/persistence.js.map +1 -1
  503. package/dist/ta/pivotsHighLow.js +2 -2
  504. package/dist/ta/pivotsHighLow.js.map +1 -1
  505. package/dist/ta/pivotsStandard.d.ts +1 -1
  506. package/dist/ta/pivotsStandard.js +3 -3
  507. package/dist/ta/pivotsStandard.js.map +1 -1
  508. package/dist/ta/pmo.js +2 -2
  509. package/dist/ta/pmo.js.map +1 -1
  510. package/dist/ta/ppo.d.ts +3 -2
  511. package/dist/ta/ppo.d.ts.map +1 -1
  512. package/dist/ta/ppo.js +5 -4
  513. package/dist/ta/ppo.js.map +1 -1
  514. package/dist/ta/psar.js +2 -2
  515. package/dist/ta/psar.js.map +1 -1
  516. package/dist/ta/pvi.d.ts +3 -1
  517. package/dist/ta/pvi.d.ts.map +1 -1
  518. package/dist/ta/pvi.js +5 -3
  519. package/dist/ta/pvi.js.map +1 -1
  520. package/dist/ta/pvo.d.ts +3 -1
  521. package/dist/ta/pvo.d.ts.map +1 -1
  522. package/dist/ta/pvo.js +5 -3
  523. package/dist/ta/pvo.js.map +1 -1
  524. package/dist/ta/pvt.d.ts +3 -1
  525. package/dist/ta/pvt.d.ts.map +1 -1
  526. package/dist/ta/pvt.js +5 -3
  527. package/dist/ta/pvt.js.map +1 -1
  528. package/dist/ta/registry.d.ts +7 -1
  529. package/dist/ta/registry.d.ts.map +1 -1
  530. package/dist/ta/registry.js +4 -0
  531. package/dist/ta/registry.js.map +1 -1
  532. package/dist/ta/roc.js +2 -2
  533. package/dist/ta/roc.js.map +1 -1
  534. package/dist/ta/rsi.d.ts +3 -2
  535. package/dist/ta/rsi.d.ts.map +1 -1
  536. package/dist/ta/rsi.js +5 -4
  537. package/dist/ta/rsi.js.map +1 -1
  538. package/dist/ta/rvgi.js +2 -2
  539. package/dist/ta/rvgi.js.map +1 -1
  540. package/dist/ta/rvi.d.ts +3 -2
  541. package/dist/ta/rvi.d.ts.map +1 -1
  542. package/dist/ta/rvi.js +5 -4
  543. package/dist/ta/rvi.js.map +1 -1
  544. package/dist/ta/sessionVolumeProfile.js.map +1 -1
  545. package/dist/ta/sma.d.ts +6 -3
  546. package/dist/ta/sma.d.ts.map +1 -1
  547. package/dist/ta/sma.js +8 -5
  548. package/dist/ta/sma.js.map +1 -1
  549. package/dist/ta/smi.js +2 -2
  550. package/dist/ta/smi.js.map +1 -1
  551. package/dist/ta/smma.js +2 -2
  552. package/dist/ta/smma.js.map +1 -1
  553. package/dist/ta/stdev.d.ts +3 -2
  554. package/dist/ta/stdev.d.ts.map +1 -1
  555. package/dist/ta/stdev.js +5 -4
  556. package/dist/ta/stdev.js.map +1 -1
  557. package/dist/ta/stoch.js +2 -2
  558. package/dist/ta/stoch.js.map +1 -1
  559. package/dist/ta/stochRsi.js +2 -2
  560. package/dist/ta/stochRsi.js.map +1 -1
  561. package/dist/ta/supertrend.d.ts +1 -1
  562. package/dist/ta/supertrend.js +3 -3
  563. package/dist/ta/supertrend.js.map +1 -1
  564. package/dist/ta/tema.js +2 -2
  565. package/dist/ta/tema.js.map +1 -1
  566. package/dist/ta/trendStrengthIndex.d.ts +4 -3
  567. package/dist/ta/trendStrengthIndex.d.ts.map +1 -1
  568. package/dist/ta/trendStrengthIndex.js +6 -5
  569. package/dist/ta/trendStrengthIndex.js.map +1 -1
  570. package/dist/ta/trix.d.ts +4 -3
  571. package/dist/ta/trix.d.ts.map +1 -1
  572. package/dist/ta/trix.js +6 -5
  573. package/dist/ta/trix.js.map +1 -1
  574. package/dist/ta/tsi.js +2 -2
  575. package/dist/ta/tsi.js.map +1 -1
  576. package/dist/ta/ulcerIndex.js +2 -2
  577. package/dist/ta/ulcerIndex.js.map +1 -1
  578. package/dist/ta/ultimateOsc.js +2 -2
  579. package/dist/ta/ultimateOsc.js.map +1 -1
  580. package/dist/ta/valuewhen.js +1 -1
  581. package/dist/ta/valuewhen.js.map +1 -1
  582. package/dist/ta/visibleRangeVolumeProfile.d.ts +2 -2
  583. package/dist/ta/visibleRangeVolumeProfile.js +2 -2
  584. package/dist/ta/visibleRangeVolumeProfile.js.map +1 -1
  585. package/dist/ta/vol.js +2 -2
  586. package/dist/ta/vol.js.map +1 -1
  587. package/dist/ta/volatilityStop.d.ts +1 -1
  588. package/dist/ta/volatilityStop.js +3 -3
  589. package/dist/ta/volatilityStop.js.map +1 -1
  590. package/dist/ta/vortex.d.ts +3 -2
  591. package/dist/ta/vortex.d.ts.map +1 -1
  592. package/dist/ta/vortex.js +5 -4
  593. package/dist/ta/vortex.js.map +1 -1
  594. package/dist/ta/vwap.d.ts +3 -3
  595. package/dist/ta/vwap.js +5 -5
  596. package/dist/ta/vwap.js.map +1 -1
  597. package/dist/ta/vwma.js +2 -2
  598. package/dist/ta/vwma.js.map +1 -1
  599. package/dist/ta/williamsFractal.js +2 -2
  600. package/dist/ta/williamsFractal.js.map +1 -1
  601. package/dist/ta/williamsR.js +2 -2
  602. package/dist/ta/williamsR.js.map +1 -1
  603. package/dist/ta/wma.js +2 -2
  604. package/dist/ta/wma.js.map +1 -1
  605. package/dist/ta/zigZag.js +2 -2
  606. package/dist/ta/zigZag.js.map +1 -1
  607. package/dist/views/barstateView.js.map +1 -1
  608. package/dist/views/index.js.map +1 -1
  609. package/dist/views/refreshRuntimeViews.js.map +1 -1
  610. package/dist/views/symInfoView.js.map +1 -1
  611. package/dist/views/timeframeView.js.map +1 -1
  612. package/package.json +3 -3
  613. package/dist/ta/lib/applyOffset.d.ts +0 -19
  614. package/dist/ta/lib/applyOffset.d.ts.map +0 -1
  615. package/dist/ta/lib/applyOffset.js +0 -38
  616. package/dist/ta/lib/applyOffset.js.map +0 -1
@@ -2,6 +2,8 @@ import type { AlertConditionEmission, AlertEmission, Capabilities, DrawingEmissi
2
2
  import type { AlertConditionDefinition, Bar, DrawingBucket, DrawingCounts, DrawingKind, DrawingState, SecurityBar, Series } from "@invinite-org/chartlang-core";
3
3
  import type { DepOutputStore } from "./dep/DepOutputStore.js";
4
4
  import type { PersistentStateStore } from "./persistentStateStore.js";
5
+ import type { SecurityExprRunner } from "./request/securityExprRunner.js";
6
+ import type { SeriesSlot } from "./state/seriesSlot.js";
5
7
  import type { StateSlot } from "./state/stateSlot.js";
6
8
  import type { StateStore } from "./stateStore.js";
7
9
  import type { StreamState } from "./streamState.js";
@@ -11,9 +13,18 @@ import type { RuntimeViews } from "./views/index.js";
11
13
  * `slotId#subId` (compiler-injected callsite id + per-bar sub-id from
12
14
  * {@link nextSubId}). `state` holds the last full {@link DrawingState}
13
15
  * emitted for the handle; subsequent `update(patch)` calls merge into
14
- * it and re-emit the full payload per PLAN.md §10.3. `removed: true`
16
+ * it and re-emit the full payload. `removed: true`
15
17
  * is sticky — further `update` / `remove` on the handle no-op.
16
18
  *
19
+ * `z` is the presentation-only render-order key `handle.ts`'s `splitZ`
20
+ * lifted out of the drawing's `state.style` (default `0`). It is stored
21
+ * **beside** `state` — never inside `state` / `state.style` — because
22
+ * the wire carries it as the top-level {@link DrawingEmission.z} field,
23
+ * not as part of {@link DrawingState}. It persists across bars; an
24
+ * `update` that does not re-specify a non-zero `z` retains it, a
25
+ * re-specified non-zero `z` overrides, and a cross-bar re-entry
26
+ * re-specifies it from the new call.
27
+ *
17
28
  * @since 0.3
18
29
  * @stable
19
30
  * @example
@@ -21,6 +32,7 @@ import type { RuntimeViews } from "./views/index.js";
21
32
  * // handleId: "x.chart.ts:1:1#0",
22
33
  * // kind: "line",
23
34
  * // state: { kind: "line", anchors: [...], style: {} },
35
+ * // z: 0,
24
36
  * // removed: false,
25
37
  * // };
26
38
  */
@@ -28,6 +40,7 @@ export type DrawingSlot = {
28
40
  readonly handleId: string;
29
41
  readonly kind: DrawingKind;
30
42
  state: DrawingState;
43
+ z: number;
31
44
  removed: boolean;
32
45
  };
33
46
  /**
@@ -100,8 +113,8 @@ export type RuntimeContext = {
100
113
  * Per-handle drawing slot store keyed by `slotId#subId`. Allocated
101
114
  * on first `op: "create"`; mutated by `update(patch)` to merge the
102
115
  * patch into the slot's `state`; flagged `removed: true` on
103
- * `remove()`. Cleared on `dispose`. Persists across bars per
104
- * PLAN.md §10.3. @since 0.3
116
+ * `remove()`. Cleared on `dispose`. Persists across bars.
117
+ * @since 0.3
105
118
  */
106
119
  readonly drawingSlots: Map<string, DrawingSlot>;
107
120
  /**
@@ -138,6 +151,15 @@ export type RuntimeContext = {
138
151
  * @since 0.4
139
152
  */
140
153
  readonly stateSlots: Map<string, StateSlot<unknown>>;
154
+ /**
155
+ * Runtime `state.series` slot store keyed by
156
+ * `${slotIdPrefix ?? ""}${slotId}:series`. Each holds a history ring +
157
+ * the identity-stable script-facing view + the last committed head.
158
+ * The ring advances once per close (script-invisible lockstep), so
159
+ * `s[1]` is always one committed bar back. Cleared on `dispose` after
160
+ * the final snapshot captures it. @since 0.9
161
+ */
162
+ readonly seriesSlots: Map<string, SeriesSlot>;
141
163
  /**
142
164
  * Secondary candle streams keyed by `IntervalDescriptor.value`.
143
165
  * Mutated only by `createScriptRunner` mount/restore/routing. @since 0.5
@@ -167,6 +189,32 @@ export type RuntimeContext = {
167
189
  * {@link requestSecurityAlignments}. @since 0.5
168
190
  */
169
191
  readonly requestSecurityAscendingBars: Map<StreamState, ReadonlyArray<Bar>>;
192
+ /**
193
+ * Mounted HTF expression runners keyed by `slotId`. One entry per
194
+ * `manifest.securityExpressions` callsite. `request.security(slotId,
195
+ * opts, expr)` dispatches the expression overload off this registry
196
+ * (rather than `expr !== undefined`) and captures the callback here.
197
+ * Absent on dep / sibling contexts and single-timeframe scripts.
198
+ * Cleared on `dispose`. @since 0.7
199
+ */
200
+ securityExprRunners?: Map<string, SecurityExprRunner>;
201
+ /**
202
+ * Per-interval index into {@link securityExprRunners}, keyed by
203
+ * `IntervalDescriptor.value`. `driveSecurityExpressions` fans a
204
+ * secondary close / tick out to every runner on that interval.
205
+ * Absent when no expression callsites are declared. Cleared on
206
+ * `dispose`. @since 0.7
207
+ */
208
+ securityExprRunnersByInterval?: ReadonlyMap<string, ReadonlyArray<SecurityExprRunner>>;
209
+ /**
210
+ * Per-compute aligned expression-output series cache keyed by
211
+ * `slotId|interval`. Holds the stable `Series<number>` Proxy each
212
+ * expression-form `request.security` returns; cleared each bar
213
+ * (alongside {@link requestSecurityAlignments}) so the proxy re-aligns
214
+ * the runner's output buffer against the latest secondary buffers.
215
+ * @since 0.7
216
+ */
217
+ requestSecurityExprSeries?: Map<string, Series<number>>;
170
218
  /**
171
219
  * Per-`request.lowerTf` slot cache keyed by `slotId|interval`. Values are
172
220
  * stable `Series<ReadonlyArray<Bar>>` proxies over the latest LTF bucket
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeContext.d.ts","sourceRoot":"","sources":["../src/runtimeContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtimeContext.d.ts","sourceRoot":"","sources":["../src/runtimeContext.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeContext.js","sourceRoot":"","sources":["../src/runtimeContext.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AA2S/D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAuC;IACtE,OAAO,EAAE,IAAI;CAChB,CAAC"}
1
+ {"version":3,"file":"runtimeContext.js","sourceRoot":"","sources":["../src/runtimeContext.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AA2V/D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAuC;IACtE,OAAO,EAAE,IAAI;CAChB,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 {\n AlertConditionEmission,\n AlertEmission,\n Capabilities,\n DrawingEmission,\n LogEmission,\n PlotEmission,\n PlotOverride,\n RuntimeDiagnostic,\n} from \"@invinite-org/chartlang-adapter-kit\";\nimport type {\n AlertConditionDefinition,\n Bar,\n DrawingBucket,\n DrawingCounts,\n DrawingKind,\n DrawingState,\n SecurityBar,\n Series,\n} from \"@invinite-org/chartlang-core\";\n\nimport type { DepOutputStore } from \"./dep/DepOutputStore.js\";\nimport type { PersistentStateStore } from \"./persistentStateStore.js\";\nimport type { SecurityExprRunner } from \"./request/securityExprRunner.js\";\nimport type { SeriesSlot } from \"./state/seriesSlot.js\";\nimport type { StateSlot } from \"./state/stateSlot.js\";\nimport type { StateStore } from \"./stateStore.js\";\nimport type { StreamState } from \"./streamState.js\";\nimport type { RuntimeViews } from \"./views/index.js\";\n\n/**\n * Per-handle drawing slot the runtime persists across bars. The key is\n * `slotId#subId` (compiler-injected callsite id + per-bar sub-id from\n * {@link nextSubId}). `state` holds the last full {@link DrawingState}\n * emitted for the handle; subsequent `update(patch)` calls merge into\n * it and re-emit the full payload. `removed: true`\n * is sticky — further `update` / `remove` on the handle no-op.\n *\n * `z` is the presentation-only render-order key `handle.ts`'s `splitZ`\n * lifted out of the drawing's `state.style` (default `0`). It is stored\n * **beside** `state` — never inside `state` / `state.style` — because\n * the wire carries it as the top-level {@link DrawingEmission.z} field,\n * not as part of {@link DrawingState}. It persists across bars; an\n * `update` that does not re-specify a non-zero `z` retains it, a\n * re-specified non-zero `z` overrides, and a cross-bar re-entry\n * re-specifies it from the new call.\n *\n * @since 0.3\n * @stable\n * @example\n * // const slot: DrawingSlot = {\n * // handleId: \"x.chart.ts:1:1#0\",\n * // kind: \"line\",\n * // state: { kind: \"line\", anchors: [...], style: {} },\n * // z: 0,\n * // removed: false,\n * // };\n */\nexport type DrawingSlot = {\n readonly handleId: string;\n readonly kind: DrawingKind;\n state: DrawingState;\n z: number;\n removed: boolean;\n};\n\n/**\n * Mutable counterpart of `RunnerEmissions` (from adapter-kit) that the\n * runtime accumulates into per bar. Task 6's execution loop pushes\n * here during `compute`; `drain()` snapshots into the readonly\n * `RunnerEmissions` shape the adapter receives.\n *\n * @since 0.1\n * @example\n * // const emissions: MutableRunnerEmissions = {\n * // plots: [],\n * // drawings: [],\n * // alerts: [],\n * // diagnostics: [],\n * // fromBar: 0,\n * // toBar: 0,\n * // };\n */\nexport type MutableRunnerEmissions = {\n plots: PlotEmission[];\n drawings: DrawingEmission[];\n alerts: AlertEmission[];\n alertConditions?: AlertConditionEmission[];\n logs: LogEmission[];\n diagnostics: RuntimeDiagnostic[];\n fromBar: number;\n toBar: number;\n};\n\n/**\n * The contract Task 6's execution loop hands to stateful primitives\n * (Tasks 7-8) inside a single `compute` step. Tasks 7-8 read this\n * through {@link ACTIVE_RUNTIME_CONTEXT} — the runtime sets `.current`\n * around `compute` in a `try/finally`, so primitives can find their\n * series, slot store, capability bag, emission destination, and bar\n * index without an explicit argument.\n *\n * `isTick` discriminates `onBarTick` calls (head-replace mode) from\n * `onBarClose` / `onHistory` (append mode). Stateful primitives in\n * Task 7 use it to swap append vs replace-head behaviour.\n *\n * `stateSlots` stores Phase-4 `state.*` / `state.tick.*` slots keyed by\n * `${slotId}:state`; values flush into `stateStore` at close/dispose.\n *\n * `views` is a mutable container whose fields are replaced with fresh frozen\n * `barstate.*`, `syminfo.*`, and `timeframe.*` snapshots as the runner\n * advances.\n *\n * `resolvedInputs` is the frozen bag handed to `compute({ inputs })`,\n * resolved once at mount from manifest defaults plus adapter overrides.\n *\n * @since 0.1\n * @example\n * // const ctx: RuntimeContext = {\n * // stream, stateStore, capabilities, emissions,\n * // barIndex: () => 0,\n * // isTick: false,\n * // };\n */\nexport type RuntimeContext = {\n readonly stream: StreamState;\n readonly stateStore: StateStore;\n readonly persistentStateStore?: PersistentStateStore;\n lastPersistTime: number;\n readonly capabilities: Capabilities;\n readonly emissions: MutableRunnerEmissions;\n readonly barIndex: () => number;\n isTick: boolean;\n /**\n * Per-handle drawing slot store keyed by `slotId#subId`. Allocated\n * on first `op: \"create\"`; mutated by `update(patch)` to merge the\n * patch into the slot's `state`; flagged `removed: true` on\n * `remove()`. Cleared on `dispose`. Persists across bars.\n * @since 0.3\n */\n readonly drawingSlots: Map<string, DrawingSlot>;\n /**\n * Per-callsite per-bar sub-id counter. Each `draw.<kind>(...)` call\n * inside a bar reads `nextSubId(ctx, slotId)`; the counter resets\n * at the top of each `onBarClose` / `onBarTick` so iteration `i` at\n * the same callsite yields the same `slotId#i` across bars.\n * Cleared on `dispose`. @since 0.3\n */\n readonly drawingSubIdCounters: Map<string, number>;\n /**\n * Live per-bucket allocation tally for the current script. Each\n * `op: \"create\"` increments the relevant bucket; each\n * `op: \"remove\"` decrements (clamped at 0). `op: \"update\"` is\n * free. `pushDrawing` drops the emission with\n * `drawing-budget-exceeded` once a bucket hits its effective\n * budget (min of adapter cap + `scriptMaxDrawings`). Reset to\n * zero on `dispose`. @since 0.3\n */\n readonly drawingBucketCounters: Record<DrawingBucket, number>;\n /**\n * The script's per-bucket cap from `defineIndicator({ maxDrawings:\n * ... })` / `defineDrawing({ maxDrawings: ... })`. `null` when\n * omitted — `pushDrawing` then enforces the adapter cap alone.\n * Effective budget is `min(scriptMaxDrawings[b],\n * capabilities.maxDrawingsPerScript[b])`. @since 0.3\n */\n readonly scriptMaxDrawings: DrawingCounts | null;\n /**\n * Runtime `state.*` / `state.tick.*` slot store keyed by\n * `${slotIdPrefix ?? \"\"}${slotId}:state`. Non-tick slots keep\n * committed/tentative values; tick slots commit writes immediately.\n * Cleared on `dispose` after flushing snapshots to `stateStore`.\n * @since 0.4\n */\n readonly stateSlots: Map<string, StateSlot<unknown>>;\n /**\n * Runtime `state.series` slot store keyed by\n * `${slotIdPrefix ?? \"\"}${slotId}:series`. Each holds a history ring +\n * the identity-stable script-facing view + the last committed head.\n * The ring advances once per close (script-invisible lockstep), so\n * `s[1]` is always one committed bar back. Cleared on `dispose` after\n * the final snapshot captures it. @since 0.9\n */\n readonly seriesSlots: Map<string, SeriesSlot>;\n /**\n * Secondary candle streams keyed by `IntervalDescriptor.value`.\n * Mutated only by `createScriptRunner` mount/restore/routing. @since 0.5\n */\n readonly secondaryStreams: Map<string, StreamState>;\n /**\n * Per-`request.security` slot cache keyed by `slotId|interval`. Phase 4\n * stores NaN fallback bars here; Phase 5 replaces the value producer with\n * aligned secondary stream series while preserving stable identity.\n * @since 0.4\n */\n readonly requestSecurityBars: Map<string, SecurityBar>;\n /**\n * Per-compute aligned numeric arrays keyed by\n * `slotId|interval|sourceKey`. Cleared on main-stream close/tick before\n * `compute` so `request.security` re-aligns against the latest\n * secondary buffers. @since 0.5\n */\n readonly requestSecurityAlignments: Map<string, ReadonlyArray<number>>;\n /**\n * Per-compute cache of ascending `Bar[]` materialisations keyed by the\n * source `StreamState`. Shared by `request.security` and `request.lowerTf`\n * (via `request/streamBars.ts:ascendingBarsFor`) so a stable bar-array\n * identity is reused across every consumer in a bar — the `getOrAlign` /\n * `getOrBucket` WeakMap caches actually hit and the same ring buffer is\n * walked once per bar instead of 10×. Cleared alongside\n * {@link requestSecurityAlignments}. @since 0.5\n */\n readonly requestSecurityAscendingBars: Map<StreamState, ReadonlyArray<Bar>>;\n /**\n * Mounted HTF expression runners keyed by `slotId`. One entry per\n * `manifest.securityExpressions` callsite. `request.security(slotId,\n * opts, expr)` dispatches the expression overload off this registry\n * (rather than `expr !== undefined`) and captures the callback here.\n * Absent on dep / sibling contexts and single-timeframe scripts.\n * Cleared on `dispose`. @since 0.7\n */\n securityExprRunners?: Map<string, SecurityExprRunner>;\n /**\n * Per-interval index into {@link securityExprRunners}, keyed by\n * `IntervalDescriptor.value`. `driveSecurityExpressions` fans a\n * secondary close / tick out to every runner on that interval.\n * Absent when no expression callsites are declared. Cleared on\n * `dispose`. @since 0.7\n */\n securityExprRunnersByInterval?: ReadonlyMap<string, ReadonlyArray<SecurityExprRunner>>;\n /**\n * Per-compute aligned expression-output series cache keyed by\n * `slotId|interval`. Holds the stable `Series<number>` Proxy each\n * expression-form `request.security` returns; cleared each bar\n * (alongside {@link requestSecurityAlignments}) so the proxy re-aligns\n * the runner's output buffer against the latest secondary buffers.\n * @since 0.7\n */\n requestSecurityExprSeries?: Map<string, Series<number>>;\n /**\n * Per-`request.lowerTf` slot cache keyed by `slotId|interval`. Values are\n * stable `Series<ReadonlyArray<Bar>>` proxies over the latest LTF bucket\n * materialisation. @since 0.6\n */\n readonly requestLowerTfViews: Map<string, Series<ReadonlyArray<Bar>>>;\n /**\n * Runtime diagnostic dedupe for `request.*` capability gates, keyed by\n * `code|slotId|interval|kind`. Cleared on `dispose`. @since 0.4\n */\n readonly diagnosedRequestKeys: Set<string>;\n /**\n * Manifest-declared alert conditions keyed by condition id. Used by\n * `signal(conditionId, fired)` to reject unknown ids without\n * re-reading the manifest each bar. @since 0.5\n */\n readonly alertConditions?: ReadonlyMap<string, AlertConditionDefinition>;\n /**\n * Dedupe for alert-condition capability/unknown-id diagnostics, keyed\n * by `code|conditionId`. Cleared on dispose. @since 0.5\n */\n readonly diagnosedAlertConditionKeys?: Set<string>;\n /**\n * Number of `runtime.log.*` emissions accepted in the active compute\n * step. Reset at the start of each close/tick. @since 0.5\n */\n logBudget: number;\n /**\n * Per-step dedupe flag for `runtime-log-budget-exceeded`. Reset with\n * `logBudget` at the start of each close/tick. @since 0.5\n */\n logBudgetExceededDiagnosed: boolean;\n /**\n * Frozen effective input values keyed by script input name. Resolved once\n * at mount and reused by every compute step. @since 0.4\n */\n resolvedInputs: Readonly<Record<string, unknown>>;\n /**\n * Mount-time script pane default. The runner sets it from\n * `manifest.overlay`:\n * - `overlay` absent / `true` → `\"overlay\"`.\n * - `overlay === false` → `\"script:<sanitised(manifest.name)>\"`.\n * `resolvePane` reads this value when a `plot()` / `hline()` call\n * has no explicit `pane` opt.\n * @since 0.2\n */\n readonly defaultPane: string;\n /**\n * Stable non-overlay pane key for this script. Explicit\n * `pane: \"new\"` resolves here even when `defaultPane === \"overlay\"`\n * so every `\"new\"` plot in a script joins one script-owned subpane.\n * @since 0.2\n */\n readonly scriptPane: string;\n /**\n * Host-supplied per-slot presentation overrides, keyed by\n * `PlotEmission.slotId`. Applied at emit time by `applyPlotOverride`.\n * Mutable — `setPlotOverrides` swaps it live (presentation-only, so\n * it does not break the frozen-input determinism guarantee). Entries\n * themselves are frozen. @since 0.8\n */\n plotOverrides: Readonly<Record<string, PlotOverride>>;\n /**\n * Runtime diagnostic dedupe for mount-time input override failures,\n * keyed by manifest input key. Cleared on `dispose`. @since 0.4\n */\n readonly diagnosedInputKeys: Set<string>;\n /**\n * Runtime `barstate.*`, `syminfo.*`, and `timeframe.*` views. The\n * container is mutable; each assigned view snapshot is frozen.\n * @since 0.4\n */\n readonly views: RuntimeViews;\n /**\n * Prefix prepended when emissions from this context flow into the\n * parent runner's queues, and mirrored into every `stateSlots` /\n * `StateStore` key written by `state.*` / `state.tick.*` so each\n * runner's persisted state is isolated. `\"dep:<localId>/\"` for\n * private dep runners, `\"export:<exportName>/\"` for sibling\n * runners, and `\"\"` (or absent) for primary single-script and\n * bundle-primary runners.\n *\n * @since 0.7\n */\n slotIdPrefix?: string;\n /**\n * `true` when this context belongs to a private dep runner — its\n * emissions are dropped (or captured into the dep output store) by\n * `applyDepEmissionPolicy`. `false` / absent for primary and\n * sibling runners.\n *\n * @since 0.7\n */\n isDep?: boolean;\n /**\n * Per-bar titled-output buffer shared by the primary and every\n * sibling of a `CompiledScriptBundle`. Populated by\n * `applyDepEmissionPolicy` after each dep/sibling's compute; read\n * by `__chartlang_depOutput` during the consumer's compute. `null`\n * / absent for single-script runners with no deps.\n *\n * @since 0.7\n */\n depOutputStore?: DepOutputStore | null;\n};\n\n/**\n * Process-wide context slot. Task 6's `createScriptRunner` mutates\n * `.current` inside `try { ... } finally { current = null }` around\n * every `compute` invocation; Tasks 7-8 read it inside primitive\n * implementations. JavaScript's single-threaded execution model\n * guarantees only one `compute` runs at a time, so this ambient\n * slot is safe.\n *\n * The export is intentionally just a holder — no class, no methods,\n * no validation. Responsibility for setting and clearing lives in\n * Task 6.\n *\n * @since 0.1\n * @example\n * // import { ACTIVE_RUNTIME_CONTEXT }\n * // from \"@invinite-org/chartlang-runtime\";\n * // ACTIVE_RUNTIME_CONTEXT.current; // null at module load\n */\nexport const ACTIVE_RUNTIME_CONTEXT: { current: RuntimeContext | null } = {\n current: null,\n};\n"]}
@@ -2,7 +2,7 @@ import type { Series } from "@invinite-org/chartlang-core";
2
2
  import type { RingBufferLike } from "./ringBuffer.js";
3
3
  /**
4
4
  * Wrap a `RingBufferLike<T>` in the user-facing `Series<T>` Proxy shape
5
- * from PLAN.md §6.6. The Proxy is created **once per backing buffer**
5
+ *. The Proxy is created **once per backing buffer**
6
6
  * at stream/slot construction time and re-used across every bar — its
7
7
  * identity is stable so script authors can keep `const ema = ta.ema(...)`
8
8
  * at the top of `compute` and reference `ema` the same way every bar.
@@ -10,6 +10,14 @@ import type { RingBufferLike } from "./ringBuffer.js";
10
10
  * Property reads dispatch as follows:
11
11
  * - `series.current` → `buf.at(0)`
12
12
  * - `series.length` → `buf.length`
13
+ * - `series.valueOf` / `series[Symbol.toPrimitive]` → a function returning
14
+ * `buf.at(0)`, so a numeric series coerces to its **current** value in any
15
+ * value context (`series * 2`, `series > x`, `` `${series}` ``,
16
+ * `Math.max(series, …)`). This is what lets `bar.close` be used both as a
17
+ * scalar and indexed as a series. Coercion is harmless for non-numeric
18
+ * buffers — nothing coerces those. Note `Number.isFinite(series)` is still
19
+ * `false` (it does not coerce) and `series === 42` is `false` (object vs
20
+ * number); use `series.current` / `+series` there.
13
21
  * - `series[n]` (string coerces to a non-negative integer) → `buf.at(n)`
14
22
  * - any other key → `undefined`
15
23
  *
@@ -30,30 +38,47 @@ import type { RingBufferLike } from "./ringBuffer.js";
30
38
  */
31
39
  export declare function makeSeriesView<T>(buf: RingBufferLike<T>): Series<T>;
32
40
  /**
33
- * Offset-shifted variant of {@link makeSeriesView}. `offset === 0`
34
- * returns the same Proxy shape (and is the identity-preserving fast
35
- * path callers should special-case at the call site). For
36
- * `offset === k > 0`, `view.current === buf.at(k)` i.e. the value
37
- * `k` bars ago, matching `lib/applyOffset`'s
38
- * `out[i] = values[i offset]` semantics. For `offset === -k`,
39
- * `view.current === buf.at(-k)` an OOR read returning the underlying
40
- * sentinel (NaN for `Float64RingBuffer`, `undefined` for object
41
- * `RingBuffer`).
41
+ * Offset-tagging variant of {@link makeSeriesView}. It returns the
42
+ * **unshifted** view (delegating to {@link makeSeriesView}) and, for a
43
+ * non-zero `offset`, records `view offset` in a module-level
44
+ * `WeakMap` side-table read by `plot()` via {@link seriesOffsetOf}. The
45
+ * offset is **presentation-only** — `view.current` is `buf.at(0)`, not a
46
+ * value `offset` bars ago so both shift directions are expressible and
47
+ * alerts / `state.*` see the unshifted value. `offset === 0` records
48
+ * nothing (byte-identical to a plain {@link makeSeriesView}).
42
49
  *
43
- * The shift is applied on every read no allocation, no per-bar
44
- * work. Callers cache the returned Proxy per `(slot, offset)` pair so
45
- * the view's identity stays stable across bars.
50
+ * Callers cache the returned view per `(slot, offset)` pair so the
51
+ * view's identity and therefore its recorded offset stays stable
52
+ * across bars.
46
53
  *
47
54
  * @since 0.2
55
+ * @stable
48
56
  * @example
49
- * // import { Float64RingBuffer, makeShiftedSeriesView }
57
+ * // import { Float64RingBuffer, makeShiftedSeriesView, seriesOffsetOf }
50
58
  * // from "@invinite-org/chartlang-runtime";
51
59
  * // const buf = new Float64RingBuffer(8);
52
60
  * // buf.append(10); buf.append(20); buf.append(30);
53
- * // const view = makeShiftedSeriesView<number>(buf, 1);
54
- * // view.current; // 20 (one bar ago)
55
- * // view[0]; // 20
56
- * // view[1]; // 10
61
+ * // const view = makeShiftedSeriesView<number>(buf, 5);
62
+ * // view.current; // 30 (unshifted the offset does NOT lag the read)
63
+ * // seriesOffsetOf(view); // 5 (presentation x-shift carried to the emission)
57
64
  */
58
65
  export declare function makeShiftedSeriesView<T>(buf: RingBufferLike<T>, offset: number): Series<T>;
66
+ /**
67
+ * Read the presentation x-shift recorded for `series` by
68
+ * {@link makeShiftedSeriesView}, or `0` when the series is untagged (a
69
+ * plain {@link makeSeriesView} view, an `offset === 0` view, or any
70
+ * non-runtime Series). `plot()` calls this to populate
71
+ * `PlotEmission.xShift`; a `0` result omits the field so a no-offset
72
+ * plot stays byte-identical to today.
73
+ *
74
+ * @since 0.2
75
+ * @stable
76
+ * @example
77
+ * // import { Float64RingBuffer, makeShiftedSeriesView, seriesOffsetOf }
78
+ * // from "@invinite-org/chartlang-runtime";
79
+ * // const buf = new Float64RingBuffer(8);
80
+ * // const shifted = makeShiftedSeriesView<number>(buf, -3);
81
+ * // seriesOffsetOf(shifted); // -3
82
+ */
83
+ export declare function seriesOffsetOf(series: Series<unknown>): number;
59
84
  //# sourceMappingURL=seriesView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"seriesView.d.ts","sourceRoot":"","sources":["../src/seriesView.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAoBnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAqB1F"}
1
+ {"version":3,"file":"seriesView.d.ts","sourceRoot":"","sources":["../src/seriesView.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAuBnE;AAcD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAI1F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAE9D"}
@@ -2,7 +2,7 @@
2
2
  // See the LICENSE file in the repo root for full license text.
3
3
  /**
4
4
  * Wrap a `RingBufferLike<T>` in the user-facing `Series<T>` Proxy shape
5
- * from PLAN.md §6.6. The Proxy is created **once per backing buffer**
5
+ *. The Proxy is created **once per backing buffer**
6
6
  * at stream/slot construction time and re-used across every bar — its
7
7
  * identity is stable so script authors can keep `const ema = ta.ema(...)`
8
8
  * at the top of `compute` and reference `ema` the same way every bar.
@@ -10,6 +10,14 @@
10
10
  * Property reads dispatch as follows:
11
11
  * - `series.current` → `buf.at(0)`
12
12
  * - `series.length` → `buf.length`
13
+ * - `series.valueOf` / `series[Symbol.toPrimitive]` → a function returning
14
+ * `buf.at(0)`, so a numeric series coerces to its **current** value in any
15
+ * value context (`series * 2`, `series > x`, `` `${series}` ``,
16
+ * `Math.max(series, …)`). This is what lets `bar.close` be used both as a
17
+ * scalar and indexed as a series. Coercion is harmless for non-numeric
18
+ * buffers — nothing coerces those. Note `Number.isFinite(series)` is still
19
+ * `false` (it does not coerce) and `series === 42` is `false` (object vs
20
+ * number); use `series.current` / `+series` there.
13
21
  * - `series[n]` (string coerces to a non-negative integer) → `buf.at(n)`
14
22
  * - any other key → `undefined`
15
23
  *
@@ -35,6 +43,10 @@ export function makeSeriesView(buf) {
35
43
  return buf.at(0);
36
44
  if (prop === "length")
37
45
  return buf.length;
46
+ if (prop === "valueOf")
47
+ return () => buf.at(0);
48
+ if (prop === Symbol.toPrimitive)
49
+ return () => buf.at(0);
38
50
  if (typeof prop === "string") {
39
51
  const n = Number(prop);
40
52
  if (Number.isInteger(n) && n >= 0)
@@ -45,6 +57,8 @@ export function makeSeriesView(buf) {
45
57
  has(_target, prop) {
46
58
  if (prop === "current" || prop === "length")
47
59
  return true;
60
+ if (prop === "valueOf" || prop === Symbol.toPrimitive)
61
+ return true;
48
62
  if (typeof prop === "string") {
49
63
  const n = Number(prop);
50
64
  return Number.isInteger(n) && n >= 0;
@@ -54,56 +68,65 @@ export function makeSeriesView(buf) {
54
68
  });
55
69
  }
56
70
  /**
57
- * Offset-shifted variant of {@link makeSeriesView}. `offset === 0`
58
- * returns the same Proxy shape (and is the identity-preserving fast
59
- * path callers should special-case at the call site). For
60
- * `offset === k > 0`, `view.current === buf.at(k)` i.e. the value
61
- * `k` bars ago, matching `lib/applyOffset`'s
62
- * `out[i] = values[i offset]` semantics. For `offset === -k`,
63
- * `view.current === buf.at(-k)` an OOR read returning the underlying
64
- * sentinel (NaN for `Float64RingBuffer`, `undefined` for object
65
- * `RingBuffer`).
71
+ * Module-level side-table recording the **presentation x-shift** declared
72
+ * for an offset-tagged Series view. `offset` is no longer a value-read
73
+ * transform (Option A, bidirectional-plot-offset): the series value is
74
+ * always the unshifted `buf.at(0)`; the recorded offset rides the plot
75
+ * emission as `PlotEmission.xShift` so the adapter renders the series
76
+ * shifted (`+n` right / future, `−n` left / past) without changing the
77
+ * numbers alerts and `state.*` see. Keyed weakly on the view object so a
78
+ * dropped slot's tag is collected with it.
79
+ */
80
+ const seriesOffsets = new WeakMap();
81
+ /**
82
+ * Offset-tagging variant of {@link makeSeriesView}. It returns the
83
+ * **unshifted** view (delegating to {@link makeSeriesView}) and, for a
84
+ * non-zero `offset`, records `view → offset` in a module-level
85
+ * `WeakMap` side-table read by `plot()` via {@link seriesOffsetOf}. The
86
+ * offset is **presentation-only** — `view.current` is `buf.at(0)`, not a
87
+ * value `offset` bars ago — so both shift directions are expressible and
88
+ * alerts / `state.*` see the unshifted value. `offset === 0` records
89
+ * nothing (byte-identical to a plain {@link makeSeriesView}).
66
90
  *
67
- * The shift is applied on every read no allocation, no per-bar
68
- * work. Callers cache the returned Proxy per `(slot, offset)` pair so
69
- * the view's identity stays stable across bars.
91
+ * Callers cache the returned view per `(slot, offset)` pair so the
92
+ * view's identity and therefore its recorded offset stays stable
93
+ * across bars.
70
94
  *
71
95
  * @since 0.2
96
+ * @stable
72
97
  * @example
73
- * // import { Float64RingBuffer, makeShiftedSeriesView }
98
+ * // import { Float64RingBuffer, makeShiftedSeriesView, seriesOffsetOf }
74
99
  * // from "@invinite-org/chartlang-runtime";
75
100
  * // const buf = new Float64RingBuffer(8);
76
101
  * // buf.append(10); buf.append(20); buf.append(30);
77
- * // const view = makeShiftedSeriesView<number>(buf, 1);
78
- * // view.current; // 20 (one bar ago)
79
- * // view[0]; // 20
80
- * // view[1]; // 10
102
+ * // const view = makeShiftedSeriesView<number>(buf, 5);
103
+ * // view.current; // 30 (unshifted the offset does NOT lag the read)
104
+ * // seriesOffsetOf(view); // 5 (presentation x-shift carried to the emission)
81
105
  */
82
106
  export function makeShiftedSeriesView(buf, offset) {
83
- if (offset === 0)
84
- return makeSeriesView(buf);
85
- return new Proxy({}, {
86
- get(_target, prop) {
87
- if (prop === "current")
88
- return buf.at(offset);
89
- if (prop === "length")
90
- return buf.length;
91
- if (typeof prop === "string") {
92
- const n = Number(prop);
93
- if (Number.isInteger(n) && n >= 0)
94
- return buf.at(n + offset);
95
- }
96
- return undefined;
97
- },
98
- has(_target, prop) {
99
- if (prop === "current" || prop === "length")
100
- return true;
101
- if (typeof prop === "string") {
102
- const n = Number(prop);
103
- return Number.isInteger(n) && n >= 0;
104
- }
105
- return false;
106
- },
107
- });
107
+ const view = makeSeriesView(buf);
108
+ if (offset !== 0)
109
+ seriesOffsets.set(view, offset);
110
+ return view;
111
+ }
112
+ /**
113
+ * Read the presentation x-shift recorded for `series` by
114
+ * {@link makeShiftedSeriesView}, or `0` when the series is untagged (a
115
+ * plain {@link makeSeriesView} view, an `offset === 0` view, or any
116
+ * non-runtime Series). `plot()` calls this to populate
117
+ * `PlotEmission.xShift`; a `0` result omits the field so a no-offset
118
+ * plot stays byte-identical to today.
119
+ *
120
+ * @since 0.2
121
+ * @stable
122
+ * @example
123
+ * // import { Float64RingBuffer, makeShiftedSeriesView, seriesOffsetOf }
124
+ * // from "@invinite-org/chartlang-runtime";
125
+ * // const buf = new Float64RingBuffer(8);
126
+ * // const shifted = makeShiftedSeriesView<number>(buf, -3);
127
+ * // seriesOffsetOf(shifted); // -3
128
+ */
129
+ export function seriesOffsetOf(series) {
130
+ return seriesOffsets.get(series) ?? 0;
108
131
  }
109
132
  //# sourceMappingURL=seriesView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"seriesView.js","sourceRoot":"","sources":["../src/seriesView.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAM/D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,cAAc,CAAI,GAAsB;IACpD,OAAO,IAAI,KAAK,CAAC,EAAe,EAAE;QAC9B,GAAG,CAAC,OAAO,EAAE,IAAI;YACb,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,IAAI,KAAK,QAAQ;gBAAE,OAAO,GAAG,CAAC,MAAM,CAAC;YACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,IAAI;YACb,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACzD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;KACJ,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,qBAAqB,CAAI,GAAsB,EAAE,MAAc;IAC3E,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAI,GAAG,CAAC,CAAC;IAChD,OAAO,IAAI,KAAK,CAAC,EAAe,EAAE;QAC9B,GAAG,CAAC,OAAO,EAAE,IAAI;YACb,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,IAAI,KAAK,QAAQ;gBAAE,OAAO,GAAG,CAAC,MAAM,CAAC;YACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,IAAI;YACb,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACzD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"seriesView.js","sourceRoot":"","sources":["../src/seriesView.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAM/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,UAAU,cAAc,CAAI,GAAsB;IACpD,OAAO,IAAI,KAAK,CAAC,EAAe,EAAE;QAC9B,GAAG,CAAC,OAAO,EAAE,IAAI;YACb,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,IAAI,KAAK,QAAQ;gBAAE,OAAO,GAAG,CAAC,MAAM,CAAC;YACzC,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,IAAI,KAAK,MAAM,CAAC,WAAW;gBAAE,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,IAAI;YACb,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACzD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,CAAC,WAAW;gBAAE,OAAO,IAAI,CAAC;YACnE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;KACJ,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,aAAa,GAAG,IAAI,OAAO,EAA2B,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,qBAAqB,CAAI,GAAsB,EAAE,MAAc;IAC3E,MAAM,IAAI,GAAG,cAAc,CAAI,GAAG,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,CAAC;QAAE,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAAC,MAAuB;IAClD,OAAO,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1C,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 { Series } from \"@invinite-org/chartlang-core\";\n\nimport type { RingBufferLike } from \"./ringBuffer.js\";\n\n/**\n * Wrap a `RingBufferLike<T>` in the user-facing `Series<T>` Proxy shape\n *. The Proxy is created **once per backing buffer**\n * at stream/slot construction time and re-used across every bar — its\n * identity is stable so script authors can keep `const ema = ta.ema(...)`\n * at the top of `compute` and reference `ema` the same way every bar.\n *\n * Property reads dispatch as follows:\n * - `series.current` → `buf.at(0)`\n * - `series.length` → `buf.length`\n * - `series.valueOf` / `series[Symbol.toPrimitive]` → a function returning\n * `buf.at(0)`, so a numeric series coerces to its **current** value in any\n * value context (`series * 2`, `series > x`, `` `${series}` ``,\n * `Math.max(series, …)`). This is what lets `bar.close` be used both as a\n * scalar and indexed as a series. Coercion is harmless for non-numeric\n * buffers — nothing coerces those. Note `Number.isFinite(series)` is still\n * `false` (it does not coerce) and `series === 42` is `false` (object vs\n * number); use `series.current` / `+series` there.\n * - `series[n]` (string coerces to a non-negative integer) → `buf.at(n)`\n * - any other key → `undefined`\n *\n * For numeric buffers (`Float64RingBuffer`) out-of-range reads return\n * `NaN`; for object buffers they return `undefined`. The Proxy passes\n * the underlying sentinel through verbatim.\n *\n * @since 0.1\n * @example\n * // import { Float64RingBuffer, makeSeriesView }\n * // from \"@invinite-org/chartlang-runtime\";\n * // const buf = new Float64RingBuffer(8);\n * // const view = makeSeriesView<number>(buf);\n * // buf.append(42);\n * // view.current; // 42\n * // view[0]; // 42\n * // view.length; // 1\n */\nexport function makeSeriesView<T>(buf: RingBufferLike<T>): Series<T> {\n return new Proxy({} as Series<T>, {\n get(_target, prop) {\n if (prop === \"current\") return buf.at(0);\n if (prop === \"length\") return buf.length;\n if (prop === \"valueOf\") return () => buf.at(0);\n if (prop === Symbol.toPrimitive) return () => buf.at(0);\n if (typeof prop === \"string\") {\n const n = Number(prop);\n if (Number.isInteger(n) && n >= 0) return buf.at(n);\n }\n return undefined;\n },\n has(_target, prop) {\n if (prop === \"current\" || prop === \"length\") return true;\n if (prop === \"valueOf\" || prop === Symbol.toPrimitive) return true;\n if (typeof prop === \"string\") {\n const n = Number(prop);\n return Number.isInteger(n) && n >= 0;\n }\n return false;\n },\n });\n}\n\n/**\n * Module-level side-table recording the **presentation x-shift** declared\n * for an offset-tagged Series view. `offset` is no longer a value-read\n * transform (Option A, bidirectional-plot-offset): the series value is\n * always the unshifted `buf.at(0)`; the recorded offset rides the plot\n * emission as `PlotEmission.xShift` so the adapter renders the series\n * shifted (`+n` right / future, `−n` left / past) without changing the\n * numbers alerts and `state.*` see. Keyed weakly on the view object so a\n * dropped slot's tag is collected with it.\n */\nconst seriesOffsets = new WeakMap<Series<unknown>, number>();\n\n/**\n * Offset-tagging variant of {@link makeSeriesView}. It returns the\n * **unshifted** view (delegating to {@link makeSeriesView}) and, for a\n * non-zero `offset`, records `view → offset` in a module-level\n * `WeakMap` side-table read by `plot()` via {@link seriesOffsetOf}. The\n * offset is **presentation-only** — `view.current` is `buf.at(0)`, not a\n * value `offset` bars ago — so both shift directions are expressible and\n * alerts / `state.*` see the unshifted value. `offset === 0` records\n * nothing (byte-identical to a plain {@link makeSeriesView}).\n *\n * Callers cache the returned view per `(slot, offset)` pair so the\n * view's identity — and therefore its recorded offset — stays stable\n * across bars.\n *\n * @since 0.2\n * @stable\n * @example\n * // import { Float64RingBuffer, makeShiftedSeriesView, seriesOffsetOf }\n * // from \"@invinite-org/chartlang-runtime\";\n * // const buf = new Float64RingBuffer(8);\n * // buf.append(10); buf.append(20); buf.append(30);\n * // const view = makeShiftedSeriesView<number>(buf, 5);\n * // view.current; // 30 (unshifted — the offset does NOT lag the read)\n * // seriesOffsetOf(view); // 5 (presentation x-shift carried to the emission)\n */\nexport function makeShiftedSeriesView<T>(buf: RingBufferLike<T>, offset: number): Series<T> {\n const view = makeSeriesView<T>(buf);\n if (offset !== 0) seriesOffsets.set(view, offset);\n return view;\n}\n\n/**\n * Read the presentation x-shift recorded for `series` by\n * {@link makeShiftedSeriesView}, or `0` when the series is untagged (a\n * plain {@link makeSeriesView} view, an `offset === 0` view, or any\n * non-runtime Series). `plot()` calls this to populate\n * `PlotEmission.xShift`; a `0` result omits the field so a no-offset\n * plot stays byte-identical to today.\n *\n * @since 0.2\n * @stable\n * @example\n * // import { Float64RingBuffer, makeShiftedSeriesView, seriesOffsetOf }\n * // from \"@invinite-org/chartlang-runtime\";\n * // const buf = new Float64RingBuffer(8);\n * // const shifted = makeShiftedSeriesView<number>(buf, -3);\n * // seriesOffsetOf(shifted); // -3\n */\nexport function seriesOffsetOf(series: Series<unknown>): number {\n return seriesOffsets.get(series) ?? 0;\n}\n"]}
@@ -1,5 +1,6 @@
1
- export { commitStateSlots, flushStateSlots, restoreStateSlots, resetTentativeStateSlots, serialiseStateSlots, } from "./lifecycle.js";
1
+ export { advanceSeriesSlots, commitSeriesSlots, commitStateSlots, flushStateSlots, resetSeriesHeads, restoreStateSlots, resetTentativeStateSlots, serialiseStateSlots, } from "./lifecycle.js";
2
2
  export type { StateSlotSnapshot } from "./lifecycle.js";
3
+ export { isSeriesSlotSnapshotKey, restoreSeriesSlots, serialiseSeriesSlots, } from "./seriesPersistence.js";
3
4
  export { buildStateNamespace } from "./stateNamespace.js";
4
5
  export type { StateSlotSerialisers } from "./stateSlot.js";
5
6
  export { asMutableSlot, StateSlot } from "./stateSlot.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACH,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -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
- export { commitStateSlots, flushStateSlots, restoreStateSlots, resetTentativeStateSlots, serialiseStateSlots, } from "./lifecycle.js";
3
+ export { advanceSeriesSlots, commitSeriesSlots, commitStateSlots, flushStateSlots, resetSeriesHeads, restoreStateSlots, resetTentativeStateSlots, serialiseStateSlots, } from "./lifecycle.js";
4
+ export { isSeriesSlotSnapshotKey, restoreSeriesSlots, serialiseSeriesSlots, } from "./seriesPersistence.js";
4
5
  export { buildStateNamespace } from "./stateNamespace.js";
5
6
  export { asMutableSlot, StateSlot } from "./stateSlot.js";
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EACH,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,GACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EACH,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,GACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACH,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,aAAa,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 {\n advanceSeriesSlots,\n commitSeriesSlots,\n commitStateSlots,\n flushStateSlots,\n resetSeriesHeads,\n restoreStateSlots,\n resetTentativeStateSlots,\n serialiseStateSlots,\n} from \"./lifecycle.js\";\nexport type { StateSlotSnapshot } from \"./lifecycle.js\";\nexport {\n isSeriesSlotSnapshotKey,\n restoreSeriesSlots,\n serialiseSeriesSlots,\n} from \"./seriesPersistence.js\";\nexport { buildStateNamespace } from \"./stateNamespace.js\";\nexport type { StateSlotSerialisers } from \"./stateSlot.js\";\nexport { asMutableSlot, StateSlot } from \"./stateSlot.js\";\n"]}
@@ -72,4 +72,44 @@ export declare function serialiseStateSlots(ctx: RuntimeContext): Readonly<Recor
72
72
  * void restored;
73
73
  */
74
74
  export declare function restoreStateSlots(ctx: RuntimeContext, slots: Readonly<Record<string, unknown>>): void;
75
+ /**
76
+ * Advance every `state.series` ring once for a new close bar — append a
77
+ * fresh `NaN` head so the prior committed head slides to index 1. Runs
78
+ * BEFORE compute on close, so a slot first allocated mid-compute (already
79
+ * holding its seeded head) is not present here and is not double-advanced.
80
+ *
81
+ * @since 0.9
82
+ * @stable
83
+ * @example
84
+ * // advanceSeriesSlots(ctx);
85
+ * const advanced = true;
86
+ * void advanced;
87
+ */
88
+ export declare function advanceSeriesSlots(ctx: RuntimeContext): void;
89
+ /**
90
+ * Commit every `state.series` live head as its bar-close value after
91
+ * close compute, so the next advance retains it and a tick can reset to
92
+ * it.
93
+ *
94
+ * @since 0.9
95
+ * @stable
96
+ * @example
97
+ * // commitSeriesSlots(ctx);
98
+ * const committed = true;
99
+ * void committed;
100
+ */
101
+ export declare function commitSeriesSlots(ctx: RuntimeContext): void;
102
+ /**
103
+ * Reset every `state.series` live head to its last committed value before
104
+ * tick compute, so a re-write refines from the committed baseline and a
105
+ * tick without a write reads the committed head. Does NOT advance length.
106
+ *
107
+ * @since 0.9
108
+ * @stable
109
+ * @example
110
+ * // resetSeriesHeads(ctx);
111
+ * const reset = true;
112
+ * void reset;
113
+ */
114
+ export declare function resetSeriesHeads(ctx: RuntimeContext): void;
75
115
  //# sourceMappingURL=lifecycle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/state/lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IAC/B,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;CACzB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAIlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAI1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAOzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAS1F;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC7B,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,IAAI,CAKN"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/state/lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IAC/B,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;CACzB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAIlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAI1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAOzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAS1F;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC7B,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,IAAI,CAKN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAI5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAI3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAI1D"}
@@ -1,5 +1,6 @@
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 { advanceSeriesSlot, commitSeriesSlot, resetSeriesSlotHead } from "./seriesSlot.js";
3
4
  /**
4
5
  * Reset all non-`state.tick.*` tentative values before tick compute.
5
6
  *
@@ -84,4 +85,56 @@ export function restoreStateSlots(ctx, slots) {
84
85
  ctx.stateStore.set(key, value);
85
86
  }
86
87
  }
88
+ /**
89
+ * Advance every `state.series` ring once for a new close bar — append a
90
+ * fresh `NaN` head so the prior committed head slides to index 1. Runs
91
+ * BEFORE compute on close, so a slot first allocated mid-compute (already
92
+ * holding its seeded head) is not present here and is not double-advanced.
93
+ *
94
+ * @since 0.9
95
+ * @stable
96
+ * @example
97
+ * // advanceSeriesSlots(ctx);
98
+ * const advanced = true;
99
+ * void advanced;
100
+ */
101
+ export function advanceSeriesSlots(ctx) {
102
+ for (const slot of ctx.seriesSlots.values()) {
103
+ advanceSeriesSlot(slot);
104
+ }
105
+ }
106
+ /**
107
+ * Commit every `state.series` live head as its bar-close value after
108
+ * close compute, so the next advance retains it and a tick can reset to
109
+ * it.
110
+ *
111
+ * @since 0.9
112
+ * @stable
113
+ * @example
114
+ * // commitSeriesSlots(ctx);
115
+ * const committed = true;
116
+ * void committed;
117
+ */
118
+ export function commitSeriesSlots(ctx) {
119
+ for (const slot of ctx.seriesSlots.values()) {
120
+ commitSeriesSlot(slot);
121
+ }
122
+ }
123
+ /**
124
+ * Reset every `state.series` live head to its last committed value before
125
+ * tick compute, so a re-write refines from the committed baseline and a
126
+ * tick without a write reads the committed head. Does NOT advance length.
127
+ *
128
+ * @since 0.9
129
+ * @stable
130
+ * @example
131
+ * // resetSeriesHeads(ctx);
132
+ * const reset = true;
133
+ * void reset;
134
+ */
135
+ export function resetSeriesHeads(ctx) {
136
+ for (const slot of ctx.seriesSlots.values()) {
137
+ resetSeriesSlotHead(slot);
138
+ }
139
+ }
87
140
  //# sourceMappingURL=lifecycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/state/lifecycle.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAuB/D;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAmB;IACxD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAmB;IAChD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,GAAmB;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,GAAG,CAAC,UAAU,CAAC,GAAG,CAA6B,GAAG,EAAE;YAChD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAmB;IACnD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,GAAG,CAAC,GAAG,CAAC,GAAG;YACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;SAC5C,CAAC;IACN,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC7B,GAAmB,EACnB,KAAwC;IAExC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/state/lifecycle.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAG/D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAqB3F;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAmB;IACxD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAmB;IAChD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,GAAmB;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,GAAG,CAAC,UAAU,CAAC,GAAG,CAA6B,GAAG,EAAE;YAChD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAmB;IACnD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,GAAG,CAAC,GAAG,CAAC,GAAG;YACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;SAC5C,CAAC;IACN,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC7B,GAAmB,EACnB,KAAwC;IAExC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAmB;IAClD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAmB;IACjD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAmB;IAChD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9B,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 { RuntimeContext } from \"../runtimeContext.js\";\nimport { advanceSeriesSlot, commitSeriesSlot, resetSeriesSlotHead } from \"./seriesSlot.js\";\n\n/**\n * Persisted representation for a runtime state slot. Keys use\n * `${slotId}:state`, matching the compiler-injected slot id plus the\n * state namespace suffix.\n *\n * @since 0.4\n * @stable\n * @example\n * const snapshot: StateSlotSnapshot<number> = {\n * committed: 1,\n * tentative: 2,\n * };\n * void snapshot;\n */\nexport type StateSlotSnapshot<T> = {\n readonly committed: T;\n readonly tentative: T;\n};\n\n/**\n * Reset all non-`state.tick.*` tentative values before tick compute.\n *\n * @since 0.4\n * @stable\n * @example\n * // resetTentativeStateSlots(ctx);\n * const called = true;\n * void called;\n */\nexport function resetTentativeStateSlots(ctx: RuntimeContext): void {\n for (const slot of ctx.stateSlots.values()) {\n slot.onBarTick();\n }\n}\n\n/**\n * Commit all non-`state.tick.*` tentative values after close compute.\n *\n * @since 0.4\n * @stable\n * @example\n * // commitStateSlots(ctx);\n * const called = true;\n * void called;\n */\nexport function commitStateSlots(ctx: RuntimeContext): void {\n for (const slot of ctx.stateSlots.values()) {\n slot.onBarClose();\n }\n}\n\n/**\n * Flush runtime state slots into the backing {@link StateStore}.\n *\n * @since 0.4\n * @stable\n * @example\n * // flushStateSlots(ctx);\n * const called = true;\n * void called;\n */\nexport function flushStateSlots(ctx: RuntimeContext): void {\n for (const [key, slot] of ctx.stateSlots.entries()) {\n ctx.stateStore.set<StateSlotSnapshot<unknown>>(key, {\n committed: slot.committed,\n tentative: slot.tentative,\n });\n }\n}\n\n/**\n * Serialise runtime state slots into a snapshot payload.\n *\n * @since 0.5\n * @stable\n * @example\n * // const slots = serialiseStateSlots(ctx);\n * const slots = {};\n * void slots;\n */\nexport function serialiseStateSlots(ctx: RuntimeContext): Readonly<Record<string, unknown>> {\n const out: Record<string, unknown> = {};\n for (const [key, slot] of ctx.stateSlots.entries()) {\n out[key] = {\n committed: slot.serialise(slot.committed),\n tentative: slot.serialise(slot.tentative),\n };\n }\n return Object.freeze(out);\n}\n\n/**\n * Seed restored state-slot payloads into the backing slot store.\n *\n * @since 0.5\n * @stable\n * @example\n * // restoreStateSlots(ctx, snapshot.slots);\n * const restored = true;\n * void restored;\n */\nexport function restoreStateSlots(\n ctx: RuntimeContext,\n slots: Readonly<Record<string, unknown>>,\n): void {\n ctx.stateSlots.clear();\n for (const [key, value] of Object.entries(slots)) {\n ctx.stateStore.set(key, value);\n }\n}\n\n/**\n * Advance every `state.series` ring once for a new close bar — append a\n * fresh `NaN` head so the prior committed head slides to index 1. Runs\n * BEFORE compute on close, so a slot first allocated mid-compute (already\n * holding its seeded head) is not present here and is not double-advanced.\n *\n * @since 0.9\n * @stable\n * @example\n * // advanceSeriesSlots(ctx);\n * const advanced = true;\n * void advanced;\n */\nexport function advanceSeriesSlots(ctx: RuntimeContext): void {\n for (const slot of ctx.seriesSlots.values()) {\n advanceSeriesSlot(slot);\n }\n}\n\n/**\n * Commit every `state.series` live head as its bar-close value after\n * close compute, so the next advance retains it and a tick can reset to\n * it.\n *\n * @since 0.9\n * @stable\n * @example\n * // commitSeriesSlots(ctx);\n * const committed = true;\n * void committed;\n */\nexport function commitSeriesSlots(ctx: RuntimeContext): void {\n for (const slot of ctx.seriesSlots.values()) {\n commitSeriesSlot(slot);\n }\n}\n\n/**\n * Reset every `state.series` live head to its last committed value before\n * tick compute, so a re-write refines from the committed baseline and a\n * tick without a write reads the committed head. Does NOT advance length.\n *\n * @since 0.9\n * @stable\n * @example\n * // resetSeriesHeads(ctx);\n * const reset = true;\n * void reset;\n */\nexport function resetSeriesHeads(ctx: RuntimeContext): void {\n for (const slot of ctx.seriesSlots.values()) {\n resetSeriesSlotHead(slot);\n }\n}\n"]}