@forgecharts/sdk 1.1.27 → 1.1.29

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 (356) hide show
  1. package/dist/__tests__/backwardCompatibility.test.d.ts +14 -0
  2. package/dist/__tests__/backwardCompatibility.test.d.ts.map +1 -0
  3. package/dist/__tests__/candleInvariant.test.d.ts +20 -0
  4. package/dist/__tests__/candleInvariant.test.d.ts.map +1 -0
  5. package/dist/__tests__/public-api-surface.d.ts +13 -0
  6. package/dist/__tests__/public-api-surface.d.ts.map +1 -0
  7. package/dist/__tests__/timeframeBoundary.test.d.ts +17 -0
  8. package/dist/__tests__/timeframeBoundary.test.d.ts.map +1 -0
  9. package/dist/api/DrawingManager.d.ts +20 -0
  10. package/dist/api/DrawingManager.d.ts.map +1 -0
  11. package/dist/api/EventBus.d.ts +19 -0
  12. package/dist/api/EventBus.d.ts.map +1 -0
  13. package/dist/api/IndicatorDAG.d.ts +85 -0
  14. package/dist/api/IndicatorDAG.d.ts.map +1 -0
  15. package/dist/api/IndicatorRegistry.d.ts +22 -0
  16. package/dist/api/IndicatorRegistry.d.ts.map +1 -0
  17. package/dist/api/LayoutManager.d.ts +30 -0
  18. package/dist/api/LayoutManager.d.ts.map +1 -0
  19. package/dist/api/PaneManager.d.ts +42 -0
  20. package/dist/api/PaneManager.d.ts.map +1 -0
  21. package/dist/api/ReferenceAPI.d.ts +78 -0
  22. package/dist/api/ReferenceAPI.d.ts.map +1 -0
  23. package/dist/api/TChart.d.ts +345 -0
  24. package/dist/api/TChart.d.ts.map +1 -0
  25. package/{src/api/createChart.ts → dist/api/createChart.d.ts} +2 -7
  26. package/dist/api/createChart.d.ts.map +1 -0
  27. package/dist/api/drawing tools/fib gann menu/fibRetracement.d.ts +4 -0
  28. package/dist/api/drawing tools/fib gann menu/fibRetracement.d.ts.map +1 -0
  29. package/dist/api/drawing tools/lines menu/crossLine.d.ts +4 -0
  30. package/dist/api/drawing tools/lines menu/crossLine.d.ts.map +1 -0
  31. package/dist/api/drawing tools/lines menu/disjointChannel.d.ts +17 -0
  32. package/dist/api/drawing tools/lines menu/disjointChannel.d.ts.map +1 -0
  33. package/dist/api/drawing tools/lines menu/extendedLine.d.ts +4 -0
  34. package/dist/api/drawing tools/lines menu/extendedLine.d.ts.map +1 -0
  35. package/dist/api/drawing tools/lines menu/flatTopBottom.d.ts +4 -0
  36. package/dist/api/drawing tools/lines menu/flatTopBottom.d.ts.map +1 -0
  37. package/dist/api/drawing tools/lines menu/horizontal.d.ts +4 -0
  38. package/dist/api/drawing tools/lines menu/horizontal.d.ts.map +1 -0
  39. package/dist/api/drawing tools/lines menu/horizontalRay.d.ts +4 -0
  40. package/dist/api/drawing tools/lines menu/horizontalRay.d.ts.map +1 -0
  41. package/dist/api/drawing tools/lines menu/infoLine.d.ts +4 -0
  42. package/dist/api/drawing tools/lines menu/infoLine.d.ts.map +1 -0
  43. package/dist/api/drawing tools/lines menu/insidePitchfork.d.ts +4 -0
  44. package/dist/api/drawing tools/lines menu/insidePitchfork.d.ts.map +1 -0
  45. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.d.ts +4 -0
  46. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.d.ts.map +1 -0
  47. package/dist/api/drawing tools/lines menu/parallelChannel.d.ts +4 -0
  48. package/dist/api/drawing tools/lines menu/parallelChannel.d.ts.map +1 -0
  49. package/dist/api/drawing tools/lines menu/pitchfork.d.ts +4 -0
  50. package/dist/api/drawing tools/lines menu/pitchfork.d.ts.map +1 -0
  51. package/dist/api/drawing tools/lines menu/ray.d.ts +4 -0
  52. package/dist/api/drawing tools/lines menu/ray.d.ts.map +1 -0
  53. package/dist/api/drawing tools/lines menu/regressionTrend.d.ts +4 -0
  54. package/dist/api/drawing tools/lines menu/regressionTrend.d.ts.map +1 -0
  55. package/dist/api/drawing tools/lines menu/schiffPitchfork.d.ts +4 -0
  56. package/dist/api/drawing tools/lines menu/schiffPitchfork.d.ts.map +1 -0
  57. package/dist/api/drawing tools/lines menu/trendAngle.d.ts +4 -0
  58. package/dist/api/drawing tools/lines menu/trendAngle.d.ts.map +1 -0
  59. package/dist/api/drawing tools/lines menu/trendline.d.ts +4 -0
  60. package/dist/api/drawing tools/lines menu/trendline.d.ts.map +1 -0
  61. package/dist/api/drawing tools/lines menu/vertical.d.ts +4 -0
  62. package/dist/api/drawing tools/lines menu/vertical.d.ts.map +1 -0
  63. package/{src/api/drawing tools/pointers menu/crosshair.ts → dist/api/drawing tools/pointers menu/crosshair.d.ts } +8 -9
  64. package/dist/api/drawing tools/pointers menu/crosshair.d.ts.map +1 -0
  65. package/dist/api/drawing tools/pointers menu/cursor.d.ts +15 -0
  66. package/dist/api/drawing tools/pointers menu/cursor.d.ts.map +1 -0
  67. package/{src/api/drawing tools/pointers menu/demonstration.ts → dist/api/drawing tools/pointers menu/demonstration.d.ts } +12 -17
  68. package/dist/api/drawing tools/pointers menu/demonstration.d.ts.map +1 -0
  69. package/{src/api/drawing tools/pointers menu/dot.ts → dist/api/drawing tools/pointers menu/dot.d.ts } +10 -13
  70. package/dist/api/drawing tools/pointers menu/dot.d.ts.map +1 -0
  71. package/dist/api/drawing tools/shapes menu/rectangle.d.ts +4 -0
  72. package/dist/api/drawing tools/shapes menu/rectangle.d.ts.map +1 -0
  73. package/dist/api/drawing tools/shapes menu/text.d.ts +4 -0
  74. package/dist/api/drawing tools/shapes menu/text.d.ts.map +1 -0
  75. package/dist/api/drawingUtils.d.ts +22 -0
  76. package/dist/api/drawingUtils.d.ts.map +1 -0
  77. package/dist/core/CanvasLayer.d.ts +26 -0
  78. package/dist/core/CanvasLayer.d.ts.map +1 -0
  79. package/dist/core/Chart.d.ts +164 -0
  80. package/dist/core/Chart.d.ts.map +1 -0
  81. package/dist/core/CoordTransform.d.ts +168 -0
  82. package/dist/core/CoordTransform.d.ts.map +1 -0
  83. package/dist/core/Crosshair.d.ts +30 -0
  84. package/dist/core/Crosshair.d.ts.map +1 -0
  85. package/dist/core/IndicatorEngine.d.ts +51 -0
  86. package/dist/core/IndicatorEngine.d.ts.map +1 -0
  87. package/dist/core/InteractionManager.d.ts +197 -0
  88. package/dist/core/InteractionManager.d.ts.map +1 -0
  89. package/dist/core/PriceScale.d.ts +27 -0
  90. package/dist/core/PriceScale.d.ts.map +1 -0
  91. package/dist/core/Series.d.ts +40 -0
  92. package/dist/core/Series.d.ts.map +1 -0
  93. package/dist/core/TimeScale.d.ts +43 -0
  94. package/dist/core/TimeScale.d.ts.map +1 -0
  95. package/dist/datafeed/DatafeedConnector.d.ts +89 -0
  96. package/dist/datafeed/DatafeedConnector.d.ts.map +1 -0
  97. package/dist/engine/CandleEngine.d.ts +207 -0
  98. package/dist/engine/CandleEngine.d.ts.map +1 -0
  99. package/dist/engine/__tests__/CandleEngine.test.d.ts +2 -0
  100. package/dist/engine/__tests__/CandleEngine.test.d.ts.map +1 -0
  101. package/dist/engine/candleInvariants.d.ts +66 -0
  102. package/dist/engine/candleInvariants.d.ts.map +1 -0
  103. package/{src/engine/mergeUtils.ts → dist/engine/mergeUtils.d.ts} +15 -52
  104. package/dist/engine/mergeUtils.d.ts.map +1 -0
  105. package/dist/engine/timeframeUtils.d.ts +80 -0
  106. package/dist/engine/timeframeUtils.d.ts.map +1 -0
  107. package/dist/index.d.ts +40 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +8101 -0
  110. package/dist/index.js.map +1 -0
  111. package/{src/internal.ts → dist/internal.d.ts} +1 -13
  112. package/dist/internal.d.ts.map +1 -0
  113. package/dist/internal.js +8852 -0
  114. package/dist/internal.js.map +1 -0
  115. package/dist/licensing/ChartRuntimeResolver.d.ts +233 -0
  116. package/dist/licensing/ChartRuntimeResolver.d.ts.map +1 -0
  117. package/dist/licensing/LicenseManager.d.ts +55 -0
  118. package/dist/licensing/LicenseManager.d.ts.map +1 -0
  119. package/dist/licensing/__tests__/ChartRuntimeResolver.test.d.ts +13 -0
  120. package/dist/licensing/__tests__/ChartRuntimeResolver.test.d.ts.map +1 -0
  121. package/dist/licensing/__tests__/LicenseManager.test.d.ts +12 -0
  122. package/dist/licensing/__tests__/LicenseManager.test.d.ts.map +1 -0
  123. package/dist/licensing/licenseTypes.d.ts +18 -0
  124. package/dist/licensing/licenseTypes.d.ts.map +1 -0
  125. package/dist/pine/PineCompiler.d.ts +35 -0
  126. package/dist/pine/PineCompiler.d.ts.map +1 -0
  127. package/dist/pine/diagnostics.d.ts +20 -0
  128. package/dist/pine/diagnostics.d.ts.map +1 -0
  129. package/{src/pine/index.ts → dist/pine/index.d.ts} +4 -3
  130. package/dist/pine/index.d.ts.map +1 -0
  131. package/dist/pine/pine-ast.d.ts +142 -0
  132. package/dist/pine/pine-ast.d.ts.map +1 -0
  133. package/dist/pine/pine-lexer.d.ts +41 -0
  134. package/dist/pine/pine-lexer.d.ts.map +1 -0
  135. package/dist/pine/pine-parser.d.ts +51 -0
  136. package/dist/pine/pine-parser.d.ts.map +1 -0
  137. package/dist/pine/pine-transpiler.d.ts +33 -0
  138. package/dist/pine/pine-transpiler.d.ts.map +1 -0
  139. package/dist/pixi/LayerName.d.ts +18 -0
  140. package/dist/pixi/LayerName.d.ts.map +1 -0
  141. package/dist/pixi/PixiCandlestickRenderer.d.ts +23 -0
  142. package/dist/pixi/PixiCandlestickRenderer.d.ts.map +1 -0
  143. package/dist/pixi/PixiChart.d.ts +72 -0
  144. package/dist/pixi/PixiChart.d.ts.map +1 -0
  145. package/dist/pixi/PixiCrosshairRenderer.d.ts +29 -0
  146. package/dist/pixi/PixiCrosshairRenderer.d.ts.map +1 -0
  147. package/dist/pixi/PixiDrawingRenderer.d.ts +17 -0
  148. package/dist/pixi/PixiDrawingRenderer.d.ts.map +1 -0
  149. package/dist/pixi/PixiGridRenderer.d.ts +22 -0
  150. package/dist/pixi/PixiGridRenderer.d.ts.map +1 -0
  151. package/dist/pixi/PixiLayerManager.d.ts +56 -0
  152. package/dist/pixi/PixiLayerManager.d.ts.map +1 -0
  153. package/dist/react/canvas/ChartCanvas.d.ts +85 -0
  154. package/dist/react/canvas/ChartCanvas.d.ts.map +1 -0
  155. package/dist/react/canvas/ChartContextMenu.d.ts +18 -0
  156. package/dist/react/canvas/ChartContextMenu.d.ts.map +1 -0
  157. package/dist/react/canvas/ChartSettingsDialog.d.ts +25 -0
  158. package/dist/react/canvas/ChartSettingsDialog.d.ts.map +1 -0
  159. package/dist/react/canvas/IndicatorLabel.d.ts +21 -0
  160. package/dist/react/canvas/IndicatorLabel.d.ts.map +1 -0
  161. package/dist/react/canvas/IndicatorPane.d.ts +32 -0
  162. package/dist/react/canvas/IndicatorPane.d.ts.map +1 -0
  163. package/dist/react/canvas/PointerOverlay.d.ts +23 -0
  164. package/dist/react/canvas/PointerOverlay.d.ts.map +1 -0
  165. package/dist/react/canvas/toolbars/LeftToolbar.d.ts +19 -0
  166. package/dist/react/canvas/toolbars/LeftToolbar.d.ts.map +1 -0
  167. package/dist/react/hooks/useChartCapabilities.d.ts +21 -0
  168. package/dist/react/hooks/useChartCapabilities.d.ts.map +1 -0
  169. package/{src/react/index.ts → dist/react/index.d.ts} +2 -23
  170. package/dist/react/index.d.ts.map +1 -0
  171. package/dist/react/index.js +11559 -0
  172. package/dist/react/index.js.map +1 -0
  173. package/{src/react/internal.ts → dist/react/internal.d.ts} +2 -26
  174. package/dist/react/internal.d.ts.map +1 -0
  175. package/dist/react/internal.js +12148 -0
  176. package/dist/react/internal.js.map +1 -0
  177. package/dist/react/shell/ManagedAppShell.d.ts +91 -0
  178. package/dist/react/shell/ManagedAppShell.d.ts.map +1 -0
  179. package/dist/react/trading/TradingBridge.d.ts +86 -0
  180. package/dist/react/trading/TradingBridge.d.ts.map +1 -0
  181. package/dist/react/workspace/ChartWorkspace.d.ts +73 -0
  182. package/dist/react/workspace/ChartWorkspace.d.ts.map +1 -0
  183. package/dist/react/workspace/FloatingPanel.d.ts +18 -0
  184. package/dist/react/workspace/FloatingPanel.d.ts.map +1 -0
  185. package/dist/react/workspace/IndicatorsDialog.d.ts +8 -0
  186. package/dist/react/workspace/IndicatorsDialog.d.ts.map +1 -0
  187. package/dist/react/workspace/LayoutMenu.d.ts +33 -0
  188. package/dist/react/workspace/LayoutMenu.d.ts.map +1 -0
  189. package/dist/react/workspace/SymbolSearchDialog.d.ts +10 -0
  190. package/dist/react/workspace/SymbolSearchDialog.d.ts.map +1 -0
  191. package/dist/react/workspace/TabBar.d.ts +17 -0
  192. package/dist/react/workspace/TabBar.d.ts.map +1 -0
  193. package/dist/react/workspace/toolbars/BottomToolbar.d.ts +19 -0
  194. package/dist/react/workspace/toolbars/BottomToolbar.d.ts.map +1 -0
  195. package/dist/react/workspace/toolbars/RightToolbar.d.ts +8 -0
  196. package/dist/react/workspace/toolbars/RightToolbar.d.ts.map +1 -0
  197. package/dist/react/workspace/toolbars/TopToolbar.d.ts +41 -0
  198. package/dist/react/workspace/toolbars/TopToolbar.d.ts.map +1 -0
  199. package/dist/renderers/CandlestickRenderer.d.ts +13 -0
  200. package/dist/renderers/CandlestickRenderer.d.ts.map +1 -0
  201. package/dist/renderers/HistogramRenderer.d.ts +11 -0
  202. package/dist/renderers/HistogramRenderer.d.ts.map +1 -0
  203. package/dist/renderers/LineRenderer.d.ts +12 -0
  204. package/dist/renderers/LineRenderer.d.ts.map +1 -0
  205. package/dist/theme/colors.d.ts +4 -0
  206. package/dist/theme/colors.d.ts.map +1 -0
  207. package/dist/tools/barDivergenceCheck.d.ts +120 -0
  208. package/dist/tools/barDivergenceCheck.d.ts.map +1 -0
  209. package/dist/trading/TradingOverlayStore.d.ts +86 -0
  210. package/dist/trading/TradingOverlayStore.d.ts.map +1 -0
  211. package/dist/trading/UnmanagedIngestion.d.ts +91 -0
  212. package/dist/trading/UnmanagedIngestion.d.ts.map +1 -0
  213. package/dist/trading/__tests__/ManagedTradingController.test.d.ts +18 -0
  214. package/dist/trading/__tests__/ManagedTradingController.test.d.ts.map +1 -0
  215. package/dist/trading/__tests__/TradingOverlayStore.test.d.ts +16 -0
  216. package/dist/trading/__tests__/TradingOverlayStore.test.d.ts.map +1 -0
  217. package/dist/trading/__tests__/UnmanagedIngestion.test.d.ts +16 -0
  218. package/dist/trading/__tests__/UnmanagedIngestion.test.d.ts.map +1 -0
  219. package/dist/trading/managed/ManagedTradingController.d.ts +110 -0
  220. package/dist/trading/managed/ManagedTradingController.d.ts.map +1 -0
  221. package/dist/trading/managed/managedCapabilities.d.ts +45 -0
  222. package/dist/trading/managed/managedCapabilities.d.ts.map +1 -0
  223. package/dist/trading/managed/managedTypes.d.ts +122 -0
  224. package/dist/trading/managed/managedTypes.d.ts.map +1 -0
  225. package/dist/trading/tradingTypes.d.ts +89 -0
  226. package/dist/trading/tradingTypes.d.ts.map +1 -0
  227. package/dist/tscript/TScriptIndicator.d.ts +41 -0
  228. package/dist/tscript/TScriptIndicator.d.ts.map +1 -0
  229. package/dist/tscript/ast.d.ts +89 -0
  230. package/dist/tscript/ast.d.ts.map +1 -0
  231. package/dist/tscript/lexer.d.ts +36 -0
  232. package/dist/tscript/lexer.d.ts.map +1 -0
  233. package/dist/tscript/parser.d.ts +50 -0
  234. package/dist/tscript/parser.d.ts.map +1 -0
  235. package/dist/tscript/runtime.d.ts +123 -0
  236. package/dist/tscript/runtime.d.ts.map +1 -0
  237. package/dist/tscript/series.d.ts +49 -0
  238. package/dist/tscript/series.d.ts.map +1 -0
  239. package/dist/types/IChart.d.ts +48 -0
  240. package/dist/types/IChart.d.ts.map +1 -0
  241. package/{src/types/IRenderer.ts → dist/types/IRenderer.d.ts} +2 -8
  242. package/dist/types/IRenderer.d.ts.map +1 -0
  243. package/dist/types/ISeries.d.ts +26 -0
  244. package/dist/types/ISeries.d.ts.map +1 -0
  245. package/package.json +5 -1
  246. package/src/__tests__/backwardCompatibility.test.ts +0 -191
  247. package/src/__tests__/candleInvariant.test.ts +0 -500
  248. package/src/__tests__/public-api-surface.ts +0 -76
  249. package/src/__tests__/timeframeBoundary.test.ts +0 -583
  250. package/src/api/DrawingManager.ts +0 -188
  251. package/src/api/EventBus.ts +0 -53
  252. package/src/api/IndicatorDAG.ts +0 -389
  253. package/src/api/IndicatorRegistry.ts +0 -47
  254. package/src/api/LayoutManager.ts +0 -72
  255. package/src/api/PaneManager.ts +0 -129
  256. package/src/api/ReferenceAPI.ts +0 -195
  257. package/src/api/TChart.ts +0 -881
  258. package/src/api/drawing tools/fib gann menu/fibRetracement.ts +0 -27
  259. package/src/api/drawing tools/lines menu/crossLine.ts +0 -21
  260. package/src/api/drawing tools/lines menu/disjointChannel.ts +0 -74
  261. package/src/api/drawing tools/lines menu/extendedLine.ts +0 -22
  262. package/src/api/drawing tools/lines menu/flatTopBottom.ts +0 -45
  263. package/src/api/drawing tools/lines menu/horizontal.ts +0 -24
  264. package/src/api/drawing tools/lines menu/horizontalRay.ts +0 -25
  265. package/src/api/drawing tools/lines menu/infoLine.ts +0 -127
  266. package/src/api/drawing tools/lines menu/insidePitchfork.ts +0 -21
  267. package/src/api/drawing tools/lines menu/modifiedSchiffPitchfork.ts +0 -18
  268. package/src/api/drawing tools/lines menu/parallelChannel.ts +0 -47
  269. package/src/api/drawing tools/lines menu/pitchfork.ts +0 -15
  270. package/src/api/drawing tools/lines menu/ray.ts +0 -28
  271. package/src/api/drawing tools/lines menu/regressionTrend.ts +0 -157
  272. package/src/api/drawing tools/lines menu/schiffPitchfork.ts +0 -18
  273. package/src/api/drawing tools/lines menu/trendAngle.ts +0 -64
  274. package/src/api/drawing tools/lines menu/trendline.ts +0 -16
  275. package/src/api/drawing tools/lines menu/vertical.ts +0 -16
  276. package/src/api/drawing tools/pointers menu/cursor.ts +0 -16
  277. package/src/api/drawing tools/shapes menu/rectangle.ts +0 -24
  278. package/src/api/drawing tools/shapes menu/text.ts +0 -30
  279. package/src/api/drawingUtils.ts +0 -82
  280. package/src/core/CanvasLayer.ts +0 -77
  281. package/src/core/Chart.ts +0 -917
  282. package/src/core/CoordTransform.ts +0 -282
  283. package/src/core/Crosshair.ts +0 -207
  284. package/src/core/IndicatorEngine.ts +0 -216
  285. package/src/core/InteractionManager.ts +0 -899
  286. package/src/core/PriceScale.ts +0 -133
  287. package/src/core/Series.ts +0 -132
  288. package/src/core/TimeScale.ts +0 -175
  289. package/src/datafeed/DatafeedConnector.ts +0 -300
  290. package/src/engine/CandleEngine.ts +0 -458
  291. package/src/engine/__tests__/CandleEngine.test.ts +0 -402
  292. package/src/engine/candleInvariants.ts +0 -172
  293. package/src/engine/timeframeUtils.ts +0 -118
  294. package/src/index.ts +0 -190
  295. package/src/licensing/ChartRuntimeResolver.ts +0 -380
  296. package/src/licensing/LicenseManager.ts +0 -131
  297. package/src/licensing/__tests__/ChartRuntimeResolver.test.ts +0 -207
  298. package/src/licensing/__tests__/LicenseManager.test.ts +0 -180
  299. package/src/licensing/licenseTypes.ts +0 -19
  300. package/src/pine/PineCompiler.ts +0 -68
  301. package/src/pine/diagnostics.ts +0 -30
  302. package/src/pine/pine-ast.ts +0 -163
  303. package/src/pine/pine-lexer.ts +0 -265
  304. package/src/pine/pine-parser.ts +0 -439
  305. package/src/pine/pine-transpiler.ts +0 -301
  306. package/src/pixi/LayerName.ts +0 -35
  307. package/src/pixi/PixiCandlestickRenderer.ts +0 -125
  308. package/src/pixi/PixiChart.ts +0 -425
  309. package/src/pixi/PixiCrosshairRenderer.ts +0 -134
  310. package/src/pixi/PixiDrawingRenderer.ts +0 -121
  311. package/src/pixi/PixiGridRenderer.ts +0 -136
  312. package/src/pixi/PixiLayerManager.ts +0 -102
  313. package/src/react/canvas/ChartCanvas.tsx +0 -984
  314. package/src/react/canvas/ChartContextMenu.tsx +0 -60
  315. package/src/react/canvas/ChartSettingsDialog.tsx +0 -133
  316. package/src/react/canvas/IndicatorLabel.tsx +0 -347
  317. package/src/react/canvas/IndicatorPane.tsx +0 -503
  318. package/src/react/canvas/PointerOverlay.tsx +0 -126
  319. package/src/react/canvas/toolbars/LeftToolbar.tsx +0 -1096
  320. package/src/react/hooks/useChartCapabilities.ts +0 -76
  321. package/src/react/shell/ManagedAppShell.tsx +0 -699
  322. package/src/react/trading/TradingBridge.ts +0 -156
  323. package/src/react/workspace/ChartWorkspace.tsx +0 -228
  324. package/src/react/workspace/FloatingPanel.tsx +0 -131
  325. package/src/react/workspace/IndicatorsDialog.tsx +0 -246
  326. package/src/react/workspace/LayoutMenu.tsx +0 -345
  327. package/src/react/workspace/SymbolSearchDialog.tsx +0 -377
  328. package/src/react/workspace/TabBar.tsx +0 -87
  329. package/src/react/workspace/toolbars/BottomToolbar.tsx +0 -372
  330. package/src/react/workspace/toolbars/RightToolbar.tsx +0 -46
  331. package/src/react/workspace/toolbars/TopToolbar.tsx +0 -431
  332. package/src/renderers/CandlestickRenderer.ts +0 -130
  333. package/src/renderers/HistogramRenderer.ts +0 -63
  334. package/src/renderers/LineRenderer.ts +0 -77
  335. package/src/theme/colors.ts +0 -21
  336. package/src/tools/barDivergenceCheck.ts +0 -305
  337. package/src/trading/TradingOverlayStore.ts +0 -161
  338. package/src/trading/UnmanagedIngestion.ts +0 -156
  339. package/src/trading/__tests__/ManagedTradingController.test.ts +0 -338
  340. package/src/trading/__tests__/TradingOverlayStore.test.ts +0 -323
  341. package/src/trading/__tests__/UnmanagedIngestion.test.ts +0 -205
  342. package/src/trading/managed/ManagedTradingController.ts +0 -292
  343. package/src/trading/managed/managedCapabilities.ts +0 -98
  344. package/src/trading/managed/managedTypes.ts +0 -151
  345. package/src/trading/tradingTypes.ts +0 -135
  346. package/src/tscript/TScriptIndicator.ts +0 -54
  347. package/src/tscript/ast.ts +0 -105
  348. package/src/tscript/lexer.ts +0 -190
  349. package/src/tscript/parser.ts +0 -334
  350. package/src/tscript/runtime.ts +0 -525
  351. package/src/tscript/series.ts +0 -84
  352. package/src/types/IChart.ts +0 -56
  353. package/src/types/ISeries.ts +0 -30
  354. package/tsconfig.json +0 -23
  355. package/tsup.config.ts +0 -16
  356. package/vitest.config.ts +0 -25
