@forgecharts/sdk 1.1.28 → 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 (237) hide show
  1. package/dist/index.js +8100 -48
  2. package/dist/index.js.map +1 -1
  3. package/dist/internal.js +8851 -31
  4. package/dist/internal.js.map +1 -1
  5. package/dist/react/index.js +11558 -27
  6. package/dist/react/index.js.map +1 -1
  7. package/dist/react/internal.js +12147 -43
  8. package/dist/react/internal.js.map +1 -1
  9. package/package.json +1 -1
  10. package/dist/__tests__/backwardCompatibility.test.js +0 -159
  11. package/dist/__tests__/backwardCompatibility.test.js.map +0 -1
  12. package/dist/__tests__/candleInvariant.test.js +0 -415
  13. package/dist/__tests__/candleInvariant.test.js.map +0 -1
  14. package/dist/__tests__/public-api-surface.js +0 -38
  15. package/dist/__tests__/public-api-surface.js.map +0 -1
  16. package/dist/__tests__/timeframeBoundary.test.js +0 -452
  17. package/dist/__tests__/timeframeBoundary.test.js.map +0 -1
  18. package/dist/api/DrawingManager.js +0 -190
  19. package/dist/api/DrawingManager.js.map +0 -1
  20. package/dist/api/EventBus.js +0 -44
  21. package/dist/api/EventBus.js.map +0 -1
  22. package/dist/api/IndicatorDAG.js +0 -316
  23. package/dist/api/IndicatorDAG.js.map +0 -1
  24. package/dist/api/IndicatorRegistry.js +0 -39
  25. package/dist/api/IndicatorRegistry.js.map +0 -1
  26. package/dist/api/LayoutManager.js +0 -51
  27. package/dist/api/LayoutManager.js.map +0 -1
  28. package/dist/api/PaneManager.js +0 -119
  29. package/dist/api/PaneManager.js.map +0 -1
  30. package/dist/api/ReferenceAPI.js +0 -153
  31. package/dist/api/ReferenceAPI.js.map +0 -1
  32. package/dist/api/TChart.js +0 -765
  33. package/dist/api/TChart.js.map +0 -1
  34. package/dist/api/createChart.js +0 -42
  35. package/dist/api/createChart.js.map +0 -1
  36. package/dist/api/drawing tools/fib gann menu/fibRetracement.js +0 -22
  37. package/dist/api/drawing tools/fib gann menu/fibRetracement.js.map +0 -1
  38. package/dist/api/drawing tools/lines menu/crossLine.js +0 -16
  39. package/dist/api/drawing tools/lines menu/crossLine.js.map +0 -1
  40. package/dist/api/drawing tools/lines menu/disjointChannel.js +0 -59
  41. package/dist/api/drawing tools/lines menu/disjointChannel.js.map +0 -1
  42. package/dist/api/drawing tools/lines menu/extendedLine.js +0 -17
  43. package/dist/api/drawing tools/lines menu/extendedLine.js.map +0 -1
  44. package/dist/api/drawing tools/lines menu/flatTopBottom.js +0 -41
  45. package/dist/api/drawing tools/lines menu/flatTopBottom.js.map +0 -1
  46. package/dist/api/drawing tools/lines menu/horizontal.js +0 -19
  47. package/dist/api/drawing tools/lines menu/horizontal.js.map +0 -1
  48. package/dist/api/drawing tools/lines menu/horizontalRay.js +0 -20
  49. package/dist/api/drawing tools/lines menu/horizontalRay.js.map +0 -1
  50. package/dist/api/drawing tools/lines menu/infoLine.js +0 -107
  51. package/dist/api/drawing tools/lines menu/infoLine.js.map +0 -1
  52. package/dist/api/drawing tools/lines menu/insidePitchfork.js +0 -31
  53. package/dist/api/drawing tools/lines menu/insidePitchfork.js.map +0 -1
  54. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js +0 -15
  55. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js.map +0 -1
  56. package/dist/api/drawing tools/lines menu/parallelChannel.js +0 -43
  57. package/dist/api/drawing tools/lines menu/parallelChannel.js.map +0 -1
  58. package/dist/api/drawing tools/lines menu/pitchfork.js +0 -12
  59. package/dist/api/drawing tools/lines menu/pitchfork.js.map +0 -1
  60. package/dist/api/drawing tools/lines menu/ray.js +0 -23
  61. package/dist/api/drawing tools/lines menu/ray.js.map +0 -1
  62. package/dist/api/drawing tools/lines menu/regressionTrend.js +0 -127
  63. package/dist/api/drawing tools/lines menu/regressionTrend.js.map +0 -1
  64. package/dist/api/drawing tools/lines menu/schiffPitchfork.js +0 -15
  65. package/dist/api/drawing tools/lines menu/schiffPitchfork.js.map +0 -1
  66. package/dist/api/drawing tools/lines menu/trendAngle.js +0 -51
  67. package/dist/api/drawing tools/lines menu/trendAngle.js.map +0 -1
  68. package/dist/api/drawing tools/lines menu/trendline.js +0 -11
  69. package/dist/api/drawing tools/lines menu/trendline.js.map +0 -1
  70. package/dist/api/drawing tools/lines menu/vertical.js +0 -11
  71. package/dist/api/drawing tools/lines menu/vertical.js.map +0 -1
  72. package/dist/api/drawing tools/pointers menu/crosshair.js +0 -16
  73. package/dist/api/drawing tools/pointers menu/crosshair.js.map +0 -1
  74. package/dist/api/drawing tools/pointers menu/cursor.js +0 -15
  75. package/dist/api/drawing tools/pointers menu/cursor.js.map +0 -1
  76. package/dist/api/drawing tools/pointers menu/demonstration.js +0 -30
  77. package/dist/api/drawing tools/pointers menu/demonstration.js.map +0 -1
  78. package/dist/api/drawing tools/pointers menu/dot.js +0 -23
  79. package/dist/api/drawing tools/pointers menu/dot.js.map +0 -1
  80. package/dist/api/drawing tools/shapes menu/rectangle.js +0 -19
  81. package/dist/api/drawing tools/shapes menu/rectangle.js.map +0 -1
  82. package/dist/api/drawing tools/shapes menu/text.js +0 -25
  83. package/dist/api/drawing tools/shapes menu/text.js.map +0 -1
  84. package/dist/api/drawingUtils.js +0 -83
  85. package/dist/api/drawingUtils.js.map +0 -1
  86. package/dist/core/CanvasLayer.js +0 -56
  87. package/dist/core/CanvasLayer.js.map +0 -1
  88. package/dist/core/Chart.js +0 -839
  89. package/dist/core/Chart.js.map +0 -1
  90. package/dist/core/CoordTransform.js +0 -224
  91. package/dist/core/CoordTransform.js.map +0 -1
  92. package/dist/core/Crosshair.js +0 -186
  93. package/dist/core/Crosshair.js.map +0 -1
  94. package/dist/core/IndicatorEngine.js +0 -181
  95. package/dist/core/IndicatorEngine.js.map +0 -1
  96. package/dist/core/InteractionManager.js +0 -698
  97. package/dist/core/InteractionManager.js.map +0 -1
  98. package/dist/core/PriceScale.js +0 -113
  99. package/dist/core/PriceScale.js.map +0 -1
  100. package/dist/core/Series.js +0 -114
  101. package/dist/core/Series.js.map +0 -1
  102. package/dist/core/TimeScale.js +0 -150
  103. package/dist/core/TimeScale.js.map +0 -1
  104. package/dist/datafeed/DatafeedConnector.js +0 -268
  105. package/dist/datafeed/DatafeedConnector.js.map +0 -1
  106. package/dist/engine/CandleEngine.js +0 -318
  107. package/dist/engine/CandleEngine.js.map +0 -1
  108. package/dist/engine/__tests__/CandleEngine.test.js +0 -300
  109. package/dist/engine/__tests__/CandleEngine.test.js.map +0 -1
  110. package/dist/engine/candleInvariants.js +0 -134
  111. package/dist/engine/candleInvariants.js.map +0 -1
  112. package/dist/engine/mergeUtils.js +0 -64
  113. package/dist/engine/mergeUtils.js.map +0 -1
  114. package/dist/engine/timeframeUtils.js +0 -100
  115. package/dist/engine/timeframeUtils.js.map +0 -1
  116. package/dist/licensing/ChartRuntimeResolver.js +0 -310
  117. package/dist/licensing/ChartRuntimeResolver.js.map +0 -1
  118. package/dist/licensing/LicenseManager.js +0 -114
  119. package/dist/licensing/LicenseManager.js.map +0 -1
  120. package/dist/licensing/__tests__/ChartRuntimeResolver.test.js +0 -177
  121. package/dist/licensing/__tests__/ChartRuntimeResolver.test.js.map +0 -1
  122. package/dist/licensing/__tests__/LicenseManager.test.js +0 -153
  123. package/dist/licensing/__tests__/LicenseManager.test.js.map +0 -1
  124. package/dist/licensing/licenseTypes.js +0 -2
  125. package/dist/licensing/licenseTypes.js.map +0 -1
  126. package/dist/pine/PineCompiler.js +0 -44
  127. package/dist/pine/PineCompiler.js.map +0 -1
  128. package/dist/pine/diagnostics.js +0 -11
  129. package/dist/pine/diagnostics.js.map +0 -1
  130. package/dist/pine/index.js +0 -5
  131. package/dist/pine/index.js.map +0 -1
  132. package/dist/pine/pine-ast.js +0 -19
  133. package/dist/pine/pine-ast.js.map +0 -1
  134. package/dist/pine/pine-lexer.js +0 -249
  135. package/dist/pine/pine-lexer.js.map +0 -1
  136. package/dist/pine/pine-parser.js +0 -416
  137. package/dist/pine/pine-parser.js.map +0 -1
  138. package/dist/pine/pine-transpiler.js +0 -260
  139. package/dist/pine/pine-transpiler.js.map +0 -1
  140. package/dist/pixi/LayerName.js +0 -35
  141. package/dist/pixi/LayerName.js.map +0 -1
  142. package/dist/pixi/PixiCandlestickRenderer.js +0 -107
  143. package/dist/pixi/PixiCandlestickRenderer.js.map +0 -1
  144. package/dist/pixi/PixiChart.js +0 -367
  145. package/dist/pixi/PixiChart.js.map +0 -1
  146. package/dist/pixi/PixiCrosshairRenderer.js +0 -110
  147. package/dist/pixi/PixiCrosshairRenderer.js.map +0 -1
  148. package/dist/pixi/PixiDrawingRenderer.js +0 -111
  149. package/dist/pixi/PixiDrawingRenderer.js.map +0 -1
  150. package/dist/pixi/PixiGridRenderer.js +0 -114
  151. package/dist/pixi/PixiGridRenderer.js.map +0 -1
  152. package/dist/pixi/PixiLayerManager.js +0 -92
  153. package/dist/pixi/PixiLayerManager.js.map +0 -1
  154. package/dist/react/canvas/ChartCanvas.js +0 -604
  155. package/dist/react/canvas/ChartCanvas.js.map +0 -1
  156. package/dist/react/canvas/ChartContextMenu.js +0 -5
  157. package/dist/react/canvas/ChartContextMenu.js.map +0 -1
  158. package/dist/react/canvas/ChartSettingsDialog.js +0 -28
  159. package/dist/react/canvas/ChartSettingsDialog.js.map +0 -1
  160. package/dist/react/canvas/IndicatorLabel.js +0 -196
  161. package/dist/react/canvas/IndicatorLabel.js.map +0 -1
  162. package/dist/react/canvas/IndicatorPane.js +0 -395
  163. package/dist/react/canvas/IndicatorPane.js.map +0 -1
  164. package/dist/react/canvas/PointerOverlay.js +0 -61
  165. package/dist/react/canvas/PointerOverlay.js.map +0 -1
  166. package/dist/react/canvas/toolbars/LeftToolbar.js +0 -407
  167. package/dist/react/canvas/toolbars/LeftToolbar.js.map +0 -1
  168. package/dist/react/hooks/useChartCapabilities.js +0 -66
  169. package/dist/react/hooks/useChartCapabilities.js.map +0 -1
  170. package/dist/react/shell/ManagedAppShell.js +0 -440
  171. package/dist/react/shell/ManagedAppShell.js.map +0 -1
  172. package/dist/react/trading/TradingBridge.js +0 -73
  173. package/dist/react/trading/TradingBridge.js.map +0 -1
  174. package/dist/react/workspace/ChartWorkspace.js +0 -42
  175. package/dist/react/workspace/ChartWorkspace.js.map +0 -1
  176. package/dist/react/workspace/FloatingPanel.js +0 -82
  177. package/dist/react/workspace/FloatingPanel.js.map +0 -1
  178. package/dist/react/workspace/IndicatorsDialog.js +0 -121
  179. package/dist/react/workspace/IndicatorsDialog.js.map +0 -1
  180. package/dist/react/workspace/LayoutMenu.js +0 -113
  181. package/dist/react/workspace/LayoutMenu.js.map +0 -1
  182. package/dist/react/workspace/SymbolSearchDialog.js +0 -245
  183. package/dist/react/workspace/SymbolSearchDialog.js.map +0 -1
  184. package/dist/react/workspace/TabBar.js +0 -29
  185. package/dist/react/workspace/TabBar.js.map +0 -1
  186. package/dist/react/workspace/toolbars/BottomToolbar.js +0 -236
  187. package/dist/react/workspace/toolbars/BottomToolbar.js.map +0 -1
  188. package/dist/react/workspace/toolbars/RightToolbar.js +0 -18
  189. package/dist/react/workspace/toolbars/RightToolbar.js.map +0 -1
  190. package/dist/react/workspace/toolbars/TopToolbar.js +0 -82
  191. package/dist/react/workspace/toolbars/TopToolbar.js.map +0 -1
  192. package/dist/renderers/CandlestickRenderer.js +0 -98
  193. package/dist/renderers/CandlestickRenderer.js.map +0 -1
  194. package/dist/renderers/HistogramRenderer.js +0 -50
  195. package/dist/renderers/HistogramRenderer.js.map +0 -1
  196. package/dist/renderers/LineRenderer.js +0 -64
  197. package/dist/renderers/LineRenderer.js.map +0 -1
  198. package/dist/theme/colors.js +0 -19
  199. package/dist/theme/colors.js.map +0 -1
  200. package/dist/tools/barDivergenceCheck.js +0 -200
  201. package/dist/tools/barDivergenceCheck.js.map +0 -1
  202. package/dist/trading/TradingOverlayStore.js +0 -139
  203. package/dist/trading/TradingOverlayStore.js.map +0 -1
  204. package/dist/trading/UnmanagedIngestion.js +0 -114
  205. package/dist/trading/UnmanagedIngestion.js.map +0 -1
  206. package/dist/trading/__tests__/ManagedTradingController.test.js +0 -271
  207. package/dist/trading/__tests__/ManagedTradingController.test.js.map +0 -1
  208. package/dist/trading/__tests__/TradingOverlayStore.test.js +0 -267
  209. package/dist/trading/__tests__/TradingOverlayStore.test.js.map +0 -1
  210. package/dist/trading/__tests__/UnmanagedIngestion.test.js +0 -170
  211. package/dist/trading/__tests__/UnmanagedIngestion.test.js.map +0 -1
  212. package/dist/trading/managed/ManagedTradingController.js +0 -247
  213. package/dist/trading/managed/ManagedTradingController.js.map +0 -1
  214. package/dist/trading/managed/managedCapabilities.js +0 -79
  215. package/dist/trading/managed/managedCapabilities.js.map +0 -1
  216. package/dist/trading/managed/managedTypes.js +0 -13
  217. package/dist/trading/managed/managedTypes.js.map +0 -1
  218. package/dist/trading/tradingTypes.js +0 -8
  219. package/dist/trading/tradingTypes.js.map +0 -1
  220. package/dist/tscript/TScriptIndicator.js +0 -47
  221. package/dist/tscript/TScriptIndicator.js.map +0 -1
  222. package/dist/tscript/ast.js +0 -22
  223. package/dist/tscript/ast.js.map +0 -1
  224. package/dist/tscript/lexer.js +0 -187
  225. package/dist/tscript/lexer.js.map +0 -1
  226. package/dist/tscript/parser.js +0 -318
  227. package/dist/tscript/parser.js.map +0 -1
  228. package/dist/tscript/runtime.js +0 -475
  229. package/dist/tscript/runtime.js.map +0 -1
  230. package/dist/tscript/series.js +0 -79
  231. package/dist/tscript/series.js.map +0 -1
  232. package/dist/types/IChart.js +0 -2
  233. package/dist/types/IChart.js.map +0 -1
  234. package/dist/types/IRenderer.js +0 -2
  235. package/dist/types/IRenderer.js.map +0 -1
  236. package/dist/types/ISeries.js +0 -2
  237. package/dist/types/ISeries.js.map +0 -1
