@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":"vwma.js","sourceRoot":"","sources":["../../src/ta/vwma.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,uEAAuE;AACvE,gCAAgC;AAChC,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AACzE,qEAAqE;AACrE,4DAA4D;AAC5D,yBAAyB;AAIzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAuB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAY5E,SAAS,MAAM;IACX,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,QAAgB;IAC9C,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,OAAO;QACH,SAAS;QACT,MAAM,EAAE,cAAc,CAAS,SAAS,CAAC;QACzC,MAAM;QACN,YAAY,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;QAC3C,YAAY,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;KAC9C,CAAC;AACN,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAc;IACvC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC;QACnB,MAAM,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,IAAc,EAAE,GAAW,EAAE,GAAW;IACxD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC9D,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,SAAS,CAAC,IAAc,EAAE,GAAW,EAAE,GAAW;IACvD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC7C,iEAAiE;IACjE,6BAA6B;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,KAAK,GAAG,GAAG,GAAG,OAAO,CAAC;IAC1B,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC;QACnB,MAAM,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,IAAI,CAChB,MAAc,EACd,MAAsB,EACtB,MAAc,EACd,KAAgB;IAEhB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAyB,CAAC;IAClE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;IAClC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"vwma.js","sourceRoot":"","sources":["../../src/ta/vwma.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/vwma.ts\n// plus 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// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape.\n\nimport type { Series, VwmaOpts } 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 VwmaSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly length: number;\n /** Closed source values over the trailing `length` bars. */\n readonly sourceWindow: Float64RingBuffer;\n /** Parallel volume window over the trailing `length` bars. */\n readonly volumeWindow: Float64RingBuffer;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.vwma called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(length: number, capacity: number): VwmaSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n length,\n sourceWindow: new Float64RingBuffer(length),\n volumeWindow: new Float64RingBuffer(length),\n };\n}\n\nfunction weightedFromWindows(slot: VwmaSlot): number {\n let pvSum = 0;\n let volSum = 0;\n for (let j = 0; j < slot.length; j += 1) {\n const value = slot.sourceWindow.at(j);\n if (!Number.isFinite(value)) return Number.NaN;\n const rawVol = slot.volumeWindow.at(j);\n const v = Number.isFinite(rawVol) ? rawVol : 0;\n pvSum += value * v;\n volSum += v;\n }\n return volSum > 0 ? pvSum / volSum : Number.NaN;\n}\n\nfunction closeValue(slot: VwmaSlot, src: number, vol: number): number {\n slot.sourceWindow.append(src);\n slot.volumeWindow.append(vol);\n if (slot.sourceWindow.length < slot.length) return Number.NaN;\n return weightedFromWindows(slot);\n}\n\nfunction tickValue(slot: VwmaSlot, src: number, vol: number): number {\n if (slot.sourceWindow.length < slot.length) return Number.NaN;\n if (!Number.isFinite(src)) return Number.NaN;\n // Substitute (src, vol) at head position; walk the closed window\n // for positions 1..length-1.\n const headVol = Number.isFinite(vol) ? vol : 0;\n let pvSum = src * headVol;\n let volSum = headVol;\n for (let j = 1; j < slot.length; j += 1) {\n const value = slot.sourceWindow.at(j);\n if (!Number.isFinite(value)) return Number.NaN;\n const rawVol = slot.volumeWindow.at(j);\n const v = Number.isFinite(rawVol) ? rawVol : 0;\n pvSum += value * v;\n volSum += v;\n }\n return volSum > 0 ? pvSum / volSum : Number.NaN;\n}\n\n/**\n * Volume-weighted moving average — `Σ source[t−j] · volume[t−j]` over\n * the trailing `length` bars divided by `Σ volume[t−j]`. NaN volume\n * slots are treated as `0` (matches `vwmaFloat64`'s null-coalesce\n * semantics). A NaN source anywhere inside the window emits `NaN`;\n * a window whose total volume is `0` emits `NaN` (the ratio is\n * undefined). Reads bar volume from `RuntimeContext.stream.bar.volume`.\n *\n * @formula out[t] = (Σ_{j=0..length-1} source[t − j] · volume[t − j])\n * / (Σ_{j=0..length-1} volume[t − j])\n * ; NaN when the denominator is 0.\n * @warmup length − 1\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const v = ta.vwma(bar.close, 20);\n * // plot(v);\n */\nexport function vwma(\n slotId: string,\n source: ScalarOrSeries,\n length: number,\n _opts?: VwmaOpts,\n): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as VwmaSlot | 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 const vol = ctx.stream.bar.volume;\n if (ctx.isTick) {\n slot.outBuffer.replaceHead(tickValue(slot, src, vol));\n } else {\n slot.outBuffer.append(closeValue(slot, src, vol));\n }\n return slot.series;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/williams-fractal.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
9
9
  // mode) follow chartlang's primitive shape — NOT invinite's
10
10
  // IndicatorPlugin shape. Williams Fractal is self-contained — no
@@ -1 +1 @@
1
- {"version":3,"file":"williamsFractal.js","sourceRoot":"","sources":["../../src/ta/williamsFractal.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,mFAAmF;AACnF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AACzE,qEAAqE;AACrE,4DAA4D;AAC5D,iEAAiE;AACjE,qEAAqE;AACrE,oEAAoE;AACpE,kEAAkE;AAClE,kEAAkE;AAClE,oEAAoE;AACpE,wDAAwD;AACxD,oEAAoE;AAIpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,cAAc,GAAG,CAAC,CAAC;AAmBzB,SAAS,MAAM;IACX,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB,EAAE,MAAc;IAC9C,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IAClC,OAAO;QACH,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YACnB,EAAE,EAAE,cAAc,CAAS,QAAQ,CAAC;YACpC,IAAI,EAAE,cAAc,CAAS,UAAU,CAAC;SAC3C,CAAC;QACF,QAAQ;QACR,UAAU;QACV,MAAM;QACN,UAAU,EAAE,IAAI,iBAAiB,CAAC,UAAU,CAAC;QAC7C,SAAS,EAAE,IAAI,iBAAiB,CAAC,UAAU,CAAC;QAC5C,QAAQ,EAAE,CAAC;KACd,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,aAAa,CAAC,UAA6B,EAAE,QAAgB,EAAE,MAAc;IAClF,MAAM,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IACpD,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,MAAM;YAAE,SAAS;QAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC;QAC3C,IAAI,CAAC,IAAI,UAAU;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC3C,CAAC;IACD,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,SAA4B,EAAE,OAAe,EAAE,MAAc;IAClF,MAAM,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IACnD,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,MAAM;YAAE,SAAS;QAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC;QAC3C,IAAI,CAAC,IAAI,SAAS;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC1C,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,IAA0B;IACtE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAoC,CAAC;IAC7E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,cAAc,CAAC;QAC9C,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;IAC3B,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,iEAAiE;QACjE,wDAAwD;QACxD,qCAAqC;QACrC,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACjF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACvF,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACJ,2DAA2D;YAC3D,uDAAuD;YACvD,wBAAwB;YACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAChB,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CACrE,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,MAAM,CAClB,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CACrE,CAAC;QACN,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"williamsFractal.js","sourceRoot":"","sources":["../../src/ta/williamsFractal.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/williams-fractal.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. Williams Fractal is self-contained — no\n// composition with `ta.highest` / `ta.lowest` because the centre bar\n// must be EXCLUDED from the windowed strict-extreme comparison (and\n// the sub-primitives don't expose that semantic). The slot owns a\n// `2 · length + 1` ring buffer per side (high / low) and scans it\n// per close. Output deviates from the task spec's literal \"boolean\"\n// wording in favour of price levels (matches invinite's\n// `upFractals[i] = high`); this gives the `marker` plot a y-anchor.\n\nimport type { WilliamsFractalOpts, WilliamsFractalResult } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView } from \"../seriesView.js\";\n\nconst DEFAULT_LENGTH = 2;\n\ntype WilliamsFractalSlot = {\n readonly outputs: WilliamsFractalResult;\n readonly upBuffer: Float64RingBuffer;\n readonly downBuffer: Float64RingBuffer;\n readonly length: number;\n /**\n * Trailing `2 · length + 1` highs. `at(0)` is the most recent\n * close (right-window head); `at(length)` is the centre bar;\n * `at(2 · length)` is the oldest left-window bar.\n */\n readonly highWindow: Float64RingBuffer;\n /** Trailing `2 · length + 1` lows (centred window). */\n readonly lowWindow: Float64RingBuffer;\n /** Number of CLOSED bars folded into the slot so far. */\n barCount: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.williamsFractal called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(capacity: number, length: number): WilliamsFractalSlot {\n const upBuffer = new Float64RingBuffer(capacity);\n const downBuffer = new Float64RingBuffer(capacity);\n const windowSize = 2 * length + 1;\n return {\n outputs: Object.freeze({\n up: makeSeriesView<number>(upBuffer),\n down: makeSeriesView<number>(downBuffer),\n }),\n upBuffer,\n downBuffer,\n length,\n highWindow: new Float64RingBuffer(windowSize),\n lowWindow: new Float64RingBuffer(windowSize),\n barCount: 0,\n };\n}\n\n/**\n * Scan the centred window for an up-fractal at the centre bar (age\n * `length`). Returns `centreHigh` if the centre's high is strictly\n * greater than every other entry in `[0, 2·length]` (NaN entries\n * fail the comparison — any NaN means no fractal). `headHigh` is\n * the substitute value for age 0 (`highWindow.at(0)`); tick replay\n * passes the tick's high there.\n */\nfunction scanUpFractal(highWindow: Float64RingBuffer, headHigh: number, length: number): number {\n const centreHigh = highWindow.at(length);\n if (!Number.isFinite(centreHigh)) return Number.NaN;\n const windowSize = 2 * length + 1;\n for (let k = 0; k < windowSize; k += 1) {\n if (k === length) continue;\n const v = k === 0 ? headHigh : highWindow.at(k);\n if (!Number.isFinite(v)) return Number.NaN;\n if (v >= centreHigh) return Number.NaN;\n }\n return centreHigh;\n}\n\n/**\n * Scan the centred window for a down-fractal at the centre bar.\n * Mirrors {@link scanUpFractal} with `<` / `centreLow`.\n */\nfunction scanDownFractal(lowWindow: Float64RingBuffer, headLow: number, length: number): number {\n const centreLow = lowWindow.at(length);\n if (!Number.isFinite(centreLow)) return Number.NaN;\n const windowSize = 2 * length + 1;\n for (let k = 0; k < windowSize; k += 1) {\n if (k === length) continue;\n const v = k === 0 ? headLow : lowWindow.at(k);\n if (!Number.isFinite(v)) return Number.NaN;\n if (v <= centreLow) return Number.NaN;\n }\n return centreLow;\n}\n\n/**\n * Williams Fractal — centred-window pivot detector. For each centre\n * bar `c`, marks an **up-fractal** if `bar.high(c)` is strictly\n * greater than every `bar.high` in the symmetric `length`-bar window\n * on either side (`c − length .. c − 1` ∪ `c + 1 .. c + length`).\n * Mirrors for **down-fractal** with `bar.low`.\n *\n * Output is centred — at live bar `t`, the value emitted at\n * `up.current` / `down.current` is the fractal status of bar `t −\n * length` (when bar `t` closes, we now have enough right-window bars\n * to confirm bar `t − length`). The most recent `length` slots of\n * the output Series are intentionally NaN (pending right-window\n * confirmation). Warmup is `2 · length` bars before the first\n * confirmed centre.\n *\n * Outputs encode **price levels**: `up.current` = `bar.high(centre)`\n * when up-fractal, NaN otherwise; `down.current` = `bar.low(centre)`\n * when down-fractal, NaN otherwise. This gives the `marker` plot a\n * y-anchor (matches invinite's `upFractals[i] = high`). The task\n * spec's literal \"boolean\" wording is intentionally not honoured\n * because (a) the script-facing `plot()` only accepts numeric\n * series, (b) the marker style needs a price to anchor at, and (c)\n * level-series is what every reference implementation actually\n * does. NaN in any window slot → no fractal at the centre.\n *\n * Returns a cached `{ up, down }` record (same identity every bar).\n *\n * @formula up = bar.high(centre) when strict argmax over [c−L, c+L] excluding c, NaN otherwise ;\n * down = bar.low(centre) when strict argmin over [c−L, c+L] excluding c, NaN otherwise\n * @warmup 2 · length\n * @anchors length\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const f = ta.williamsFractal();\n * // plot(f.up, { style: { kind: \"marker\", shape: \"triangle-up\", size: 6 } });\n * // plot(f.down, { style: { kind: \"marker\", shape: \"triangle-down\", size: 6 } });\n */\nexport function williamsFractal(slotId: string, opts?: WilliamsFractalOpts): WilliamsFractalResult {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as WilliamsFractalSlot | undefined;\n if (slot === undefined) {\n const length = opts?.length ?? DEFAULT_LENGTH;\n slot = initSlot(ctx.stream.ohlcv.close.capacity, length);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const bar = ctx.stream.bar;\n const windowSize = 2 * slot.length + 1;\n\n if (ctx.isTick) {\n // Tick: substitute head (age 0) with the tick's high/low; centre\n // is still at age `length` in the closed window. Warmup\n // requires `barCount >= windowSize`.\n if (slot.barCount < windowSize) {\n slot.upBuffer.replaceHead(Number.NaN);\n slot.downBuffer.replaceHead(Number.NaN);\n } else {\n slot.upBuffer.replaceHead(scanUpFractal(slot.highWindow, bar.high, slot.length));\n slot.downBuffer.replaceHead(scanDownFractal(slot.lowWindow, bar.low, slot.length));\n }\n } else {\n slot.highWindow.append(bar.high);\n slot.lowWindow.append(bar.low);\n slot.barCount += 1;\n if (slot.barCount < windowSize) {\n slot.upBuffer.append(Number.NaN);\n slot.downBuffer.append(Number.NaN);\n } else {\n // Close-side: head (age 0) IS this bar's high/low (we just\n // appended). Scan with `headHigh = highWindow.at(0)` —\n // i.e. no substitution.\n slot.upBuffer.append(\n scanUpFractal(slot.highWindow, slot.highWindow.at(0), slot.length),\n );\n slot.downBuffer.append(\n scanDownFractal(slot.lowWindow, slot.lowWindow.at(0), slot.length),\n );\n }\n }\n return slot.outputs;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/williams-r.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
9
9
  // mode) follow chartlang's primitive shape. Williams %R derives from
10
10
  // `bar.high` / `bar.low` / `bar.close` directly — no `source` arg
@@ -1 +1 @@
1
- {"version":3,"file":"williamsR.js","sourceRoot":"","sources":["../../src/ta/williamsR.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,6EAA6E;AAC7E,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AACzE,qEAAqE;AACrE,qEAAqE;AACrE,kEAAkE;AAClE,kEAAkE;AAClE,iBAAiB;AAIjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC,SAAS,MAAM;IACX,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,EAAU,EAAE,EAAU,EAAE,KAAa;IACzD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO,MAAM,CAAC,GAAG,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IACnC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,MAAc,EAAE,KAAqB;IAC3E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAA8B,CAAC;IACvE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzE,IAAI,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAS,SAAS,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;IAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,MAAM,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC;IAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC;IAC3D,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"williamsR.js","sourceRoot":"","sources":["../../src/ta/williamsR.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,6EAA6E;AAC7E,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAChB,qEAAqE;AACrE,qEAAqE;AACrE,kEAAkE;AAClE,kEAAkE;AAClE,iBAAiB;AAIjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC,SAAS,MAAM;IACX,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,EAAU,EAAE,EAAU,EAAE,KAAa;IACzD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO,MAAM,CAAC,GAAG,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IACnC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,MAAc,EAAE,KAAqB;IAC3E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAA8B,CAAC;IACvE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzE,IAAI,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAS,SAAS,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;IAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,MAAM,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC;IAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC;IAC3D,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACvB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n//\n// Ported from invinite/src/components/trading-chart/indicators/williams-r.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape. Williams %R derives from\n// `bar.high` / `bar.low` / `bar.close` directly — no `source` arg\n// per Pine. Composes `ta.highest` + `ta.lowest` over the trailing\n// `length` bars.\n\nimport type { Series, WilliamsROpts } 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 { highest } from \"./highest.js\";\nimport { lowest } from \"./lowest.js\";\n\ntype WilliamsRSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.williamsR called outside an active script step\");\n }\n return ctx;\n}\n\nfunction williamsRValue(hh: number, ll: number, close: number): number {\n if (!Number.isFinite(hh) || !Number.isFinite(ll) || !Number.isFinite(close)) {\n return Number.NaN;\n }\n const denom = hh - ll;\n if (denom === 0) return Number.NaN;\n return (-100 * (hh - close)) / denom;\n}\n\n/**\n * Williams %R — momentum oscillator bounded in `[-100, 0]`. Sources\n * from `bar.high` / `bar.low` / `bar.close` directly (no `source`\n * arg — matches Pine). Composes `ta.highest` + `ta.lowest` over the\n * trailing `length` bars; `hh === ll` (flat-line window) emits `NaN`.\n *\n * The registry records `yDomain: { kind: \"fixed\", min: -100, max: 0 }`\n * via `TA_REGISTRY_METADATA`.\n *\n * @formula hh = highest(bar.high, length) ;\n * ll = lowest(bar.low, length) ;\n * wr = -100 · (hh − bar.close) / (hh − ll) ; NaN if hh === ll\n * @warmup length − 1\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-runtime\";\n * // const w = ta.williamsR(\"slot\", 14);\n * // plot(w);\n */\nexport function williamsR(slotId: string, length: number, _opts?: WilliamsROpts): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as WilliamsRSlot | undefined;\n if (slot === undefined) {\n const outBuffer = new Float64RingBuffer(ctx.stream.ohlcv.close.capacity);\n slot = { outBuffer, series: makeSeriesView<number>(outBuffer) };\n ctx.stream.taSlots.set(slotId, slot);\n }\n const bar = ctx.stream.bar;\n const hh = highest(`${slotId}/hh`, bar.high, length).current;\n const ll = lowest(`${slotId}/ll`, bar.low, length).current;\n const value = williamsRValue(hh, ll, bar.close);\n if (ctx.isTick) {\n slot.outBuffer.replaceHead(value);\n } else {\n slot.outBuffer.append(value);\n }\n return slot.series;\n}\n"]}
package/dist/ta/wma.js CHANGED
@@ -4,8 +4,8 @@
4
4
  // Ported from invinite/src/components/trading-chart/indicators/wma.ts
5
5
  // plus lib/wma-of-float64.ts
6
6
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
7
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
8
- // provenance contract; the math is the reference, the code style is not.
7
+ // Re-licensed MIT for chartlang. The math is the reference, the code
8
+ // style is not.
9
9
  // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
10
10
  // mode) follow chartlang's primitive shape — NOT invinite's
11
11
  // IndicatorPlugin shape.
@@ -1 +1 @@
1
- {"version":3,"file":"wma.js","sourceRoot":"","sources":["../../src/ta/wma.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,+BAA+B;AAC/B,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AACzE,qEAAqE;AACrE,4DAA4D;AAC5D,yBAAyB;AAIzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAuB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAuB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAe5E,SAAS,MAAM;IACX,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,QAAgB;IAC9C,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,OAAO;QACH,SAAS;QACT,MAAM,EAAE,cAAc,CAAS,SAAS,CAAC;QACzC,MAAM;QACN,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAClC,MAAM,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;KACxC,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAa;IACrC,qEAAqE;IACrE,mEAAmE;IACnE,kEAAkE;IAClE,mCAAmC;IACnC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC;QAC3C,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,CAAC;AAED,SAAS,UAAU,CAAC,IAAa,EAAE,GAAW;IAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IACxD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,SAAS,CAAC,IAAa,EAAE,GAAW;IACzC,oEAAoE;IACpE,+DAA+D;IAC/D,sDAAsD;IACtD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC7C,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC;QAC3C,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,GAAG,CACf,MAAc,EACd,MAAsB,EACtB,MAAc,EACd,KAAe;IAEf,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAwB,CAAC;IACjE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"wma.js","sourceRoot":"","sources":["../../src/ta/wma.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/wma.ts\n// plus 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// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape.\n\nimport type { Series, WmaOpts } 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 WmaSlot = {\n readonly outBuffer: Float64RingBuffer;\n readonly series: Series<number>;\n readonly length: number;\n readonly denom: number;\n /**\n * Closed source values across the trailing `length` bars. `at(0)` is\n * the most recent close (the head bar); `at(length - 1)` is the\n * oldest value still in the window.\n */\n readonly window: Float64RingBuffer;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.wma called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(length: number, capacity: number): WmaSlot {\n const outBuffer = new Float64RingBuffer(capacity);\n return {\n outBuffer,\n series: makeSeriesView<number>(outBuffer),\n length,\n denom: (length * (length + 1)) / 2,\n window: new Float64RingBuffer(length),\n };\n}\n\nfunction weightedFromWindow(slot: WmaSlot): number {\n // `window.at(0)` is the head; weight on the head is `length`, weight\n // on the oldest bar (`at(length - 1)`) is `1`. Any NaN slot in the\n // window short-circuits the result to NaN (matches `wmaFloat64`'s\n // window short-circuit semantics).\n let sum = 0;\n for (let j = 0; j < slot.length; j += 1) {\n const v = slot.window.at(j);\n if (!Number.isFinite(v)) return Number.NaN;\n sum += v * (slot.length - j);\n }\n return sum / slot.denom;\n}\n\nfunction closeValue(slot: WmaSlot, src: number): number {\n slot.window.append(src);\n if (slot.window.length < slot.length) return Number.NaN;\n return weightedFromWindow(slot);\n}\n\nfunction tickValue(slot: WmaSlot, src: number): number {\n // The window holds the closed-bar history. A tick replaces the head\n // bar's value with `src`; compute the weighted sum against the\n // closed window with `src` substituted at position 0.\n if (slot.window.length < slot.length) return Number.NaN;\n if (!Number.isFinite(src)) return Number.NaN;\n let sum = src * slot.length;\n for (let j = 1; j < slot.length; j += 1) {\n const v = slot.window.at(j);\n if (!Number.isFinite(v)) return Number.NaN;\n sum += v * (slot.length - j);\n }\n return sum / slot.denom;\n}\n\n/**\n * Weighted moving average — linear weights `1..N` over the trailing\n * `length` source values, denominator `N(N + 1) / 2`. Warmup of\n * `length − 1` bars returns `NaN`; a NaN anywhere inside the window\n * also returns `NaN` (full-recompute weighted windows cannot\n * meaningfully forward-fill a gap). Tick-mode replays the head as\n * `(N·tickValue + Σ_{j=1..N-1} window[j]·(N−j)) / denom` so a\n * partial-bar tick doesn't pollute the next close's weighted sum.\n *\n * @formula denom = length(length + 1) / 2 ;\n * out[t] = (Σ_{j=0..length-1} source[t − j] · (length − j)) / denom\n * @warmup length − 1\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const w = ta.wma(bar.close, 14);\n * // plot(w);\n */\nexport function wma(\n slotId: string,\n source: ScalarOrSeries,\n length: number,\n _opts?: WmaOpts,\n): Series<number> {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as WmaSlot | 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"]}
package/dist/ta/zigZag.js CHANGED
@@ -3,8 +3,8 @@
3
3
  //
4
4
  // Ported from invinite/src/components/trading-chart/indicators/zig-zag.ts
5
5
  // (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).
6
- // Re-licensed MIT for chartlang. See PLAN.md §3.1 for the
7
- // provenance contract; the math is the reference, the code style is not.
6
+ // Re-licensed MIT for chartlang. The math is the reference, the code
7
+ // style is not.
8
8
  // Structural choices (callsite-id slot, Series<T> proxy, replaceHead
9
9
  // mode) follow chartlang's primitive shape — NOT invinite's
10
10
  // IndicatorPlugin shape. The chartlang port is **streaming**: the
@@ -1 +1 @@
1
- {"version":3,"file":"zigZag.js","sourceRoot":"","sources":["../../src/ta/zigZag.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zigZag.js","sourceRoot":"","sources":["../../src/ta/zigZag.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/zig-zag.ts\n// (commit 078f41fe2569d659d5aba726da8bcb5d3e2ced02, © Invinite).\n// Re-licensed MIT for chartlang. The math is the reference, the code\n// style is not.\n// Structural choices (callsite-id slot, Series<T> proxy, replaceHead\n// mode) follow chartlang's primitive shape — NOT invinite's\n// IndicatorPlugin shape. The chartlang port is **streaming**: the\n// output `value` Series carries the most-recently-confirmed pivot\n// price (held constant between confirmations), whereas invinite's\n// batch `compute` linearly interpolates pivot→pivot and supports\n// `extendToLastBar` retro-painting. The append-only Series model\n// cannot rewrite older slots, so the streaming output is the closest\n// representable surface — useful as a \"trailing reference level\".\n\nimport type { ZigZagOpts, ZigZagResult } from \"@invinite-org/chartlang-core\";\n\nimport { Float64RingBuffer } from \"../ringBuffer.js\";\nimport { ACTIVE_RUNTIME_CONTEXT, type RuntimeContext } from \"../runtimeContext.js\";\nimport { makeSeriesView } from \"../seriesView.js\";\n\nconst DEFAULT_DEVIATION = 5;\nconst DEFAULT_DEPTH = 10;\n\nconst TREND_UP = 1;\nconst TREND_DOWN = -1;\nconst TREND_UNKNOWN = 0;\n\ntype Trend = 1 | -1 | 0;\n\ntype ZigZagSlot = {\n readonly outputs: ZigZagResult;\n readonly valueBuffer: Float64RingBuffer;\n readonly directionBuffer: Float64RingBuffer;\n readonly deviation: number;\n readonly depth: number;\n // Live state.\n barCount: number;\n direction: Trend;\n lastPivotPrice: number;\n lastPivotIndex: number;\n peakSinceLastPivot: number;\n peakIndex: number;\n // Snapshot (start-of-current-bar) — captured each close BEFORE\n // the recurrence advances so a final tick replays from the seed.\n prevClosedBarCount: number;\n prevClosedDirection: Trend;\n prevClosedLastPivotPrice: number;\n prevClosedLastPivotIndex: number;\n prevClosedPeakSinceLastPivot: number;\n prevClosedPeakIndex: number;\n};\n\nfunction getCtx(): RuntimeContext {\n const ctx = ACTIVE_RUNTIME_CONTEXT.current;\n if (ctx === null) {\n throw new Error(\"ta.zigZag called outside an active script step\");\n }\n return ctx;\n}\n\nfunction initSlot(capacity: number, deviation: number, depth: number): ZigZagSlot {\n const valueBuffer = new Float64RingBuffer(capacity);\n const directionBuffer = new Float64RingBuffer(capacity);\n return {\n outputs: Object.freeze({\n value: makeSeriesView<number>(valueBuffer),\n direction: makeSeriesView<number>(directionBuffer),\n }),\n valueBuffer,\n directionBuffer,\n deviation,\n depth,\n barCount: 0,\n direction: TREND_UNKNOWN,\n lastPivotPrice: Number.NaN,\n lastPivotIndex: -1,\n peakSinceLastPivot: Number.NaN,\n peakIndex: -1,\n prevClosedBarCount: 0,\n prevClosedDirection: TREND_UNKNOWN,\n prevClosedLastPivotPrice: Number.NaN,\n prevClosedLastPivotIndex: -1,\n prevClosedPeakSinceLastPivot: Number.NaN,\n prevClosedPeakIndex: -1,\n };\n}\n\nfunction snapshot(slot: ZigZagSlot): void {\n slot.prevClosedBarCount = slot.barCount;\n slot.prevClosedDirection = slot.direction;\n slot.prevClosedLastPivotPrice = slot.lastPivotPrice;\n slot.prevClosedLastPivotIndex = slot.lastPivotIndex;\n slot.prevClosedPeakSinceLastPivot = slot.peakSinceLastPivot;\n slot.prevClosedPeakIndex = slot.peakIndex;\n}\n\n/**\n * One step of the streaming ZigZag state machine. Returns the new\n * `(value, direction, lastPivotPrice, lastPivotIndex,\n * peakSinceLastPivot, peakIndex, direction)` state given the prior\n * state and this bar's `(close, barIndex)`. Used by both close-side\n * (which mutates the slot) and tick-side (which reads the snapshot,\n * does NOT mutate the slot).\n */\nfunction recurrenceStep(\n close: number,\n barIndex: number,\n deviation: number,\n depth: number,\n prevDirection: Trend,\n prevLastPivotPrice: number,\n prevLastPivotIndex: number,\n prevPeakSinceLastPivot: number,\n prevPeakIndex: number,\n): {\n value: number;\n direction: number;\n nextDirection: Trend;\n nextLastPivotPrice: number;\n nextLastPivotIndex: number;\n nextPeakSinceLastPivot: number;\n nextPeakIndex: number;\n} {\n const pctChangeVsPivot = ((close - prevLastPivotPrice) / prevLastPivotPrice) * 100;\n const barsSincePivot = barIndex - prevLastPivotIndex;\n\n if (prevDirection === TREND_UNKNOWN) {\n // Pre-first-pivot: commit when |pct| crosses deviation AND\n // depth bars have elapsed since bar 0.\n if (\n Math.abs(pctChangeVsPivot) >= deviation &&\n barsSincePivot >= depth &&\n prevLastPivotPrice !== 0\n ) {\n const newDirection: Trend = pctChangeVsPivot > 0 ? TREND_UP : TREND_DOWN;\n return {\n value: close,\n direction: newDirection,\n nextDirection: newDirection,\n nextLastPivotPrice: close,\n nextLastPivotIndex: barIndex,\n nextPeakSinceLastPivot: close,\n nextPeakIndex: barIndex,\n };\n }\n return {\n value: Number.NaN,\n direction: Number.NaN,\n nextDirection: TREND_UNKNOWN,\n nextLastPivotPrice: prevLastPivotPrice,\n nextLastPivotIndex: prevLastPivotIndex,\n nextPeakSinceLastPivot: prevPeakSinceLastPivot,\n nextPeakIndex: prevPeakIndex,\n };\n }\n\n if (prevDirection === TREND_UP) {\n // Trending up: update running peak when price makes new high.\n if (close > prevPeakSinceLastPivot) {\n return {\n value: prevLastPivotPrice,\n direction: TREND_UP,\n nextDirection: TREND_UP,\n nextLastPivotPrice: prevLastPivotPrice,\n nextLastPivotIndex: prevLastPivotIndex,\n nextPeakSinceLastPivot: close,\n nextPeakIndex: barIndex,\n };\n }\n // Reversal candidate: price dropped by `deviation %` from the\n // running peak AND `depth` bars have elapsed since the peak.\n // Reaching the up-trend branch requires a prior up-commit\n // which set lastPivotPrice (and thus peak) from a finite,\n // non-zero close — so peak > 0 here.\n const pctDropFromPeak = ((prevPeakSinceLastPivot - close) / prevPeakSinceLastPivot) * 100;\n const barsSincePeak = barIndex - prevPeakIndex;\n if (pctDropFromPeak >= deviation && barsSincePeak >= depth) {\n // Confirm the running peak as the new pivot; flip\n // direction. The new lastPivot is the peak (NOT the\n // current close).\n return {\n value: prevPeakSinceLastPivot,\n direction: TREND_DOWN,\n nextDirection: TREND_DOWN,\n nextLastPivotPrice: prevPeakSinceLastPivot,\n nextLastPivotIndex: prevPeakIndex,\n nextPeakSinceLastPivot: close,\n nextPeakIndex: barIndex,\n };\n }\n // No new peak, no reversal — hold the current pivot.\n return {\n value: prevLastPivotPrice,\n direction: TREND_UP,\n nextDirection: TREND_UP,\n nextLastPivotPrice: prevLastPivotPrice,\n nextLastPivotIndex: prevLastPivotIndex,\n nextPeakSinceLastPivot: prevPeakSinceLastPivot,\n nextPeakIndex: prevPeakIndex,\n };\n }\n\n // prevDirection === TREND_DOWN.\n if (close < prevPeakSinceLastPivot) {\n return {\n value: prevLastPivotPrice,\n direction: TREND_DOWN,\n nextDirection: TREND_DOWN,\n nextLastPivotPrice: prevLastPivotPrice,\n nextLastPivotIndex: prevLastPivotIndex,\n nextPeakSinceLastPivot: close,\n nextPeakIndex: barIndex,\n };\n }\n // Down-trend reach: a prior down-flip OR commit-down set the\n // trough's source to a finite close. The trough CAN be 0 (commit-\n // up at 0 then flip-down at 0); the previous close was 0 so the\n // pctRise calc would divide by zero. Guard.\n const pctRiseFromTrough =\n prevPeakSinceLastPivot !== 0\n ? ((close - prevPeakSinceLastPivot) / prevPeakSinceLastPivot) * 100\n : 0;\n const barsSinceTrough = barIndex - prevPeakIndex;\n if (pctRiseFromTrough >= deviation && barsSinceTrough >= depth) {\n return {\n value: prevPeakSinceLastPivot,\n direction: TREND_UP,\n nextDirection: TREND_UP,\n nextLastPivotPrice: prevPeakSinceLastPivot,\n nextLastPivotIndex: prevPeakIndex,\n nextPeakSinceLastPivot: close,\n nextPeakIndex: barIndex,\n };\n }\n return {\n value: prevLastPivotPrice,\n direction: TREND_DOWN,\n nextDirection: TREND_DOWN,\n nextLastPivotPrice: prevLastPivotPrice,\n nextLastPivotIndex: prevLastPivotIndex,\n nextPeakSinceLastPivot: prevPeakSinceLastPivot,\n nextPeakIndex: prevPeakIndex,\n };\n}\n\nfunction closeStep(\n slot: ZigZagSlot,\n close: number,\n barIndex: number,\n): { value: number; direction: number } {\n if (!Number.isFinite(close)) {\n // NaN close: freeze state. Snapshot is unchanged (covers tick\n // replay on the same NaN bar). Emit NaN/NaN.\n return { value: Number.NaN, direction: Number.NaN };\n }\n snapshot(slot);\n\n if (slot.barCount === 0) {\n // Seed bar — bar 0 is the candidate pivot, direction unknown.\n slot.barCount = 1;\n slot.lastPivotPrice = close;\n slot.lastPivotIndex = 0;\n slot.peakSinceLastPivot = close;\n slot.peakIndex = 0;\n slot.direction = TREND_UNKNOWN;\n return { value: Number.NaN, direction: Number.NaN };\n }\n\n const step = recurrenceStep(\n close,\n barIndex,\n slot.deviation,\n slot.depth,\n slot.direction,\n slot.lastPivotPrice,\n slot.lastPivotIndex,\n slot.peakSinceLastPivot,\n slot.peakIndex,\n );\n slot.barCount += 1;\n slot.direction = step.nextDirection;\n slot.lastPivotPrice = step.nextLastPivotPrice;\n slot.lastPivotIndex = step.nextLastPivotIndex;\n slot.peakSinceLastPivot = step.nextPeakSinceLastPivot;\n slot.peakIndex = step.nextPeakIndex;\n return { value: step.value, direction: step.direction };\n}\n\nfunction tickStep(\n slot: ZigZagSlot,\n close: number,\n barIndex: number,\n): { value: number; direction: number } {\n if (!Number.isFinite(close)) {\n return { value: Number.NaN, direction: Number.NaN };\n }\n if (slot.prevClosedBarCount === 0) {\n // The current bar is the first closed bar — its tick replay\n // is the seed itself (NaN, NaN).\n return { value: Number.NaN, direction: Number.NaN };\n }\n const step = recurrenceStep(\n close,\n barIndex,\n slot.deviation,\n slot.depth,\n slot.prevClosedDirection,\n slot.prevClosedLastPivotPrice,\n slot.prevClosedLastPivotIndex,\n slot.prevClosedPeakSinceLastPivot,\n slot.prevClosedPeakIndex,\n );\n return { value: step.value, direction: step.direction };\n}\n\n/**\n * ZigZag — streaming swing-pivot detector. Walks the close series\n * tracking a running candidate pivot; confirms a new pivot when the\n * price has reversed by at least `deviation %` from the candidate\n * AND `depth` bars have elapsed. The output `value` Series carries\n * the price of the most-recently-confirmed pivot (held constant\n * between confirmations); `direction` is `+1` (uptrend), `-1`\n * (downtrend), or NaN before the first confirmation. Returns a\n * cached `{ value, direction }` record (same identity every bar).\n *\n * Streaming adaptation of invinite's batch ZigZag: invinite paints\n * a linearly-interpolated polyline between confirmed pivots and\n * supports `extendToLastBar` retro-painting from the last confirmed\n * pivot to the right edge. The append-only Series model cannot\n * rewrite older slots, so the streaming output is the closest\n * representable surface (a \"trailing reference level\" Pine authors\n * would use as a stop). Defaults: `deviation = 5`, `depth = 10`.\n *\n * NaN close → NaN outputs and freezes the state machine. Tick-mode\n * replays the head from the snapshot captured at the start of the\n * current bar (mirrors PSAR / Supertrend).\n *\n * @formula Confirm pivot when |Δ%| ≥ deviation AND barsSince ≥ depth :\n * up-trend: running peak updates on new highs ; flip on\n * |drop from peak| ≥ deviation ; flip-direction emits the\n * peak (the just-confirmed top) as `value`, sets new\n * `direction = −1`. Down-trend symmetric.\n * @warmup input-dependent (NaN until first confirmed pivot)\n * @anchors deviation, depth\n * @since 0.2\n * @stable\n *\n * @example\n * // import { ta } from \"@invinite-org/chartlang-core\";\n * // const z = ta.zigZag({ deviation: 5 });\n * // plot(z.value);\n */\nexport function zigZag(slotId: string, opts?: ZigZagOpts): ZigZagResult {\n const ctx = getCtx();\n let slot = ctx.stream.taSlots.get(slotId) as ZigZagSlot | undefined;\n if (slot === undefined) {\n const deviation = opts?.deviation ?? DEFAULT_DEVIATION;\n const depth = opts?.depth ?? DEFAULT_DEPTH;\n slot = initSlot(ctx.stream.ohlcv.close.capacity, deviation, depth);\n ctx.stream.taSlots.set(slotId, slot);\n }\n const close = ctx.stream.bar.close;\n if (ctx.isTick) {\n // Tick replay uses the snapshot's barCount as the current-bar\n // index (the close-side incremented barCount AFTER taking the\n // snapshot, so the snapshot's barCount equals the index of\n // THIS bar).\n const barIndexForStep = slot.prevClosedBarCount;\n const { value, direction } = tickStep(slot, close, barIndexForStep);\n slot.valueBuffer.replaceHead(value);\n slot.directionBuffer.replaceHead(direction);\n } else {\n // Close-side uses slot.barCount (pre-increment in this close)\n // — the bar's 0-based index. Snapshot/seed branch handles\n // barCount === 0 explicitly.\n const barIndexForStep = slot.barCount;\n const { value, direction } = closeStep(slot, close, barIndexForStep);\n slot.valueBuffer.append(value);\n slot.directionBuffer.append(direction);\n }\n return slot.outputs;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"barstateView.js","sourceRoot":"","sources":["../../src/views/barstateView.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAkC/D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACnD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAClD,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,OAAO,EAAE,QAAQ,KAAK,CAAC;QACvB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,OAAO;QACvD,SAAS,EAAE,SAAS,KAAK,SAAS;QAClC,UAAU,EAAE,SAAS,KAAK,MAAM;QAChC,WAAW,EAAE,SAAS,KAAK,OAAO;KACrC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"barstateView.js","sourceRoot":"","sources":["../../src/views/barstateView.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAkC/D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACnD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAClD,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,OAAO,EAAE,QAAQ,KAAK,CAAC;QACvB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,OAAO;QACvD,SAAS,EAAE,SAAS,KAAK,SAAS;QAClC,UAAU,EAAE,SAAS,KAAK,MAAM;QAChC,WAAW,EAAE,SAAS,KAAK,OAAO;KACrC,CAAC,CAAC;AACP,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { BarStateView } from \"@invinite-org/chartlang-core\";\n\n/**\n * Candle-event kind used to derive the per-step `barstate.*` snapshot.\n *\n * @since 0.4\n * @stable\n * @example\n * const kind: EventKind = \"close\";\n * void kind;\n */\nexport type EventKind = \"history\" | \"close\" | \"tick\";\n\n/**\n * Inputs needed to build a `barstate.*` runtime view.\n *\n * @since 0.4\n * @stable\n * @example\n * const inputs: BarStateInputs = {\n * eventKind: \"history\",\n * barIndex: 0,\n * isLastBar: false,\n * };\n * void inputs;\n */\nexport type BarStateInputs = Readonly<{\n eventKind: EventKind;\n barIndex: number;\n isLastBar: boolean;\n}>;\n\n/**\n * Build a frozen `barstate.*` view for the current script step.\n *\n * @since 0.4\n * @stable\n * @example\n * const view = makeBarStateView({\n * eventKind: \"tick\",\n * barIndex: 5,\n * isLastBar: true,\n * });\n * void view.isrealtime;\n */\nexport function makeBarStateView(inputs: BarStateInputs): BarStateView {\n const { eventKind, barIndex, isLastBar } = inputs;\n return Object.freeze({\n isfirst: barIndex === 0,\n islast: isLastBar,\n isnew: eventKind === \"history\" || eventKind === \"close\",\n ishistory: eventKind === \"history\",\n isrealtime: eventKind === \"tick\",\n isconfirmed: eventKind === \"close\",\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAI/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAkBvD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA2C,EAAE;IAC5E,OAAO;QACH,QAAQ,EAAE,gBAAgB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACnF,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC;QACvD,SAAS,EAAE,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC;KAC9C,CAAC;AACN,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAI/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAkBvD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA2C,EAAE;IAC5E,OAAO;QACH,QAAQ,EAAE,gBAAgB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACnF,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC;QACvD,SAAS,EAAE,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC;KAC9C,CAAC;AACN,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { BarStateView, SymInfoView, TimeframeView } from \"@invinite-org/chartlang-core\";\n\nimport { makeBarStateView } from \"./barstateView.js\";\nexport { refreshRuntimeViews } from \"./refreshRuntimeViews.js\";\nimport { makeSymInfoView } from \"./symInfoView.js\";\nimport { makeTimeframeView } from \"./timeframeView.js\";\n\n/**\n * Mutable runtime view container. Each field is replaced with a fresh\n * frozen snapshot as the runner advances.\n *\n * @since 0.4\n * @stable\n * @example\n * const views: RuntimeViews = createRuntimeViews();\n * views.barstate = views.barstate;\n */\nexport type RuntimeViews = {\n barstate: BarStateView;\n syminfo: SymInfoView;\n timeframe: TimeframeView;\n};\n\n/**\n * Build the default runtime view container for a script mount.\n *\n * @since 0.4\n * @stable\n * @example\n * const views = createRuntimeViews({\n * syminfo: makeSymInfoView({ ticker: \"DEMO\" }, new Set([\"ticker\"])),\n * });\n * void views.syminfo.ticker;\n */\nexport function createRuntimeViews(opts: { readonly syminfo?: SymInfoView } = {}): RuntimeViews {\n return {\n barstate: makeBarStateView({ eventKind: \"history\", barIndex: 0, isLastBar: false }),\n syminfo: opts.syminfo ?? makeSymInfoView({}, new Set()),\n timeframe: makeTimeframeView(\"\", undefined),\n };\n}\n\nexport { makeBarStateView } from \"./barstateView.js\";\nexport { makeSymInfoView } from \"./symInfoView.js\";\nexport { makeTimeframeView } from \"./timeframeView.js\";\nexport type { BarStateInputs, EventKind } from \"./barstateView.js\";\nexport type { AdapterSymInfo } from \"./symInfoView.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"refreshRuntimeViews.js","sourceRoot":"","sources":["../../src/views/refreshRuntimeViews.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAK/D,OAAO,EAAE,gBAAgB,EAAkB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,SAAS,cAAc,CACnB,SAA4C,EAC5C,QAAgB;IAEhB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB,EAAE,SAAoB;IACxE,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IACjC,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpD,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC;QAC7C,SAAS;QACT,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;QACnC,SAAS,EAAE,SAAS,KAAK,SAAS;KACrC,CAAC,CAAC;IACH,cAAc,CAAC,KAAK,CAAC,SAAS,GAAG,iBAAiB,CAC9C,QAAQ,EACR,cAAc,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAClE,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"refreshRuntimeViews.js","sourceRoot":"","sources":["../../src/views/refreshRuntimeViews.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAK/D,OAAO,EAAE,gBAAgB,EAAkB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,SAAS,cAAc,CACnB,SAA4C,EAC5C,QAAgB;IAEhB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB,EAAE,SAAoB;IACxE,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IACjC,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpD,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC;QAC7C,SAAS;QACT,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;QACnC,SAAS,EAAE,SAAS,KAAK,SAAS;KACrC,CAAC,CAAC;IACH,cAAc,CAAC,KAAK,CAAC,SAAS,GAAG,iBAAiB,CAC9C,QAAQ,EACR,cAAc,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAClE,CAAC;AACN,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { IntervalDescriptor } from \"@invinite-org/chartlang-core\";\n\nimport type { RunnerState } from \"../createScriptRunner.js\";\nimport { makeBarStateView, type EventKind } from \"./barstateView.js\";\nimport { makeTimeframeView } from \"./timeframeView.js\";\n\nfunction findDescriptor(\n intervals: ReadonlyArray<IntervalDescriptor>,\n interval: string,\n): IntervalDescriptor | undefined {\n return intervals.find((candidate) => candidate.value === interval);\n}\n\n/**\n * Refresh per-step runtime views after the mutable bar view has been updated\n * and before `compute` runs.\n *\n * @since 0.4\n * @stable\n * @example\n * // refreshRuntimeViews(state, \"close\");\n * const fn: typeof refreshRuntimeViews = refreshRuntimeViews;\n * void fn;\n */\nexport function refreshRuntimeViews(state: RunnerState, eventKind: EventKind): void {\n const { runtimeContext } = state;\n const interval = runtimeContext.stream.bar.interval;\n runtimeContext.views.barstate = makeBarStateView({\n eventKind,\n barIndex: runtimeContext.barIndex(),\n isLastBar: eventKind !== \"history\",\n });\n runtimeContext.views.timeframe = makeTimeframeView(\n interval,\n findDescriptor(runtimeContext.capabilities.intervals, interval),\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"symInfoView.js","sourceRoot":"","sources":["../../src/views/symInfoView.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AA6B/D,MAAM,UAAU,GAAwC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAC3B,OAAuB,EACvB,OAA4B;IAE5B,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAC3D,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;QACjE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;QAC9E,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QACjE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7E,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QACjE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QACjE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAC9D,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU;KACtF,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"symInfoView.js","sourceRoot":"","sources":["../../src/views/symInfoView.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AA6B/D,MAAM,UAAU,GAAwC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAC3B,OAAuB,EACvB,OAA4B;IAE5B,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAC3D,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;QACjE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;QAC9E,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QACjE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7E,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QACjE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QACjE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAC9D,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU;KACtF,CAAC,CAAC;AACP,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { JsonValue, SymInfoView, SymbolType } from \"@invinite-org/chartlang-core\";\n\n/**\n * Adapter-supplied per-mount symbol metadata payload.\n *\n * @since 0.4\n * @stable\n * @example\n * const info: AdapterSymInfo = {\n * ticker: \"DEMO\",\n * type: \"equity\",\n * mintick: 0.01,\n * };\n * void info;\n */\nexport type AdapterSymInfo = Readonly<{\n ticker?: string;\n type?: SymbolType;\n mintick?: number;\n currency?: string;\n basecurrency?: string;\n exchange?: string;\n timezone?: string;\n session?: string;\n meta?: Readonly<Record<string, JsonValue>>;\n}>;\n\nconst EMPTY_META: Readonly<Record<string, JsonValue>> = Object.freeze({});\n\n/**\n * Build a frozen `syminfo.*` view from adapter metadata and enabled fields.\n *\n * Fields not present in `enabled` evaluate to their empty sentinel:\n * `\"\"`, `Number.NaN`, `\"custom\"`, or `{}`.\n *\n * @since 0.4\n * @stable\n * @example\n * const view = makeSymInfoView(\n * { ticker: \"DEMO\", mintick: 0.01 },\n * new Set([\"ticker\", \"mintick\"]),\n * );\n * void view.ticker;\n */\nexport function makeSymInfoView(\n payload: AdapterSymInfo,\n enabled: ReadonlySet<string>,\n): SymInfoView {\n return Object.freeze({\n ticker: enabled.has(\"ticker\") ? (payload.ticker ?? \"\") : \"\",\n type: enabled.has(\"type\") ? (payload.type ?? \"custom\") : \"custom\",\n mintick: enabled.has(\"mintick\") ? (payload.mintick ?? Number.NaN) : Number.NaN,\n currency: enabled.has(\"currency\") ? (payload.currency ?? \"\") : \"\",\n basecurrency: enabled.has(\"basecurrency\") ? (payload.basecurrency ?? \"\") : \"\",\n exchange: enabled.has(\"exchange\") ? (payload.exchange ?? \"\") : \"\",\n timezone: enabled.has(\"timezone\") ? (payload.timezone ?? \"\") : \"\",\n session: enabled.has(\"session\") ? (payload.session ?? \"\") : \"\",\n meta: enabled.has(\"meta\") ? Object.freeze({ ...(payload.meta ?? {}) }) : EMPTY_META,\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"timeframeView.js","sourceRoot":"","sources":["../../src/views/timeframeView.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAI/D,SAAS,WAAW,CAAC,KAAa;IAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,aAAa,GAAqC,MAAM,CAAC,MAAM,CAAC;IAClE,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,UAAU;CACrB,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEnE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAC7B,QAAgB,EAChB,UAA0C;IAE1C,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;IACnD,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;IACvD,MAAM,SAAS,GACX,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAEhG,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QACtC,OAAO,EAAE,KAAK,KAAK,OAAO;QAC1B,QAAQ,EAAE,KAAK,KAAK,QAAQ;QAC5B,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;QACpC,SAAS;KACZ,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"timeframeView.js","sourceRoot":"","sources":["../../src/views/timeframeView.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAI/D,SAAS,WAAW,CAAC,KAAa;IAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,aAAa,GAAqC,MAAM,CAAC,MAAM,CAAC;IAClE,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,UAAU;CACrB,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEnE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAC7B,QAAgB,EAChB,UAA0C;IAE1C,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;IACnD,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;IACvD,MAAM,SAAS,GACX,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAEhG,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QACtC,OAAO,EAAE,KAAK,KAAK,OAAO;QAC1B,QAAQ,EAAE,KAAK,KAAK,QAAQ;QAC5B,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;QACpC,SAAS;KACZ,CAAC,CAAC;AACP,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { IntervalDescriptor, TimeframeView } from \"@invinite-org/chartlang-core\";\n\nfunction parsePrefix(value: string): number | null {\n const match = /^(\\d+)/.exec(value);\n return match === null ? null : Number(match[1]);\n}\n\nconst GROUP_SECONDS: Readonly<Record<string, number>> = Object.freeze({\n second: 1,\n minute: 60,\n hour: 3_600,\n daily: 86_400,\n weekly: 604_800,\n monthly: 2_629_800,\n quarterly: 7_889_400,\n yearly: 31_557_600,\n});\n\nconst INTRADAY_GROUPS = new Set([\"second\", \"minute\", \"hour\"]);\nconst MONTHLY_LONGER = new Set([\"monthly\", \"quarterly\", \"yearly\"]);\n\n/**\n * Build a frozen `timeframe.*` view from the current bar interval and\n * adapter interval descriptor.\n *\n * @since 0.4\n * @stable\n * @example\n * const view = makeTimeframeView(\"5m\", {\n * value: \"5m\",\n * label: \"5 minutes\",\n * group: \"minute\",\n * });\n * void view.inSeconds;\n */\nexport function makeTimeframeView(\n interval: string,\n descriptor: IntervalDescriptor | undefined,\n): TimeframeView {\n const group = descriptor?.group ?? \"\";\n const prefix = parsePrefix(interval) ?? Number.NaN;\n const unitSeconds = GROUP_SECONDS[group] ?? Number.NaN;\n const inSeconds =\n Number.isFinite(prefix) && Number.isFinite(unitSeconds) ? prefix * unitSeconds : Number.NaN;\n\n return Object.freeze({\n period: interval,\n isintraday: INTRADAY_GROUPS.has(group),\n isdaily: group === \"daily\",\n isweekly: group === \"weekly\",\n ismonthly: MONTHLY_LONGER.has(group),\n inSeconds,\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@invinite-org/chartlang-runtime",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Execution engine, Series ring buffers, ta.* math primitives",
@@ -23,8 +23,8 @@
23
23
  "LICENSE"
24
24
  ],
25
25
  "dependencies": {
26
- "@invinite-org/chartlang-adapter-kit": "^1.2.0",
27
- "@invinite-org/chartlang-core": "^1.1.0"
26
+ "@invinite-org/chartlang-adapter-kit": "^1.3.0",
27
+ "@invinite-org/chartlang-core": "^1.2.0"
28
28
  },
29
29
  "devDependencies": {
30
30
  "fast-check": "^3.20.0"
@@ -1,19 +0,0 @@
1
- /**
2
- * TradingView-parity bar-shift helper. `offset === 0` returns the
3
- * same array reference so callers can keep a no-shift call in the
4
- * fast path without an allocation. Positive `offset` shifts forward
5
- * in time (output[i] = values[i − offset], NaN where out of range);
6
- * negative shifts backward.
7
- *
8
- * Phase 1 always passes `offset = 0` — the helper exists so Phase 4's
9
- * universal `opts.offset` (§9.1) is a zero-line wire-up.
10
- *
11
- * @formula out[i] = values[i − offset] (NaN when i − offset ∉ [0, n))
12
- * @since 0.1
13
- * @stable
14
- * @example
15
- * // import { applyOffsetToSeries } from "./applyOffset";
16
- * // const shifted = applyOffsetToSeries(values, 2);
17
- */
18
- export declare function applyOffsetToSeries(values: Float64Array, offset: number): Float64Array;
19
- //# sourceMappingURL=applyOffset.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"applyOffset.d.ts","sourceRoot":"","sources":["../../../src/ta/lib/applyOffset.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAUtF"}
@@ -1,38 +0,0 @@
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
- // Ported from invinite/src/components/trading-chart/indicators/lib/apply-offset.ts
5
- // (commit d2d1043c1b039f66d2f3674526d303d31cf2f1e0, © 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.
8
- /**
9
- * TradingView-parity bar-shift helper. `offset === 0` returns the
10
- * same array reference so callers can keep a no-shift call in the
11
- * fast path without an allocation. Positive `offset` shifts forward
12
- * in time (output[i] = values[i − offset], NaN where out of range);
13
- * negative shifts backward.
14
- *
15
- * Phase 1 always passes `offset = 0` — the helper exists so Phase 4's
16
- * universal `opts.offset` (§9.1) is a zero-line wire-up.
17
- *
18
- * @formula out[i] = values[i − offset] (NaN when i − offset ∉ [0, n))
19
- * @since 0.1
20
- * @stable
21
- * @example
22
- * // import { applyOffsetToSeries } from "./applyOffset";
23
- * // const shifted = applyOffsetToSeries(values, 2);
24
- */
25
- export function applyOffsetToSeries(values, offset) {
26
- if (offset === 0 || values.length === 0)
27
- return values;
28
- const n = values.length;
29
- const out = new Float64Array(n);
30
- out.fill(Number.NaN);
31
- for (let i = 0; i < n; i += 1) {
32
- const src = i - offset;
33
- if (src >= 0 && src < n)
34
- out[i] = values[src];
35
- }
36
- return out;
37
- }
38
- //# sourceMappingURL=applyOffset.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"applyOffset.js","sourceRoot":"","sources":["../../../src/ta/lib/applyOffset.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,mFAAmF;AACnF,mEAAmE;AACnE,0DAA0D;AAC1D,yEAAyE;AAEzE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB,EAAE,MAAc;IACpE,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACvD,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,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}