@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.
- package/dist/controllers/createChartController.d.ts.map +1 -1
- package/dist/controllers/createChartController.js +21 -1
- package/dist/controllers/createChartController.js.map +1 -1
- package/dist/controllers/types.d.ts +6 -1
- package/dist/controllers/types.d.ts.map +1 -1
- package/dist/data-fetchers/baostock.js +3 -3
- package/dist/data-fetchers/baostock.js.map +1 -1
- package/dist/data-fetchers/dataBuffer.d.ts +5 -1
- package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
- package/dist/data-fetchers/dataBuffer.js +85 -48
- package/dist/data-fetchers/dataBuffer.js.map +1 -1
- package/dist/data-fetchers/gotdx.d.ts +3 -0
- package/dist/data-fetchers/gotdx.d.ts.map +1 -0
- package/dist/data-fetchers/gotdx.js +101 -0
- package/dist/data-fetchers/gotdx.js.map +1 -0
- package/dist/data-fetchers/hundred-mock.d.ts.map +1 -1
- package/dist/data-fetchers/hundred-mock.js +28 -5
- package/dist/data-fetchers/hundred-mock.js.map +1 -1
- package/dist/data-fetchers/index.d.ts +1 -0
- package/dist/data-fetchers/index.d.ts.map +1 -1
- package/dist/data-fetchers/index.js +1 -0
- package/dist/data-fetchers/index.js.map +1 -1
- package/dist/data-fetchers/router.d.ts.map +1 -1
- package/dist/data-fetchers/router.js +3 -0
- package/dist/data-fetchers/router.js.map +1 -1
- package/dist/data-fetchers/thousand-mock.d.ts.map +1 -1
- package/dist/data-fetchers/thousand-mock.js +24 -14
- package/dist/data-fetchers/thousand-mock.js.map +1 -1
- package/dist/data-fetchers/tradingview.d.ts.map +1 -1
- package/dist/data-fetchers/tradingview.js +12 -6
- package/dist/data-fetchers/tradingview.js.map +1 -1
- package/dist/engine/chart.d.ts +29 -367
- package/dist/engine/chart.d.ts.map +1 -1
- package/dist/engine/chart.js +239 -1842
- package/dist/engine/chart.js.map +1 -1
- package/dist/engine/chartContext.d.ts +24 -0
- package/dist/engine/chartContext.d.ts.map +1 -0
- package/dist/engine/chartContext.js +19 -0
- package/dist/engine/chartContext.js.map +1 -0
- package/dist/engine/chartTypes.d.ts +77 -0
- package/dist/engine/chartTypes.d.ts.map +1 -0
- package/dist/engine/chartTypes.js +2 -0
- package/dist/engine/chartTypes.js.map +1 -0
- package/dist/engine/data/chartDataManager.d.ts +103 -0
- package/dist/engine/data/chartDataManager.d.ts.map +1 -0
- package/dist/engine/data/chartDataManager.js +593 -0
- package/dist/engine/data/chartDataManager.js.map +1 -0
- package/dist/engine/indicators/chartIndicatorManager.d.ts +102 -0
- package/dist/engine/indicators/chartIndicatorManager.d.ts.map +1 -0
- package/dist/engine/indicators/chartIndicatorManager.js +437 -0
- package/dist/engine/indicators/chartIndicatorManager.js.map +1 -0
- package/dist/engine/layout/chartPaneLayout.d.ts +53 -0
- package/dist/engine/layout/chartPaneLayout.d.ts.map +1 -0
- package/dist/engine/layout/chartPaneLayout.js +388 -0
- package/dist/engine/layout/chartPaneLayout.js.map +1 -0
- package/dist/engine/render/chartRenderer.d.ts +86 -0
- package/dist/engine/render/chartRenderer.d.ts.map +1 -0
- package/dist/engine/render/chartRenderer.js +440 -0
- package/dist/engine/render/chartRenderer.js.map +1 -0
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +73 -7
- package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
- package/dist/engine/renderers/comparisonLine.d.ts.map +1 -1
- package/dist/engine/renderers/comparisonLine.js +25 -11
- package/dist/engine/renderers/comparisonLine.js.map +1 -1
- package/dist/engine/renderers/timeAxis.d.ts.map +1 -1
- package/dist/engine/renderers/timeAxis.js +1 -0
- package/dist/engine/renderers/timeAxis.js.map +1 -1
- package/dist/engine/subPaneManager.d.ts +27 -6
- package/dist/engine/subPaneManager.d.ts.map +1 -1
- package/dist/engine/subPaneManager.js +54 -56
- package/dist/engine/subPaneManager.js.map +1 -1
- package/dist/engine/utils/chartZoomController.d.ts +33 -0
- package/dist/engine/utils/chartZoomController.d.ts.map +1 -0
- package/dist/engine/utils/chartZoomController.js +66 -0
- package/dist/engine/utils/chartZoomController.js.map +1 -0
- package/dist/engine/viewport/chartViewportManager.d.ts +72 -0
- package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -0
- package/dist/engine/viewport/chartViewportManager.js +249 -0
- package/dist/engine/viewport/chartViewportManager.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin/types.d.ts +3 -0
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/types.js.map +1 -1
- package/dist/semantic/index.d.ts +1 -1
- package/dist/semantic/index.d.ts.map +1 -1
- package/dist/semantic/index.js.map +1 -1
- package/dist/semantic/schema.json +1 -1
- package/dist/semantic/types.d.ts +2 -1
- package/dist/semantic/types.d.ts.map +1 -1
- package/dist/tokens/theme-china.d.ts.map +1 -1
- package/dist/tokens/theme-china.js +0 -4
- package/dist/tokens/theme-china.js.map +1 -1
- package/dist/tokens/theme-dark.d.ts.map +1 -1
- package/dist/tokens/theme-dark.js +0 -4
- package/dist/tokens/theme-dark.js.map +1 -1
- package/dist/tokens/theme-light.d.ts.map +1 -1
- package/dist/tokens/theme-light.js +1 -5
- package/dist/tokens/theme-light.js.map +1 -1
- package/dist/tokens/types.d.ts +0 -4
- package/dist/tokens/types.d.ts.map +1 -1
- package/dist/types/price.d.ts +2 -0
- package/dist/types/price.d.ts.map +1 -1
- package/dist/types/price.js.map +1 -1
- package/dist/utils/dateFormat.d.ts +25 -0
- package/dist/utils/dateFormat.d.ts.map +1 -1
- package/dist/utils/dateFormat.js +78 -0
- package/dist/utils/dateFormat.js.map +1 -1
- package/dist/utils/kLineDraw/axis.d.ts +2 -0
- package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
- package/dist/utils/kLineDraw/axis.js +11 -6
- package/dist/utils/kLineDraw/axis.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/src/controllers/createChartController.ts +39 -10
- package/src/controllers/types.ts +6 -1
- package/src/data-fetchers/__tests__/dataBuffer.test.ts +5 -2
- package/src/data-fetchers/baostock.ts +3 -3
- package/src/data-fetchers/dataBuffer.ts +70 -23
- package/src/data-fetchers/gotdx.ts +138 -0
- package/src/data-fetchers/hundred-mock.ts +35 -5
- package/src/data-fetchers/index.ts +1 -0
- package/src/data-fetchers/router.ts +3 -0
- package/src/data-fetchers/thousand-mock.ts +30 -14
- package/src/data-fetchers/tradingview.ts +12 -6
- package/src/engine/__tests__/subPaneManager.test.ts +154 -0
- package/src/engine/chart.ts +252 -2250
- package/src/engine/chartContext.ts +34 -0
- package/src/engine/chartTypes.ts +88 -0
- package/src/engine/data/chartDataManager.ts +695 -0
- package/src/engine/indicators/__tests__/chartIndicatorManager.test.ts +103 -0
- package/src/engine/indicators/chartIndicatorManager.ts +566 -0
- package/src/engine/layout/chartPaneLayout.ts +474 -0
- package/src/engine/render/chartRenderer.ts +581 -0
- package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +99 -13
- package/src/engine/renderers/__tests__/boll.renderer.test.ts +1 -0
- package/src/engine/renderers/__tests__/ene.renderer.test.ts +1 -0
- package/src/engine/renderers/__tests__/expma.renderer.test.ts +1 -0
- package/src/engine/renderers/__tests__/ma.renderer.test.ts +1 -0
- package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +1 -0
- package/src/engine/renderers/__tests__/yAxis.renderer.test.ts +1 -0
- package/src/engine/renderers/comparisonLine.ts +25 -11
- package/src/engine/renderers/timeAxis.ts +1 -0
- package/src/engine/subPaneManager.ts +75 -59
- package/src/engine/utils/chartZoomController.ts +104 -0
- package/src/engine/viewport/chartViewportManager.ts +310 -0
- package/src/index.ts +1 -0
- package/src/plugin/types.ts +3 -0
- package/src/semantic/index.ts +1 -0
- package/src/semantic/schema.json +1 -1
- package/src/semantic/types.ts +3 -1
- package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +1 -9
- package/src/tokens/theme-china.ts +0 -4
- package/src/tokens/theme-dark.ts +0 -4
- package/src/tokens/theme-light.ts +2 -6
- package/src/tokens/types.ts +0 -4
- package/src/types/price.ts +2 -0
- package/src/utils/dateFormat.ts +85 -0
- package/src/utils/kLineDraw/axis.ts +13 -6
- package/src/version.ts +1 -1
- 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,
|
|
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
|
-
|
|
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
|
|
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;
|
|
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;
|
|
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,
|
|
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
|
-
|
|
7
|
-
|
|
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
|
|
10
|
-
const
|
|
11
|
-
const
|
|
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
|
|
20
|
-
high
|
|
21
|
-
low
|
|
22
|
-
close
|
|
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,
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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"}
|