@@ -1,131 +0,0 @@
1
- import type { LicenseFeatures, LicenseMode, LicensePayload } from './licenseTypes';
2
-
3
- const DEFAULT_MODE: LicenseMode = 'unmanaged';
4
- const DEFAULT_FEATURES: LicenseFeatures = {};
5
-
6
- /**
7
- * LicenseManager — single source of truth for chart mode and feature access.
8
- *
9
- * Usage:
10
- * const lm = LicenseManager.getInstance();
11
- * await lm.validateLicense('my-key');
12
- * lm.getMode(); // 'managed' | 'unmanaged'
13
- * lm.hasFeature('orderEntry');
14
- */
15
- export class LicenseManager {
16
- private static instance: LicenseManager | null = null;
17
-
18
- private payload: LicensePayload | null = null;
19
- private readonly subscribers: Set<() => void> = new Set();
20
-
21
- private constructor() {}
22
-
23
- /**
24
- * Subscribe to license state changes (loadLicense, validateLicense, clear).
25
- * Returns an unsubscribe function — call it to stop receiving notifications.
26
- *
27
- * @example
28
- * const unsub = LicenseManager.getInstance().subscribe(() => {
29
- * console.log('license changed', lm.getMode());
30
- * });
31
- * // later:
32
- * unsub();
33
- */
34
- subscribe(cb: () => void): () => void {
35
- this.subscribers.add(cb);
36
- return () => this.subscribers.delete(cb);
37
- }
38
-
39
- private notify(): void {
40
- this.subscribers.forEach((cb) => {
41
- try { cb(); } catch { /* subscriber errors must not affect license state */ }
42
- });
43
- }
44
-
45
- static getInstance(): LicenseManager {
46
- if (!LicenseManager.instance) {
47
- LicenseManager.instance = new LicenseManager();
48
- }
49
- return LicenseManager.instance;
50
- }
51
-
52
- /**
53
- * Validate a license key against the licensing endpoint.
54
- *
55
- * @param key The raw license key entered by the user.
56
- * @param verifyUrl Full URL of the forgecharts-admin verify endpoint,
57
- * e.g. "http://licenses.example.com:4100/api/public/license/verify"
58
- */
59
- async validateLicense(key: string, verifyUrl: string): Promise<LicensePayload> {
60
- if (!key || !key.trim()) {
61
- throw new Error('LicenseManager: license key must not be empty');
62
- }
63
- if (!verifyUrl) {
64
- throw new Error('LicenseManager: verifyUrl is required');
65
- }
66
-
67
- const res = await fetch(verifyUrl, {
68
- method: 'POST',
69
- headers: { 'Content-Type': 'application/json' },
70
- body: JSON.stringify({ licenseKey: key.trim().toUpperCase() }),
71
- });
72
-
73
- if (!res.ok) {
74
- throw new Error(`License server error: ${res.status} ${res.statusText}`);
75
- }
76
-
77
- const data = await res.json() as { valid: boolean; reason?: string; licenseKey?: string; mode?: string; plan?: string; expiresAt?: string | null; features?: Record<string, boolean> };
78
-
79
- if (!data.valid) {
80
- throw new Error(data.reason ?? 'License invalid');
81
- }
82
-
83
- const payload: LicensePayload = {
84
- licenseKey: data.licenseKey ?? key.trim().toUpperCase(),
85
- mode: (data.mode ?? 'unmanaged') as LicensePayload['mode'],
86
- ...(data.plan != null && { plan: data.plan }),
87
- ...(data.expiresAt != null && { expires: data.expiresAt }),
88
- ...(data.features != null && { features: data.features as LicenseFeatures }),
89
- };
90
-
91
- this.payload = payload;
92
- this.notify();
93
- return payload;
94
- }
95
-
96
- /** Load a pre-validated payload (e.g. from cache / localStorage). */
97
- loadLicense(payload: LicensePayload): void {
98
- this.payload = payload;
99
- this.notify();
100
- }
101
-
102
- /** Return the currently loaded payload, or null if none. */
103
- getLicense(): LicensePayload | null {
104
- return this.payload;
105
- }
106
-
107
- /**
108
- * The chart mode driven by the active license.
109
- * Defaults to 'unmanaged' so no managed features appear without a valid
110
- * managed license.
111
- */
112
- getMode(): LicenseMode {
113
- return this.payload?.mode ?? DEFAULT_MODE;
114
- }
115
-
116
- /** Return the feature flags for the active license. */
117
- getFeatures(): LicenseFeatures {
118
- return this.payload?.features ?? DEFAULT_FEATURES;
119
- }
120
-
121
- /** Check whether a specific feature is enabled on the active license. */
122
- hasFeature(name: keyof LicenseFeatures): boolean {
123
- return this.getFeatures()[name] === true;
124
- }
125
-
126
- /** Clear the current license state (returns to safe unmanaged defaults). */
127
- clear(): void {
128
- this.payload = null;
129
- this.notify();
130
- }
131
- }
@@ -1,207 +0,0 @@
1
- /**
2
- * ChartRuntimeResolver — unit tests
3
- *
4
- * Covers:
5
- * - No license → unmanaged, all managed UI hidden, overlays/indicators/drawings visible
6
- * - Unmanaged license → same as no license for UI gating
7
- * - Managed license → all managed UI visible, external ingestion blocked
8
- * - Feature flags override defaults within a mode
9
- * - getCapabilities() snapshot is consistent with individual methods
10
- * - Module-level convenience functions alias correctly
11
- */
12
-
13
- import { describe, it, expect, beforeEach } from 'vitest';
14
- import { LicenseManager } from '../LicenseManager';
15
- import { ChartRuntimeResolver } from '../ChartRuntimeResolver';
16
- import type { LicensePayload } from '../licenseTypes';
17
-
18
- function setLicense(payload: LicensePayload | null) {
19
- const lm = LicenseManager.getInstance();
20
- if (payload === null) { lm.clear(); } else { lm.loadLicense(payload); }
21
- }
22
-
23
- const UNMANAGED_PAYLOAD: LicensePayload = { licenseKey: 'u1', mode: 'unmanaged' };
24
- const MANAGED_PAYLOAD: LicensePayload = { licenseKey: 'm1', mode: 'managed' };
25
-
26
- describe('ChartRuntimeResolver — no license (safe defaults)', () => {
27
- beforeEach(() => setLicense(null));
28
-
29
- it('isUnmanagedMode() is true', () => {
30
- expect(ChartRuntimeResolver.getInstance().isUnmanagedMode()).toBe(true);
31
- });
32
-
33
- it('isManagedMode() is false', () => {
34
- expect(ChartRuntimeResolver.getInstance().isManagedMode()).toBe(false);
35
- });
36
-
37
- it('managed UI render flags are all false', () => {
38
- const r = ChartRuntimeResolver.getInstance();
39
- expect(r.canRenderOrderEntry()).toBe(false);
40
- expect(r.canRenderBuySellButtons()).toBe(false);
41
- expect(r.canRenderOrderTicket()).toBe(false);
42
- expect(r.canRenderBracketControls()).toBe(false);
43
- expect(r.canRenderOrderModificationControls()).toBe(false);
44
- expect(r.canRenderManagedTradingControls()).toBe(false);
45
- });
46
-
47
- it('canRenderExternalOverlayOnlyMode() is true', () => {
48
- expect(ChartRuntimeResolver.getInstance().canRenderExternalOverlayOnlyMode()).toBe(true);
49
- });
50
-
51
- it('always-on render flags remain true', () => {
52
- const r = ChartRuntimeResolver.getInstance();
53
- expect(r.canRenderCandles()).toBe(true);
54
- expect(r.canRenderIndicators()).toBe(true);
55
- expect(r.canRenderDrawings()).toBe(true);
56
- expect(r.canRenderPositions()).toBe(true);
57
- expect(r.canRenderFills()).toBe(true);
58
- expect(r.canRenderOverlays()).toBe(true);
59
- });
60
-
61
- it('external ingestion is allowed in unmanaged mode', () => {
62
- expect(ChartRuntimeResolver.getInstance().canUseExternalIngestion()).toBe(true);
63
- });
64
- });
65
-
66
- describe('ChartRuntimeResolver — explicit unmanaged license', () => {
67
- beforeEach(() => setLicense(UNMANAGED_PAYLOAD));
68
-
69
- it('matches the no-license behaviour for all managed flags', () => {
70
- const r = ChartRuntimeResolver.getInstance();
71
- expect(r.canRenderOrderEntry()).toBe(false);
72
- expect(r.canRenderManagedTradingControls()).toBe(false);
73
- expect(r.canRenderExternalOverlayOnlyMode()).toBe(true);
74
- expect(r.canRenderCandles()).toBe(true);
75
- });
76
- });
77
-
78
- describe('ChartRuntimeResolver — managed license (full features)', () => {
79
- beforeEach(() => setLicense(MANAGED_PAYLOAD));
80
-
81
- it('isManagedMode() is true', () => {
82
- expect(ChartRuntimeResolver.getInstance().isManagedMode()).toBe(true);
83
- });
84
-
85
- it('external ingestion is blocked in managed mode', () => {
86
- expect(ChartRuntimeResolver.getInstance().canUseExternalIngestion()).toBe(false);
87
- });
88
-
89
- it('managed UI render flags are all true (no feature restrictions)', () => {
90
- const r = ChartRuntimeResolver.getInstance();
91
- expect(r.canRenderOrderEntry()).toBe(true);
92
- expect(r.canRenderBuySellButtons()).toBe(true);
93
- expect(r.canRenderOrderTicket()).toBe(true);
94
- expect(r.canRenderBracketControls()).toBe(true);
95
- expect(r.canRenderOrderModificationControls()).toBe(true);
96
- expect(r.canRenderManagedTradingControls()).toBe(true);
97
- });
98
-
99
- it('canRenderExternalOverlayOnlyMode() is false', () => {
100
- expect(ChartRuntimeResolver.getInstance().canRenderExternalOverlayOnlyMode()).toBe(false);
101
- });
102
-
103
- it('always-on flags still true in managed mode', () => {
104
- const r = ChartRuntimeResolver.getInstance();
105
- expect(r.canRenderCandles()).toBe(true);
106
- expect(r.canRenderPositions()).toBe(true);
107
- expect(r.canRenderFills()).toBe(true);
108
- expect(r.canRenderDrawings()).toBe(true);
109
- });
110
- });
111
-
112
- describe('ChartRuntimeResolver — feature flags restrict managed capabilities', () => {
113
- it('orderEntry: false disables order entry render flags', () => {
114
- setLicense({ licenseKey: 'mf', mode: 'managed', features: { orderEntry: false } });
115
- const r = ChartRuntimeResolver.getInstance();
116
- expect(r.canRenderOrderEntry()).toBe(false);
117
- expect(r.canRenderBuySellButtons()).toBe(false);
118
- expect(r.canRenderOrderTicket()).toBe(false);
119
- // bracket/drag also depend on order entry
120
- expect(r.canRenderBracketControls()).toBe(false);
121
- expect(r.canRenderOrderModificationControls()).toBe(false);
122
- });
123
-
124
- it('bracketOrders: false hides bracket controls but not basic order entry', () => {
125
- setLicense({
126
- licenseKey: 'mb',
127
- mode: 'managed',
128
- features: { orderEntry: true, bracketOrders: false },
129
- });
130
- const r = ChartRuntimeResolver.getInstance();
131
- expect(r.canRenderOrderEntry()).toBe(true);
132
- expect(r.canRenderBracketControls()).toBe(false);
133
- });
134
-
135
- it('draggableOrders: false hides modification controls', () => {
136
- setLicense({
137
- licenseKey: 'md',
138
- mode: 'managed',
139
- features: { orderEntry: true, draggableOrders: false },
140
- });
141
- const r = ChartRuntimeResolver.getInstance();
142
- expect(r.canRenderOrderEntry()).toBe(true);
143
- expect(r.canRenderOrderModificationControls()).toBe(false);
144
- });
145
-
146
- it('indicators: false disables indicator rendering in both modes', () => {
147
- setLicense({ licenseKey: 'ui', mode: 'unmanaged', features: { indicators: false } });
148
- expect(ChartRuntimeResolver.getInstance().canRenderIndicators()).toBe(false);
149
-
150
- setLicense({ licenseKey: 'mi', mode: 'managed', features: { indicators: false } });
151
- expect(ChartRuntimeResolver.getInstance().canRenderIndicators()).toBe(false);
152
- });
153
- });
154
-
155
- describe('ChartRuntimeResolver — getCapabilities() snapshot', () => {
156
- it('snapshot is consistent with individual method values (unmanaged)', () => {
157
- setLicense(UNMANAGED_PAYLOAD);
158
- const r = ChartRuntimeResolver.getInstance();
159
- const caps = r.getCapabilities();
160
-
161
- expect(caps.mode).toBe('unmanaged');
162
- expect(caps.renderOrderEntry).toBe(r.canRenderOrderEntry());
163
- expect(caps.renderBuySellButtons).toBe(r.canRenderBuySellButtons());
164
- expect(caps.renderBracketControls).toBe(r.canRenderBracketControls());
165
- expect(caps.renderManagedTradingControls).toBe(r.canRenderManagedTradingControls());
166
- expect(caps.renderExternalOverlayOnly).toBe(r.canRenderExternalOverlayOnlyMode());
167
- expect(caps.renderCandles).toBe(true);
168
- });
169
-
170
- it('snapshot is consistent with individual method values (managed)', () => {
171
- setLicense(MANAGED_PAYLOAD);
172
- const r = ChartRuntimeResolver.getInstance();
173
- const caps = r.getCapabilities();
174
-
175
- expect(caps.mode).toBe('managed');
176
- expect(caps.renderOrderEntry).toBe(r.canRenderOrderEntry());
177
- expect(caps.renderBracketControls).toBe(r.canRenderBracketControls());
178
- expect(caps.renderExternalOverlayOnly).toBe(false);
179
- expect(caps.renderCandles).toBe(true);
180
- });
181
- });
182
-
183
- describe('ChartRuntimeResolver — module-level convenience exports', () => {
184
- it('module-level functions reflect the singleton state', async () => {
185
- const {
186
- isManagedMode, isUnmanagedMode,
187
- canRenderOrderEntry, canRenderManagedTradingControls,
188
- canRenderExternalOverlayOnlyMode, canRenderCandles,
189
- getCapabilities,
190
- } = await import('../ChartRuntimeResolver');
191
-
192
- setLicense(null);
193
- expect(isUnmanagedMode()).toBe(true);
194
- expect(isManagedMode()).toBe(false);
195
- expect(canRenderOrderEntry()).toBe(false);
196
- expect(canRenderManagedTradingControls()).toBe(false);
197
- expect(canRenderExternalOverlayOnlyMode()).toBe(true);
198
- expect(canRenderCandles()).toBe(true);
199
- expect(getCapabilities().mode).toBe('unmanaged');
200
-
201
- setLicense(MANAGED_PAYLOAD);
202
- expect(isManagedMode()).toBe(true);
203
- expect(canRenderOrderEntry()).toBe(true);
204
- expect(canRenderManagedTradingControls()).toBe(true);
205
- expect(canRenderExternalOverlayOnlyMode()).toBe(false);
206
- });
207
- });
@@ -1,180 +0,0 @@
1
- /**
2
- * LicenseManager — unit tests
3
- *
4
- * Covers:
5
- * - Default mode is 'unmanaged' with no license installed
6
- * - loadLicense drives mode and features correctly
7
- * - validateLicense resolves a payload (placeholder logic)
8
- * - clear() resets to safe unmanaged defaults
9
- * - subscribe/unsubscribe fires on every mutation
10
- */
11
-
12
- import { describe, it, expect, beforeEach, vi } from 'vitest';
13
- import { LicenseManager } from '../LicenseManager';
14
- import type { LicensePayload } from '../licenseTypes';
15
-
16
- const FAKE_URL = 'http://localhost:4100/api/public/license/verify';
17
-
18
- // Stub fetch so validateLicense tests don't need a real server
19
- function stubFetch(response: object): void {
20
- vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
21
- ok: true,
22
- json: async () => response,
23
- }));
24
- }
25
-
26
- // Always work with a fresh singleton state between tests
27
- function reset() {
28
- LicenseManager.getInstance().clear();
29
- vi.unstubAllGlobals();
30
- }
31
-
32
- describe('LicenseManager — defaults', () => {
33
- beforeEach(reset);
34
-
35
- it('default mode is unmanaged when no license installed', () => {
36
- expect(LicenseManager.getInstance().getMode()).toBe('unmanaged');
37
- });
38
-
39
- it('getLicense() returns null before any license is loaded', () => {
40
- expect(LicenseManager.getInstance().getLicense()).toBeNull();
41
- });
42
-
43
- it('getFeatures() returns an empty object by default', () => {
44
- expect(LicenseManager.getInstance().getFeatures()).toEqual({});
45
- });
46
-
47
- it('hasFeature() returns false for any key when no license', () => {
48
- const lm = LicenseManager.getInstance();
49
- expect(lm.hasFeature('orderEntry')).toBe(false);
50
- expect(lm.hasFeature('bracketOrders')).toBe(false);
51
- });
52
- });
53
-
54
- describe('LicenseManager — loadLicense', () => {
55
- beforeEach(reset);
56
-
57
- it('sets mode to managed when payload.mode is managed', () => {
58
- const lm = LicenseManager.getInstance();
59
- const payload: LicensePayload = { licenseKey: 'k1', mode: 'managed' };
60
- lm.loadLicense(payload);
61
- expect(lm.getMode()).toBe('managed');
62
- });
63
-
64
- it('sets mode to unmanaged when payload.mode is unmanaged', () => {
65
- const lm = LicenseManager.getInstance();
66
- const payload: LicensePayload = { licenseKey: 'k2', mode: 'unmanaged' };
67
- lm.loadLicense(payload);
68
- expect(lm.getMode()).toBe('unmanaged');
69
- });
70
-
71
- it('exposes feature flags from the payload', () => {
72
- const lm = LicenseManager.getInstance();
73
- lm.loadLicense({
74
- licenseKey: 'k3',
75
- mode: 'managed',
76
- features: { orderEntry: true, bracketOrders: true, draggableOrders: false },
77
- });
78
- expect(lm.hasFeature('orderEntry')).toBe(true);
79
- expect(lm.hasFeature('bracketOrders')).toBe(true);
80
- expect(lm.hasFeature('draggableOrders')).toBe(false);
81
- });
82
-
83
- it('getLicense() returns the loaded payload', () => {
84
- const lm = LicenseManager.getInstance();
85
- const payload: LicensePayload = { licenseKey: 'k4', mode: 'managed' };
86
- lm.loadLicense(payload);
87
- expect(lm.getLicense()).toEqual(payload);
88
- });
89
- });
90
-
91
- describe('LicenseManager — validateLicense', () => {
92
- beforeEach(reset);
93
-
94
- it('resolves a LicensePayload for a non-empty key', async () => {
95
- stubFetch({ valid: true, licenseKey: 'TEST-KEY-XYZ', mode: 'unmanaged', plan: 'default', expiresAt: null, features: {} });
96
- const lm = LicenseManager.getInstance();
97
- const payload = await lm.validateLicense('test-key-xyz', FAKE_URL);
98
- expect(payload).toHaveProperty('licenseKey');
99
- expect(payload).toHaveProperty('mode');
100
- expect(lm.getLicense()).not.toBeNull();
101
- });
102
-
103
- it('rejects when the key is empty', async () => {
104
- const lm = LicenseManager.getInstance();
105
- await expect(lm.validateLicense('', FAKE_URL)).rejects.toThrow();
106
- });
107
-
108
- it('rejects when the key is whitespace-only', async () => {
109
- const lm = LicenseManager.getInstance();
110
- await expect(lm.validateLicense(' ', FAKE_URL)).rejects.toThrow();
111
- });
112
- });
113
-
114
- describe('LicenseManager — clear', () => {
115
- beforeEach(reset);
116
-
117
- it('resets mode to unmanaged after a managed license', () => {
118
- const lm = LicenseManager.getInstance();
119
- lm.loadLicense({ licenseKey: 'k', mode: 'managed' });
120
- expect(lm.getMode()).toBe('managed');
121
- lm.clear();
122
- expect(lm.getMode()).toBe('unmanaged');
123
- });
124
-
125
- it('nulls out getLicense() after clear', () => {
126
- const lm = LicenseManager.getInstance();
127
- lm.loadLicense({ licenseKey: 'k', mode: 'managed' });
128
- lm.clear();
129
- expect(lm.getLicense()).toBeNull();
130
- });
131
- });
132
-
133
- describe('LicenseManager — subscribe / notify', () => {
134
- beforeEach(reset);
135
-
136
- it('subscriber is called when loadLicense is invoked', () => {
137
- const lm = LicenseManager.getInstance();
138
- const spy = vi.fn();
139
- lm.subscribe(spy);
140
- lm.loadLicense({ licenseKey: 'k', mode: 'unmanaged' });
141
- expect(spy).toHaveBeenCalledTimes(1);
142
- });
143
-
144
- it('subscriber is called when clear() is invoked', () => {
145
- const lm = LicenseManager.getInstance();
146
- const spy = vi.fn();
147
- lm.subscribe(spy);
148
- lm.clear();
149
- expect(spy).toHaveBeenCalledTimes(1);
150
- });
151
-
152
- it('subscriber is called when validateLicense resolves', async () => {
153
- stubFetch({ valid: true, licenseKey: 'KEY', mode: 'unmanaged', plan: 'default', expiresAt: null, features: {} });
154
- const lm = LicenseManager.getInstance();
155
- const spy = vi.fn();
156
- lm.subscribe(spy);
157
- await lm.validateLicense('key', FAKE_URL);
158
- expect(spy).toHaveBeenCalledTimes(1);
159
- });
160
-
161
- it('unsubscribe stops future notifications', () => {
162
- const lm = LicenseManager.getInstance();
163
- const spy = vi.fn();
164
- const unsub = lm.subscribe(spy);
165
- unsub();
166
- lm.loadLicense({ licenseKey: 'k', mode: 'unmanaged' });
167
- expect(spy).not.toHaveBeenCalled();
168
- });
169
-
170
- it('multiple subscribers each fire independently', () => {
171
- const lm = LicenseManager.getInstance();
172
- const spyA = vi.fn();
173
- const spyB = vi.fn();
174
- lm.subscribe(spyA);
175
- lm.subscribe(spyB);
176
- lm.loadLicense({ licenseKey: 'k', mode: 'unmanaged' });
177
- expect(spyA).toHaveBeenCalledTimes(1);
178
- expect(spyB).toHaveBeenCalledTimes(1);
179
- });
180
- });
@@ -1,19 +0,0 @@
1
- export type LicenseMode = 'managed' | 'unmanaged';
2
-
3
- export interface LicenseFeatures {
4
- orderEntry?: boolean;
5
- overlays?: boolean;
6
- indicators?: boolean;
7
- managedTrading?: boolean;
8
- unmanagedIngestion?: boolean;
9
- draggableOrders?: boolean;
10
- bracketOrders?: boolean;
11
- }
12
-
13
- export interface LicensePayload {
14
- licenseKey: string;
15
- mode: LicenseMode;
16
- plan?: string;
17
- expires?: string;
18
- features?: LicenseFeatures;
19
- }
@@ -1,68 +0,0 @@
1
- /**
2
- * PineCompiler — public entry point for the Pine Script compatibility layer.
3
- *
4
- * Pipeline:
5
- * Pine source → PineLexer → PineToken[] → PineParser → PineProgram
6
- * → PineTranspiler → TScript source → TScriptIndicator runtime
7
- */
8
-
9
- import { PineParser } from './pine-parser';
10
- import { PineTranspiler } from './pine-transpiler';
11
- import { DiagnosticBag } from './diagnostics';
12
- import type { Diagnostic } from './diagnostics';
13
- import { TScriptIndicator } from '../tscript/TScriptIndicator';
14
- import type { OHLCV } from '@forgecharts/types';
15
- import type { IndicatorPoint } from '../core/IndicatorEngine';
16
-
17
- export type { Diagnostic };
18
- export type { DiagnosticSeverity } from './diagnostics';
19
-
20
- export interface PineCompileResult {
21
- /** The transpiled TScript source string. */
22
- readonly tscript: string;
23
- readonly diagnostics: readonly Diagnostic[];
24
- /** `true` when there are no error-severity diagnostics. */
25
- readonly ok: boolean;
26
- }
27
-
28
- export class PineCompiler {
29
- /**
30
- * Compile Pine Script source to TScript.
31
- * Parse errors throw a `SyntaxError`; semantic problems populate diagnostics.
32
- */
33
- compile(pineSource: string): PineCompileResult {
34
- const diag = new DiagnosticBag();
35
-
36
- const parser = new PineParser(pineSource);
37
- const program = parser.parse();
38
-
39
- const transpiler = new PineTranspiler(diag);
40
- const tscript = transpiler.transpile(program);
41
-
42
- return {
43
- tscript,
44
- diagnostics: diag.diagnostics,
45
- ok: !diag.hasErrors(),
46
- };
47
- }
48
-
49
- /**
50
- * Convenience: compile + run against a bar series.
51
- * Returns the plot outputs and any diagnostics.
52
- */
53
- static run(
54
- pineSource: string,
55
- bars: readonly OHLCV[],
56
- ): { plots: IndicatorPoint[][]; diagnostics: readonly Diagnostic[] } {
57
- const compiler = new PineCompiler();
58
- const result = compiler.compile(pineSource);
59
-
60
- if (!result.ok) {
61
- return { plots: [], diagnostics: result.diagnostics };
62
- }
63
-
64
- const indicator = new TScriptIndicator(result.tscript);
65
- const plots = indicator.run(bars);
66
- return { plots, diagnostics: result.diagnostics };
67
- }
68
- }
@@ -1,30 +0,0 @@
1
- /** Diagnostic emitted by the Pine compiler pipeline. */
2
- export type DiagnosticSeverity = 'error' | 'warning' | 'info';
3
-
4
- export interface Diagnostic {
5
- readonly severity: DiagnosticSeverity;
6
- readonly message: string;
7
- readonly line: number;
8
- readonly col: number;
9
- /** Machine-readable code, e.g. 'PINE_UNSUPPORTED_FN' */
10
- readonly code: string;
11
- }
12
-
13
- export class DiagnosticBag {
14
- private readonly _diags: Diagnostic[] = [];
15
-
16
- add(
17
- severity: DiagnosticSeverity,
18
- message: string,
19
- loc: { line: number; col: number },
20
- code: string,
21
- ): void {
22
- this._diags.push({ severity, message, line: loc.line, col: loc.col, code });
23
- }
24
-
25
- get diagnostics(): readonly Diagnostic[] { return this._diags; }
26
-
27
- hasErrors(): boolean {
28
- return this._diags.some(d => d.severity === 'error');
29
- }
30
- }