oakscriptjs 0.8.1 → 0.9.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 (544) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +31 -9
  3. package/dist/cjs/array/index.d.ts +701 -0
  4. package/dist/cjs/array/index.d.ts.map +1 -0
  5. package/dist/cjs/array/index.js +392 -0
  6. package/dist/cjs/array/index.js.map +7 -0
  7. package/dist/cjs/box/index.d.ts +444 -0
  8. package/dist/cjs/box/index.d.ts.map +1 -0
  9. package/dist/cjs/box/index.js +246 -0
  10. package/dist/cjs/box/index.js.map +7 -0
  11. package/dist/cjs/callsite/index.d.ts +61 -0
  12. package/dist/cjs/callsite/index.d.ts.map +1 -0
  13. package/dist/cjs/callsite/index.js +65 -0
  14. package/dist/cjs/callsite/index.js.map +7 -0
  15. package/dist/cjs/chartpoint/index.d.ts +90 -0
  16. package/dist/cjs/chartpoint/index.d.ts.map +1 -0
  17. package/dist/cjs/chartpoint/index.js +56 -0
  18. package/dist/cjs/chartpoint/index.js.map +7 -0
  19. package/dist/cjs/color/index.d.ts +285 -0
  20. package/dist/cjs/color/index.d.ts.map +1 -0
  21. package/dist/cjs/color/index.js +143 -0
  22. package/dist/cjs/color/index.js.map +7 -0
  23. package/dist/cjs/compare/index.d.ts +26 -0
  24. package/dist/cjs/compare/index.d.ts.map +1 -0
  25. package/dist/cjs/compare/index.js +50 -0
  26. package/dist/cjs/compare/index.js.map +7 -0
  27. package/dist/cjs/drawing/registry.d.ts +42 -0
  28. package/dist/cjs/drawing/registry.d.ts.map +1 -0
  29. package/dist/cjs/drawing/registry.js +87 -0
  30. package/dist/cjs/drawing/registry.js.map +7 -0
  31. package/dist/cjs/index.d.ts +85 -0
  32. package/dist/cjs/index.d.ts.map +1 -0
  33. package/dist/cjs/index.js +184 -0
  34. package/dist/cjs/index.js.map +7 -0
  35. package/dist/cjs/indicator.d.ts +117 -0
  36. package/dist/cjs/indicator.d.ts.map +1 -0
  37. package/dist/cjs/indicator.js +74 -0
  38. package/dist/cjs/indicator.js.map +7 -0
  39. package/dist/cjs/input.d.ts +196 -0
  40. package/dist/cjs/input.d.ts.map +1 -0
  41. package/dist/cjs/input.js +197 -0
  42. package/dist/cjs/input.js.map +7 -0
  43. package/dist/cjs/label/index.d.ts +303 -0
  44. package/dist/cjs/label/index.d.ts.map +1 -0
  45. package/dist/cjs/label/index.js +190 -0
  46. package/dist/cjs/label/index.js.map +7 -0
  47. package/dist/cjs/lib/index.d.ts +8 -0
  48. package/dist/cjs/lib/index.d.ts.map +1 -0
  49. package/dist/cjs/lib/index.js +19 -0
  50. package/dist/cjs/lib/index.js.map +7 -0
  51. package/dist/{lib → cjs/lib}/zigzag/index.d.ts +4 -1
  52. package/dist/cjs/lib/zigzag/index.d.ts.map +1 -0
  53. package/dist/cjs/lib/zigzag/index.js +27 -0
  54. package/dist/cjs/lib/zigzag/index.js.map +7 -0
  55. package/dist/cjs/lib/zigzag/zigzag.d.ts +100 -0
  56. package/dist/cjs/lib/zigzag/zigzag.d.ts.map +1 -0
  57. package/dist/cjs/lib/zigzag/zigzag.js +207 -0
  58. package/dist/cjs/lib/zigzag/zigzag.js.map +7 -0
  59. package/dist/cjs/line/index.d.ts +342 -0
  60. package/dist/cjs/line/index.d.ts.map +1 -0
  61. package/dist/cjs/line/index.js +193 -0
  62. package/dist/cjs/line/index.js.map +7 -0
  63. package/dist/cjs/linefill/index.d.ts +124 -0
  64. package/dist/cjs/linefill/index.d.ts.map +1 -0
  65. package/dist/cjs/linefill/index.js +56 -0
  66. package/dist/cjs/linefill/index.js.map +7 -0
  67. package/dist/cjs/map/index.d.ts +69 -0
  68. package/dist/cjs/map/index.d.ts.map +1 -0
  69. package/dist/cjs/map/index.js +80 -0
  70. package/dist/cjs/map/index.js.map +7 -0
  71. package/dist/cjs/math/index.d.ts +560 -0
  72. package/dist/cjs/math/index.d.ts.map +1 -0
  73. package/dist/cjs/math/index.js +441 -0
  74. package/dist/cjs/math/index.js.map +7 -0
  75. package/dist/cjs/matrix/index.d.ts +1231 -0
  76. package/dist/cjs/matrix/index.d.ts.map +1 -0
  77. package/dist/cjs/matrix/index.js +1200 -0
  78. package/dist/cjs/matrix/index.js.map +7 -0
  79. package/dist/cjs/package.json +1 -0
  80. package/dist/cjs/plot.d.ts +76 -0
  81. package/dist/cjs/plot.d.ts.map +1 -0
  82. package/dist/cjs/plot.js +51 -0
  83. package/dist/cjs/plot.js.map +7 -0
  84. package/dist/cjs/polyline/index.d.ts +115 -0
  85. package/dist/cjs/polyline/index.d.ts.map +1 -0
  86. package/dist/cjs/polyline/index.js +76 -0
  87. package/dist/cjs/polyline/index.js.map +7 -0
  88. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
  89. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
  90. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js +141 -0
  91. package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js.map +7 -0
  92. package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
  93. package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
  94. package/dist/cjs/runtime/adapters/SimpleInputAdapter.js +117 -0
  95. package/dist/cjs/runtime/adapters/SimpleInputAdapter.js.map +7 -0
  96. package/dist/{runtime → cjs/runtime}/index.d.ts +12 -5
  97. package/dist/cjs/runtime/index.d.ts.map +1 -0
  98. package/dist/cjs/runtime/index.js +49 -0
  99. package/dist/cjs/runtime/index.js.map +7 -0
  100. package/dist/cjs/runtime/inputs.d.ts +91 -0
  101. package/dist/cjs/runtime/inputs.d.ts.map +1 -0
  102. package/dist/cjs/runtime/inputs.js +262 -0
  103. package/dist/cjs/runtime/inputs.js.map +7 -0
  104. package/dist/cjs/runtime/runtime.d.ts +70 -0
  105. package/dist/cjs/runtime/runtime.d.ts.map +1 -0
  106. package/dist/cjs/runtime/runtime.js +148 -0
  107. package/dist/cjs/runtime/runtime.js.map +7 -0
  108. package/dist/cjs/runtime/series.d.ts +362 -0
  109. package/dist/cjs/runtime/series.d.ts.map +1 -0
  110. package/dist/cjs/runtime/series.js +560 -0
  111. package/dist/cjs/runtime/series.js.map +7 -0
  112. package/dist/cjs/runtime/types.d.ts +282 -0
  113. package/dist/cjs/runtime/types.d.ts.map +1 -0
  114. package/dist/cjs/runtime/types.js +17 -0
  115. package/dist/cjs/runtime/types.js.map +7 -0
  116. package/dist/cjs/script/index.d.ts +987 -0
  117. package/dist/cjs/script/index.d.ts.map +1 -0
  118. package/dist/cjs/script/index.js +1169 -0
  119. package/dist/cjs/script/index.js.map +7 -0
  120. package/dist/cjs/security/resample.d.ts +63 -0
  121. package/dist/cjs/security/resample.d.ts.map +1 -0
  122. package/dist/cjs/security/resample.js +84 -0
  123. package/dist/cjs/security/resample.js.map +7 -0
  124. package/dist/cjs/session/bars.d.ts +80 -0
  125. package/dist/cjs/session/bars.d.ts.map +1 -0
  126. package/dist/cjs/session/bars.js +219 -0
  127. package/dist/cjs/session/bars.js.map +7 -0
  128. package/dist/cjs/session/calendar.d.ts +70 -0
  129. package/dist/cjs/session/calendar.d.ts.map +1 -0
  130. package/dist/cjs/session/calendar.js +164 -0
  131. package/dist/cjs/session/calendar.js.map +7 -0
  132. package/dist/cjs/str/dateformat.d.ts +15 -0
  133. package/dist/cjs/str/dateformat.d.ts.map +1 -0
  134. package/dist/cjs/str/dateformat.js +149 -0
  135. package/dist/cjs/str/dateformat.js.map +7 -0
  136. package/dist/cjs/str/index.d.ts +459 -0
  137. package/dist/cjs/str/index.d.ts.map +1 -0
  138. package/dist/cjs/str/index.js +143 -0
  139. package/dist/cjs/str/index.js.map +7 -0
  140. package/dist/cjs/str/messageformat.d.ts +14 -0
  141. package/dist/cjs/str/messageformat.d.ts.map +1 -0
  142. package/dist/cjs/str/messageformat.js +114 -0
  143. package/dist/cjs/str/messageformat.js.map +7 -0
  144. package/dist/cjs/str/numberformat.d.ts +19 -0
  145. package/dist/cjs/str/numberformat.d.ts.map +1 -0
  146. package/dist/cjs/str/numberformat.js +170 -0
  147. package/dist/cjs/str/numberformat.js.map +7 -0
  148. package/dist/{strategy → cjs/strategy}/index.d.ts +50 -0
  149. package/dist/cjs/strategy/index.d.ts.map +1 -0
  150. package/dist/cjs/strategy/index.js +92 -0
  151. package/dist/cjs/strategy/index.js.map +7 -0
  152. package/dist/cjs/ta/index.d.ts +1397 -0
  153. package/dist/cjs/ta/index.d.ts.map +1 -0
  154. package/dist/cjs/ta/index.js +1715 -0
  155. package/dist/cjs/ta/index.js.map +7 -0
  156. package/dist/cjs/ta/running-sum.d.ts +30 -0
  157. package/dist/cjs/ta/running-sum.d.ts.map +1 -0
  158. package/dist/cjs/ta/running-sum.js +99 -0
  159. package/dist/cjs/ta/running-sum.js.map +7 -0
  160. package/dist/cjs/ta-series.d.ts +558 -0
  161. package/dist/cjs/ta-series.d.ts.map +1 -0
  162. package/dist/cjs/ta-series.js +606 -0
  163. package/dist/cjs/ta-series.js.map +7 -0
  164. package/dist/cjs/text/index.d.ts +14 -0
  165. package/dist/cjs/text/index.d.ts.map +1 -0
  166. package/dist/cjs/text/index.js +29 -0
  167. package/dist/cjs/text/index.js.map +7 -0
  168. package/dist/cjs/time/datestring.d.ts +23 -0
  169. package/dist/cjs/time/datestring.d.ts.map +1 -0
  170. package/dist/cjs/time/datestring.js +106 -0
  171. package/dist/cjs/time/datestring.js.map +7 -0
  172. package/dist/cjs/time/index.d.ts +89 -0
  173. package/dist/cjs/time/index.d.ts.map +1 -0
  174. package/dist/cjs/time/index.js +85 -0
  175. package/dist/cjs/time/index.js.map +7 -0
  176. package/dist/cjs/time/session.d.ts +17 -0
  177. package/dist/cjs/time/session.d.ts.map +1 -0
  178. package/dist/cjs/time/session.js +65 -0
  179. package/dist/cjs/time/session.js.map +7 -0
  180. package/dist/cjs/time/timezone.d.ts +40 -0
  181. package/dist/cjs/time/timezone.d.ts.map +1 -0
  182. package/dist/cjs/time/timezone.js +125 -0
  183. package/dist/cjs/time/timezone.js.map +7 -0
  184. package/dist/cjs/timeframe/index.d.ts +73 -0
  185. package/dist/cjs/timeframe/index.d.ts.map +1 -0
  186. package/dist/cjs/timeframe/index.js +85 -0
  187. package/dist/cjs/timeframe/index.js.map +7 -0
  188. package/dist/cjs/types/index.d.ts +343 -0
  189. package/dist/cjs/types/index.d.ts.map +1 -0
  190. package/dist/cjs/types/index.js +32 -0
  191. package/dist/cjs/types/index.js.map +7 -0
  192. package/dist/cjs/types/metadata.d.ts +300 -0
  193. package/dist/cjs/types/metadata.d.ts.map +1 -0
  194. package/dist/cjs/types/metadata.js +17 -0
  195. package/dist/cjs/types/metadata.js.map +7 -0
  196. package/dist/cjs/utils/index.d.ts +167 -0
  197. package/dist/cjs/utils/index.d.ts.map +1 -0
  198. package/dist/cjs/utils/index.js +209 -0
  199. package/dist/cjs/utils/index.js.map +7 -0
  200. package/dist/esm/array/index.d.ts +701 -0
  201. package/dist/esm/array/index.d.ts.map +1 -0
  202. package/dist/esm/array/index.js +983 -0
  203. package/dist/esm/array/index.js.map +1 -0
  204. package/dist/esm/box/index.d.ts +444 -0
  205. package/dist/esm/box/index.d.ts.map +1 -0
  206. package/dist/esm/box/index.js +602 -0
  207. package/dist/esm/box/index.js.map +1 -0
  208. package/dist/esm/callsite/index.d.ts +61 -0
  209. package/dist/esm/callsite/index.d.ts.map +1 -0
  210. package/dist/esm/callsite/index.js +97 -0
  211. package/dist/esm/callsite/index.js.map +1 -0
  212. package/dist/esm/chartpoint/index.d.ts +90 -0
  213. package/dist/esm/chartpoint/index.d.ts.map +1 -0
  214. package/dist/esm/chartpoint/index.js +113 -0
  215. package/dist/esm/chartpoint/index.js.map +1 -0
  216. package/dist/esm/color/index.d.ts +285 -0
  217. package/dist/esm/color/index.d.ts.map +1 -0
  218. package/dist/esm/color/index.js +373 -0
  219. package/dist/esm/color/index.js.map +1 -0
  220. package/dist/esm/compare/index.d.ts +26 -0
  221. package/dist/esm/compare/index.d.ts.map +1 -0
  222. package/dist/esm/compare/index.js +39 -0
  223. package/dist/esm/compare/index.js.map +1 -0
  224. package/dist/esm/drawing/registry.d.ts +42 -0
  225. package/dist/esm/drawing/registry.d.ts.map +1 -0
  226. package/dist/esm/drawing/registry.js +89 -0
  227. package/dist/esm/drawing/registry.js.map +1 -0
  228. package/dist/esm/index.d.ts +85 -0
  229. package/dist/esm/index.d.ts.map +1 -0
  230. package/dist/esm/index.js +96 -0
  231. package/dist/esm/index.js.map +1 -0
  232. package/dist/esm/indicator.d.ts +117 -0
  233. package/dist/esm/indicator.d.ts.map +1 -0
  234. package/dist/esm/indicator.js +84 -0
  235. package/dist/esm/indicator.js.map +1 -0
  236. package/dist/esm/input.d.ts +196 -0
  237. package/dist/esm/input.d.ts.map +1 -0
  238. package/dist/esm/input.js +183 -0
  239. package/dist/esm/input.js.map +1 -0
  240. package/dist/esm/label/index.d.ts +303 -0
  241. package/dist/esm/label/index.d.ts.map +1 -0
  242. package/dist/esm/label/index.js +417 -0
  243. package/dist/esm/label/index.js.map +1 -0
  244. package/dist/esm/lib/index.d.ts +8 -0
  245. package/dist/esm/lib/index.d.ts.map +1 -0
  246. package/dist/esm/lib/index.js +8 -0
  247. package/dist/esm/lib/index.js.map +1 -0
  248. package/dist/esm/lib/zigzag/index.d.ts +5 -0
  249. package/dist/esm/lib/zigzag/index.d.ts.map +1 -0
  250. package/dist/esm/lib/zigzag/index.js +5 -0
  251. package/dist/esm/lib/zigzag/index.js.map +1 -0
  252. package/dist/esm/lib/zigzag/zigzag.d.ts +100 -0
  253. package/dist/esm/lib/zigzag/zigzag.d.ts.map +1 -0
  254. package/dist/esm/lib/zigzag/zigzag.js +229 -0
  255. package/dist/esm/lib/zigzag/zigzag.js.map +1 -0
  256. package/dist/esm/line/index.d.ts +342 -0
  257. package/dist/esm/line/index.d.ts.map +1 -0
  258. package/dist/esm/line/index.js +470 -0
  259. package/dist/esm/line/index.js.map +1 -0
  260. package/dist/esm/linefill/index.d.ts +124 -0
  261. package/dist/esm/linefill/index.d.ts.map +1 -0
  262. package/dist/esm/linefill/index.js +144 -0
  263. package/dist/esm/linefill/index.js.map +1 -0
  264. package/dist/esm/map/index.d.ts +69 -0
  265. package/dist/esm/map/index.d.ts.map +1 -0
  266. package/dist/esm/map/index.js +106 -0
  267. package/dist/esm/map/index.js.map +1 -0
  268. package/dist/esm/math/index.d.ts +560 -0
  269. package/dist/esm/math/index.d.ts.map +1 -0
  270. package/dist/esm/math/index.js +495 -0
  271. package/dist/esm/math/index.js.map +1 -0
  272. package/dist/esm/matrix/index.d.ts +1231 -0
  273. package/dist/esm/matrix/index.d.ts.map +1 -0
  274. package/dist/esm/matrix/index.js +2450 -0
  275. package/dist/esm/matrix/index.js.map +1 -0
  276. package/dist/esm/plot.d.ts +76 -0
  277. package/dist/esm/plot.d.ts.map +1 -0
  278. package/dist/esm/plot.js +63 -0
  279. package/dist/esm/plot.js.map +1 -0
  280. package/dist/esm/polyline/index.d.ts +115 -0
  281. package/dist/esm/polyline/index.d.ts.map +1 -0
  282. package/dist/esm/polyline/index.js +157 -0
  283. package/dist/esm/polyline/index.js.map +1 -0
  284. package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
  285. package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
  286. package/dist/esm/runtime/adapters/LightweightChartsAdapter.js +140 -0
  287. package/dist/esm/runtime/adapters/LightweightChartsAdapter.js.map +1 -0
  288. package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
  289. package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
  290. package/dist/esm/runtime/adapters/SimpleInputAdapter.js +115 -0
  291. package/dist/esm/runtime/adapters/SimpleInputAdapter.js.map +1 -0
  292. package/dist/esm/runtime/index.d.ts +13 -0
  293. package/dist/esm/runtime/index.d.ts.map +1 -0
  294. package/dist/esm/runtime/index.js +14 -0
  295. package/dist/esm/runtime/index.js.map +1 -0
  296. package/dist/esm/runtime/inputs.d.ts +91 -0
  297. package/dist/esm/runtime/inputs.d.ts.map +1 -0
  298. package/dist/esm/runtime/inputs.js +334 -0
  299. package/dist/esm/runtime/inputs.js.map +1 -0
  300. package/dist/esm/runtime/runtime.d.ts +70 -0
  301. package/dist/esm/runtime/runtime.d.ts.map +1 -0
  302. package/dist/esm/runtime/runtime.js +193 -0
  303. package/dist/esm/runtime/runtime.js.map +1 -0
  304. package/dist/esm/runtime/series.d.ts +362 -0
  305. package/dist/esm/runtime/series.d.ts.map +1 -0
  306. package/dist/esm/runtime/series.js +583 -0
  307. package/dist/esm/runtime/series.js.map +1 -0
  308. package/dist/esm/runtime/types.d.ts +282 -0
  309. package/dist/esm/runtime/types.d.ts.map +1 -0
  310. package/dist/esm/runtime/types.js +7 -0
  311. package/dist/esm/runtime/types.js.map +1 -0
  312. package/dist/esm/script/index.d.ts +987 -0
  313. package/dist/esm/script/index.d.ts.map +1 -0
  314. package/dist/esm/script/index.js +1289 -0
  315. package/dist/esm/script/index.js.map +1 -0
  316. package/dist/esm/security/resample.d.ts +63 -0
  317. package/dist/esm/security/resample.d.ts.map +1 -0
  318. package/dist/esm/security/resample.js +110 -0
  319. package/dist/esm/security/resample.js.map +1 -0
  320. package/dist/esm/session/bars.d.ts +80 -0
  321. package/dist/esm/session/bars.d.ts.map +1 -0
  322. package/dist/esm/session/bars.js +232 -0
  323. package/dist/esm/session/bars.js.map +1 -0
  324. package/dist/esm/session/calendar.d.ts +70 -0
  325. package/dist/esm/session/calendar.d.ts.map +1 -0
  326. package/dist/esm/session/calendar.js +172 -0
  327. package/dist/esm/session/calendar.js.map +1 -0
  328. package/dist/esm/str/dateformat.d.ts +15 -0
  329. package/dist/esm/str/dateformat.d.ts.map +1 -0
  330. package/dist/esm/str/dateformat.js +136 -0
  331. package/dist/esm/str/dateformat.js.map +1 -0
  332. package/dist/esm/str/index.d.ts +459 -0
  333. package/dist/esm/str/index.d.ts.map +1 -0
  334. package/dist/esm/str/index.js +540 -0
  335. package/dist/esm/str/index.js.map +1 -0
  336. package/dist/esm/str/messageformat.d.ts +14 -0
  337. package/dist/esm/str/messageformat.d.ts.map +1 -0
  338. package/dist/esm/str/messageformat.js +111 -0
  339. package/dist/esm/str/messageformat.js.map +1 -0
  340. package/dist/esm/str/numberformat.d.ts +19 -0
  341. package/dist/esm/str/numberformat.d.ts.map +1 -0
  342. package/dist/esm/str/numberformat.js +189 -0
  343. package/dist/esm/str/numberformat.js.map +1 -0
  344. package/dist/esm/strategy/index.d.ts +245 -0
  345. package/dist/esm/strategy/index.d.ts.map +1 -0
  346. package/dist/esm/strategy/index.js +84 -0
  347. package/dist/esm/strategy/index.js.map +1 -0
  348. package/dist/esm/ta/index.d.ts +1397 -0
  349. package/dist/esm/ta/index.d.ts.map +1 -0
  350. package/dist/esm/ta/index.js +3227 -0
  351. package/dist/esm/ta/index.js.map +1 -0
  352. package/dist/esm/ta/running-sum.d.ts +30 -0
  353. package/dist/esm/ta/running-sum.d.ts.map +1 -0
  354. package/dist/esm/ta/running-sum.js +113 -0
  355. package/dist/esm/ta/running-sum.js.map +1 -0
  356. package/dist/esm/ta-series.d.ts +558 -0
  357. package/dist/esm/ta-series.d.ts.map +1 -0
  358. package/dist/esm/ta-series.js +910 -0
  359. package/dist/esm/ta-series.js.map +1 -0
  360. package/dist/esm/text/index.d.ts +14 -0
  361. package/dist/esm/text/index.d.ts.map +1 -0
  362. package/dist/esm/text/index.js +14 -0
  363. package/dist/esm/text/index.js.map +1 -0
  364. package/dist/esm/time/datestring.d.ts +23 -0
  365. package/dist/esm/time/datestring.d.ts.map +1 -0
  366. package/dist/esm/time/datestring.js +94 -0
  367. package/dist/esm/time/datestring.js.map +1 -0
  368. package/dist/esm/time/index.d.ts +89 -0
  369. package/dist/esm/time/index.d.ts.map +1 -0
  370. package/dist/esm/time/index.js +108 -0
  371. package/dist/esm/time/index.js.map +1 -0
  372. package/dist/esm/time/session.d.ts +17 -0
  373. package/dist/esm/time/session.d.ts.map +1 -0
  374. package/dist/esm/time/session.js +69 -0
  375. package/dist/esm/time/session.js.map +1 -0
  376. package/dist/esm/time/timezone.d.ts +40 -0
  377. package/dist/esm/time/timezone.d.ts.map +1 -0
  378. package/dist/esm/time/timezone.js +144 -0
  379. package/dist/esm/time/timezone.js.map +1 -0
  380. package/dist/esm/timeframe/index.d.ts +73 -0
  381. package/dist/esm/timeframe/index.d.ts.map +1 -0
  382. package/dist/esm/timeframe/index.js +131 -0
  383. package/dist/esm/timeframe/index.js.map +1 -0
  384. package/dist/esm/types/index.d.ts +343 -0
  385. package/dist/esm/types/index.d.ts.map +1 -0
  386. package/dist/esm/types/index.js +17 -0
  387. package/dist/esm/types/index.js.map +1 -0
  388. package/dist/esm/types/metadata.d.ts +300 -0
  389. package/dist/esm/types/metadata.d.ts.map +1 -0
  390. package/dist/esm/types/metadata.js +7 -0
  391. package/dist/esm/types/metadata.js.map +1 -0
  392. package/dist/esm/utils/index.d.ts +167 -0
  393. package/dist/esm/utils/index.d.ts.map +1 -0
  394. package/dist/esm/utils/index.js +295 -0
  395. package/dist/esm/utils/index.js.map +1 -0
  396. package/package.json +53 -23
  397. package/src/array/index.ts +1056 -0
  398. package/src/box/index.ts +680 -0
  399. package/src/callsite/index.ts +104 -0
  400. package/src/chartpoint/index.ts +126 -0
  401. package/src/color/index.ts +411 -0
  402. package/src/compare/index.ts +46 -0
  403. package/src/drawing/registry.ts +106 -0
  404. package/src/index.ts +201 -0
  405. package/src/indicator.ts +185 -0
  406. package/src/input.ts +280 -0
  407. package/src/label/index.ts +490 -0
  408. package/src/lib/index.ts +8 -0
  409. package/src/lib/zigzag/index.ts +13 -0
  410. package/src/lib/zigzag/zigzag.ts +318 -0
  411. package/src/line/index.ts +530 -0
  412. package/src/linefill/index.ts +152 -0
  413. package/src/map/index.ts +115 -0
  414. package/src/math/index.ts +1071 -0
  415. package/src/matrix/index.ts +2697 -0
  416. package/src/plot.ts +121 -0
  417. package/src/polyline/index.ts +184 -0
  418. package/src/runtime/adapters/LightweightChartsAdapter.ts +201 -0
  419. package/src/runtime/adapters/SimpleInputAdapter.ts +132 -0
  420. package/src/runtime/index.ts +52 -0
  421. package/src/runtime/inputs.ts +377 -0
  422. package/src/runtime/runtime.ts +241 -0
  423. package/src/runtime/series.ts +644 -0
  424. package/src/runtime/types.ts +292 -0
  425. package/src/script/index.ts +1865 -0
  426. package/src/security/resample.ts +119 -0
  427. package/src/session/bars.ts +262 -0
  428. package/src/session/calendar.ts +199 -0
  429. package/src/str/dateformat.ts +104 -0
  430. package/src/str/index.ts +557 -0
  431. package/src/str/messageformat.ts +109 -0
  432. package/src/str/numberformat.ts +197 -0
  433. package/src/strategy/index.ts +281 -0
  434. package/src/ta/index.ts +3580 -0
  435. package/src/ta/running-sum.ts +117 -0
  436. package/src/ta-series.ts +1036 -0
  437. package/src/text/index.ts +14 -0
  438. package/src/time/datestring.ts +96 -0
  439. package/src/time/index.ts +161 -0
  440. package/src/time/session.ts +79 -0
  441. package/src/time/timezone.ts +180 -0
  442. package/src/timeframe/index.ts +144 -0
  443. package/src/types/index.ts +398 -0
  444. package/src/types/metadata.ts +334 -0
  445. package/src/utils/index.ts +334 -0
  446. package/dist/array/index.d.ts +0 -57
  447. package/dist/array/index.d.ts.map +0 -1
  448. package/dist/box/index.d.ts +0 -37
  449. package/dist/box/index.d.ts.map +0 -1
  450. package/dist/callsite/index.d.ts +0 -7
  451. package/dist/callsite/index.d.ts.map +0 -1
  452. package/dist/chartpoint/index.d.ts +0 -8
  453. package/dist/chartpoint/index.d.ts.map +0 -1
  454. package/dist/color/index.d.ts +0 -28
  455. package/dist/color/index.d.ts.map +0 -1
  456. package/dist/compare/index.d.ts +0 -8
  457. package/dist/compare/index.d.ts.map +0 -1
  458. package/dist/drawing/registry.d.ts +0 -19
  459. package/dist/drawing/registry.d.ts.map +0 -1
  460. package/dist/index.cjs +0 -7979
  461. package/dist/index.d.ts +0 -64
  462. package/dist/index.d.ts.map +0 -1
  463. package/dist/index.mjs +0 -7962
  464. package/dist/indicator.d.ts +0 -42
  465. package/dist/indicator.d.ts.map +0 -1
  466. package/dist/input.d.ts +0 -47
  467. package/dist/input.d.ts.map +0 -1
  468. package/dist/label/index.d.ts +0 -30
  469. package/dist/label/index.d.ts.map +0 -1
  470. package/dist/lib/index.d.ts +0 -2
  471. package/dist/lib/index.d.ts.map +0 -1
  472. package/dist/lib/zigzag/index.d.ts.map +0 -1
  473. package/dist/lib/zigzag/zigzag.d.ts +0 -47
  474. package/dist/lib/zigzag/zigzag.d.ts.map +0 -1
  475. package/dist/line/index.d.ts +0 -30
  476. package/dist/line/index.d.ts.map +0 -1
  477. package/dist/linefill/index.d.ts +0 -10
  478. package/dist/linefill/index.d.ts.map +0 -1
  479. package/dist/map/index.d.ts +0 -14
  480. package/dist/map/index.d.ts.map +0 -1
  481. package/dist/math/index.d.ts +0 -53
  482. package/dist/math/index.d.ts.map +0 -1
  483. package/dist/matrix/index.d.ts +0 -52
  484. package/dist/matrix/index.d.ts.map +0 -1
  485. package/dist/plot.d.ts +0 -20
  486. package/dist/plot.d.ts.map +0 -1
  487. package/dist/polyline/index.d.ts +0 -11
  488. package/dist/polyline/index.d.ts.map +0 -1
  489. package/dist/runtime/adapters/LightweightChartsAdapter.d.ts +0 -15
  490. package/dist/runtime/adapters/LightweightChartsAdapter.d.ts.map +0 -1
  491. package/dist/runtime/adapters/SimpleInputAdapter.d.ts +0 -16
  492. package/dist/runtime/adapters/SimpleInputAdapter.d.ts.map +0 -1
  493. package/dist/runtime/index.cjs +0 -600
  494. package/dist/runtime/index.d.ts.map +0 -1
  495. package/dist/runtime/index.mjs +0 -577
  496. package/dist/runtime/inputs.d.ts +0 -13
  497. package/dist/runtime/inputs.d.ts.map +0 -1
  498. package/dist/runtime/runtime.d.ts +0 -16
  499. package/dist/runtime/runtime.d.ts.map +0 -1
  500. package/dist/runtime/series.d.ts +0 -60
  501. package/dist/runtime/series.d.ts.map +0 -1
  502. package/dist/runtime/types.d.ts +0 -122
  503. package/dist/runtime/types.d.ts.map +0 -1
  504. package/dist/script/index.cjs +0 -6372
  505. package/dist/script/index.d.ts +0 -709
  506. package/dist/script/index.d.ts.map +0 -1
  507. package/dist/script/index.mjs +0 -6355
  508. package/dist/security/resample.d.ts +0 -13
  509. package/dist/security/resample.d.ts.map +0 -1
  510. package/dist/session/bars.d.ts +0 -34
  511. package/dist/session/bars.d.ts.map +0 -1
  512. package/dist/session/calendar.d.ts +0 -31
  513. package/dist/session/calendar.d.ts.map +0 -1
  514. package/dist/str/dateformat.d.ts +0 -2
  515. package/dist/str/dateformat.d.ts.map +0 -1
  516. package/dist/str/index.d.ts +0 -24
  517. package/dist/str/index.d.ts.map +0 -1
  518. package/dist/str/messageformat.d.ts +0 -2
  519. package/dist/str/messageformat.d.ts.map +0 -1
  520. package/dist/str/numberformat.d.ts +0 -3
  521. package/dist/str/numberformat.d.ts.map +0 -1
  522. package/dist/strategy/index.d.ts.map +0 -1
  523. package/dist/ta/index.d.ts +0 -72
  524. package/dist/ta/index.d.ts.map +0 -1
  525. package/dist/ta-series.d.ts +0 -143
  526. package/dist/ta-series.d.ts.map +0 -1
  527. package/dist/text/index.d.ts +0 -4
  528. package/dist/text/index.d.ts.map +0 -1
  529. package/dist/time/datestring.d.ts +0 -2
  530. package/dist/time/datestring.d.ts.map +0 -1
  531. package/dist/time/index.d.ts +0 -15
  532. package/dist/time/index.d.ts.map +0 -1
  533. package/dist/time/session.d.ts +0 -2
  534. package/dist/time/session.d.ts.map +0 -1
  535. package/dist/time/timezone.d.ts +0 -13
  536. package/dist/time/timezone.d.ts.map +0 -1
  537. package/dist/timeframe/index.d.ts +0 -17
  538. package/dist/timeframe/index.d.ts.map +0 -1
  539. package/dist/types/index.d.ts +0 -181
  540. package/dist/types/index.d.ts.map +0 -1
  541. package/dist/types/metadata.d.ts +0 -131
  542. package/dist/types/metadata.d.ts.map +0 -1
  543. package/dist/utils/index.d.ts +0 -26
  544. package/dist/utils/index.d.ts.map +0 -1
