@363045841yyt/klinechart-core 0.8.10-alpha.2 → 0.8.11-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/controllers/index.d.ts +1 -1
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js.map +1 -1
- package/dist/data-fetchers/dataBuffer.d.ts +0 -1
- package/dist/data-fetchers/dataBuffer.d.ts.map +1 -1
- package/dist/data-fetchers/dataBuffer.effects.d.ts +21 -0
- package/dist/data-fetchers/dataBuffer.effects.d.ts.map +1 -0
- package/dist/data-fetchers/dataBuffer.effects.js +55 -0
- package/dist/data-fetchers/dataBuffer.effects.js.map +1 -0
- package/dist/data-fetchers/dataBuffer.js +58 -93
- package/dist/data-fetchers/dataBuffer.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/timeShareBuffer.d.ts +2 -1
- package/dist/data-fetchers/timeShareBuffer.d.ts.map +1 -1
- package/dist/data-fetchers/timeShareBuffer.js +36 -14
- package/dist/data-fetchers/timeShareBuffer.js.map +1 -1
- package/dist/engine/data/chartDataManager.d.ts.map +1 -1
- package/dist/engine/data/chartDataManager.js +2 -1
- package/dist/engine/data/chartDataManager.js.map +1 -1
- package/dist/engine/drawing/AnchorCollector.d.ts +26 -0
- package/dist/engine/drawing/AnchorCollector.d.ts.map +1 -0
- package/dist/engine/drawing/AnchorCollector.js +47 -0
- package/dist/engine/drawing/AnchorCollector.js.map +1 -0
- package/dist/engine/drawing/DragHandler.d.ts +38 -0
- package/dist/engine/drawing/DragHandler.d.ts.map +1 -0
- package/dist/engine/drawing/DragHandler.js +92 -0
- package/dist/engine/drawing/DragHandler.js.map +1 -0
- package/dist/engine/drawing/DrawingState.d.ts +51 -0
- package/dist/engine/drawing/DrawingState.d.ts.map +1 -0
- package/dist/engine/drawing/DrawingState.js +115 -0
- package/dist/engine/drawing/DrawingState.js.map +1 -0
- package/dist/engine/drawing/HitTester.d.ts +59 -0
- package/dist/engine/drawing/HitTester.d.ts.map +1 -0
- package/dist/engine/drawing/HitTester.js +219 -0
- package/dist/engine/drawing/HitTester.js.map +1 -0
- package/dist/engine/drawing/PreviewRenderer.d.ts +26 -0
- package/dist/engine/drawing/PreviewRenderer.d.ts.map +1 -0
- package/dist/engine/drawing/PreviewRenderer.js +131 -0
- package/dist/engine/drawing/PreviewRenderer.js.map +1 -0
- package/dist/engine/drawing/coordinateUtils.d.ts +57 -0
- package/dist/engine/drawing/coordinateUtils.d.ts.map +1 -0
- package/dist/engine/drawing/coordinateUtils.js +103 -0
- package/dist/engine/drawing/coordinateUtils.js.map +1 -0
- package/dist/engine/drawing/index.d.ts.map +1 -1
- package/dist/engine/drawing/index.js +11 -3
- package/dist/engine/drawing/index.js.map +1 -1
- package/dist/engine/drawing/interaction.d.ts +44 -40
- package/dist/engine/drawing/interaction.d.ts.map +1 -1
- package/dist/engine/drawing/interaction.js +132 -571
- package/dist/engine/drawing/interaction.js.map +1 -1
- package/dist/engine/drawing/toolConfig.d.ts +24 -0
- package/dist/engine/drawing/toolConfig.d.ts.map +1 -0
- package/dist/engine/drawing/toolConfig.js +76 -0
- package/dist/engine/drawing/toolConfig.js.map +1 -0
- package/dist/engine/utils/klineConfig.d.ts.map +1 -1
- package/dist/engine/utils/klineConfig.js +4 -1
- package/dist/engine/utils/klineConfig.js.map +1 -1
- package/dist/engine/viewport/chartViewportManager.d.ts.map +1 -1
- package/dist/engine/viewport/chartViewportManager.js +11 -3
- package/dist/engine/viewport/chartViewportManager.js.map +1 -1
- package/dist/plugin/types.d.ts +1 -0
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/types.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -1
- package/src/controllers/index.ts +1 -0
- package/src/data-fetchers/__tests__/dataBuffer.test.ts +1 -3
- package/src/data-fetchers/dataBuffer.effects.ts +118 -0
- package/src/data-fetchers/dataBuffer.ts +45 -86
- package/src/data-fetchers/index.ts +7 -0
- package/src/data-fetchers/timeShareBuffer.ts +58 -19
- package/src/engine/__tests__/paneRenderer.resize.test.ts +3 -0
- package/src/engine/__tests__/subPaneManager.test.ts +13 -3
- package/src/engine/data/chartDataManager.ts +2 -1
- package/src/engine/drawing/AnchorCollector.ts +57 -0
- package/src/engine/drawing/DragHandler.ts +121 -0
- package/src/engine/drawing/DrawingState.ts +132 -0
- package/src/engine/drawing/HitTester.ts +288 -0
- package/src/engine/drawing/PreviewRenderer.ts +157 -0
- package/src/engine/drawing/coordinateUtils.ts +139 -0
- package/src/engine/drawing/index.ts +10 -3
- package/src/engine/drawing/interaction.ts +177 -687
- package/src/engine/drawing/toolConfig.ts +103 -0
- package/src/engine/indicators/__tests__/chartIndicatorManager.test.ts +1 -0
- package/src/engine/indicators/__tests__/stateComposer.test.ts +5 -4
- package/src/engine/renderers/Indicator/__tests__/createSubIndicatorRenderer.test.ts +1 -0
- package/src/engine/utils/klineConfig.ts +3 -1
- package/src/engine/viewport/chartViewportManager.ts +10 -3
- package/src/plugin/types.ts +1 -0
- package/src/tokens/__tests__/tokens.test.ts +2 -1
- package/src/version.ts +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { KLineData, IndicatorPaneRole, IndicatorRole, IndicatorParamDef, IndicatorDefinition, IndicatorInstance, ActiveIndicator, SubPaneInfo, DrawingToolType, DrawingObject, InteractionSnapshot, DrawingControllerCallbacks, IndicatorSelectorController, ToolbarController, ToolDefinition, ToolId, DrawingState, DrawingController, ChartMountOptions, ChartViewport, ChartController, ChartControllerFactory, PaneSpec, DrawingChartAdapter, DrawingChartViewport, PaneLayoutInfo, SymbolSpec, DataFetcher, } from './types';
|
|
1
|
+
export type { KLineData, IndicatorPaneRole, IndicatorRole, IndicatorParamDef, IndicatorDefinition, IndicatorInstance, ActiveIndicator, SubPaneInfo, DrawingToolType, DrawingObject, InteractionSnapshot, DrawingControllerCallbacks, IndicatorSelectorController, ToolbarController, ToolDefinition, ToolId, DrawingState, DrawingController, ChartMountOptions, ChartViewport, ChartController, ChartControllerFactory, PaneSpec, DrawingChartAdapter, DrawingChartViewport, PaneLayoutInfo, SymbolSpec, DataFetcher, CustomDataSource, } from './types';
|
|
2
2
|
export { createChartController } from './createChartController';
|
|
3
3
|
export { createIndicatorSelectorController } from './createIndicatorSelectorController';
|
|
4
4
|
export { zoomLevelToKWidth, kGapFromKWidth, } from '../engine/utils/zoom';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"AACA,YAAY,EACR,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,iBAAiB,EACjB,cAAc,EACd,MAAM,EACN,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"AACA,YAAY,EACR,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,iBAAiB,EACjB,cAAc,EACd,MAAM,EACN,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,GACnB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAA;AAKvF,OAAO,EACH,iBAAiB,EACjB,cAAc,GACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAGpE,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAGrE,OAAO,EACH,aAAa,EACb,aAAa,EACb,gBAAgB,GACnB,MAAM,gDAAgD,CAAA;AACvD,YAAY,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AAGxG,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACtI,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGlD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAA;AAEvF,qEAAqE;AAErE,oBAAoB;AACpB,OAAO,EACH,iBAAiB,EACjB,cAAc,GACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAKpE,yBAAyB;AACzB,OAAO,EACH,aAAa,EACb,aAAa,EACb,gBAAgB,GACnB,MAAM,gDAAgD,CAAA;AAEvD,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AAExG,wBAAwB;AACxB,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGtI,UAAU;AACV,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataBuffer.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/dataBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"dataBuffer.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/dataBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAKvD,MAAM,WAAW,UAAU;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACnB;AAkBD,qBAAa,UAAW,YAAW,cAAc;IAC7C,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,aAAa,CAAyG;IAC9H,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,oBAAoB,CAAyB;IACrD,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,QAAQ,CAA0B;IAE1C,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAO;;IAOlD,IAAI,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAEzC;IAED,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAE7B;IAED,IAAI,WAAW,IAAI,UAAU,GAAG,IAAI,CAEnC;IAED,IAAI,YAAY,IAAI,UAAU,GAAG,IAAI,CAEpC;IAED,UAAU,IAAI,SAAS,EAAE;IAIzB,YAAY,IAAI,UAAU,GAAG,IAAI;IAIjC,UAAU,IAAI,UAAU,GAAG,IAAI;IAI/B,OAAO,CAAC,eAAe;IAmBvB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAI7C,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;IAI3H,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAe1D,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAchE,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,UAAU;IAuFlB;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAiBpC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAItC,OAAO,IAAI,IAAI;CASlB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Context } from 'effect';
|
|
2
|
+
import type { Effect as EffectType } from 'effect/Effect';
|
|
3
|
+
import type { KLineData, SymbolSpec } from '../controllers/types';
|
|
4
|
+
import type { TimeShareData } from '../types/price';
|
|
5
|
+
declare const KLineFetchService_base: Context.TagClass<KLineFetchService, "@klc/KLineFetchService", {
|
|
6
|
+
readonly fetch: (spec: SymbolSpec, startTs: number, endTs: number) => EffectType<ReadonlyArray<KLineData>, unknown>;
|
|
7
|
+
}>;
|
|
8
|
+
export declare class KLineFetchService extends KLineFetchService_base {
|
|
9
|
+
}
|
|
10
|
+
declare const TimeShareFetchService_base: Context.TagClass<TimeShareFetchService, "@klc/TimeShareFetchService", {
|
|
11
|
+
readonly fetch: (spec: SymbolSpec, date?: number) => EffectType<ReadonlyArray<TimeShareData>, unknown>;
|
|
12
|
+
}>;
|
|
13
|
+
export declare class TimeShareFetchService extends TimeShareFetchService_base {
|
|
14
|
+
}
|
|
15
|
+
export declare const MS_PER_DAY = 86400000;
|
|
16
|
+
export declare function getPeriodDays(period?: string): number;
|
|
17
|
+
export declare function formatDate(ts: number): string;
|
|
18
|
+
export declare const fetchKLine: (spec: SymbolSpec, startTs: number, endTs: number) => EffectType<ReadonlyArray<KLineData>, unknown, KLineFetchService>;
|
|
19
|
+
export declare const fetchTimeShare: (spec: SymbolSpec, date?: number) => EffectType<ReadonlyArray<TimeShareData>, unknown, TimeShareFetchService>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=dataBuffer.effects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataBuffer.effects.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/dataBuffer.effects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0B,MAAM,QAAQ,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;;oBAQ/B,CACd,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,KACV,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;;AAPtD,qBAAa,iBAAkB,SAAQ,sBASpC;CAAI;;oBAOa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;;AAH1G,qBAAa,qBAAsB,SAAQ,0BAKxC;CAAI;AAIP,eAAO,MAAM,UAAU,WAAa,CAAA;AAoBpC,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAM7C;AAWD,eAAO,MAAM,UAAU,GACrB,MAAM,UAAU,EAChB,SAAS,MAAM,EACf,OAAO,MAAM,KACZ,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAqB/D,CAAA;AAIH,eAAO,MAAM,cAAc,GACzB,MAAM,UAAU,EAChB,OAAO,MAAM,KACZ,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,qBAAqB,CAcvE,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Context, Effect, pipe, Schedule } from 'effect';
|
|
2
|
+
// ── KLine fetch service tag ──
|
|
3
|
+
// Tag: 定义 Effect 服务接口
|
|
4
|
+
export class KLineFetchService extends Context.Tag('@klc/KLineFetchService')() {
|
|
5
|
+
}
|
|
6
|
+
// ── TimeShare fetch service tag ──
|
|
7
|
+
export class TimeShareFetchService extends Context.Tag('@klc/TimeShareFetchService')() {
|
|
8
|
+
}
|
|
9
|
+
// ── Constants ──
|
|
10
|
+
export const MS_PER_DAY = 86_400_000;
|
|
11
|
+
const REQUEST_TIMEOUT = '15 seconds';
|
|
12
|
+
const FETCH_MAX_RETRIES = 2; // 最大重试次数
|
|
13
|
+
// ── Helpers ──
|
|
14
|
+
const PERIOD_INITIAL_DAYS = {
|
|
15
|
+
'1min': 3,
|
|
16
|
+
'5min': 30,
|
|
17
|
+
'15min': 60,
|
|
18
|
+
'30min': 90,
|
|
19
|
+
'60min': 180,
|
|
20
|
+
daily: 365,
|
|
21
|
+
weekly: 365,
|
|
22
|
+
monthly: 365,
|
|
23
|
+
quarterly: 365,
|
|
24
|
+
yearly: 365,
|
|
25
|
+
timeshare: 1,
|
|
26
|
+
};
|
|
27
|
+
export function getPeriodDays(period) {
|
|
28
|
+
return PERIOD_INITIAL_DAYS[period ?? 'daily'] ?? 365;
|
|
29
|
+
}
|
|
30
|
+
export function formatDate(ts) {
|
|
31
|
+
const d = new Date(ts);
|
|
32
|
+
const y = d.getFullYear();
|
|
33
|
+
const m = String(d.getMonth() + 1).padStart(2, '0');
|
|
34
|
+
const day = String(d.getDate()).padStart(2, '0');
|
|
35
|
+
return `${y}-${m}-${day}`;
|
|
36
|
+
}
|
|
37
|
+
// ── Retry schedule: exponential backoff ~1s / ~2s ──
|
|
38
|
+
const retrySchedule = pipe(Schedule.exponential('1 seconds'), Schedule.compose(Schedule.recurs(FETCH_MAX_RETRIES)));
|
|
39
|
+
// ── KLine fetch Effect (retry + timeout + empty-data check) ──
|
|
40
|
+
export const fetchKLine = (spec, startTs, endTs) => pipe(Effect.gen(function* () {
|
|
41
|
+
const { fetch } = yield* KLineFetchService; // 获取 Service 实例
|
|
42
|
+
const data = yield* pipe(fetch(spec, startTs, endTs), Effect.timeout(REQUEST_TIMEOUT));
|
|
43
|
+
if (data.length === 0) {
|
|
44
|
+
return yield* Effect.fail(new Error(`[DataBuffer] empty data for ${spec.symbol} ${formatDate(startTs)}~${formatDate(endTs)}`));
|
|
45
|
+
}
|
|
46
|
+
return data;
|
|
47
|
+
}), Effect.retry(retrySchedule), // 上个 Error 时触发
|
|
48
|
+
Effect.tapError((err) => Effect.logError(`[DataBuffer] fetch failed: ${err.message}`)));
|
|
49
|
+
// ── TimeShare fetch Effect (retry + timeout) ──
|
|
50
|
+
export const fetchTimeShare = (spec, date) => pipe(Effect.gen(function* () {
|
|
51
|
+
const { fetch } = yield* TimeShareFetchService; // 获取服务实例
|
|
52
|
+
const data = yield* pipe(fetch(spec, date), Effect.timeout(REQUEST_TIMEOUT));
|
|
53
|
+
return data;
|
|
54
|
+
}), Effect.retry(retrySchedule), Effect.tapError((err) => Effect.logError(`[TimeShareBuffer] fetch failed: ${err.message}`)));
|
|
55
|
+
//# sourceMappingURL=dataBuffer.effects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataBuffer.effects.js","sourceRoot":"","sources":["../../src/data-fetchers/dataBuffer.effects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAKxD,gCAAgC;AAChC,sBAAsB;AAEtB,MAAM,OAAO,iBAAkB,SAAQ,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,EASzE;CAAI;AAEP,oCAAoC;AAEpC,MAAM,OAAO,qBAAsB,SAAQ,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAKjF;CAAI;AAEP,kBAAkB;AAElB,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAA;AACpC,MAAM,eAAe,GAAG,YAAY,CAAA;AACpC,MAAM,iBAAiB,GAAG,CAAC,CAAA,CAAC,SAAS;AAErC,gBAAgB;AAEhB,MAAM,mBAAmB,GAA2B;IAClD,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,GAAG;IACd,MAAM,EAAE,GAAG;IACX,SAAS,EAAE,CAAC;CACb,CAAA;AAED,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,OAAO,mBAAmB,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,GAAG,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAA;IACtB,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IACzB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAChD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;AAC3B,CAAC;AAED,sDAAsD;AAEtD,MAAM,aAAa,GAAG,IAAI,CACxB,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,EACjC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CACrD,CAAA;AAED,gEAAgE;AAEhE,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,IAAgB,EAChB,OAAe,EACf,KAAa,EACqD,EAAE,CACpE,IAAI,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAA,CAAC,gBAAgB;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CACtB,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAC3B,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAChC,CAAA;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,KAAK,CACP,+BAA+B,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CACzF,CACF,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,EACF,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,eAAe;AAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CACtB,MAAM,CAAC,QAAQ,CAAC,8BAA+B,GAAa,CAAC,OAAO,EAAE,CAAC,CACxE,CACF,CAAA;AAEH,iDAAiD;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,IAAgB,EAChB,IAAa,EAC6D,EAAE,CAC5E,IAAI,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAAA,CAAC,SAAS;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CACtB,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EACjB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAChC,CAAA;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,EACF,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAC3B,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CACtB,MAAM,CAAC,QAAQ,CAAC,mCAAoC,GAAa,CAAC,OAAO,EAAE,CAAC,CAC7E,CACF,CAAA"}
|
|
@@ -1,29 +1,6 @@
|
|
|
1
1
|
import { createSignal } from '../reactivity/signal';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const PERIOD_INITIAL_DAYS = {
|
|
5
|
-
'1min': 3,
|
|
6
|
-
'5min': 30,
|
|
7
|
-
'15min': 60,
|
|
8
|
-
'30min': 90,
|
|
9
|
-
'60min': 180,
|
|
10
|
-
daily: 365,
|
|
11
|
-
weekly: 365,
|
|
12
|
-
monthly: 365,
|
|
13
|
-
quarterly: 365,
|
|
14
|
-
yearly: 365,
|
|
15
|
-
timeshare: 1,
|
|
16
|
-
};
|
|
17
|
-
export function getPeriodDays(period) {
|
|
18
|
-
return PERIOD_INITIAL_DAYS[period ?? 'daily'] ?? 365;
|
|
19
|
-
}
|
|
20
|
-
function formatDate(ts) {
|
|
21
|
-
const d = new Date(ts);
|
|
22
|
-
const y = d.getFullYear();
|
|
23
|
-
const m = String(d.getMonth() + 1).padStart(2, '0');
|
|
24
|
-
const day = String(d.getDate()).padStart(2, '0');
|
|
25
|
-
return `${y}-${m}-${day}`;
|
|
26
|
-
}
|
|
2
|
+
import { Effect, pipe } from 'effect';
|
|
3
|
+
import { fetchKLine, KLineFetchService, getPeriodDays, formatDate, MS_PER_DAY } from './dataBuffer.effects';
|
|
27
4
|
function mergeSortedData(existing, incoming) {
|
|
28
5
|
if (existing.length === 0)
|
|
29
6
|
return [...incoming];
|
|
@@ -47,6 +24,7 @@ export class DataBuffer {
|
|
|
47
24
|
_loadedWindow = null;
|
|
48
25
|
_pendingFetch = null;
|
|
49
26
|
_disposed = false;
|
|
27
|
+
// 已尝试请求过的边界时间戳集合,防止同一个时间段重复请求
|
|
50
28
|
_attemptedBoundaries = new Set();
|
|
51
29
|
_monthKeys = null;
|
|
52
30
|
_dayKeys = null;
|
|
@@ -142,89 +120,76 @@ export class DataBuffer {
|
|
|
142
120
|
return;
|
|
143
121
|
this.fetchRange(startTs, endTs);
|
|
144
122
|
}
|
|
145
|
-
fetchRange(startTs, endTs
|
|
123
|
+
fetchRange(startTs, endTs) {
|
|
146
124
|
if ((!this._requestFetch && !this._fetcher) || !this._currentSpec || this._disposed)
|
|
147
125
|
return;
|
|
148
126
|
if (this._pendingFetch) {
|
|
149
127
|
this._pendingFetch = this._pendingFetch.then(() => {
|
|
150
128
|
if (this._disposed)
|
|
151
129
|
return;
|
|
152
|
-
return this.fetchRange(startTs, endTs
|
|
130
|
+
return this.fetchRange(startTs, endTs);
|
|
153
131
|
});
|
|
154
132
|
return;
|
|
155
133
|
}
|
|
156
134
|
const spec = this._currentSpec;
|
|
157
|
-
const fetcher = this._fetcher;
|
|
158
135
|
this._loadingSignal.set(true);
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
symbol: spec.symbol,
|
|
164
|
-
startDate: formatDate(startTs),
|
|
165
|
-
endDate: formatDate(endTs),
|
|
166
|
-
period: spec.period ?? 'daily',
|
|
167
|
-
adjust: spec.adjust ?? 'none',
|
|
168
|
-
exchange: spec.exchange,
|
|
169
|
-
});
|
|
170
|
-
return fetchPromise.then((incoming) => {
|
|
171
|
-
if (this._disposed)
|
|
172
|
-
return;
|
|
173
|
-
if (incoming.length === 0) {
|
|
174
|
-
throw new Error(`[DataBuffer] empty data for ${spec.symbol} ${formatDate(startTs)}~${formatDate(endTs)}`);
|
|
136
|
+
const service = {
|
|
137
|
+
fetch: (s, start, end) => Effect.tryPromise(() => {
|
|
138
|
+
if (this._requestFetch) {
|
|
139
|
+
return this._requestFetch(s, start, end);
|
|
175
140
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
this.onPrepend?.(prependCount);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
if (oldLength > 0 && !advancedEarliest) {
|
|
190
|
-
this._attemptedBoundaries.delete(endTs);
|
|
191
|
-
}
|
|
192
|
-
this._data = merged;
|
|
193
|
-
this._dataSignal.set([...merged]);
|
|
194
|
-
this._precomputeKeys();
|
|
195
|
-
if (merged.length > 0) {
|
|
196
|
-
const newEarliest = merged[0].timestamp;
|
|
197
|
-
const newLatest = merged[merged.length - 1].timestamp;
|
|
198
|
-
if (!this._loadedWindow) {
|
|
199
|
-
this._loadedWindow = { earliestTs: newEarliest, latestTs: newLatest };
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
this._loadedWindow = {
|
|
203
|
-
earliestTs: Math.min(this._loadedWindow.earliestTs, newEarliest),
|
|
204
|
-
latestTs: Math.max(this._loadedWindow.latestTs, newLatest),
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
});
|
|
141
|
+
// 未定义 Fetcher 走 gotdx fallback 获取
|
|
142
|
+
return this._fetcher(s.source ?? 'gotdx', {
|
|
143
|
+
symbol: s.symbol,
|
|
144
|
+
startDate: formatDate(start),
|
|
145
|
+
endDate: formatDate(end),
|
|
146
|
+
period: s.period ?? 'daily',
|
|
147
|
+
adjust: s.adjust ?? 'none',
|
|
148
|
+
exchange: s.exchange,
|
|
149
|
+
});
|
|
150
|
+
}),
|
|
209
151
|
};
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
152
|
+
this._pendingFetch = pipe(fetchKLine(spec, startTs, endTs), Effect.provideService(KLineFetchService, service), Effect.runPromise)
|
|
153
|
+
.then((incoming) => {
|
|
154
|
+
if (this._disposed)
|
|
155
|
+
return;
|
|
156
|
+
const oldLength = this._data.length;
|
|
157
|
+
const oldEarliestTs = oldLength > 0 ? this._data[0].timestamp : null;
|
|
158
|
+
const merged = mergeSortedData(this._data, [...incoming]);
|
|
159
|
+
const newEarliestTs = merged[0]?.timestamp ?? null;
|
|
160
|
+
const advancedEarliest = oldEarliestTs !== null
|
|
161
|
+
&& newEarliestTs !== null
|
|
162
|
+
&& newEarliestTs < oldEarliestTs;
|
|
163
|
+
if (oldLength > 0 && merged.length > oldLength && advancedEarliest) {
|
|
164
|
+
const prependCount = merged.findIndex((d) => d.timestamp === oldEarliestTs);
|
|
165
|
+
if (prependCount > 0) {
|
|
166
|
+
this.onPrepend?.(prependCount);
|
|
222
167
|
}
|
|
223
|
-
|
|
168
|
+
}
|
|
169
|
+
if (oldLength > 0 && !advancedEarliest) {
|
|
224
170
|
this._attemptedBoundaries.delete(endTs);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
|
|
171
|
+
}
|
|
172
|
+
this._data = merged;
|
|
173
|
+
this._dataSignal.set([...merged]);
|
|
174
|
+
this._precomputeKeys();
|
|
175
|
+
if (merged.length > 0) {
|
|
176
|
+
const newEarliest = merged[0].timestamp;
|
|
177
|
+
const newLatest = merged[merged.length - 1].timestamp;
|
|
178
|
+
if (!this._loadedWindow) {
|
|
179
|
+
this._loadedWindow = { earliestTs: newEarliest, latestTs: newLatest };
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
this._loadedWindow = {
|
|
183
|
+
earliestTs: Math.min(this._loadedWindow.earliestTs, newEarliest),
|
|
184
|
+
latestTs: Math.max(this._loadedWindow.latestTs, newLatest),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
})
|
|
189
|
+
.catch(() => {
|
|
190
|
+
this._attemptedBoundaries.delete(endTs);
|
|
191
|
+
})
|
|
192
|
+
.finally(() => {
|
|
228
193
|
this._pendingFetch = null;
|
|
229
194
|
if (!this._disposed) {
|
|
230
195
|
this._loadingSignal.set(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataBuffer.js","sourceRoot":"","sources":["../../src/data-fetchers/dataBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"dataBuffer.js","sourceRoot":"","sources":["../../src/data-fetchers/dataBuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export { TimeShareBuffer } from './timeShareBuffer';
|
|
|
8
8
|
export type { DataBufferLike } from './dataBufferTypes';
|
|
9
9
|
export { getRegisteredFetcher, getTimeShareFetcher, fetcherSupportsTimeShare } from './fetcherDefinitionRegistry';
|
|
10
10
|
export type { TimeShareFetcherFn, TimeShareFetchConfig } from './types';
|
|
11
|
+
export { getPeriodDays, fetchKLine, fetchTimeShare, KLineFetchService, TimeShareFetchService, } from './dataBuffer.effects';
|
|
11
12
|
import './gotdx';
|
|
12
13
|
import './tradingview';
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AACjH,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACvE,OAAO,SAAS,CAAA;AAChB,OAAO,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AACjH,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACvE,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,SAAS,CAAA;AAChB,OAAO,eAAe,CAAA"}
|
|
@@ -5,6 +5,7 @@ export { routerDataFetcher, routerTimeShareFetcher } from './router';
|
|
|
5
5
|
export { DataBuffer } from './dataBuffer';
|
|
6
6
|
export { TimeShareBuffer } from './timeShareBuffer';
|
|
7
7
|
export { getRegisteredFetcher, getTimeShareFetcher, fetcherSupportsTimeShare } from './fetcherDefinitionRegistry';
|
|
8
|
+
export { getPeriodDays, fetchKLine, fetchTimeShare, KLineFetchService, TimeShareFetchService, } from './dataBuffer.effects';
|
|
8
9
|
import './gotdx';
|
|
9
10
|
import './tradingview';
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-fetchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AAEjH,OAAO,SAAS,CAAA;AAChB,OAAO,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-fetchers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AAEjH,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,SAAS,CAAA;AAChB,OAAO,eAAe,CAAA"}
|
|
@@ -11,6 +11,7 @@ export declare class TimeShareBuffer implements DataBufferLike {
|
|
|
11
11
|
private _fetcher;
|
|
12
12
|
private _queryDate;
|
|
13
13
|
private _requestSeq;
|
|
14
|
+
private _fetchFiber;
|
|
14
15
|
private _disposed;
|
|
15
16
|
get data(): Signal<ReadonlyArray<unknown>>;
|
|
16
17
|
get loading(): Signal<boolean>;
|
|
@@ -20,7 +21,7 @@ export declare class TimeShareBuffer implements DataBufferLike {
|
|
|
20
21
|
setQueryDate(date: number): void;
|
|
21
22
|
getFetcher(): TimeShareFetcherFn | null;
|
|
22
23
|
getQueryDate(): number;
|
|
23
|
-
load(spec: SymbolSpec):
|
|
24
|
+
load(spec: SymbolSpec): void;
|
|
24
25
|
setInlineData(data: unknown[]): void;
|
|
25
26
|
dispose(): void;
|
|
26
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeShareBuffer.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/timeShareBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"timeShareBuffer.d.ts","sourceRoot":"","sources":["../../src/data-fetchers/timeShareBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAM9C,qBAAa,eAAgB,YAAW,cAAc;IAEpD,OAAO,CAAC,KAAK,CAAsB;IAEnC,OAAO,CAAC,WAAW,CAAiD;IAEpE,OAAO,CAAC,cAAc,CAA+B;IAErD,OAAO,CAAC,QAAQ,CAAkC;IAElD,OAAO,CAAC,UAAU,CAAI;IAEtB,OAAO,CAAC,WAAW,CAAI;IAEvB,OAAO,CAAC,WAAW,CAAqE;IAExF,OAAO,CAAC,SAAS,CAAQ;IAEzB,IAAI,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAEzC;IAED,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAE7B;IAED,IAAI,YAAY,IAAI,UAAU,GAAG,IAAI,CAMpC;IAED,UAAU,IAAI,aAAa,EAAE;IAI7B,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI;IAIpD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC,UAAU,IAAI,kBAAkB,GAAG,IAAI;IAIvC,YAAY,IAAI,MAAM;IAItB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAgD5B,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAOpC,OAAO,IAAI,IAAI;CAUhB"}
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import { createSignal } from '../reactivity/signal';
|
|
2
2
|
import { routerTimeShareFetcher } from './router';
|
|
3
|
+
import { Effect, Fiber, pipe } from 'effect';
|
|
4
|
+
import { fetchTimeShare, TimeShareFetchService } from './dataBuffer.effects';
|
|
3
5
|
export class TimeShareBuffer {
|
|
6
|
+
// 当前持有的分时数据数组(内部可变副本)
|
|
4
7
|
_data = [];
|
|
8
|
+
// 向外部广播只读数据快照的信号
|
|
5
9
|
_dataSignal = createSignal([]);
|
|
10
|
+
// 是否正在加载中,外部 UI 绑定用
|
|
6
11
|
_loadingSignal = createSignal(false);
|
|
12
|
+
// 可选的自定义 fetcher,优先级大于默认 fectcher
|
|
7
13
|
_fetcher = null;
|
|
14
|
+
// 指定查询的历史日期(0 = 当天)
|
|
8
15
|
_queryDate = 0;
|
|
16
|
+
// 请求序号,每次 load() 递增
|
|
9
17
|
_requestSeq = 0;
|
|
18
|
+
// 当前运行的 fetch Fiber 句柄,用于随时中断旧请求
|
|
19
|
+
_fetchFiber = null;
|
|
20
|
+
// 实例是否已销毁,阻止后续任何操作
|
|
10
21
|
_disposed = false;
|
|
11
22
|
get data() {
|
|
12
23
|
return this._dataSignal;
|
|
@@ -37,31 +48,37 @@ export class TimeShareBuffer {
|
|
|
37
48
|
getQueryDate() {
|
|
38
49
|
return this._queryDate;
|
|
39
50
|
}
|
|
40
|
-
|
|
51
|
+
load(spec) {
|
|
41
52
|
if (this._disposed)
|
|
42
53
|
return;
|
|
43
|
-
|
|
54
|
+
if (this._fetchFiber) {
|
|
55
|
+
Fiber.interrupt(this._fetchFiber);
|
|
56
|
+
this._fetchFiber = null;
|
|
57
|
+
}
|
|
44
58
|
const requestSeq = ++this._requestSeq;
|
|
45
59
|
this._loadingSignal.set(true);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
60
|
+
const timeShareService = {
|
|
61
|
+
fetch: (s, date) => Effect.tryPromise(() => {
|
|
62
|
+
const fetcher = this._fetcher ?? routerTimeShareFetcher;
|
|
63
|
+
return fetcher(s.source ?? 'gotdx', {
|
|
64
|
+
symbol: s.symbol,
|
|
65
|
+
exchange: s.exchange,
|
|
66
|
+
date,
|
|
67
|
+
});
|
|
68
|
+
}),
|
|
69
|
+
};
|
|
70
|
+
const effect = pipe(fetchTimeShare(spec, this._queryDate || undefined), Effect.provideService(TimeShareFetchService, timeShareService), Effect.tap((data) => Effect.sync(() => {
|
|
55
71
|
if (this._disposed)
|
|
56
72
|
return;
|
|
73
|
+
this._queryDate = 0;
|
|
57
74
|
this._data = [...data];
|
|
58
75
|
this._dataSignal.set([...data]);
|
|
59
|
-
}
|
|
60
|
-
finally {
|
|
76
|
+
})), Effect.ensuring(Effect.sync(() => {
|
|
61
77
|
if (requestSeq === this._requestSeq) {
|
|
62
78
|
this._loadingSignal.set(false);
|
|
63
79
|
}
|
|
64
|
-
}
|
|
80
|
+
})));
|
|
81
|
+
this._fetchFiber = Effect.runFork(effect);
|
|
65
82
|
}
|
|
66
83
|
setInlineData(data) {
|
|
67
84
|
if (this._disposed)
|
|
@@ -69,9 +86,14 @@ export class TimeShareBuffer {
|
|
|
69
86
|
this._data = data;
|
|
70
87
|
this._dataSignal.set([...data]);
|
|
71
88
|
}
|
|
89
|
+
// 销毁实例
|
|
72
90
|
dispose() {
|
|
73
91
|
this._disposed = true;
|
|
74
92
|
this._requestSeq++;
|
|
93
|
+
if (this._fetchFiber) {
|
|
94
|
+
Fiber.interrupt(this._fetchFiber);
|
|
95
|
+
this._fetchFiber = null;
|
|
96
|
+
}
|
|
75
97
|
this._data = [];
|
|
76
98
|
this._loadingSignal.set(false);
|
|
77
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeShareBuffer.js","sourceRoot":"","sources":["../../src/data-fetchers/timeShareBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAA;AAMhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"timeShareBuffer.js","sourceRoot":"","sources":["../../src/data-fetchers/timeShareBuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chartDataManager.d.ts","sourceRoot":"","sources":["../../../src/engine/data/chartDataManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACxF,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"chartDataManager.d.ts","sourceRoot":"","sources":["../../../src/engine/data/chartDataManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createSignal } from '../../reactivity/signal';
|
|
2
|
-
import { DataBuffer
|
|
2
|
+
import { DataBuffer } from '../../data-fetchers/dataBuffer';
|
|
3
|
+
import { getPeriodDays } from '../../data-fetchers/dataBuffer.effects';
|
|
3
4
|
import { TimeShareBuffer } from '../../data-fetchers/timeShareBuffer';
|
|
4
5
|
import { getVisibleRange } from '../viewport/viewport';
|
|
5
6
|
import { getPhysicalKLineConfig } from '../utils/klineConfig';
|