@363045841yyt/klinechart-core 0.8.1-alpha.4 → 0.8.2

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 (167) hide show
  1. package/dist/controllers/createChartController.d.ts.map +1 -1
  2. package/dist/controllers/createChartController.js +21 -1
  3. package/dist/controllers/createChartController.js.map +1 -1
  4. package/dist/controllers/types.d.ts +6 -1
  5. package/dist/controllers/types.d.ts.map +1 -1
  6. package/dist/data-fetchers/baostock.js +3 -3
  7. package/dist/data-fetchers/baostock.js.map +1 -1
  8. package/dist/data-fetchers/dataBuffer.d.ts +5 -1
  9. package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
  10. package/dist/data-fetchers/dataBuffer.js +85 -48
  11. package/dist/data-fetchers/dataBuffer.js.map +1 -1
  12. package/dist/data-fetchers/gotdx.d.ts +3 -0
  13. package/dist/data-fetchers/gotdx.d.ts.map +1 -0
  14. package/dist/data-fetchers/gotdx.js +101 -0
  15. package/dist/data-fetchers/gotdx.js.map +1 -0
  16. package/dist/data-fetchers/hundred-mock.d.ts.map +1 -1
  17. package/dist/data-fetchers/hundred-mock.js +28 -5
  18. package/dist/data-fetchers/hundred-mock.js.map +1 -1
  19. package/dist/data-fetchers/index.d.ts +1 -0
  20. package/dist/data-fetchers/index.d.ts.map +1 -1
  21. package/dist/data-fetchers/index.js +1 -0
  22. package/dist/data-fetchers/index.js.map +1 -1
  23. package/dist/data-fetchers/router.d.ts.map +1 -1
  24. package/dist/data-fetchers/router.js +3 -0
  25. package/dist/data-fetchers/router.js.map +1 -1
  26. package/dist/data-fetchers/thousand-mock.d.ts.map +1 -1
  27. package/dist/data-fetchers/thousand-mock.js +24 -14
  28. package/dist/data-fetchers/thousand-mock.js.map +1 -1
  29. package/dist/data-fetchers/tradingview.d.ts.map +1 -1
  30. package/dist/data-fetchers/tradingview.js +12 -6
  31. package/dist/data-fetchers/tradingview.js.map +1 -1
  32. package/dist/engine/chart.d.ts +29 -367
  33. package/dist/engine/chart.d.ts.map +1 -1
  34. package/dist/engine/chart.js +239 -1842
  35. package/dist/engine/chart.js.map +1 -1
  36. package/dist/engine/chartContext.d.ts +24 -0
  37. package/dist/engine/chartContext.d.ts.map +1 -0
  38. package/dist/engine/chartContext.js +19 -0
  39. package/dist/engine/chartContext.js.map +1 -0
  40. package/dist/engine/chartTypes.d.ts +77 -0
  41. package/dist/engine/chartTypes.d.ts.map +1 -0
  42. package/dist/engine/chartTypes.js +2 -0
  43. package/dist/engine/chartTypes.js.map +1 -0
  44. package/dist/engine/data/chartDataManager.d.ts +103 -0
  45. package/dist/engine/data/chartDataManager.d.ts.map +1 -0
  46. package/dist/engine/data/chartDataManager.js +593 -0
  47. package/dist/engine/data/chartDataManager.js.map +1 -0
  48. package/dist/engine/indicators/chartIndicatorManager.d.ts +102 -0
  49. package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -0
  50. package/dist/engine/indicators/chartIndicatorManager.js +437 -0
  51. package/dist/engine/indicators/chartIndicatorManager.js.map +1 -0
  52. package/dist/engine/layout/chartPaneLayout.d.ts +53 -0
  53. package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -0
  54. package/dist/engine/layout/chartPaneLayout.js +388 -0
  55. package/dist/engine/layout/chartPaneLayout.js.map +1 -0
  56. package/dist/engine/render/chartRenderer.d.ts +86 -0
  57. package/dist/engine/render/chartRenderer.d.ts.map +1 -0
  58. package/dist/engine/render/chartRenderer.js +440 -0
  59. package/dist/engine/render/chartRenderer.js.map +1 -0
  60. package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
  61. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +73 -7
  62. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
  63. package/dist/engine/renderers/comparisonLine.d.ts.map +1 -1
  64. package/dist/engine/renderers/comparisonLine.js +25 -11
  65. package/dist/engine/renderers/comparisonLine.js.map +1 -1
  66. package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
  67. package/dist/engine/renderers/timeAxis.js +1 -0
  68. package/dist/engine/renderers/timeAxis.js.map +1 -1
  69. package/dist/engine/subPaneManager.d.ts +27 -6
  70. package/dist/engine/subPaneManager.d.ts.map +1 -1
  71. package/dist/engine/subPaneManager.js +54 -56
  72. package/dist/engine/subPaneManager.js.map +1 -1
  73. package/dist/engine/utils/chartZoomController.d.ts +33 -0
  74. package/dist/engine/utils/chartZoomController.d.ts.map +1 -0
  75. package/dist/engine/utils/chartZoomController.js +66 -0
  76. package/dist/engine/utils/chartZoomController.js.map +1 -0
  77. package/dist/engine/viewport/chartViewportManager.d.ts +72 -0
  78. package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -0
  79. package/dist/engine/viewport/chartViewportManager.js +249 -0
  80. package/dist/engine/viewport/chartViewportManager.js.map +1 -0
  81. package/dist/index.d.ts +1 -0
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +1 -0
  84. package/dist/index.js.map +1 -1
  85. package/dist/plugin/types.d.ts +3 -0
  86. package/dist/plugin/types.d.ts.map +1 -1
  87. package/dist/plugin/types.js.map +1 -1
  88. package/dist/semantic/index.d.ts +1 -1
  89. package/dist/semantic/index.d.ts.map +1 -1
  90. package/dist/semantic/index.js.map +1 -1
  91. package/dist/semantic/schema.json +1 -1
  92. package/dist/semantic/types.d.ts +2 -1
  93. package/dist/semantic/types.d.ts.map +1 -1
  94. package/dist/tokens/theme-china.d.ts.map +1 -1
  95. package/dist/tokens/theme-china.js +0 -4
  96. package/dist/tokens/theme-china.js.map +1 -1
  97. package/dist/tokens/theme-dark.d.ts.map +1 -1
  98. package/dist/tokens/theme-dark.js +0 -4
  99. package/dist/tokens/theme-dark.js.map +1 -1
  100. package/dist/tokens/theme-light.d.ts.map +1 -1
  101. package/dist/tokens/theme-light.js +1 -5
  102. package/dist/tokens/theme-light.js.map +1 -1
  103. package/dist/tokens/types.d.ts +0 -4
  104. package/dist/tokens/types.d.ts.map +1 -1
  105. package/dist/types/price.d.ts +2 -0
  106. package/dist/types/price.d.ts.map +1 -1
  107. package/dist/types/price.js.map +1 -1
  108. package/dist/utils/dateFormat.d.ts +25 -0
  109. package/dist/utils/dateFormat.d.ts.map +1 -1
  110. package/dist/utils/dateFormat.js +78 -0
  111. package/dist/utils/dateFormat.js.map +1 -1
  112. package/dist/utils/kLineDraw/axis.d.ts +2 -0
  113. package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
  114. package/dist/utils/kLineDraw/axis.js +11 -6
  115. package/dist/utils/kLineDraw/axis.js.map +1 -1
  116. package/dist/version.d.ts +1 -1
  117. package/dist/version.d.ts.map +1 -1
  118. package/dist/version.js +1 -1
  119. package/dist/version.js.map +1 -1
  120. package/package.json +1 -1
  121. package/src/controllers/createChartController.ts +39 -10
  122. package/src/controllers/types.ts +6 -1
  123. package/src/data-fetchers/__tests__/dataBuffer.test.ts +5 -2
  124. package/src/data-fetchers/baostock.ts +3 -3
  125. package/src/data-fetchers/dataBuffer.ts +70 -23
  126. package/src/data-fetchers/gotdx.ts +138 -0
  127. package/src/data-fetchers/hundred-mock.ts +35 -5
  128. package/src/data-fetchers/index.ts +1 -0
  129. package/src/data-fetchers/router.ts +3 -0
  130. package/src/data-fetchers/thousand-mock.ts +30 -14
  131. package/src/data-fetchers/tradingview.ts +12 -6
  132. package/src/engine/__tests__/subPaneManager.test.ts +154 -0
  133. package/src/engine/chart.ts +252 -2250
  134. package/src/engine/chartContext.ts +34 -0
  135. package/src/engine/chartTypes.ts +88 -0
  136. package/src/engine/data/chartDataManager.ts +695 -0
  137. package/src/engine/indicators/__tests__/chartIndicatorManager.test.ts +103 -0
  138. package/src/engine/indicators/chartIndicatorManager.ts +566 -0
  139. package/src/engine/layout/chartPaneLayout.ts +474 -0
  140. package/src/engine/render/chartRenderer.ts +581 -0
  141. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +99 -13
  142. package/src/engine/renderers/__tests__/boll.renderer.test.ts +1 -0
  143. package/src/engine/renderers/__tests__/ene.renderer.test.ts +1 -0
  144. package/src/engine/renderers/__tests__/expma.renderer.test.ts +1 -0
  145. package/src/engine/renderers/__tests__/ma.renderer.test.ts +1 -0
  146. package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +1 -0
  147. package/src/engine/renderers/__tests__/yAxis.renderer.test.ts +1 -0
  148. package/src/engine/renderers/comparisonLine.ts +25 -11
  149. package/src/engine/renderers/timeAxis.ts +1 -0
  150. package/src/engine/subPaneManager.ts +75 -59
  151. package/src/engine/utils/chartZoomController.ts +104 -0
  152. package/src/engine/viewport/chartViewportManager.ts +310 -0
  153. package/src/index.ts +1 -0
  154. package/src/plugin/types.ts +3 -0
  155. package/src/semantic/index.ts +1 -0
  156. package/src/semantic/schema.json +1 -1
  157. package/src/semantic/types.ts +3 -1
  158. package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +1 -9
  159. package/src/tokens/theme-china.ts +0 -4
  160. package/src/tokens/theme-dark.ts +0 -4
  161. package/src/tokens/theme-light.ts +2 -6
  162. package/src/tokens/types.ts +0 -4
  163. package/src/types/price.ts +2 -0
  164. package/src/utils/dateFormat.ts +85 -0
  165. package/src/utils/kLineDraw/axis.ts +13 -6
  166. package/src/version.ts +1 -1
  167. package/src/engine/chart.d.ts +0 -626
