@363045841yyt/klinechart-core 0.7.11 → 0.7.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dist/engine/indicators/indicator.worker.js +32 -4
  2. package/dist/engine/indicators/indicator.worker.js.map +1 -1
  3. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts +3 -2
  4. package/dist/engine/indicators/indicatorDefinitionRegistry.d.ts.map +1 -1
  5. package/dist/engine/indicators/indicatorDefinitionRegistry.js.map +1 -1
  6. package/dist/engine/indicators/indicatorMetadata.d.ts +27 -1
  7. package/dist/engine/indicators/indicatorMetadata.d.ts.map +1 -1
  8. package/dist/engine/indicators/indicatorMetadata.js.map +1 -1
  9. package/dist/engine/indicators/indicatorRuntime.d.ts +12 -117
  10. package/dist/engine/indicators/indicatorRuntime.d.ts.map +1 -1
  11. package/dist/engine/indicators/indicatorRuntime.js +123 -1308
  12. package/dist/engine/indicators/indicatorRuntime.js.map +1 -1
  13. package/dist/engine/indicators/scheduler.d.ts +3 -142
  14. package/dist/engine/indicators/scheduler.d.ts.map +1 -1
  15. package/dist/engine/indicators/scheduler.js +59 -431
  16. package/dist/engine/indicators/scheduler.js.map +1 -1
  17. package/dist/engine/indicators/stateComposer.d.ts.map +1 -1
  18. package/dist/engine/indicators/stateComposer.js +15 -47
  19. package/dist/engine/indicators/stateComposer.js.map +1 -1
  20. package/dist/engine/indicators/workerProtocol.d.ts +12 -36
  21. package/dist/engine/indicators/workerProtocol.d.ts.map +1 -1
  22. package/dist/engine/indicators/workerProtocol.js.map +1 -1
  23. package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
  24. package/dist/engine/renderers/Indicator/atr.js +9 -3
  25. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  26. package/dist/engine/renderers/Indicator/boll.d.ts.map +1 -1
  27. package/dist/engine/renderers/Indicator/boll.js +4 -2
  28. package/dist/engine/renderers/Indicator/boll.js.map +1 -1
  29. package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
  30. package/dist/engine/renderers/Indicator/cci.js +9 -3
  31. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  32. package/dist/engine/renderers/Indicator/chaikinVol.d.ts.map +1 -1
  33. package/dist/engine/renderers/Indicator/chaikinVol.js +8 -2
  34. package/dist/engine/renderers/Indicator/chaikinVol.js.map +1 -1
  35. package/dist/engine/renderers/Indicator/cmf.d.ts.map +1 -1
  36. package/dist/engine/renderers/Indicator/cmf.js +8 -2
  37. package/dist/engine/renderers/Indicator/cmf.js.map +1 -1
  38. package/dist/engine/renderers/Indicator/dema.d.ts.map +1 -1
  39. package/dist/engine/renderers/Indicator/dema.js +3 -2
  40. package/dist/engine/renderers/Indicator/dema.js.map +1 -1
  41. package/dist/engine/renderers/Indicator/donchian.d.ts.map +1 -1
  42. package/dist/engine/renderers/Indicator/donchian.js +3 -2
  43. package/dist/engine/renderers/Indicator/donchian.js.map +1 -1
  44. package/dist/engine/renderers/Indicator/ene.d.ts.map +1 -1
  45. package/dist/engine/renderers/Indicator/ene.js +5 -3
  46. package/dist/engine/renderers/Indicator/ene.js.map +1 -1
  47. package/dist/engine/renderers/Indicator/expma.d.ts.map +1 -1
  48. package/dist/engine/renderers/Indicator/expma.js +3 -1
  49. package/dist/engine/renderers/Indicator/expma.js.map +1 -1
  50. package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
  51. package/dist/engine/renderers/Indicator/fastk.js +9 -3
  52. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  53. package/dist/engine/renderers/Indicator/fib.d.ts.map +1 -1
  54. package/dist/engine/renderers/Indicator/fib.js +3 -2
  55. package/dist/engine/renderers/Indicator/fib.js.map +1 -1
  56. package/dist/engine/renderers/Indicator/hma.d.ts.map +1 -1
  57. package/dist/engine/renderers/Indicator/hma.js +3 -2
  58. package/dist/engine/renderers/Indicator/hma.js.map +1 -1
  59. package/dist/engine/renderers/Indicator/hv.d.ts.map +1 -1
  60. package/dist/engine/renderers/Indicator/hv.js +3 -2
  61. package/dist/engine/renderers/Indicator/hv.js.map +1 -1
  62. package/dist/engine/renderers/Indicator/ichimoku.d.ts.map +1 -1
  63. package/dist/engine/renderers/Indicator/ichimoku.js +3 -2
  64. package/dist/engine/renderers/Indicator/ichimoku.js.map +1 -1
  65. package/dist/engine/renderers/Indicator/kama.d.ts.map +1 -1
  66. package/dist/engine/renderers/Indicator/kama.js +3 -2
  67. package/dist/engine/renderers/Indicator/kama.js.map +1 -1
  68. package/dist/engine/renderers/Indicator/keltner.d.ts.map +1 -1
  69. package/dist/engine/renderers/Indicator/keltner.js +3 -2
  70. package/dist/engine/renderers/Indicator/keltner.js.map +1 -1
  71. package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
  72. package/dist/engine/renderers/Indicator/kst.js +4 -3
  73. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  74. package/dist/engine/renderers/Indicator/ma.d.ts.map +1 -1
  75. package/dist/engine/renderers/Indicator/ma.js +6 -1
  76. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  77. package/dist/engine/renderers/Indicator/macd.js +2 -2
  78. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  79. package/dist/engine/renderers/Indicator/mfi.d.ts.map +1 -1
  80. package/dist/engine/renderers/Indicator/mfi.js +8 -2
  81. package/dist/engine/renderers/Indicator/mfi.js.map +1 -1
  82. package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
  83. package/dist/engine/renderers/Indicator/mom.js +9 -3
  84. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  85. package/dist/engine/renderers/Indicator/obv.d.ts.map +1 -1
  86. package/dist/engine/renderers/Indicator/obv.js +8 -2
  87. package/dist/engine/renderers/Indicator/obv.js.map +1 -1
  88. package/dist/engine/renderers/Indicator/parkinson.d.ts.map +1 -1
  89. package/dist/engine/renderers/Indicator/parkinson.js +3 -2
  90. package/dist/engine/renderers/Indicator/parkinson.js.map +1 -1
  91. package/dist/engine/renderers/Indicator/pivot.d.ts.map +1 -1
  92. package/dist/engine/renderers/Indicator/pivot.js +3 -2
  93. package/dist/engine/renderers/Indicator/pivot.js.map +1 -1
  94. package/dist/engine/renderers/Indicator/pvt.d.ts.map +1 -1
  95. package/dist/engine/renderers/Indicator/pvt.js +8 -2
  96. package/dist/engine/renderers/Indicator/pvt.js.map +1 -1
  97. package/dist/engine/renderers/Indicator/roc.d.ts.map +1 -1
  98. package/dist/engine/renderers/Indicator/roc.js +8 -2
  99. package/dist/engine/renderers/Indicator/roc.js.map +1 -1
  100. package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
  101. package/dist/engine/renderers/Indicator/rsi.js +7 -3
  102. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  103. package/dist/engine/renderers/Indicator/sar.d.ts.map +1 -1
  104. package/dist/engine/renderers/Indicator/sar.js +3 -2
  105. package/dist/engine/renderers/Indicator/sar.js.map +1 -1
  106. package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
  107. package/dist/engine/renderers/Indicator/stoch.js +4 -3
  108. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  109. package/dist/engine/renderers/Indicator/structure.d.ts.map +1 -1
  110. package/dist/engine/renderers/Indicator/structure.js +3 -2
  111. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  112. package/dist/engine/renderers/Indicator/supertrend.d.ts.map +1 -1
  113. package/dist/engine/renderers/Indicator/supertrend.js +3 -2
  114. package/dist/engine/renderers/Indicator/supertrend.js.map +1 -1
  115. package/dist/engine/renderers/Indicator/tema.d.ts.map +1 -1
  116. package/dist/engine/renderers/Indicator/tema.js +3 -2
  117. package/dist/engine/renderers/Indicator/tema.js.map +1 -1
  118. package/dist/engine/renderers/Indicator/trix.d.ts.map +1 -1
  119. package/dist/engine/renderers/Indicator/trix.js +3 -2
  120. package/dist/engine/renderers/Indicator/trix.js.map +1 -1
  121. package/dist/engine/renderers/Indicator/vma.d.ts.map +1 -1
  122. package/dist/engine/renderers/Indicator/vma.js +8 -2
  123. package/dist/engine/renderers/Indicator/vma.js.map +1 -1
  124. package/dist/engine/renderers/Indicator/volumeProfile.d.ts.map +1 -1
  125. package/dist/engine/renderers/Indicator/volumeProfile.js +3 -2
  126. package/dist/engine/renderers/Indicator/volumeProfile.js.map +1 -1
  127. package/dist/engine/renderers/Indicator/vwap.d.ts.map +1 -1
  128. package/dist/engine/renderers/Indicator/vwap.js +8 -2
  129. package/dist/engine/renderers/Indicator/vwap.js.map +1 -1
  130. package/dist/engine/renderers/Indicator/wma.d.ts.map +1 -1
  131. package/dist/engine/renderers/Indicator/wma.js +3 -2
  132. package/dist/engine/renderers/Indicator/wma.js.map +1 -1
  133. package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
  134. package/dist/engine/renderers/Indicator/wmsr.js +9 -3
  135. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  136. package/dist/engine/renderers/Indicator/zones.d.ts.map +1 -1
  137. package/dist/engine/renderers/Indicator/zones.js +3 -2
  138. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  139. package/dist/version.d.ts +1 -1
  140. package/dist/version.js +1 -1
  141. package/package.json +6 -2
  142. package/src/engine/indicators/__tests__/registerBuiltins.test.ts +14 -22
  143. package/src/engine/indicators/__tests__/scheduler.test.ts +14 -14
  144. package/src/engine/indicators/__tests__/stateComposer.test.ts +7 -4
  145. package/src/engine/indicators/indicator.worker.ts +36 -4
  146. package/src/engine/indicators/indicatorDefinitionRegistry.ts +3 -1
  147. package/src/engine/indicators/indicatorMetadata.ts +29 -1
  148. package/src/engine/indicators/indicatorRuntime.ts +120 -1447
  149. package/src/engine/indicators/scheduler.ts +57 -485
  150. package/src/engine/indicators/stateComposer.ts +16 -60
  151. package/src/engine/indicators/workerProtocol.ts +14 -36
  152. package/src/engine/renderers/Indicator/atr.ts +9 -3
  153. package/src/engine/renderers/Indicator/boll.ts +4 -2
  154. package/src/engine/renderers/Indicator/cci.ts +9 -3
  155. package/src/engine/renderers/Indicator/chaikinVol.ts +8 -2
  156. package/src/engine/renderers/Indicator/cmf.ts +8 -2
  157. package/src/engine/renderers/Indicator/dema.ts +3 -2
  158. package/src/engine/renderers/Indicator/donchian.ts +3 -2
  159. package/src/engine/renderers/Indicator/ene.ts +5 -3
  160. package/src/engine/renderers/Indicator/expma.ts +3 -1
  161. package/src/engine/renderers/Indicator/fastk.ts +9 -3
  162. package/src/engine/renderers/Indicator/fib.ts +3 -2
  163. package/src/engine/renderers/Indicator/hma.ts +3 -2
  164. package/src/engine/renderers/Indicator/hv.ts +3 -2
  165. package/src/engine/renderers/Indicator/ichimoku.ts +3 -2
  166. package/src/engine/renderers/Indicator/kama.ts +3 -2
  167. package/src/engine/renderers/Indicator/keltner.ts +3 -2
  168. package/src/engine/renderers/Indicator/kst.ts +4 -3
  169. package/src/engine/renderers/Indicator/ma.ts +3 -2
  170. package/src/engine/renderers/Indicator/macd.ts +9 -9
  171. package/src/engine/renderers/Indicator/mfi.ts +8 -2
  172. package/src/engine/renderers/Indicator/mom.ts +9 -3
  173. package/src/engine/renderers/Indicator/obv.ts +8 -2
  174. package/src/engine/renderers/Indicator/parkinson.ts +3 -2
  175. package/src/engine/renderers/Indicator/pivot.ts +3 -2
  176. package/src/engine/renderers/Indicator/pvt.ts +8 -2
  177. package/src/engine/renderers/Indicator/roc.ts +8 -2
  178. package/src/engine/renderers/Indicator/rsi.ts +4 -3
  179. package/src/engine/renderers/Indicator/sar.ts +3 -2
  180. package/src/engine/renderers/Indicator/stoch.ts +4 -3
  181. package/src/engine/renderers/Indicator/structure.ts +3 -2
  182. package/src/engine/renderers/Indicator/supertrend.ts +3 -2
  183. package/src/engine/renderers/Indicator/tema.ts +3 -2
  184. package/src/engine/renderers/Indicator/trix.ts +3 -2
  185. package/src/engine/renderers/Indicator/vma.ts +8 -2
  186. package/src/engine/renderers/Indicator/volumeProfile.ts +3 -2
  187. package/src/engine/renderers/Indicator/vwap.ts +8 -2
  188. package/src/engine/renderers/Indicator/wma.ts +3 -2
  189. package/src/engine/renderers/Indicator/wmsr.ts +9 -3
  190. package/src/engine/renderers/Indicator/zones.ts +3 -2
  191. package/src/version.ts +1 -1