@@ -0,0 +1,334 @@
1
+ /**
2
+ * @fileoverview Type definitions for indicator metadata
3
+ * These types define the structure of data returned by indicators
4
+ * @module types/metadata
5
+ */
6
+
7
+ /**
8
+ * Plot style options
9
+ */
10
+ export type PlotStyle = 'line' | 'stepline' | 'histogram' | 'area' | 'circles' | 'columns' | 'cross' | 'areabr' | 'steplinebr' | 'linebr' | 'stepline_diamond';
11
+
12
+ /**
13
+ * Line style options
14
+ */
15
+ export type LineStyle = 'solid' | 'dashed' | 'dotted';
16
+
17
+ /**
18
+ * Plot display options
19
+ */
20
+ export type PlotDisplay = 'all' | 'none' | 'data_window' | 'status_line' | 'pane';
21
+
22
+ /**
23
+ * Options for a plot
24
+ */
25
+ export interface PlotOptions {
26
+ /** Plot title */
27
+ title?: string;
28
+ /** Plot color (hex string or named color) */
29
+ color?: string;
30
+ /** Line width */
31
+ linewidth?: number;
32
+ /** Plot style */
33
+ style?: PlotStyle;
34
+ /** Line style (PineScript `linestyle`); default solid. A constant or an input value, not per bar */
35
+ linestyle?: LineStyle;
36
+ /** Track price on price scale */
37
+ trackprice?: boolean;
38
+ /** Histogram base value */
39
+ histbase?: number;
40
+ /** Offset from current bar */
41
+ offset?: number;
42
+ /** Join gaps in data */
43
+ join?: boolean;
44
+ /** User can edit */
45
+ editable?: boolean;
46
+ /** Display mode */
47
+ display?: PlotDisplay;
48
+ /** Transparency (0-100) */
49
+ transp?: number;
50
+ /** Draw the plot on the main chart pane even when the indicator is not an overlay; default false */
51
+ force_overlay?: boolean;
52
+ }
53
+
54
+ /**
55
+ * Options for a horizontal line
56
+ */
57
+ export interface HLineOptions {
58
+ /** Line title */
59
+ title?: string;
60
+ /** Line color */
61
+ color?: string;
62
+ /** Line style (PineScript default: dashed) */
63
+ linestyle?: LineStyle;
64
+ /** Line width */
65
+ linewidth?: number;
66
+ /** User can edit */
67
+ editable?: boolean;
68
+ }
69
+
70
+ /**
71
+ * Options for a fill
72
+ */
73
+ export interface FillOptions {
74
+ /** Fill color */
75
+ color?: string;
76
+ /** Transparency (0-100) */
77
+ transp?: number;
78
+ /** Fill title */
79
+ title?: string;
80
+ /** User can edit */
81
+ editable?: boolean;
82
+ /** Fill gaps in data */
83
+ fillgaps?: boolean;
84
+ }
85
+
86
+ /**
87
+ * Input parameter type
88
+ */
89
+ export type InputType = 'int' | 'float' | 'bool' | 'string' | 'source' | 'color' | 'timeframe' | 'session' | 'time';
90
+
91
+ /**
92
+ * Input parameter metadata
93
+ */
94
+ export interface InputMetadata {
95
+ /** Input type */
96
+ type: InputType;
97
+ /** Internal name (snake_case) */
98
+ name: string;
99
+ /** Display title */
100
+ title: string;
101
+ /** Default value */
102
+ defval: any;
103
+ /** Minimum value (for numeric inputs) */
104
+ minval?: number;
105
+ /** Maximum value (for numeric inputs) */
106
+ maxval?: number;
107
+ /** Step size (for numeric inputs) */
108
+ step?: number;
109
+ /** Tooltip text */
110
+ tooltip?: string;
111
+ /** Inline group */
112
+ inline?: string;
113
+ /** Parameter group */
114
+ group?: string;
115
+ /** Options for dropdown (for string/source inputs) */
116
+ options?: any[];
117
+ /** Confirm before changing */
118
+ confirm?: boolean;
119
+ }
120
+
121
+ /**
122
+ * Plot metadata
123
+ */
124
+ export interface PlotMetadata {
125
+ /** Variable name for the plot */
126
+ varName: string;
127
+ /** Plot title */
128
+ title: string;
129
+ /** Plot color */
130
+ color: string;
131
+ /** Line width */
132
+ linewidth: number;
133
+ /** Plot style */
134
+ style: PlotStyle;
135
+ }
136
+
137
+ /**
138
+ * Indicator metadata
139
+ */
140
+ export interface IndicatorMetadata {
141
+ /** Indicator title */
142
+ title: string;
143
+ /** Short title */
144
+ shorttitle?: string;
145
+ /** Overlay on main chart */
146
+ overlay: boolean;
147
+ /** Number format precision */
148
+ precision?: number;
149
+ /** Number format */
150
+ format?: string;
151
+ /** Timeframe */
152
+ timeframe?: string;
153
+ /** Show gaps in timeframes */
154
+ timeframe_gaps?: boolean;
155
+ /** Input parameters */
156
+ inputs?: InputMetadata[];
157
+ /** Plots */
158
+ plots?: PlotMetadata[];
159
+ }
160
+
161
+ /**
162
+ * Time-value pair for charting
163
+ */
164
+ export interface TimeValue {
165
+ /** Time (timestamp or string) */
166
+ time: any;
167
+ /** Value */
168
+ value: number;
169
+ /** Per-bar color override */
170
+ color?: string;
171
+ }
172
+
173
+ /**
174
+ * Plot data with options
175
+ */
176
+ export interface PlotData {
177
+ /** Time-value pairs */
178
+ data: TimeValue[];
179
+ /** Plot options */
180
+ options?: PlotOptions;
181
+ }
182
+
183
+ /**
184
+ * Horizontal line data
185
+ */
186
+ export interface HLineData {
187
+ /** Y-axis value */
188
+ value: number;
189
+ /** Line options */
190
+ options?: HLineOptions;
191
+ }
192
+
193
+ /**
194
+ * Fill data (area between two plots)
195
+ */
196
+ export interface FillData {
197
+ /** First plot index or name */
198
+ plot1: number | string;
199
+ /** Second plot index or name */
200
+ plot2: number | string;
201
+ /** Fill options */
202
+ options?: FillOptions;
203
+ /** Per-bar fill colors (overrides static options.color) */
204
+ colors?: string[];
205
+ /** Gradient fill (PineScript `fill(p1, p2, top_value, bottom_value, top_color, bottom_color)`) */
206
+ gradient?: FillGradient;
207
+ }
208
+
209
+ /**
210
+ * Gradient of a fill, one entry per bar. PineScript rules: the colour
211
+ * changes with the price, `topColor` at `topValue` and `bottomColor` at `bottomValue`; outside that range the end
212
+ * colour is kept; each bar has its own gradient (the part from bar i-1 to bar i uses the values of bar i).
213
+ */
214
+ export interface FillGradient {
215
+ /** Price of `topColor`, per bar */
216
+ topValue: number[];
217
+ /** Price of `bottomColor`, per bar */
218
+ bottomValue: number[];
219
+ /** Colour at `topValue`, per bar (null: na) */
220
+ topColor: Array<string | null>;
221
+ /** Colour at `bottomValue`, per bar (null: na) */
222
+ bottomColor: Array<string | null>;
223
+ }
224
+
225
+ /**
226
+ * Marker location on the chart (PineScript plotshape/plotchar locations)
227
+ */
228
+ export type MarkerLocation = 'abovebar' | 'belowbar' | 'top' | 'bottom' | 'absolute';
229
+
230
+ /**
231
+ * Marker size (PineScript size.* constants)
232
+ */
233
+ export type MarkerSize = 'auto' | 'tiny' | 'small' | 'normal' | 'large' | 'huge';
234
+
235
+ /**
236
+ * Shape style (PineScript shape.* constants)
237
+ */
238
+ export type ShapeStyle =
239
+ | 'xcross'
240
+ | 'cross'
241
+ | 'triangleup'
242
+ | 'triangledown'
243
+ | 'flag'
244
+ | 'circle'
245
+ | 'arrowup'
246
+ | 'arrowdown'
247
+ | 'labelup'
248
+ | 'labeldown'
249
+ | 'square'
250
+ | 'diamond';
251
+
252
+ /**
253
+ * One marker emitted by plotshape()/plotchar() on a bar where the condition held
254
+ */
255
+ export interface MarkerData {
256
+ /** Time of the bar the marker is displayed on (offset already applied) */
257
+ time: any;
258
+ /** Id of the plotshape/plotchar declaration that produced it */
259
+ id: string;
260
+ /** Marker location relative to the bar */
261
+ location: MarkerLocation;
262
+ /** Shape style, or 'char' for plotchar markers */
263
+ style: ShapeStyle | 'char';
264
+ /** Character (plotchar only) */
265
+ char?: string;
266
+ /** Marker color */
267
+ color?: string;
268
+ /** Text shown near the marker */
269
+ text?: string;
270
+ /** Text color */
271
+ textcolor?: string;
272
+ /** Marker size */
273
+ size?: MarkerSize;
274
+ /** Hover tooltip (extension over PineScript plotshape, used by label.new ports) */
275
+ tooltip?: string;
276
+ /** Price for location 'absolute' (the series value on that bar) */
277
+ price?: number;
278
+ }
279
+
280
+ /**
281
+ * Per-bar arrow from plotarrow(): up arrow for a positive value, down arrow for a negative value
282
+ */
283
+ export interface ArrowData {
284
+ /** Time of the bar the arrow is displayed on (offset already applied) */
285
+ time: any;
286
+ /** Id of the plotarrow declaration that produced it */
287
+ id: string;
288
+ /** Series value (non-zero): its sign gives the direction, its absolute value the height */
289
+ value: number;
290
+ /** Arrow color (colorup or colordown of that bar) */
291
+ color: string;
292
+ }
293
+
294
+ /**
295
+ * Per-bar color for bgcolor()/barcolor() output
296
+ */
297
+ export interface BarColorData {
298
+ /** Time of the colored bar (offset already applied) */
299
+ time: any;
300
+ /** Color */
301
+ color: string;
302
+ }
303
+
304
+ /**
305
+ * Complete indicator calculation result
306
+ */
307
+ export interface IndicatorResult {
308
+ /** Indicator metadata */
309
+ metadata: IndicatorMetadata;
310
+ /** Plot data as Record mapping plot IDs to TimeValue arrays */
311
+ plots: Record<string, TimeValue[]>;
312
+ /** Horizontal lines */
313
+ hlines?: HLineData[];
314
+ /** Fills */
315
+ fills?: FillData[];
316
+ /** Markers from plotshape()/plotchar() */
317
+ markers?: MarkerData[];
318
+ /** Arrows from plotarrow() */
319
+ arrows?: ArrowData[];
320
+ /** Background colors from bgcolor() */
321
+ bgcolors?: BarColorData[];
322
+ /** Bar colors from barcolor() */
323
+ barcolors?: BarColorData[];
324
+ }
325
+
326
+ /**
327
+ * Indicator factory function type
328
+ */
329
+ export type IndicatorFactory = (options?: Record<string, any>) => {
330
+ /** Indicator metadata */
331
+ metadata: IndicatorMetadata;
332
+ /** Calculate function */
333
+ calculate: (bars: any[]) => PlotData[] | TimeValue[];
334
+ };
@@ -0,0 +1,334 @@
1
+ /**
2
+ * Utility functions for OakScriptJS
3
+ * These are internal helpers and not part of the PineScript API
4
+ */
5
+
6
+ import type { series_float, int, float, Source, Bar, OHLC } from '../types/index.js';
7
+ import { sma, ema, wma, rma } from '../ta/index.js';
8
+ import { Series } from '../runtime/series.js';
9
+ import { isDeleted } from '../drawing/registry.js';
10
+
11
+ /**
12
+ * Validates that a series has sufficient data for a given length
13
+ */
14
+ export function validateSeriesLength(source: Source, length: int, functionName: string): void {
15
+ if (source.length < length) {
16
+ console.warn(`${functionName}: Source length (${source.length}) is less than required length (${length})`);
17
+ }
18
+ }
19
+
20
+ /**
21
+ * Creates a series filled with NaN values
22
+ */
23
+ export function createNaNSeries(length: int): series_float {
24
+ return new Array(length).fill(NaN);
25
+ }
26
+
27
+ /**
28
+ * Checks if a value is `na`: NaN, null, undefined, +/-Infinity, or a deleted drawing object
29
+ * (as in PineScript, `na(l)` is true after `line.delete(l)`, and `na(1 / 0)` is true).
30
+ */
31
+ export function isNA(value: any): boolean {
32
+ return (
33
+ value === null ||
34
+ value === undefined ||
35
+ Number.isNaN(value) ||
36
+ value === Infinity ||
37
+ value === -Infinity ||
38
+ isDeleted(value)
39
+ );
40
+ }
41
+
42
+ /**
43
+ * Returns the value or a default if it's NA
44
+ */
45
+ export function nz(value: any, defaultValue: any = 0): any {
46
+ return isNA(value) ? defaultValue : value;
47
+ }
48
+
49
+ /**
50
+ * PineScript `fixnan(source)`: replaces each `na` value (NaN, null or undefined) with the
51
+ * previous non-`na` value. Values before the first non-`na` value stay `na`.
52
+ * Works for numeric series and for color series (arrays of color strings with `undefined` for `na`).
53
+ */
54
+ export function fixnan<T>(source: T[]): T[] {
55
+ let last: T | undefined;
56
+ let seen = false;
57
+ return source.map((v) => {
58
+ // PineScript fixnan keeps +/-Infinity (only NaN / null / undefined are replaced)
59
+ if (!(v === null || v === undefined || Number.isNaN(v) || isDeleted(v))) {
60
+ last = v;
61
+ seen = true;
62
+ return v;
63
+ }
64
+ return seen ? (last as T) : v;
65
+ });
66
+ }
67
+
68
+ /**
69
+ * PineScript history reference `x[offset]` at bar `i` of an array: the value `offset` bars back,
70
+ * `na` (NaN) before the first bar. A negative offset (a later bar) throws, as in PineScript.
71
+ */
72
+ export function at(source: ArrayLike<number>, i: int, offset: int = 0): float {
73
+ if (offset < 0) {
74
+ throw new RangeError(`at(): the offset must be >= 0 (got ${offset}); a negative offset reads a later bar.`);
75
+ }
76
+ const j = i - offset;
77
+ return j >= 0 && j < source.length ? (source[j] ?? NaN) : NaN;
78
+ }
79
+
80
+ /**
81
+ * PineScript division: `a / 0` is +/-Infinity (0 / 0 is NaN), as in JavaScript. PineScript keeps the infinite value
82
+ * in comparisons (`1 / 0 > 0` is true) and treats it as `na` in `na()`, `nz()` and plots.
83
+ */
84
+ export function div(a: float, b: float): float {
85
+ return a / b;
86
+ }
87
+
88
+ /**
89
+ * Ensures a value is within bounds
90
+ */
91
+ export function clamp(value: float, min: float, max: float): float {
92
+ return Math.max(min, Math.min(max, value));
93
+ }
94
+
95
+ /**
96
+ * Linear interpolation
97
+ */
98
+ export function lerp(start: float, end: float, t: float): float {
99
+ return start + (end - start) * t;
100
+ }
101
+
102
+ /**
103
+ * Normalize a value from one range to another
104
+ */
105
+ export function normalize(value: float, min: float, max: float, newMin: float = 0, newMax: float = 1): float {
106
+ return newMin + ((value - min) * (newMax - newMin)) / (max - min);
107
+ }
108
+
109
+ // ===== Chart Data Utilities =====
110
+ // These functions help convert between bar arrays and OHLC data structures
111
+
112
+ /**
113
+ * Creates OHLC data from bar array
114
+ * @param bars - Array of bar data
115
+ * @returns OHLC data structure
116
+ */
117
+ export function ohlcFromBars(bars: Bar[]): OHLC {
118
+ return {
119
+ open: bars.map(b => b.open),
120
+ high: bars.map(b => b.high),
121
+ low: bars.map(b => b.low),
122
+ close: bars.map(b => b.close),
123
+ };
124
+ }
125
+
126
+ /**
127
+ * Gets close prices from OHLC
128
+ * @param ohlc - OHLC data
129
+ * @returns Close price series
130
+ */
131
+ export function getClose(ohlc: OHLC): series_float {
132
+ return ohlc.close;
133
+ }
134
+
135
+ /**
136
+ * Gets high prices from OHLC
137
+ * @param ohlc - OHLC data
138
+ * @returns High price series
139
+ */
140
+ export function getHigh(ohlc: OHLC): series_float {
141
+ return ohlc.high;
142
+ }
143
+
144
+ /**
145
+ * Gets low prices from OHLC
146
+ * @param ohlc - OHLC data
147
+ * @returns Low price series
148
+ */
149
+ export function getLow(ohlc: OHLC): series_float {
150
+ return ohlc.low;
151
+ }
152
+
153
+ /**
154
+ * Gets open prices from OHLC
155
+ * @param ohlc - OHLC data
156
+ * @returns Open price series
157
+ */
158
+ export function getOpen(ohlc: OHLC): series_float {
159
+ return ohlc.open;
160
+ }
161
+
162
+ // ===== Source Extraction Utilities =====
163
+
164
+ /**
165
+ * Extract a specific source from OHLC data or bar array
166
+ *
167
+ * @param data - Bar array or OHLC data
168
+ * @param source - Source type: 'close', 'open', 'high', 'low', 'hl2', 'hlc3', 'ohlc4'
169
+ * @returns Series of the requested source
170
+ *
171
+ * @example
172
+ * ```typescript
173
+ * const bars = [{ open: 100, high: 105, low: 98, close: 102 }, ...];
174
+ * const closes = getSource(bars, 'close'); // [102, ...]
175
+ * const hl2 = getSource(bars, 'hl2'); // [(105+98)/2, ...]
176
+ * ```
177
+ */
178
+ export function getSource(
179
+ data: Bar[] | OHLC,
180
+ source: 'close' | 'open' | 'high' | 'low' | 'hl2' | 'hlc3' | 'ohlc4' | 'hlcc4' = 'close'
181
+ ): series_float {
182
+ // Check if data is OHLC structure
183
+ const isOHLC = 'open' in data && Array.isArray(data.open);
184
+
185
+ if (isOHLC) {
186
+ const ohlc = data as OHLC;
187
+ switch (source) {
188
+ case 'close': return ohlc.close;
189
+ case 'open': return ohlc.open;
190
+ case 'high': return ohlc.high;
191
+ case 'low': return ohlc.low;
192
+ case 'hl2': return ohlc.high.map((h, i) => (h + ohlc.low[i]!) / 2);
193
+ case 'hlc3': return ohlc.high.map((h, i) => (h + ohlc.low[i]! + ohlc.close[i]!) / 3);
194
+ case 'ohlc4': return ohlc.open.map((o, i) => (o + ohlc.high[i]! + ohlc.low[i]! + ohlc.close[i]!) / 4);
195
+ case 'hlcc4': return ohlc.high.map((h, i) => (h + ohlc.low[i]! + ohlc.close[i]! + ohlc.close[i]!) / 4);
196
+ }
197
+ } else {
198
+ const bars = data as Bar[];
199
+ switch (source) {
200
+ case 'close': return bars.map(b => b.close);
201
+ case 'open': return bars.map(b => b.open);
202
+ case 'high': return bars.map(b => b.high);
203
+ case 'low': return bars.map(b => b.low);
204
+ case 'hl2': return bars.map(b => (b.high + b.low) / 2);
205
+ case 'hlc3': return bars.map(b => (b.high + b.low + b.close) / 3);
206
+ case 'ohlc4': return bars.map(b => (b.open + b.high + b.low + b.close) / 4);
207
+ case 'hlcc4': return bars.map(b => (b.high + b.low + b.close + b.close) / 4);
208
+ }
209
+ }
210
+ }
211
+
212
+ /**
213
+ * Creates a Series from bars based on the specified source type.
214
+ * Unlike getSource() which returns number[], this returns a Series
215
+ * with chainable methods like .add(), .sub(), .mul(), .div()
216
+ *
217
+ * @param bars - Array of bar data
218
+ * @param source - Source type (default: 'close')
219
+ * @returns Series object for the requested source
220
+ *
221
+ * @example
222
+ * ```typescript
223
+ * const bars = [{ time: 1, open: 100, high: 105, low: 98, close: 102, volume: 1000 }, ...];
224
+ * const source = getSourceSeries(bars, 'hlc3');
225
+ * const smaResult = ta.sma(source, 14);
226
+ * ```
227
+ */
228
+ export function getSourceSeries(
229
+ bars: Bar[],
230
+ source: 'open' | 'high' | 'low' | 'close' | 'hl2' | 'hlc3' | 'ohlc4' | 'hlcc4' = 'close'
231
+ ): Series {
232
+ const open = new Series(bars, (bar) => bar.open);
233
+ const high = new Series(bars, (bar) => bar.high);
234
+ const low = new Series(bars, (bar) => bar.low);
235
+ const close = new Series(bars, (bar) => bar.close);
236
+
237
+ switch (source) {
238
+ case 'open': return open;
239
+ case 'high': return high;
240
+ case 'low': return low;
241
+ case 'close': return close;
242
+ case 'hl2': return high.add(low).div(2);
243
+ case 'hlc3': return high.add(low).add(close).div(3);
244
+ case 'ohlc4': return open.add(high).add(low).add(close).div(4);
245
+ case 'hlcc4': return high.add(low).add(close).add(close).div(4);
246
+ default: return close;
247
+ }
248
+ }
249
+
250
+ // ===== Series Manipulation Utilities =====
251
+
252
+ /**
253
+ * Shift (offset) a series forward or backward in time
254
+ *
255
+ * @param series - Series to shift
256
+ * @param offset - Number of bars to shift (positive = forward/right, negative = backward/left)
257
+ * @returns Shifted series with NaN padding
258
+ *
259
+ * @example
260
+ * ```typescript
261
+ * const values = [1, 2, 3, 4, 5];
262
+ * shift(values, 2); // [NaN, NaN, 1, 2, 3] (shift forward)
263
+ * shift(values, -2); // [3, 4, 5, NaN, NaN] (shift backward)
264
+ * ```
265
+ */
266
+ export function shift(series: series_float, offset: int): series_float {
267
+ if (offset === 0) return series;
268
+
269
+ if (offset > 0) {
270
+ // Shift forward: add NaN at start, remove from end
271
+ return Array(offset).fill(NaN).concat(series.slice(0, -offset));
272
+ } else {
273
+ // Shift backward: remove from start, add NaN at end
274
+ return series.slice(-offset).concat(Array(-offset).fill(NaN));
275
+ }
276
+ }
277
+
278
+ /**
279
+ * Apply smoothing to a series using a specified method
280
+ *
281
+ * @param series - Series to smooth
282
+ * @param method - Smoothing method: 'SMA', 'EMA', 'WMA', 'RMA'
283
+ * @param length - Smoothing length
284
+ * @returns Smoothed series
285
+ *
286
+ * @example
287
+ * ```typescript
288
+ * const values = [10, 11, 12, 13, 14];
289
+ * const smoothed = smooth(values, 'EMA', 3);
290
+ * ```
291
+ *
292
+ * @remarks
293
+ * This is a convenience function that delegates to the appropriate ta function.
294
+ * Import this from utils, not from ta namespace.
295
+ */
296
+ export function smooth(
297
+ series: series_float,
298
+ method: 'SMA' | 'EMA' | 'WMA' | 'RMA',
299
+ length: int
300
+ ): series_float {
301
+ switch (method.toUpperCase()) {
302
+ case 'SMA': return sma(series, length);
303
+ case 'EMA': return ema(series, length);
304
+ case 'WMA': return wma(series, length);
305
+ case 'RMA': return rma(series, length);
306
+ default:
307
+ throw new Error(`Unknown smoothing method: ${method}`);
308
+ }
309
+ }
310
+
311
+ /**
312
+ * Format series values with timestamps for output
313
+ *
314
+ * @param values - Series of values to format
315
+ * @param timestamps - Array of timestamps (optional)
316
+ * @returns Array of objects with time and value properties
317
+ *
318
+ * @example
319
+ * ```typescript
320
+ * const values = [100, 101, NaN, 103];
321
+ * const times = [1, 2, 3, 4];
322
+ * const formatted = formatOutput(values, times);
323
+ * // [{ time: 1, value: 100 }, { time: 2, value: 101 }, { time: 3, value: null }, { time: 4, value: 103 }]
324
+ * ```
325
+ */
326
+ export function formatOutput(
327
+ values: series_float,
328
+ timestamps?: number[]
329
+ ): Array<{ time: number; value: number | null }> {
330
+ return values.map((value, index) => ({
331
+ time: timestamps ? timestamps[index]! : index,
332
+ value: isNaN(value) ? null : value
333
+ }));
334
+ }