@@ -0,0 +1,101 @@
1
+ const PERIOD_TO_CATEGORY = {
2
+ '1min': 8,
3
+ '5min': 0,
4
+ '15min': 1,
5
+ '30min': 2,
6
+ '60min': 3,
7
+ daily: 4,
8
+ weekly: 5,
9
+ monthly: 6,
10
+ quarterly: 10,
11
+ yearly: 11,
12
+ };
13
+ const ADJUST_MAP = {
14
+ none: 0,
15
+ qfq: 1,
16
+ hfq: 2,
17
+ splits: 0,
18
+ };
19
+ const EXCHANGE_EX_CATEGORY = {
20
+ US: 74,
21
+ HK: 71,
22
+ SG: 78,
23
+ DE: 73,
24
+ };
25
+ function mapBar(item, code) {
26
+ const ts = new Date(item.DateTime).getTime();
27
+ return {
28
+ timestamp: ts,
29
+ date: item.DateTime.split('T')[0],
30
+ open: item.Open,
31
+ high: item.High,
32
+ low: item.Low,
33
+ close: item.Close,
34
+ volume: item.Vol,
35
+ turnover: item.Amount,
36
+ turnoverRate: item.Turnover,
37
+ changeAmount: item.RisePrice,
38
+ changePercent: item.RiseRate,
39
+ stockCode: code,
40
+ };
41
+ }
42
+ function mapExItem(item, code) {
43
+ const ts = new Date(item.DateTime).getTime();
44
+ return {
45
+ timestamp: ts,
46
+ date: item.DateTime.split('T')[0],
47
+ open: item.Open,
48
+ high: item.High,
49
+ low: item.Low,
50
+ close: item.Close,
51
+ volume: item.Vol,
52
+ turnover: item.Amount,
53
+ stockCode: code,
54
+ };
55
+ }
56
+ export const gotdxDataFetcher = async (source, config) => {
57
+ const baseUrl = source === 'gotdx' ? 'http://127.0.0.1:8080' : '';
58
+ if (config.exchange && config.exchange in EXCHANGE_EX_CATEGORY) {
59
+ const category = EXCHANGE_EX_CATEGORY[config.exchange];
60
+ const period = PERIOD_TO_CATEGORY[config.period] ?? 4;
61
+ const body = {
62
+ category,
63
+ code: config.symbol,
64
+ period,
65
+ start_date: config.startDate,
66
+ end_date: config.endDate,
67
+ times: 1,
68
+ };
69
+ const res = await fetch(`${baseUrl}/api/ex/kline-by-date`, {
70
+ method: 'POST',
71
+ headers: { 'Content-Type': 'application/json' },
72
+ body: JSON.stringify(body),
73
+ });
74
+ if (!res.ok)
75
+ throw new Error(`[gotdx] ex/kline-by-date failed: ${res.status} ${res.statusText}`);
76
+ const list = await res.json();
77
+ return list.map((item) => mapExItem(item, config.symbol));
78
+ }
79
+ const market = config.symbol.startsWith('6') || config.symbol.startsWith('9') ? 1 : 0;
80
+ const category = PERIOD_TO_CATEGORY[config.period] ?? 4;
81
+ const adjust = ADJUST_MAP[config.adjust] ?? 0;
82
+ const body = {
83
+ market,
84
+ code: config.symbol,
85
+ category,
86
+ start_date: config.startDate,
87
+ end_date: config.endDate,
88
+ times: 1,
89
+ adjust,
90
+ };
91
+ const res = await fetch(`${baseUrl}/api/stock/kline-by-date`, {
92
+ method: 'POST',
93
+ headers: { 'Content-Type': 'application/json' },
94
+ body: JSON.stringify(body),
95
+ });
96
+ if (!res.ok)
97
+ throw new Error(`[gotdx] stock/kline-by-date failed: ${res.status} ${res.statusText}`);
98
+ const list = await res.json();
99
+ return list.map((item) => mapBar(item, config.symbol));
100
+ };
101
+ //# sourceMappingURL=gotdx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gotdx.js","sourceRoot":"","sources":["../../src/data-fetchers/gotdx.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hundred-mock.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/hundred-mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,sBAAsB,CAAA;AAElE,eAAO,MAAM,sBAAsB,EAAE,WA4BpC,CAAA"}
1
+ {"version":3,"file":"hundred-mock.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/hundred-mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,sBAAsB,CAAA;AAElE,eAAO,MAAM,sBAAsB,EAAE,WA0DpC,CAAA"}
@@ -4,13 +4,37 @@ export const hundredMockDataFetcher = async (_source, config) => {
4
4
  const end = new Date(config.endDate).getTime();
5
5
  const dayMs = 86400000;
6
6
  const totalDays = Math.floor((end - start) / dayMs) + 1;
7
+ if (totalDays <= 0)
8
+ return [];
9
+ const basePrice = 12.5;
7
10
  const data = [];
8
- let price = 10 + Math.random() * 5;
11
+ if (totalDays === 1) {
12
+ data.push({
13
+ timestamp: start,
14
+ open: basePrice,
15
+ high: basePrice,
16
+ low: basePrice,
17
+ close: basePrice,
18
+ volume: Math.round(Math.random() * 10000000 + 1000000),
19
+ });
20
+ return data;
21
+ }
22
+ const meanReversionStrength = 0.005;
23
+ // raw random walk with mean reversion (close prices before bridge)
24
+ const rawWalk = [basePrice];
25
+ for (let i = 1; i < totalDays; i++) {
26
+ const prev = rawWalk[i - 1];
27
+ const reversion = meanReversionStrength * (basePrice - prev);
28
+ const change = (Math.random() - 0.48) * prev * 0.06 + reversion;
29
+ rawWalk.push(prev + change);
30
+ }
31
+ // Brownian bridge: subtract linear drift so last close = basePrice
32
+ const finalOffset = rawWalk[totalDays - 1] - basePrice;
9
33
  for (let i = 0; i < totalDays; i++) {
34
+ const bridge = finalOffset * (i / (totalDays - 1));
35
+ const close = Math.round((rawWalk[i] - bridge) * 100) / 100;
10
36
  const ts = start + i * dayMs;
11
- const change = (Math.random() - 0.48) * price * 0.06;
12
- const open = price;
13
- const close = Math.round((open + change) * 100) / 100;
37
+ const open = i === 0 ? basePrice : data[i - 1].close;
14
38
  const high = Math.round(Math.max(open, close) * (1 + Math.random() * 0.03) * 100) / 100;
15
39
  const low = Math.round(Math.min(open, close) * (1 - Math.random() * 0.03) * 100) / 100;
16
40
  const volume = Math.round(Math.random() * 10000000 + 1000000);
@@ -23,7 +47,6 @@ export const hundredMockDataFetcher = async (_source, config) => {
23
47
  volume,
24
48
  turnover: Math.round((volume * (open + close)) / 2),
25
49
  });
26
- price = close;
27
50
  }
