@363045841yyt/klinechart-core 0.7.9 → 0.7.10
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/engine/chart.d.ts.map +1 -1
- package/dist/engine/chart.js +39 -229
- package/dist/engine/chart.js.map +1 -1
- package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts +10 -3
- package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts.map +1 -1
- package/dist/engine/indicators/indicatorDefinitionRegistry.js +29 -2
- package/dist/engine/indicators/indicatorDefinitionRegistry.js.map +1 -1
- package/dist/engine/indicators/indicatorMetadata.d.ts +79 -2
- package/dist/engine/indicators/indicatorMetadata.d.ts.map +1 -1
- package/dist/engine/indicators/indicatorMetadata.js.map +1 -1
- package/dist/engine/indicators/indicatorRegistry.d.ts +5 -0
- package/dist/engine/indicators/indicatorRegistry.d.ts.map +1 -1
- package/dist/engine/indicators/indicatorRegistry.js +49 -5
- package/dist/engine/indicators/indicatorRegistry.js.map +1 -1
- package/dist/engine/indicators/registerBuiltins.d.ts +42 -0
- package/dist/engine/indicators/registerBuiltins.d.ts.map +1 -0
- package/dist/engine/indicators/registerBuiltins.js +46 -0
- package/dist/engine/indicators/registerBuiltins.js.map +1 -0
- package/dist/engine/indicators/scheduler.d.ts +2 -2
- package/dist/engine/indicators/scheduler.d.ts.map +1 -1
- package/dist/engine/indicators/scheduler.js +41 -11
- package/dist/engine/indicators/scheduler.js.map +1 -1
- package/dist/engine/indicators/stateComposer.d.ts +6 -4
- package/dist/engine/indicators/stateComposer.d.ts.map +1 -1
- package/dist/engine/indicators/stateComposer.js +80 -984
- package/dist/engine/indicators/stateComposer.js.map +1 -1
- package/dist/engine/indicators/visibleStateComposers.d.ts +145 -0
- package/dist/engine/indicators/visibleStateComposers.d.ts.map +1 -0
- package/dist/engine/indicators/visibleStateComposers.js +469 -0
- package/dist/engine/indicators/visibleStateComposers.js.map +1 -0
- package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/atr.js +8 -0
- package/dist/engine/renderers/Indicator/atr.js.map +1 -1
- package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/boll.js +47 -0
- package/dist/engine/renderers/Indicator/boll.js.map +1 -1
- package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/cci.js +8 -1
- package/dist/engine/renderers/Indicator/cci.js.map +1 -1
- package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/chaikinVol.js +7 -1
- package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
- package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/cmf.js +7 -1
- package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
- package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/dema.js +8 -1
- package/dist/engine/renderers/Indicator/dema.js.map +1 -1
- package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/donchian.js +8 -1
- package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
- package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ene.js +45 -0
- package/dist/engine/renderers/Indicator/ene.js.map +1 -1
- package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/expma.js +45 -0
- package/dist/engine/renderers/Indicator/expma.js.map +1 -1
- package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/fastk.js +8 -1
- package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
- package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/fib.js +8 -1
- package/dist/engine/renderers/Indicator/fib.js.map +1 -1
- package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/hma.js +8 -1
- package/dist/engine/renderers/Indicator/hma.js.map +1 -1
- package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/hv.js +7 -0
- package/dist/engine/renderers/Indicator/hv.js.map +1 -1
- package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ichimoku.js +8 -1
- package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
- package/dist/engine/renderers/Indicator/index.d.ts +7 -2
- package/dist/engine/renderers/Indicator/index.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/index.js +2 -114
- package/dist/engine/renderers/Indicator/index.js.map +1 -1
- package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/kama.js +8 -1
- package/dist/engine/renderers/Indicator/kama.js.map +1 -1
- package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/keltner.js +8 -1
- package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
- package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/kst.js +8 -0
- package/dist/engine/renderers/Indicator/kst.js.map +1 -1
- package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/ma.js +63 -0
- package/dist/engine/renderers/Indicator/ma.js.map +1 -1
- package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/macd.js +8 -1
- package/dist/engine/renderers/Indicator/macd.js.map +1 -1
- package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mfi.js +7 -1
- package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
- package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/mom.js +8 -0
- package/dist/engine/renderers/Indicator/mom.js.map +1 -1
- package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/obv.js +7 -1
- package/dist/engine/renderers/Indicator/obv.js.map +1 -1
- package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/parkinson.js +7 -0
- package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
- package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/pivot.js +8 -1
- package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
- package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/pvt.js +7 -1
- package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
- package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/roc.js +7 -1
- package/dist/engine/renderers/Indicator/roc.js.map +1 -1
- package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/rsi.js +8 -1
- package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
- package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/sar.js +8 -1
- package/dist/engine/renderers/Indicator/sar.js.map +1 -1
- package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/stoch.js +8 -1
- package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
- package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/structure.js +8 -1
- package/dist/engine/renderers/Indicator/structure.js.map +1 -1
- package/dist/engine/renderers/Indicator/subPaneConfig.d.ts +1 -1
- package/dist/engine/renderers/Indicator/subPaneConfig.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/subPaneConfig.js.map +1 -1
- package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/supertrend.js +8 -1
- package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
- package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/tema.js +8 -1
- package/dist/engine/renderers/Indicator/tema.js.map +1 -1
- package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/trix.js +7 -0
- package/dist/engine/renderers/Indicator/trix.js.map +1 -1
- package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/vma.js +7 -0
- package/dist/engine/renderers/Indicator/vma.js.map +1 -1
- package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/volumeProfile.js +7 -1
- package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
- package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/vwap.js +7 -1
- package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
- package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/wma.js +8 -1
- package/dist/engine/renderers/Indicator/wma.js.map +1 -1
- package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/wmsr.js +8 -1
- package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
- package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
- package/dist/engine/renderers/Indicator/zones.js +8 -1
- package/dist/engine/renderers/Indicator/zones.js.map +1 -1
- package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
- package/dist/engine/renderers/extremaMarkers.js +0 -22
- package/dist/engine/renderers/extremaMarkers.js.map +1 -1
- package/dist/engine/renderers/subVolume.d.ts.map +1 -1
- package/dist/engine/renderers/subVolume.js +3 -0
- package/dist/engine/renderers/subVolume.js.map +1 -1
- package/dist/engine/subPaneManager.d.ts +1 -0
- package/dist/engine/subPaneManager.d.ts.map +1 -1
- package/dist/engine/subPaneManager.js +30 -237
- package/dist/engine/subPaneManager.js.map +1 -1
- package/dist/semantic/controller.d.ts +9 -4
- package/dist/semantic/controller.d.ts.map +1 -1
- package/dist/semantic/controller.js +57 -53
- package/dist/semantic/controller.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/engine/chart.ts +49 -229
- package/src/engine/indicators/__tests__/indicatorDefinitionRegistry.test.ts +59 -0
- package/src/engine/indicators/__tests__/indicatorRegistry.test.ts +62 -0
- package/src/engine/indicators/__tests__/registerBuiltins.test.ts +380 -0
- package/src/engine/indicators/__tests__/scheduler.test.ts +62 -32
- package/src/engine/indicators/__tests__/stateComposer.test.ts +444 -0
- package/src/engine/indicators/indicatorDefinitionRegistry.ts +49 -4
- package/src/engine/indicators/indicatorMetadata.ts +107 -2
- package/src/engine/indicators/indicatorRegistry.ts +54 -5
- package/src/engine/indicators/registerBuiltins.ts +47 -0
- package/src/engine/indicators/scheduler.ts +61 -13
- package/src/engine/indicators/stateComposer.ts +110 -1040
- package/src/engine/indicators/visibleStateComposers.ts +734 -0
- package/src/engine/renderers/Indicator/__tests__/createSubIndicatorRenderer.test.ts +61 -0
- package/src/engine/renderers/Indicator/atr.ts +9 -1
- package/src/engine/renderers/Indicator/boll.ts +53 -1
- package/src/engine/renderers/Indicator/cci.ts +9 -2
- package/src/engine/renderers/Indicator/chaikinVol.ts +8 -2
- package/src/engine/renderers/Indicator/cmf.ts +8 -2
- package/src/engine/renderers/Indicator/dema.ts +9 -2
- package/src/engine/renderers/Indicator/donchian.ts +9 -2
- package/src/engine/renderers/Indicator/ene.ts +51 -1
- package/src/engine/renderers/Indicator/expma.ts +51 -1
- package/src/engine/renderers/Indicator/fastk.ts +9 -2
- package/src/engine/renderers/Indicator/fib.ts +9 -2
- package/src/engine/renderers/Indicator/hma.ts +9 -2
- package/src/engine/renderers/Indicator/hv.ts +8 -1
- package/src/engine/renderers/Indicator/ichimoku.ts +9 -2
- package/src/engine/renderers/Indicator/index.ts +9 -121
- package/src/engine/renderers/Indicator/kama.ts +9 -2
- package/src/engine/renderers/Indicator/keltner.ts +9 -2
- package/src/engine/renderers/Indicator/kst.ts +9 -1
- package/src/engine/renderers/Indicator/ma.ts +69 -0
- package/src/engine/renderers/Indicator/macd.ts +9 -2
- package/src/engine/renderers/Indicator/mfi.ts +8 -2
- package/src/engine/renderers/Indicator/mom.ts +9 -1
- package/src/engine/renderers/Indicator/obv.ts +8 -2
- package/src/engine/renderers/Indicator/parkinson.ts +8 -1
- package/src/engine/renderers/Indicator/pivot.ts +9 -2
- package/src/engine/renderers/Indicator/pvt.ts +8 -2
- package/src/engine/renderers/Indicator/roc.ts +8 -2
- package/src/engine/renderers/Indicator/rsi.ts +9 -2
- package/src/engine/renderers/Indicator/sar.ts +9 -2
- package/src/engine/renderers/Indicator/stoch.ts +9 -2
- package/src/engine/renderers/Indicator/structure.ts +9 -2
- package/src/engine/renderers/Indicator/subPaneConfig.ts +1 -1
- package/src/engine/renderers/Indicator/supertrend.ts +9 -2
- package/src/engine/renderers/Indicator/tema.ts +9 -2
- package/src/engine/renderers/Indicator/trix.ts +8 -1
- package/src/engine/renderers/Indicator/vma.ts +8 -1
- package/src/engine/renderers/Indicator/volumeProfile.ts +8 -2
- package/src/engine/renderers/Indicator/vwap.ts +8 -2
- package/src/engine/renderers/Indicator/wma.ts +9 -2
- package/src/engine/renderers/Indicator/wmsr.ts +9 -2
- package/src/engine/renderers/Indicator/zones.ts +9 -2
- package/src/engine/renderers/extremaMarkers.ts +0 -24
- package/src/engine/renderers/subVolume.ts +3 -0
- package/src/engine/subPaneManager.ts +34 -274
- package/src/semantic/__tests__/controller.test.ts +84 -0
- package/src/semantic/controller.ts +69 -65
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/semantic/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/semantic/controller.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.7.
|
|
1
|
+
export declare const VERSION = "0.7.10";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAA"}
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = "0.7.
|
|
1
|
+
export const VERSION = "0.7.10";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAA"}
|
package/package.json
CHANGED
package/src/engine/chart.ts
CHANGED
|
@@ -11,7 +11,7 @@ import { MarkerManager, type CustomMarkerEntity } from './marker/registry'
|
|
|
11
11
|
import { getPhysicalKLineConfig, calcKWidthPx } from './utils/klineConfig'
|
|
12
12
|
import { computeZoom, computeZoomToLevel, type ZoomConfig } from './utils/zoom'
|
|
13
13
|
import { IndicatorScheduler } from './indicators/scheduler'
|
|
14
|
-
import {
|
|
14
|
+
import { getBuiltinIndicatorDefinitions } from './indicators/registerBuiltins'
|
|
15
15
|
import { SubPaneManager, type SubPaneEntry } from './subPaneManager'
|
|
16
16
|
|
|
17
17
|
import {
|
|
@@ -30,24 +30,6 @@ import {
|
|
|
30
30
|
type XAxisRange,
|
|
31
31
|
} from '../plugin'
|
|
32
32
|
import { createSubIndicatorRenderer, type SubIndicatorType } from './renderers/Indicator'
|
|
33
|
-
import { createMARendererPlugin } from './renderers/Indicator/ma'
|
|
34
|
-
import { createBOLLRendererPlugin } from './renderers/Indicator/boll'
|
|
35
|
-
import { createEXPMARendererPlugin } from './renderers/Indicator/expma'
|
|
36
|
-
import { createENERendererPlugin } from './renderers/Indicator/ene'
|
|
37
|
-
import { createWMARendererPlugin } from './renderers/Indicator/wma'
|
|
38
|
-
import { createDEMARendererPlugin } from './renderers/Indicator/dema'
|
|
39
|
-
import { createTEMARendererPlugin } from './renderers/Indicator/tema'
|
|
40
|
-
import { createHMARendererPlugin } from './renderers/Indicator/hma'
|
|
41
|
-
import { createKAMARendererPlugin } from './renderers/Indicator/kama'
|
|
42
|
-
import { createSARRendererPlugin } from './renderers/Indicator/sar'
|
|
43
|
-
import { createSuperTrendRendererPlugin } from './renderers/Indicator/supertrend'
|
|
44
|
-
import { createKeltnerRendererPlugin } from './renderers/Indicator/keltner'
|
|
45
|
-
import { createDonchianRendererPlugin } from './renderers/Indicator/donchian'
|
|
46
|
-
import { createIchimokuRendererPlugin } from './renderers/Indicator/ichimoku'
|
|
47
|
-
import { createPivotRendererPlugin } from './renderers/Indicator/pivot'
|
|
48
|
-
import { createFibRendererPlugin } from './renderers/Indicator/fib'
|
|
49
|
-
import { createStructureRendererPlugin } from './renderers/Indicator/structure'
|
|
50
|
-
import { createZonesRendererPlugin } from './renderers/Indicator/zones'
|
|
51
33
|
import { createMainIndicatorLegendRendererPlugin } from './renderers/Indicator/mainIndicatorLegend'
|
|
52
34
|
import { DrawingStore } from './drawing'
|
|
53
35
|
import { createDrawingRendererPlugin, createDrawingLabelOverlayPlugin } from './drawing/plugin'
|
|
@@ -59,7 +41,7 @@ import { createExtremaMarkersRendererPlugin } from './renderers/extremaMarkers'
|
|
|
59
41
|
import { createYAxisRendererPlugin } from './renderers/yAxis'
|
|
60
42
|
import { createCrosshairRendererPlugin } from './renderers/crosshair'
|
|
61
43
|
import { createTimeAxisRendererPlugin } from './renderers/timeAxis'
|
|
62
|
-
|
|
44
|
+
|
|
63
45
|
|
|
64
46
|
// 重新导出以保持向后兼容
|
|
65
47
|
export { getPhysicalKLineConfig, calcKWidthPx }
|
|
@@ -309,9 +291,13 @@ export class Chart {
|
|
|
309
291
|
// 启用对应的渲染器
|
|
310
292
|
this.enableMainIndicatorRenderer(id)
|
|
311
293
|
|
|
312
|
-
//
|
|
294
|
+
// 更新调度器配置(触发异步重算)
|
|
313
295
|
this.updateIndicatorSchedulerConfig(id)
|
|
314
296
|
|
|
297
|
+
// 同步重算主图状态:latestResult 已有该指标的 series,只是没注册到 registry
|
|
298
|
+
// 补调 updateVisibleRange 使其走 updateVisibleStatesOnly,立即从 latestResult 合成极值
|
|
299
|
+
this.indicatorScheduler.updateVisibleRange(this.lastVisibleRange)
|
|
300
|
+
|
|
315
301
|
this.scheduleDraw()
|
|
316
302
|
return true
|
|
317
303
|
}
|
|
@@ -421,121 +407,16 @@ export class Chart {
|
|
|
421
407
|
* 启用主图指标渲染器(内部方法)
|
|
422
408
|
*/
|
|
423
409
|
private enableMainIndicatorRenderer(indicatorId: string): void {
|
|
424
|
-
const
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
},
|
|
431
|
-
'BOLL': () => {
|
|
432
|
-
if (!this.getRenderer('boll')) {
|
|
433
|
-
this.useRenderer(createBOLLRendererPlugin())
|
|
434
|
-
}
|
|
435
|
-
this.setRendererEnabled('boll', true)
|
|
436
|
-
},
|
|
437
|
-
'EXPMA': () => {
|
|
438
|
-
if (!this.getRenderer('expma')) {
|
|
439
|
-
this.useRenderer(createEXPMARendererPlugin())
|
|
440
|
-
}
|
|
441
|
-
this.setRendererEnabled('expma', true)
|
|
442
|
-
},
|
|
443
|
-
'ENE': () => {
|
|
444
|
-
if (!this.getRenderer('ene')) {
|
|
445
|
-
this.useRenderer(createENERendererPlugin())
|
|
446
|
-
}
|
|
447
|
-
this.setRendererEnabled('ene', true)
|
|
448
|
-
},
|
|
449
|
-
'WMA': () => {
|
|
450
|
-
if (!this.getRenderer('wma_main')) {
|
|
451
|
-
this.useRenderer(createWMARendererPlugin({ paneId: 'main' }))
|
|
452
|
-
}
|
|
453
|
-
this.setRendererEnabled('wma_main', true)
|
|
454
|
-
},
|
|
455
|
-
'DEMA': () => {
|
|
456
|
-
if (!this.getRenderer('dema_main')) {
|
|
457
|
-
this.useRenderer(createDEMARendererPlugin({ paneId: 'main' }))
|
|
458
|
-
}
|
|
459
|
-
this.setRendererEnabled('dema_main', true)
|
|
460
|
-
},
|
|
461
|
-
'TEMA': () => {
|
|
462
|
-
if (!this.getRenderer('tema_main')) {
|
|
463
|
-
this.useRenderer(createTEMARendererPlugin({ paneId: 'main' }))
|
|
464
|
-
}
|
|
465
|
-
this.setRendererEnabled('tema_main', true)
|
|
466
|
-
},
|
|
467
|
-
'HMA': () => {
|
|
468
|
-
if (!this.getRenderer('hma_main')) {
|
|
469
|
-
this.useRenderer(createHMARendererPlugin({ paneId: 'main' }))
|
|
470
|
-
}
|
|
471
|
-
this.setRendererEnabled('hma_main', true)
|
|
472
|
-
},
|
|
473
|
-
'KAMA': () => {
|
|
474
|
-
if (!this.getRenderer('kama_main')) {
|
|
475
|
-
this.useRenderer(createKAMARendererPlugin({ paneId: 'main' }))
|
|
476
|
-
}
|
|
477
|
-
this.setRendererEnabled('kama_main', true)
|
|
478
|
-
},
|
|
479
|
-
'SAR': () => {
|
|
480
|
-
if (!this.getRenderer('sar_main')) {
|
|
481
|
-
this.useRenderer(createSARRendererPlugin({ paneId: 'main' }))
|
|
482
|
-
}
|
|
483
|
-
this.setRendererEnabled('sar_main', true)
|
|
484
|
-
},
|
|
485
|
-
'SUPERTREND': () => {
|
|
486
|
-
if (!this.getRenderer('supertrend_main')) {
|
|
487
|
-
this.useRenderer(createSuperTrendRendererPlugin({ paneId: 'main' }))
|
|
488
|
-
}
|
|
489
|
-
this.setRendererEnabled('supertrend_main', true)
|
|
490
|
-
},
|
|
491
|
-
'KELTNER': () => {
|
|
492
|
-
if (!this.getRenderer('keltner_main')) {
|
|
493
|
-
this.useRenderer(createKeltnerRendererPlugin({ paneId: 'main' }))
|
|
494
|
-
}
|
|
495
|
-
this.setRendererEnabled('keltner_main', true)
|
|
496
|
-
},
|
|
497
|
-
'DONCHIAN': () => {
|
|
498
|
-
if (!this.getRenderer('donchian_main')) {
|
|
499
|
-
this.useRenderer(createDonchianRendererPlugin({ paneId: 'main' }))
|
|
500
|
-
}
|
|
501
|
-
this.setRendererEnabled('donchian_main', true)
|
|
502
|
-
},
|
|
503
|
-
'ICHIMOKU': () => {
|
|
504
|
-
if (!this.getRenderer('ichimoku_main')) {
|
|
505
|
-
this.useRenderer(createIchimokuRendererPlugin({ paneId: 'main' }))
|
|
506
|
-
}
|
|
507
|
-
this.setRendererEnabled('ichimoku_main', true)
|
|
508
|
-
},
|
|
509
|
-
'PIVOT': () => {
|
|
510
|
-
if (!this.getRenderer('pivot_main')) {
|
|
511
|
-
this.useRenderer(createPivotRendererPlugin({ paneId: 'main' }))
|
|
512
|
-
}
|
|
513
|
-
this.setRendererEnabled('pivot_main', true)
|
|
514
|
-
},
|
|
515
|
-
'FIB': () => {
|
|
516
|
-
if (!this.getRenderer('fib_main')) {
|
|
517
|
-
this.useRenderer(createFibRendererPlugin({ paneId: 'main' }))
|
|
518
|
-
}
|
|
519
|
-
this.setRendererEnabled('fib_main', true)
|
|
520
|
-
},
|
|
521
|
-
'STRUCTURE': () => {
|
|
522
|
-
if (!this.getRenderer('structure_main')) {
|
|
523
|
-
this.useRenderer(createStructureRendererPlugin({ paneId: 'main' }))
|
|
524
|
-
}
|
|
525
|
-
this.setRendererEnabled('structure_main', true)
|
|
526
|
-
},
|
|
527
|
-
'ZONES': () => {
|
|
528
|
-
if (!this.getRenderer('zones_main')) {
|
|
529
|
-
this.useRenderer(createZonesRendererPlugin({ paneId: 'main' }))
|
|
530
|
-
}
|
|
531
|
-
this.setRendererEnabled('zones_main', true)
|
|
532
|
-
},
|
|
410
|
+
const definition = this.indicatorScheduler.getIndicatorMetadata(indicatorId)
|
|
411
|
+
const mainPane = definition?.mainPane
|
|
412
|
+
if (!definition || !mainPane) return
|
|
413
|
+
|
|
414
|
+
if (!this.getRenderer(mainPane.rendererName)) {
|
|
415
|
+
this.useRenderer(definition.rendererFactory({ paneId: 'main', indicatorId }))
|
|
533
416
|
}
|
|
534
417
|
|
|
535
|
-
|
|
536
|
-
if (fn) fn()
|
|
418
|
+
this.setRendererEnabled(mainPane.rendererName, true)
|
|
537
419
|
|
|
538
|
-
// 确保图例渲染器已注册
|
|
539
420
|
if (!this.getRenderer('mainIndicatorLegend')) {
|
|
540
421
|
this.useRenderer(createMainIndicatorLegendRendererPlugin({ yPaddingPx: this.opt.yPaddingPx }))
|
|
541
422
|
}
|
|
@@ -545,28 +426,7 @@ export class Chart {
|
|
|
545
426
|
* 禁用主图指标渲染器(内部方法)
|
|
546
427
|
*/
|
|
547
428
|
private disableMainIndicatorRenderer(indicatorId: string): void {
|
|
548
|
-
const
|
|
549
|
-
'MA': 'ma',
|
|
550
|
-
'BOLL': 'boll',
|
|
551
|
-
'EXPMA': 'expma',
|
|
552
|
-
'ENE': 'ene',
|
|
553
|
-
'WMA': 'wma_main',
|
|
554
|
-
'DEMA': 'dema_main',
|
|
555
|
-
'TEMA': 'tema_main',
|
|
556
|
-
'HMA': 'hma_main',
|
|
557
|
-
'KAMA': 'kama_main',
|
|
558
|
-
'SAR': 'sar_main',
|
|
559
|
-
'SUPERTREND': 'supertrend_main',
|
|
560
|
-
'KELTNER': 'keltner_main',
|
|
561
|
-
'DONCHIAN': 'donchian_main',
|
|
562
|
-
'ICHIMOKU': 'ichimoku_main',
|
|
563
|
-
'PIVOT': 'pivot_main',
|
|
564
|
-
'FIB': 'fib_main',
|
|
565
|
-
'STRUCTURE': 'structure_main',
|
|
566
|
-
'ZONES': 'zones_main',
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
const rendererName = rendererMap[indicatorId]
|
|
429
|
+
const rendererName = this.indicatorScheduler.getIndicatorMetadata(indicatorId)?.mainPane?.rendererName
|
|
570
430
|
if (rendererName) {
|
|
571
431
|
this.setRendererEnabled(rendererName, false)
|
|
572
432
|
}
|
|
@@ -580,75 +440,13 @@ export class Chart {
|
|
|
580
440
|
const isActive = entry !== undefined
|
|
581
441
|
const params = entry?.params ?? {}
|
|
582
442
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
ma60: isActive,
|
|
591
|
-
})
|
|
592
|
-
break
|
|
593
|
-
case 'BOLL':
|
|
594
|
-
if (isActive) {
|
|
595
|
-
this.indicatorScheduler.updateBOLLConfig(params as unknown as BOLLSchedulerConfig)
|
|
596
|
-
} else {
|
|
597
|
-
this.indicatorScheduler.updateBOLLConfig({ ...params, showUpper: false, showMiddle: false, showLower: false, showBand: false } as unknown as BOLLSchedulerConfig)
|
|
598
|
-
}
|
|
599
|
-
break
|
|
600
|
-
case 'EXPMA':
|
|
601
|
-
if (isActive) {
|
|
602
|
-
this.indicatorScheduler.updateEXPMAConfig(params as unknown as EXPMASchedulerConfig)
|
|
603
|
-
}
|
|
604
|
-
break
|
|
605
|
-
case 'ENE':
|
|
606
|
-
if (isActive) {
|
|
607
|
-
this.indicatorScheduler.updateENEConfig(params as unknown as ENESchedulerConfig)
|
|
608
|
-
}
|
|
609
|
-
break
|
|
610
|
-
case 'WMA':
|
|
611
|
-
this.indicatorScheduler.updateWMAConfig({ ...params, showWMA: isActive } as unknown as WMASchedulerConfig, 'main')
|
|
612
|
-
break
|
|
613
|
-
case 'DEMA':
|
|
614
|
-
this.indicatorScheduler.updateDEMAConfig({ ...params, showDEMA: isActive } as unknown as DEMASchedulerConfig, 'main')
|
|
615
|
-
break
|
|
616
|
-
case 'TEMA':
|
|
617
|
-
this.indicatorScheduler.updateTEMAConfig({ ...params, showTEMA: isActive } as unknown as TEMASchedulerConfig, 'main')
|
|
618
|
-
break
|
|
619
|
-
case 'HMA':
|
|
620
|
-
this.indicatorScheduler.updateHMAConfig({ ...params, showHMA: isActive } as unknown as HMASchedulerConfig, 'main')
|
|
621
|
-
break
|
|
622
|
-
case 'KAMA':
|
|
623
|
-
this.indicatorScheduler.updateKAMAConfig({ ...params, showKAMA: isActive } as unknown as KAMASchedulerConfig, 'main')
|
|
624
|
-
break
|
|
625
|
-
case 'SAR':
|
|
626
|
-
this.indicatorScheduler.updateSARConfig({ ...params, showSAR: isActive } as unknown as SARSchedulerConfig, 'main')
|
|
627
|
-
break
|
|
628
|
-
case 'SUPERTREND':
|
|
629
|
-
this.indicatorScheduler.updateSuperTrendConfig({ ...params, showSuperTrend: isActive } as unknown as SuperTrendSchedulerConfig, 'main')
|
|
630
|
-
break
|
|
631
|
-
case 'KELTNER':
|
|
632
|
-
this.indicatorScheduler.updateKeltnerConfig({ ...params, showUpper: isActive, showMiddle: isActive, showLower: isActive } as unknown as KeltnerSchedulerConfig, 'main')
|
|
633
|
-
break
|
|
634
|
-
case 'DONCHIAN':
|
|
635
|
-
this.indicatorScheduler.updateDonchianConfig({ ...params, showUpper: isActive, showMiddle: isActive, showLower: isActive } as unknown as DonchianSchedulerConfig, 'main')
|
|
636
|
-
break
|
|
637
|
-
case 'ICHIMOKU':
|
|
638
|
-
this.indicatorScheduler.updateIchimokuConfig({ ...params, showTenkan: isActive, showKijun: isActive, showSpanA: isActive, showSpanB: isActive, showChikou: isActive, showCloud: isActive } as unknown as IchimokuSchedulerConfig, 'main')
|
|
639
|
-
break
|
|
640
|
-
case 'PIVOT':
|
|
641
|
-
this.indicatorScheduler.updatePivotConfig({ ...params, showPP: isActive, showR1: isActive, showR2: isActive, showR3: isActive, showS1: isActive, showS2: isActive, showS3: isActive } as unknown as PivotSchedulerConfig, 'main')
|
|
642
|
-
break
|
|
643
|
-
case 'FIB':
|
|
644
|
-
this.indicatorScheduler.updateFibConfig({ ...params, showLevels: isActive } as unknown as FibSchedulerConfig, 'main')
|
|
645
|
-
break
|
|
646
|
-
case 'STRUCTURE':
|
|
647
|
-
this.indicatorScheduler.updateStructureConfig({ ...params, showSwingLabels: isActive, showBOS: isActive, showCHOCH: isActive } as unknown as StructureSchedulerConfig, 'main')
|
|
648
|
-
break
|
|
649
|
-
case 'ZONES':
|
|
650
|
-
this.indicatorScheduler.updateZonesConfig({ ...params, showFVG: isActive, showOB: isActive, showFilledZones: isActive } as unknown as ZonesSchedulerConfig, 'main')
|
|
651
|
-
break
|
|
443
|
+
const definition = this.indicatorScheduler.getIndicatorMetadata(indicatorId)
|
|
444
|
+
const toActiveConfig = definition?.mainPane?.toActiveConfig
|
|
445
|
+
if (!definition?.updateConfig || !toActiveConfig) return
|
|
446
|
+
|
|
447
|
+
const config = toActiveConfig(params, isActive)
|
|
448
|
+
if (config !== null) {
|
|
449
|
+
definition.updateConfig(this.indicatorScheduler, config, 'main')
|
|
652
450
|
}
|
|
653
451
|
}
|
|
654
452
|
|
|
@@ -709,7 +507,7 @@ export class Chart {
|
|
|
709
507
|
// 初始化指标调度器
|
|
710
508
|
this.indicatorScheduler = new IndicatorScheduler()
|
|
711
509
|
this.indicatorScheduler.setPluginHost(this.pluginHost)
|
|
712
|
-
for (const definition of
|
|
510
|
+
for (const definition of getBuiltinIndicatorDefinitions()) {
|
|
713
511
|
this.indicatorScheduler.registerIndicator(definition)
|
|
714
512
|
}
|
|
715
513
|
this.indicatorScheduler.setInvalidateCallback(() => this.scheduleDraw())
|
|
@@ -1366,14 +1164,18 @@ export class Chart {
|
|
|
1366
1164
|
this.upsertPane({ id: paneId, ratio: 1, visible: true, role: 'indicator' })
|
|
1367
1165
|
}
|
|
1368
1166
|
|
|
1369
|
-
const
|
|
1167
|
+
const definition = this.indicatorScheduler.getIndicatorMetadata(indicatorId)
|
|
1168
|
+
if (!definition) {
|
|
1169
|
+
throw new Error(`[Chart] Unknown indicator: ${indicatorId}`)
|
|
1170
|
+
}
|
|
1171
|
+
const renderer = createSubIndicatorRenderer({ indicatorId, paneId, definition, params })
|
|
1172
|
+
const rendererName = renderer.name
|
|
1370
1173
|
const existing = this.getRenderer(rendererName)
|
|
1371
1174
|
if (existing) {
|
|
1372
1175
|
if (params) this.updateRendererConfig(rendererName, params)
|
|
1373
1176
|
return
|
|
1374
1177
|
}
|
|
1375
1178
|
|
|
1376
|
-
const renderer = createSubIndicatorRenderer({ indicatorId, paneId })
|
|
1377
1179
|
this.useRenderer(renderer, params)
|
|
1378
1180
|
}
|
|
1379
1181
|
|
|
@@ -1667,7 +1469,7 @@ export class Chart {
|
|
|
1667
1469
|
|
|
1668
1470
|
private getDefaultSubPaneParams(indicatorId: SubIndicatorType): Record<string, unknown> {
|
|
1669
1471
|
// 默认参数定义在 SubPaneManager 中,这里导入使用
|
|
1670
|
-
const defaults: Record<
|
|
1472
|
+
const defaults: Record<string, Record<string, unknown>> = {
|
|
1671
1473
|
VOLUME: {},
|
|
1672
1474
|
MACD: { fastPeriod: 12, slowPeriod: 26, signalPeriod: 9 },
|
|
1673
1475
|
RSI: { period1: 6, period2: 12, period3: 24 },
|
|
@@ -1705,7 +1507,7 @@ export class Chart {
|
|
|
1705
1507
|
ZONES: { showFVG: true, showOB: true, showFilledZones: true, obLookback: 5 },
|
|
1706
1508
|
VOLUME_PROFILE: { bins: 24, lookback: 0, valueAreaPercent: 0.7, showVolumeProfile: true },
|
|
1707
1509
|
}
|
|
1708
|
-
return { ...defaults[indicatorId] }
|
|
1510
|
+
return { ...(defaults[indicatorId] ?? {}) }
|
|
1709
1511
|
}
|
|
1710
1512
|
|
|
1711
1513
|
/** 副图渲染器名称前缀(保留向后兼容) */
|
|
@@ -1777,6 +1579,24 @@ export class Chart {
|
|
|
1777
1579
|
// 重置交互状态
|
|
1778
1580
|
this.interaction.reset()
|
|
1779
1581
|
|
|
1582
|
+
// 如果 visibleRange 还是 {0,0},先从 viewport 算一个初步范围
|
|
1583
|
+
// 避免 scheduler 第一次计算时用 {0,0} 产出 Infinity 极值
|
|
1584
|
+
if (this.lastVisibleRange.start === 0 && this.lastVisibleRange.end === 0 && this._internalData.length > 0) {
|
|
1585
|
+
const plotWidth = this.observedSize.width > 0
|
|
1586
|
+
? this.observedSize.width
|
|
1587
|
+
: Math.max(1, Math.round(this.dom.container?.clientWidth ?? 800))
|
|
1588
|
+
const dpr = this.getEffectiveDpr()
|
|
1589
|
+
const { start, end } = getVisibleRange(
|
|
1590
|
+
this.cachedScrollLeft,
|
|
1591
|
+
plotWidth,
|
|
1592
|
+
this.opt.kWidth,
|
|
1593
|
+
this.opt.kGap,
|
|
1594
|
+
this._internalData.length,
|
|
1595
|
+
dpr,
|
|
1596
|
+
)
|
|
1597
|
+
this.lastVisibleRange = { start, end }
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1780
1600
|
// 触发指标计算(在 scheduleDraw 之前,确保渲染器读到最新状态)
|
|
1781
1601
|
this.indicatorScheduler.update(this._internalData, this.lastVisibleRange)
|
|
1782
1602
|
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { describe, expect, it, vi, beforeEach } from 'vitest'
|
|
2
|
+
import {
|
|
3
|
+
clearRegisteredIndicatorDefinitionsForTest,
|
|
4
|
+
getRegisteredIndicatorDefinition,
|
|
5
|
+
getRegisteredIndicatorDefinitions,
|
|
6
|
+
Indicator,
|
|
7
|
+
} from '../indicatorDefinitionRegistry'
|
|
8
|
+
|
|
9
|
+
describe('Indicator definition registry', () => {
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
clearRegisteredIndicatorDefinitionsForTest()
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
it('collects decorated definitions and resolves aliases case-insensitively', () => {
|
|
15
|
+
@Indicator({
|
|
16
|
+
name: 'customRsi',
|
|
17
|
+
aliases: ['CUSTOM_RSI'],
|
|
18
|
+
displayName: 'Custom RSI',
|
|
19
|
+
category: 'oscillator',
|
|
20
|
+
stateKey: (paneId: string) => `indicator:customRsi:${paneId}`,
|
|
21
|
+
defaultPaneId: 'sub_CUSTOM_RSI',
|
|
22
|
+
})
|
|
23
|
+
class CustomRsiDefinition {
|
|
24
|
+
static rendererFactory = vi.fn() as any
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
void CustomRsiDefinition
|
|
28
|
+
|
|
29
|
+
const definition = getRegisteredIndicatorDefinition('CUSTOM_RSI')
|
|
30
|
+
|
|
31
|
+
expect(definition?.name).toBe('customRsi')
|
|
32
|
+
expect(getRegisteredIndicatorDefinition('custom rsi')).toBe(definition)
|
|
33
|
+
expect(getRegisteredIndicatorDefinition('customrsi')).toBe(definition)
|
|
34
|
+
expect(getRegisteredIndicatorDefinitions()).toHaveLength(1)
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
it('clears registered definitions and aliases for tests', () => {
|
|
38
|
+
@Indicator({
|
|
39
|
+
name: 'customMacd',
|
|
40
|
+
aliases: ['CUSTOM_MACD'],
|
|
41
|
+
displayName: 'Custom MACD',
|
|
42
|
+
category: 'oscillator',
|
|
43
|
+
stateKey: (paneId: string) => `indicator:customMacd:${paneId}`,
|
|
44
|
+
defaultPaneId: 'sub_CUSTOM_MACD',
|
|
45
|
+
})
|
|
46
|
+
class CustomMacdDefinition {
|
|
47
|
+
static rendererFactory = vi.fn() as any
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
void CustomMacdDefinition
|
|
51
|
+
|
|
52
|
+
expect(getRegisteredIndicatorDefinition('CUSTOM_MACD')).toBeDefined()
|
|
53
|
+
|
|
54
|
+
clearRegisteredIndicatorDefinitionsForTest()
|
|
55
|
+
|
|
56
|
+
expect(getRegisteredIndicatorDefinition('CUSTOM_MACD')).toBeUndefined()
|
|
57
|
+
expect(getRegisteredIndicatorDefinitions()).toEqual([])
|
|
58
|
+
})
|
|
59
|
+
})
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest'
|
|
2
|
+
import { IndicatorRegistry } from '../indicatorRegistry'
|
|
3
|
+
import type { IndicatorMetadata } from '../indicatorMetadata'
|
|
4
|
+
|
|
5
|
+
function createMeta(overrides: Partial<IndicatorMetadata> = {}): IndicatorMetadata {
|
|
6
|
+
return {
|
|
7
|
+
name: 'rsi',
|
|
8
|
+
aliases: ['relativeStrength'],
|
|
9
|
+
displayName: 'RSI',
|
|
10
|
+
category: 'oscillator',
|
|
11
|
+
stateKey: (paneId: string) => `indicator:rsi:${paneId}`,
|
|
12
|
+
defaultPaneId: 'sub_RSI',
|
|
13
|
+
rendererFactory: vi.fn() as any,
|
|
14
|
+
...overrides,
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
describe('IndicatorRegistry', () => {
|
|
19
|
+
it('resolves indicators by name, displayName, aliases, and case-insensitive ids', () => {
|
|
20
|
+
const registry = new IndicatorRegistry()
|
|
21
|
+
const meta = createMeta()
|
|
22
|
+
|
|
23
|
+
registry.register(meta)
|
|
24
|
+
|
|
25
|
+
expect(registry.get('rsi')).toBe(meta)
|
|
26
|
+
expect(registry.get('RSI')).toBe(meta)
|
|
27
|
+
expect(registry.get('relativeStrength')).toBe(meta)
|
|
28
|
+
expect(registry.get('relativestrength')).toBe(meta)
|
|
29
|
+
expect(registry.has(' RSI ')).toBe(true)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
it('throws for missing required metadata fields', () => {
|
|
33
|
+
const registry = new IndicatorRegistry()
|
|
34
|
+
|
|
35
|
+
expect(() => registry.register(createMeta({ name: '' }))).toThrow('Indicator name is required')
|
|
36
|
+
expect(() => registry.register(createMeta({ displayName: '' }))).toThrow("displayName is required")
|
|
37
|
+
expect(() => registry.register(createMeta({ rendererFactory: undefined as any }))).toThrow('rendererFactory is required')
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
it('replaces old aliases when unregistering', () => {
|
|
41
|
+
const registry = new IndicatorRegistry()
|
|
42
|
+
const meta = createMeta()
|
|
43
|
+
|
|
44
|
+
registry.register(meta)
|
|
45
|
+
|
|
46
|
+
expect(registry.unregister('RSI')).toBe(true)
|
|
47
|
+
expect(registry.get('rsi')).toBeUndefined()
|
|
48
|
+
expect(registry.get('RSI')).toBeUndefined()
|
|
49
|
+
expect(registry.get('relativeStrength')).toBeUndefined()
|
|
50
|
+
expect(registry.unregister('RSI')).toBe(false)
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('returns required metadata or throws a descriptive error', () => {
|
|
54
|
+
const registry = new IndicatorRegistry()
|
|
55
|
+
const meta = createMeta()
|
|
56
|
+
|
|
57
|
+
registry.register(meta)
|
|
58
|
+
|
|
59
|
+
expect(registry.getRequired('RSI')).toBe(meta)
|
|
60
|
+
expect(() => registry.getRequired('missing')).toThrow("Unknown indicator 'missing'")
|
|
61
|
+
})
|
|
62
|
+
})
|