@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 +1 @@
1
- {"version":3,"file":"stateNamespace.d.ts","sourceRoot":"","sources":["../../src/state/stateNamespace.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,8BAA8B,CAAC;AA0ChF;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,CAwBpD"}
1
+ {"version":3,"file":"stateNamespace.d.ts","sourceRoot":"","sources":["../../src/state/stateNamespace.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAsDhF;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,CAwBpD"}
@@ -2,7 +2,18 @@
2
2
  // See the LICENSE file in the repo root for full license text.
3
3
  import { ACTIVE_RUNTIME_CONTEXT } from "../runtimeContext.js";
4
4
  import { asMutableSlot, StateSlot } from "./stateSlot.js";
5
- const stateKey = (slotId) => `${slotId}:state`;
5
+ /**
6
+ * Compose the runtime's `state.*` slot key from the compiler-injected
7
+ * `slotId` plus the active context's `slotIdPrefix`. The primary runner
8
+ * has an absent / empty prefix — its keys stay byte-identical to the
9
+ * Phase-1 `${slotId}:state` shape so single-script snapshots load
10
+ * unchanged. `DepRunner` contexts carry `dep:<localId>/`,
11
+ * `SiblingRunner` contexts carry `export:<exportName>/`.
12
+ *
13
+ * @since 0.7
14
+ * @internal
15
+ */
16
+ const stateKey = (ctx, slotId) => `${ctx.slotIdPrefix ?? ""}${slotId}:state`;
6
17
  function getCtx(name) {
7
18
  const ctx = ACTIVE_RUNTIME_CONTEXT.current;
8
19
  if (ctx === null) {
@@ -12,7 +23,7 @@ function getCtx(name) {
12
23
  }
13
24
  function getOrAllocate(name, slotId, init, tickPersistent) {
14
25
  const ctx = getCtx(name);
15
- const key = stateKey(slotId);
26
+ const key = stateKey(ctx, slotId);
16
27
  const existing = ctx.stateSlots.get(key);
17
28
  if (existing !== undefined) {
18
29
  return asMutableSlot(existing);
@@ -1 +1 @@
1
- {"version":3,"file":"stateNamespace.js","sourceRoot":"","sources":["../../src/state/stateNamespace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stateNamespace.js","sourceRoot":"","sources":["../../src/state/stateNamespace.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 { MutableSlot, StateNamespace } from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { asMutableSlot, StateSlot } from \"./stateSlot.js\";\n\ntype StoredStateSlot<T> = {\n readonly committed: T;\n readonly tentative: T;\n};\n\n/**\n * Compose the runtime's `state.*` slot key from the compiler-injected\n * `slotId` plus the active context's `slotIdPrefix`. The primary runner\n * has an absent / empty prefix — its keys stay byte-identical to the\n * Phase-1 `${slotId}:state` shape so single-script snapshots load\n * unchanged. `DepRunner` contexts carry `dep:<localId>/`,\n * `SiblingRunner` contexts carry `export:<exportName>/`.\n *\n * @since 0.7\n * @internal\n */\nconst stateKey = (ctx: RuntimeContext, slotId: string): string =>\n `${ctx.slotIdPrefix ?? \"\"}${slotId}:state`;\n\nfunction getCtx(name: string): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(`${name} called outside an active script step`);\n }\n return ctx;\n}\n\nfunction getOrAllocate<T>(\n name: string,\n slotId: string,\n init: T,\n tickPersistent: boolean,\n): MutableSlot<T> {\n const ctx = getCtx(name);\n const key = stateKey(ctx, slotId);\n const existing = ctx.stateSlots.get(key);\n if (existing !== undefined) {\n return asMutableSlot(existing as StateSlot<T>);\n }\n\n const stored = ctx.stateStore.get<StoredStateSlot<T>>(key);\n const slot = new StateSlot<T>(stored?.committed ?? init, tickPersistent);\n if (stored !== undefined) {\n slot.tentative = stored.tentative;\n }\n ctx.stateSlots.set(key, slot as StateSlot<unknown>);\n return asMutableSlot(slot);\n}\n\n/**\n * Build the runtime `state` namespace installed on `ComputeContext`.\n * Each function accepts the compiler-injected `slotId` as its first\n * parameter, then the script-facing init value.\n *\n * @since 0.4\n * @stable\n * @example\n * const ns = buildStateNamespace();\n * void ns.float;\n */\nexport function buildStateNamespace(): StateNamespace {\n const ns = {\n float: (slotId: string, init: number): MutableSlot<number> =>\n getOrAllocate(\"state.float\", slotId, init, false),\n int: (slotId: string, init: number): MutableSlot<number> =>\n getOrAllocate(\"state.int\", slotId, init, false),\n bool: (slotId: string, init: boolean): MutableSlot<boolean> =>\n getOrAllocate(\"state.bool\", slotId, init, false),\n string: (slotId: string, init: string): MutableSlot<string> =>\n getOrAllocate(\"state.string\", slotId, init, false),\n tick: {\n float: (slotId: string, init: number): MutableSlot<number> =>\n getOrAllocate(\"state.tick.float\", slotId, init, true),\n int: (slotId: string, init: number): MutableSlot<number> =>\n getOrAllocate(\"state.tick.int\", slotId, init, true),\n bool: (slotId: string, init: boolean): MutableSlot<boolean> =>\n getOrAllocate(\"state.tick.bool\", slotId, init, true),\n string: (slotId: string, init: string): MutableSlot<string> =>\n getOrAllocate(\"state.tick.string\", slotId, init, true),\n },\n };\n Object.freeze(ns.tick);\n Object.freeze(ns);\n return ns as unknown as StateNamespace;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"stateSlot.js","sourceRoot":"","sources":["../../src/state/stateSlot.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAwB/D;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,SAAS;IAME;IACC;IANrB,SAAS,CAAI;IACb,SAAS,CAAI;IAEb,YACI,IAAO,EACS,cAAuB,EACtB,cAAuC,EAAE;QAD1C,mBAAc,GAAd,cAAc,CAAS;QACtB,gBAAW,GAAX,WAAW,CAA8B;QAE1D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,GAAG;QACC,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IACjE,CAAC;IAED,GAAG,CAAC,KAAQ;QACR,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,UAAU;QACN,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACpC,CAAC;IACL,CAAC;IAED,SAAS;QACL,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACpC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,KAAQ;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAC7D,CAAC;CACJ;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAI,IAAkB;IAC/C,OAAO;QACH,IAAI,KAAK;YACL,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,KAAK,CAAC,KAAQ;YACd,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"stateSlot.js","sourceRoot":"","sources":["../../src/state/stateSlot.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAwB/D;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,SAAS;IAME;IACC;IANrB,SAAS,CAAI;IACb,SAAS,CAAI;IAEb,YACI,IAAO,EACS,cAAuB,EACtB,cAAuC,EAAE;QAD1C,mBAAc,GAAd,cAAc,CAAS;QACtB,gBAAW,GAAX,WAAW,CAA8B;QAE1D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,GAAG;QACC,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IACjE,CAAC;IAED,GAAG,CAAC,KAAQ;QACR,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,UAAU;QACN,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACpC,CAAC;IACL,CAAC;IAED,SAAS;QACL,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACpC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,KAAQ;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAC7D,CAAC;CACJ;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAI,IAAkB;IAC/C,OAAO;QACH,IAAI,KAAK;YACL,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,KAAK,CAAC,KAAQ;YACd,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;KACJ,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\nimport type { MutableSlot } from \"@invinite-org/chartlang-core\";\n\n/**\n * Optional PLAN §6.9 state-slot marshal hooks. Phase-4 `state.*`\n * primitives use the identity default because their values are already\n * JSON-clean; future primitives with typed-array internals can provide\n * explicit hooks.\n *\n * @since 0.5\n * @stable\n * @example\n * const hooks: StateSlotSerialisers<number> = {\n * serialiseState: (value) => value,\n * deserialiseState: (value) => Number(value),\n * };\n * void hooks;\n */\nexport type StateSlotSerialisers<T> = {\n readonly serialiseState?: (value: T) => unknown;\n readonly deserialiseState?: (value: unknown) => T;\n};\n\n/**\n * Internal runtime slot behind script-facing {@link MutableSlot}\n * proxies. `tickPersistent: true` models `state.tick.*`, whose writes\n * commit immediately; `false` models `state.*`, whose writes remain\n * tentative until bar close.\n *\n * @since 0.4\n * @stable\n * @example\n * const slot = new StateSlot(0, false);\n * slot.set(5);\n * slot.onBarClose();\n * const pair = { committed: slot.committed, tentative: slot.tentative };\n * void pair;\n */\nexport class StateSlot<T> {\n committed: T;\n tentative: T;\n\n constructor(\n init: T,\n public readonly tickPersistent: boolean,\n private readonly serialisers: StateSlotSerialisers<T> = {},\n ) {\n this.committed = init;\n this.tentative = init;\n }\n\n get(): T {\n return this.tickPersistent ? this.committed : this.tentative;\n }\n\n set(value: T): void {\n if (this.tickPersistent) {\n this.committed = value;\n } else {\n this.tentative = value;\n }\n }\n\n onBarClose(): void {\n if (!this.tickPersistent) {\n this.committed = this.tentative;\n }\n }\n\n onBarTick(): void {\n if (!this.tickPersistent) {\n this.tentative = this.committed;\n }\n }\n\n serialise(value: T): unknown {\n return this.serialisers.serialiseState?.(value) ?? value;\n }\n}\n\n/**\n * Build the script-facing mutable proxy for a runtime state slot.\n *\n * @since 0.4\n * @stable\n * @example\n * const slot = asMutableSlot(new StateSlot(1, false));\n * slot.value = 2;\n * void slot.value;\n */\nexport function asMutableSlot<T>(slot: StateSlot<T>): MutableSlot<T> {\n return {\n get value(): T {\n return slot.get();\n },\n set value(value: T) {\n slot.set(value);\n },\n };\n}\n"]}
@@ -1,9 +1,12 @@
1
1
  /**
2
- * Per-script slot store the runtime hands stateful primitives. Phase 1
2
+ * Per-runner slot store the runtime hands stateful primitives. Phase 1
3
3
  * ships only the in-memory default — `inMemoryStateStore()` — keyed
4
- * by the compiler-assigned slot id from PLAN.md §5.5. Phase 5 layers a
5
- * `PersistentStateStore` sub-interface on top with snapshot
6
- * `load` / `save` / `clear` methods (see PLAN.md §6.9). Implementations
4
+ * by `${slotIdPrefix ?? ""}${slotId}:state` where the slot id is the
5
+ * compiler-assigned id and the prefix is the active
6
+ * `RuntimeContext.slotIdPrefix` (`""` for primary, `dep:<localId>/`
7
+ * for deps, `export:<exportName>/` for siblings — see Task 5). Phase 5
8
+ * layers a `PersistentStateStore` sub-interface on top with snapshot
9
+ * `load` / `save` / `clear` methods. Implementations
7
10
  * (IDB-backed for browsers, caller-supplied for servers) satisfy the
8
11
  * Phase-5 sub-interface; the Phase-1 surface stays stable and
9
12
  * additive.
@@ -1 +1 @@
1
- {"version":3,"file":"stateStore.d.ts","sourceRoot":"","sources":["../src/stateStore.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,UAAU,GAAG;IACrB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACtC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACvC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,KAAK,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,IAAI,UAAU,CAgB/C"}
1
+ {"version":3,"file":"stateStore.d.ts","sourceRoot":"","sources":["../src/stateStore.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,UAAU,GAAG;IACrB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACtC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACvC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,KAAK,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,IAAI,UAAU,CAgB/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"stateStore.js","sourceRoot":"","sources":["../src/stateStore.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AA2B/D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,OAAO;QACH,GAAG,CAAI,EAAU;YACb,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAkB,CAAC;QAC1C,CAAC;QACD,GAAG,CAAI,EAAU,EAAE,KAAQ;YACvB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,GAAG,CAAC,EAAU;YACV,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,KAAK;YACD,KAAK,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"stateStore.js","sourceRoot":"","sources":["../src/stateStore.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AA8B/D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,OAAO;QACH,GAAG,CAAI,EAAU;YACb,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAkB,CAAC;QAC1C,CAAC;QACD,GAAG,CAAI,EAAU,EAAE,KAAQ;YACvB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,GAAG,CAAC,EAAU;YACV,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,KAAK;YACD,KAAK,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACJ,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\n/**\n * Per-runner slot store the runtime hands stateful primitives. Phase 1\n * ships only the in-memory default — `inMemoryStateStore()` — keyed\n * by `${slotIdPrefix ?? \"\"}${slotId}:state` where the slot id is the\n * compiler-assigned id and the prefix is the active\n * `RuntimeContext.slotIdPrefix` (`\"\"` for primary, `dep:<localId>/`\n * for deps, `export:<exportName>/` for siblings — see Task 5). Phase 5\n * layers a `PersistentStateStore` sub-interface on top with snapshot\n * `load` / `save` / `clear` methods. Implementations\n * (IDB-backed for browsers, caller-supplied for servers) satisfy the\n * Phase-5 sub-interface; the Phase-1 surface stays stable and\n * additive.\n *\n * @since 0.1\n * @example\n * // import { inMemoryStateStore } from \"@invinite-org/chartlang-runtime\";\n * // const store = inMemoryStateStore();\n * // store.set<{ count: number }>(\"ta:ema:slot#0\", { count: 1 });\n * // store.has(\"ta:ema:slot#0\"); // true\n * // store.get<{ count: number }>(\"ta:ema:slot#0\"); // { count: 1 }\n */\nexport type StateStore = {\n get<T>(slotId: string): T | undefined;\n set<T>(slotId: string, value: T): void;\n has(slotId: string): boolean;\n clear(): void;\n};\n\n/**\n * Default Phase-1 `StateStore` — a process-local `Map<string, unknown>`\n * with last-write-wins semantics. Used by the CLI, the conformance\n * suite, and the host-worker until Phase 5 wires the IDB backing.\n *\n * @since 0.1\n * @example\n * // import { inMemoryStateStore } from \"@invinite-org/chartlang-runtime\";\n * // const store = inMemoryStateStore();\n * // store.set(\"slot#0\", 42);\n * // store.get<number>(\"slot#0\"); // 42\n * // store.clear();\n * // store.has(\"slot#0\"); // false\n */\nexport function inMemoryStateStore(): StateStore {\n const store = new Map<string, unknown>();\n return {\n get<T>(id: string): T | undefined {\n return store.get(id) as T | undefined;\n },\n set<T>(id: string, value: T): void {\n store.set(id, value);\n },\n has(id: string): boolean {\n return store.has(id);\n },\n clear(): void {\n store.clear();\n },\n };\n}\n"]}
@@ -110,7 +110,7 @@ export type StreamState = {
110
110
  };
111
111
  /**
112
112
  * Construct a fresh `StreamState`. The ring-buffer capacity is the
113
- * compiler-emitted `manifest.maxLookback + 1` per PLAN.md §6.6
113
+ * compiler-emitted `manifest.maxLookback + 1`
114
114
  * (caller must enforce `capacity >= 1`). All buffers start empty;
115
115
  * the `BarView` starts with `NaN` prices, `0` time and volume, and the
116
116
  * supplied `symbol` / `interval` constants. `taSlots` is an empty map.
@@ -60,7 +60,7 @@ function recomputeDerivedBuffers(ohlcv, snapshot) {
60
60
  }
61
61
  /**
62
62
  * Construct a fresh `StreamState`. The ring-buffer capacity is the
63
- * compiler-emitted `manifest.maxLookback + 1` per PLAN.md §6.6
63
+ * compiler-emitted `manifest.maxLookback + 1`
64
64
  * (caller must enforce `capacity >= 1`). All buffers start empty;
65
65
  * the `BarView` starts with `NaN` prices, `0` time and volume, and the
66
66
  * supplied `symbol` / `interval` constants. `taSlots` is an empty map.
@@ -1 +1 @@
1
- {"version":3,"file":"streamState.js","sourceRoot":"","sources":["../src/streamState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streamState.js","sourceRoot":"","sources":["../src/streamState.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 { Bar, BarViewport, Series, StreamSnapshot } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"./ringBuffer.js\";\nimport { makeSeriesView } from \"./seriesView.js\";\n\ntype DerivedBarValues = Readonly<{\n hl2: number;\n hlc3: number;\n ohlc4: number;\n hlcc4: number;\n}>;\n\nfunction deriveBarSources(rawBar: Bar): DerivedBarValues {\n return {\n hl2: (rawBar.high + rawBar.low) / 2,\n hlc3: (rawBar.high + rawBar.low + rawBar.close) / 3,\n ohlc4: (rawBar.open + rawBar.high + rawBar.low + rawBar.close) / 4,\n hlcc4: (rawBar.high + rawBar.low + rawBar.close + rawBar.close) / 4,\n };\n}\n\n/**\n * The per-stream OHLCV ring-buffer set. Each field is a\n * `Float64RingBuffer` of identical capacity. Derived sources\n * (`hl2`, `hlc3`, `ohlc4`, `hlcc4`) are pre-computed by Task 6's\n * execution loop alongside the raw OHLCV fields so primitives can\n * read them as plain `Series<number>` without re-computing per\n * lookup.\n *\n * @since 0.1\n * @example\n * // import { createStreamState } from \"@invinite-org/chartlang-runtime\";\n * // const { ohlcv } = createStreamState({\n * // interval: \"1D\",\n * // capacity: 5,\n * // symbol: \"AAPL\",\n * // });\n * // ohlcv.close.capacity; // 5\n */\nexport type OhlcvBuffers = {\n readonly time: Float64RingBuffer;\n readonly open: Float64RingBuffer;\n readonly high: Float64RingBuffer;\n readonly low: Float64RingBuffer;\n readonly close: Float64RingBuffer;\n readonly volume: Float64RingBuffer;\n readonly hl2: Float64RingBuffer;\n readonly hlc3: Float64RingBuffer;\n readonly ohlc4: Float64RingBuffer;\n readonly hlcc4: Float64RingBuffer;\n};\n\n/**\n * Mutable scalar view of the current bar. Identity stays stable across\n * the run — Task 6's execution loop mutates the fields in place per\n * bar so scripts that destructure `bar` in `compute` keep seeing fresh\n * values without rebinding.\n *\n * `symbol` and `interval` are constant for a given `StreamState`\n * instance; the rest are NaN / 0 before the first bar lands.\n *\n * @since 0.1\n * @example\n * // import { createStreamState } from \"@invinite-org/chartlang-runtime\";\n * // const { bar } = createStreamState({\n * // interval: \"1D\",\n * // capacity: 5,\n * // symbol: \"AAPL\",\n * // });\n * // bar.symbol; // \"AAPL\"\n * // bar.interval; // \"1D\"\n * // bar.close; // NaN until the first bar\n */\nexport type BarView = {\n time: number;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n hl2: number;\n hlc3: number;\n ohlc4: number;\n hlcc4: number;\n symbol: string;\n interval: string;\n viewport: BarViewport;\n};\n\n/**\n * Everything the runtime owns for a single interval stream — the OHLCV\n * ring buffers, the mutable `BarView`, cached `Series<number>` Proxies\n * for each source field (one identity per buffer for the lifetime of\n * the stream), and a `taSlots` map keyed by compiler-assigned slot id\n * that stateful primitives in Task 7 use as their hidden-state\n * scratchpad.\n *\n * Phase 1 ships single-stream scripts; secondary streams via\n * `request.security` arrive in Phase 5 and reuse this exact shape per\n * interval.\n *\n * @since 0.1\n * @example\n * // import { createStreamState } from \"@invinite-org/chartlang-runtime\";\n * // const stream = createStreamState({\n * // interval: \"1D\",\n * // capacity: 21,\n * // symbol: \"AAPL\",\n * // });\n * // stream.taSlots.size; // 0\n */\nexport type StreamState = {\n readonly interval: string;\n readonly ohlcv: OhlcvBuffers;\n readonly bar: BarView;\n readonly seriesViews: {\n readonly time: Series<number>;\n readonly open: Series<number>;\n readonly high: Series<number>;\n readonly low: Series<number>;\n readonly close: Series<number>;\n readonly volume: Series<number>;\n readonly hl2: Series<number>;\n readonly hlc3: Series<number>;\n readonly ohlc4: Series<number>;\n readonly hlcc4: Series<number>;\n };\n readonly taSlots: Map<string, unknown>;\n serialiseSnapshot(): StreamSnapshot;\n restoreFromSnapshot(snapshot: StreamSnapshot): void;\n};\n\nconst rawBufferKeys = [\"time\", \"open\", \"high\", \"low\", \"close\", \"volume\"] as const;\n\ntype RawBufferKey = (typeof rawBufferKeys)[number];\n\nfunction rawBuffers(ohlcv: OhlcvBuffers): Readonly<Record<RawBufferKey, Float64RingBuffer>> {\n return {\n time: ohlcv.time,\n open: ohlcv.open,\n high: ohlcv.high,\n low: ohlcv.low,\n close: ohlcv.close,\n volume: ohlcv.volume,\n };\n}\n\nfunction valueAt(values: ReadonlyArray<number | null>, index: number): number {\n const value = values[index];\n return value === null || value === undefined ? Number.NaN : value;\n}\n\nfunction recomputeDerivedBuffers(ohlcv: OhlcvBuffers, snapshot: StreamSnapshot): void {\n const { headIndex, filled, buffers } = snapshot;\n const capacity = ohlcv.hl2.capacity;\n const derived = {\n hl2: new Array<number | null>(capacity),\n hlc3: new Array<number | null>(capacity),\n ohlc4: new Array<number | null>(capacity),\n hlcc4: new Array<number | null>(capacity),\n };\n for (let i = 0; i < capacity; i += 1) {\n const high = valueAt(buffers.high, i);\n const low = valueAt(buffers.low, i);\n const open = valueAt(buffers.open, i);\n const close = valueAt(buffers.close, i);\n derived.hl2[i] = Number.isNaN(high) || Number.isNaN(low) ? null : (high + low) / 2;\n derived.hlc3[i] =\n Number.isNaN(high) || Number.isNaN(low) || Number.isNaN(close)\n ? null\n : (high + low + close) / 3;\n derived.ohlc4[i] =\n Number.isNaN(open) || Number.isNaN(high) || Number.isNaN(low) || Number.isNaN(close)\n ? null\n : (open + high + low + close) / 4;\n derived.hlcc4[i] =\n Number.isNaN(high) || Number.isNaN(low) || Number.isNaN(close)\n ? null\n : (high + low + close + close) / 4;\n }\n ohlcv.hl2.restoreFromSnapshotBuffer({ headIndex, filled, values: derived.hl2 });\n ohlcv.hlc3.restoreFromSnapshotBuffer({ headIndex, filled, values: derived.hlc3 });\n ohlcv.ohlc4.restoreFromSnapshotBuffer({ headIndex, filled, values: derived.ohlc4 });\n ohlcv.hlcc4.restoreFromSnapshotBuffer({ headIndex, filled, values: derived.hlcc4 });\n}\n\n/**\n * Construct a fresh `StreamState`. The ring-buffer capacity is the\n * compiler-emitted `manifest.maxLookback + 1`\n * (caller must enforce `capacity >= 1`). All buffers start empty;\n * the `BarView` starts with `NaN` prices, `0` time and volume, and the\n * supplied `symbol` / `interval` constants. `taSlots` is an empty map.\n *\n * @since 0.1\n * @example\n * // import { createStreamState } from \"@invinite-org/chartlang-runtime\";\n * // const stream = createStreamState({\n * // interval: \"5m\",\n * // capacity: 12,\n * // symbol: \"BTCUSD\",\n * // });\n * // stream.bar.close; // NaN\n * // stream.ohlcv.close.length; // 0\n */\nexport function createStreamState(args: {\n interval: string;\n capacity: number;\n symbol: string;\n}): StreamState {\n const { interval, capacity, symbol } = args;\n const ohlcv: OhlcvBuffers = {\n time: new Float64RingBuffer(capacity),\n open: new Float64RingBuffer(capacity),\n high: new Float64RingBuffer(capacity),\n low: new Float64RingBuffer(capacity),\n close: new Float64RingBuffer(capacity),\n volume: new Float64RingBuffer(capacity),\n hl2: new Float64RingBuffer(capacity),\n hlc3: new Float64RingBuffer(capacity),\n ohlc4: new Float64RingBuffer(capacity),\n hlcc4: new Float64RingBuffer(capacity),\n };\n const bar: BarView = {\n time: 0,\n open: Number.NaN,\n high: Number.NaN,\n low: Number.NaN,\n close: Number.NaN,\n volume: 0,\n hl2: Number.NaN,\n hlc3: Number.NaN,\n ohlc4: Number.NaN,\n hlcc4: Number.NaN,\n symbol,\n interval,\n viewport: Object.freeze({ fromTime: 0, toTime: 0 }),\n };\n const seriesViews: StreamState[\"seriesViews\"] = {\n time: makeSeriesView<number>(ohlcv.time),\n open: makeSeriesView<number>(ohlcv.open),\n high: makeSeriesView<number>(ohlcv.high),\n low: makeSeriesView<number>(ohlcv.low),\n close: makeSeriesView<number>(ohlcv.close),\n volume: makeSeriesView<number>(ohlcv.volume),\n hl2: makeSeriesView<number>(ohlcv.hl2),\n hlc3: makeSeriesView<number>(ohlcv.hlc3),\n ohlc4: makeSeriesView<number>(ohlcv.ohlc4),\n hlcc4: makeSeriesView<number>(ohlcv.hlcc4),\n };\n const stream: StreamState = {\n interval,\n ohlcv,\n bar,\n seriesViews,\n taSlots: new Map<string, unknown>(),\n serialiseSnapshot(): StreamSnapshot {\n const close = ohlcv.close.serialiseSnapshotBuffer();\n const buffers = rawBuffers(ohlcv);\n return Object.freeze({\n interval: bar.interval,\n headIndex: close.headIndex,\n filled: close.filled,\n buffers: Object.freeze({\n time: buffers.time.serialiseSnapshotBuffer().values,\n open: buffers.open.serialiseSnapshotBuffer().values,\n high: buffers.high.serialiseSnapshotBuffer().values,\n low: buffers.low.serialiseSnapshotBuffer().values,\n close: close.values,\n volume: buffers.volume.serialiseSnapshotBuffer().values,\n }),\n });\n },\n restoreFromSnapshot(snapshot: StreamSnapshot): void {\n const buffers = rawBuffers(ohlcv);\n for (const key of rawBufferKeys) {\n buffers[key].restoreFromSnapshotBuffer({\n headIndex: snapshot.headIndex,\n filled: snapshot.filled,\n values: snapshot.buffers[key],\n });\n }\n recomputeDerivedBuffers(ohlcv, snapshot);\n const current = snapshot.headIndex;\n if (snapshot.filled === 0 || current < 0) {\n bar.time = 0;\n bar.open = Number.NaN;\n bar.high = Number.NaN;\n bar.low = Number.NaN;\n bar.close = Number.NaN;\n bar.volume = 0;\n bar.hl2 = Number.NaN;\n bar.hlc3 = Number.NaN;\n bar.ohlc4 = Number.NaN;\n bar.hlcc4 = Number.NaN;\n } else {\n bar.time = valueAt(snapshot.buffers.time, current);\n bar.open = valueAt(snapshot.buffers.open, current);\n bar.high = valueAt(snapshot.buffers.high, current);\n bar.low = valueAt(snapshot.buffers.low, current);\n bar.close = valueAt(snapshot.buffers.close, current);\n bar.volume = valueAt(snapshot.buffers.volume, current);\n bar.hl2 = (bar.high + bar.low) / 2;\n bar.hlc3 = (bar.high + bar.low + bar.close) / 3;\n bar.ohlc4 = (bar.open + bar.high + bar.low + bar.close) / 4;\n bar.hlcc4 = (bar.high + bar.low + bar.close + bar.close) / 4;\n }\n bar.interval = snapshot.interval;\n },\n };\n return stream;\n}\n\n/**\n * Append a finalised candle to a stream — extends the OHLCV ring buffers\n * by one bar and writes every field of the mutable `BarView` (including\n * `time` / `open`). Used by both the main close path and secondary\n * stream history.\n *\n * @since 0.5\n * @example\n * // appendBarToStream(stream, rawBar);\n */\nexport function appendBarToStream(stream: StreamState, rawBar: Bar): void {\n const values = deriveBarSources(rawBar);\n const { ohlcv, bar } = stream;\n ohlcv.time.append(rawBar.time);\n ohlcv.open.append(rawBar.open);\n ohlcv.high.append(rawBar.high);\n ohlcv.low.append(rawBar.low);\n ohlcv.close.append(rawBar.close);\n ohlcv.volume.append(rawBar.volume);\n ohlcv.hl2.append(values.hl2);\n ohlcv.hlc3.append(values.hlc3);\n ohlcv.ohlc4.append(values.ohlc4);\n ohlcv.hlcc4.append(values.hlcc4);\n bar.time = rawBar.time;\n bar.open = rawBar.open;\n bar.high = rawBar.high;\n bar.low = rawBar.low;\n bar.close = rawBar.close;\n bar.volume = rawBar.volume;\n bar.hl2 = values.hl2;\n bar.hlc3 = values.hlc3;\n bar.ohlc4 = values.ohlc4;\n bar.hlcc4 = values.hlcc4;\n bar.symbol = rawBar.symbol;\n bar.interval = rawBar.interval;\n}\n\n/**\n * Replace the head of every OHLCV ring buffer in a stream and write\n * every field of the `BarView`. Used by the secondary-stream replace\n * path — falls back to {@link appendBarToStream} for the empty-buffer\n * case so the first secondary bar arrives correctly even when delivered\n * as a replace.\n *\n * @since 0.5\n * @example\n * // replaceStreamHead(stream, rawBar);\n */\nexport function replaceStreamHead(stream: StreamState, rawBar: Bar): void {\n if (stream.ohlcv.close.length === 0) {\n appendBarToStream(stream, rawBar);\n return;\n }\n const values = deriveBarSources(rawBar);\n const { ohlcv, bar } = stream;\n ohlcv.time.replaceHead(rawBar.time);\n ohlcv.open.replaceHead(rawBar.open);\n ohlcv.high.replaceHead(rawBar.high);\n ohlcv.low.replaceHead(rawBar.low);\n ohlcv.close.replaceHead(rawBar.close);\n ohlcv.volume.replaceHead(rawBar.volume);\n ohlcv.hl2.replaceHead(values.hl2);\n ohlcv.hlc3.replaceHead(values.hlc3);\n ohlcv.ohlc4.replaceHead(values.ohlc4);\n ohlcv.hlcc4.replaceHead(values.hlcc4);\n bar.time = rawBar.time;\n bar.open = rawBar.open;\n bar.high = rawBar.high;\n bar.low = rawBar.low;\n bar.close = rawBar.close;\n bar.volume = rawBar.volume;\n bar.hl2 = values.hl2;\n bar.hlc3 = values.hlc3;\n bar.ohlc4 = values.ohlc4;\n bar.hlcc4 = values.hlcc4;\n bar.symbol = rawBar.symbol;\n bar.interval = rawBar.interval;\n}\n\n/**\n * Replace the head of the close-side OHLCV ring buffers (close, high,\n * low, volume, derived sources) for a tick within the in-progress bar.\n * `time` and `open` are intentionally untouched — see\n * `packages/runtime/CLAUDE.md` \"onBarTick does NOT touch time / open\"\n * invariant. Mirrors the partial `BarView` update.\n *\n * @since 0.5\n * @example\n * // replaceTickHead(stream, tickBar);\n */\nexport function replaceTickHead(stream: StreamState, rawBar: Bar): void {\n const values = deriveBarSources(rawBar);\n const { ohlcv, bar } = stream;\n ohlcv.close.replaceHead(rawBar.close);\n ohlcv.high.replaceHead(rawBar.high);\n ohlcv.low.replaceHead(rawBar.low);\n ohlcv.volume.replaceHead(rawBar.volume);\n ohlcv.hl2.replaceHead(values.hl2);\n ohlcv.hlc3.replaceHead(values.hlc3);\n ohlcv.ohlc4.replaceHead(values.ohlc4);\n ohlcv.hlcc4.replaceHead(values.hlcc4);\n bar.close = rawBar.close;\n bar.high = rawBar.high;\n bar.low = rawBar.low;\n bar.volume = rawBar.volume;\n bar.hl2 = values.hl2;\n bar.hlc3 = values.hlc3;\n bar.ohlc4 = values.ohlc4;\n bar.hlcc4 = values.hlcc4;\n}\n\n/**\n * Refresh the stream's fallback visible range to the latest `limit`\n * bars ending at the current head.\n *\n * @since 0.5\n * @example\n * // updateFallbackViewport(stream);\n */\nexport function updateFallbackViewport(stream: StreamState, limit = 100): void {\n const length = stream.ohlcv.time.length;\n if (length === 0) {\n stream.bar.viewport = Object.freeze({ fromTime: 0, toTime: 0 });\n return;\n }\n const lookback = Math.min(length - 1, Math.max(0, limit - 1));\n const fromTime = stream.ohlcv.time.at(lookback);\n const toTime = stream.ohlcv.time.at(0);\n stream.bar.viewport = Object.freeze({\n fromTime: Number.isFinite(fromTime) ? fromTime : toTime,\n toTime,\n });\n}\n"]}
package/dist/ta/adl.js CHANGED
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/adl.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
9
9
  // mode) follow chartlang's primitive shape — NOT invinite's
10
10
  // IndicatorPlugin shape.
@@ -1 +1 @@
1
- {"version":3,"file":"adl.js","sourceRoot":"","sources":["../../src/ta/adl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adl.js","sourceRoot":"","sources":["../../src/ta/adl.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//\n// Ported from invinite/src/components/trading-chart/indicators/adl.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape.\n\nimport type { AdlOpts, Series } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView } from \"../seriesView.js\";\n\ntype AdlSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n /** Active cumulative ADL across the closed bars so far. */\n cumAdl: number;\n /** Snapshot of `cumAdl` BEFORE the most recent close-side update. */\n prevClosedCumAdl: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.adl called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(capacity: number): AdlSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n cumAdl: 0,\n prevClosedCumAdl: 0,\n };\n}\n\n/**\n * Per-bar Money-Flow Volume: CLV (close location value) `((close − low)\n * − (high − close)) / (high − low)` multiplied by volume. Returns 0\n * on a zero-range bar (matches invinite's defensive guard) and 0 on\n * any NaN OHLC / volume (matches `safeVolume(NaN) === 0`). The\n * cumulative accumulator stays well-defined across data gaps.\n */\nfunction mfvAt(close: number, high: number, low: number, volume: number): number {\n if (\n !Number.isFinite(close) ||\n !Number.isFinite(high) ||\n !Number.isFinite(low) ||\n !Number.isFinite(volume)\n ) {\n return 0;\n }\n const range = high - low;\n if (range === 0) return 0;\n const clv = (close - low - (high - close)) / range;\n return clv * volume;\n}\n\n/**\n * Accumulation Distribution Line — cumulative money-flow volume\n * `Σ CLV · volume`, where CLV is the close location value\n * `((C − L) − (H − C)) / (H − L)`. Zero-range bars (`high === low`)\n * contribute 0 (matches invinite's guard); NaN OHLC / volume bars\n * contribute 0 (carry the accumulator forward without polluting it).\n *\n * Renders in its own pane (volume category). No warmup — every slot\n * finite from bar 0.\n *\n * **Tick mode.** Replays the head bar's contribution against a\n * snapshot of the prior-close `cumAdl` so a partial-bar tick doesn't\n * pollute the next close's accumulator.\n *\n * @formula adl[t] = adl[t − 1] + ((C[t] − L[t]) − (H[t] − C[t])) / (H[t] − L[t]) · V[t]\n * @warmup 0\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta, plot } from \"@invinite-org/chartlang-core\";\n * // const a = ta.adl();\n * // plot(a);\n */\nexport function adl(slotId: string, _opts?: AdlOpts): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as AdlSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const { close, high, low, volume } = ctx.stream.bar;\n const mfv = mfvAt(close, high, low, volume);\n\n if (ctx.isTick) {\n slot.outBuffer.replaceHead(slot.prevClosedCumAdl + mfv);\n return slot.series;\n }\n\n slot.prevClosedCumAdl = slot.cumAdl;\n slot.cumAdl += mfv;\n slot.outBuffer.append(slot.cumAdl);\n return slot.series;\n}\n"]}
package/dist/ta/adr.d.ts CHANGED
@@ -5,13 +5,13 @@ import type { AdrOpts, Series } from "@invinite-org/chartlang-core";
5
5
  * TradingView. Reads `bar.high` / `bar.low` / `bar.time` directly
6
6
  * (no `source` argument per the absolute-range formula).
7
7
  *
8
- * **Calendar-day boundary.** Phase 2 keys "daily" on the UTC midnight
8
+ * **Calendar-day boundary.** "daily" keys on the UTC midnight
9
9
  * boundary (`Math.floor(time / 86_400_000)`). Bars sharing a day key
10
10
  * are aggregated into a single `(dailyHigh, dailyLow)` pair; the day
11
11
  * range commits to the rolling SMA when the next bar's day key differs.
12
12
  * The in-progress (currently-aggregating) day is NEVER included in the
13
- * average. Phase 4 lifts this onto `syminfo.session` so symbols with
14
- * non-UTC sessions can override the convention.
13
+ * average. A future release lifts this onto `syminfo.session` so symbols
14
+ * with non-UTC sessions can override the convention.
15
15
  *
16
16
  * **Tick mode.** Ticks within the in-progress bar do NOT shift the day
17
17
  * boundary (per the runtime invariant that ticks happen inside the
package/dist/ta/adr.js CHANGED
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/adr.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
9
9
  // mode) follow chartlang's primitive shape — NOT invinite's
10
10
  // IndicatorPlugin shape. ADR derives from `bar.high`/`bar.low`/
@@ -91,13 +91,13 @@ function closeStep(slot, high, low, time) {
91
91
  * TradingView. Reads `bar.high` / `bar.low` / `bar.time` directly
92
92
  * (no `source` argument per the absolute-range formula).
93
93
  *
94
- * **Calendar-day boundary.** Phase 2 keys "daily" on the UTC midnight
94
+ * **Calendar-day boundary.** "daily" keys on the UTC midnight
95
95
  * boundary (`Math.floor(time / 86_400_000)`). Bars sharing a day key
96
96
  * are aggregated into a single `(dailyHigh, dailyLow)` pair; the day
97
97
  * range commits to the rolling SMA when the next bar's day key differs.
98
98
  * The in-progress (currently-aggregating) day is NEVER included in the
99
- * average. Phase 4 lifts this onto `syminfo.session` so symbols with
100
- * non-UTC sessions can override the convention.
99
+ * average. A future release lifts this onto `syminfo.session` so symbols
100
+ * with non-UTC sessions can override the convention.
101
101
  *
102
102
  * **Tick mode.** Ticks within the in-progress bar do NOT shift the day
103
103
  * boundary (per the runtime invariant that ticks happen inside the
@@ -1 +1 @@
1
- {"version":3,"file":"adr.js","sourceRoot":"","sources":["../../src/ta/adr.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AACzE,qEAAqE;AACrE,4DAA4D;AAC5D,gEAAgE;AAChE,oEAAoE;AACpE,kEAAkE;AAClE,wDAAwD;AACxD,qBAAqB;AAIrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,UAAU,GAAG,UAAU,CAAC;AAwB9B,SAAS,MAAM;IACX,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,QAAgB;IAC9C,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,OAAO;QACH,SAAS;QACT,MAAM,EAAE,cAAc,CAAS,SAAS,CAAC;QACzC,MAAM;QACN,eAAe,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;QAC9C,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC,GAAG;QACrB,QAAQ,EAAE,MAAM,CAAC,GAAG;QACpB,aAAa,EAAE,MAAM,CAAC,GAAG;KAC5B,CAAC;AACN,CAAC;AAED,SAAS,SAAS,CAAC,IAAa;IAC5B,wEAAwE;IACxE,oEAAoE;IACpE,2DAA2D;IAC3D,oBAAoB;IACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO;IAChF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC7C,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9C,wCAAwC;QACxC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;AAC5B,CAAC;AAED,SAAS,IAAI,CAAC,IAAa;IACvB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IACjE,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AACxC,CAAC;AAED,SAAS,SAAS,CAAC,IAAa,EAAE,IAAY,EAAE,GAAW,EAAE,IAAY;IACrE,gEAAgE;IAChE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,gEAAgE;QAChE,uCAAuC;QACvC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,8CAA8C;IAC9C,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS;QAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACjD,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,IAAc;IAC9C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAwB,CAAC;IACjE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,cAAc,CAAC;QAC9C,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;IAC3C,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,8DAA8D;QAC9D,iEAAiE;QACjE,kCAAkC;QAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"adr.js","sourceRoot":"","sources":["../../src/ta/adr.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//\n// Ported from invinite/src/components/trading-chart/indicators/adr.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. ADR derives from `bar.high`/`bar.low`/\n// `bar.time` directly — no `source` argument per the absolute-range\n// formula. The Phase-2 calendar-day boundary keys on UTC midnight\n// (`floor(time / 86_400_000)`); Phase 4 lifts this onto\n// `syminfo.session`.\n\nimport type { AdrOpts, Series } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView } from \"../seriesView.js\";\n\nconst DEFAULT_LENGTH = 14;\nconst MS_PER_DAY = 86_400_000;\n\ntype AdrSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly length: number;\n /**\n * Ring of the last `length` COMPLETED daily ranges\n * (`dailyHigh - dailyLow` per UTC calendar day). Capacity = `length`.\n */\n readonly completedRanges: Float64RingBuffer;\n /** Sum of the completed-range ring; refreshed on each commit. */\n sumRanges: number;\n /** Running daily high — folded across all bars sharing `currentDayKey`. */\n dailyHigh: number;\n /** Running daily low. */\n dailyLow: number;\n /**\n * UTC calendar-day key for the in-progress day, or `Number.NaN`\n * before the first bar with a finite time has been folded in.\n */\n currentDayKey: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.adr called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(length: number, capacity: number): AdrSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n length,\n completedRanges: new Float64RingBuffer(length),\n sumRanges: 0,\n dailyHigh: Number.NaN,\n dailyLow: Number.NaN,\n currentDayKey: Number.NaN,\n };\n}\n\nfunction commitDay(slot: AdrSlot): void {\n // Defensive: callers gate on `Number.isFinite(currentDayKey)` so by the\n // time we get here `dailyHigh` / `dailyLow` were set by a prior bar\n // with finite OHLC. Keep the early return as a safety net.\n /* c8 ignore next */\n if (!Number.isFinite(slot.dailyHigh) || !Number.isFinite(slot.dailyLow)) return;\n const range = slot.dailyHigh - slot.dailyLow;\n if (slot.completedRanges.length === slot.length) {\n // Evict the oldest range before append.\n slot.sumRanges -= slot.completedRanges.at(slot.length - 1);\n }\n slot.completedRanges.append(range);\n slot.sumRanges += range;\n}\n\nfunction emit(slot: AdrSlot): number {\n if (slot.completedRanges.length < slot.length) return Number.NaN;\n return slot.sumRanges / slot.length;\n}\n\nfunction closeStep(slot: AdrSlot, high: number, low: number, time: number): number {\n // NaN bars skipped from the daily aggregation per task spec §6.\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(time)) {\n return emit(slot);\n }\n const dayKey = Math.floor(time / MS_PER_DAY);\n if (Number.isNaN(slot.currentDayKey)) {\n slot.currentDayKey = dayKey;\n slot.dailyHigh = high;\n slot.dailyLow = low;\n return emit(slot);\n }\n if (dayKey !== slot.currentDayKey) {\n // Rollover: commit the prior in-progress day, then seed the new\n // day with the current bar's high/low.\n commitDay(slot);\n slot.currentDayKey = dayKey;\n slot.dailyHigh = high;\n slot.dailyLow = low;\n return emit(slot);\n }\n // Same day: extend the in-progress aggregate.\n if (high > slot.dailyHigh) slot.dailyHigh = high;\n if (low < slot.dailyLow) slot.dailyLow = low;\n return emit(slot);\n}\n\n/**\n * Average Daily Range — SMA of `high − low` across the trailing\n * `length` completed UTC calendar days. Default `length = 14` per\n * TradingView. Reads `bar.high` / `bar.low` / `bar.time` directly\n * (no `source` argument per the absolute-range formula).\n *\n * **Calendar-day boundary.** \"daily\" keys on the UTC midnight\n * boundary (`Math.floor(time / 86_400_000)`). Bars sharing a day key\n * are aggregated into a single `(dailyHigh, dailyLow)` pair; the day\n * range commits to the rolling SMA when the next bar's day key differs.\n * The in-progress (currently-aggregating) day is NEVER included in the\n * average. A future release lifts this onto `syminfo.session` so symbols\n * with non-UTC sessions can override the convention.\n *\n * **Tick mode.** Ticks within the in-progress bar do NOT shift the day\n * boundary (per the runtime invariant that ticks happen inside the\n * current bar); the emitted value is the cached SMA of the already-\n * committed days. The next close re-folds the bar into the in-progress\n * day aggregate.\n *\n * **NaN.** Bars with non-finite `high` / `low` / `time` are skipped\n * (no aggregation, no commit); the output reflects only the previously\n * committed days.\n *\n * @formula out[t] = mean( (dailyHigh − dailyLow) over the last `length`\n * completed UTC days, in price units )\n * @warmup length daily bars\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const r = ta.adr({ length: 14 });\n * // plot(r);\n */\nexport function adr(slotId: string, opts?: AdrOpts): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as AdrSlot | undefined;\n if (slot === undefined) {\n const length = opts?.length ?? DEFAULT_LENGTH;\n slot = initSlot(length, ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const { high, low, time } = ctx.stream.bar;\n if (ctx.isTick) {\n // Tick replay does NOT touch the day aggregate or the rolling\n // sum — those are snapshots of the last close. The output is the\n // committed SMA (NaN until warm).\n slot.outBuffer.replaceHead(emit(slot));\n } else {\n slot.outBuffer.append(closeStep(slot, high, low, time));\n }\n return slot.series;\n}\n"]}
package/dist/ta/adx.d.ts CHANGED
@@ -18,7 +18,7 @@ import type { AdxOpts, Series } from "@invinite-org/chartlang-core";
18
18
  * @since 0.2
19
19
  * @stable
20
20
  *
21
- * `opts.offset` shifts the returned series (PLAN.md §9.1)
21
+ * `opts.offset` shifts the returned series —
22
22
  * `series.current` returns the value `offset` bars ago.
23
23
  *
24
24
  * @example
package/dist/ta/adx.js CHANGED
@@ -4,8 +4,8 @@
4
4
  // Ported from invinite/src/components/trading-chart/indicators/adx.ts
5
5
  // plus lib/wilder-directional.ts + lib/adx-from-di.ts
6
6
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
7
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
8
- // provenance contract; the math is the reference, the code style is not.
7
+ // Re-licensed MIT for chartlang. The math is the reference, the code
8
+ // style is not.
9
9
  // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
10
10
  // mode) follow chartlang's primitive shape — NOT invinite's
11
11
  // IndicatorPlugin shape. ADX reads `bar.high` / `bar.low` /
@@ -138,7 +138,7 @@ function tickValue(slot, high, low, close) {
138
138
  * @since 0.2
139
139
  * @stable
140
140
  *
141
- * `opts.offset` shifts the returned series (PLAN.md §9.1)
141
+ * `opts.offset` shifts the returned series —
142
142
  * `series.current` returns the value `offset` bars ago.
143
143
  *
144
144
  * @example
@@ -1 +1 @@
1
- {"version":3,"file":"adx.js","sourceRoot":"","sources":["../../src/ta/adx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adx.js","sourceRoot":"","sources":["../../src/ta/adx.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//\n// Ported from invinite/src/components/trading-chart/indicators/adx.ts\n// plus lib/wilder-directional.ts + lib/adx-from-di.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. ADX reads `bar.high` / `bar.low` /\n// `bar.close` directly (mirrors Pine's `ta.adx(length)` — no source\n// param) and runs the Wilder DI smoothing AND the DX → Wilder-\n// smoothed ADX recurrence incrementally via `wilderStep` (the same\n// per-step recurrence the reference helpers\n// `lib/wilderDirectional.ts` + `lib/adxFromDi.ts` use internally).\n\nimport type { AdxOpts, Series } from \"@invinite-org/chartlang-core\";\n\nimport {\n advanceDirectionalClose,\n initDirectionalState,\n tickDirectional,\n} from \"./lib/directionalState.js\";\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView, makeShiftedSeriesView } from \"../seriesView.js\";\nimport { wilderStep } from \"./lib/wilderSmoothing.js\";\n\nconst DEFAULT_SMOOTHING = 14;\n\ntype AdxSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly smoothingLength: number;\n readonly dirState: ReturnType<typeof initDirectionalState>;\n /** Running sum of DX samples while the ADX seed window fills. */\n dxSeed: number;\n /** Number of DX samples folded into the seed (0..smoothingLength). */\n dxSeedCount: number;\n /** Wilder-smoothed ADX. NaN until the DX seed completes. */\n adx: number;\n /** ADX as of the prior closed bar — used by tick-mode replay. */\n prevClosedAdx: number;\n /** DX seed accumulator + count as of the prior closed bar — used by\n * tick replay when the seed window is still filling. */\n prevClosedDxSeed: number;\n prevClosedDxSeedCount: number;\n /** Per-offset Series-view cache; see `sma.ts` for the convention. */\n readonly shiftedViews: Map<number, Series<number>>;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.adx called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(length: number, smoothingLength: number, capacity: number): AdxSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n smoothingLength,\n dirState: initDirectionalState(length),\n dxSeed: 0,\n dxSeedCount: 0,\n adx: Number.NaN,\n prevClosedAdx: Number.NaN,\n prevClosedDxSeed: 0,\n prevClosedDxSeedCount: 0,\n shiftedViews: new Map(),\n };\n}\n\nfunction viewForOffset(slot: AdxSlot, offset: number): Series<number> {\n if (offset === 0) return slot.series;\n let view = slot.shiftedViews.get(offset);\n if (view === undefined) {\n view = makeShiftedSeriesView<number>(slot.outBuffer, offset);\n slot.shiftedViews.set(offset, view);\n }\n return view;\n}\n\nfunction dxFromDi(plusDi: number, minusDi: number): number {\n const sum = plusDi + minusDi;\n if (sum === 0) return 0;\n return (100 * Math.abs(plusDi - minusDi)) / sum;\n}\n\nfunction closeValue(slot: AdxSlot, high: number, low: number, close: number): number {\n if (!Number.isFinite(high) || !Number.isFinite(low) || !Number.isFinite(close)) {\n // NaN inputs: do not advance the DI / DX recurrence. Hold the\n // prior ADX forward (matches `atr.ts` / `rsi.ts` NaN-input\n // semantics). The DI helper's own NaN handling already returns\n // the held-forward DI, but folding the held-DI into a fresh DX\n // would falsely advance the ADX recurrence.\n return Number.isFinite(slot.adx) ? slot.adx : Number.NaN;\n }\n const { plusDi, minusDi } = advanceDirectionalClose(slot.dirState, high, low, close);\n if (!Number.isFinite(plusDi) || !Number.isFinite(minusDi)) {\n // DI still in warmup — capture prior state for tick replay.\n slot.prevClosedAdx = slot.adx;\n slot.prevClosedDxSeed = slot.dxSeed;\n slot.prevClosedDxSeedCount = slot.dxSeedCount;\n return Number.NaN;\n }\n const dx = dxFromDi(plusDi, minusDi);\n // Capture prior state BEFORE folding this close into the DX seed.\n slot.prevClosedAdx = slot.adx;\n slot.prevClosedDxSeed = slot.dxSeed;\n slot.prevClosedDxSeedCount = slot.dxSeedCount;\n\n if (slot.dxSeedCount < slot.smoothingLength) {\n slot.dxSeed += dx;\n slot.dxSeedCount += 1;\n if (slot.dxSeedCount === slot.smoothingLength) {\n slot.adx = slot.dxSeed / slot.smoothingLength;\n return slot.adx;\n }\n return Number.NaN;\n }\n slot.adx = wilderStep(slot.adx, dx, slot.smoothingLength);\n return slot.adx;\n}\n\nfunction tickValue(slot: AdxSlot, high: number, low: number, close: number): number {\n const { plusDi, minusDi } = tickDirectional(slot.dirState, high, low, close);\n if (!Number.isFinite(plusDi) || !Number.isFinite(minusDi)) {\n // Defensive: `tickDirectional` returns NaN only when the\n // directional-state warmup has not completed (barCount <\n // length + 1) — and at that point `slot.adx` is still NaN\n // (adx warms strictly later than DI). So `Number.isFinite(slot.adx)`\n // is always false on this branch; kept for safety.\n return /* c8 ignore next */ Number.isFinite(slot.adx) ? slot.adx : Number.NaN;\n }\n const dx = dxFromDi(plusDi, minusDi);\n // Defensive: the close-side advance runs first on every bar and\n // raises `prevClosedDxSeedCount` to `smoothingLength` once the\n // seed window completes. The tick-side never observes a partial\n // DX-seed window because the bar that completes it has already\n // committed its close-side increment by the time `tickValue` runs.\n /* c8 ignore start */\n if (slot.prevClosedDxSeedCount < slot.smoothingLength) {\n const provisionalCount = slot.prevClosedDxSeedCount + 1;\n if (provisionalCount < slot.smoothingLength) return Number.NaN;\n return (slot.prevClosedDxSeed + dx) / slot.smoothingLength;\n }\n /* c8 ignore stop */\n return wilderStep(slot.prevClosedAdx, dx, slot.smoothingLength);\n}\n\n/**\n * Wilder's Average Directional Index — single-line trend-strength\n * oscillator bounded in `[0, 100]`. Reads `bar.high` / `bar.low` /\n * `bar.close` directly (mirrors Pine's `ta.adx(length)` — no source\n * param). Composes onto the same Wilder directional-movement\n * recurrence `ta.dmi` runs (`+DI` / `−DI` from Wilder-smoothed `+DM`\n * / `−DM` / TR), then folds DX = `100 · |+DI − −DI| / (+DI + −DI)`\n * into a second Wilder-smoothing window of length\n * `opts.smoothing` (default `14`).\n *\n * @formula +DI, −DI per `ta.dmi(length)` ;\n * DX[t] = (+DI + −DI) === 0 ? 0 : 100 · |+DI − −DI| / (+DI + −DI) ;\n * seed at first defined ADX bar = mean(DX over `smoothing` samples) ;\n * ADX[t] = wilderStep(ADX[t−1], DX[t], smoothing)\n * @warmup length + smoothing − 1\n * @anchors length, smoothing\n * @since 0.2\n * @stable\n *\n * `opts.offset` shifts the returned series —\n * `series.current` returns the value `offset` bars ago.\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const a = ta.adx(\"slot\", 14);\n * // plot(a);\n * // const lagged = ta.adx(\"slot2\", 14, { offset: 5 });\n */\nexport function adx(slotId: string, length: number, opts?: AdxOpts): Series<number> {\n const ctx = getCtx();\n const smoothingLength = opts?.smoothing ?? DEFAULT_SMOOTHING;\n let slot = ctx.stream.taSlots.get(slotId) as AdxSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(length, smoothingLength, ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const bar = ctx.stream.bar;\n if (ctx.isTick) {\n slot.outBuffer.replaceHead(tickValue(slot, bar.high, bar.low, bar.close));\n } else {\n slot.outBuffer.append(closeValue(slot, bar.high, bar.low, bar.close));\n }\n return viewForOffset(slot, opts?.offset ?? 0);\n}\n"]}
package/dist/ta/alma.d.ts CHANGED
@@ -12,9 +12,9 @@ import { type ScalarOrSeries } from "./lib/sourceValue.js";
12
12
  *
13
13
  * **`opts.offset` is the Gaussian-centre position in `[0, 1]`**, NOT
14
14
  * the universal bar-shift. The universal shift on ALMA uses the
15
- * distinct `opts.barShift` field — accepted on the surface (Task 29
16
- * wires the runtime side along with every other Phase-2 primitive's
17
- * `offset`).
15
+ * distinct `opts.barShift` field — accepted on the surface (its
16
+ * runtime side is wired alongside the universal `offset` support on
17
+ * every primitive).
18
18
  *
19
19
  * @formula m = offset · (length − 1) ;
20
20
  * s = length / sigma ;
package/dist/ta/alma.js CHANGED
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/alma.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
9
9
  // mode) follow chartlang's primitive shape — NOT invinite's
10
10
  // IndicatorPlugin shape. The ALMA `offset` opt is the Gaussian centre
@@ -83,9 +83,9 @@ function tickValue(slot, src) {
83
83
  *
84
84
  * **`opts.offset` is the Gaussian-centre position in `[0, 1]`**, NOT
85
85
  * the universal bar-shift. The universal shift on ALMA uses the
86
- * distinct `opts.barShift` field — accepted on the surface (Task 29
87
- * wires the runtime side along with every other Phase-2 primitive's
88
- * `offset`).
86
+ * distinct `opts.barShift` field — accepted on the surface (its
87
+ * runtime side is wired alongside the universal `offset` support on
88
+ * every primitive).
89
89
  *
90
90
  * @formula m = offset · (length − 1) ;
91
91
  * s = length / sigma ;
@@ -1 +1 @@
1
- {"version":3,"file":"alma.js","sourceRoot":"","sources":["../../src/ta/alma.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,uEAAuE;AACvE,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AACzE,qEAAqE;AACrE,4DAA4D;AAC5D,sEAAsE;AACtE,oEAAoE;AACpE,kCAAkC;AAIlC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAuB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,aAAa,GAAG,CAAC,CAAC;AAqBxB,SAAS,MAAM;IACX,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,YAAoB,EAAE,KAAa,EAAE,QAAgB;IACnF,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,YAAY,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACf,UAAU,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO;QACH,SAAS;QACT,MAAM,EAAE,cAAc,CAAS,SAAS,CAAC;QACzC,MAAM;QACN,YAAY,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;QAC3C,OAAO;QACP,UAAU;KACb,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc,EAAE,YAAqB;IAC7D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,iEAAiE;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,GACH,WAAW,KAAK,CAAC,IAAI,YAAY,KAAK,SAAS;YAC3C,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC;QAC3C,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,IAAc,EAAE,GAAW;IAC3C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC9D,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,SAAS,CAAC,IAAc,EAAE,GAAW;IAC1C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC7C,OAAO,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,IAAI,CAChB,MAAc,EACd,MAAsB,EACtB,MAAc,EACd,IAAe;IAEf,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAyB,CAAC;IAClE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,GAAG,QAAQ,CACX,MAAM,EACN,IAAI,EAAE,MAAM,IAAI,cAAc,EAC9B,IAAI,EAAE,KAAK,IAAI,aAAa,EAC5B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAClC,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"alma.js","sourceRoot":"","sources":["../../src/ta/alma.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//\n// Ported from invinite/src/components/trading-chart/indicators/alma.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. The ALMA `offset` opt is the Gaussian centre\n// in `[0, 1]` (default 0.85), distinct from the universal bar-shift\n// which lives on `opts.barShift`.\n\nimport type { AlmaOpts, Series } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView } from \"../seriesView.js\";\nimport { type ScalarOrSeries, readSourceValue } from \"./lib/sourceValue.js\";\n\nconst DEFAULT_OFFSET = 0.85;\nconst DEFAULT_SIGMA = 6;\n\ntype AlmaSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly length: number;\n /**\n * Trailing `length` source values; `at(0)` is the head (most\n * recent), `at(length - 1)` is the oldest still in the window.\n */\n readonly sourceWindow: Float64RingBuffer;\n /**\n * Pre-computed Gaussian weights. `weights[j]` aligns with the\n * j-th OLDEST window entry (i.e. `window.at(length - 1 - j)`) so\n * `j = length - 1` weights the head and `j = 0` weights the\n * oldest — matches the invinite reference's `computeAlma` loop.\n */\n readonly weights: Float64Array;\n readonly normaliser: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.alma called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(length: number, offsetCentre: number, sigma: number, capacity: number): AlmaSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n const m = offsetCentre * (length - 1);\n const s = length / sigma;\n const weights = new Float64Array(length);\n let normaliser = 0;\n for (let j = 0; j < length; j += 1) {\n const d = j - m;\n const w = Math.exp(-(d * d) / (2 * s * s));\n weights[j] = w;\n normaliser += w;\n }\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n length,\n sourceWindow: new Float64RingBuffer(length),\n weights,\n normaliser,\n };\n}\n\nfunction weightedFromWindow(slot: AlmaSlot, headOverride?: number): number {\n let sum = 0;\n for (let j = 0; j < slot.length; j += 1) {\n // j = 0 → oldest (window.at(length - 1)); j = length - 1 → head.\n const ageFromHead = slot.length - 1 - j;\n const v =\n ageFromHead === 0 && headOverride !== undefined\n ? headOverride\n : slot.sourceWindow.at(ageFromHead);\n if (!Number.isFinite(v)) return Number.NaN;\n sum += v * slot.weights[j];\n }\n return sum / slot.normaliser;\n}\n\nfunction closeValue(slot: AlmaSlot, src: number): number {\n slot.sourceWindow.append(src);\n if (slot.sourceWindow.length < slot.length) return Number.NaN;\n return weightedFromWindow(slot);\n}\n\nfunction tickValue(slot: AlmaSlot, src: number): number {\n if (slot.sourceWindow.length < slot.length) return Number.NaN;\n if (!Number.isFinite(src)) return Number.NaN;\n return weightedFromWindow(slot, src);\n}\n\n/**\n * Arnaud Legoux Moving Average — a Gaussian-weighted MA. Weights peak\n * at `offset · (length − 1)` (default `0.85 · (length − 1)`, near the\n * recent end of the window) and decay with standard deviation\n * `length / sigma` (default `length / 6`). Weights are pre-computed\n * once at slot init from `opts.offset` + `opts.sigma`; per-bar cost is\n * an O(length) window walk. A NaN anywhere in the window\n * short-circuits the output to NaN (matches the WMA full-recompute\n * weighted-window convention).\n *\n * **`opts.offset` is the Gaussian-centre position in `[0, 1]`**, NOT\n * the universal bar-shift. The universal shift on ALMA uses the\n * distinct `opts.barShift` field — accepted on the surface (its\n * runtime side is wired alongside the universal `offset` support on\n * every primitive).\n *\n * @formula m = offset · (length − 1) ;\n * s = length / sigma ;\n * w[j] = exp(−((j − m)² / (2 · s²))) for j = 0..length − 1 ;\n * norm = Σ w[j] ;\n * out[t] = (Σ_{j=0..length-1} w[j] · src[t − length + 1 + j]) / norm\n * @warmup length − 1\n * @anchors offset, sigma\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const a = ta.alma(bar.close, 9, { offset: 0.85, sigma: 6 });\n * // plot(a);\n */\nexport function alma(\n slotId: string,\n source: ScalarOrSeries,\n length: number,\n opts?: AlmaOpts,\n): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as AlmaSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(\n length,\n opts?.offset ?? DEFAULT_OFFSET,\n opts?.sigma ?? DEFAULT_SIGMA,\n ctx.stream.ohlcv.close.capacity,\n );\n ctx.stream.taSlots.set(slotId, slot);\n }\n const src = readSourceValue(source);\n if (ctx.isTick) {\n slot.outBuffer.replaceHead(tickValue(slot, src));\n } else {\n slot.outBuffer.append(closeValue(slot, src));\n }\n return slot.series;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"anchoredVolumeProfile.js","sourceRoot":"","sources":["../../src/ta/anchoredVolumeProfile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anchoredVolumeProfile.js","sourceRoot":"","sources":["../../src/ta/anchoredVolumeProfile.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/anchored-volume-profile.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — Series<T> shape, input.time anchor, opts.offset, JSDoc.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type {\n AnchoredVolumeProfileOpts,\n AnchoredVolumeProfileResult,\n} from \"@invinite-org/chartlang-core\";\n\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView, makeShiftedSeriesView } from \"../seriesView.js\";\nimport {\n type VolumeProfileBar,\n type VolumeProfileCore,\n commitVolumeProfileSnapshot,\n createVolumeProfileCore,\n emitVolumeProfileHistogram,\n resolveVolumeProfileSnapshot,\n volumeProfileConfigFromOpts,\n} from \"./lib/volume-profile/index.js\";\n\ntype AnchoredVolumeProfileSlot = VolumeProfileCore & {\n readonly result: AnchoredVolumeProfileResult;\n readonly shiftedResults: Map<number, AnchoredVolumeProfileResult>;\n};\n\ntype MutableAnchoredVolumeProfileSlot = Omit<AnchoredVolumeProfileSlot, \"result\"> & {\n result: AnchoredVolumeProfileResult;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.anchoredVolumeProfile called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(capacity: number): AnchoredVolumeProfileSlot {\n const core = createVolumeProfileCore(capacity);\n const slot: MutableAnchoredVolumeProfileSlot = {\n ...core,\n result: Object.freeze({\n get buckets() {\n return slot.buckets;\n },\n poc: makeSeriesView<number>(core.pocBuffer),\n valHigh: makeSeriesView<number>(core.valHighBuffer),\n valLow: makeSeriesView<number>(core.valLowBuffer),\n }),\n shiftedResults: new Map(),\n };\n return slot;\n}\n\nfunction resultForOffset(\n slot: AnchoredVolumeProfileSlot,\n offset: number,\n): AnchoredVolumeProfileResult {\n if (offset === 0) return slot.result;\n let cached = slot.shiftedResults.get(offset);\n if (cached === undefined) {\n cached = Object.freeze({\n get buckets() {\n return slot.buckets;\n },\n poc: makeShiftedSeriesView<number>(slot.pocBuffer, offset),\n valHigh: makeShiftedSeriesView<number>(slot.valHighBuffer, offset),\n valLow: makeShiftedSeriesView<number>(slot.valLowBuffer, offset),\n });\n slot.shiftedResults.set(offset, cached);\n }\n return cached;\n}\n\nfunction collectBars(ctx: RuntimeContext, anchor: number): ReadonlyArray<VolumeProfileBar> {\n if (ctx.stream.bar.time <= anchor) return [];\n\n const { ohlcv } = ctx.stream;\n const bars: VolumeProfileBar[] = [];\n for (let lookback = ohlcv.close.length - 1; lookback >= 0; lookback -= 1) {\n const time = ohlcv.time.at(lookback);\n if (time < anchor) continue;\n bars.push({\n close: ohlcv.close.at(lookback),\n high: ohlcv.high.at(lookback),\n low: ohlcv.low.at(lookback),\n open: ohlcv.open.at(lookback),\n time,\n volume: ohlcv.volume.at(lookback),\n });\n }\n return bars;\n}\n\n/**\n * Anchored Volume Profile — reads a user-picked time anchor and\n * bucketizes volume from that anchor forward.\n *\n * @formula Port of invinite anchored-volume-profile: find the first\n * candle with `time >= anchor`, bucket anchor→right-edge\n * volume by price, then derive POC / value-area high /\n * value-area low through the shared volume-profile pipeline.\n * @anchors `opts.anchor: Time` — supplied by `input.time(..., { pickFromChart: true })`.\n * @warmup NaN through the bar at `anchor`; first bar after `anchor`\n * can emit once the anchor→current window has positive volume.\n * @since 0.5\n * @stable\n * @example\n * // import { input, plot, ta } from \"@invinite-org/chartlang-core\";\n * // const anchor = input.time(0, { pickFromChart: true });\n * // const vp = ta.anchoredVolumeProfile({ anchor: anchor.value, rowSize: 24 });\n * // plot(vp.poc, { style: { kind: \"horizontal-histogram\", buckets: vp.buckets } });\n */\nexport function anchoredVolumeProfile(\n slotId: string,\n opts: AnchoredVolumeProfileOpts,\n): AnchoredVolumeProfileResult {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as AnchoredVolumeProfileSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(ctx.stream.ohlcv.close.capacity);\n ctx.stream.taSlots.set(slotId, slot);\n }\n\n const snapshot = resolveVolumeProfileSnapshot({\n bars: collectBars(ctx, opts.anchor),\n bucketColor: opts.bucketColor,\n config: volumeProfileConfigFromOpts(opts),\n });\n commitVolumeProfileSnapshot(slot, ctx.isTick, snapshot);\n emitVolumeProfileHistogram(\n ctx,\n slotId,\n \"Anchored Volume Profile\",\n snapshot.poc,\n snapshot.buckets,\n );\n return resultForOffset(slot, opts.offset ?? 0);\n}\n"]}
@@ -10,7 +10,7 @@ import type { AnchoredVwapOpts, Series } from "@invinite-org/chartlang-core";
10
10
  * **Sticky anchor.** The anchor is captured on the first call (slot
11
11
  * init) and ignored on subsequent calls — the slot's anchor is
12
12
  * sticky. Re-anchoring requires a new compiler-generated callsite id
13
- * (i.e. editing the script). Phase 4's `input.time()` will lift the
13
+ * (i.e. editing the script). A future `input.time()` will lift the
14
14
  * anchor to a user input that can change at runtime.
15
15
  *
16
16
  * **NaN handling.** NaN source or non-positive / NaN volume
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/anchored-vwap.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
9
9
  // mode) follow chartlang's primitive shape — NOT invinite's
10
10
  // IndicatorPlugin shape.
@@ -82,7 +82,7 @@ function valueFromCum(started, cumPV, cumV) {
82
82
  * **Sticky anchor.** The anchor is captured on the first call (slot
83
83
  * init) and ignored on subsequent calls — the slot's anchor is
84
84
  * sticky. Re-anchoring requires a new compiler-generated callsite id
85
- * (i.e. editing the script). Phase 4's `input.time()` will lift the
85
+ * (i.e. editing the script). A future `input.time()` will lift the
86
86
  * anchor to a user input that can change at runtime.
87
87
  *
88
88
  * **NaN handling.** NaN source or non-positive / NaN volume