openalgo-script 0.1.0-alpha.1 → 0.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 (990) hide show
  1. package/CHANGELOG.md +1200 -0
  2. package/README.md +49 -28
  3. package/dist/adapters/charts/alerts.d.ts +70 -0
  4. package/dist/adapters/charts/alerts.d.ts.map +1 -0
  5. package/dist/adapters/charts/alerts.js +52 -0
  6. package/dist/adapters/charts/alerts.js.map +1 -0
  7. package/dist/adapters/charts/bars.d.ts +39 -0
  8. package/dist/adapters/charts/bars.d.ts.map +1 -0
  9. package/dist/adapters/charts/bars.js +32 -0
  10. package/dist/adapters/charts/bars.js.map +1 -0
  11. package/dist/adapters/charts/candles.d.ts +40 -0
  12. package/dist/adapters/charts/candles.d.ts.map +1 -0
  13. package/dist/adapters/charts/candles.js +85 -0
  14. package/dist/adapters/charts/candles.js.map +1 -0
  15. package/dist/adapters/charts/colours.d.ts +47 -0
  16. package/dist/adapters/charts/colours.d.ts.map +1 -0
  17. package/dist/adapters/charts/colours.js +80 -0
  18. package/dist/adapters/charts/colours.js.map +1 -0
  19. package/dist/adapters/charts/columns.d.ts +37 -0
  20. package/dist/adapters/charts/columns.d.ts.map +1 -0
  21. package/dist/adapters/charts/columns.js +56 -0
  22. package/dist/adapters/charts/columns.js.map +1 -0
  23. package/dist/adapters/charts/contract.d.ts +278 -0
  24. package/dist/adapters/charts/contract.d.ts.map +1 -0
  25. package/dist/adapters/charts/contract.js +2 -0
  26. package/dist/adapters/charts/contract.js.map +1 -0
  27. package/dist/adapters/charts/descriptor.d.ts +48 -0
  28. package/dist/adapters/charts/descriptor.d.ts.map +1 -0
  29. package/dist/adapters/charts/descriptor.js +111 -0
  30. package/dist/adapters/charts/descriptor.js.map +1 -0
  31. package/dist/adapters/charts/drawings.d.ts +43 -0
  32. package/dist/adapters/charts/drawings.d.ts.map +1 -0
  33. package/dist/adapters/charts/drawings.js +172 -0
  34. package/dist/adapters/charts/drawings.js.map +1 -0
  35. package/dist/adapters/charts/errors.d.ts +28 -0
  36. package/dist/adapters/charts/errors.d.ts.map +1 -0
  37. package/dist/adapters/charts/errors.js +21 -0
  38. package/dist/adapters/charts/errors.js.map +1 -0
  39. package/dist/adapters/charts/fields.d.ts +33 -0
  40. package/dist/adapters/charts/fields.d.ts.map +1 -0
  41. package/dist/adapters/charts/fields.js +51 -0
  42. package/dist/adapters/charts/fields.js.map +1 -0
  43. package/dist/adapters/charts/fills.d.ts +23 -0
  44. package/dist/adapters/charts/fills.d.ts.map +1 -0
  45. package/dist/adapters/charts/fills.js +48 -0
  46. package/dist/adapters/charts/fills.js.map +1 -0
  47. package/dist/adapters/charts/index.d.ts +37 -0
  48. package/dist/adapters/charts/index.d.ts.map +1 -0
  49. package/dist/adapters/charts/index.js +33 -0
  50. package/dist/adapters/charts/index.js.map +1 -0
  51. package/dist/adapters/charts/levels.d.ts +39 -0
  52. package/dist/adapters/charts/levels.d.ts.map +1 -0
  53. package/dist/adapters/charts/levels.js +61 -0
  54. package/dist/adapters/charts/levels.js.map +1 -0
  55. package/dist/adapters/charts/markers.d.ts +41 -0
  56. package/dist/adapters/charts/markers.d.ts.map +1 -0
  57. package/dist/adapters/charts/markers.js +75 -0
  58. package/dist/adapters/charts/markers.js.map +1 -0
  59. package/dist/adapters/charts/paint.d.ts +61 -0
  60. package/dist/adapters/charts/paint.d.ts.map +1 -0
  61. package/dist/adapters/charts/paint.js +47 -0
  62. package/dist/adapters/charts/paint.js.map +1 -0
  63. package/dist/adapters/charts/plots.d.ts +39 -0
  64. package/dist/adapters/charts/plots.d.ts.map +1 -0
  65. package/dist/adapters/charts/plots.js +117 -0
  66. package/dist/adapters/charts/plots.js.map +1 -0
  67. package/dist/adapters/charts/produced.d.ts +57 -0
  68. package/dist/adapters/charts/produced.d.ts.map +1 -0
  69. package/dist/adapters/charts/produced.js +11 -0
  70. package/dist/adapters/charts/produced.js.map +1 -0
  71. package/dist/adapters/charts/requests.d.ts +114 -0
  72. package/dist/adapters/charts/requests.d.ts.map +1 -0
  73. package/dist/adapters/charts/requests.js +277 -0
  74. package/dist/adapters/charts/requests.js.map +1 -0
  75. package/dist/adapters/charts/run.d.ts +147 -0
  76. package/dist/adapters/charts/run.d.ts.map +1 -0
  77. package/dist/adapters/charts/run.js +148 -0
  78. package/dist/adapters/charts/run.js.map +1 -0
  79. package/dist/adapters/charts/settings.d.ts +78 -0
  80. package/dist/adapters/charts/settings.d.ts.map +1 -0
  81. package/dist/adapters/charts/settings.js +225 -0
  82. package/dist/adapters/charts/settings.js.map +1 -0
  83. package/dist/adapters/charts/surfaces.d.ts +204 -0
  84. package/dist/adapters/charts/surfaces.d.ts.map +1 -0
  85. package/dist/adapters/charts/surfaces.js +2 -0
  86. package/dist/adapters/charts/surfaces.js.map +1 -0
  87. package/dist/adapters/charts/tables.d.ts +65 -0
  88. package/dist/adapters/charts/tables.d.ts.map +1 -0
  89. package/dist/adapters/charts/tables.js +84 -0
  90. package/dist/adapters/charts/tables.js.map +1 -0
  91. package/dist/core/catalogue/catalogue.generated.d.ts +98 -10
  92. package/dist/core/catalogue/catalogue.generated.d.ts.map +1 -1
  93. package/dist/core/catalogue/catalogue.generated.js +17 -9
  94. package/dist/core/catalogue/catalogue.generated.js.map +1 -1
  95. package/dist/core/catalogue/values.generated.d.ts +25 -0
  96. package/dist/core/catalogue/values.generated.d.ts.map +1 -1
  97. package/dist/core/check/arguments.d.ts +41 -0
  98. package/dist/core/check/arguments.d.ts.map +1 -0
  99. package/dist/core/check/arguments.js +84 -0
  100. package/dist/core/check/arguments.js.map +1 -0
  101. package/dist/core/check/call-sites.d.ts +22 -0
  102. package/dist/core/check/call-sites.d.ts.map +1 -0
  103. package/dist/core/check/call-sites.js +329 -0
  104. package/dist/core/check/call-sites.js.map +1 -0
  105. package/dist/core/check/call-warmup.d.ts +37 -0
  106. package/dist/core/check/call-warmup.d.ts.map +1 -0
  107. package/dist/core/check/call-warmup.js +97 -0
  108. package/dist/core/check/call-warmup.js.map +1 -0
  109. package/dist/core/check/calls.d.ts +33 -0
  110. package/dist/core/check/calls.d.ts.map +1 -0
  111. package/dist/core/check/calls.js +348 -0
  112. package/dist/core/check/calls.js.map +1 -0
  113. package/dist/core/check/check.d.ts +23 -0
  114. package/dist/core/check/check.d.ts.map +1 -0
  115. package/dist/core/check/check.js +163 -0
  116. package/dist/core/check/check.js.map +1 -0
  117. package/dist/core/check/checked.d.ts +198 -0
  118. package/dist/core/check/checked.d.ts.map +1 -0
  119. package/dist/core/check/checked.js +19 -0
  120. package/dist/core/check/checked.js.map +1 -0
  121. package/dist/core/check/checker.d.ts +182 -0
  122. package/dist/core/check/checker.d.ts.map +1 -0
  123. package/dist/core/check/checker.js +280 -0
  124. package/dist/core/check/checker.js.map +1 -0
  125. package/dist/core/check/conditional.d.ts +35 -0
  126. package/dist/core/check/conditional.d.ts.map +1 -0
  127. package/dist/core/check/conditional.js +100 -0
  128. package/dist/core/check/conditional.js.map +1 -0
  129. package/dist/core/check/constant.d.ts +47 -0
  130. package/dist/core/check/constant.d.ts.map +1 -0
  131. package/dist/core/check/constant.js +101 -0
  132. package/dist/core/check/constant.js.map +1 -0
  133. package/dist/core/check/declaration.d.ts +33 -0
  134. package/dist/core/check/declaration.d.ts.map +1 -0
  135. package/dist/core/check/declaration.js +181 -0
  136. package/dist/core/check/declaration.js.map +1 -0
  137. package/dist/core/check/expressions.d.ts +36 -0
  138. package/dist/core/check/expressions.d.ts.map +1 -0
  139. package/dist/core/check/expressions.js +398 -0
  140. package/dist/core/check/expressions.js.map +1 -0
  141. package/dist/core/check/functions.d.ts +31 -0
  142. package/dist/core/check/functions.d.ts.map +1 -0
  143. package/dist/core/check/functions.js +238 -0
  144. package/dist/core/check/functions.js.map +1 -0
  145. package/dist/core/check/handles.d.ts +48 -0
  146. package/dist/core/check/handles.d.ts.map +1 -0
  147. package/dist/core/check/handles.js +43 -0
  148. package/dist/core/check/handles.js.map +1 -0
  149. package/dist/core/check/index.d.ts +30 -0
  150. package/dist/core/check/index.d.ts.map +1 -0
  151. package/dist/core/check/index.js +26 -0
  152. package/dist/core/check/index.js.map +1 -0
  153. package/dist/core/check/library-bars.d.ts +7 -0
  154. package/dist/core/check/library-bars.d.ts.map +1 -0
  155. package/dist/core/check/library-bars.js +181 -0
  156. package/dist/core/check/library-bars.js.map +1 -0
  157. package/dist/core/check/library-orders.d.ts +5 -0
  158. package/dist/core/check/library-orders.d.ts.map +1 -0
  159. package/dist/core/check/library-orders.js +250 -0
  160. package/dist/core/check/library-orders.js.map +1 -0
  161. package/dist/core/check/library-output.d.ts +7 -0
  162. package/dist/core/check/library-output.d.ts.map +1 -0
  163. package/dist/core/check/library-output.js +195 -0
  164. package/dist/core/check/library-output.js.map +1 -0
  165. package/dist/core/check/library-series.d.ts +3 -0
  166. package/dist/core/check/library-series.d.ts.map +1 -0
  167. package/dist/core/check/library-series.js +415 -0
  168. package/dist/core/check/library-series.js.map +1 -0
  169. package/dist/core/check/library.d.ts +204 -0
  170. package/dist/core/check/library.d.ts.map +1 -0
  171. package/dist/core/check/library.js +198 -0
  172. package/dist/core/check/library.js.map +1 -0
  173. package/dist/core/check/literals.d.ts +19 -0
  174. package/dist/core/check/literals.d.ts.map +1 -0
  175. package/dist/core/check/literals.js +22 -0
  176. package/dist/core/check/literals.js.map +1 -0
  177. package/dist/core/check/outputs.d.ts +31 -0
  178. package/dist/core/check/outputs.d.ts.map +1 -0
  179. package/dist/core/check/outputs.js +113 -0
  180. package/dist/core/check/outputs.js.map +1 -0
  181. package/dist/core/check/statements.d.ts +25 -0
  182. package/dist/core/check/statements.d.ts.map +1 -0
  183. package/dist/core/check/statements.js +377 -0
  184. package/dist/core/check/statements.js.map +1 -0
  185. package/dist/core/check/suggest.d.ts +25 -0
  186. package/dist/core/check/suggest.d.ts.map +1 -0
  187. package/dist/core/check/suggest.js +61 -0
  188. package/dist/core/check/suggest.js.map +1 -0
  189. package/dist/core/check/surface.d.ts +38 -0
  190. package/dist/core/check/surface.d.ts.map +1 -0
  191. package/dist/core/check/surface.js +100 -0
  192. package/dist/core/check/surface.js.map +1 -0
  193. package/dist/core/check/tags.d.ts +4 -0
  194. package/dist/core/check/tags.d.ts.map +1 -0
  195. package/dist/core/check/tags.js +54 -0
  196. package/dist/core/check/tags.js.map +1 -0
  197. package/dist/core/check/types.d.ts +153 -0
  198. package/dist/core/check/types.d.ts.map +1 -0
  199. package/dist/core/check/types.js +221 -0
  200. package/dist/core/check/types.js.map +1 -0
  201. package/dist/core/check/warmup.d.ts +73 -0
  202. package/dist/core/check/warmup.d.ts.map +1 -0
  203. package/dist/core/check/warmup.js +62 -0
  204. package/dist/core/check/warmup.js.map +1 -0
  205. package/dist/core/diagnostics/collector.d.ts +12 -0
  206. package/dist/core/diagnostics/collector.d.ts.map +1 -1
  207. package/dist/core/diagnostics/collector.js +27 -1
  208. package/dist/core/diagnostics/collector.js.map +1 -1
  209. package/dist/core/emit/calls.d.ts +38 -0
  210. package/dist/core/emit/calls.d.ts.map +1 -0
  211. package/dist/core/emit/calls.js +347 -0
  212. package/dist/core/emit/calls.js.map +1 -0
  213. package/dist/core/emit/canonical.d.ts +39 -0
  214. package/dist/core/emit/canonical.d.ts.map +1 -0
  215. package/dist/core/emit/canonical.js +71 -0
  216. package/dist/core/emit/canonical.js.map +1 -0
  217. package/dist/core/emit/channels.d.ts +28 -0
  218. package/dist/core/emit/channels.d.ts.map +1 -0
  219. package/dist/core/emit/channels.js +110 -0
  220. package/dist/core/emit/channels.js.map +1 -0
  221. package/dist/core/emit/code.d.ts +75 -0
  222. package/dist/core/emit/code.d.ts.map +1 -0
  223. package/dist/core/emit/code.js +104 -0
  224. package/dist/core/emit/code.js.map +1 -0
  225. package/dist/core/emit/colours.d.ts +35 -0
  226. package/dist/core/emit/colours.d.ts.map +1 -0
  227. package/dist/core/emit/colours.js +50 -0
  228. package/dist/core/emit/colours.js.map +1 -0
  229. package/dist/core/emit/context.d.ts +271 -0
  230. package/dist/core/emit/context.d.ts.map +1 -0
  231. package/dist/core/emit/context.js +358 -0
  232. package/dist/core/emit/context.js.map +1 -0
  233. package/dist/core/emit/defaults.d.ts +45 -0
  234. package/dist/core/emit/defaults.d.ts.map +1 -0
  235. package/dist/core/emit/defaults.js +116 -0
  236. package/dist/core/emit/defaults.js.map +1 -0
  237. package/dist/core/emit/emit.d.ts +13 -0
  238. package/dist/core/emit/emit.d.ts.map +1 -0
  239. package/dist/core/emit/emit.js +281 -0
  240. package/dist/core/emit/emit.js.map +1 -0
  241. package/dist/core/emit/events.d.ts +21 -0
  242. package/dist/core/emit/events.d.ts.map +1 -0
  243. package/dist/core/emit/events.js +112 -0
  244. package/dist/core/emit/events.js.map +1 -0
  245. package/dist/core/emit/expressions.d.ts +23 -0
  246. package/dist/core/emit/expressions.d.ts.map +1 -0
  247. package/dist/core/emit/expressions.js +253 -0
  248. package/dist/core/emit/expressions.js.map +1 -0
  249. package/dist/core/emit/functions.d.ts +30 -0
  250. package/dist/core/emit/functions.d.ts.map +1 -0
  251. package/dist/core/emit/functions.js +171 -0
  252. package/dist/core/emit/functions.js.map +1 -0
  253. package/dist/core/emit/gaps.d.ts +34 -0
  254. package/dist/core/emit/gaps.d.ts.map +1 -0
  255. package/dist/core/emit/gaps.js +16 -0
  256. package/dist/core/emit/gaps.js.map +1 -0
  257. package/dist/core/emit/index.d.ts +29 -0
  258. package/dist/core/emit/index.d.ts.map +1 -0
  259. package/dist/core/emit/index.js +23 -0
  260. package/dist/core/emit/index.js.map +1 -0
  261. package/dist/core/emit/inputs.d.ts +47 -0
  262. package/dist/core/emit/inputs.d.ts.map +1 -0
  263. package/dist/core/emit/inputs.js +150 -0
  264. package/dist/core/emit/inputs.js.map +1 -0
  265. package/dist/core/emit/layout.d.ts +73 -0
  266. package/dist/core/emit/layout.d.ts.map +1 -0
  267. package/dist/core/emit/layout.js +126 -0
  268. package/dist/core/emit/layout.js.map +1 -0
  269. package/dist/core/emit/meta.d.ts +14 -0
  270. package/dist/core/emit/meta.d.ts.map +1 -0
  271. package/dist/core/emit/meta.js +68 -0
  272. package/dist/core/emit/meta.js.map +1 -0
  273. package/dist/core/emit/opcodes.d.ts +28 -0
  274. package/dist/core/emit/opcodes.d.ts.map +1 -0
  275. package/dist/core/emit/opcodes.js +137 -0
  276. package/dist/core/emit/opcodes.js.map +1 -0
  277. package/dist/core/emit/outputs.d.ts +67 -0
  278. package/dist/core/emit/outputs.d.ts.map +1 -0
  279. package/dist/core/emit/outputs.js +293 -0
  280. package/dist/core/emit/outputs.js.map +1 -0
  281. package/dist/core/emit/pool.d.ts +33 -0
  282. package/dist/core/emit/pool.d.ts.map +1 -0
  283. package/dist/core/emit/pool.js +79 -0
  284. package/dist/core/emit/pool.js.map +1 -0
  285. package/dist/core/emit/program.d.ts +333 -0
  286. package/dist/core/emit/program.d.ts.map +1 -0
  287. package/dist/core/emit/program.js +15 -0
  288. package/dist/core/emit/program.js.map +1 -0
  289. package/dist/core/emit/registers.d.ts +35 -0
  290. package/dist/core/emit/registers.d.ts.map +1 -0
  291. package/dist/core/emit/registers.js +170 -0
  292. package/dist/core/emit/registers.js.map +1 -0
  293. package/dist/core/emit/request-scope.d.ts +36 -0
  294. package/dist/core/emit/request-scope.d.ts.map +1 -0
  295. package/dist/core/emit/request-scope.js +41 -0
  296. package/dist/core/emit/request-scope.js.map +1 -0
  297. package/dist/core/emit/requests.d.ts +69 -0
  298. package/dist/core/emit/requests.d.ts.map +1 -0
  299. package/dist/core/emit/requests.js +230 -0
  300. package/dist/core/emit/requests.js.map +1 -0
  301. package/dist/core/emit/requires.d.ts +4 -0
  302. package/dist/core/emit/requires.d.ts.map +1 -0
  303. package/dist/core/emit/requires.js +71 -0
  304. package/dist/core/emit/requires.js.map +1 -0
  305. package/dist/core/emit/sha256.d.ts +24 -0
  306. package/dist/core/emit/sha256.d.ts.map +1 -0
  307. package/dist/core/emit/sha256.js +109 -0
  308. package/dist/core/emit/sha256.js.map +1 -0
  309. package/dist/core/emit/statements.d.ts +20 -0
  310. package/dist/core/emit/statements.d.ts.map +1 -0
  311. package/dist/core/emit/statements.js +393 -0
  312. package/dist/core/emit/statements.js.map +1 -0
  313. package/dist/core/emit/values.d.ts +80 -0
  314. package/dist/core/emit/values.d.ts.map +1 -0
  315. package/dist/core/emit/values.js +242 -0
  316. package/dist/core/emit/values.js.map +1 -0
  317. package/dist/core/engine/alerts.d.ts +66 -0
  318. package/dist/core/engine/alerts.d.ts.map +1 -0
  319. package/dist/core/engine/alerts.js +119 -0
  320. package/dist/core/engine/alerts.js.map +1 -0
  321. package/dist/core/engine/arithmetic.d.ts +82 -0
  322. package/dist/core/engine/arithmetic.d.ts.map +1 -0
  323. package/dist/core/engine/arithmetic.js +141 -0
  324. package/dist/core/engine/arithmetic.js.map +1 -0
  325. package/dist/core/engine/bars.d.ts +95 -0
  326. package/dist/core/engine/bars.d.ts.map +1 -0
  327. package/dist/core/engine/bars.js +133 -0
  328. package/dist/core/engine/bars.js.map +1 -0
  329. package/dist/core/engine/budget.d.ts +162 -0
  330. package/dist/core/engine/budget.d.ts.map +1 -0
  331. package/dist/core/engine/budget.js +188 -0
  332. package/dist/core/engine/budget.js.map +1 -0
  333. package/dist/core/engine/channels.d.ts +106 -0
  334. package/dist/core/engine/channels.d.ts.map +1 -0
  335. package/dist/core/engine/channels.js +99 -0
  336. package/dist/core/engine/channels.js.map +1 -0
  337. package/dist/core/engine/drawings.d.ts +64 -0
  338. package/dist/core/engine/drawings.d.ts.map +1 -0
  339. package/dist/core/engine/drawings.js +67 -0
  340. package/dist/core/engine/drawings.js.map +1 -0
  341. package/dist/core/engine/engine.d.ts +140 -0
  342. package/dist/core/engine/engine.d.ts.map +1 -0
  343. package/dist/core/engine/engine.js +405 -0
  344. package/dist/core/engine/engine.js.map +1 -0
  345. package/dist/core/engine/errors.d.ts +64 -0
  346. package/dist/core/engine/errors.d.ts.map +1 -0
  347. package/dist/core/engine/errors.js +63 -0
  348. package/dist/core/engine/errors.js.map +1 -0
  349. package/dist/core/engine/frames.d.ts +48 -0
  350. package/dist/core/engine/frames.d.ts.map +1 -0
  351. package/dist/core/engine/frames.js +41 -0
  352. package/dist/core/engine/frames.js.map +1 -0
  353. package/dist/core/engine/grids.d.ts +25 -0
  354. package/dist/core/engine/grids.d.ts.map +1 -0
  355. package/dist/core/engine/grids.js +77 -0
  356. package/dist/core/engine/grids.js.map +1 -0
  357. package/dist/core/engine/guard.d.ts +4 -0
  358. package/dist/core/engine/guard.d.ts.map +1 -0
  359. package/dist/core/engine/guard.js +46 -0
  360. package/dist/core/engine/guard.js.map +1 -0
  361. package/dist/core/engine/host.d.ts +219 -0
  362. package/dist/core/engine/host.d.ts.map +1 -0
  363. package/dist/core/engine/host.js +38 -0
  364. package/dist/core/engine/host.js.map +1 -0
  365. package/dist/core/engine/index.d.ts +49 -0
  366. package/dist/core/engine/index.d.ts.map +1 -0
  367. package/dist/core/engine/index.js +33 -0
  368. package/dist/core/engine/index.js.map +1 -0
  369. package/dist/core/engine/inputs.d.ts +77 -0
  370. package/dist/core/engine/inputs.d.ts.map +1 -0
  371. package/dist/core/engine/inputs.js +205 -0
  372. package/dist/core/engine/inputs.js.map +1 -0
  373. package/dist/core/engine/ledger/call.d.ts +63 -0
  374. package/dist/core/engine/ledger/call.d.ts.map +1 -0
  375. package/dist/core/engine/ledger/call.js +136 -0
  376. package/dist/core/engine/ledger/call.js.map +1 -0
  377. package/dist/core/engine/ledger/closable.d.ts +155 -0
  378. package/dist/core/engine/ledger/closable.d.ts.map +1 -0
  379. package/dist/core/engine/ledger/closable.js +173 -0
  380. package/dist/core/engine/ledger/closable.js.map +1 -0
  381. package/dist/core/engine/ledger/holdings.d.ts +194 -0
  382. package/dist/core/engine/ledger/holdings.d.ts.map +1 -0
  383. package/dist/core/engine/ledger/holdings.js +237 -0
  384. package/dist/core/engine/ledger/holdings.js.map +1 -0
  385. package/dist/core/engine/ledger/index.d.ts +19 -0
  386. package/dist/core/engine/ledger/index.d.ts.map +1 -0
  387. package/dist/core/engine/ledger/index.js +2 -0
  388. package/dist/core/engine/ledger/index.js.map +1 -0
  389. package/dist/core/engine/ledger/intent.d.ts +106 -0
  390. package/dist/core/engine/ledger/intent.d.ts.map +1 -0
  391. package/dist/core/engine/ledger/intent.js +21 -0
  392. package/dist/core/engine/ledger/intent.js.map +1 -0
  393. package/dist/core/engine/ledger/ledger.d.ts +143 -0
  394. package/dist/core/engine/ledger/ledger.d.ts.map +1 -0
  395. package/dist/core/engine/ledger/ledger.js +237 -0
  396. package/dist/core/engine/ledger/ledger.js.map +1 -0
  397. package/dist/core/engine/ledger/place.d.ts +75 -0
  398. package/dist/core/engine/ledger/place.d.ts.map +1 -0
  399. package/dist/core/engine/ledger/place.js +174 -0
  400. package/dist/core/engine/ledger/place.js.map +1 -0
  401. package/dist/core/engine/ledger/positions.d.ts +68 -0
  402. package/dist/core/engine/ledger/positions.d.ts.map +1 -0
  403. package/dist/core/engine/ledger/positions.js +114 -0
  404. package/dist/core/engine/ledger/positions.js.map +1 -0
  405. package/dist/core/engine/ledger/refuse.d.ts +43 -0
  406. package/dist/core/engine/ledger/refuse.d.ts.map +1 -0
  407. package/dist/core/engine/ledger/refuse.js +329 -0
  408. package/dist/core/engine/ledger/refuse.js.map +1 -0
  409. package/dist/core/engine/ledger/row.d.ts +176 -0
  410. package/dist/core/engine/ledger/row.d.ts.map +1 -0
  411. package/dist/core/engine/ledger/row.js +169 -0
  412. package/dist/core/engine/ledger/row.js.map +1 -0
  413. package/dist/core/engine/ledger/sizing.d.ts +142 -0
  414. package/dist/core/engine/ledger/sizing.d.ts.map +1 -0
  415. package/dist/core/engine/ledger/sizing.js +223 -0
  416. package/dist/core/engine/ledger/sizing.js.map +1 -0
  417. package/dist/core/engine/library/arrays.d.ts +14 -0
  418. package/dist/core/engine/library/arrays.d.ts.map +1 -0
  419. package/dist/core/engine/library/arrays.js +285 -0
  420. package/dist/core/engine/library/arrays.js.map +1 -0
  421. package/dist/core/engine/library/averages.d.ts +9 -0
  422. package/dist/core/engine/library/averages.d.ts.map +1 -0
  423. package/dist/core/engine/library/averages.js +41 -0
  424. package/dist/core/engine/library/averages.js.map +1 -0
  425. package/dist/core/engine/library/binding.d.ts +230 -0
  426. package/dist/core/engine/library/binding.d.ts.map +1 -0
  427. package/dist/core/engine/library/binding.js +109 -0
  428. package/dist/core/engine/library/binding.js.map +1 -0
  429. package/dist/core/engine/library/chart.d.ts +3 -0
  430. package/dist/core/engine/library/chart.d.ts.map +1 -0
  431. package/dist/core/engine/library/chart.js +83 -0
  432. package/dist/core/engine/library/chart.js.map +1 -0
  433. package/dist/core/engine/library/colours.d.ts +26 -0
  434. package/dist/core/engine/library/colours.d.ts.map +1 -0
  435. package/dist/core/engine/library/colours.js +81 -0
  436. package/dist/core/engine/library/colours.js.map +1 -0
  437. package/dist/core/engine/library/dates.d.ts +3 -0
  438. package/dist/core/engine/library/dates.d.ts.map +1 -0
  439. package/dist/core/engine/library/dates.js +75 -0
  440. package/dist/core/engine/library/dates.js.map +1 -0
  441. package/dist/core/engine/library/index.d.ts +13 -0
  442. package/dist/core/engine/library/index.d.ts.map +1 -0
  443. package/dist/core/engine/library/index.js +86 -0
  444. package/dist/core/engine/library/index.js.map +1 -0
  445. package/dist/core/engine/library/maths.d.ts +3 -0
  446. package/dist/core/engine/library/maths.d.ts.map +1 -0
  447. package/dist/core/engine/library/maths.js +89 -0
  448. package/dist/core/engine/library/maths.js.map +1 -0
  449. package/dist/core/engine/library/objects.d.ts +3 -0
  450. package/dist/core/engine/library/objects.d.ts.map +1 -0
  451. package/dist/core/engine/library/objects.js +199 -0
  452. package/dist/core/engine/library/objects.js.map +1 -0
  453. package/dist/core/engine/library/oscillators.d.ts +3 -0
  454. package/dist/core/engine/library/oscillators.d.ts.map +1 -0
  455. package/dist/core/engine/library/oscillators.js +29 -0
  456. package/dist/core/engine/library/oscillators.js.map +1 -0
  457. package/dist/core/engine/library/ranges.d.ts +3 -0
  458. package/dist/core/engine/library/ranges.d.ts.map +1 -0
  459. package/dist/core/engine/library/ranges.js +23 -0
  460. package/dist/core/engine/library/ranges.js.map +1 -0
  461. package/dist/core/engine/library/series.d.ts +3 -0
  462. package/dist/core/engine/library/series.d.ts.map +1 -0
  463. package/dist/core/engine/library/series.js +46 -0
  464. package/dist/core/engine/library/series.js.map +1 -0
  465. package/dist/core/engine/library/state.d.ts +35 -0
  466. package/dist/core/engine/library/state.d.ts.map +1 -0
  467. package/dist/core/engine/library/state.js +19 -0
  468. package/dist/core/engine/library/state.js.map +1 -0
  469. package/dist/core/engine/library/studies.d.ts +3 -0
  470. package/dist/core/engine/library/studies.d.ts.map +1 -0
  471. package/dist/core/engine/library/studies.js +35 -0
  472. package/dist/core/engine/library/studies.js.map +1 -0
  473. package/dist/core/engine/library/text.d.ts +6 -0
  474. package/dist/core/engine/library/text.d.ts.map +1 -0
  475. package/dist/core/engine/library/text.js +280 -0
  476. package/dist/core/engine/library/text.js.map +1 -0
  477. package/dist/core/engine/library/trend.d.ts +3 -0
  478. package/dist/core/engine/library/trend.d.ts.map +1 -0
  479. package/dist/core/engine/library/trend.js +29 -0
  480. package/dist/core/engine/library/trend.js.map +1 -0
  481. package/dist/core/engine/library/volume.d.ts +3 -0
  482. package/dist/core/engine/library/volume.d.ts.map +1 -0
  483. package/dist/core/engine/library/volume.js +51 -0
  484. package/dist/core/engine/library/volume.js.map +1 -0
  485. package/dist/core/engine/load.d.ts +45 -0
  486. package/dist/core/engine/load.d.ts.map +1 -0
  487. package/dist/core/engine/load.js +60 -0
  488. package/dist/core/engine/load.js.map +1 -0
  489. package/dist/core/engine/machine.d.ts +107 -0
  490. package/dist/core/engine/machine.d.ts.map +1 -0
  491. package/dist/core/engine/machine.js +337 -0
  492. package/dist/core/engine/machine.js.map +1 -0
  493. package/dist/core/engine/memory.d.ts +60 -0
  494. package/dist/core/engine/memory.d.ts.map +1 -0
  495. package/dist/core/engine/memory.js +92 -0
  496. package/dist/core/engine/memory.js.map +1 -0
  497. package/dist/core/engine/operations.d.ts +62 -0
  498. package/dist/core/engine/operations.d.ts.map +1 -0
  499. package/dist/core/engine/operations.js +149 -0
  500. package/dist/core/engine/operations.js.map +1 -0
  501. package/dist/core/engine/orders.d.ts +56 -0
  502. package/dist/core/engine/orders.d.ts.map +1 -0
  503. package/dist/core/engine/orders.js +83 -0
  504. package/dist/core/engine/orders.js.map +1 -0
  505. package/dist/core/engine/registers.d.ts +50 -0
  506. package/dist/core/engine/registers.d.ts.map +1 -0
  507. package/dist/core/engine/registers.js +85 -0
  508. package/dist/core/engine/registers.js.map +1 -0
  509. package/dist/core/engine/request-body.d.ts +138 -0
  510. package/dist/core/engine/request-body.d.ts.map +1 -0
  511. package/dist/core/engine/request-body.js +227 -0
  512. package/dist/core/engine/request-body.js.map +1 -0
  513. package/dist/core/engine/request-plan.d.ts +79 -0
  514. package/dist/core/engine/request-plan.d.ts.map +1 -0
  515. package/dist/core/engine/request-plan.js +228 -0
  516. package/dist/core/engine/request-plan.js.map +1 -0
  517. package/dist/core/engine/requests.d.ts +105 -0
  518. package/dist/core/engine/requests.d.ts.map +1 -0
  519. package/dist/core/engine/requests.js +260 -0
  520. package/dist/core/engine/requests.js.map +1 -0
  521. package/dist/core/engine/results.d.ts +40 -0
  522. package/dist/core/engine/results.d.ts.map +1 -0
  523. package/dist/core/engine/results.js +2 -0
  524. package/dist/core/engine/results.js.map +1 -0
  525. package/dist/core/engine/series.d.ts +61 -0
  526. package/dist/core/engine/series.d.ts.map +1 -0
  527. package/dist/core/engine/series.js +41 -0
  528. package/dist/core/engine/series.js.map +1 -0
  529. package/dist/core/engine/session/hours.d.ts +49 -0
  530. package/dist/core/engine/session/hours.d.ts.map +1 -0
  531. package/dist/core/engine/session/hours.js +31 -0
  532. package/dist/core/engine/session/hours.js.map +1 -0
  533. package/dist/core/engine/session/index.d.ts +17 -0
  534. package/dist/core/engine/session/index.d.ts.map +1 -0
  535. package/dist/core/engine/session/index.js +3 -0
  536. package/dist/core/engine/session/index.js.map +1 -0
  537. package/dist/core/engine/session/record.d.ts +56 -0
  538. package/dist/core/engine/session/record.d.ts.map +1 -0
  539. package/dist/core/engine/session/record.js +165 -0
  540. package/dist/core/engine/session/record.js.map +1 -0
  541. package/dist/core/engine/session/spec.d.ts +19 -0
  542. package/dist/core/engine/session/spec.d.ts.map +1 -0
  543. package/dist/core/engine/session/spec.js +31 -0
  544. package/dist/core/engine/session/spec.js.map +1 -0
  545. package/dist/core/engine/timeframe.d.ts +59 -0
  546. package/dist/core/engine/timeframe.d.ts.map +1 -0
  547. package/dist/core/engine/timeframe.js +140 -0
  548. package/dist/core/engine/timeframe.js.map +1 -0
  549. package/dist/core/engine/types.d.ts +15 -0
  550. package/dist/core/engine/types.d.ts.map +1 -0
  551. package/dist/core/engine/types.js +2 -0
  552. package/dist/core/engine/types.js.map +1 -0
  553. package/dist/core/engine/values/heap.d.ts +134 -0
  554. package/dist/core/engine/values/heap.d.ts.map +1 -0
  555. package/dist/core/engine/values/heap.js +230 -0
  556. package/dist/core/engine/values/heap.js.map +1 -0
  557. package/dist/core/engine/values/index.d.ts +13 -0
  558. package/dist/core/engine/values/index.d.ts.map +1 -0
  559. package/dist/core/engine/values/index.js +3 -0
  560. package/dist/core/engine/values/index.js.map +1 -0
  561. package/dist/core/engine/values/value.d.ts +82 -0
  562. package/dist/core/engine/values/value.d.ts.map +1 -0
  563. package/dist/core/engine/values/value.js +134 -0
  564. package/dist/core/engine/values/value.js.map +1 -0
  565. package/dist/core/engine/verify-budgets.d.ts +35 -0
  566. package/dist/core/engine/verify-budgets.d.ts.map +1 -0
  567. package/dist/core/engine/verify-budgets.js +172 -0
  568. package/dist/core/engine/verify-budgets.js.map +1 -0
  569. package/dist/core/engine/verify-code.d.ts +32 -0
  570. package/dist/core/engine/verify-code.d.ts.map +1 -0
  571. package/dist/core/engine/verify-code.js +278 -0
  572. package/dist/core/engine/verify-code.js.map +1 -0
  573. package/dist/core/engine/verify-requests.d.ts +44 -0
  574. package/dist/core/engine/verify-requests.d.ts.map +1 -0
  575. package/dist/core/engine/verify-requests.js +220 -0
  576. package/dist/core/engine/verify-requests.js.map +1 -0
  577. package/dist/core/engine/verify-shape.d.ts +46 -0
  578. package/dist/core/engine/verify-shape.d.ts.map +1 -0
  579. package/dist/core/engine/verify-shape.js +147 -0
  580. package/dist/core/engine/verify-shape.js.map +1 -0
  581. package/dist/core/engine/verify-tables.d.ts +19 -0
  582. package/dist/core/engine/verify-tables.d.ts.map +1 -0
  583. package/dist/core/engine/verify-tables.js +171 -0
  584. package/dist/core/engine/verify-tables.js.map +1 -0
  585. package/dist/core/engine/verify.d.ts +19 -0
  586. package/dist/core/engine/verify.d.ts.map +1 -0
  587. package/dist/core/engine/verify.js +309 -0
  588. package/dist/core/engine/verify.js.map +1 -0
  589. package/dist/core/index.d.ts +61 -6
  590. package/dist/core/index.d.ts.map +1 -1
  591. package/dist/core/index.js +48 -6
  592. package/dist/core/index.js.map +1 -1
  593. package/dist/core/parse/expressions.js +1 -1
  594. package/dist/core/parse/expressions.js.map +1 -1
  595. package/dist/core/parse/names.d.ts +7 -1
  596. package/dist/core/parse/names.d.ts.map +1 -1
  597. package/dist/core/parse/names.js +28 -2
  598. package/dist/core/parse/names.js.map +1 -1
  599. package/dist/core/stdlib/averages/exponential.d.ts +51 -0
  600. package/dist/core/stdlib/averages/exponential.d.ts.map +1 -0
  601. package/dist/core/stdlib/averages/exponential.js +72 -0
  602. package/dist/core/stdlib/averages/exponential.js.map +1 -0
  603. package/dist/core/stdlib/averages/index.d.ts +7 -0
  604. package/dist/core/stdlib/averages/index.d.ts.map +1 -0
  605. package/dist/core/stdlib/averages/index.js +5 -0
  606. package/dist/core/stdlib/averages/index.js.map +1 -0
  607. package/dist/core/stdlib/averages/select.d.ts +35 -0
  608. package/dist/core/stdlib/averages/select.d.ts.map +1 -0
  609. package/dist/core/stdlib/averages/select.js +43 -0
  610. package/dist/core/stdlib/averages/select.js.map +1 -0
  611. package/dist/core/stdlib/averages/shaped.d.ts +61 -0
  612. package/dist/core/stdlib/averages/shaped.d.ts.map +1 -0
  613. package/dist/core/stdlib/averages/shaped.js +126 -0
  614. package/dist/core/stdlib/averages/shaped.js.map +1 -0
  615. package/dist/core/stdlib/averages/simple.d.ts +58 -0
  616. package/dist/core/stdlib/averages/simple.d.ts.map +1 -0
  617. package/dist/core/stdlib/averages/simple.js +92 -0
  618. package/dist/core/stdlib/averages/simple.js.map +1 -0
  619. package/dist/core/stdlib/calendar/civil.d.ts +56 -0
  620. package/dist/core/stdlib/calendar/civil.d.ts.map +1 -0
  621. package/dist/core/stdlib/calendar/civil.js +70 -0
  622. package/dist/core/stdlib/calendar/civil.js.map +1 -0
  623. package/dist/core/stdlib/calendar/fields.d.ts +36 -0
  624. package/dist/core/stdlib/calendar/fields.d.ts.map +1 -0
  625. package/dist/core/stdlib/calendar/fields.js +93 -0
  626. package/dist/core/stdlib/calendar/fields.js.map +1 -0
  627. package/dist/core/stdlib/calendar/format.d.ts +19 -0
  628. package/dist/core/stdlib/calendar/format.d.ts.map +1 -0
  629. package/dist/core/stdlib/calendar/format.js +51 -0
  630. package/dist/core/stdlib/calendar/format.js.map +1 -0
  631. package/dist/core/stdlib/calendar/index.d.ts +7 -0
  632. package/dist/core/stdlib/calendar/index.d.ts.map +1 -0
  633. package/dist/core/stdlib/calendar/index.js +5 -0
  634. package/dist/core/stdlib/calendar/index.js.map +1 -0
  635. package/dist/core/stdlib/calendar/zone.d.ts +53 -0
  636. package/dist/core/stdlib/calendar/zone.d.ts.map +1 -0
  637. package/dist/core/stdlib/calendar/zone.js +138 -0
  638. package/dist/core/stdlib/calendar/zone.js.map +1 -0
  639. package/dist/core/stdlib/index.d.ts +57 -0
  640. package/dist/core/stdlib/index.d.ts.map +1 -0
  641. package/dist/core/stdlib/index.js +51 -0
  642. package/dist/core/stdlib/index.js.map +1 -0
  643. package/dist/core/stdlib/maths/arithmetic.d.ts +38 -0
  644. package/dist/core/stdlib/maths/arithmetic.d.ts.map +1 -0
  645. package/dist/core/stdlib/maths/arithmetic.js +66 -0
  646. package/dist/core/stdlib/maths/arithmetic.js.map +1 -0
  647. package/dist/core/stdlib/maths/elementary.d.ts +65 -0
  648. package/dist/core/stdlib/maths/elementary.d.ts.map +1 -0
  649. package/dist/core/stdlib/maths/elementary.js +93 -0
  650. package/dist/core/stdlib/maths/elementary.js.map +1 -0
  651. package/dist/core/stdlib/maths/index.d.ts +4 -0
  652. package/dist/core/stdlib/maths/index.d.ts.map +1 -0
  653. package/dist/core/stdlib/maths/index.js +4 -0
  654. package/dist/core/stdlib/maths/index.js.map +1 -0
  655. package/dist/core/stdlib/maths/rounding.d.ts +43 -0
  656. package/dist/core/stdlib/maths/rounding.d.ts.map +1 -0
  657. package/dist/core/stdlib/maths/rounding.js +62 -0
  658. package/dist/core/stdlib/maths/rounding.js.map +1 -0
  659. package/dist/core/stdlib/momentum/convergence.d.ts +36 -0
  660. package/dist/core/stdlib/momentum/convergence.d.ts.map +1 -0
  661. package/dist/core/stdlib/momentum/convergence.js +48 -0
  662. package/dist/core/stdlib/momentum/convergence.js.map +1 -0
  663. package/dist/core/stdlib/momentum/index.d.ts +6 -0
  664. package/dist/core/stdlib/momentum/index.d.ts.map +1 -0
  665. package/dist/core/stdlib/momentum/index.js +6 -0
  666. package/dist/core/stdlib/momentum/index.js.map +1 -0
  667. package/dist/core/stdlib/momentum/pressure.d.ts +43 -0
  668. package/dist/core/stdlib/momentum/pressure.d.ts.map +1 -0
  669. package/dist/core/stdlib/momentum/pressure.js +103 -0
  670. package/dist/core/stdlib/momentum/pressure.js.map +1 -0
  671. package/dist/core/stdlib/momentum/rates.d.ts +74 -0
  672. package/dist/core/stdlib/momentum/rates.d.ts.map +1 -0
  673. package/dist/core/stdlib/momentum/rates.js +134 -0
  674. package/dist/core/stdlib/momentum/rates.js.map +1 -0
  675. package/dist/core/stdlib/momentum/rsi.d.ts +21 -0
  676. package/dist/core/stdlib/momentum/rsi.d.ts.map +1 -0
  677. package/dist/core/stdlib/momentum/rsi.js +30 -0
  678. package/dist/core/stdlib/momentum/rsi.js.map +1 -0
  679. package/dist/core/stdlib/momentum/stochastic.d.ts +44 -0
  680. package/dist/core/stdlib/momentum/stochastic.d.ts.map +1 -0
  681. package/dist/core/stdlib/momentum/stochastic.js +97 -0
  682. package/dist/core/stdlib/momentum/stochastic.js.map +1 -0
  683. package/dist/core/stdlib/series/changes.d.ts +59 -0
  684. package/dist/core/stdlib/series/changes.d.ts.map +1 -0
  685. package/dist/core/stdlib/series/changes.js +129 -0
  686. package/dist/core/stdlib/series/changes.js.map +1 -0
  687. package/dist/core/stdlib/series/conditions.d.ts +34 -0
  688. package/dist/core/stdlib/series/conditions.d.ts.map +1 -0
  689. package/dist/core/stdlib/series/conditions.js +52 -0
  690. package/dist/core/stdlib/series/conditions.js.map +1 -0
  691. package/dist/core/stdlib/series/extremes.d.ts +29 -0
  692. package/dist/core/stdlib/series/extremes.d.ts.map +1 -0
  693. package/dist/core/stdlib/series/extremes.js +62 -0
  694. package/dist/core/stdlib/series/extremes.js.map +1 -0
  695. package/dist/core/stdlib/series/index.d.ts +9 -0
  696. package/dist/core/stdlib/series/index.d.ts.map +1 -0
  697. package/dist/core/stdlib/series/index.js +7 -0
  698. package/dist/core/stdlib/series/index.js.map +1 -0
  699. package/dist/core/stdlib/series/pivots.d.ts +25 -0
  700. package/dist/core/stdlib/series/pivots.d.ts.map +1 -0
  701. package/dist/core/stdlib/series/pivots.js +42 -0
  702. package/dist/core/stdlib/series/pivots.js.map +1 -0
  703. package/dist/core/stdlib/series/statistics.d.ts +64 -0
  704. package/dist/core/stdlib/series/statistics.d.ts.map +1 -0
  705. package/dist/core/stdlib/series/statistics.js +148 -0
  706. package/dist/core/stdlib/series/statistics.js.map +1 -0
  707. package/dist/core/stdlib/series/totals.d.ts +68 -0
  708. package/dist/core/stdlib/series/totals.d.ts.map +1 -0
  709. package/dist/core/stdlib/series/totals.js +115 -0
  710. package/dist/core/stdlib/series/totals.js.map +1 -0
  711. package/dist/core/stdlib/trend/directional.d.ts +69 -0
  712. package/dist/core/stdlib/trend/directional.d.ts.map +1 -0
  713. package/dist/core/stdlib/trend/directional.js +151 -0
  714. package/dist/core/stdlib/trend/directional.js.map +1 -0
  715. package/dist/core/stdlib/trend/index.d.ts +4 -0
  716. package/dist/core/stdlib/trend/index.d.ts.map +1 -0
  717. package/dist/core/stdlib/trend/index.js +4 -0
  718. package/dist/core/stdlib/trend/index.js.map +1 -0
  719. package/dist/core/stdlib/trend/psar.d.ts +33 -0
  720. package/dist/core/stdlib/trend/psar.d.ts.map +1 -0
  721. package/dist/core/stdlib/trend/psar.js +86 -0
  722. package/dist/core/stdlib/trend/psar.js.map +1 -0
  723. package/dist/core/stdlib/trend/supertrend.d.ts +30 -0
  724. package/dist/core/stdlib/trend/supertrend.d.ts.map +1 -0
  725. package/dist/core/stdlib/trend/supertrend.js +65 -0
  726. package/dist/core/stdlib/trend/supertrend.js.map +1 -0
  727. package/dist/core/stdlib/values/bar.d.ts +39 -0
  728. package/dist/core/stdlib/values/bar.d.ts.map +1 -0
  729. package/dist/core/stdlib/values/bar.js +33 -0
  730. package/dist/core/stdlib/values/bar.js.map +1 -0
  731. package/dist/core/stdlib/values/index.d.ts +11 -0
  732. package/dist/core/stdlib/values/index.d.ts.map +1 -0
  733. package/dist/core/stdlib/values/index.js +6 -0
  734. package/dist/core/stdlib/values/index.js.map +1 -0
  735. package/dist/core/stdlib/values/lookback.d.ts +83 -0
  736. package/dist/core/stdlib/values/lookback.d.ts.map +1 -0
  737. package/dist/core/stdlib/values/lookback.js +134 -0
  738. package/dist/core/stdlib/values/lookback.js.map +1 -0
  739. package/dist/core/stdlib/values/region.d.ts +55 -0
  740. package/dist/core/stdlib/values/region.d.ts.map +1 -0
  741. package/dist/core/stdlib/values/region.js +73 -0
  742. package/dist/core/stdlib/values/region.js.map +1 -0
  743. package/dist/core/stdlib/values/tail.d.ts +44 -0
  744. package/dist/core/stdlib/values/tail.d.ts.map +1 -0
  745. package/dist/core/stdlib/values/tail.js +23 -0
  746. package/dist/core/stdlib/values/tail.js.map +1 -0
  747. package/dist/core/stdlib/values/value.d.ts +64 -0
  748. package/dist/core/stdlib/values/value.d.ts.map +1 -0
  749. package/dist/core/stdlib/values/value.js +61 -0
  750. package/dist/core/stdlib/values/value.js.map +1 -0
  751. package/dist/core/stdlib/volatility/bands.d.ts +50 -0
  752. package/dist/core/stdlib/volatility/bands.d.ts.map +1 -0
  753. package/dist/core/stdlib/volatility/bands.js +101 -0
  754. package/dist/core/stdlib/volatility/bands.js.map +1 -0
  755. package/dist/core/stdlib/volatility/deviation.d.ts +43 -0
  756. package/dist/core/stdlib/volatility/deviation.d.ts.map +1 -0
  757. package/dist/core/stdlib/volatility/deviation.js +75 -0
  758. package/dist/core/stdlib/volatility/deviation.js.map +1 -0
  759. package/dist/core/stdlib/volatility/index.d.ts +6 -0
  760. package/dist/core/stdlib/volatility/index.d.ts.map +1 -0
  761. package/dist/core/stdlib/volatility/index.js +5 -0
  762. package/dist/core/stdlib/volatility/index.js.map +1 -0
  763. package/dist/core/stdlib/volatility/measures.d.ts +48 -0
  764. package/dist/core/stdlib/volatility/measures.d.ts.map +1 -0
  765. package/dist/core/stdlib/volatility/measures.js +73 -0
  766. package/dist/core/stdlib/volatility/measures.js.map +1 -0
  767. package/dist/core/stdlib/volatility/range.d.ts +69 -0
  768. package/dist/core/stdlib/volatility/range.d.ts.map +1 -0
  769. package/dist/core/stdlib/volatility/range.js +86 -0
  770. package/dist/core/stdlib/volatility/range.js.map +1 -0
  771. package/dist/core/stdlib/volume/accumulation.d.ts +61 -0
  772. package/dist/core/stdlib/volume/accumulation.d.ts.map +1 -0
  773. package/dist/core/stdlib/volume/accumulation.js +127 -0
  774. package/dist/core/stdlib/volume/accumulation.js.map +1 -0
  775. package/dist/core/stdlib/volume/flow.d.ts +60 -0
  776. package/dist/core/stdlib/volume/flow.d.ts.map +1 -0
  777. package/dist/core/stdlib/volume/flow.js +125 -0
  778. package/dist/core/stdlib/volume/flow.js.map +1 -0
  779. package/dist/core/stdlib/volume/index.d.ts +5 -0
  780. package/dist/core/stdlib/volume/index.d.ts.map +1 -0
  781. package/dist/core/stdlib/volume/index.js +4 -0
  782. package/dist/core/stdlib/volume/index.js.map +1 -0
  783. package/dist/core/stdlib/volume/weighted.d.ts +52 -0
  784. package/dist/core/stdlib/volume/weighted.d.ts.map +1 -0
  785. package/dist/core/stdlib/volume/weighted.js +64 -0
  786. package/dist/core/stdlib/volume/weighted.js.map +1 -0
  787. package/dist/core/version/version.generated.d.ts +2 -2
  788. package/dist/core/version/version.generated.d.ts.map +1 -1
  789. package/dist/core/version/version.generated.js +2 -2
  790. package/dist/core/version/version.generated.js.map +1 -1
  791. package/package.json +38 -14
  792. package/spec/errors.json +382 -183
  793. package/src/adapters/charts/alerts.ts +116 -0
  794. package/src/adapters/charts/bars.ts +63 -0
  795. package/src/adapters/charts/candles.ts +137 -0
  796. package/src/adapters/charts/colours.ts +113 -0
  797. package/src/adapters/charts/columns.ts +99 -0
  798. package/src/adapters/charts/contract.ts +320 -0
  799. package/src/adapters/charts/descriptor.ts +199 -0
  800. package/src/adapters/charts/drawings.ts +213 -0
  801. package/src/adapters/charts/errors.ts +45 -0
  802. package/src/adapters/charts/fields.ts +74 -0
  803. package/src/adapters/charts/fills.ts +71 -0
  804. package/src/adapters/charts/index.ts +78 -0
  805. package/src/adapters/charts/levels.ts +92 -0
  806. package/src/adapters/charts/markers.ts +119 -0
  807. package/src/adapters/charts/paint.ts +101 -0
  808. package/src/adapters/charts/plots.ts +185 -0
  809. package/src/adapters/charts/produced.ts +68 -0
  810. package/src/adapters/charts/requests.ts +357 -0
  811. package/src/adapters/charts/run.ts +327 -0
  812. package/src/adapters/charts/settings.ts +273 -0
  813. package/src/adapters/charts/surfaces.ts +238 -0
  814. package/src/adapters/charts/tables.ts +155 -0
  815. package/src/core/catalogue/catalogue.generated.ts +17 -9
  816. package/src/core/catalogue/values.generated.ts +8 -0
  817. package/src/core/check/arguments.ts +126 -0
  818. package/src/core/check/call-sites.ts +385 -0
  819. package/src/core/check/call-warmup.ts +121 -0
  820. package/src/core/check/calls.ts +412 -0
  821. package/src/core/check/check.ts +183 -0
  822. package/src/core/check/checked.ts +228 -0
  823. package/src/core/check/checker.ts +393 -0
  824. package/src/core/check/conditional.ts +143 -0
  825. package/src/core/check/constant.ts +127 -0
  826. package/src/core/check/declaration.ts +230 -0
  827. package/src/core/check/expressions.ts +471 -0
  828. package/src/core/check/functions.ts +283 -0
  829. package/src/core/check/handles.ts +75 -0
  830. package/src/core/check/index.ts +67 -0
  831. package/src/core/check/library-bars.ts +194 -0
  832. package/src/core/check/library-orders.ts +290 -0
  833. package/src/core/check/library-output.ts +241 -0
  834. package/src/core/check/library-series.ts +457 -0
  835. package/src/core/check/library.ts +374 -0
  836. package/src/core/check/literals.ts +35 -0
  837. package/src/core/check/outputs.ts +152 -0
  838. package/src/core/check/statements.ts +465 -0
  839. package/src/core/check/suggest.ts +63 -0
  840. package/src/core/check/surface.ts +115 -0
  841. package/src/core/check/tags.ts +94 -0
  842. package/src/core/check/types.ts +260 -0
  843. package/src/core/check/warmup.ts +100 -0
  844. package/src/core/diagnostics/collector.ts +27 -1
  845. package/src/core/emit/calls.ts +415 -0
  846. package/src/core/emit/canonical.ts +81 -0
  847. package/src/core/emit/channels.ts +144 -0
  848. package/src/core/emit/code.ts +155 -0
  849. package/src/core/emit/colours.ts +75 -0
  850. package/src/core/emit/context.ts +461 -0
  851. package/src/core/emit/defaults.ts +150 -0
  852. package/src/core/emit/emit.ts +313 -0
  853. package/src/core/emit/events.ts +141 -0
  854. package/src/core/emit/expressions.ts +292 -0
  855. package/src/core/emit/functions.ts +195 -0
  856. package/src/core/emit/gaps.ts +44 -0
  857. package/src/core/emit/index.ts +74 -0
  858. package/src/core/emit/inputs.ts +179 -0
  859. package/src/core/emit/layout.ts +165 -0
  860. package/src/core/emit/meta.ts +104 -0
  861. package/src/core/emit/opcodes.ts +160 -0
  862. package/src/core/emit/outputs.ts +357 -0
  863. package/src/core/emit/pool.ts +102 -0
  864. package/src/core/emit/program.ts +385 -0
  865. package/src/core/emit/registers.ts +179 -0
  866. package/src/core/emit/request-scope.ts +52 -0
  867. package/src/core/emit/requests.ts +258 -0
  868. package/src/core/emit/requires.ts +91 -0
  869. package/src/core/emit/sha256.ts +119 -0
  870. package/src/core/emit/statements.ts +438 -0
  871. package/src/core/emit/values.ts +284 -0
  872. package/src/core/engine/alerts.ts +152 -0
  873. package/src/core/engine/arithmetic.ts +165 -0
  874. package/src/core/engine/bars.ts +224 -0
  875. package/src/core/engine/budget.ts +284 -0
  876. package/src/core/engine/channels.ts +171 -0
  877. package/src/core/engine/drawings.ts +127 -0
  878. package/src/core/engine/engine.ts +498 -0
  879. package/src/core/engine/errors.ts +100 -0
  880. package/src/core/engine/frames.ts +85 -0
  881. package/src/core/engine/grids.ts +98 -0
  882. package/src/core/engine/guard.ts +71 -0
  883. package/src/core/engine/host.ts +251 -0
  884. package/src/core/engine/index.ts +93 -0
  885. package/src/core/engine/inputs.ts +263 -0
  886. package/src/core/engine/ledger/call.ts +218 -0
  887. package/src/core/engine/ledger/closable.ts +269 -0
  888. package/src/core/engine/ledger/holdings.ts +354 -0
  889. package/src/core/engine/ledger/index.ts +28 -0
  890. package/src/core/engine/ledger/intent.ts +112 -0
  891. package/src/core/engine/ledger/ledger.ts +314 -0
  892. package/src/core/engine/ledger/place.ts +277 -0
  893. package/src/core/engine/ledger/positions.ts +123 -0
  894. package/src/core/engine/ledger/refuse.ts +378 -0
  895. package/src/core/engine/ledger/row.ts +318 -0
  896. package/src/core/engine/ledger/sizing.ts +292 -0
  897. package/src/core/engine/library/arrays.ts +316 -0
  898. package/src/core/engine/library/averages.ts +97 -0
  899. package/src/core/engine/library/binding.ts +325 -0
  900. package/src/core/engine/library/chart.ts +115 -0
  901. package/src/core/engine/library/colours.ts +111 -0
  902. package/src/core/engine/library/dates.ts +109 -0
  903. package/src/core/engine/library/index.ts +103 -0
  904. package/src/core/engine/library/maths.ts +134 -0
  905. package/src/core/engine/library/objects.ts +265 -0
  906. package/src/core/engine/library/oscillators.ts +124 -0
  907. package/src/core/engine/library/ranges.ts +51 -0
  908. package/src/core/engine/library/series.ts +236 -0
  909. package/src/core/engine/library/state.ts +47 -0
  910. package/src/core/engine/library/studies.ts +150 -0
  911. package/src/core/engine/library/text.ts +303 -0
  912. package/src/core/engine/library/trend.ts +79 -0
  913. package/src/core/engine/library/volume.ts +101 -0
  914. package/src/core/engine/load.ts +104 -0
  915. package/src/core/engine/machine.ts +446 -0
  916. package/src/core/engine/memory.ts +129 -0
  917. package/src/core/engine/operations.ts +171 -0
  918. package/src/core/engine/orders.ts +121 -0
  919. package/src/core/engine/registers.ts +104 -0
  920. package/src/core/engine/request-body.ts +328 -0
  921. package/src/core/engine/request-plan.ts +270 -0
  922. package/src/core/engine/requests.ts +382 -0
  923. package/src/core/engine/results.ts +41 -0
  924. package/src/core/engine/series.ts +82 -0
  925. package/src/core/engine/session/hours.ts +86 -0
  926. package/src/core/engine/session/index.ts +17 -0
  927. package/src/core/engine/session/record.ts +191 -0
  928. package/src/core/engine/session/spec.ts +45 -0
  929. package/src/core/engine/timeframe.ts +161 -0
  930. package/src/core/engine/types.ts +47 -0
  931. package/src/core/engine/values/heap.ts +295 -0
  932. package/src/core/engine/values/index.ts +34 -0
  933. package/src/core/engine/values/value.ts +158 -0
  934. package/src/core/engine/verify-budgets.ts +202 -0
  935. package/src/core/engine/verify-code.ts +332 -0
  936. package/src/core/engine/verify-requests.ts +255 -0
  937. package/src/core/engine/verify-shape.ts +164 -0
  938. package/src/core/engine/verify-tables.ts +176 -0
  939. package/src/core/engine/verify.ts +341 -0
  940. package/src/core/index.ts +128 -6
  941. package/src/core/parse/expressions.ts +1 -1
  942. package/src/core/parse/names.ts +29 -2
  943. package/src/core/stdlib/averages/exponential.ts +119 -0
  944. package/src/core/stdlib/averages/index.ts +45 -0
  945. package/src/core/stdlib/averages/select.ts +71 -0
  946. package/src/core/stdlib/averages/shaped.ts +161 -0
  947. package/src/core/stdlib/averages/simple.ts +139 -0
  948. package/src/core/stdlib/calendar/civil.ts +89 -0
  949. package/src/core/stdlib/calendar/fields.ts +124 -0
  950. package/src/core/stdlib/calendar/format.ts +71 -0
  951. package/src/core/stdlib/calendar/index.ts +15 -0
  952. package/src/core/stdlib/calendar/zone.ts +161 -0
  953. package/src/core/stdlib/index.ts +400 -0
  954. package/src/core/stdlib/maths/arithmetic.ts +74 -0
  955. package/src/core/stdlib/maths/elementary.ts +124 -0
  956. package/src/core/stdlib/maths/index.ts +43 -0
  957. package/src/core/stdlib/maths/rounding.ts +78 -0
  958. package/src/core/stdlib/momentum/convergence.ts +82 -0
  959. package/src/core/stdlib/momentum/index.ts +47 -0
  960. package/src/core/stdlib/momentum/pressure.ts +141 -0
  961. package/src/core/stdlib/momentum/rates.ts +188 -0
  962. package/src/core/stdlib/momentum/rsi.ts +49 -0
  963. package/src/core/stdlib/momentum/stochastic.ts +147 -0
  964. package/src/core/stdlib/series/changes.ts +177 -0
  965. package/src/core/stdlib/series/conditions.ts +74 -0
  966. package/src/core/stdlib/series/extremes.ts +92 -0
  967. package/src/core/stdlib/series/index.ts +83 -0
  968. package/src/core/stdlib/series/pivots.ts +63 -0
  969. package/src/core/stdlib/series/statistics.ts +207 -0
  970. package/src/core/stdlib/series/totals.ts +164 -0
  971. package/src/core/stdlib/trend/directional.ts +196 -0
  972. package/src/core/stdlib/trend/index.ts +13 -0
  973. package/src/core/stdlib/trend/psar.ts +131 -0
  974. package/src/core/stdlib/trend/supertrend.ts +100 -0
  975. package/src/core/stdlib/values/bar.ts +54 -0
  976. package/src/core/stdlib/values/index.ts +14 -0
  977. package/src/core/stdlib/values/lookback.ts +198 -0
  978. package/src/core/stdlib/values/region.ts +86 -0
  979. package/src/core/stdlib/values/tail.ts +58 -0
  980. package/src/core/stdlib/values/value.ts +82 -0
  981. package/src/core/stdlib/volatility/bands.ts +178 -0
  982. package/src/core/stdlib/volatility/deviation.ts +111 -0
  983. package/src/core/stdlib/volatility/index.ts +48 -0
  984. package/src/core/stdlib/volatility/measures.ts +96 -0
  985. package/src/core/stdlib/volatility/range.ts +143 -0
  986. package/src/core/stdlib/volume/accumulation.ts +152 -0
  987. package/src/core/stdlib/volume/flow.ts +173 -0
  988. package/src/core/stdlib/volume/index.ts +43 -0
  989. package/src/core/stdlib/volume/weighted.ts +101 -0
  990. package/src/core/version/version.generated.ts +2 -2