@@ -7,10 +7,12 @@ import type {
7
7
  IndicatorWorkerRequest,
8
8
  IndicatorWorkerResponse,
9
9
  IndicatorConfigSnapshot,
10
+ SerializedRuntimeDescriptor,
10
11
  } from './workerProtocol'
11
12
  import { PROTOCOL_VERSION } from './workerProtocol'
12
13
  import type { KLineData } from '../../types/price'
13
- import { IndicatorRuntime } from './indicatorRuntime'
14
+ import { IndicatorRuntime, CALCULATOR_MAP, createWorkerCompute } from './indicatorRuntime'
15
+ import type { IndicatorRuntimeDescriptor } from './indicatorMetadata'
14
16
 
15
17
  // Worker 全局作用域
16
18
  const ctx = self as unknown as Worker
@@ -28,14 +30,40 @@ function postResponse(response: IndicatorWorkerResponse): void {
28
30
  /**
29
31
  * 处理初始化
30
32
  */
31
- function handleInit(): void {
32
- runtime = new IndicatorRuntime()
33
+ function handleInit(msg?: { descriptors?: SerializedRuntimeDescriptor[] }): void {
34
+ const serializedDescs = msg?.descriptors ?? []
35
+ const descriptors: IndicatorRuntimeDescriptor[] = serializedDescs.map(d => ({
36
+ configKey: d.configKey as any,
37
+ paneIdKey: d.paneIdKey as any,
38
+ defaultConfig: d.defaultConfig,
39
+ computeKey: d.computeKey,
40
+ compute: createWorkerCompute(d),
41
+ }))
42
+ runtime = new IndicatorRuntime(descriptors)
33
43
  postResponse({
34
44
  type: 'ready',
35
45
  protocolVersion: PROTOCOL_VERSION,
36
46
  })
37
47
  }
38
48
 
49
+ function handleAddDescriptor(descriptor: SerializedRuntimeDescriptor): void {
50
+ if (!runtime) {
51
+ postResponse({
52
+ type: 'error',
53
+ stage: 'init',
54
+ message: 'Runtime not initialized',
55
+ })
56
+ return
57
+ }
58
+ runtime.addDescriptor({
59
+ configKey: descriptor.configKey as any,
60
+ paneIdKey: descriptor.paneIdKey as any,
61
+ defaultConfig: descriptor.defaultConfig,
62
+ computeKey: descriptor.computeKey,
63
+ compute: createWorkerCompute(descriptor),
64
+ })
65
+ }
66
+
39
67
  /**
40
68
  * 处理设置数据
41
69
  */
@@ -135,7 +163,11 @@ ctx.onmessage = (event: MessageEvent<IndicatorWorkerRequest>) => {
135
163
 
136
164
  switch (msg.type) {
137
165
  case 'init':
138
- handleInit()
166
+ handleInit(msg)
167
+ break
168
+
169
+ case 'addDescriptor':
170
+ handleAddDescriptor(msg.descriptor)
139
171
  break
140
172
 
141
173
  case 'setData':
@@ -5,6 +5,7 @@ import type {
5
5
  RendererFactory,
6
6
  ScaleRendererFactory,
7
7
  IndicatorConfigUpdater,
8
+ IndicatorRuntimeDescriptor,
8
9
  } from './indicatorMetadata'
9
10
  import type { PluginHost } from '../../plugin'
10
11
 
@@ -15,7 +16,7 @@ export type IndicatorDefinitionConfig<T = unknown> = {
15
16
  category: IndicatorCategory
16
17
  stateKey: StateKey
17
18
  defaultPaneId: string
18
- paneIdField?: keyof import('./workerProtocol').IndicatorConfigSnapshot
19
+ paneIdField?: string
19
20
  allowMainPane?: boolean
20
21
  scaleRendererFactory?: ScaleRendererFactory
21
22
  scale?: IndicatorMetadata['scale']
@@ -23,6 +24,7 @@ export type IndicatorDefinitionConfig<T = unknown> = {
23
24
  applyResult?: (host: PluginHost, state: unknown, paneId: string) => void
24
25
  mainPane?: IndicatorMetadata['mainPane']
25
26
  visibleState?: IndicatorMetadata['visibleState']
27
+ runtime?: IndicatorRuntimeDescriptor
26
28
  semantic?: IndicatorMetadata<T>['semantic']
27
29
  }
28
30
 
@@ -7,6 +7,7 @@
7
7
 
8
8
  import type { PluginHost, RendererPluginWithHost } from '../../plugin'
9
9
  import type { IndicatorConfigSnapshot, IndicatorSeriesBundle } from './workerProtocol'
10
+ import type { KLineData } from '../../types/price'
10
11
 
11
12
  export type IndicatorId = string
12
13
 
@@ -85,6 +86,27 @@ export type IndicatorVisibleStateComposer = (
85
86
  context: IndicatorVisibleStateComposeContext,
86
87
  ) => unknown
87
88
 
89
+ /**
90
+ * 指标计算描述符
91
+ * 描述每个指标的计算逻辑,供 IndicatorRuntime 驱动
92
+ *
93
+ * - 主线程:直接调用 compute
94
+ * - Worker:用 computeKey 从 calculators 模块映射到实际函数
95
+ * - 自定义运行时指标:无 computeKey,仅主线程 inline 运行
96
+ */
97
+ export interface IndicatorRuntimeDescriptor<C = any> {
98
+ /** configSnapshot 中的 key,通常等于 name(如 'macd') */
99
+ configKey: string
100
+ /** paneId 在 configSnapshot 中的 key(如 'macdPaneId'),可省略 */
101
+ paneIdKey?: string
102
+ /** 默认配置值 */
103
+ defaultConfig: C
104
+ /** 计算函数(主线程直接调用,Worker 用 computeKey 桥接) */
105
+ compute: (data: KLineData[], config: C) => unknown
106
+ /** Worker 端计算键名,映射到 calculators 模块的导出 */
107
+ computeKey: string
108
+ }
109
+
88
110
  /**
89
111
  * 指标元数据接口
90
112
  */
@@ -121,7 +143,7 @@ export interface IndicatorMetadata<T = unknown> {
121
143
  * 在 configSnapshot 中的 paneId 字段名
122
144
  * 用于从配置中获取当前 pane ID
123
145
  */
124
- paneIdField?: keyof IndicatorConfigSnapshot
146
+ paneIdField?: string
125
147
 
126
148
  /**
127
149
  * 渲染器工厂函数
@@ -190,6 +212,12 @@ export interface IndicatorMetadata<T = unknown> {
190
212
  compose: IndicatorVisibleStateComposer
191
213
  }
192
214
 
215
+ /**
216
+ * 计算描述符(可选)
217
+ * 提供后,IndicatorRuntime 可据此自动调度计算,无需手写展开
218
+ */
219
+ runtime?: IndicatorRuntimeDescriptor
220
+
193
221
  /**
194
222
  * 语义配置应用入口。
195
223
  */