@@ -1,260 +0,0 @@
1
- /**
2
- * Pine Script → TScript transpiler.
3
- *
4
- * Walks a `PineProgram` AST and emits a TScript source string that is
5
- * directly executable by the existing `TScriptRuntime`.
6
- */
7
- // ─── Namespace → TScript function mappings ───────────────────────────────────
8
- const TA_MAP = {
9
- sma: 'sma',
10
- ema: 'ema',
11
- rsi: 'rsi',
12
- wma: 'wma',
13
- rma: 'rma',
14
- stdev: 'stdev',
15
- highest: 'highest',
16
- lowest: 'lowest',
17
- change: 'change',
18
- mom: 'mom',
19
- atr: 'atr',
20
- crossover: 'crossover',
21
- crossunder: 'crossunder',
22
- barssince: 'barssince',
23
- };
24
- const MATH_MAP = {
25
- abs: 'abs',
26
- max: 'max',
27
- min: 'min',
28
- round: 'round',
29
- floor: 'floor',
30
- ceil: 'ceil',
31
- sqrt: 'sqrt',
32
- log: 'log',
33
- pow: 'pow',
34
- sign: 'sign',
35
- exp: 'exp',
36
- };
37
- const COLOR_MAP = {
38
- red: '"#f23645"',
39
- green: '"#26a69a"',
40
- blue: '"#2196f3"',
41
- white: '"#ffffff"',
42
- black: '"#000000"',
43
- yellow: '"#ffeb3b"',
44
- orange: '"#ff9800"',
45
- purple: '"#9c27b0"',
46
- aqua: '"#00bcd4"',
47
- gray: '"#787b86"',
48
- silver: '"#b2b5be"',
49
- lime: '"#4caf50"',
50
- maroon: '"#880000"',
51
- navy: '"#000080"',
52
- olive: '"#808000"',
53
- teal: '"#008080"',
54
- fuchsia: '"#ff00ff"',
55
- };
56
- /** Functions that produce no useful TScript equivalent — emit a warning. */
57
- const UNSUPPORTED_FN = new Set([
58
- 'plotshape', 'plotarrow', 'plotbar', 'plotcandle',
59
- 'barcolor', 'bgcolor', 'alertcondition', 'alert',
60
- 'strategy', 'label', 'line', 'box', 'table',
61
- 'request',
62
- ]);
63
- export class PineTranspiler {
64
- _diag;
65
- _indent = 0;
66
- _out = [];
67
- constructor(diag) {
68
- this._diag = diag;
69
- }
70
- transpile(prog) {
71
- this._out = [];
72
- this._indent = 0;
73
- for (const stmt of prog.stmts) {
74
- this._stmt(stmt);
75
- }
76
- return this._out.join('');
77
- }
78
- // ─── Statements ─────────────────────────────────────────────────────────────
79
- _stmt(s) {
80
- switch (s.kind) {
81
- case 'PineIndicatorDecl': return this._indicatorDecl(s);
82
- case 'PineVarDecl': return this._varDecl(s);
83
- case 'PineAssign': return this._assign(s);
84
- case 'PineExprStmt': return this._exprStmt(s);
85
- case 'PineIf': return this._ifStmt(s);
86
- }
87
- }
88
- _indicatorDecl(s) {
89
- // indicator("Title", overlay=true) → indicator("Title")
90
- const title = s.args[0];
91
- const titleStr = title ? this._expr(title) : '"Script"';
92
- this._line(`indicator(${titleStr})`);
93
- }
94
- _varDecl(s) {
95
- // var x = expr → x = expr (TScript vars persist by default)
96
- this._line(`${s.name} = ${this._expr(s.value)}`);
97
- }
98
- _assign(s) {
99
- // := and = both map to = in TScript
100
- this._line(`${s.name} = ${this._expr(s.value)}`);
101
- }
102
- _exprStmt(s) {
103
- const expr = s.expr;
104
- // Check for unsupported top-level calls before emitting
105
- if ((expr.kind === 'PineCall' || expr.kind === 'PineNsCall') &&
106
- UNSUPPORTED_FN.has(expr.kind === 'PineCall' ? expr.fn : expr.fn)) {
107
- const name = expr.kind === 'PineCall' ? expr.fn : `${expr.namespace}.${expr.fn}`;
108
- this._diag.add('warning', `'${name}()' is not supported and will be ignored`, s.loc, 'PINE_UNSUPPORTED_FN');
109
- this._line(`// ${name}() not supported`);
110
- return;
111
- }
112
- this._line(this._expr(expr));
113
- }
114
- _ifStmt(s) {
115
- this._line(`if ${this._expr(s.condition)}`);
116
- this._indent++;
117
- for (const st of s.then)
118
- this._stmt(st);
119
- if (s.then.length === 0)
120
- this._line('0'); // empty block guard
121
- this._indent--;
122
- if (s.else_.length > 0) {
123
- this._line('else');
124
- this._indent++;
125
- for (const st of s.else_)
126
- this._stmt(st);
127
- this._indent--;
128
- }
129
- }
130
- // ─── Expressions ────────────────────────────────────────────────────────────
131
- _expr(e) {
132
- switch (e.kind) {
133
- case 'PineNumberLit': return this._numLit(e);
134
- case 'PineStringLit': return `"${e.value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
135
- case 'PineBoolLit': return e.value ? 'true' : 'false';
136
- case 'PineNa': return 'na';
137
- case 'PineIdent': return e.name;
138
- case 'PineNsCall': return this._nsCall(e);
139
- case 'PineCall': return this._call(e);
140
- case 'PineIndex': return `${this._expr(e.series)}[${this._expr(e.index)}]`;
141
- case 'PineBinary': return this._binary(e);
142
- case 'PineUnary': return this._unary(e);
143
- case 'PineTernary': return `${this._expr(e.condition)} ? ${this._expr(e.consequent)} : ${this._expr(e.alternate)}`;
144
- case 'PineMember': return this._member(e);
145
- // PineColorLit is resolved via PineMember for color.red etc
146
- default: return '0';
147
- }
148
- }
149
- _numLit(e) {
150
- // Preserve integer formatting when possible
151
- return Number.isInteger(e.value) ? String(e.value) : String(e.value);
152
- }
153
- _nsCall(e) {
154
- const { namespace: ns, fn } = e;
155
- if (ns === 'ta') {
156
- const mapped = TA_MAP[fn];
157
- if (mapped) {
158
- const args = this._positionalArgs(e.args);
159
- return `${mapped}(${args})`;
160
- }
161
- this._diag.add('warning', `'ta.${fn}()' is not supported`, e.loc, 'PINE_UNSUPPORTED_FN');
162
- return `/* ta.${fn} not supported */ 0`;
163
- }
164
- if (ns === 'math') {
165
- const mapped = MATH_MAP[fn];
166
- if (mapped) {
167
- const args = this._positionalArgs(e.args);
168
- return `${mapped}(${args})`;
169
- }
170
- this._diag.add('warning', `'math.${fn}()' is not supported`, e.loc, 'PINE_UNSUPPORTED_FN');
171
- return `/* math.${fn} not supported */ 0`;
172
- }
173
- if (ns === 'input') {
174
- return this._inputNsCall(e);
175
- }
176
- if (ns === 'strategy' || ns === 'label' || ns === 'line' || ns === 'box' || ns === 'table' || ns === 'request') {
177
- this._diag.add('warning', `'${ns}.${fn}()' is not supported`, e.loc, 'PINE_UNSUPPORTED_FN');
178
- return `/* ${ns}.${fn} not supported */ 0`;
179
- }
180
- // Generic fallthrough
181
- this._diag.add('warning', `'${ns}.${fn}()' is not supported`, e.loc, 'PINE_UNSUPPORTED_FN');
182
- return `/* ${ns}.${fn} not supported */ 0`;
183
- }
184
- _inputNsCall(e) {
185
- // input.int(v, ...) / input.float(v, ...) / input.bool(v, ...) → input(v)
186
- // input.source(close) → the source arg value
187
- if (e.fn === 'source') {
188
- return e.args[0] ? this._expr(e.args[0]) : 'close';
189
- }
190
- const defVal = e.args[0] ?? e.namedArgs.get('defval');
191
- return defVal ? `input(${this._expr(defVal)})` : 'input(0)';
192
- }
193
- _call(e) {
194
- if (UNSUPPORTED_FN.has(e.fn)) {
195
- this._diag.add('warning', `'${e.fn}()' is not supported and will be ignored`, e.loc, 'PINE_UNSUPPORTED_FN');
196
- return `/* ${e.fn} not supported */ 0`;
197
- }
198
- if (e.fn === 'input') {
199
- const defVal = e.args[0] ?? e.namedArgs.get('defval');
200
- return defVal ? `input(${this._expr(defVal)})` : 'input(0)';
201
- }
202
- if (e.fn === 'plot') {
203
- return this._plotCall(e);
204
- }
205
- if (e.fn === 'indicator') {
206
- const title = e.args[0];
207
- const titleStr = title ? this._expr(title) : '"Script"';
208
- return `indicator(${titleStr})`;
209
- }
210
- // Generic call — drop unsupported named args, keep positional
211
- const args = this._positionalArgs(e.args);
212
- return `${e.fn}(${args})`;
213
- }
214
- _plotCall(e) {
215
- // plot(series, title="...", color=..., linewidth=...) → plot(series)
216
- // We only pass the first positional arg; named args are cosmetic only
217
- const series = e.args[0];
218
- if (!series)
219
- return '/* plot() missing series */';
220
- return `plot(${this._expr(series)})`;
221
- }
222
- _member(e) {
223
- if (e.object === 'color') {
224
- const hex = COLOR_MAP[e.prop];
225
- if (hex)
226
- return hex;
227
- this._diag.add('info', `'color.${e.prop}' is not a known color`, e.loc, 'PINE_UNKNOWN_COLOR');
228
- return '"#888888"';
229
- }
230
- if (e.object === 'line' || e.object === 'label' || e.object === 'box') {
231
- // style constants — just return as string
232
- return `"${e.prop}"`;
233
- }
234
- // bar_index, time, etc. are plain idents
235
- if (e.object === 'timeframe' || e.object === 'syminfo' || e.object === 'session') {
236
- this._diag.add('info', `'${e.object}.${e.prop}' is not supported`, e.loc, 'PINE_UNSUPPORTED_FN');
237
- return '0';
238
- }
239
- return `${e.object}_${e.prop}`; // fallback
240
- }
241
- _binary(e) {
242
- const l = this._expr(e.left);
243
- const r = this._expr(e.right);
244
- return `(${l} ${e.op} ${r})`;
245
- }
246
- _unary(e) {
247
- if (e.op === 'not')
248
- return `not ${this._expr(e.operand)}`;
249
- return `${e.op}${this._expr(e.operand)}`;
250
- }
251
- _positionalArgs(args) {
252
- return args.map(a => this._expr(a)).join(', ');
253
- }
254
- // ─── Output helpers ─────────────────────────────────────────────────────────
255
- _line(code) {
256
- const pad = ' '.repeat(this._indent);
257
- this._out.push(`${pad}${code}\n`);
258
- }
259
- }
260
- //# sourceMappingURL=pine-transpiler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pine-transpiler.js","sourceRoot":"","sources":["../../src/pine/pine-transpiler.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- /**
2
- * LayerName — ordered Z-index identifiers for the seven render layers.
3
- *
4
- * Layers are sorted ascending: lowest = farthest back, highest = topmost.
5
- * The numeric values are used directly as PixiJS Container `zIndex` values.
6
- */
7
- export var LayerName;
8
- (function (LayerName) {
9
- LayerName[LayerName["Background"] = 0] = "Background";
10
- LayerName[LayerName["PriceSeries"] = 1] = "PriceSeries";
11
- LayerName[LayerName["Indicator"] = 2] = "Indicator";
12
- LayerName[LayerName["Drawing"] = 3] = "Drawing";
13
- LayerName[LayerName["TradingOverlay"] = 4] = "TradingOverlay";
14
- LayerName[LayerName["Interaction"] = 5] = "Interaction";
15
- LayerName[LayerName["UIOverlay"] = 6] = "UIOverlay";
16
- })(LayerName || (LayerName = {}));
17
- export const LAYER_NAMES = [
18
- LayerName.Background,
19
- LayerName.PriceSeries,
20
- LayerName.Indicator,
21
- LayerName.Drawing,
22
- LayerName.TradingOverlay,
23
- LayerName.Interaction,
24
- LayerName.UIOverlay,
25
- ];
26
- export const LAYER_LABEL = {
27
- [LayerName.Background]: 'background',
28
- [LayerName.PriceSeries]: 'priceSeries',
29
- [LayerName.Indicator]: 'indicator',
30
- [LayerName.Drawing]: 'drawing',
31
- [LayerName.TradingOverlay]: 'tradingOverlay',
32
- [LayerName.Interaction]: 'interaction',
33
- [LayerName.UIOverlay]: 'uiOverlay',
34
- };
35
- //# sourceMappingURL=LayerName.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LayerName.js","sourceRoot":"","sources":["../../src/pixi/LayerName.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAN,IAAkB,SAQjB;AARD,WAAkB,SAAS;IACzB,qDAAgB,CAAA;IAChB,uDAAgB,CAAA;IAChB,mDAAgB,CAAA;IAChB,+CAAgB,CAAA;IAChB,6DAAkB,CAAA;IAClB,uDAAgB,CAAA;IAChB,mDAAgB,CAAA;AAClB,CAAC,EARiB,SAAS,KAAT,SAAS,QAQ1B;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,SAAS,CAAC,UAAU;IACpB,SAAS,CAAC,WAAW;IACrB,SAAS,CAAC,SAAS;IACnB,SAAS,CAAC,OAAO;IACjB,SAAS,CAAC,cAAc;IACxB,SAAS,CAAC,WAAW;IACrB,SAAS,CAAC,SAAS;CACX,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,CAAC,SAAS,CAAC,UAAU,CAAC,EAAM,YAAY;IACxC,CAAC,SAAS,CAAC,WAAW,CAAC,EAAK,aAAa;IACzC,CAAC,SAAS,CAAC,SAAS,CAAC,EAAO,WAAW;IACvC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAS,SAAS;IACrC,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,gBAAgB;IAC5C,CAAC,SAAS,CAAC,WAAW,CAAC,EAAK,aAAa;IACzC,CAAC,SAAS,CAAC,SAAS,CAAC,EAAO,WAAW;CACxC,CAAC"}
@@ -1,107 +0,0 @@
1
- import { Graphics } from 'pixi.js';
2
- const UP_COLOR = 0x26a641; // green
3
- const DOWN_COLOR = 0xf85149; // red
4
- const MIN_BODY_H = 1;
5
- const MAX_BAR_W = 20;
6
- const MIN_BAR_W = 1;
7
- /**
8
- * PixiCandlestickRenderer — renders OHLCV data as GPU-batched candlesticks.
9
- *
10
- * Uses a single re-used `Graphics` object that is fully cleared and redrawn
11
- * on each invalidation, taking advantage of PixiJS's WebGL batching for
12
- * high-performance rendering of large datasets.
13
- */
14
- export class PixiCandlestickRenderer {
15
- _upColor;
16
- _downColor;
17
- _gfx;
18
- constructor(layer, _upColor = UP_COLOR, _downColor = DOWN_COLOR) {
19
- this._upColor = _upColor;
20
- this._downColor = _downColor;
21
- this._gfx = new Graphics();
22
- layer.addChild(this._gfx);
23
- }
24
- draw(bars, transform) {
25
- const gfx = this._gfx;
26
- gfx.clear();
27
- if (bars.length === 0)
28
- return;
29
- const { plotWidth: pw, plotHeight: ph } = transform;
30
- const { from, to } = transform.timeRange;
31
- // Infer candle interval from median gap between consecutive bars (seconds)
32
- let candleInterval = 0;
33
- if (bars.length >= 2) {
34
- const deltas = [];
35
- for (let i = 1; i < Math.min(bars.length, 20); i++) {
36
- const d = bars[i].time - bars[i - 1].time;
37
- if (d > 0)
38
- deltas.push(d);
39
- }
40
- if (deltas.length > 0) {
41
- deltas.sort((a, b) => a - b);
42
- candleInterval = deltas[Math.floor(deltas.length / 2)];
43
- }
44
- }
45
- const visibleSpan = to - from;
46
- const pps = visibleSpan > 0 ? pw / visibleSpan : 1;
47
- const barPitch = candleInterval > 0
48
- ? candleInterval * pps
49
- : pw / Math.max(1, bars.length);
50
- const gap = Math.max(1, Math.round(barPitch * 0.15));
51
- const barW = Math.min(MAX_BAR_W, Math.max(MIN_BAR_W, Math.floor(barPitch) - gap));
52
- const halfW = Math.max(0.5, barW / 2);
53
- for (const bar of bars) {
54
- const x = transform.timeToX(bar.time);
55
- // Skip entirely off-screen bars
56
- if (x < -barW || x > pw + barW)
57
- continue;
58
- const yOpen = transform.priceToY(bar.open);
59
- const yClose = transform.priceToY(bar.close);
60
- const yHigh = transform.priceToY(bar.high);
61
- const yLow = transform.priceToY(bar.low);
62
- const bullish = bar.close >= bar.open;
63
- const color = bullish ? this._upColor : this._downColor;
64
- const bodyTop = Math.min(yOpen, yClose);
65
- const bodyH = Math.max(MIN_BODY_H, Math.abs(yClose - yOpen));
66
- // Clip to plot area
67
- if (bodyTop > ph || bodyTop + bodyH < 0)
68
- continue;
69
- // Wick
70
- gfx
71
- .moveTo(x, yHigh)
72
- .lineTo(x, bodyTop)
73
- .moveTo(x, bodyTop + bodyH)
74
- .lineTo(x, yLow)
75
- .stroke({ color, width: 1 });
76
- // Body
77
- gfx
78
- .rect(x - halfW, bodyTop, barW, bodyH)
79
- .fill({ color });
80
- }
81
- }
82
- /**
83
- * Converts OHLCV bars to Heikin-Ashi values before drawing.
84
- */
85
- drawHeikinAshi(bars, transform) {
86
- this.draw(this._toHeikinAshi(bars), transform);
87
- }
88
- _toHeikinAshi(bars) {
89
- const result = [];
90
- for (let i = 0; i < bars.length; i++) {
91
- const bar = bars[i];
92
- const prev = result[i - 1] ?? bar;
93
- const haClose = (bar.open + bar.high + bar.low + bar.close) / 4;
94
- const haOpen = (prev.open + prev.close) / 2;
95
- result.push({
96
- time: bar.time,
97
- open: haOpen,
98
- high: Math.max(bar.high, haOpen, haClose),
99
- low: Math.min(bar.low, haOpen, haClose),
100
- close: haClose,
101
- volume: bar.volume,
102
- });
103
- }
104
- return result;
105
- }
106
- }
107
- //# sourceMappingURL=PixiCandlestickRenderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PixiCandlestickRenderer.js","sourceRoot":"","sources":["../../src/pixi/PixiCandlestickRenderer.ts"],"names":[],"mappings":"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"}