@@ -0,0 +1,295 @@
1
+ /**
2
+ * The object heap: arrays, grids and drawing objects, `compiled-program.md`
3
+ * 3.2.
4
+ *
5
+ * Everything here exists to serve one requirement, section 6.2's: after a
6
+ * restore, two cells that held the same array still hold the same array, and a
7
+ * `push` through one is visible through the other. A heap addressed by integer
8
+ * gives that for nothing, because a restore puts integers back and the graph
9
+ * was never taken apart.
10
+ *
11
+ * **Rollback is an undo journal rather than a copy.** Section 6.2 permits a
12
+ * full copy, copy on write, an undo journal or nothing at all, and requires the
13
+ * semantics rather than the representation. A full copy of the heap at every
14
+ * bar is quadratic in a study that keeps a drawing object per bar, which is a
15
+ * study people write, so the journal takes a copy of an object the first time a
16
+ * bar touches it and of nothing else. A bar that changes nothing costs nothing.
17
+ *
18
+ * **What nothing can reach is dropped at a checkpoint.** A study that builds an
19
+ * array every bar and keeps none of them would otherwise grow for as long as
20
+ * the chart is open, and refusing it at a ceiling would be the wrong answer:
21
+ * the objects are rubbish, not a program asking for too much. The sweep runs
22
+ * only once the heap has grown past what the last one found live, so its cost
23
+ * is spread over the allocations that made it necessary.
24
+ */
25
+ import type { Value } from './value.js';
26
+ import { isRef, reference } from './value.js';
27
+
28
+ /** The kinds of object a reference can point at. */
29
+ export type ObjectKind = 'array' | 'table' | 'line' | 'label' | 'box' | 'polyline';
30
+
31
+ /** One cell a script wrote into a grid during this bar. */
32
+ export interface GridCell {
33
+ readonly row: number;
34
+ readonly col: number;
35
+ readonly text: Value;
36
+ readonly textColor: Value;
37
+ readonly bgColor: Value;
38
+ readonly align: Value;
39
+ }
40
+
41
+ export interface ArrayObject {
42
+ readonly kind: 'array';
43
+ items: Value[];
44
+ }
45
+
46
+ export interface TableObject {
47
+ readonly kind: 'table';
48
+ readonly rows: number;
49
+ readonly cols: number;
50
+ /**
51
+ * The cells written this bar, in write order.
52
+ *
53
+ * Not in a checkpoint and not rolled back: step 3 of every execution empties
54
+ * the buffers, so a re-executed bar rebuilds them from nothing.
55
+ */
56
+ cells: GridCell[];
57
+ }
58
+
59
+ export interface DrawingObject {
60
+ readonly kind: 'line' | 'label' | 'box' | 'polyline';
61
+ props: Record<string, Value>;
62
+ deleted: boolean;
63
+ /** The bar it was deleted on, for OS4005's message. */
64
+ deletedAt: number;
65
+ }
66
+
67
+ export type HeapObject = ArrayObject | TableObject | DrawingObject;
68
+
69
+ export function isDrawing(object: HeapObject): object is DrawingObject {
70
+ return object.kind !== 'array' && object.kind !== 'table';
71
+ }
72
+
73
+ function copyObject(object: HeapObject): HeapObject {
74
+ if (object.kind === 'array') return { kind: 'array', items: [...object.items] };
75
+ if (object.kind === 'table') {
76
+ return { kind: 'table', rows: object.rows, cols: object.cols, cells: [...object.cells] };
77
+ }
78
+ return {
79
+ kind: object.kind,
80
+ props: { ...object.props },
81
+ deleted: object.deleted,
82
+ deletedAt: object.deletedAt,
83
+ };
84
+ }
85
+
86
+ /** What a caller must offer the sweep: every value a live root holds. */
87
+ export type RootWalk = (visit: (value: Value) => void) => void;
88
+
89
+ export class Heap {
90
+ private readonly objects: (HeapObject | undefined)[] = [];
91
+ private readonly free: number[] = [];
92
+ /** Drawing object ids in creation order, which is the order a host draws them. */
93
+ private drawingIds: number[] = [];
94
+ /** A copy of each object taken before the first change this bar made to it. */
95
+ private readonly taken = new Map<number, HeapObject>();
96
+ /** Ids allocated during this bar, oldest first. */
97
+ private created: number[] = [];
98
+ /** The drawing roster's length when this bar began. */
99
+ private drawingsAtBarStart = 0;
100
+ private liveAtSweep = 0;
101
+ private sinceSweep = 0;
102
+ private elements = 0;
103
+ /**
104
+ * Drawing objects created and not yet deleted, kept as a running count.
105
+ *
106
+ * Counted rather than measured because two things ask for it on the hot
107
+ * path: `draw.count()` on every bar and the object ceiling on every
108
+ * creation. Walking the roster for each would make a study that holds ten
109
+ * thousand objects quadratic in the number it holds, which is the study the
110
+ * ceiling exists for. The count is adjusted by the same journal that undoes
111
+ * everything else, so a rolled back creation is a rolled back count.
112
+ */
113
+ private drawingsLive = 0;
114
+
115
+ /** Objects alive right now, which is what a heap ceiling counts. */
116
+ liveCount(): number {
117
+ return this.objects.length - this.free.length;
118
+ }
119
+
120
+ /** Drawing objects the script has created and not deleted. */
121
+ drawingCount(): number {
122
+ return this.drawingsLive;
123
+ }
124
+
125
+ /** Total array elements held. */
126
+ elementCount(): number {
127
+ return this.elements;
128
+ }
129
+
130
+ get(id: number): HeapObject | undefined {
131
+ return this.objects[id];
132
+ }
133
+
134
+ /** The object a reference names, or nothing when the value is not one. */
135
+ deref(value: Value): HeapObject | undefined {
136
+ return isRef(value) ? this.objects[value.id] : undefined;
137
+ }
138
+
139
+ allocate(object: HeapObject): number {
140
+ const reused = this.free.pop();
141
+ const id = reused ?? this.objects.length;
142
+ this.objects[id] = object;
143
+ this.created.push(id);
144
+ this.sinceSweep += 1;
145
+ if (object.kind === 'array') this.elements += object.items.length;
146
+ if (isDrawing(object)) {
147
+ this.drawingIds.push(id);
148
+ this.drawingsLive += 1;
149
+ }
150
+ return id;
151
+ }
152
+
153
+ /**
154
+ * Delete one drawing object, which is the only thing that ends its life.
155
+ *
156
+ * Here rather than in the library call so that the roster, the count and the
157
+ * journal cannot disagree: a caller that set the flag itself would leave the
158
+ * count saying one thing and the objects another, and the first symptom
159
+ * would be a ceiling refusing a script that had deleted everything.
160
+ *
161
+ * Deleting twice does nothing and is not an error. The script asked for the
162
+ * object to be gone and it is gone; only a change to a deleted object is
163
+ * OS4005.
164
+ */
165
+ deleteDrawing(id: number, bar: number): void {
166
+ const object = this.objects[id];
167
+ if (object === undefined || !isDrawing(object) || object.deleted) return;
168
+ this.touch(id);
169
+ object.deleted = true;
170
+ object.deletedAt = bar;
171
+ this.drawingsLive -= 1;
172
+ }
173
+
174
+ /**
175
+ * Announce a change to an object before making it.
176
+ *
177
+ * The copy is taken once per bar per object: the journal only has to restore
178
+ * the state the bar started in, so the second change to the same object has
179
+ * nothing to record.
180
+ */
181
+ touch(id: number): void {
182
+ if (this.taken.has(id)) return;
183
+ const object = this.objects[id];
184
+ if (object === undefined) return;
185
+ this.taken.set(id, copyObject(object));
186
+ }
187
+
188
+ /** Called after an array's length changes, so the ceiling sees it. */
189
+ countElements(delta: number): void {
190
+ this.elements += delta;
191
+ }
192
+
193
+ /** The drawing objects a host should see, in creation order. */
194
+ drawings(): readonly { readonly id: number; readonly object: DrawingObject }[] {
195
+ const out: { id: number; object: DrawingObject }[] = [];
196
+ for (const id of this.drawingIds) {
197
+ const object = this.objects[id];
198
+ if (object === undefined || !isDrawing(object) || object.deleted) continue;
199
+ out.push({ id, object });
200
+ }
201
+ return out;
202
+ }
203
+
204
+ /** Undo every change this bar made, which is section 6.3 for the heap. */
205
+ rollback(): void {
206
+ for (const [id, object] of this.taken) {
207
+ const current = this.objects[id];
208
+ if (current !== undefined && current.kind === 'array' && object.kind === 'array') {
209
+ this.elements += object.items.length - current.items.length;
210
+ }
211
+ // A deletion this bar made is undone with everything else, so the object
212
+ // comes back and the count comes back with it.
213
+ if (current !== undefined && isDrawing(current) && isDrawing(object)) {
214
+ this.drawingsLive += (object.deleted ? 0 : 1) - (current.deleted ? 0 : 1);
215
+ }
216
+ this.objects[id] = object;
217
+ }
218
+ this.taken.clear();
219
+ for (let i = this.created.length - 1; i >= 0; i -= 1) {
220
+ const id = this.created[i];
221
+ if (id === undefined) continue;
222
+ const object = this.objects[id];
223
+ if (object !== undefined && object.kind === 'array') this.elements -= object.items.length;
224
+ // An object created and then deleted on the same bar was counted out of
225
+ // the roster by the deletion, so only a live one is counted out here.
226
+ if (object !== undefined && isDrawing(object) && !object.deleted) this.drawingsLive -= 1;
227
+ this.objects[id] = undefined;
228
+ this.free.push(id);
229
+ this.sinceSweep -= 1;
230
+ }
231
+ this.created = [];
232
+ this.drawingIds.length = this.drawingsAtBarStart;
233
+ }
234
+
235
+ /** Accept every change this bar made. The journal starts again empty. */
236
+ commit(): void {
237
+ this.taken.clear();
238
+ this.created = [];
239
+ this.drawingsAtBarStart = this.drawingIds.length;
240
+ }
241
+
242
+ /** Drop what nothing can reach. Only at a checkpoint, and only when it pays. */
243
+ sweep(roots: RootWalk): void {
244
+ if (this.sinceSweep < this.liveAtSweep + 256) return;
245
+ const live = new Set<number>();
246
+ const pending: number[] = [];
247
+
248
+ const visit = (value: Value): void => {
249
+ if (!isRef(value) || live.has(value.id)) return;
250
+ if (this.objects[value.id] === undefined) return;
251
+ live.add(value.id);
252
+ pending.push(value.id);
253
+ };
254
+
255
+ roots(visit);
256
+ // Every drawing object that has not been deleted is a root of its own: the
257
+ // surface holds it, so a script that draws a box and keeps no name for it
258
+ // still gets a box.
259
+ for (const id of this.drawingIds) {
260
+ const object = this.objects[id];
261
+ if (object !== undefined && isDrawing(object) && !object.deleted) visit(reference(id));
262
+ }
263
+
264
+ while (pending.length > 0) {
265
+ const id = pending.pop();
266
+ if (id === undefined) continue;
267
+ const object = this.objects[id];
268
+ if (object === undefined) continue;
269
+ if (object.kind === 'array') for (const item of object.items) visit(item);
270
+ else if (object.kind === 'table') {
271
+ for (const cell of object.cells) {
272
+ visit(cell.text);
273
+ visit(cell.textColor);
274
+ visit(cell.bgColor);
275
+ }
276
+ } else for (const key of Object.keys(object.props)) visit(object.props[key] ?? null);
277
+ }
278
+
279
+ for (let id = 0; id < this.objects.length; id += 1) {
280
+ const object = this.objects[id];
281
+ if (object === undefined || live.has(id)) continue;
282
+ if (object.kind === 'array') this.elements -= object.items.length;
283
+ // A drawing that has not been deleted is a root of its own, so this
284
+ // subtracts nothing in practice. It is written because the day the roots
285
+ // change is the day a silently wrong count would start.
286
+ if (isDrawing(object) && !object.deleted) this.drawingsLive -= 1;
287
+ this.objects[id] = undefined;
288
+ this.free.push(id);
289
+ }
290
+ this.drawingIds = this.drawingIds.filter((id) => live.has(id));
291
+ this.drawingsAtBarStart = this.drawingIds.length;
292
+ this.liveAtSweep = live.size;
293
+ this.sinceSweep = 0;
294
+ }
295
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * What a running program holds: the six values of `compiled-program.md` 3.1
3
+ * and the heap the sixth one points into.
4
+ *
5
+ * Separate from the engine's own module because the library needs both and the
6
+ * engine needs both, and a value model that lived inside either one would make
7
+ * the other import it through a door it has no business going through.
8
+ */
9
+ export type { ColourValue, Reference, Value } from './value.js';
10
+ export {
11
+ ABSENT,
12
+ colour,
13
+ isAbsent,
14
+ isBool,
15
+ isColour,
16
+ isNumber,
17
+ isRef,
18
+ isString,
19
+ numberValue,
20
+ reference,
21
+ tagOf,
22
+ valuesEqual,
23
+ } from './value.js';
24
+
25
+ export type {
26
+ ArrayObject,
27
+ DrawingObject,
28
+ GridCell,
29
+ HeapObject,
30
+ ObjectKind,
31
+ RootWalk,
32
+ TableObject,
33
+ } from './heap.js';
34
+ export { Heap, isDrawing } from './heap.js';
@@ -0,0 +1,158 @@
1
+ /**
2
+ * The six values a running program can hold, `compiled-program.md` 3.1.
3
+ *
4
+ * Absence is `null`, a number is a number, a boolean is a boolean and a string
5
+ * is a string, so four of the six tags are the ones the host language already
6
+ * carries and cost nothing to test. The two that have no native tag, a colour
7
+ * and a reference, are objects carrying a `tag` field, so `typeof` answers the
8
+ * question for every value in one step and no value can be mistaken for
9
+ * another.
10
+ *
11
+ * **Absence is never a number.** Section 3.4 is explicit that a not-a-number
12
+ * sentinel would make absence propagate through arithmetic by accident, which
13
+ * is the right answer for four operators and the wrong one for six, and would
14
+ * turn `isNone` into a floating point comparison. `null` has none of those
15
+ * properties, and the two rules the arithmetic actually needs, absence in
16
+ * gives absence out and a non-finite result becomes absent, are then written
17
+ * once each rather than hidden inside a representation.
18
+ *
19
+ * **A reference is an integer into the heap, not a pointer to an object.**
20
+ * That choice is what makes section 6.2's hardest requirement free: a
21
+ * checkpoint copies the heap table, every reference in a restored cell is the
22
+ * same integer it was, and two cells that shared an array still share it. A
23
+ * representation that put the object itself in the cell would have to work out
24
+ * which cells pointed at the same object and rebuild the graph, and a restore
25
+ * that deep copied each cell separately would silently turn one array into two.
26
+ */
27
+
28
+ /** Red, green and blue as whole numbers 0 to 255, alpha as a number 0 to 1. */
29
+ export interface ColourValue {
30
+ readonly tag: 'color';
31
+ readonly r: number;
32
+ readonly g: number;
33
+ readonly b: number;
34
+ readonly a: number;
35
+ }
36
+
37
+ /** A handle into the object heap. Opaque to a script, and equal only to itself. */
38
+ export interface Reference {
39
+ readonly tag: 'ref';
40
+ readonly id: number;
41
+ }
42
+
43
+ /** A value on the machine. */
44
+ export type Value = null | number | boolean | string | ColourValue | Reference;
45
+
46
+ /** Absence, the value a script writes `none`. */
47
+ export const ABSENT = null;
48
+
49
+ export function isAbsent(value: Value): value is null {
50
+ return value === null;
51
+ }
52
+
53
+ export function isNumber(value: Value): value is number {
54
+ return typeof value === 'number';
55
+ }
56
+
57
+ export function isBool(value: Value): value is boolean {
58
+ return typeof value === 'boolean';
59
+ }
60
+
61
+ export function isString(value: Value): value is string {
62
+ return typeof value === 'string';
63
+ }
64
+
65
+ export function isColour(value: Value): value is ColourValue {
66
+ return typeof value === 'object' && value !== null && value.tag === 'color';
67
+ }
68
+
69
+ export function isRef(value: Value): value is Reference {
70
+ return typeof value === 'object' && value !== null && value.tag === 'ref';
71
+ }
72
+
73
+ export function reference(id: number): Reference {
74
+ return { tag: 'ref', id };
75
+ }
76
+
77
+ /**
78
+ * A number made safe to store, by the two rules of section 3.1 that hold at
79
+ * every arithmetic result and every store.
80
+ *
81
+ * A result with no finite value is absent, checked here rather than at the end
82
+ * of an expression so that `(1e308 * 10) / 10` is absent rather than depending
83
+ * on where an engine happens to round. Negative zero becomes positive zero, so
84
+ * nothing downstream can observe the sign of a zero and two engines cannot
85
+ * differ over a minus in front of one.
86
+ */
87
+ export function numberValue(x: number): Value {
88
+ if (!Number.isFinite(x)) return ABSENT;
89
+ return x === 0 ? 0 : x;
90
+ }
91
+
92
+ /** The name of a value's tag, for a diagnostic that has to say what it found. */
93
+ export function tagOf(value: Value): string {
94
+ if (value === null) return 'none';
95
+ switch (typeof value) {
96
+ case 'number':
97
+ return 'number';
98
+ case 'boolean':
99
+ return 'bool';
100
+ case 'string':
101
+ return 'string';
102
+ default:
103
+ return value.tag === 'color' ? 'color' : 'reference';
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Whole channels, and an alpha held to its range.
109
+ *
110
+ * `stdlib.md` 11.2 requires every call that computes a colour to round red,
111
+ * green and blue with the language's own rounding, halves away from zero,
112
+ * before it returns, so that the value model's invariant holds of every colour
113
+ * and not only of a literal.
114
+ */
115
+ export function colour(r: number, g: number, b: number, a: number): ColourValue {
116
+ return {
117
+ tag: 'color',
118
+ r: channel(r),
119
+ g: channel(g),
120
+ b: channel(b),
121
+ a: a < 0 ? 0 : a > 1 ? 1 : a === 0 ? 0 : a,
122
+ };
123
+ }
124
+
125
+ function channel(x: number): number {
126
+ if (!Number.isFinite(x)) return 0;
127
+ const rounded = halfAway(x);
128
+ return rounded < 0 ? 0 : rounded > 255 ? 255 : rounded;
129
+ }
130
+
131
+ /** The language's rounding, halves away from zero, `stdlib.md` 8.1. */
132
+ function halfAway(x: number): number {
133
+ const below = Math.floor(x);
134
+ const fraction = x - below;
135
+ if (fraction > 0.5) return below + 1;
136
+ if (fraction < 0.5) return below;
137
+ return x > 0 ? below + 1 : below;
138
+ }
139
+
140
+ /**
141
+ * Whether two values are equal under `EQ`, which is total: it always answers.
142
+ *
143
+ * Absent equals absent and nothing else. Two colours are equal when all four
144
+ * channels match. Two references are equal when they are the same object,
145
+ * which is `language.md` 9.3 and the reason `arrayEqual` exists in the library
146
+ * for comparing contents.
147
+ */
148
+ export function valuesEqual(a: Value, b: Value): boolean {
149
+ if (a === null || b === null) return a === b;
150
+ if (typeof a === 'number' || typeof a === 'boolean' || typeof a === 'string') {
151
+ return a === b;
152
+ }
153
+ if (typeof b !== 'object' || b === null) return false;
154
+ if (a.tag === 'color') {
155
+ return b.tag === 'color' && a.r === b.r && a.g === b.g && a.b === b.b && a.a === b.a;
156
+ }
157
+ return b.tag === 'ref' && a.id === b.id;
158
+ }
@@ -0,0 +1,202 @@
1
+ /**
2
+ * The budgets a host is willing to spend, `compiled-program.md` 2.4 and 9.4 step
3
+ * 7.
4
+ *
5
+ * Separate from `verify.ts` because it answers a different question. Verification
6
+ * asks whether this is a valid program, which every engine answers the same way
7
+ * because the specification says how. These ask whether this host will run it,
8
+ * and two hosts may honestly differ: a ceiling here is a configuration, not a
9
+ * property of the language.
10
+ *
11
+ * **None of them silently caps anything.** 2.4 is explicit: a host refuses at
12
+ * load, naming the limit and the value it allows. A program that quietly gets a
13
+ * smaller budget than it asked for produces a wrong number instead of a message,
14
+ * and nothing on the chart would say which number.
15
+ *
16
+ * The walks below read tables that verification has not reached yet, because the
17
+ * budget refusals are step 7 of 9.4 and verification is step 8. Reading them
18
+ * defensively is what keeps the specification's order from turning a malformed
19
+ * program into a thrown error rather than the OS6018 step 8 is about to report,
20
+ * naming the instruction.
21
+ */
22
+ import type { Diagnostic } from '../diagnostics/index.js';
23
+ import type { EngineLimits } from './budget.js';
24
+ import { NO_POSITION, failure } from './errors.js';
25
+ import type { CompiledProgram, Instruction, Request } from './types.js';
26
+
27
+ /** Each ceiling in turn, stopping at the first the program is over. */
28
+ export function checkBudgets(
29
+ program: CompiledProgram,
30
+ limits: EngineLimits,
31
+ ): Diagnostic | undefined {
32
+ if (limits.loops !== null && program.limits.loops > limits.loops) {
33
+ return failure('OS5003', NO_POSITION, {
34
+ option: 'loops',
35
+ max: limits.loops,
36
+ found: program.limits.loops,
37
+ });
38
+ }
39
+ const history = program.limits.history;
40
+ if (limits.history !== null && history !== null && history > limits.history) {
41
+ return failure('OS5003', NO_POSITION, {
42
+ option: 'history',
43
+ max: limits.history,
44
+ found: history,
45
+ });
46
+ }
47
+ if (limits.instructions !== null) {
48
+ let found = 0;
49
+ for (const code of allCode(program)) found += code.length;
50
+ if (found > limits.instructions) {
51
+ return failure('OS5009', NO_POSITION, { found, max: limits.instructions });
52
+ }
53
+ }
54
+ if (limits.states !== null && program.states.length > limits.states) {
55
+ const [first, second] = busiestPair(program);
56
+ return failure('OS5004', NO_POSITION, {
57
+ found: program.states.length,
58
+ max: limits.states,
59
+ first,
60
+ second,
61
+ });
62
+ }
63
+ if (limits.requests !== null) {
64
+ // `host-interface.md` 5.2: the ceiling is the host's and it is stated at
65
+ // load, because the whole set of reads is known then. A nested read is one
66
+ // of them: it is a second series the host keeps in step with the chart.
67
+ const found = countRequests(program.requests);
68
+ if (found > limits.requests) {
69
+ return failure('OS5006', NO_POSITION, { found, max: limits.requests });
70
+ }
71
+ }
72
+ const depth = callDepth(program);
73
+ if (depth > limits.frames) {
74
+ return failure('OS5005', NO_POSITION, {
75
+ construct: 'a call',
76
+ found: depth,
77
+ max: limits.frames,
78
+ });
79
+ }
80
+ return undefined;
81
+ }
82
+
83
+ /** Every read the file makes, the ones written inside another included. */
84
+ function countRequests(requests: readonly Request[]): number {
85
+ let found = 0;
86
+ for (const one of requests) found += 1 + countRequests(one.body.requests);
87
+ return found;
88
+ }
89
+
90
+ /**
91
+ * The opcode of one element of an instruction list, or nothing when it is not
92
+ * an instruction at all.
93
+ *
94
+ * The budget refusals are step 7 of 9.4 and verification is step 8, so the two
95
+ * walks below read lists that nothing has yet proved are instruction lists.
96
+ * Reading them defensively is what keeps the specification's order from turning
97
+ * a malformed program into a thrown error rather than the OS6018 step 8 is
98
+ * about to report, naming the instruction.
99
+ */
100
+ function opcodeOf(instruction: Instruction): string | undefined {
101
+ return Array.isArray(instruction) ? instruction[0] : undefined;
102
+ }
103
+
104
+ /**
105
+ * The two functions whose nesting produced the most call paths.
106
+ *
107
+ * OS5004's message names them because the number of paths grows
108
+ * multiplicatively where several functions each call the next more than once,
109
+ * and a reader who is told only the total has nowhere to start. The pair with
110
+ * the most call sites between them is where the multiplication happened.
111
+ */
112
+ function busiestPair(program: CompiledProgram): readonly [string, string] {
113
+ const counts = new Map<string, number>();
114
+ const lists: readonly (readonly [string, readonly Instruction[]])[] = [
115
+ ['the top level', program.code],
116
+ ...program.functions.map(
117
+ (one) => [one.name, one.code] as readonly [string, readonly Instruction[]],
118
+ ),
119
+ ];
120
+ for (const [caller, code] of lists) {
121
+ for (const instruction of code) {
122
+ if (opcodeOf(instruction) !== 'CALL_FN') continue;
123
+ const site = program.callSites[instruction[1] as number];
124
+ const callee = site === undefined ? undefined : program.functions[site.fn]?.name;
125
+ if (callee === undefined) continue;
126
+ const key = `${caller}\u0000${callee}`;
127
+ counts.set(key, (counts.get(key) ?? 0) + 1);
128
+ }
129
+ }
130
+ let best: readonly [string, string] = ['the top level', 'the functions it calls'];
131
+ let most = 0;
132
+ // Sorted before the walk, so the answer does not depend on a map's order.
133
+ for (const key of [...counts.keys()].sort()) {
134
+ const count = counts.get(key) ?? 0;
135
+ if (count <= most) continue;
136
+ const [caller, callee] = key.split('\u0000');
137
+ best = [caller ?? '', callee ?? ''];
138
+ most = count;
139
+ }
140
+ return best;
141
+ }
142
+
143
+ /**
144
+ * The deepest chain of call sites, which is the deepest the frame stack goes.
145
+ *
146
+ * Recursion is an error in the language, so the call graph is acyclic and the
147
+ * walk terminates; the visited set is a guard against a program that was
148
+ * written by something other than this compiler, and it stops rather than
149
+ * looping forever.
150
+ */
151
+ function callDepth(program: CompiledProgram): number {
152
+ const bodies = program.functions.map((one) => one.code);
153
+ const sitesIn = (code: readonly Instruction[]): number[] =>
154
+ code.flatMap((one) =>
155
+ opcodeOf(one) === 'CALL_FN' && typeof one[1] === 'number' ? [one[1]] : [],
156
+ );
157
+
158
+ const known = new Map<number, number>();
159
+ const walking = new Set<number>();
160
+ const depthOf = (site: number): number => {
161
+ const cached = known.get(site);
162
+ if (cached !== undefined) return cached;
163
+ if (walking.has(site)) return 1;
164
+ walking.add(site);
165
+ const fn = program.callSites[site]?.fn;
166
+ const body = fn === undefined ? undefined : bodies[fn];
167
+ let deepest = 0;
168
+ for (const inner of body === undefined ? [] : sitesIn(body)) {
169
+ deepest = Math.max(deepest, depthOf(inner));
170
+ }
171
+ walking.delete(site);
172
+ known.set(site, deepest + 1);
173
+ return deepest + 1;
174
+ };
175
+
176
+ let deepest = 0;
177
+ for (const site of sitesIn(program.code)) deepest = Math.max(deepest, depthOf(site));
178
+ return deepest + 1;
179
+ }
180
+
181
+ /**
182
+ * Every instruction list in the program, the bodies of its reads included.
183
+ *
184
+ * A read's expression is part of the program: an engine that cannot run an
185
+ * `ELEM` cannot run one inside a read either, and a budget or a tag worked out
186
+ * from the bar's list alone would say otherwise.
187
+ */
188
+ export function allCode(program: CompiledProgram): (readonly Instruction[])[] {
189
+ const lists: (readonly Instruction[])[] = [
190
+ program.code,
191
+ ...program.functions.map((one) => one.code),
192
+ ];
193
+ const walk = (requests: readonly Request[]): void => {
194
+ for (const request of requests) {
195
+ lists.push(request.body.code);
196
+ for (const one of request.body.functions) lists.push(one.code);
197
+ walk(request.body.requests);
198
+ }
199
+ };
200
+ walk(program.requests);
201
+ return lists;
202
+ }