28
51
  return data;
29
52
  };
@@ -1 +1 @@
1
- {"version":3,"file":"hundred-mock.js","sourceRoot":"","sources":["../../src/data-fetchers/hundred-mock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAgB,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IAC3E,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1E,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;IAClD,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAA;IACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IACvD,MAAM,IAAI,GAAgB,EAAE,CAAA;IAC5B,IAAI,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,CAAA;QAC5B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAAA;QACpD,MAAM,IAAI,GAAG,KAAK,CAAA;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;QACvF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;QACtF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;QAC7D,IAAI,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,EAAE;YACb,IAAI;YACJ,IAAI;YACJ,GAAG;YACH,KAAK;YACL,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;SACpD,CAAC,CAAA;QACF,KAAK,GAAG,KAAK,CAAA;IACf,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
1
+ {"version":3,"file":"hundred-mock.js","sourceRoot":"","sources":["../../src/data-fetchers/hundred-mock.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export { thousandMockDataFetcher } from './thousand-mock';
2
2
  export { hundredMockDataFetcher } from './hundred-mock';
3
3
  export { baostockDataFetcher } from './baostock';
4
4
  export { tradingviewDataFetcher } from './tradingview';
5
+ export { gotdxDataFetcher } from './gotdx';
5
6
  export { routerDataFetcher } from './router';
6
7
  export { DataBuffer } from './dataBuffer';
7
8
  export type { DataWindow } from './dataBuffer';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA"}
@@ -2,6 +2,7 @@ export { thousandMockDataFetcher } from './thousand-mock';
2
2
  export { hundredMockDataFetcher } from './hundred-mock';
3
3
  export { baostockDataFetcher } from './baostock';
4
4
  export { tradingviewDataFetcher } from './tradingview';
5
+ export { gotdxDataFetcher } from './gotdx';
5
6
  export { routerDataFetcher } from './router';
6
7
  export { DataBuffer } from './dataBuffer';
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-fetchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-fetchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAMvD,eAAO,MAAM,iBAAiB,EAAE,WAa/B,CAAA"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAOvD,eAAO,MAAM,iBAAiB,EAAE,WAe/B,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { baostockDataFetcher } from './baostock';
2
+ import { gotdxDataFetcher } from './gotdx';
2
3
  import { hundredMockDataFetcher } from './hundred-mock';
3
4
  import { thousandMockDataFetcher } from './thousand-mock';
4
5
  import { tradingviewDataFetcher } from './tradingview';
@@ -6,6 +7,8 @@ export const routerDataFetcher = (source, config) => {
6
7
  switch (source) {
7
8
  case 'baostock':
8
9
  return baostockDataFetcher(source, config);
10
+ case 'gotdx':
11
+ return gotdxDataFetcher(source, config);
9
12
  case 'tradingview':
10
13
  return tradingviewDataFetcher(source, config);
11
14
  case 'mock-100':
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/data-fetchers/router.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;IAC/D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU;YACb,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC5C,KAAK,aAAa;YAChB,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/C,KAAK,UAAU;YACb,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/C,KAAK,YAAY;YACf,OAAO,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChD;YACE,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/data-fetchers/router.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;IAC/D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU;YACb,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC5C,KAAK,OAAO;YACV,OAAO,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACzC,KAAK,aAAa;YAChB,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/C,KAAK,UAAU;YACb,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/C,KAAK,YAAY;YACf,OAAO,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChD;YACE,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC;AACH,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"thousand-mock.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/thousand-mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,sBAAsB,CAAA;AAElE,eAAO,MAAM,uBAAuB,EAAE,WA2BrC,CAAA"}
1
+ {"version":3,"file":"thousand-mock.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/thousand-mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,sBAAsB,CAAA;AAElE,eAAO,MAAM,uBAAuB,EAAE,WA2CrC,CAAA"}
@@ -3,26 +3,36 @@ export const thousandMockDataFetcher = async (_source, _config) => {
3
3
  const data = [];
4
4
  const startTime = new Date('2020-01-01').getTime();
5
5
  const dayMs = 24 * 60 * 60 * 1000;
6
- let lastClose = 3000;
7
- for (let i = 0; i < 10000; i++) {
6
+ const totalDays = 10000;
7
+ const basePrice = 3000;
8
+ const meanReversionStrength = 0.0005;
9
+ const volatility = 0.02;
10
+ // raw random walk with mean reversion (close prices before bridge)
11
+ const rawWalk = [basePrice];
12
+ for (let i = 1; i < totalDays; i++) {
13
+ const prev = rawWalk[i - 1];
14
+ const reversion = meanReversionStrength * (basePrice - prev);
15
+ const change = (Math.random() - 0.5) * 2 * volatility * prev + reversion;
16
+ rawWalk.push(prev + change);
17
+ }
18
+ // Brownian bridge: subtract linear drift so last close = basePrice
19
+ const finalOffset = rawWalk[totalDays - 1] - basePrice;
20
+ for (let i = 0; i < totalDays; i++) {
21
+ const bridge = finalOffset * (i / (totalDays - 1));
22
+ const close = Math.round((rawWalk[i] - bridge) * 100) / 100;
8
23
  const timestamp = startTime + i * dayMs;
9
- const volatility = 0.02;
10
- const trend = 0.0001;
11
- const change = (Math.random() - 0.5) * 2 * volatility + trend;
12
- const open = lastClose;
13
- const close = open * (1 + change);
14
- const high = Math.max(open, close) * (1 + Math.random() * 0.01);
15
- const low = Math.min(open, close) * (1 - Math.random() * 0.01);
24
+ const open = i === 0 ? basePrice : data[i - 1].close;
25
+ const high = Math.round(Math.max(open, close) * (1 + Math.random() * 0.01) * 100) / 100;
26
+ const low = Math.round(Math.min(open, close) * (1 - Math.random() * 0.01) * 100) / 100;
16
27
  const volume = Math.floor(1000000 + Math.random() * 5000000);
17
28
  data.push({
18
29
  timestamp,
19
- open: parseFloat(open.toFixed(2)),
20
- high: parseFloat(high.toFixed(2)),
21
- low: parseFloat(low.toFixed(2)),
22
- close: parseFloat(close.toFixed(2)),
30
+ open,
31
+ high,
32
+ low,
33
+ close,
23
34
  volume,
24
35
  });
25
- lastClose = close;
26
36
  }
27
37
  return data;
28
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"thousand-mock.js","sourceRoot":"","sources":["../../src/data-fetchers/thousand-mock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAgB,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAC7E,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACrD,MAAM,IAAI,GAAgB,EAAE,CAAA;IAC5B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAA;IAClD,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACjC,IAAI,SAAS,GAAG,IAAI,CAAA;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,GAAG,KAAK,CAAA;QACvC,MAAM,UAAU,GAAG,IAAI,CAAA;QACvB,MAAM,KAAK,GAAG,MAAM,CAAA;QACpB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,KAAK,CAAA;QAC7D,MAAM,IAAI,GAAG,SAAS,CAAA;QACtB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAA;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAA;QAC5D,IAAI,CAAC,IAAI,CAAC;YACR,SAAS;YACT,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACjC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM;SACP,CAAC,CAAA;QACF,SAAS,GAAG,KAAK,CAAA;IACnB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
1
+ {"version":3,"file":"thousand-mock.js","sourceRoot":"","sources":["../../src/data-fetchers/thousand-mock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAgB,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAC7E,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACrD,MAAM,IAAI,GAAgB,EAAE,CAAA;IAC5B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAA;IAClD,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACjC,MAAM,SAAS,GAAG,KAAK,CAAA;IAEvB,MAAM,SAAS,GAAG,IAAI,CAAA;IACtB,MAAM,qBAAqB,GAAG,MAAM,CAAA;IACpC,MAAM,UAAU,GAAG,IAAI,CAAA;IAEvB,mEAAmE;IACnE,MAAM,OAAO,GAAa,CAAC,SAAS,CAAC,CAAA;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,CAAA;QAC5B,MAAM,SAAS,GAAG,qBAAqB,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,CAAA;QACxE,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;IAC7B,CAAC;IAED,mEAAmE;IACnE,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,CAAC,CAAE,GAAG,SAAS,CAAA;IACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAA;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;QAE5D,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,GAAG,KAAK,CAAA;QACvC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,KAAK,CAAA;QAErD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;QACvF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;QACtF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAA;QAC5D,IAAI,CAAC,IAAI,CAAC;YACR,SAAS;YACT,IAAI;YACJ,IAAI;YACJ,GAAG;YACH,KAAK;YACL,MAAM;SACP,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"tradingview.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/tradingview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,sBAAsB,CAAA;AAYlE,eAAO,MAAM,sBAAsB,EAAE,WAoCpC,CAAA"}
1
+ {"version":3,"file":"tradingview.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/tradingview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,sBAAsB,CAAA;AAYlE,eAAO,MAAM,sBAAsB,EAAE,WA0CpC,CAAA"}
@@ -12,24 +12,30 @@ export const tradingviewDataFetcher = async (source, config) => {
12
12
  const timeframe = PERIOD_TO_TIMEFRAME[config.period] ?? '1d';
13
13
  const startDate = config.startDate.split('T')[0];
14
14
  const endDate = config.endDate.split('T')[0];
15
+ const ADJUST_TO_TV = {
16
+ qfq: 'dividends',
17
+ splits: 'splits',
18
+ none: 'none',
19
+ };
20
+ const tvAdjust = ADJUST_TO_TV[config.adjust];
15
21
  const exchangeQ = config.exchange ? `&exchange=${config.exchange}` : '';
16
- const url = `${baseUrl}/api/tradingview/kdata?symbol=${config.symbol}&timeframe=${timeframe}&start_date=${startDate}&end_date=${endDate}${exchangeQ}`;
22
+ const adjustQ = tvAdjust ? `&adjust=${tvAdjust}` : '';
23
+ const url = `${baseUrl}/api/tradingview/kdata?symbol=${config.symbol}&timeframe=${timeframe}&start_date=${startDate}&end_date=${endDate}${exchangeQ}${adjustQ}`;
17
24
  try {
18
25
  const res = await fetch(url);
19
26
  if (!res.ok) {
20
- console.warn(`[tradingview] fetch failed: ${res.status} ${res.statusText}`);
21
- return [];
27
+ throw new Error(`[tradingview] fetch failed: ${res.status} ${res.statusText}`);
22
28
  }
23
29
  const json = await res.json();
24
30
  if (!json.success) {
25
- console.warn(`[tradingview] API error: ${json.error_msg}`);
26
- return [];
31
+ throw new Error(`[tradingview] API error: ${json.error_msg}`);
27
32
  }
28
33
  if (json.warning) {
29
34
  console.warn(`[tradingview] ${json.warning}`);
30
35
  }
31
36
  return (json.data ?? []).map((item) => ({
32
37
  timestamp: item.ts_open,
38
+ date: item.date,
33
39
  open: item.open,
34
40
  high: item.high,
35
41
  low: item.low,
@@ -40,7 +46,7 @@ export const tradingviewDataFetcher = async (source, config) => {
40
46
  }
41
47
  catch (err) {
42
48
  console.warn('[tradingview] network error:', err);
43
- return [];
49
+ throw err;
44
50
  }
45
51
  };
46
52
  //# sourceMappingURL=tradingview.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tradingview.js","sourceRoot":"","sources":["../../src/data-fetchers/tradingview.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAA2B;IAClD,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;CACf,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAC1E,MAAM,OAAO,GAAG,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAA;IACvE,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAA;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAE5C,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACvE,MAAM,GAAG,GAAG,GAAG,OAAO,iCAAiC,MAAM,CAAC,MAAM,cAAc,SAAS,eAAe,SAAS,aAAa,OAAO,GAAG,SAAS,EAAE,CAAA;IACrJ,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,+BAA+B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;YAC3E,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;YAC1D,OAAO,EAAE,CAAA;QACX,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QAC/C,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAA6B,EAAE,EAAE,CAAC,CAAC;YAC/D,SAAS,EAAE,IAAI,CAAC,OAAiB;YACjC,IAAI,EAAE,IAAI,CAAC,IAAc;YACzB,IAAI,EAAE,IAAI,CAAC,IAAc;YACzB,GAAG,EAAE,IAAI,CAAC,GAAa;YACvB,KAAK,EAAE,IAAI,CAAC,KAAe;YAC3B,MAAM,EAAG,IAAI,CAAC,MAAiB,IAAI,CAAC;YACpC,SAAS,EAAE,MAAM,CAAC,MAAM;SACzB,CAAC,CAAgB,CAAA;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAA;QACjD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"tradingview.js","sourceRoot":"","sources":["../../src/data-fetchers/tradingview.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAA2B;IAClD,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;CACf,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAC1E,MAAM,OAAO,GAAG,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAA;IACvE,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAA;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAE5C,MAAM,YAAY,GAAuC;QACvD,GAAG,EAAE,WAAW;QAChB,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,MAAM;KACb,CAAA;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACvE,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACrD,MAAM,GAAG,GAAG,GAAG,OAAO,iCAAiC,MAAM,CAAC,MAAM,cAAc,SAAS,eAAe,SAAS,aAAa,OAAO,GAAG,SAAS,GAAG,OAAO,EAAE,CAAA;IAC/J,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;QAChF,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QAC/D,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QAC/C,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAA6B,EAAE,EAAE,CAAC,CAAC;YAC/D,SAAS,EAAE,IAAI,CAAC,OAAiB;YACjC,IAAI,EAAE,IAAI,CAAC,IAAc;YACzB,IAAI,EAAE,IAAI,CAAC,IAAc;YACzB,IAAI,EAAE,IAAI,CAAC,IAAc;YACzB,GAAG,EAAE,IAAI,CAAC,GAAa;YACvB,KAAK,EAAE,IAAI,CAAC,KAAe;YAC3B,MAAM,EAAG,IAAI,CAAC,MAAiB,IAAI,CAAC;YACpC,SAAS,EAAE,MAAM,CAAC,MAAM;SACzB,CAAC,CAAgB,CAAA;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAA;QACjD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC,CAAA"}