@invinite-org/chartlang-runtime 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. package/CHANGELOG.md +245 -0
  2. package/README.md +1 -2
  3. package/dist/barPoint.d.ts +20 -0
  4. package/dist/barPoint.d.ts.map +1 -0
  5. package/dist/barPoint.js +72 -0
  6. package/dist/barPoint.js.map +1 -0
  7. package/dist/bufferSnapshot.d.ts +102 -0
  8. package/dist/bufferSnapshot.d.ts.map +1 -0
  9. package/dist/bufferSnapshot.js +119 -0
  10. package/dist/bufferSnapshot.js.map +1 -0
  11. package/dist/buildComputeContext.js.map +1 -1
  12. package/dist/createScriptRunner.d.ts +6 -3
  13. package/dist/createScriptRunner.d.ts.map +1 -1
  14. package/dist/createScriptRunner.js +29 -5
  15. package/dist/createScriptRunner.js.map +1 -1
  16. package/dist/dep/DepOutputStore.js.map +1 -1
  17. package/dist/dep/DepRunner.d.ts.map +1 -1
  18. package/dist/dep/DepRunner.js +1 -0
  19. package/dist/dep/DepRunner.js.map +1 -1
  20. package/dist/dep/depOutput.js.map +1 -1
  21. package/dist/dep/emissionFilter.js.map +1 -1
  22. package/dist/dep/index.js.map +1 -1
  23. package/dist/emit/alert.js.map +1 -1
  24. package/dist/emit/alertConditionEmission.js.map +1 -1
  25. package/dist/emit/applyPlotOverride.js.map +1 -1
  26. package/dist/emit/draw/annotations/arrow.js +1 -1
  27. package/dist/emit/draw/annotations/arrow.js.map +1 -1
  28. package/dist/emit/draw/annotations/arrowMarkDown.js +1 -1
  29. package/dist/emit/draw/annotations/arrowMarkDown.js.map +1 -1
  30. package/dist/emit/draw/annotations/arrowMarkUp.js +1 -1
  31. package/dist/emit/draw/annotations/arrowMarkUp.js.map +1 -1
  32. package/dist/emit/draw/annotations/arrowMarker.js +1 -1
  33. package/dist/emit/draw/annotations/arrowMarker.js.map +1 -1
  34. package/dist/emit/draw/annotations/text.js +1 -1
  35. package/dist/emit/draw/annotations/text.js.map +1 -1
  36. package/dist/emit/draw/boxes/circle.js +1 -1
  37. package/dist/emit/draw/boxes/circle.js.map +1 -1
  38. package/dist/emit/draw/boxes/ellipse.d.ts +1 -1
  39. package/dist/emit/draw/boxes/ellipse.js +1 -1
  40. package/dist/emit/draw/boxes/ellipse.js.map +1 -1
  41. package/dist/emit/draw/boxes/fillBetween.d.ts +45 -0
  42. package/dist/emit/draw/boxes/fillBetween.d.ts.map +1 -0
  43. package/dist/emit/draw/boxes/fillBetween.js +36 -0
  44. package/dist/emit/draw/boxes/fillBetween.js.map +1 -0
  45. package/dist/emit/draw/boxes/marker.js +1 -1
  46. package/dist/emit/draw/boxes/marker.js.map +1 -1
  47. package/dist/emit/draw/boxes/path.d.ts +1 -1
  48. package/dist/emit/draw/boxes/path.js +1 -1
  49. package/dist/emit/draw/boxes/path.js.map +1 -1
  50. package/dist/emit/draw/boxes/polyline.d.ts +1 -1
  51. package/dist/emit/draw/boxes/polyline.js +1 -1
  52. package/dist/emit/draw/boxes/polyline.js.map +1 -1
  53. package/dist/emit/draw/boxes/rectangle.js +1 -1
  54. package/dist/emit/draw/boxes/rectangle.js.map +1 -1
  55. package/dist/emit/draw/boxes/rotatedRectangle.js +1 -1
  56. package/dist/emit/draw/boxes/rotatedRectangle.js.map +1 -1
  57. package/dist/emit/draw/boxes/triangle.d.ts +1 -1
  58. package/dist/emit/draw/boxes/triangle.js +1 -1
  59. package/dist/emit/draw/boxes/triangle.js.map +1 -1
  60. package/dist/emit/draw/channels/disjointChannel.js +1 -1
  61. package/dist/emit/draw/channels/disjointChannel.js.map +1 -1
  62. package/dist/emit/draw/channels/flatTopBottom.d.ts +1 -2
  63. package/dist/emit/draw/channels/flatTopBottom.d.ts.map +1 -1
  64. package/dist/emit/draw/channels/flatTopBottom.js +1 -1
  65. package/dist/emit/draw/channels/flatTopBottom.js.map +1 -1
  66. package/dist/emit/draw/channels/regressionTrend.d.ts +3 -4
  67. package/dist/emit/draw/channels/regressionTrend.d.ts.map +1 -1
  68. package/dist/emit/draw/channels/regressionTrend.js +1 -1
  69. package/dist/emit/draw/channels/regressionTrend.js.map +1 -1
  70. package/dist/emit/draw/channels/trendChannel.js +1 -1
  71. package/dist/emit/draw/channels/trendChannel.js.map +1 -1
  72. package/dist/emit/draw/containers/frame.d.ts +1 -1
  73. package/dist/emit/draw/containers/frame.js +2 -2
  74. package/dist/emit/draw/containers/frame.js.map +1 -1
  75. package/dist/emit/draw/containers/group.d.ts +1 -2
  76. package/dist/emit/draw/containers/group.d.ts.map +1 -1
  77. package/dist/emit/draw/containers/group.js +2 -2
  78. package/dist/emit/draw/containers/group.js.map +1 -1
  79. package/dist/emit/draw/curves/arc.js +1 -1
  80. package/dist/emit/draw/curves/arc.js.map +1 -1
  81. package/dist/emit/draw/curves/brush.js +1 -1
  82. package/dist/emit/draw/curves/brush.js.map +1 -1
  83. package/dist/emit/draw/curves/curve.js +1 -1
  84. package/dist/emit/draw/curves/curve.js.map +1 -1
  85. package/dist/emit/draw/curves/doubleCurve.js +1 -1
  86. package/dist/emit/draw/curves/doubleCurve.js.map +1 -1
  87. package/dist/emit/draw/curves/highlighter.js +1 -1
  88. package/dist/emit/draw/curves/highlighter.js.map +1 -1
  89. package/dist/emit/draw/curves/pen.js +1 -1
  90. package/dist/emit/draw/curves/pen.js.map +1 -1
  91. package/dist/emit/draw/cycles/cyclicLines.js +1 -1
  92. package/dist/emit/draw/cycles/cyclicLines.js.map +1 -1
  93. package/dist/emit/draw/cycles/sineLine.js +1 -1
  94. package/dist/emit/draw/cycles/sineLine.js.map +1 -1
  95. package/dist/emit/draw/cycles/timeCycles.js +1 -1
  96. package/dist/emit/draw/cycles/timeCycles.js.map +1 -1
  97. package/dist/emit/draw/elliott/elliottCorrectionWave.js +1 -1
  98. package/dist/emit/draw/elliott/elliottCorrectionWave.js.map +1 -1
  99. package/dist/emit/draw/elliott/elliottDoubleCombo.js +1 -1
  100. package/dist/emit/draw/elliott/elliottDoubleCombo.js.map +1 -1
  101. package/dist/emit/draw/elliott/elliottImpulseWave.js +1 -1
  102. package/dist/emit/draw/elliott/elliottImpulseWave.js.map +1 -1
  103. package/dist/emit/draw/elliott/elliottTriangleWave.js +1 -1
  104. package/dist/emit/draw/elliott/elliottTriangleWave.js.map +1 -1
  105. package/dist/emit/draw/elliott/elliottTripleCombo.js +1 -1
  106. package/dist/emit/draw/elliott/elliottTripleCombo.js.map +1 -1
  107. package/dist/emit/draw/fibA/fibChannel.js +1 -1
  108. package/dist/emit/draw/fibA/fibChannel.js.map +1 -1
  109. package/dist/emit/draw/fibA/fibRetracement.js +1 -1
  110. package/dist/emit/draw/fibA/fibRetracement.js.map +1 -1
  111. package/dist/emit/draw/fibA/fibTimeZone.d.ts +1 -2
  112. package/dist/emit/draw/fibA/fibTimeZone.d.ts.map +1 -1
  113. package/dist/emit/draw/fibA/fibTimeZone.js +1 -1
  114. package/dist/emit/draw/fibA/fibTimeZone.js.map +1 -1
  115. package/dist/emit/draw/fibA/fibTrendExtension.js +1 -1
  116. package/dist/emit/draw/fibA/fibTrendExtension.js.map +1 -1
  117. package/dist/emit/draw/fibA/fibWedge.js +1 -1
  118. package/dist/emit/draw/fibA/fibWedge.js.map +1 -1
  119. package/dist/emit/draw/fibB/fibCircles.d.ts +1 -2
  120. package/dist/emit/draw/fibB/fibCircles.d.ts.map +1 -1
  121. package/dist/emit/draw/fibB/fibCircles.js +1 -1
  122. package/dist/emit/draw/fibB/fibCircles.js.map +1 -1
  123. package/dist/emit/draw/fibB/fibSpeedArcs.js +1 -1
  124. package/dist/emit/draw/fibB/fibSpeedArcs.js.map +1 -1
  125. package/dist/emit/draw/fibB/fibSpeedFan.js +1 -1
  126. package/dist/emit/draw/fibB/fibSpeedFan.js.map +1 -1
  127. package/dist/emit/draw/fibB/fibSpiral.d.ts +1 -2
  128. package/dist/emit/draw/fibB/fibSpiral.d.ts.map +1 -1
  129. package/dist/emit/draw/fibB/fibSpiral.js +1 -1
  130. package/dist/emit/draw/fibB/fibSpiral.js.map +1 -1
  131. package/dist/emit/draw/fibB/fibTrendTime.d.ts +1 -2
  132. package/dist/emit/draw/fibB/fibTrendTime.d.ts.map +1 -1
  133. package/dist/emit/draw/fibB/fibTrendTime.js +1 -1
  134. package/dist/emit/draw/fibB/fibTrendTime.js.map +1 -1
  135. package/dist/emit/draw/gann/gannBox.js +1 -1
  136. package/dist/emit/draw/gann/gannBox.js.map +1 -1
  137. package/dist/emit/draw/gann/gannFan.js +1 -1
  138. package/dist/emit/draw/gann/gannFan.js.map +1 -1
  139. package/dist/emit/draw/gann/gannSquare.js +1 -1
  140. package/dist/emit/draw/gann/gannSquare.js.map +1 -1
  141. package/dist/emit/draw/gann/gannSquareFixed.js +1 -1
  142. package/dist/emit/draw/gann/gannSquareFixed.js.map +1 -1
  143. package/dist/emit/draw/handle.d.ts +11 -2
  144. package/dist/emit/draw/handle.d.ts.map +1 -1
  145. package/dist/emit/draw/handle.js +67 -12
  146. package/dist/emit/draw/handle.js.map +1 -1
  147. package/dist/emit/draw/index.js.map +1 -1
  148. package/dist/emit/draw/lines/crossLine.js +1 -1
  149. package/dist/emit/draw/lines/crossLine.js.map +1 -1
  150. package/dist/emit/draw/lines/horizontalLine.d.ts +1 -1
  151. package/dist/emit/draw/lines/horizontalLine.js +1 -1
  152. package/dist/emit/draw/lines/horizontalLine.js.map +1 -1
  153. package/dist/emit/draw/lines/horizontalRay.js +1 -1
  154. package/dist/emit/draw/lines/horizontalRay.js.map +1 -1
  155. package/dist/emit/draw/lines/line.d.ts +1 -1
  156. package/dist/emit/draw/lines/line.d.ts.map +1 -1
  157. package/dist/emit/draw/lines/line.js +2 -3
  158. package/dist/emit/draw/lines/line.js.map +1 -1
  159. package/dist/emit/draw/lines/trendAngle.js +1 -1
  160. package/dist/emit/draw/lines/trendAngle.js.map +1 -1
  161. package/dist/emit/draw/lines/verticalLine.js +1 -1
  162. package/dist/emit/draw/lines/verticalLine.js.map +1 -1
  163. package/dist/emit/draw/namespace.d.ts +5 -4
  164. package/dist/emit/draw/namespace.d.ts.map +1 -1
  165. package/dist/emit/draw/namespace.js +7 -4
  166. package/dist/emit/draw/namespace.js.map +1 -1
  167. package/dist/emit/draw/patterns/abcdPattern.js +1 -1
  168. package/dist/emit/draw/patterns/abcdPattern.js.map +1 -1
  169. package/dist/emit/draw/patterns/cypherPattern.d.ts +1 -2
  170. package/dist/emit/draw/patterns/cypherPattern.d.ts.map +1 -1
  171. package/dist/emit/draw/patterns/cypherPattern.js +1 -1
  172. package/dist/emit/draw/patterns/cypherPattern.js.map +1 -1
  173. package/dist/emit/draw/patterns/headAndShoulders.js +1 -1
  174. package/dist/emit/draw/patterns/headAndShoulders.js.map +1 -1
  175. package/dist/emit/draw/patterns/threeDrivesPattern.js +1 -1
  176. package/dist/emit/draw/patterns/threeDrivesPattern.js.map +1 -1
  177. package/dist/emit/draw/patterns/trianglePattern.d.ts +1 -1
  178. package/dist/emit/draw/patterns/trianglePattern.js +1 -1
  179. package/dist/emit/draw/patterns/trianglePattern.js.map +1 -1
  180. package/dist/emit/draw/patterns/xabcdPattern.js +1 -1
  181. package/dist/emit/draw/patterns/xabcdPattern.js.map +1 -1
  182. package/dist/emit/draw/pitchforks/pitchfan.js +1 -1
  183. package/dist/emit/draw/pitchforks/pitchfan.js.map +1 -1
  184. package/dist/emit/draw/pitchforks/pitchfork.d.ts +1 -1
  185. package/dist/emit/draw/pitchforks/pitchfork.js +2 -2
  186. package/dist/emit/draw/pitchforks/pitchfork.js.map +1 -1
  187. package/dist/emit/draw/pushDrawing.js.map +1 -1
  188. package/dist/emit/draw/subIdAllocator.d.ts +1 -1
  189. package/dist/emit/draw/subIdAllocator.js +1 -1
  190. package/dist/emit/draw/subIdAllocator.js.map +1 -1
  191. package/dist/emit/draw/table/table.d.ts +1 -1
  192. package/dist/emit/draw/table/table.js.map +1 -1
  193. package/dist/emit/emissionsQueue.js.map +1 -1
  194. package/dist/emit/hash.js.map +1 -1
  195. package/dist/emit/hline.js.map +1 -1
  196. package/dist/emit/index.js.map +1 -1
  197. package/dist/emit/logEmission.js.map +1 -1
  198. package/dist/emit/paneResolver.js.map +1 -1
  199. package/dist/emit/plot.d.ts +7 -0
  200. package/dist/emit/plot.d.ts.map +1 -1
  201. package/dist/emit/plot.js +13 -0
  202. package/dist/emit/plot.js.map +1 -1
  203. package/dist/emit/runtimeError.js.map +1 -1
  204. package/dist/execution/dispose.d.ts.map +1 -1
  205. package/dist/execution/dispose.js +16 -0
  206. package/dist/execution/dispose.js.map +1 -1
  207. package/dist/execution/drain.js.map +1 -1
  208. package/dist/execution/index.js.map +1 -1
  209. package/dist/execution/onBarClose.js.map +1 -1
  210. package/dist/execution/onBarTick.js.map +1 -1
  211. package/dist/execution/onHistory.js.map +1 -1
  212. package/dist/execution/runComputeStep.d.ts.map +1 -1
  213. package/dist/execution/runComputeStep.js +10 -1
  214. package/dist/execution/runComputeStep.js.map +1 -1
  215. package/dist/execution/secondaryStream.js.map +1 -1
  216. package/dist/index.d.ts +1 -1
  217. package/dist/index.d.ts.map +1 -1
  218. package/dist/index.js +1 -1
  219. package/dist/index.js.map +1 -1
  220. package/dist/inputs/index.js.map +1 -1
  221. package/dist/inputs/resolveInputs.js.map +1 -1
  222. package/dist/internal.js.map +1 -1
  223. package/dist/persistentStateStore.js.map +1 -1
  224. package/dist/persistentStateStore.runtime.d.ts.map +1 -1
  225. package/dist/persistentStateStore.runtime.js +21 -7
  226. package/dist/persistentStateStore.runtime.js.map +1 -1
  227. package/dist/persistentStateStore.validate.js.map +1 -1
  228. package/dist/primitives.js.map +1 -1
  229. package/dist/request/alignHtfSeriesCache.js.map +1 -1
  230. package/dist/request/alignHtfSeriesToLtf.d.ts +2 -2
  231. package/dist/request/alignHtfSeriesToLtf.js +2 -2
  232. package/dist/request/alignHtfSeriesToLtf.js.map +1 -1
  233. package/dist/request/bucketLtfBarsByMainContainment.js.map +1 -1
  234. package/dist/request/bucketLtfBarsCache.js.map +1 -1
  235. package/dist/request/index.d.ts +2 -1
  236. package/dist/request/index.d.ts.map +1 -1
  237. package/dist/request/index.js +2 -1
  238. package/dist/request/index.js.map +1 -1
  239. package/dist/request/lowerTf.js.map +1 -1
  240. package/dist/request/pushOnce.js.map +1 -1
  241. package/dist/request/requestNamespace.d.ts.map +1 -1
  242. package/dist/request/requestNamespace.js +16 -3
  243. package/dist/request/requestNamespace.js.map +1 -1
  244. package/dist/request/security.d.ts +20 -1
  245. package/dist/request/security.d.ts.map +1 -1
  246. package/dist/request/security.js +62 -23
  247. package/dist/request/security.js.map +1 -1
  248. package/dist/request/securityExprRunner.d.ts +133 -0
  249. package/dist/request/securityExprRunner.d.ts.map +1 -0
  250. package/dist/request/securityExprRunner.js +235 -0
  251. package/dist/request/securityExprRunner.js.map +1 -0
  252. package/dist/request/streamBars.d.ts +14 -1
  253. package/dist/request/streamBars.d.ts.map +1 -1
  254. package/dist/request/streamBars.js +39 -1
  255. package/dist/request/streamBars.js.map +1 -1
  256. package/dist/ringBuffer.d.ts +2 -2
  257. package/dist/ringBuffer.js +1 -1
  258. package/dist/ringBuffer.js.map +1 -1
  259. package/dist/runtimeContext.d.ts +51 -3
  260. package/dist/runtimeContext.d.ts.map +1 -1
  261. package/dist/runtimeContext.js.map +1 -1
  262. package/dist/seriesView.d.ts +43 -18
  263. package/dist/seriesView.d.ts.map +1 -1
  264. package/dist/seriesView.js +66 -43
  265. package/dist/seriesView.js.map +1 -1
  266. package/dist/state/index.d.ts +2 -1
  267. package/dist/state/index.d.ts.map +1 -1
  268. package/dist/state/index.js +2 -1
  269. package/dist/state/index.js.map +1 -1
  270. package/dist/state/lifecycle.d.ts +40 -0
  271. package/dist/state/lifecycle.d.ts.map +1 -1
  272. package/dist/state/lifecycle.js +53 -0
  273. package/dist/state/lifecycle.js.map +1 -1
  274. package/dist/state/seriesPersistence.d.ts +48 -0
  275. package/dist/state/seriesPersistence.d.ts.map +1 -0
  276. package/dist/state/seriesPersistence.js +87 -0
  277. package/dist/state/seriesPersistence.js.map +1 -0
  278. package/dist/state/seriesSlot.d.ts +105 -0
  279. package/dist/state/seriesSlot.d.ts.map +1 -0
  280. package/dist/state/seriesSlot.js +123 -0
  281. package/dist/state/seriesSlot.js.map +1 -0
  282. package/dist/state/stateNamespace.d.ts.map +1 -1
  283. package/dist/state/stateNamespace.js +28 -0
  284. package/dist/state/stateNamespace.js.map +1 -1
  285. package/dist/state/stateSlot.js.map +1 -1
  286. package/dist/stateStore.d.ts +2 -2
  287. package/dist/stateStore.js.map +1 -1
  288. package/dist/streamState.d.ts +26 -20
  289. package/dist/streamState.d.ts.map +1 -1
  290. package/dist/streamState.js +41 -67
  291. package/dist/streamState.js.map +1 -1
  292. package/dist/ta/adl.js +2 -2
  293. package/dist/ta/adl.js.map +1 -1
  294. package/dist/ta/adr.d.ts +3 -3
  295. package/dist/ta/adr.js +5 -5
  296. package/dist/ta/adr.js.map +1 -1
  297. package/dist/ta/adx.d.ts +3 -2
  298. package/dist/ta/adx.d.ts.map +1 -1
  299. package/dist/ta/adx.js +5 -4
  300. package/dist/ta/adx.js.map +1 -1
  301. package/dist/ta/alma.d.ts +6 -4
  302. package/dist/ta/alma.d.ts.map +1 -1
  303. package/dist/ta/alma.js +21 -8
  304. package/dist/ta/alma.js.map +1 -1
  305. package/dist/ta/anchoredVolumeProfile.js.map +1 -1
  306. package/dist/ta/anchoredVwap.d.ts +1 -1
  307. package/dist/ta/anchoredVwap.js +3 -3
  308. package/dist/ta/anchoredVwap.js.map +1 -1
  309. package/dist/ta/ao.js +2 -2
  310. package/dist/ta/ao.js.map +1 -1
  311. package/dist/ta/aroon.js +2 -2
  312. package/dist/ta/aroon.js.map +1 -1
  313. package/dist/ta/aroonOsc.js +2 -2
  314. package/dist/ta/aroonOsc.js.map +1 -1
  315. package/dist/ta/atr.d.ts +3 -2
  316. package/dist/ta/atr.d.ts.map +1 -1
  317. package/dist/ta/atr.js +5 -4
  318. package/dist/ta/atr.js.map +1 -1
  319. package/dist/ta/barssince.js +1 -1
  320. package/dist/ta/barssince.js.map +1 -1
  321. package/dist/ta/bb.d.ts +3 -2
  322. package/dist/ta/bb.d.ts.map +1 -1
  323. package/dist/ta/bb.js +5 -4
  324. package/dist/ta/bb.js.map +1 -1
  325. package/dist/ta/bbPercentB.js +2 -2
  326. package/dist/ta/bbPercentB.js.map +1 -1
  327. package/dist/ta/bbw.js +2 -2
  328. package/dist/ta/bbw.js.map +1 -1
  329. package/dist/ta/bop.js +2 -2
  330. package/dist/ta/bop.js.map +1 -1
  331. package/dist/ta/cci.js +2 -2
  332. package/dist/ta/cci.js.map +1 -1
  333. package/dist/ta/chaikinOsc.d.ts +3 -2
  334. package/dist/ta/chaikinOsc.d.ts.map +1 -1
  335. package/dist/ta/chaikinOsc.js +5 -4
  336. package/dist/ta/chaikinOsc.js.map +1 -1
  337. package/dist/ta/chandeKrollStop.d.ts +1 -1
  338. package/dist/ta/chandeKrollStop.js +3 -3
  339. package/dist/ta/chandeKrollStop.js.map +1 -1
  340. package/dist/ta/chandelier.d.ts +1 -1
  341. package/dist/ta/chandelier.js +3 -3
  342. package/dist/ta/chandelier.js.map +1 -1
  343. package/dist/ta/change.js +1 -1
  344. package/dist/ta/change.js.map +1 -1
  345. package/dist/ta/chop.js +2 -2
  346. package/dist/ta/chop.js.map +1 -1
  347. package/dist/ta/cmf.js +2 -2
  348. package/dist/ta/cmf.js.map +1 -1
  349. package/dist/ta/cmo.js +2 -2
  350. package/dist/ta/cmo.js.map +1 -1
  351. package/dist/ta/connorsRsi.d.ts +1 -1
  352. package/dist/ta/connorsRsi.js +3 -3
  353. package/dist/ta/connorsRsi.js.map +1 -1
  354. package/dist/ta/coppock.js +2 -2
  355. package/dist/ta/coppock.js.map +1 -1
  356. package/dist/ta/crossover.d.ts +3 -2
  357. package/dist/ta/crossover.d.ts.map +1 -1
  358. package/dist/ta/crossover.js +4 -3
  359. package/dist/ta/crossover.js.map +1 -1
  360. package/dist/ta/crossunder.d.ts +3 -2
  361. package/dist/ta/crossunder.d.ts.map +1 -1
  362. package/dist/ta/crossunder.js +4 -3
  363. package/dist/ta/crossunder.js.map +1 -1
  364. package/dist/ta/dema.js +2 -2
  365. package/dist/ta/dema.js.map +1 -1
  366. package/dist/ta/dmi.d.ts +4 -3
  367. package/dist/ta/dmi.d.ts.map +1 -1
  368. package/dist/ta/dmi.js +6 -5
  369. package/dist/ta/dmi.js.map +1 -1
  370. package/dist/ta/donchian.js +2 -2
  371. package/dist/ta/donchian.js.map +1 -1
  372. package/dist/ta/dpo.js +2 -2
  373. package/dist/ta/dpo.js.map +1 -1
  374. package/dist/ta/ema.d.ts +3 -2
  375. package/dist/ta/ema.d.ts.map +1 -1
  376. package/dist/ta/ema.js +5 -4
  377. package/dist/ta/ema.js.map +1 -1
  378. package/dist/ta/envelope.js +2 -2
  379. package/dist/ta/envelope.js.map +1 -1
  380. package/dist/ta/eom.d.ts +3 -1
  381. package/dist/ta/eom.d.ts.map +1 -1
  382. package/dist/ta/eom.js +5 -3
  383. package/dist/ta/eom.js.map +1 -1
  384. package/dist/ta/fisher.js +2 -2
  385. package/dist/ta/fisher.js.map +1 -1
  386. package/dist/ta/fixedRangeVolumeProfile.js.map +1 -1
  387. package/dist/ta/highest.js +1 -1
  388. package/dist/ta/highest.js.map +1 -1
  389. package/dist/ta/highestbars.d.ts +25 -0
  390. package/dist/ta/highestbars.d.ts.map +1 -0
  391. package/dist/ta/highestbars.js +106 -0
  392. package/dist/ta/highestbars.js.map +1 -0
  393. package/dist/ta/historicalVolatility.d.ts +3 -2
  394. package/dist/ta/historicalVolatility.d.ts.map +1 -1
  395. package/dist/ta/historicalVolatility.js +5 -4
  396. package/dist/ta/historicalVolatility.js.map +1 -1
  397. package/dist/ta/hma.js +2 -2
  398. package/dist/ta/hma.js.map +1 -1
  399. package/dist/ta/ichimoku.d.ts +3 -1
  400. package/dist/ta/ichimoku.d.ts.map +1 -1
  401. package/dist/ta/ichimoku.js +5 -3
  402. package/dist/ta/ichimoku.js.map +1 -1
  403. package/dist/ta/index.js.map +1 -1
  404. package/dist/ta/kama.js +2 -2
  405. package/dist/ta/kama.js.map +1 -1
  406. package/dist/ta/keltner.js +2 -2
  407. package/dist/ta/keltner.js.map +1 -1
  408. package/dist/ta/klinger.js +2 -2
  409. package/dist/ta/klinger.js.map +1 -1
  410. package/dist/ta/kst.js +2 -2
  411. package/dist/ta/kst.js.map +1 -1
  412. package/dist/ta/lib/adxFromDi.js +2 -2
  413. package/dist/ta/lib/adxFromDi.js.map +1 -1
  414. package/dist/ta/lib/computeMa.js +2 -2
  415. package/dist/ta/lib/computeMa.js.map +1 -1
  416. package/dist/ta/lib/computeMaOfFloat64.js +2 -2
  417. package/dist/ta/lib/computeMaOfFloat64.js.map +1 -1
  418. package/dist/ta/lib/directionalState.js +2 -2
  419. package/dist/ta/lib/directionalState.js.map +1 -1
  420. package/dist/ta/lib/donchianMid.js +2 -2
  421. package/dist/ta/lib/donchianMid.js.map +1 -1
  422. package/dist/ta/lib/emaFloat64.js +2 -2
  423. package/dist/ta/lib/emaFloat64.js.map +1 -1
  424. package/dist/ta/lib/linearRegression.js +2 -2
  425. package/dist/ta/lib/linearRegression.js.map +1 -1
  426. package/dist/ta/lib/maTypes.js.map +1 -1
  427. package/dist/ta/lib/pearson.js +2 -2
  428. package/dist/ta/lib/pearson.js.map +1 -1
  429. package/dist/ta/lib/pickCandleSource.js +2 -2
  430. package/dist/ta/lib/pickCandleSource.js.map +1 -1
  431. package/dist/ta/lib/readSourceField.js +2 -2
  432. package/dist/ta/lib/readSourceField.js.map +1 -1
  433. package/dist/ta/lib/rollingStddev.js +2 -2
  434. package/dist/ta/lib/rollingStddev.js.map +1 -1
  435. package/dist/ta/lib/smaFloat64.js +2 -2
  436. package/dist/ta/lib/smaFloat64.js.map +1 -1
  437. package/dist/ta/lib/smmaFloat64.js +2 -2
  438. package/dist/ta/lib/smmaFloat64.js.map +1 -1
  439. package/dist/ta/lib/sourceValue.js.map +1 -1
  440. package/dist/ta/lib/trSeries.js +2 -2
  441. package/dist/ta/lib/trSeries.js.map +1 -1
  442. package/dist/ta/lib/volume-profile/bucketEdges.js.map +1 -1
  443. package/dist/ta/lib/volume-profile/bucketizeVolume.js.map +1 -1
  444. package/dist/ta/lib/volume-profile/developingSeries.js.map +1 -1
  445. package/dist/ta/lib/volume-profile/index.js.map +1 -1
  446. package/dist/ta/lib/volume-profile/intercept.js.map +1 -1
  447. package/dist/ta/lib/volume-profile/scaffold.js.map +1 -1
  448. package/dist/ta/lib/volume-profile/tooHeavy.js.map +1 -1
  449. package/dist/ta/lib/volume-profile/types.js.map +1 -1
  450. package/dist/ta/lib/volume-profile/valueArea.js.map +1 -1
  451. package/dist/ta/lib/volume-profile/volumeProfileShared.js.map +1 -1
  452. package/dist/ta/lib/vwmaFloat64.js +2 -2
  453. package/dist/ta/lib/vwmaFloat64.js.map +1 -1
  454. package/dist/ta/lib/wilderDirectional.js +2 -2
  455. package/dist/ta/lib/wilderDirectional.js.map +1 -1
  456. package/dist/ta/lib/wilderSmoothing.js +2 -2
  457. package/dist/ta/lib/wilderSmoothing.js.map +1 -1
  458. package/dist/ta/lib/wmaFloat64.js +2 -2
  459. package/dist/ta/lib/wmaFloat64.js.map +1 -1
  460. package/dist/ta/lowest.js +1 -1
  461. package/dist/ta/lowest.js.map +1 -1
  462. package/dist/ta/lowestbars.d.ts +25 -0
  463. package/dist/ta/lowestbars.d.ts.map +1 -0
  464. package/dist/ta/lowestbars.js +102 -0
  465. package/dist/ta/lowestbars.js.map +1 -0
  466. package/dist/ta/lsma.js +2 -2
  467. package/dist/ta/lsma.js.map +1 -1
  468. package/dist/ta/maRibbon.js +2 -2
  469. package/dist/ta/maRibbon.js.map +1 -1
  470. package/dist/ta/macd.d.ts +3 -2
  471. package/dist/ta/macd.d.ts.map +1 -1
  472. package/dist/ta/macd.js +6 -5
  473. package/dist/ta/macd.js.map +1 -1
  474. package/dist/ta/massIndex.d.ts +3 -2
  475. package/dist/ta/massIndex.d.ts.map +1 -1
  476. package/dist/ta/massIndex.js +5 -4
  477. package/dist/ta/massIndex.js.map +1 -1
  478. package/dist/ta/mcginley.js +2 -2
  479. package/dist/ta/mcginley.js.map +1 -1
  480. package/dist/ta/median.js +2 -2
  481. package/dist/ta/median.js.map +1 -1
  482. package/dist/ta/mfi.d.ts +3 -1
  483. package/dist/ta/mfi.d.ts.map +1 -1
  484. package/dist/ta/mfi.js +5 -3
  485. package/dist/ta/mfi.js.map +1 -1
  486. package/dist/ta/momentum.js +2 -2
  487. package/dist/ta/momentum.js.map +1 -1
  488. package/dist/ta/netVolume.d.ts +3 -1
  489. package/dist/ta/netVolume.d.ts.map +1 -1
  490. package/dist/ta/netVolume.js +5 -3
  491. package/dist/ta/netVolume.js.map +1 -1
  492. package/dist/ta/nvi.d.ts +3 -1
  493. package/dist/ta/nvi.d.ts.map +1 -1
  494. package/dist/ta/nvi.js +5 -3
  495. package/dist/ta/nvi.js.map +1 -1
  496. package/dist/ta/nz.js +1 -1
  497. package/dist/ta/nz.js.map +1 -1
  498. package/dist/ta/obv.js +2 -2
  499. package/dist/ta/obv.js.map +1 -1
  500. package/dist/ta/persistence.d.ts.map +1 -1
  501. package/dist/ta/persistence.js +1 -40
  502. package/dist/ta/persistence.js.map +1 -1
  503. package/dist/ta/pivotsHighLow.js +2 -2
  504. package/dist/ta/pivotsHighLow.js.map +1 -1
  505. package/dist/ta/pivotsStandard.d.ts +1 -1
  506. package/dist/ta/pivotsStandard.js +3 -3
  507. package/dist/ta/pivotsStandard.js.map +1 -1
  508. package/dist/ta/pmo.js +2 -2
  509. package/dist/ta/pmo.js.map +1 -1
  510. package/dist/ta/ppo.d.ts +3 -2
  511. package/dist/ta/ppo.d.ts.map +1 -1
  512. package/dist/ta/ppo.js +5 -4
  513. package/dist/ta/ppo.js.map +1 -1
  514. package/dist/ta/psar.js +2 -2
  515. package/dist/ta/psar.js.map +1 -1
  516. package/dist/ta/pvi.d.ts +3 -1
  517. package/dist/ta/pvi.d.ts.map +1 -1
  518. package/dist/ta/pvi.js +5 -3
  519. package/dist/ta/pvi.js.map +1 -1
  520. package/dist/ta/pvo.d.ts +3 -1
  521. package/dist/ta/pvo.d.ts.map +1 -1
  522. package/dist/ta/pvo.js +5 -3
  523. package/dist/ta/pvo.js.map +1 -1
  524. package/dist/ta/pvt.d.ts +3 -1
  525. package/dist/ta/pvt.d.ts.map +1 -1
  526. package/dist/ta/pvt.js +5 -3
  527. package/dist/ta/pvt.js.map +1 -1
  528. package/dist/ta/registry.d.ts +7 -1
  529. package/dist/ta/registry.d.ts.map +1 -1
  530. package/dist/ta/registry.js +4 -0
  531. package/dist/ta/registry.js.map +1 -1
  532. package/dist/ta/roc.js +2 -2
  533. package/dist/ta/roc.js.map +1 -1
  534. package/dist/ta/rsi.d.ts +3 -2
  535. package/dist/ta/rsi.d.ts.map +1 -1
  536. package/dist/ta/rsi.js +5 -4
  537. package/dist/ta/rsi.js.map +1 -1
  538. package/dist/ta/rvgi.js +2 -2
  539. package/dist/ta/rvgi.js.map +1 -1
  540. package/dist/ta/rvi.d.ts +3 -2
  541. package/dist/ta/rvi.d.ts.map +1 -1
  542. package/dist/ta/rvi.js +5 -4
  543. package/dist/ta/rvi.js.map +1 -1
  544. package/dist/ta/sessionVolumeProfile.js.map +1 -1
  545. package/dist/ta/sma.d.ts +6 -3
  546. package/dist/ta/sma.d.ts.map +1 -1
  547. package/dist/ta/sma.js +8 -5
  548. package/dist/ta/sma.js.map +1 -1
  549. package/dist/ta/smi.js +2 -2
  550. package/dist/ta/smi.js.map +1 -1
  551. package/dist/ta/smma.js +2 -2
  552. package/dist/ta/smma.js.map +1 -1
  553. package/dist/ta/stdev.d.ts +3 -2
  554. package/dist/ta/stdev.d.ts.map +1 -1
  555. package/dist/ta/stdev.js +5 -4
  556. package/dist/ta/stdev.js.map +1 -1
  557. package/dist/ta/stoch.js +2 -2
  558. package/dist/ta/stoch.js.map +1 -1
  559. package/dist/ta/stochRsi.js +2 -2
  560. package/dist/ta/stochRsi.js.map +1 -1
  561. package/dist/ta/supertrend.d.ts +1 -1
  562. package/dist/ta/supertrend.js +3 -3
  563. package/dist/ta/supertrend.js.map +1 -1
  564. package/dist/ta/tema.js +2 -2
  565. package/dist/ta/tema.js.map +1 -1
  566. package/dist/ta/trendStrengthIndex.d.ts +4 -3
  567. package/dist/ta/trendStrengthIndex.d.ts.map +1 -1
  568. package/dist/ta/trendStrengthIndex.js +6 -5
  569. package/dist/ta/trendStrengthIndex.js.map +1 -1
  570. package/dist/ta/trix.d.ts +4 -3
  571. package/dist/ta/trix.d.ts.map +1 -1
  572. package/dist/ta/trix.js +6 -5
  573. package/dist/ta/trix.js.map +1 -1
  574. package/dist/ta/tsi.js +2 -2
  575. package/dist/ta/tsi.js.map +1 -1
  576. package/dist/ta/ulcerIndex.js +2 -2
  577. package/dist/ta/ulcerIndex.js.map +1 -1
  578. package/dist/ta/ultimateOsc.js +2 -2
  579. package/dist/ta/ultimateOsc.js.map +1 -1
  580. package/dist/ta/valuewhen.js +1 -1
  581. package/dist/ta/valuewhen.js.map +1 -1
  582. package/dist/ta/visibleRangeVolumeProfile.d.ts +2 -2
  583. package/dist/ta/visibleRangeVolumeProfile.js +2 -2
  584. package/dist/ta/visibleRangeVolumeProfile.js.map +1 -1
  585. package/dist/ta/vol.js +2 -2
  586. package/dist/ta/vol.js.map +1 -1
  587. package/dist/ta/volatilityStop.d.ts +1 -1
  588. package/dist/ta/volatilityStop.js +3 -3
  589. package/dist/ta/volatilityStop.js.map +1 -1
  590. package/dist/ta/vortex.d.ts +3 -2
  591. package/dist/ta/vortex.d.ts.map +1 -1
  592. package/dist/ta/vortex.js +5 -4
  593. package/dist/ta/vortex.js.map +1 -1
  594. package/dist/ta/vwap.d.ts +3 -3
  595. package/dist/ta/vwap.js +5 -5
  596. package/dist/ta/vwap.js.map +1 -1
  597. package/dist/ta/vwma.js +2 -2
  598. package/dist/ta/vwma.js.map +1 -1
  599. package/dist/ta/williamsFractal.js +2 -2
  600. package/dist/ta/williamsFractal.js.map +1 -1
  601. package/dist/ta/williamsR.js +2 -2
  602. package/dist/ta/williamsR.js.map +1 -1
  603. package/dist/ta/wma.js +2 -2
  604. package/dist/ta/wma.js.map +1 -1
  605. package/dist/ta/zigZag.js +2 -2
  606. package/dist/ta/zigZag.js.map +1 -1
  607. package/dist/views/barstateView.js.map +1 -1
  608. package/dist/views/index.js.map +1 -1
  609. package/dist/views/refreshRuntimeViews.js.map +1 -1
  610. package/dist/views/symInfoView.js.map +1 -1
  611. package/dist/views/timeframeView.js.map +1 -1
  612. package/package.json +3 -3
  613. package/dist/ta/lib/applyOffset.d.ts +0 -19
  614. package/dist/ta/lib/applyOffset.d.ts.map +0 -1
  615. package/dist/ta/lib/applyOffset.js +0 -38
  616. package/dist/ta/lib/applyOffset.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"bucketEdges.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/bucketEdges.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,qGAAqG;AACrG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC5B,QAAgB,EAChB,QAAgB,EAChB,UAAsB,EACtB,OAAe,EACf,QAAgB;IAEhB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ;QAAE,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExE,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;QACvC,IAAI,WAAW,IAAI,CAAC;YAAE,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEpE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,WAAW,CAAC;QAC3E,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,OAAO,KAAK,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"bucketEdges.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/bucketEdges.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,qGAAqG;AACrG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC5B,QAAgB,EAChB,QAAgB,EAChB,UAAsB,EACtB,OAAe,EACf,QAAgB;IAEhB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ;QAAE,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExE,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;QACvC,IAAI,WAAW,IAAI,CAAC;YAAE,OAAO,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEpE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,WAAW,CAAC;QAC3E,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC;IACpE,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/bucket-edges.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type { RowsLayout } from \"./types.js\";\n\n/**\n * Build `bucketCount + 1` price edges for a volume profile.\n *\n * @formula PLAN §9.2 — `ticksPerRow`: width = rowSize * tickSize;\n * `numberOfRows`: width = (priceMax - priceMin) / rowSize.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const edges = buildBucketEdges(100, 105, \"ticksPerRow\", 10, 0.01);\n */\nexport function buildBucketEdges(\n priceMin: number,\n priceMax: number,\n rowsLayout: RowsLayout,\n rowSize: number,\n tickSize: number,\n): Float64Array {\n if (!Number.isFinite(priceMin) || !Number.isFinite(priceMax) || rowSize <= 0) {\n return new Float64Array([priceMin, priceMin]);\n }\n if (priceMax <= priceMin) return new Float64Array([priceMin, priceMin]);\n\n if (rowsLayout === \"ticksPerRow\") {\n const bucketWidth = rowSize * tickSize;\n if (bucketWidth <= 0) return new Float64Array([priceMin, priceMin]);\n\n const startEdge = Math.floor(priceMin / bucketWidth) * bucketWidth;\n const endEdge = Math.ceil(priceMax / bucketWidth) * bucketWidth;\n const count = Math.max(1, Math.round((endEdge - startEdge) / bucketWidth));\n const edges = new Float64Array(count + 1);\n for (let i = 0; i <= count; i += 1) edges[i] = startEdge + i * bucketWidth;\n return edges;\n }\n\n const count = Math.max(1, Math.floor(rowSize));\n const width = (priceMax - priceMin) / count;\n const edges = new Float64Array(count + 1);\n for (let i = 0; i <= count; i += 1) edges[i] = priceMin + i * width;\n return edges;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bucketizeVolume.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/bucketizeVolume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bucketizeVolume.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/bucketizeVolume.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/lib/volume-profile/bucketize-volume.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type {\n BucketizedVolume,\n VolumeProfileBar,\n VolumeProfileBucket,\n VolumeProfileRow,\n VolumeSplit,\n} from \"./types.js\";\n\n/**\n * Distribute each bar's volume across overlapping price buckets and\n * return the Phase 5 `horizontal-histogram` bucket shape.\n *\n * @formula PLAN §9.2 — share = volume * overlap([bar.low, bar.high], bucket) / max(high - low, eps).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const buckets = bucketizeVolume(bars, new Float64Array([100, 101]), \"total\");\n */\nexport function bucketizeVolume(\n bars: ReadonlyArray<VolumeProfileBar>,\n bucketEdges: ArrayLike<number>,\n volumeSplit: VolumeSplit,\n): ReadonlyArray<VolumeProfileBucket> {\n return bucketizeVolumeDetailed(bars, bucketEdges, volumeSplit).buckets;\n}\n\n/**\n * Detailed bucketization retaining row bounds, directional volume,\n * total volume, and POC index for value-area/profile computation.\n *\n * @formula PLAN §9.2 — same overlap weighting as {@link bucketizeVolume}.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const detailed = bucketizeVolumeDetailed(bars, edges, \"upDown\");\n */\nexport function bucketizeVolumeDetailed(\n bars: ReadonlyArray<VolumeProfileBar>,\n bucketEdges: ArrayLike<number>,\n volumeSplit: VolumeSplit,\n): BucketizedVolume {\n const bucketCount = bucketEdges.length - 1;\n if (bucketCount <= 0) return { buckets: [], pocIdx: -1, rows: [], totalVolume: 0 };\n\n const upPerBucket = new Float64Array(bucketCount);\n const downPerBucket = new Float64Array(bucketCount);\n\n for (const bar of bars) {\n const vol = Number.isFinite(bar.volume) ? bar.volume : 0;\n if (vol <= 0) continue;\n\n const low = bar.low;\n const high = bar.high;\n // Skip bars whose price fields aren't finite or whose range is\n // inverted / zero. NaN inputs would otherwise propagate `share = NaN`\n // into every overlapping bucket and silently corrupt the profile.\n if (!Number.isFinite(low) || !Number.isFinite(high)) continue;\n if (!Number.isFinite(bar.open) || !Number.isFinite(bar.close)) continue;\n if (high <= low) continue;\n\n const span = high - low;\n const isUp = bar.close >= bar.open;\n\n for (let b = 0; b < bucketCount; b += 1) {\n const edgeLow = bucketEdges[b];\n const edgeHigh = bucketEdges[b + 1];\n if (edgeHigh <= low) continue;\n if (edgeLow >= high) break;\n\n const overlap = Math.min(edgeHigh, high) - Math.max(edgeLow, low);\n if (overlap <= 0) continue;\n\n const share = (vol * overlap) / span;\n if (isUp) upPerBucket[b] += share;\n else downPerBucket[b] += share;\n }\n }\n\n const rows = new Array<VolumeProfileRow>(bucketCount);\n const buckets = new Array<VolumeProfileBucket>(bucketCount);\n let totalVolume = 0;\n let pocIdx = -1;\n let pocVolume = -1;\n\n for (let b = 0; b < bucketCount; b += 1) {\n const rawUp = upPerBucket[b];\n const rawDown = downPerBucket[b];\n const split = splitVolume(rawUp, rawDown, volumeSplit);\n const low = bucketEdges[b];\n const high = bucketEdges[b + 1];\n const mid = (low + high) / 2;\n\n rows[b] = {\n downVolume: split.downVolume,\n high,\n low,\n mid,\n upVolume: split.upVolume,\n volume: split.volume,\n };\n buckets[b] = { price: mid, volume: split.volume };\n totalVolume += split.volume;\n if (split.volume > pocVolume) {\n pocVolume = split.volume;\n pocIdx = b;\n }\n }\n\n return { buckets, pocIdx, rows, totalVolume };\n}\n\nfunction splitVolume(\n rawUp: number,\n rawDown: number,\n volumeSplit: VolumeSplit,\n): { upVolume: number; downVolume: number; volume: number } {\n switch (volumeSplit) {\n case \"total\": {\n const volume = rawUp + rawDown;\n return { downVolume: 0, upVolume: volume, volume };\n }\n case \"delta\": {\n const upVolume = Math.max(0, rawUp - rawDown);\n const downVolume = Math.max(0, rawDown - rawUp);\n return { downVolume, upVolume, volume: upVolume + downVolume };\n }\n case \"upDown\":\n return { downVolume: rawDown, upVolume: rawUp, volume: rawUp + rawDown };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"developingSeries.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/developingSeries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"developingSeries.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/developingSeries.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/lib/volume-profile/developing-series.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport { buildBucketEdges } from \"./bucketEdges.js\";\nimport { bucketizeVolumeDetailed } from \"./bucketizeVolume.js\";\nimport type { DevelopingProfileSeries, VolumeProfileBar, VolumeProfileConfig } from \"./types.js\";\nimport { DEFAULT_TICK_SIZE } from \"./types.js\";\nimport { computeValueArea } from \"./valueArea.js\";\n\nconst WARMUP_BARS = 30;\n\n/**\n * Compute lane-indexed developing POC / VAH / VAL series.\n *\n * @formula PLAN §9.2 / §10.1.1 — for each lane bar, bucket all source\n * bars in the active profile window up to that bar's time.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const developing = computeDevelopingSeries({ laneBars: bars, finerBars: [], windowFromIdx: 0, windowToIdx: bars.length - 1, config: { rowSize: 20, valueAreaPct: 70 } });\n */\nexport function computeDevelopingSeries(args: {\n laneBars: ReadonlyArray<VolumeProfileBar>;\n finerBars: ReadonlyArray<VolumeProfileBar>;\n windowFromIdx: number;\n windowToIdx: number;\n config: VolumeProfileConfig;\n}): DevelopingProfileSeries {\n const { laneBars, finerBars, windowFromIdx, windowToIdx, config } = args;\n const laneCount = laneBars.length;\n const developingPoc = new Float64Array(laneCount);\n const developingVahHigh = new Float64Array(laneCount);\n const developingVahLow = new Float64Array(laneCount);\n developingPoc.fill(Number.NaN);\n developingVahHigh.fill(Number.NaN);\n developingVahLow.fill(Number.NaN);\n if (laneCount === 0) return { developingPoc, developingVahHigh, developingVahLow };\n\n const fromIdx = Math.max(0, Math.min(laneCount - 1, windowFromIdx));\n const toIdx = Math.max(fromIdx, Math.min(laneCount - 1, windowToIdx));\n const source = finerBars.length > 0 ? finerBars : laneBars;\n const sourceStart = lowerBoundTime(source, laneBars[fromIdx].time);\n let sourceEnd = sourceStart;\n\n for (let i = fromIdx; i <= toIdx; i += 1) {\n while (sourceEnd < source.length && source[sourceEnd].time <= laneBars[i].time)\n sourceEnd += 1;\n const slice = source.slice(sourceStart, sourceEnd);\n if (slice.length <= WARMUP_BARS) continue;\n\n const { priceMax, priceMin } = derivePriceRange(slice);\n const edges = buildBucketEdges(\n priceMin,\n priceMax,\n config.rowsLayout ?? \"numberOfRows\",\n config.rowSize,\n config.tickSize ?? DEFAULT_TICK_SIZE,\n );\n const bucketized = bucketizeVolumeDetailed(slice, edges, config.volumeSplit ?? \"upDown\");\n if (bucketized.totalVolume <= 0) continue;\n\n const valueArea = computeValueArea(bucketized.rows, config.valueAreaPct, bucketized.pocIdx);\n developingPoc[i] = valueArea.poc;\n developingVahHigh[i] = valueArea.valHigh;\n developingVahLow[i] = valueArea.valLow;\n }\n\n return { developingPoc, developingVahHigh, developingVahLow };\n}\n\nfunction lowerBoundTime(bars: ReadonlyArray<VolumeProfileBar>, target: number): number {\n let lo = 0;\n let hi = bars.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (bars[mid].time < target) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\n/**\n * Derive min/max price bounds for a bar slice.\n *\n * @formula PLAN §9.2 — bucket range spans the min low to max high\n * of the selected profile source.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const range = derivePriceRange(bars);\n */\nexport function derivePriceRange(bars: ReadonlyArray<Pick<VolumeProfileBar, \"high\" | \"low\">>): {\n priceMin: number;\n priceMax: number;\n} {\n let priceMin = Number.POSITIVE_INFINITY;\n let priceMax = Number.NEGATIVE_INFINITY;\n for (const bar of bars) {\n // Skip bars with non-finite OHLC. Per the Bar contract NaN is allowed\n // and would otherwise poison the running min/max (NaN comparisons\n // return false), letting NaN edges flow into bucketization.\n if (!Number.isFinite(bar.low) || !Number.isFinite(bar.high)) continue;\n if (bar.low < priceMin) priceMin = bar.low;\n if (bar.high > priceMax) priceMax = bar.high;\n }\n if (priceMin === Number.POSITIVE_INFINITY) return { priceMax: 0, priceMin: 0 };\n return { priceMax, priceMin };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8GAA8G;AAC9G,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACH,uBAAuB,EACvB,8BAA8B,EAC9B,0BAA0B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAe/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EACH,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAI5B,2BAA2B,GAC9B,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8GAA8G;AAC9G,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACH,uBAAuB,EACvB,8BAA8B,EAC9B,0BAA0B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAe/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EACH,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAI5B,2BAA2B,GAC9B,MAAM,eAAe,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/volume-profile-shared.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nexport { buildBucketEdges } from \"./bucketEdges.js\";\nexport { bucketizeVolume, bucketizeVolumeDetailed } from \"./bucketizeVolume.js\";\nexport { computeDevelopingSeries, derivePriceRange } from \"./developingSeries.js\";\nexport { findInterceptIndex } from \"./intercept.js\";\nexport {\n assessVolumeProfileCost,\n VOLUME_PROFILE_HEAVY_THRESHOLD,\n VOLUME_PROFILE_MAX_BUCKETS,\n} from \"./tooHeavy.js\";\nexport { DEFAULT_TICK_SIZE } from \"./types.js\";\nexport type {\n BucketizedVolume,\n DevelopingProfileSeries,\n VolumeProfileConfig as ProfileConfig,\n RowsLayout,\n ValueAreaResult,\n VolumeProfileBar,\n VolumeProfileBucket,\n VolumeProfileConfig,\n VolumeProfileCostStatus,\n VolumeProfileResult,\n VolumeProfileRow,\n VolumeSplit,\n} from \"./types.js\";\nexport { computeValueArea } from \"./valueArea.js\";\nexport { computeProfile, sliceBarsByTime } from \"./volumeProfileShared.js\";\nexport {\n commitVolumeProfileSnapshot,\n createVolumeProfileCore,\n degenerateVolumeProfile,\n emitVolumeProfileHistogram,\n emptyVolumeProfileSnapshot,\n resolveVolumeProfileSnapshot,\n type HistogramBucket,\n type VolumeProfileCore,\n type VolumeProfileSnapshot,\n volumeProfileConfigFromOpts,\n} from \"./scaffold.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/intercept.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kGAAkG;AAClG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAC9B,IAA2D,EAC3D,OAAe,EACf,KAAa;IAEb,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK;YAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/intercept.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kGAAkG;AAClG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAC9B,IAA2D,EAC3D,OAAe,EACf,KAAa;IAEb,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK;YAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/intercept.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type { VolumeProfileBar } from \"./types.js\";\n\n/**\n * Find the first future bar whose `[low, high]` range intercepts\n * `price`, or the rightmost bar when no intercept exists.\n *\n * @formula PLAN §10.1.1 — right-extension line ends at first bar\n * containing the reference price, else chart right edge.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const idx = findInterceptIndex(bars, 10, 100);\n */\nexport function findInterceptIndex(\n bars: ReadonlyArray<Pick<VolumeProfileBar, \"high\" | \"low\">>,\n fromIdx: number,\n price: number,\n): number {\n const n = bars.length;\n if (n === 0) return -1;\n if (!Number.isFinite(price)) return n - 1;\n\n for (let i = Math.max(0, fromIdx + 1); i < n; i += 1) {\n const bar = bars[i];\n if (bar.low <= price && bar.high >= price) return i;\n }\n\n return n - 1;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/scaffold.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { PlotEmission } from \"@invinite-org/chartlang-adapter-kit\";\n\nimport { pushDiagnostic, pushPlot } from \"../../../emit/index.js\";\nimport { Float64RingBuffer } from \"../../../ringBuffer.js\";\nimport type { RuntimeContext } from \"../../../runtimeContext.js\";\n\nimport { type VolumeProfileBar, type VolumeProfileResult, computeProfile } from \"./index.js\";\nimport type { ProfileConfig } from \"./index.js\";\n\n/**\n * Histogram bucket shape shared by all four volume-profile primitives.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const bucket: HistogramBucket = { price: 100, volume: 10 };\n */\nexport type HistogramBucket = Readonly<{\n price: number;\n volume: number;\n color?: string;\n}>;\n\n/**\n * The \"what we computed for this bar\" snapshot used to commit to the\n * slot's ring buffers and emit the histogram. NaN values short-circuit\n * the buffer writes to NaN-warmup.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const snap: VolumeProfileSnapshot = { buckets: [], poc: NaN, valHigh: NaN, valLow: NaN };\n */\nexport type VolumeProfileSnapshot = Readonly<{\n buckets: ReadonlyArray<HistogramBucket>;\n poc: number;\n valHigh: number;\n valLow: number;\n}>;\n\n/**\n * Per-VP slot state: three Float64 ring buffers (POC / VAH / VAL) plus\n * the latest computed buckets. Callers wrap this with a primitive-\n * specific `result` object that exposes `Series<number>` views over the\n * buffers and (optionally) the `buckets` getter.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const core = createVolumeProfileCore(capacity);\n */\nexport type VolumeProfileCore = {\n readonly pocBuffer: Float64RingBuffer;\n readonly valHighBuffer: Float64RingBuffer;\n readonly valLowBuffer: Float64RingBuffer;\n buckets: ReadonlyArray<HistogramBucket>;\n};\n\nconst DEFAULT_ROW_SIZE = 24;\nconst DEFAULT_VALUE_AREA_PCT = 0.7;\nconst HISTOGRAM_SLOT_SUFFIX = \"/histogram\";\n\n/**\n * Allocate the three Float64 ring buffers + an empty `buckets` array\n * shared by every volume-profile slot.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const core = createVolumeProfileCore(capacity);\n */\nexport function createVolumeProfileCore(capacity: number): VolumeProfileCore {\n return {\n buckets: [],\n pocBuffer: new Float64RingBuffer(capacity),\n valHighBuffer: new Float64RingBuffer(capacity),\n valLowBuffer: new Float64RingBuffer(capacity),\n };\n}\n\n/**\n * Normalise a primitive's options into the shared `ProfileConfig`.\n * `rowSize` defaults to 24 and `valueAreaPct` defaults to 0.7 — both\n * values match the upstream invinite reference. `valueAreaPct <= 1` is\n * interpreted as a fraction and scaled to percent.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const cfg = volumeProfileConfigFromOpts({ rowSize: 20, valueAreaPct: 0.7 });\n */\nexport function volumeProfileConfigFromOpts(opts: {\n rowSize?: number;\n valueAreaPct?: number;\n}): ProfileConfig {\n const rowSize = opts.rowSize;\n const valueAreaPct = opts.valueAreaPct ?? DEFAULT_VALUE_AREA_PCT;\n return {\n rowSize: rowSize === undefined || rowSize <= 0 ? DEFAULT_ROW_SIZE : rowSize,\n valueAreaPct: valueAreaPct <= 1 ? valueAreaPct * 100 : valueAreaPct,\n };\n}\n\n/**\n * Apply a single-bucket fallback for windows where the full bucketizer\n * cannot produce a profile (constant-price input, single-bar window,\n * etc.). Returns `null` when no finite-close / positive-volume bar\n * exists in the window.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const fallback = degenerateVolumeProfile(bars, \"#fff\");\n */\nexport function degenerateVolumeProfile(\n bars: ReadonlyArray<VolumeProfileBar>,\n bucketColor: string | undefined,\n): VolumeProfileSnapshot | null {\n let totalVolume = 0;\n let price = Number.NaN;\n for (const bar of bars) {\n if (!Number.isFinite(bar.close)) continue;\n price = bar.close;\n if (Number.isFinite(bar.volume) && bar.volume > 0) totalVolume += bar.volume;\n }\n if (!Number.isFinite(price) || totalVolume <= 0) return null;\n const bucket =\n bucketColor === undefined\n ? { price, volume: totalVolume }\n : { price, volume: totalVolume, color: bucketColor };\n return {\n buckets: [bucket],\n poc: price,\n valHigh: price,\n valLow: price,\n };\n}\n\n/**\n * Empty / NaN snapshot returned when no bars are in the window and\n * the degenerate fallback also fails to produce one.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const snap = emptyVolumeProfileSnapshot();\n */\nexport function emptyVolumeProfileSnapshot(): VolumeProfileSnapshot {\n return {\n buckets: [],\n poc: Number.NaN,\n valHigh: Number.NaN,\n valLow: Number.NaN,\n };\n}\n\n/**\n * Common \"compute → apply bucketColor → fall back to degenerate\"\n * pipeline used by every VP primitive.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const snap = resolveVolumeProfileSnapshot({ bars, config, bucketColor: \"#fff\" });\n */\nexport function resolveVolumeProfileSnapshot(args: {\n bars: ReadonlyArray<VolumeProfileBar>;\n config: ProfileConfig;\n bucketColor: string | undefined;\n}): VolumeProfileSnapshot {\n const { bars, config, bucketColor } = args;\n const profile: VolumeProfileResult | null =\n bars.length === 0\n ? null\n : computeProfile({\n config,\n laneBars: bars,\n windowFromIdx: 0,\n windowToIdx: bars.length - 1,\n });\n if (profile !== null && profile.buckets.length > 0) {\n return {\n buckets: profile.buckets.map((bucket) =>\n bucketColor === undefined ? bucket : { ...bucket, color: bucketColor },\n ),\n poc: profile.poc,\n valHigh: profile.valHigh,\n valLow: profile.valLow,\n };\n }\n return degenerateVolumeProfile(bars, bucketColor) ?? emptyVolumeProfileSnapshot();\n}\n\n/**\n * Commit a snapshot to a slot's POC / VAH / VAL ring buffers. Append\n * on close, replace-head on tick. Updates the `buckets` cache.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // commitVolumeProfileSnapshot(core, false, snap);\n */\nexport function commitVolumeProfileSnapshot(\n core: VolumeProfileCore,\n isTick: boolean,\n snapshot: VolumeProfileSnapshot,\n): void {\n core.buckets = snapshot.buckets;\n if (isTick) {\n core.pocBuffer.replaceHead(snapshot.poc);\n core.valHighBuffer.replaceHead(snapshot.valHigh);\n core.valLowBuffer.replaceHead(snapshot.valLow);\n } else {\n core.pocBuffer.append(snapshot.poc);\n core.valHighBuffer.append(snapshot.valHigh);\n core.valLowBuffer.append(snapshot.valLow);\n }\n}\n\n/**\n * Emit the auto-generated `horizontal-histogram` PlotEmission for a\n * VP primitive, or a deduped `unsupported-plot-kind` diagnostic when\n * the adapter cannot render the kind. The dedup key includes the slot\n * id so an indicator that reuses VP across multiple call sites still\n * receives one diagnostic per call site, not per bar.\n *\n * @formula N/A — internal volume-profile slot scaffolding (see the four\n * `ta.*VolumeProfile` primitives for the math contract).\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // emitVolumeProfileHistogram(ctx, slotId, \"Anchored Volume Profile\", snap.poc, snap.buckets);\n */\nexport function emitVolumeProfileHistogram(\n ctx: RuntimeContext,\n slotId: string,\n title: string,\n value: number,\n buckets: ReadonlyArray<HistogramBucket>,\n): void {\n if (!ctx.capabilities.plots.has(\"horizontal-histogram\")) {\n const key = `unsupported-plot-kind|${slotId}`;\n if (ctx.diagnosedRequestKeys.has(key)) return;\n ctx.diagnosedRequestKeys.add(key);\n pushDiagnostic(ctx.emissions, {\n kind: \"diagnostic\",\n severity: \"warning\",\n code: \"unsupported-plot-kind\",\n message: 'Adapter cannot render plot kind \"horizontal-histogram\".',\n slotId,\n bar: ctx.barIndex(),\n });\n return;\n }\n const emission: PlotEmission = {\n bar: ctx.barIndex(),\n color: null,\n kind: \"plot\",\n meta: {},\n pane: \"overlay\",\n slotId: `${slotId}${HISTOGRAM_SLOT_SUFFIX}`,\n style: { kind: \"horizontal-histogram\", buckets },\n time: ctx.stream.bar.time,\n title,\n value: Number.isFinite(value) ? value : null,\n };\n pushPlot(ctx.emissions, emission);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tooHeavy.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/tooHeavy.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kGAAkG;AAClG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAQvC;IACG,IAAI,IAAI,CAAC,gBAAgB,GAAG,8BAA8B,EAAE,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACpF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,0BAA0B,CAAC;IACjE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,WAAW,GAAG,UAAU,EAAE,CAAC;QACrE,OAAO;YACH,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,kBAAkB;YAC1B,kBAAkB,EACd,IAAI,CAAC,UAAU,KAAK,aAAa;gBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CACL,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;oBACnC,CAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CACvC;gBACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;SACpC,CAAC;IACN,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,mBAAmB,CAAC,IAM5B;IAUG,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7C,IACI,OAAO,KAAK,SAAS;QACrB,QAAQ,KAAK,SAAS;QACtB,QAAQ,KAAK,SAAS;QACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,OAAO,IAAI,CAAC;QACZ,QAAQ,IAAI,QAAQ,EACtB,CAAC;QACC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IACvC,IAAI,IAAI,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;QACjC,OAAO,KAAK,GAAG,CAAC;YACZ,CAAC,CAAC;gBACI,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC;gBACrD,IAAI,EAAE,WAAW;gBACjB,QAAQ;gBACR,QAAQ;gBACR,OAAO;gBACP,QAAQ;aACX;YACH,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO;QACH,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAChC,IAAI,EAAE,WAAW;QACjB,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,QAAQ;KACX,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"tooHeavy.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/tooHeavy.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kGAAkG;AAClG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAQvC;IACG,IAAI,IAAI,CAAC,gBAAgB,GAAG,8BAA8B,EAAE,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACpF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,0BAA0B,CAAC;IACjE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,WAAW,GAAG,UAAU,EAAE,CAAC;QACrE,OAAO;YACH,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,kBAAkB;YAC1B,kBAAkB,EACd,IAAI,CAAC,UAAU,KAAK,aAAa;gBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CACL,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;oBACnC,CAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CACvC;gBACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;SACpC,CAAC;IACN,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,mBAAmB,CAAC,IAM5B;IAUG,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7C,IACI,OAAO,KAAK,SAAS;QACrB,QAAQ,KAAK,SAAS;QACtB,QAAQ,KAAK,SAAS;QACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,OAAO,IAAI,CAAC;QACZ,QAAQ,IAAI,QAAQ,EACtB,CAAC;QACC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IACvC,IAAI,IAAI,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;QACjC,OAAO,KAAK,GAAG,CAAC;YACZ,CAAC,CAAC;gBACI,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC;gBACrD,IAAI,EAAE,WAAW;gBACjB,QAAQ;gBACR,QAAQ;gBACR,OAAO;gBACP,QAAQ;aACX;YACH,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO;QACH,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAChC,IAAI,EAAE,WAAW;QACjB,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,QAAQ;KACX,CAAC;AACN,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/too-heavy.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type { RowsLayout, VolumeProfileCostStatus } from \"./types.js\";\n\n/**\n * Finer-bar count threshold from the invinite profile renderer.\n *\n * @formula PLAN §9.2 — cap finer-bar scans for one profile compute.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const max = VOLUME_PROFILE_HEAVY_THRESHOLD;\n */\nexport const VOLUME_PROFILE_HEAVY_THRESHOLD = 50_000;\n\n/**\n * Default maximum bucket count for a single pure profile compute.\n *\n * @formula PLAN §9.2 — cap bucket allocations for one profile compute.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const max = VOLUME_PROFILE_MAX_BUCKETS;\n */\nexport const VOLUME_PROFILE_MAX_BUCKETS = 2_000;\n\n/**\n * Assess whether a volume-profile input window is too expensive and\n * optionally recommend a coarser `rowSize` fallback.\n *\n * @formula PLAN §9.2 — guard range / rowSize combinations that would\n * allocate pathological bucket counts before bucketing.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const status = assessVolumeProfileCost({ finerCandleCount: 1000, priceMin: 1, priceMax: 100, rowSize: 1, rowsLayout: \"numberOfRows\" });\n */\nexport function assessVolumeProfileCost(args: {\n finerCandleCount: number;\n rowSize?: number;\n rowsLayout?: RowsLayout;\n tickSize?: number;\n priceMin?: number;\n priceMax?: number;\n maxBuckets?: number;\n}): VolumeProfileCostStatus {\n if (args.finerCandleCount > VOLUME_PROFILE_HEAVY_THRESHOLD) {\n return { heavy: true, reason: \"too-many-finer-bars\", recommendedRowSize: null };\n }\n\n const maxBuckets = args.maxBuckets ?? VOLUME_PROFILE_MAX_BUCKETS;\n const estimate = estimateBucketCount(args);\n if (estimate.kind === \"estimated\" && estimate.bucketCount > maxBuckets) {\n return {\n heavy: true,\n reason: \"too-many-buckets\",\n recommendedRowSize:\n args.rowsLayout === \"ticksPerRow\"\n ? Math.ceil(\n (estimate.priceMax - estimate.priceMin) /\n (maxBuckets * estimate.tickSize),\n )\n : Math.max(1, maxBuckets),\n };\n }\n\n return { heavy: false, reason: null, recommendedRowSize: null };\n}\n\nfunction estimateBucketCount(args: {\n rowSize?: number;\n rowsLayout?: RowsLayout;\n tickSize?: number;\n priceMin?: number;\n priceMax?: number;\n}):\n | { bucketCount: 0; kind: \"invalid\" }\n | {\n bucketCount: number;\n kind: \"estimated\";\n priceMin: number;\n priceMax: number;\n rowSize: number;\n tickSize: number;\n } {\n const { priceMax, priceMin, rowSize } = args;\n if (\n rowSize === undefined ||\n priceMin === undefined ||\n priceMax === undefined ||\n !Number.isFinite(priceMin) ||\n !Number.isFinite(priceMax) ||\n rowSize <= 0 ||\n priceMax <= priceMin\n ) {\n return { bucketCount: 0, kind: \"invalid\" };\n }\n const tickSize = args.tickSize ?? 0.01;\n if (args.rowsLayout === \"ticksPerRow\") {\n const width = rowSize * tickSize;\n return width > 0\n ? {\n bucketCount: Math.ceil((priceMax - priceMin) / width),\n kind: \"estimated\",\n priceMax,\n priceMin,\n rowSize,\n tickSize,\n }\n : { bucketCount: 0, kind: \"invalid\" };\n }\n return {\n bucketCount: Math.floor(rowSize),\n kind: \"estimated\",\n priceMax,\n priceMin,\n rowSize,\n tickSize,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8FAA8F;AAC9F,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AA6LjE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8FAA8F;AAC9F,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AA6LjE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// Ported from ../invinite/src/components/trading-chart/indicators/lib/volume-profile/types.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\n/**\n * Bucket-width strategy. `ticksPerRow` derives from `tickSize`;\n * `numberOfRows` divides the range evenly.\n *\n * @formula PLAN §9.2 — controls bucket width derivation for profile rows.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const layout: RowsLayout = \"numberOfRows\";\n */\nexport type RowsLayout = \"numberOfRows\" | \"ticksPerRow\";\n\n/**\n * Bar coloring strategy inside each bucket.\n *\n * @formula PLAN §9.2 — selects total, delta, or up/down volume partitioning.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const split: VolumeSplit = \"upDown\";\n */\nexport type VolumeSplit = \"delta\" | \"total\" | \"upDown\";\n\n/**\n * Minimal OHLCV shape consumed by the pure volume-profile helpers.\n *\n * @formula PLAN §9.2 — normalized OHLCV input for profile bucketing.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const bar: VolumeProfileBar = { time: 0, open: 1, high: 2, low: 1, close: 2, volume: 100 };\n */\nexport type VolumeProfileBar = Readonly<{\n time: number;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n}>;\n\n/**\n * Horizontal-histogram bucket shape used by Phase 5 plot emissions.\n *\n * @formula PLAN §9.2 — price row plus accumulated volume.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const bucket: VolumeProfileBucket = { price: 100, volume: 25 };\n */\nexport type VolumeProfileBucket = Readonly<{\n price: number;\n volume: number;\n}>;\n\n/**\n * Internal row shape retaining bucket bounds and directional volume.\n *\n * @formula PLAN §9.2 — bucket bounds plus directional volume totals.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const row: VolumeProfileRow = { low: 99, high: 101, mid: 100, volume: 10, upVolume: 10, downVolume: 0 };\n */\nexport type VolumeProfileRow = Readonly<{\n low: number;\n high: number;\n mid: number;\n volume: number;\n upVolume: number;\n downVolume: number;\n}>;\n\n/**\n * Shared math config consumed by bucket/value-area/developing helpers.\n *\n * @formula PLAN §9.2 — shared profile row count and value-area settings.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const config: VolumeProfileConfig = { rowSize: 24, valueAreaPct: 70 };\n */\nexport type VolumeProfileConfig = Readonly<{\n rowSize: number;\n valueAreaPct: number;\n rowsLayout?: RowsLayout;\n volumeSplit?: VolumeSplit;\n tickSize?: number;\n}>;\n\n/**\n * Cost guard result for profile windows that would allocate too many\n * buckets or scan too many finer bars.\n *\n * @formula PLAN §9.2 — cost guard state for profile windows.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const status: VolumeProfileCostStatus = { heavy: false, reason: null, recommendedRowSize: null };\n */\nexport type VolumeProfileCostStatus = Readonly<{\n heavy: boolean;\n reason: \"too-many-buckets\" | \"too-many-finer-bars\" | null;\n recommendedRowSize: number | null;\n}>;\n\n/**\n * Value-area result: high/low price bounds plus point-of-control.\n *\n * @formula PLAN §9.2 — point-of-control and value-area bounds.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const va: ValueAreaResult = { valHigh: 101, valLow: 99, poc: 100, vahIdx: 1, valIdx: 0, pocIdx: 0, cumulativeVolume: 10 };\n */\nexport type ValueAreaResult = Readonly<{\n valHigh: number;\n valLow: number;\n poc: number;\n vahIdx: number;\n valIdx: number;\n pocIdx: number;\n cumulativeVolume: number;\n}>;\n\n/**\n * Detailed bucketization output.\n *\n * @formula PLAN §9.2 — raw histogram buckets and total volume.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const out: BucketizedVolume = { buckets: [], rows: [], totalVolume: 0, pocIdx: -1 };\n */\nexport type BucketizedVolume = Readonly<{\n buckets: ReadonlyArray<VolumeProfileBucket>;\n rows: ReadonlyArray<VolumeProfileRow>;\n totalVolume: number;\n pocIdx: number;\n}>;\n\n/**\n * Developing POC/value-area time-series arrays.\n *\n * @formula PLAN §9.2 — developing profile time-series outputs.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const dev: DevelopingProfileSeries = { developingPoc: new Float64Array(0), developingVahHigh: new Float64Array(0), developingVahLow: new Float64Array(0) };\n */\nexport type DevelopingProfileSeries = Readonly<{\n developingPoc: Float64Array;\n developingVahHigh: Float64Array;\n developingVahLow: Float64Array;\n}>;\n\n/**\n * Full pure profile result consumed by later volume-profile primitives.\n *\n * @formula PLAN §9.2 — complete profile histogram, value area, and cost state.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const result: VolumeProfileResult = { buckets: [], rows: [], valueAreaMask: new Float64Array(0), poc: Number.NaN, valHigh: Number.NaN, valLow: Number.NaN, costStatus: { heavy: false, reason: null, recommendedRowSize: null } };\n */\nexport type VolumeProfileResult = Readonly<{\n buckets: ReadonlyArray<VolumeProfileBucket>;\n rows: ReadonlyArray<VolumeProfileRow>;\n valueAreaMask: Float64Array;\n poc: number;\n valHigh: number;\n valLow: number;\n costStatus: VolumeProfileCostStatus;\n developing?: DevelopingProfileSeries;\n}>;\n\n/**\n * Sentinel tick size used when no symbol-specific minimum tick is supplied.\n *\n * @formula PLAN §9.2 — fallback row quantum for symbols without min tick.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const tick = DEFAULT_TICK_SIZE;\n */\nexport const DEFAULT_TICK_SIZE = 0.01;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"valueArea.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/valueArea.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mGAAmG;AACnG,gDAAgD;AAChD,8EAA8E;AAC9E,iEAAiE;AAIjE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC5B,IAAqC,EACrC,YAAY,GAAG,EAAE,EACjB,SAAiB,YAAY,CAAC,IAAI,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3D,OAAO;YACH,gBAAgB,EAAE,CAAC;YACnB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,MAAM;YACN,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,MAAM,CAAC,GAAG;YACnB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM,CAAC,GAAG;SACrB,CAAC;IACN,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IAC/C,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAErC,OAAO,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtE,MAAM,cAAc,GAAG,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACjD,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,cAAc,EAAE,CAAC;YACjB,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACpC,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;gBAAE,QAAQ,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QACxE,CAAC;QAED,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,cAAc,EAAE,CAAC;YACjB,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACnC,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC;gBAAE,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7D,CAAC;QAED,IAAI,cAAc,IAAI,CAAC,CAAC,cAAc,IAAI,QAAQ,IAAI,QAAQ,CAAC,EAAE,CAAC;YAC9D,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1C,UAAU,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACvC,OAAO,IAAI,CAAC,CAAC;YACb,IAAI,OAAO,IAAI,UAAU,GAAG,MAAM,EAAE,CAAC;gBACjC,UAAU,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;gBACvC,OAAO,IAAI,CAAC,CAAC;YACjB,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACtC,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,OAAO,IAAI,UAAU,GAAG,MAAM,EAAE,CAAC;gBACjC,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;gBACtC,MAAM,IAAI,CAAC,CAAC;YAChB,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO;QACH,gBAAgB,EAAE,UAAU;QAC5B,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG;QACrB,MAAM;QACN,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI;QAC3B,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG;KAC3B,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CAAC,IAAqC;IACvD,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC7B,MAAM,GAAG,CAAC,CAAC;YACX,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/B,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"valueArea.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/valueArea.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/lib/volume-profile/value-area.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport type { ValueAreaResult, VolumeProfileRow } from \"./types.js\";\n\n/**\n * Compute greedy expand-from-POC value-area bounds.\n *\n * @formula PLAN §9.2 — start at POC, then absorb the larger of the\n * next two above-buckets vs below-buckets until target volume.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const va = computeValueArea(rows, 70);\n */\nexport function computeValueArea(\n rows: ReadonlyArray<VolumeProfileRow>,\n valueAreaPct = 70,\n pocIdx: number = findPocIndex(rows),\n): ValueAreaResult {\n if (rows.length === 0 || pocIdx < 0 || pocIdx >= rows.length) {\n return {\n cumulativeVolume: 0,\n poc: Number.NaN,\n pocIdx,\n vahIdx: pocIdx,\n valHigh: Number.NaN,\n valIdx: pocIdx,\n valLow: Number.NaN,\n };\n }\n\n const totalVolume = rows.reduce((sum, row) => sum + row.volume, 0);\n const targetPct = Math.max(0, Math.min(100, valueAreaPct));\n const target = totalVolume * (targetPct / 100);\n let lowIdx = pocIdx;\n let highIdx = pocIdx;\n let cumulative = rows[pocIdx].volume;\n\n while (cumulative < target && (lowIdx > 0 || highIdx + 1 < rows.length)) {\n const aboveAvailable = highIdx + 1 < rows.length;\n const belowAvailable = lowIdx - 1 >= 0;\n\n let aboveSum = 0;\n if (aboveAvailable) {\n aboveSum = rows[highIdx + 1].volume;\n if (highIdx + 2 < rows.length) aboveSum += rows[highIdx + 2].volume;\n }\n\n let belowSum = 0;\n if (belowAvailable) {\n belowSum = rows[lowIdx - 1].volume;\n if (lowIdx - 2 >= 0) belowSum += rows[lowIdx - 2].volume;\n }\n\n if (aboveAvailable && (!belowAvailable || aboveSum >= belowSum)) {\n const takeTwo = highIdx + 2 < rows.length;\n cumulative += rows[highIdx + 1].volume;\n highIdx += 1;\n if (takeTwo && cumulative < target) {\n cumulative += rows[highIdx + 1].volume;\n highIdx += 1;\n }\n } else {\n const takeTwo = lowIdx - 2 >= 0;\n cumulative += rows[lowIdx - 1].volume;\n lowIdx -= 1;\n if (takeTwo && cumulative < target) {\n cumulative += rows[lowIdx - 1].volume;\n lowIdx -= 1;\n }\n }\n }\n\n return {\n cumulativeVolume: cumulative,\n poc: rows[pocIdx].mid,\n pocIdx,\n vahIdx: highIdx,\n valHigh: rows[highIdx].high,\n valIdx: lowIdx,\n valLow: rows[lowIdx].low,\n };\n}\n\nfunction findPocIndex(rows: ReadonlyArray<VolumeProfileRow>): number {\n let pocIdx = -1;\n let pocVolume = -1;\n for (let i = 0; i < rows.length; i += 1) {\n if (rows[i].volume > pocVolume) {\n pocIdx = i;\n pocVolume = rows[i].volume;\n }\n }\n return pocIdx;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"volumeProfileShared.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/volumeProfileShared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"volumeProfileShared.js","sourceRoot":"","sources":["../../../../src/ta/lib/volume-profile/volumeProfileShared.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/lib/volume-profile/volume-profile-shared.ts\n// @ 3234c8c0c3f9880d9d1e3a3ee63ebd55ddd535f4.\n// Translated, not transcribed — ReadonlyArray<number> inputs, JSDoc, runtime.\n// See packages/runtime/src/ta/CLAUDE.md for the port convention.\n\nimport { buildBucketEdges } from \"./bucketEdges.js\";\nimport { bucketizeVolumeDetailed } from \"./bucketizeVolume.js\";\nimport { computeDevelopingSeries, derivePriceRange } from \"./developingSeries.js\";\nimport { assessVolumeProfileCost } from \"./tooHeavy.js\";\nimport type { VolumeProfileBar, VolumeProfileConfig, VolumeProfileResult } from \"./types.js\";\nimport { DEFAULT_TICK_SIZE } from \"./types.js\";\nimport { computeValueArea } from \"./valueArea.js\";\n\n/**\n * Compute the pure shared volume-profile payload used by all four\n * Phase 5 profile primitives.\n *\n * @formula PLAN §9.2 / §10.1.1 — slice the lane/finer window, bucket\n * volume by price, compute POC/value-area, optionally compute\n * developing POC/VA series in lane-bar space.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const profile = computeProfile({ laneBars: bars, finerBars: [], windowFromIdx: 0, windowToIdx: bars.length - 1, config: { rowSize: 20, valueAreaPct: 70 } });\n */\nexport function computeProfile(args: {\n laneBars: ReadonlyArray<VolumeProfileBar>;\n finerBars?: ReadonlyArray<VolumeProfileBar>;\n windowFromIdx: number;\n windowToIdx: number;\n config: VolumeProfileConfig;\n computeDeveloping?: boolean;\n}): VolumeProfileResult {\n const { laneBars, config } = args;\n const finerBars = args.finerBars ?? [];\n if (laneBars.length === 0) return emptyProfile(false, null, null);\n\n const fromIdx = Math.max(0, Math.min(laneBars.length - 1, args.windowFromIdx));\n const toIdx = Math.max(fromIdx, Math.min(laneBars.length - 1, args.windowToIdx));\n const laneSlice = laneBars.slice(fromIdx, toIdx + 1);\n\n const finerSlice = sliceBarsByTime(\n finerBars,\n laneSlice[0].time,\n laneSlice[laneSlice.length - 1].time,\n );\n const bucketSource = finerSlice.length > 0 ? finerSlice : laneSlice;\n const range = derivePriceRange(bucketSource);\n const costStatus = assessVolumeProfileCost({\n finerCandleCount: finerSlice.length,\n priceMax: range.priceMax,\n priceMin: range.priceMin,\n rowSize: config.rowSize,\n rowsLayout: config.rowsLayout ?? \"numberOfRows\",\n tickSize: config.tickSize ?? DEFAULT_TICK_SIZE,\n });\n if (costStatus.heavy)\n return emptyProfile(costStatus.heavy, costStatus.reason, costStatus.recommendedRowSize);\n if (range.priceMax <= range.priceMin) return emptyProfile(false, null, null);\n\n const edges = buildBucketEdges(\n range.priceMin,\n range.priceMax,\n config.rowsLayout ?? \"numberOfRows\",\n config.rowSize,\n config.tickSize ?? DEFAULT_TICK_SIZE,\n );\n const bucketized = bucketizeVolumeDetailed(bucketSource, edges, config.volumeSplit ?? \"upDown\");\n if (bucketized.totalVolume <= 0) return emptyProfile(false, null, null);\n\n const valueArea = computeValueArea(bucketized.rows, config.valueAreaPct, bucketized.pocIdx);\n const valueAreaMask = new Float64Array(bucketized.rows.length);\n const lo = Math.min(valueArea.vahIdx, valueArea.valIdx);\n const hi = Math.max(valueArea.vahIdx, valueArea.valIdx);\n for (let i = 0; i < valueAreaMask.length; i += 1) valueAreaMask[i] = i >= lo && i <= hi ? 1 : 0;\n\n const base = {\n buckets: bucketized.buckets,\n costStatus,\n poc: valueArea.poc,\n rows: bucketized.rows,\n valHigh: valueArea.valHigh,\n valLow: valueArea.valLow,\n valueAreaMask,\n };\n\n if (args.computeDeveloping === true) {\n return {\n ...base,\n developing: computeDevelopingSeries({\n config,\n finerBars,\n laneBars,\n windowFromIdx: fromIdx,\n windowToIdx: toIdx,\n }),\n };\n }\n\n return base;\n}\n\nfunction emptyProfile(\n heavy: boolean,\n reason: VolumeProfileResult[\"costStatus\"][\"reason\"],\n recommendedRowSize: number | null,\n): VolumeProfileResult {\n return {\n buckets: [],\n costStatus: { heavy, reason, recommendedRowSize },\n poc: Number.NaN,\n rows: [],\n valHigh: Number.NaN,\n valLow: Number.NaN,\n valueAreaMask: new Float64Array(0),\n };\n}\n\n/**\n * Slice sorted bars to the inclusive `[timeFromMs, timeToMs]` window.\n *\n * @formula PLAN §10.1.1 — finer lower-timeframe bars are clipped to\n * the same wall-clock window as the lane profile.\n * @since 0.5\n * @internal\n * @stable\n * @example\n * // const slice = sliceBarsByTime(bars, 0, 60_000);\n */\nexport function sliceBarsByTime(\n bars: ReadonlyArray<VolumeProfileBar>,\n timeFromMs: number,\n timeToMs: number,\n): ReadonlyArray<VolumeProfileBar> {\n if (bars.length === 0) return bars;\n const start = lowerBoundTime(bars, timeFromMs);\n const end = upperBoundTime(bars, timeToMs);\n if (start >= end) return [];\n return bars.slice(start, end);\n}\n\nfunction lowerBoundTime(bars: ReadonlyArray<VolumeProfileBar>, target: number): number {\n let lo = 0;\n let hi = bars.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (bars[mid].time < target) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\nfunction upperBoundTime(bars: ReadonlyArray<VolumeProfileBar>, target: number): number {\n let lo = 0;\n let hi = bars.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (bars[mid].time <= target) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/vwma-of-float64.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
  /**
9
9
  * Volume-Weighted Moving Average over parallel `Float64Array` source +
10
10
  * volume streams. Walks past any leading-NaN source prefix, then for
@@ -1 +1 @@
1
- {"version":3,"file":"vwmaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/vwmaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sFAAsF;AACtF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,WAAW,CACvB,MAAoB,EACpB,MAAoB,EACpB,MAAc;IAEd,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAE9D,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACV,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC;YACnB,MAAM,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"vwmaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/vwmaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sFAAsF;AACtF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,WAAW,CACvB,MAAoB,EACpB,MAAoB,EACpB,MAAc;IAEd,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAE9D,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACV,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC;YACnB,MAAM,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/lib/vwma-of-float64.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * Volume-Weighted Moving Average over parallel `Float64Array` source +\n * volume streams. Walks past any leading-NaN source prefix, then for\n * each trailing `length`-bar window emits\n * `Σ(source[i − j] * volume[i − j]) / Σ(volume[i − j])`. A NaN volume\n * slot is treated as zero (matches invinite's `candles[i].volume ?? 0`\n * null-coalesce). A NaN source slot anywhere inside the window\n * short-circuits that bar's output to NaN; a window whose total volume\n * is `0` also emits NaN (the ratio is undefined).\n *\n * The source and volume arrays must be the same length; a mismatch\n * yields an all-NaN output. Warmup `[0, length − 2]` is `NaN`;\n * `out[length − 1]` is the first defined value.\n *\n * @formula out[i] = (Σ_{j=0..N-1} source[i − j] * volume[i − j])\n * / (Σ_{j=0..N-1} volume[i − j])\n * ; NaN when the denominator is 0.\n * @warmup length − 1\n * @since 0.2\n * @stable\n * @example\n * // import { vwmaFloat64 } from \"./vwmaFloat64\";\n * // const src = new Float64Array([10, 11, 12, 13]);\n * // const vol = new Float64Array([100, 200, 150, 50]);\n * // const out = vwmaFloat64(src, vol, 3);\n */\nexport function vwmaFloat64(\n source: Float64Array,\n volume: Float64Array,\n length: number,\n): Float64Array {\n const n = source.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0 || volume.length !== n) return out;\n\n let firstValidIdx = -1;\n for (let i = 0; i < n; i += 1) {\n if (Number.isFinite(source[i])) {\n firstValidIdx = i;\n break;\n }\n }\n if (firstValidIdx < 0 || n - firstValidIdx < length) return out;\n\n for (let i = firstValidIdx + length - 1; i < n; i += 1) {\n let pvSum = 0;\n let volSum = 0;\n let allFinite = true;\n for (let j = 0; j < length; j += 1) {\n const value = source[i - j];\n if (!Number.isFinite(value)) {\n allFinite = false;\n break;\n }\n const rawVol = volume[i - j];\n const v = Number.isFinite(rawVol) ? rawVol : 0;\n pvSum += value * v;\n volSum += v;\n }\n if (!allFinite) continue;\n out[i] = volSum > 0 ? pvSum / volSum : Number.NaN;\n }\n return out;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/wilder-directional.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
  import { wilderStep } from "./wilderSmoothing.js";
9
9
  /**
10
10
  * Wilder's `+DM` / `-DM` / `+DI` / `-DI` over a `length`-bar
@@ -1 +1 @@
1
- {"version":3,"file":"wilderDirectional.js","sourceRoot":"","sources":["../../../src/ta/lib/wilderDirectional.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wilderDirectional.js","sourceRoot":"","sources":["../../../src/ta/lib/wilderDirectional.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/lib/wilder-directional.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\nimport { wilderStep } from \"./wilderSmoothing.js\";\n\n/**\n * Wilder directional movement bundle. All four arrays have length\n * `n` (= `high.length`); warmup slots `[0, length - 1]` are `NaN`.\n *\n * `plusDm` / `minusDm` are the Wilder-smoothed per-bar directional\n * movement (divided by `length` so they read as averages — matches\n * what TradingView's `ta.dmi` plots). `plusDi` / `minusDi` are\n * `100 * smoothedPlusDm / smoothedTr` (symmetric for the minus\n * side); these are the values consumed by `adxFromDi`.\n *\n * @formula N/A — return-bundle type for {@link wilderDirectional}\n * @since 0.2\n * @stable\n * @example\n * // const dm: DirectionalMovement = wilderDirectional(h, l, c, 14);\n */\nexport type DirectionalMovement = Readonly<{\n plusDm: Float64Array;\n minusDm: Float64Array;\n plusDi: Float64Array;\n minusDi: Float64Array;\n}>;\n\n/**\n * Wilder's `+DM` / `-DM` / `+DI` / `-DI` over a `length`-bar\n * smoothing window. The per-bar raw `+DM` / `-DM` are computed from\n * consecutive high / low deltas, then smoothed via Wilder's α = 1/N\n * recurrence (reuses `wilderStep`). True Range is computed inline\n * (rather than via `lib/trSeries`) because this helper operates on\n * Float64Array inputs, not `Bar[]`.\n *\n * Warmup: `length` — one extra slot above the smoothing window so\n * the TR seed can settle. First valid slot index is `length`.\n *\n * `plusDi` / `minusDi` fall back to `0` when the smoothed TR is\n * zero (matches invinite). Any non-finite input slot inside the\n * seed window leaves the entire output `NaN` from that slot\n * onwards (Wilder recurrence cannot resume past a NaN seed).\n *\n * @formula upMove = high[i] - high[i-1] ;\n * downMove = low[i-1] - low[i] ;\n * plusDm = upMove > downMove && upMove > 0 ? upMove : 0 ;\n * minusDm = downMove > upMove && downMove > 0 ? downMove : 0 ;\n * tr[i] = max(h - l, |h - prevClose|, |l - prevClose|) ;\n * smoothed via wilderStep over `length`.\n * @warmup length\n * @since 0.2\n * @stable\n * @example\n * // import { wilderDirectional } from \"./wilderDirectional\";\n * // const dm = wilderDirectional(highs, lows, closes, 14);\n */\nexport function wilderDirectional(\n high: Float64Array,\n low: Float64Array,\n close: Float64Array,\n length: number,\n): DirectionalMovement {\n const n = high.length;\n const plusDm = new Float64Array(n);\n const minusDm = new Float64Array(n);\n const plusDi = new Float64Array(n);\n const minusDi = new Float64Array(n);\n plusDm.fill(Number.NaN);\n minusDm.fill(Number.NaN);\n plusDi.fill(Number.NaN);\n minusDi.fill(Number.NaN);\n\n if (n === 0 || length <= 0 || n <= length || low.length !== n || close.length !== n) {\n return { minusDi, minusDm, plusDi, plusDm };\n }\n\n let seedPlusDm = 0;\n let seedMinusDm = 0;\n let seedTr = high[0] - low[0];\n let seedFinite = Number.isFinite(seedTr);\n\n for (let i = 1; i <= length; i += 1) {\n const h = high[i];\n const l = low[i];\n const prevClose = close[i - 1];\n const prevHigh = high[i - 1];\n const prevLow = low[i - 1];\n\n if (\n !Number.isFinite(h) ||\n !Number.isFinite(l) ||\n !Number.isFinite(prevClose) ||\n !Number.isFinite(prevHigh) ||\n !Number.isFinite(prevLow)\n ) {\n seedFinite = false;\n break;\n }\n\n const a = h - l;\n const b = Math.abs(h - prevClose);\n const d = Math.abs(l - prevClose);\n const tr = Math.max(a, b, d);\n\n const upMove = h - prevHigh;\n const downMove = prevLow - l;\n const pDm = upMove > downMove && upMove > 0 ? upMove : 0;\n const mDm = downMove > upMove && downMove > 0 ? downMove : 0;\n\n seedPlusDm += pDm;\n seedMinusDm += mDm;\n seedTr += tr;\n }\n\n if (!seedFinite) return { minusDi, minusDm, plusDi, plusDm };\n\n let smoothedPlusDm = seedPlusDm;\n let smoothedMinusDm = seedMinusDm;\n let smoothedTr = seedTr;\n\n plusDm[length] = smoothedPlusDm / length;\n minusDm[length] = smoothedMinusDm / length;\n plusDi[length] = smoothedTr === 0 ? 0 : (100 * smoothedPlusDm) / smoothedTr;\n minusDi[length] = smoothedTr === 0 ? 0 : (100 * smoothedMinusDm) / smoothedTr;\n\n for (let i = length + 1; i < n; i += 1) {\n const h = high[i];\n const l = low[i];\n const prevClose = close[i - 1];\n const prevHigh = high[i - 1];\n const prevLow = low[i - 1];\n\n if (\n !Number.isFinite(h) ||\n !Number.isFinite(l) ||\n !Number.isFinite(prevClose) ||\n !Number.isFinite(prevHigh) ||\n !Number.isFinite(prevLow)\n ) {\n return { minusDi, minusDm, plusDi, plusDm };\n }\n\n const a = h - l;\n const b = Math.abs(h - prevClose);\n const d = Math.abs(l - prevClose);\n const tr = Math.max(a, b, d);\n\n const upMove = h - prevHigh;\n const downMove = prevLow - l;\n const pDm = upMove > downMove && upMove > 0 ? upMove : 0;\n const mDm = downMove > upMove && downMove > 0 ? downMove : 0;\n\n smoothedPlusDm = wilderStep(smoothedPlusDm, pDm, length);\n smoothedMinusDm = wilderStep(smoothedMinusDm, mDm, length);\n smoothedTr = wilderStep(smoothedTr, tr, length);\n\n plusDm[i] = smoothedPlusDm / length;\n minusDm[i] = smoothedMinusDm / length;\n plusDi[i] = smoothedTr === 0 ? 0 : (100 * smoothedPlusDm) / smoothedTr;\n minusDi[i] = smoothedTr === 0 ? 0 : (100 * smoothedMinusDm) / smoothedTr;\n }\n\n return { minusDi, minusDm, plusDi, plusDm };\n}\n"]}
@@ -4,8 +4,8 @@
4
4
  // New helper extracted from invinite/src/components/trading-chart/indicators/
5
5
  // rsi.ts and atr.ts Wilder smoothing loops
6
6
  // (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © 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
  /**
10
10
  * One step of Wilder's α = 1/length smoothing. Returns the updated
11
11
  * running average given the prior average and a new sample:
@@ -1 +1 @@
1
- {"version":3,"file":"wilderSmoothing.js","sourceRoot":"","sources":["../../../src/ta/lib/wilderSmoothing.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,8EAA8E;AAC9E,6CAA6C;AAC7C,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,MAAc,EAAE,MAAc;IACnE,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"wilderSmoothing.js","sourceRoot":"","sources":["../../../src/ta/lib/wilderSmoothing.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,8EAA8E;AAC9E,6CAA6C;AAC7C,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,MAAc,EAAE,MAAc;IACnE,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AACnD,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// New helper extracted from invinite/src/components/trading-chart/indicators/\n// rsi.ts and atr.ts Wilder smoothing loops\n// (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * One step of Wilder's α = 1/length smoothing. Returns the updated\n * running average given the prior average and a new sample:\n * `prev * (length − 1) / length + sample / length`. RSI's avgGain /\n * avgLoss recurrence and ATR's Wilder ATR recurrence both fold onto\n * this helper so a single line carries the math.\n *\n * @formula out = prev * (length − 1) / length + sample / length\n * @since 0.1\n * @stable\n * @example\n * // import { wilderStep } from \"./wilderSmoothing\";\n * // const nextAvg = wilderStep(prevAvg, gain, 14);\n */\nexport function wilderStep(prev: number, sample: number, length: number): number {\n return (prev * (length - 1) + sample) / length;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/lib/wma-of-float64.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
  /**
9
9
  * Weighted Moving Average over a `Float64Array` input. Walks past any
10
10
  * leading-NaN prefix, then runs a linearly-weighted mean over each
@@ -1 +1 @@
1
- {"version":3,"file":"wmaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/wmaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,qFAAqF;AACrF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,UAAU,CAAC,MAAoB,EAAE,MAAc;IAC3D,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEvC,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACV,CAAC;YACD,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"wmaFloat64.js","sourceRoot":"","sources":["../../../src/ta/lib/wmaFloat64.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,qFAAqF;AACrF,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,UAAU,CAAC,MAAoB,EAAE,MAAc;IAC3D,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEvC,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM;YACV,CAAC;YACD,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/lib/wma-of-float64.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n\n/**\n * Weighted Moving Average over a `Float64Array` input. Walks past any\n * leading-NaN prefix, then runs a linearly-weighted mean over each\n * trailing `length`-bar window with weights `(1, 2, …, N)` and\n * denominator `N(N + 1) / 2`. A NaN anywhere inside a window\n * short-circuits that bar's output to NaN — full-recompute weighted\n * windows cannot meaningfully forward-fill a gap.\n *\n * Warmup `[0, length − 2]` is `NaN`; `out[length − 1]` is the first\n * defined value.\n *\n * @formula denom = N(N + 1) / 2 ;\n * out[i] = (Σ_{j=0..N-1} input[i − j] * (N − j)) / denom\n * @warmup length − 1\n * @since 0.2\n * @stable\n * @example\n * // import { wmaFloat64 } from \"./wmaFloat64\";\n * // const out = wmaFloat64(new Float64Array([1, 2, 3, 4]), 3);\n */\nexport function wmaFloat64(source: Float64Array, length: number): Float64Array {\n const n = source.length;\n const out = new Float64Array(n);\n out.fill(Number.NaN);\n if (length <= 0 || n === 0) return out;\n\n const denom = (length * (length + 1)) / 2;\n\n let firstValidIdx = -1;\n for (let i = 0; i < n; i += 1) {\n if (Number.isFinite(source[i])) {\n firstValidIdx = i;\n break;\n }\n }\n if (firstValidIdx < 0 || n - firstValidIdx < length) return out;\n\n for (let i = firstValidIdx + length - 1; i < n; i += 1) {\n let sum = 0;\n let allFinite = true;\n for (let j = 0; j < length; j += 1) {\n const v = source[i - j];\n if (!Number.isFinite(v)) {\n allFinite = false;\n break;\n }\n sum += v * (length - j);\n }\n if (!allFinite) continue;\n out[i] = sum / denom;\n }\n return out;\n}\n"]}
package/dist/ta/lowest.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) 2026 Invinite. Licensed under the MIT License.
2
2
  // See the LICENSE file in the repo root for full license text.
3
3
  //
4
- // No invinite source — semantics per Pine `ta.lowest`. See PLAN.md §3.1.
4
+ // No invinite source — semantics per Pine `ta.lowest`.
5
5
  // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
6
6
  // mode) follow chartlang's primitive shape.
7
7
  import { Float64RingBuffer } from "../ringBuffer.js";
@@ -1 +1 @@
1
- {"version":3,"file":"lowest.js","sourceRoot":"","sources":["../../src/ta/lowest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lowest.js","sourceRoot":"","sources":["../../src/ta/lowest.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// No invinite source — semantics per Pine `ta.lowest`.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape.\n\nimport type { LowestOpts, 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\ntype LowestSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly length: number;\n /** Closed source values across the trailing `length` bars. */\n readonly sourceWindow: Float64RingBuffer;\n /** Monotone-increasing values front-to-back (front = current min). */\n monoIndices: number[];\n monoValues: number[];\n barCount: number;\n /**\n * Min of the trailing window EXCLUDING the head bar. Computed once\n * per close by walking the source window.\n */\n closedMinExcludingHead: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.lowest called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(length: number, capacity: number): LowestSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n length,\n sourceWindow: new Float64RingBuffer(length),\n monoIndices: [],\n monoValues: [],\n barCount: 0,\n closedMinExcludingHead: Number.POSITIVE_INFINITY,\n };\n}\n\nfunction recomputeMinExcludingHead(slot: LowestSlot): number {\n let minV = Number.POSITIVE_INFINITY;\n const filled = slot.sourceWindow.length;\n for (let i = 1; i < filled; i += 1) {\n const v = slot.sourceWindow.at(i);\n if (Number.isFinite(v) && v < minV) minV = v;\n }\n return minV;\n}\n\nfunction closeValue(slot: LowestSlot, src: number): number {\n slot.barCount += 1;\n const headIndex = slot.barCount - 1;\n slot.sourceWindow.append(src);\n\n const oldestAllowed = headIndex - slot.length + 1;\n while (slot.monoIndices.length > 0 && slot.monoIndices[0] < oldestAllowed) {\n slot.monoIndices.shift();\n slot.monoValues.shift();\n }\n\n if (Number.isFinite(src)) {\n // Strict `>` keeps equal values in the deque.\n while (slot.monoIndices.length > 0 && slot.monoValues[slot.monoValues.length - 1] > src) {\n slot.monoIndices.pop();\n slot.monoValues.pop();\n }\n slot.monoIndices.push(headIndex);\n slot.monoValues.push(src);\n }\n\n if (slot.barCount < slot.length) {\n slot.closedMinExcludingHead = Number.POSITIVE_INFINITY;\n return Number.NaN;\n }\n\n slot.closedMinExcludingHead = recomputeMinExcludingHead(slot);\n\n if (slot.monoIndices.length === 0) return Number.NaN;\n return slot.monoValues[0];\n}\n\nfunction tickValue(slot: LowestSlot, src: number): number {\n if (slot.barCount < slot.length) return Number.NaN;\n if (!Number.isFinite(src)) {\n return slot.closedMinExcludingHead === Number.POSITIVE_INFINITY\n ? Number.NaN\n : slot.closedMinExcludingHead;\n }\n if (slot.closedMinExcludingHead === Number.POSITIVE_INFINITY) {\n return src;\n }\n return Math.min(slot.closedMinExcludingHead, src);\n}\n\n/**\n * Rolling minimum of the last `length` source values. NaN inputs are\n * skipped from the window; the output is NaN until `length` closed\n * bars have been folded in. Tick-mode replays the head as\n * `min(closedMinExcludingHead, tickValue)`.\n *\n * @formula out[t] = min(source[t − length + 1 .. t]) (NaN slots skipped)\n * @warmup length − 1\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const lower = ta.lowest(bar.low, 20);\n * // plot(lower);\n */\nexport function lowest(\n slotId: string,\n source: ScalarOrSeries,\n length: number,\n _opts?: LowestOpts,\n): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as LowestSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(length, ctx.stream.ohlcv.close.capacity);\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"]}
@@ -0,0 +1,25 @@
1
+ import type { LowestbarsOpts, Series } from "@invinite-org/chartlang-core";
2
+ import { type ScalarOrSeries } from "./lib/sourceValue.js";
3
+ /**
4
+ * Bar offset (≤ 0) to the lowest `source` value over the trailing
5
+ * `length` bars (the window INCLUDES the current bar). `0` means the
6
+ * current bar is the lowest; `-k` means the lowest occurred `k` bars
7
+ * ago. Ties resolve to the MOST RECENT bar (smallest |offset|). NaN
8
+ * inputs are skipped as candidates; an all-NaN window emits NaN. The
9
+ * output is NaN until `length` closed bars have folded in. Tick-mode
10
+ * replays the in-progress head as the offset-0 candidate without
11
+ * advancing the buffer.
12
+ *
13
+ * @formula out[t] = argmin_{k ∈ [0, length)} source[t − k] expressed as −k
14
+ * (NaN slots skipped; ties → smallest k)
15
+ * @warmup length − 1
16
+ * @since 0.2
17
+ * @stable
18
+ *
19
+ * @example
20
+ * // import { ta } from "@invinite-org/chartlang-core";
21
+ * // const lbar = ta.lowestbars(bar.low, 20);
22
+ * // const left = bar.point(lbar.current, bar.low.current);
23
+ */
24
+ export declare function lowestbars(slotId: string, source: ScalarOrSeries, length: number, _opts?: LowestbarsOpts): Series<number>;
25
+ //# sourceMappingURL=lowestbars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lowestbars.d.ts","sourceRoot":"","sources":["../../src/ta/lowestbars.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAK3E,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,sBAAsB,CAAC;AAsE5E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,cAAc,GACvB,MAAM,CAAC,MAAM,CAAC,CAchB"}
@@ -0,0 +1,102 @@
1
+ // Copyright (c) 2026 Invinite. Licensed under the MIT License.
2
+ // See the LICENSE file in the repo root for full license text.
3
+ //
4
+ // No invinite source — semantics per Pine `ta.lowestbars`.
5
+ // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
6
+ // mode) follow chartlang's primitive shape.
7
+ import { Float64RingBuffer } from "../ringBuffer.js";
8
+ import { ACTIVE_RUNTIME_CONTEXT } from "../runtimeContext.js";
9
+ import { makeSeriesView } from "../seriesView.js";
10
+ import { readSourceValue } from "./lib/sourceValue.js";
11
+ function getCtx() {
12
+ const ctx = ACTIVE_RUNTIME_CONTEXT.current;
13
+ if (ctx === null) {
14
+ throw new Error("ta.lowestbars called outside an active script step");
15
+ }
16
+ return ctx;
17
+ }
18
+ function initSlot(length, capacity) {
19
+ const outBuffer = new Float64RingBuffer(capacity);
20
+ return {
21
+ outBuffer,
22
+ series: makeSeriesView(outBuffer),
23
+ length,
24
+ sourceWindow: new Float64RingBuffer(length),
25
+ barCount: 0,
26
+ };
27
+ }
28
+ /**
29
+ * Bar offset (≤ 0) to the lowest value across the retained window.
30
+ * Walks the window most-recent-first (`at(0)` is the head bar) and
31
+ * updates the running extreme only on a STRICT improvement, so ties
32
+ * keep the most-recent bar (smallest |offset|). `headValue` overrides
33
+ * the head candidate (`at(0)`) for the tick-replay path; pass
34
+ * `undefined` to read the closed head from the window.
35
+ *
36
+ * Returns `NaN` when every candidate in the window is NaN.
37
+ */
38
+ function offsetToMin(slot, headValue) {
39
+ const filled = slot.sourceWindow.length;
40
+ let bestValue = Number.POSITIVE_INFINITY;
41
+ let bestOffset = Number.NaN;
42
+ for (let i = 0; i < filled; i += 1) {
43
+ const v = i === 0 && headValue !== undefined ? headValue : slot.sourceWindow.at(i);
44
+ if (Number.isFinite(v) && v < bestValue) {
45
+ bestValue = v;
46
+ // `i === 0` ⇒ offset 0 (NOT −0) so `Object.is`-based equality
47
+ // and JSON serialisation never see negative zero.
48
+ bestOffset = i === 0 ? 0 : -i;
49
+ }
50
+ }
51
+ return bestOffset;
52
+ }
53
+ function closeValue(slot, src) {
54
+ slot.barCount += 1;
55
+ slot.sourceWindow.append(src);
56
+ if (slot.barCount < slot.length)
57
+ return Number.NaN;
58
+ return offsetToMin(slot, undefined);
59
+ }
60
+ function tickValue(slot, src) {
61
+ if (slot.barCount < slot.length)
62
+ return Number.NaN;
63
+ return offsetToMin(slot, src);
64
+ }
65
+ /**
66
+ * Bar offset (≤ 0) to the lowest `source` value over the trailing
67
+ * `length` bars (the window INCLUDES the current bar). `0` means the
68
+ * current bar is the lowest; `-k` means the lowest occurred `k` bars
69
+ * ago. Ties resolve to the MOST RECENT bar (smallest |offset|). NaN
70
+ * inputs are skipped as candidates; an all-NaN window emits NaN. The
71
+ * output is NaN until `length` closed bars have folded in. Tick-mode
72
+ * replays the in-progress head as the offset-0 candidate without
73
+ * advancing the buffer.
74
+ *
75
+ * @formula out[t] = argmin_{k ∈ [0, length)} source[t − k] expressed as −k
76
+ * (NaN slots skipped; ties → smallest k)
77
+ * @warmup length − 1
78
+ * @since 0.2
79
+ * @stable
80
+ *
81
+ * @example
82
+ * // import { ta } from "@invinite-org/chartlang-core";
83
+ * // const lbar = ta.lowestbars(bar.low, 20);
84
+ * // const left = bar.point(lbar.current, bar.low.current);
85
+ */
86
+ export function lowestbars(slotId, source, length, _opts) {
87
+ const ctx = getCtx();
88
+ let slot = ctx.stream.taSlots.get(slotId);
89
+ if (slot === undefined) {
90
+ slot = initSlot(length, ctx.stream.ohlcv.close.capacity);
91
+ ctx.stream.taSlots.set(slotId, slot);
92
+ }
93
+ const src = readSourceValue(source);
94
+ if (ctx.isTick) {
95
+ slot.outBuffer.replaceHead(tickValue(slot, src));
96
+ }
97
+ else {
98
+ slot.outBuffer.append(closeValue(slot, src));
99
+ }
100
+ return slot.series;
101
+ }
102
+ //# sourceMappingURL=lowestbars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lowestbars.js","sourceRoot":"","sources":["../../src/ta/lowestbars.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// No invinite source — semantics per Pine `ta.lowestbars`.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape.\n\nimport type { LowestbarsOpts, 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\ntype LowestbarsSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly length: number;\n /** Closed source values across the trailing `length` bars. */\n readonly sourceWindow: Float64RingBuffer;\n barCount: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.lowestbars called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(length: number, capacity: number): LowestbarsSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n length,\n sourceWindow: new Float64RingBuffer(length),\n barCount: 0,\n };\n}\n\n/**\n * Bar offset (≤ 0) to the lowest value across the retained window.\n * Walks the window most-recent-first (`at(0)` is the head bar) and\n * updates the running extreme only on a STRICT improvement, so ties\n * keep the most-recent bar (smallest |offset|). `headValue` overrides\n * the head candidate (`at(0)`) for the tick-replay path; pass\n * `undefined` to read the closed head from the window.\n *\n * Returns `NaN` when every candidate in the window is NaN.\n */\nfunction offsetToMin(slot: LowestbarsSlot, headValue: number | undefined): number {\n const filled = slot.sourceWindow.length;\n let bestValue = Number.POSITIVE_INFINITY;\n let bestOffset = Number.NaN;\n for (let i = 0; i < filled; i += 1) {\n const v = i === 0 && headValue !== undefined ? headValue : slot.sourceWindow.at(i);\n if (Number.isFinite(v) && v < bestValue) {\n bestValue = v;\n // `i === 0` ⇒ offset 0 (NOT −0) so `Object.is`-based equality\n // and JSON serialisation never see negative zero.\n bestOffset = i === 0 ? 0 : -i;\n }\n }\n return bestOffset;\n}\n\nfunction closeValue(slot: LowestbarsSlot, src: number): number {\n slot.barCount += 1;\n slot.sourceWindow.append(src);\n\n if (slot.barCount < slot.length) return Number.NaN;\n\n return offsetToMin(slot, undefined);\n}\n\nfunction tickValue(slot: LowestbarsSlot, src: number): number {\n if (slot.barCount < slot.length) return Number.NaN;\n return offsetToMin(slot, src);\n}\n\n/**\n * Bar offset (≤ 0) to the lowest `source` value over the trailing\n * `length` bars (the window INCLUDES the current bar). `0` means the\n * current bar is the lowest; `-k` means the lowest occurred `k` bars\n * ago. Ties resolve to the MOST RECENT bar (smallest |offset|). NaN\n * inputs are skipped as candidates; an all-NaN window emits NaN. The\n * output is NaN until `length` closed bars have folded in. Tick-mode\n * replays the in-progress head as the offset-0 candidate without\n * advancing the buffer.\n *\n * @formula out[t] = argmin_{k ∈ [0, length)} source[t − k] expressed as −k\n * (NaN slots skipped; ties → smallest k)\n * @warmup length − 1\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const lbar = ta.lowestbars(bar.low, 20);\n * // const left = bar.point(lbar.current, bar.low.current);\n */\nexport function lowestbars(\n slotId: string,\n source: ScalarOrSeries,\n length: number,\n _opts?: LowestbarsOpts,\n): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as LowestbarsSlot | undefined;\n if (slot === undefined) {\n slot = initSlot(length, ctx.stream.ohlcv.close.capacity);\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"]}