@orderly.network/hooks 1.2.0-alpha.0 → 1.3.0-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.
Files changed (371) hide show
  1. package/esm/configProvider.d.ts +7 -1
  2. package/esm/configProvider.d.ts.map +1 -1
  3. package/esm/configProvider.js +44 -18
  4. package/esm/configProvider.js.map +1 -0
  5. package/esm/dataProvider.js +24 -19
  6. package/esm/dataProvider.js.map +1 -0
  7. package/esm/index.d.ts +1 -0
  8. package/esm/index.d.ts.map +1 -1
  9. package/esm/index.js +4 -1
  10. package/esm/index.js.map +1 -0
  11. package/esm/middleware/signatureMiddleware.js +9 -8
  12. package/esm/middleware/signatureMiddleware.js.map +1 -0
  13. package/esm/orderly/orderbook.service.js +39 -28
  14. package/esm/orderly/orderbook.service.js.map +1 -0
  15. package/esm/orderly/orderlyHooks.d.ts +3 -0
  16. package/esm/orderly/orderlyHooks.d.ts.map +1 -1
  17. package/esm/orderly/orderlyHooks.js +2 -0
  18. package/esm/orderly/orderlyHooks.js.map +1 -0
  19. package/esm/orderly/useAccountInfo.js +3 -1
  20. package/esm/orderly/useAccountInfo.js.map +1 -0
  21. package/esm/orderly/useChain.js +16 -9
  22. package/esm/orderly/useChain.js.map +1 -0
  23. package/esm/orderly/useChains.d.ts +11 -12
  24. package/esm/orderly/useChains.d.ts.map +1 -1
  25. package/esm/orderly/useChains.js +68 -46
  26. package/esm/orderly/useChains.js.map +1 -0
  27. package/esm/orderly/useCollateral.d.ts +3 -4
  28. package/esm/orderly/useCollateral.d.ts.map +1 -1
  29. package/esm/orderly/useCollateral.js +53 -20
  30. package/esm/orderly/useCollateral.js.map +1 -0
  31. package/esm/orderly/useDeposit.js +123 -125
  32. package/esm/orderly/useDeposit.js.map +1 -0
  33. package/esm/orderly/useFundingRate.js +14 -13
  34. package/esm/orderly/useFundingRate.js.map +1 -0
  35. package/esm/orderly/useFundingRates.js +6 -4
  36. package/esm/orderly/useFundingRates.js.map +1 -0
  37. package/esm/orderly/useHoldingStream.js +19 -15
  38. package/esm/orderly/useHoldingStream.js.map +1 -0
  39. package/esm/orderly/useIndexPrice.js +7 -5
  40. package/esm/orderly/useIndexPrice.js.map +1 -0
  41. package/esm/orderly/useLeverage.js +9 -12
  42. package/esm/orderly/useLeverage.js.map +1 -0
  43. package/esm/orderly/useMarginRatio.js +27 -13
  44. package/esm/orderly/useMarginRatio.js.map +1 -0
  45. package/esm/orderly/useMarkPrice.js +13 -7
  46. package/esm/orderly/useMarkPrice.js.map +1 -0
  47. package/esm/orderly/useMarkPricesStream.d.ts +1 -1
  48. package/esm/orderly/useMarkPricesStream.d.ts.map +1 -1
  49. package/esm/orderly/useMarkPricesStream.js +9 -8
  50. package/esm/orderly/useMarkPricesStream.js.map +1 -0
  51. package/esm/orderly/useMarketTradeStream.js +33 -18
  52. package/esm/orderly/useMarketTradeStream.js.map +1 -0
  53. package/esm/orderly/useMarkets.js +144 -81
  54. package/esm/orderly/useMarkets.js.map +1 -0
  55. package/esm/orderly/useMarketsStream.js +23 -28
  56. package/esm/orderly/useMarketsStream.js.map +1 -0
  57. package/esm/orderly/useMaxQty.d.ts +6 -0
  58. package/esm/orderly/useMaxQty.d.ts.map +1 -1
  59. package/esm/orderly/useMaxQty.js +26 -18
  60. package/esm/orderly/useMaxQty.js.map +1 -0
  61. package/esm/orderly/useOpenInterest.js +7 -5
  62. package/esm/orderly/useOpenInterest.js.map +1 -0
  63. package/esm/orderly/useOrderEntry.js +182 -160
  64. package/esm/orderly/useOrderEntry.js.map +1 -0
  65. package/esm/orderly/useOrderStream.js +85 -66
  66. package/esm/orderly/useOrderStream.js.map +1 -0
  67. package/esm/orderly/useOrderbookStream.d.ts +2 -3
  68. package/esm/orderly/useOrderbookStream.d.ts.map +1 -1
  69. package/esm/orderly/useOrderbookStream.js +164 -101
  70. package/esm/orderly/useOrderbookStream.js.map +1 -0
  71. package/esm/orderly/usePositionStream.js +82 -62
  72. package/esm/orderly/usePositionStream.js.map +1 -0
  73. package/esm/orderly/usePrivateDataObserver.js +55 -48
  74. package/esm/orderly/usePrivateDataObserver.js.map +1 -0
  75. package/esm/orderly/useSettleSubscription.js +8 -6
  76. package/esm/orderly/useSettleSubscription.js.map +1 -0
  77. package/esm/orderly/useSymbolPriceRange.js +14 -8
  78. package/esm/orderly/useSymbolPriceRange.js.map +1 -0
  79. package/esm/orderly/useSymbolsInfo.js +7 -5
  80. package/esm/orderly/useSymbolsInfo.js.map +1 -0
  81. package/esm/orderly/useTickerStream.d.ts +5 -1
  82. package/esm/orderly/useTickerStream.d.ts.map +1 -1
  83. package/esm/orderly/useTickerStream.js +26 -29
  84. package/esm/orderly/useTickerStream.js.map +1 -0
  85. package/esm/orderly/useWalletSubscription.js +8 -6
  86. package/esm/orderly/useWalletSubscription.js.map +1 -0
  87. package/esm/orderly/useWithdraw.js +19 -11
  88. package/esm/orderly/useWithdraw.js.map +1 -0
  89. package/esm/orderlyContext.d.ts +8 -1
  90. package/esm/orderlyContext.d.ts.map +1 -1
  91. package/esm/orderlyContext.js +2 -1
  92. package/esm/orderlyContext.js.map +1 -0
  93. package/esm/services/dataCenter.js +10 -8
  94. package/esm/services/dataCenter.js.map +1 -0
  95. package/esm/services/painter/backgroundPaint.js +11 -14
  96. package/esm/services/painter/backgroundPaint.js.map +1 -0
  97. package/esm/services/painter/basePaint.js +5 -1
  98. package/esm/services/painter/basePaint.js.map +1 -0
  99. package/esm/services/painter/dataPaint.js +53 -50
  100. package/esm/services/painter/dataPaint.js.map +1 -0
  101. package/esm/services/painter/layout.config.js +15 -13
  102. package/esm/services/painter/layout.config.js.map +1 -0
  103. package/esm/services/painter/painter.js +14 -13
  104. package/esm/services/painter/painter.js.map +1 -0
  105. package/esm/services/painter/resource.js +6 -4
  106. package/esm/services/painter/resource.js.map +1 -0
  107. package/esm/statusProvider.js +10 -3
  108. package/esm/statusProvider.js.map +1 -0
  109. package/esm/unuse/apiPrefixMiddleware.js +18 -16
  110. package/esm/unuse/apiPrefixMiddleware.js.map +1 -0
  111. package/esm/unuse/fn.js +3 -1
  112. package/esm/unuse/fn.js.map +1 -0
  113. package/esm/unuse/useBalance.js +6 -4
  114. package/esm/unuse/useBalance.js.map +1 -0
  115. package/esm/unuse/useFetures.js +26 -18
  116. package/esm/unuse/useFetures.js.map +1 -0
  117. package/esm/unuse/useRunOnce.js +10 -7
  118. package/esm/unuse/useRunOnce.js.map +1 -0
  119. package/esm/unuse/useSyncEnd.js +5 -4
  120. package/esm/unuse/useSyncEnd.js.map +1 -0
  121. package/esm/unuse/useTokenInfo.js +7 -5
  122. package/esm/unuse/useTokenInfo.js.map +1 -0
  123. package/esm/unuse/useUnsettlementPnL.js +7 -3
  124. package/esm/unuse/useUnsettlementPnL.js.map +1 -0
  125. package/esm/useAccount.js +18 -21
  126. package/esm/useAccount.js.map +1 -0
  127. package/esm/useAccountInstance.js +6 -7
  128. package/esm/useAccountInstance.js.map +1 -0
  129. package/esm/useBoolean.js +14 -5
  130. package/esm/useBoolean.js.map +1 -0
  131. package/esm/useConfig.js +3 -1
  132. package/esm/useConfig.js.map +1 -0
  133. package/esm/useEventEmitter.js +4 -2
  134. package/esm/useEventEmitter.js.map +1 -0
  135. package/esm/useLazyQuery.js +6 -7
  136. package/esm/useLazyQuery.js.map +1 -0
  137. package/esm/useLocalStorage.js +30 -20
  138. package/esm/useLocalStorage.js.map +1 -0
  139. package/esm/useMediaQuery.js +11 -9
  140. package/esm/useMediaQuery.js.map +1 -0
  141. package/esm/useMutation.js +26 -37
  142. package/esm/useMutation.js.map +1 -0
  143. package/esm/useObserve.js +4 -4
  144. package/esm/useObserve.js.map +1 -0
  145. package/esm/useParamsCheck.js +8 -10
  146. package/esm/useParamsCheck.js.map +1 -0
  147. package/esm/usePoster.js +56 -45
  148. package/esm/usePoster.js.map +1 -0
  149. package/esm/usePreloadData.js +9 -5
  150. package/esm/usePreloadData.js.map +1 -0
  151. package/esm/usePrivateInfiniteQuery.js +15 -9
  152. package/esm/usePrivateInfiniteQuery.js.map +1 -0
  153. package/esm/usePrivateQuery.js +15 -8
  154. package/esm/usePrivateQuery.js.map +1 -0
  155. package/esm/useQuery.js +6 -5
  156. package/esm/useQuery.js.map +1 -0
  157. package/esm/useSessionStorage.js +28 -19
  158. package/esm/useSessionStorage.js.map +1 -0
  159. package/esm/useWS.js +15 -13
  160. package/esm/useWS.js.map +1 -0
  161. package/esm/useWsStatus.js +12 -12
  162. package/esm/useWsStatus.js.map +1 -0
  163. package/esm/utils/createGetter.js +8 -8
  164. package/esm/utils/createGetter.js.map +1 -0
  165. package/esm/utils/createOrder.d.ts +1 -0
  166. package/esm/utils/createOrder.d.ts.map +1 -1
  167. package/esm/utils/createOrder.js +59 -43
  168. package/esm/utils/createOrder.js.map +1 -0
  169. package/esm/utils/dev.js +6 -4
  170. package/esm/utils/dev.js.map +1 -0
  171. package/esm/utils/fetcher.js +3 -1
  172. package/esm/utils/fetcher.js.map +1 -0
  173. package/esm/utils/json.js +3 -2
  174. package/esm/utils/json.js.map +1 -0
  175. package/esm/utils/orderEntryHelper.js +92 -63
  176. package/esm/utils/orderEntryHelper.js.map +1 -0
  177. package/esm/utils/parseHolding.js +10 -6
  178. package/esm/utils/parseHolding.js.map +1 -0
  179. package/esm/utils/swr.js +114 -104
  180. package/esm/utils/swr.js.map +1 -0
  181. package/esm/version.d.ts +1 -1
  182. package/esm/version.js +4 -3
  183. package/esm/version.js.map +1 -0
  184. package/esm/walletConnectorContext.js +4 -2
  185. package/esm/walletConnectorContext.js.map +1 -0
  186. package/lib/configProvider.d.ts +7 -1
  187. package/lib/configProvider.d.ts.map +1 -1
  188. package/lib/configProvider.js +108 -56
  189. package/lib/configProvider.js.map +1 -0
  190. package/lib/dataProvider.js +50 -29
  191. package/lib/dataProvider.js.map +1 -0
  192. package/lib/index.d.ts +1 -0
  193. package/lib/index.d.ts.map +1 -1
  194. package/lib/index.js +191 -88
  195. package/lib/index.js.map +1 -0
  196. package/lib/middleware/signatureMiddleware.js +22 -15
  197. package/lib/middleware/signatureMiddleware.js.map +1 -0
  198. package/lib/orderly/orderbook.service.js +59 -33
  199. package/lib/orderly/orderbook.service.js.map +1 -0
  200. package/lib/orderly/orderlyHooks.d.ts +3 -0
  201. package/lib/orderly/orderlyHooks.d.ts.map +1 -1
  202. package/lib/orderly/orderlyHooks.js +124 -57
  203. package/lib/orderly/orderlyHooks.js.map +1 -0
  204. package/lib/orderly/useAccountInfo.js +14 -6
  205. package/lib/orderly/useAccountInfo.js.map +1 -0
  206. package/lib/orderly/useChain.js +30 -17
  207. package/lib/orderly/useChain.js.map +1 -0
  208. package/lib/orderly/useChains.d.ts +11 -12
  209. package/lib/orderly/useChains.d.ts.map +1 -1
  210. package/lib/orderly/useChains.js +100 -59
  211. package/lib/orderly/useChains.js.map +1 -0
  212. package/lib/orderly/useCollateral.d.ts +3 -4
  213. package/lib/orderly/useCollateral.d.ts.map +1 -1
  214. package/lib/orderly/useCollateral.js +81 -42
  215. package/lib/orderly/useCollateral.js.map +1 -0
  216. package/lib/orderly/useDeposit.js +154 -150
  217. package/lib/orderly/useDeposit.js.map +1 -0
  218. package/lib/orderly/useFundingRate.js +29 -22
  219. package/lib/orderly/useFundingRate.js.map +1 -0
  220. package/lib/orderly/useFundingRates.js +19 -11
  221. package/lib/orderly/useFundingRates.js.map +1 -0
  222. package/lib/orderly/useHoldingStream.js +39 -27
  223. package/lib/orderly/useHoldingStream.js.map +1 -0
  224. package/lib/orderly/useIndexPrice.js +24 -14
  225. package/lib/orderly/useIndexPrice.js.map +1 -0
  226. package/lib/orderly/useLeverage.js +27 -24
  227. package/lib/orderly/useLeverage.js.map +1 -0
  228. package/lib/orderly/useMarginRatio.js +49 -29
  229. package/lib/orderly/useMarginRatio.js.map +1 -0
  230. package/lib/orderly/useMarkPrice.js +26 -15
  231. package/lib/orderly/useMarkPrice.js.map +1 -0
  232. package/lib/orderly/useMarkPricesStream.d.ts +1 -1
  233. package/lib/orderly/useMarkPricesStream.d.ts.map +1 -1
  234. package/lib/orderly/useMarkPricesStream.js +26 -17
  235. package/lib/orderly/useMarkPricesStream.js.map +1 -0
  236. package/lib/orderly/useMarketTradeStream.js +47 -26
  237. package/lib/orderly/useMarketTradeStream.js.map +1 -0
  238. package/lib/orderly/useMarkets.js +172 -95
  239. package/lib/orderly/useMarkets.js.map +1 -0
  240. package/lib/orderly/useMarketsStream.js +44 -41
  241. package/lib/orderly/useMarketsStream.js.map +1 -0
  242. package/lib/orderly/useMaxQty.d.ts +6 -0
  243. package/lib/orderly/useMaxQty.d.ts.map +1 -1
  244. package/lib/orderly/useMaxQty.js +52 -43
  245. package/lib/orderly/useMaxQty.js.map +1 -0
  246. package/lib/orderly/useOpenInterest.js +24 -14
  247. package/lib/orderly/useOpenInterest.js.map +1 -0
  248. package/lib/orderly/useOrderEntry.js +238 -210
  249. package/lib/orderly/useOrderEntry.js.map +1 -0
  250. package/lib/orderly/useOrderStream.js +111 -84
  251. package/lib/orderly/useOrderStream.js.map +1 -0
  252. package/lib/orderly/useOrderbookStream.d.ts +2 -3
  253. package/lib/orderly/useOrderbookStream.d.ts.map +1 -1
  254. package/lib/orderly/useOrderbookStream.js +219 -147
  255. package/lib/orderly/useOrderbookStream.js.map +1 -0
  256. package/lib/orderly/usePositionStream.js +134 -100
  257. package/lib/orderly/usePositionStream.js.map +1 -0
  258. package/lib/orderly/usePrivateDataObserver.js +76 -63
  259. package/lib/orderly/usePrivateDataObserver.js.map +1 -0
  260. package/lib/orderly/useSettleSubscription.js +25 -15
  261. package/lib/orderly/useSettleSubscription.js.map +1 -0
  262. package/lib/orderly/useSymbolPriceRange.js +29 -23
  263. package/lib/orderly/useSymbolPriceRange.js.map +1 -0
  264. package/lib/orderly/useSymbolsInfo.js +23 -15
  265. package/lib/orderly/useSymbolsInfo.js.map +1 -0
  266. package/lib/orderly/useTickerStream.d.ts +5 -1
  267. package/lib/orderly/useTickerStream.d.ts.map +1 -1
  268. package/lib/orderly/useTickerStream.js +51 -48
  269. package/lib/orderly/useTickerStream.js.map +1 -0
  270. package/lib/orderly/useWalletSubscription.js +25 -15
  271. package/lib/orderly/useWalletSubscription.js.map +1 -0
  272. package/lib/orderly/useWithdraw.js +36 -22
  273. package/lib/orderly/useWithdraw.js.map +1 -0
  274. package/lib/orderlyContext.d.ts +8 -1
  275. package/lib/orderlyContext.d.ts.map +1 -1
  276. package/lib/orderlyContext.js +22 -6
  277. package/lib/orderlyContext.js.map +1 -0
  278. package/lib/services/dataCenter.js +15 -11
  279. package/lib/services/dataCenter.js.map +1 -0
  280. package/lib/services/painter/backgroundPaint.js +21 -18
  281. package/lib/services/painter/backgroundPaint.js.map +1 -0
  282. package/lib/services/painter/basePaint.js +14 -4
  283. package/lib/services/painter/basePaint.js.map +1 -0
  284. package/lib/services/painter/dataPaint.js +67 -58
  285. package/lib/services/painter/dataPaint.js.map +1 -0
  286. package/lib/services/painter/layout.config.js +25 -16
  287. package/lib/services/painter/layout.config.js.map +1 -0
  288. package/lib/services/painter/painter.js +27 -20
  289. package/lib/services/painter/painter.js.map +1 -0
  290. package/lib/services/painter/resource.js +15 -7
  291. package/lib/services/painter/resource.js.map +1 -0
  292. package/lib/statusProvider.js +31 -10
  293. package/lib/statusProvider.js.map +1 -0
  294. package/lib/unuse/apiPrefixMiddleware.js +30 -22
  295. package/lib/unuse/apiPrefixMiddleware.js.map +1 -0
  296. package/lib/unuse/fn.js +14 -5
  297. package/lib/unuse/fn.js.map +1 -0
  298. package/lib/unuse/useBalance.js +23 -13
  299. package/lib/unuse/useBalance.js.map +1 -0
  300. package/lib/unuse/useFetures.js +41 -28
  301. package/lib/unuse/useFetures.js.map +1 -0
  302. package/lib/unuse/useRunOnce.js +61 -11
  303. package/lib/unuse/useRunOnce.js.map +1 -0
  304. package/lib/unuse/useSyncEnd.js +17 -10
  305. package/lib/unuse/useSyncEnd.js.map +1 -0
  306. package/lib/unuse/useTokenInfo.js +20 -12
  307. package/lib/unuse/useTokenInfo.js.map +1 -0
  308. package/lib/unuse/useUnsettlementPnL.js +21 -11
  309. package/lib/unuse/useUnsettlementPnL.js.map +1 -0
  310. package/lib/useAccount.js +32 -29
  311. package/lib/useAccount.js.map +1 -0
  312. package/lib/useAccountInstance.js +27 -20
  313. package/lib/useAccountInstance.js.map +1 -0
  314. package/lib/useBoolean.js +25 -10
  315. package/lib/useBoolean.js.map +1 -0
  316. package/lib/useConfig.js +15 -7
  317. package/lib/useConfig.js.map +1 -0
  318. package/lib/useEventEmitter.js +23 -13
  319. package/lib/useEventEmitter.js.map +1 -0
  320. package/lib/useLazyQuery.js +25 -23
  321. package/lib/useLazyQuery.js.map +1 -0
  322. package/lib/useLocalStorage.js +44 -28
  323. package/lib/useLocalStorage.js.map +1 -0
  324. package/lib/useMediaQuery.js +22 -14
  325. package/lib/useMediaQuery.js.map +1 -0
  326. package/lib/useMutation.js +47 -52
  327. package/lib/useMutation.js.map +1 -0
  328. package/lib/useObserve.js +22 -8
  329. package/lib/useObserve.js.map +1 -0
  330. package/lib/useParamsCheck.js +18 -14
  331. package/lib/useParamsCheck.js.map +1 -0
  332. package/lib/usePoster.js +80 -74
  333. package/lib/usePoster.js.map +1 -0
  334. package/lib/usePreloadData.js +21 -11
  335. package/lib/usePreloadData.js.map +1 -0
  336. package/lib/usePrivateInfiniteQuery.js +36 -22
  337. package/lib/usePrivateInfiniteQuery.js.map +1 -0
  338. package/lib/usePrivateQuery.js +35 -25
  339. package/lib/usePrivateQuery.js.map +1 -0
  340. package/lib/useQuery.js +24 -20
  341. package/lib/useQuery.js.map +1 -0
  342. package/lib/useSessionStorage.js +41 -26
  343. package/lib/useSessionStorage.js.map +1 -0
  344. package/lib/useWS.js +42 -32
  345. package/lib/useWS.js.map +1 -0
  346. package/lib/useWsStatus.js +34 -20
  347. package/lib/useWsStatus.js.map +1 -0
  348. package/lib/utils/createGetter.js +19 -14
  349. package/lib/utils/createGetter.js.map +1 -0
  350. package/lib/utils/createOrder.d.ts +1 -0
  351. package/lib/utils/createOrder.d.ts.map +1 -1
  352. package/lib/utils/createOrder.js +133 -82
  353. package/lib/utils/createOrder.js.map +1 -0
  354. package/lib/utils/dev.js +13 -9
  355. package/lib/utils/dev.js.map +1 -0
  356. package/lib/utils/fetcher.js +13 -5
  357. package/lib/utils/fetcher.js.map +1 -0
  358. package/lib/utils/json.js +12 -5
  359. package/lib/utils/json.js.map +1 -0
  360. package/lib/utils/orderEntryHelper.js +125 -82
  361. package/lib/utils/orderEntryHelper.js.map +1 -0
  362. package/lib/utils/parseHolding.js +19 -9
  363. package/lib/utils/parseHolding.js.map +1 -0
  364. package/lib/utils/swr.js +134 -111
  365. package/lib/utils/swr.js.map +1 -0
  366. package/lib/version.d.ts +1 -1
  367. package/lib/version.js +13 -4
  368. package/lib/version.js.map +1 -0
  369. package/lib/walletConnectorContext.js +23 -7
  370. package/lib/walletConnectorContext.js.map +1 -0
  371. package/package.json +17 -9
@@ -8,28 +8,33 @@ import { Decimal } from "@orderly.network/utils";
8
8
  import { min } from "ramda";
9
9
  import { SDKError } from "@orderly.network/types";
10
10
  import orderbooksService from './orderbook.service';
11
- const paddingFn = (len) => Array(len).fill([Number.NaN, Number.NaN, Number.NaN, Number.NaN]);
12
- const asksSortFn = (a, b) => a[0] - b[0];
13
- const bidsSortFn = (a, b) => b[0] - a[0];
11
+ const paddingFn = (len)=>Array(len).fill([
12
+ Number.NaN,
13
+ Number.NaN,
14
+ Number.NaN,
15
+ Number.NaN
16
+ ]);
17
+ const asksSortFn = (a, b)=>a[0] - b[0];
18
+ const bidsSortFn = (a, b)=>b[0] - a[0];
14
19
  // const commonSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];
15
- const reduceItems = (depth, level, data, asks = false) => {
20
+ const reduceItems = (depth, level, data, asks = false)=>{
16
21
  if (!Array.isArray(data) || data.length === 0) {
17
22
  return [];
18
23
  }
19
- let newData = [...data];
24
+ let newData = [
25
+ ...data
26
+ ];
20
27
  const result = [];
21
28
  //
22
29
  if (typeof depth !== "undefined") {
23
30
  const prices = new Map();
24
- for (let i = 0; i < data.length; i++) {
31
+ for(let i = 0; i < data.length; i++){
25
32
  const [price, quantity] = data[i];
26
- if (isNaN(price) || isNaN(quantity))
27
- continue;
33
+ if (isNaN(price) || isNaN(quantity)) continue;
28
34
  let priceKey;
29
35
  if (asks) {
30
36
  priceKey = new Decimal(Math.ceil(price / depth)).mul(depth).toNumber();
31
- }
32
- else {
37
+ } else {
33
38
  priceKey = new Decimal(Math.floor(price / depth)).mul(depth).toNumber();
34
39
  }
35
40
  if (depth < 1 && depth > 0 && priceKey.toString().indexOf(".") !== -1) {
@@ -46,30 +51,35 @@ const reduceItems = (depth, level, data, asks = false) => {
46
51
  const item = prices.get(priceKey);
47
52
  const itemPrice = new Decimal(item[1]).add(quantity).toNumber();
48
53
  // prices.push([price, quantity]);
49
- prices.set(priceKey, [priceKey, itemPrice]);
50
- }
51
- else {
52
- prices.set(priceKey, [priceKey, quantity]);
54
+ prices.set(priceKey, [
55
+ priceKey,
56
+ itemPrice
57
+ ]);
58
+ } else {
59
+ prices.set(priceKey, [
60
+ priceKey,
61
+ quantity
62
+ ]);
53
63
  }
54
64
  }
55
65
  newData = Array.from(prices.values());
56
66
  }
57
- for (let i = 0; i < newData.length; i++) {
67
+ for(let i = 0; i < newData.length; i++){
58
68
  const [price, quantity] = newData[i];
59
- if (isNaN(price) || isNaN(quantity))
60
- continue;
61
- const newQuantity = new Decimal(quantity)
62
- .add(result.length > 0 ? result[result.length - 1][2] : 0)
63
- .toNumber();
64
- const newAmount = new Decimal(quantity * price)
65
- .add(result.length > 0 ? result[result.length - 1][3] : 0)
66
- .toNumber();
67
- result.push([price, quantity, newQuantity, newAmount]);
68
- // if the total is greater than the level, break
69
- // TODO:
70
- // if (i + 1 >= level) {
71
- // break;
72
- // }
69
+ if (isNaN(price) || isNaN(quantity)) continue;
70
+ const newQuantity = new Decimal(quantity).add(result.length > 0 ? result[result.length - 1][2] : 0).toNumber();
71
+ const newAmount = new Decimal(quantity * price).add(result.length > 0 ? result[result.length - 1][3] : 0).toNumber();
72
+ result.push([
73
+ price,
74
+ quantity,
75
+ newQuantity,
76
+ newAmount
77
+ ]);
78
+ // if the total is greater than the level, break
79
+ // TODO:
80
+ // if (i + 1 >= level) {
81
+ // break;
82
+ // }
73
83
  }
74
84
  return result;
75
85
  };
@@ -78,8 +88,7 @@ const reduceItems = (depth, level, data, asks = false) => {
78
88
  * @param depth
79
89
  * @param level
80
90
  * @param data
81
- */
82
- export const reduceOrderbook = (depth, level, padding, data) => {
91
+ */ export const reduceOrderbook = (depth, level, padding, data)=>{
83
92
  let asks = reduceItems(depth, level, data.asks, true);
84
93
  let bids = reduceItems(depth, level, data.bids);
85
94
  /// not empty and asks.price <= bids.price
@@ -87,17 +96,21 @@ export const reduceOrderbook = (depth, level, padding, data) => {
87
96
  if (asks.length === 1) {
88
97
  const [price, qty, newQuantity, newAmount] = asks[0];
89
98
  asks.shift();
90
- asks.push([price + (depth === undefined ? 0 : depth), qty, newQuantity, newAmount]);
91
- }
92
- else {
99
+ asks.push([
100
+ price + (depth === undefined ? 0 : depth),
101
+ qty,
102
+ newQuantity,
103
+ newAmount
104
+ ]);
105
+ } else {
93
106
  const [bidPrice] = bids[0];
94
- while (asks.length > 0) {
107
+ while(asks.length > 0){
95
108
  const [askPrice, askQty, newQuantity, newAmount] = asks[0];
96
109
  if (askPrice <= bidPrice) {
97
110
  // console.log("xxxxxxxxxxx reset ask list begin", [...asks], { ...asks[0] });
98
111
  asks.shift();
99
112
  let logStr = "";
100
- for (let index = 0; index < asks.length; index++) {
113
+ for(let index = 0; index < asks.length; index++){
101
114
  if (index === 0) {
102
115
  const quantity = asks[index][1] + askQty;
103
116
  asks[index][1] = quantity;
@@ -105,17 +118,15 @@ export const reduceOrderbook = (depth, level, padding, data) => {
105
118
  // asks[index][3] += newAmount;
106
119
  // FIXME: fix this code later
107
120
  asks[index][3] = Math.ceil(quantity) * asks[index][0];
108
- }
109
- else {
121
+ } else {
110
122
  // asks[index][3] += newAmount;
111
123
  // FIXME: fix this code later
112
124
  asks[index][3] = asks[index][0] * asks[index][1] + asks[index - 1][3];
113
125
  }
114
126
  logStr += `index: ${index} ${asks[index]}\n`;
115
127
  }
116
- // console.log("xxxxxxxxxxx reset ask list end", logStr);
117
- }
118
- else {
128
+ // console.log("xxxxxxxxxxx reset ask list end", logStr);
129
+ } else {
119
130
  break;
120
131
  }
121
132
  }
@@ -123,38 +134,32 @@ export const reduceOrderbook = (depth, level, padding, data) => {
123
134
  }
124
135
  asks = asks.reverse();
125
136
  if (padding) {
126
- asks =
127
- asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;
128
- bids =
129
- bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;
137
+ asks = asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;
138
+ bids = bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;
130
139
  }
131
140
  return {
132
141
  asks: asks,
133
- bids: bids,
142
+ bids: bids
134
143
  };
135
144
  };
136
- const mergeItems = (data, update) => {
145
+ const mergeItems = (data, update)=>{
137
146
  // let index = -1;
138
- if (data.length === 0)
139
- return update;
140
- data = data.filter(([price]) => !isNaN(price));
141
- while (update.length > 0) {
147
+ if (data.length === 0) return update;
148
+ data = data.filter(([price])=>!isNaN(price));
149
+ while(update.length > 0){
142
150
  const item = update.shift();
143
151
  //
144
152
  if (item) {
145
153
  const [price, quantity] = item;
146
- const index = data.findIndex(([p], index) => p === price);
154
+ const index = data.findIndex(([p], index)=>p === price);
147
155
  //
148
156
  if (index === -1) {
149
- if (quantity === 0)
150
- continue;
157
+ if (quantity === 0) continue;
151
158
  data.push(item);
152
- }
153
- else {
159
+ } else {
154
160
  if (quantity === 0) {
155
161
  data.splice(index, 1);
156
- }
157
- else {
162
+ } else {
158
163
  data[index] = item;
159
164
  }
160
165
  }
@@ -162,22 +167,28 @@ const mergeItems = (data, update) => {
162
167
  }
163
168
  return data;
164
169
  };
165
- export const mergeOrderbook = (data, update) => {
166
- let asks = [...data.asks];
167
- let bids = [...data.bids];
170
+ export const mergeOrderbook = (data, update)=>{
171
+ let asks = [
172
+ ...data.asks
173
+ ];
174
+ let bids = [
175
+ ...data.bids
176
+ ];
168
177
  asks = mergeItems(asks, update.asks).sort(asksSortFn);
169
178
  bids = mergeItems(bids, update.bids).sort(bidsSortFn);
170
179
  return {
171
180
  asks: asks,
172
- bids: bids,
181
+ bids: bids
173
182
  };
174
183
  };
175
- const INIT_DATA = { asks: [], bids: [] };
184
+ const INIT_DATA = {
185
+ asks: [],
186
+ bids: []
187
+ };
176
188
  /**
177
189
  * @name useOrderbookStream
178
190
  * @description React hook that returns the current orderbook for a given market
179
- */
180
- export const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
191
+ */ export const useOrderbookStream = (symbol, initial = INIT_DATA, options)=>{
181
192
  if (!symbol) {
182
193
  throw new SDKError("useOrderbookStream requires a symbol");
183
194
  }
@@ -191,33 +202,50 @@ export const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
191
202
  const [depth, setDepth] = useState();
192
203
  // markPrice, lastPrice
193
204
  const prevMiddlePrice = useRef(0);
194
- const depths = useMemo(() => {
205
+ const depths = useMemo(()=>{
195
206
  const tick = config("quote_tick");
196
- return [tick, tick * 10, tick * 100, tick * 1000];
197
- }, [config("quote_tick")]);
198
- useEffect(() => {
207
+ return [
208
+ tick,
209
+ tick * 10,
210
+ tick * 100,
211
+ tick * 1000
212
+ ];
213
+ }, [
214
+ config("quote_tick")
215
+ ]);
216
+ useEffect(()=>{
199
217
  setDepth(config("quote_tick"));
200
- }, [config("quote_tick")]);
218
+ }, [
219
+ config("quote_tick")
220
+ ]);
201
221
  const ws = useWS();
202
222
  const ticker = useTickerStream(symbol);
203
223
  const eventEmitter = useEventEmitter();
204
224
  // const orderbookRequest =
205
- useEffect(() => {
225
+ useEffect(()=>{
206
226
  let needRequestFullOrderbook = true;
207
227
  setIsLoading(true);
208
228
  let orderBookUpdateSub;
209
229
  let fullOrderBookUpdateSub;
210
230
  orderBookUpdateSub = ws.subscribe({
211
231
  event: "subscribe",
212
- topic: `${symbol}@orderbookupdate`,
232
+ topic: `${symbol}@orderbookupdate`
213
233
  }, {
214
- formatter: (message) => message,
215
- onMessage: (message) => {
234
+ formatter: (message)=>message,
235
+ onMessage: (message)=>{
216
236
  const { data: wsData, ts } = message;
217
237
  const { asks, bids, prevTs } = wsData;
218
- orderbooksService.updateOrderbook(symbol, { asks, bids, ts, prevTs }, () => needRequestFullOrderbook = true);
238
+ orderbooksService.updateOrderbook(symbol, {
239
+ asks,
240
+ bids,
241
+ ts,
242
+ prevTs
243
+ }, ()=>needRequestFullOrderbook = true);
219
244
  const data = orderbooksService.getRawOrderbook(symbol);
220
- setData({ bids: data.bids, asks: data.asks });
245
+ setData({
246
+ bids: data.bids,
247
+ asks: data.asks
248
+ });
221
249
  }
222
250
  });
223
251
  if (needRequestFullOrderbook) {
@@ -227,50 +255,66 @@ export const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
227
255
  id: `${symbol}@orderbook`,
228
256
  params: {
229
257
  type: "orderbook",
230
- symbol: symbol,
231
- },
258
+ symbol: symbol
259
+ }
232
260
  }, {
233
- formatter: (message) => message,
234
- onMessage: (message) => {
261
+ formatter: (message)=>message,
262
+ onMessage: (message)=>{
235
263
  const { symbol, asks, bids, ts } = message.data;
236
- orderbooksService.setFullOrderbook(symbol, { asks, bids, ts });
264
+ orderbooksService.setFullOrderbook(symbol, {
265
+ asks,
266
+ bids,
267
+ ts
268
+ });
237
269
  const data = orderbooksService.getRawOrderbook(symbol);
238
- setData({ bids: data.bids, asks: data.asks });
270
+ setData({
271
+ bids: data.bids,
272
+ asks: data.asks
273
+ });
239
274
  setIsLoading(false);
240
- },
275
+ }
241
276
  });
242
277
  needRequestFullOrderbook = false;
243
278
  }
244
- return () => {
279
+ return ()=>{
245
280
  // unsubscribe
246
281
  orderBookUpdateSub?.();
247
282
  fullOrderBookUpdateSub?.();
248
283
  orderbooksService.resetOrderBook(symbol);
249
284
  setData(INIT_DATA);
250
285
  };
251
- }, [symbol]);
286
+ }, [
287
+ symbol
288
+ ]);
252
289
  // const {data:markPrices} = useMarkPricesStream();
253
290
  const { data: markPrice } = useMarkPrice(symbol);
254
- const onItemClick = useCallback((item) => {
291
+ const onItemClick = useCallback((item)=>{
255
292
  eventEmitter.emit("orderbook:item:click", item);
256
293
  }, []);
257
- const onDepthChange = useCallback((depth) => {
294
+ const onDepthChange = useCallback((depth)=>{
258
295
  //
259
- setDepth(() => depth);
296
+ setDepth(()=>depth);
260
297
  }, []);
261
298
  const reducedData = reduceOrderbook(depth, level, padding, {
262
- asks: [...data.asks],
263
- bids: [...data.bids],
299
+ asks: [
300
+ ...data.asks
301
+ ],
302
+ bids: [
303
+ ...data.bids
304
+ ]
264
305
  });
265
306
  // emit the asks0 and bids0
266
- useEffect(() => {
307
+ useEffect(()=>{
267
308
  const updateData = [
268
309
  reducedData.asks?.[reducedData.asks.length - 1]?.[0],
269
310
  reducedData.bids?.[0]?.[0]
270
311
  ];
271
312
  eventEmitter.emit("orderbook:update", updateData);
272
- }, [reducedData.asks?.[reducedData.asks.length - 1]?.[0], reducedData.bids?.[0]?.[0]]);
273
- const middlePrice = useMemo(() => {
313
+ }, [
314
+ reducedData.asks?.[reducedData.asks.length - 1]?.[0],
315
+ reducedData.bids?.[0]?.[0]
316
+ ]);
317
+ const middlePrice = useMemo(()=>{
274
318
  let asksFrist = 0, bidsFirst = 0;
275
319
  if (data.asks.length > 0) {
276
320
  asksFrist = reducedData.asks?.[reducedData.asks.length - 1]?.[0];
@@ -278,20 +322,39 @@ export const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
278
322
  if (data.bids.length > 0) {
279
323
  bidsFirst = data.bids[0][0];
280
324
  }
281
- if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker)
282
- return 0;
283
- return [asksFrist, bidsFirst, ticker["24h_close"]].sort()[1];
284
- }, [ticker?.["24h_close"], data]);
285
- useEffect(() => {
325
+ if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;
326
+ return [
327
+ asksFrist,
328
+ bidsFirst,
329
+ ticker["24h_close"]
330
+ ].sort()[1];
331
+ }, [
332
+ ticker?.["24h_close"],
333
+ data
334
+ ]);
335
+ useEffect(()=>{
286
336
  prevMiddlePrice.current = middlePrice;
287
- }, [middlePrice]);
337
+ }, [
338
+ middlePrice
339
+ ]);
288
340
  return [
289
341
  {
290
342
  asks: reducedData.asks.slice(-level),
291
343
  bids: reducedData.bids.slice(0, level),
292
344
  markPrice: markPrice,
293
- middlePrice: [prevMiddlePrice.current, middlePrice],
345
+ middlePrice: [
346
+ prevMiddlePrice.current,
347
+ middlePrice
348
+ ]
294
349
  },
295
- { onDepthChange, depth, allDepths: depths, isLoading, onItemClick },
350
+ {
351
+ onDepthChange,
352
+ depth,
353
+ allDepths: depths,
354
+ isLoading,
355
+ onItemClick
356
+ }
296
357
  ];
297
358
  };
359
+
360
+ //# sourceMappingURL=useOrderbookStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/orderly/useOrderbookStream.ts"],"sourcesContent":["import {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\nimport {useTickerStream} from \"./useTickerStream\";\nimport {useMarkPrice} from \"./useMarkPrice\";\nimport {useWS} from \"../useWS\";\nimport {useEventEmitter} from \"../useEventEmitter\";\nimport {useSymbolsInfo} from \"./useSymbolsInfo\";\nimport {Decimal} from \"@orderly.network/utils\";\nimport {max, min} from \"ramda\";\nimport {SDKError} from \"@orderly.network/types\";\nimport orderbooksService from './orderbook.service';\n\nexport type OrderBookItem = number[];\n\nexport type OrderbookData = {\n asks: OrderBookItem[];\n bids: OrderBookItem[];\n};\n\nconst paddingFn = (len: number) =>\n Array(len).fill([Number.NaN, Number.NaN, Number.NaN, Number.NaN] as OrderBookItem);\n\nconst asksSortFn = (a: OrderBookItem, b: OrderBookItem) => a[0] - b[0];\n\nconst bidsSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\n// const commonSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\nconst reduceItems = (\n depth: number | undefined,\n level: number,\n data: OrderBookItem[],\n asks = false\n) => {\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n let newData = [...data];\n const result: OrderBookItem[] = [];\n\n //\n\n if (typeof depth !== \"undefined\") {\n const prices = new Map<number, number[]>();\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n let priceKey;\n\n if (asks) {\n priceKey = new Decimal(Math.ceil(price / depth)).mul(depth).toNumber();\n } else {\n priceKey = new Decimal(Math.floor(price / depth)).mul(depth).toNumber();\n }\n\n if (depth < 1 && depth > 0 && priceKey.toString().indexOf(\".\") !== -1) {\n const priceStr = price.toString();\n const index = priceStr.indexOf(\".\");\n const decimal = priceStr.slice(index + 1);\n const decimalDepth = depth.toString().slice(2).length;\n const decimalStr = decimal.slice(0, min(decimal.length, decimalDepth));\n priceKey = new Decimal(\n priceStr.slice(0, index) + \".\" + decimalStr\n ).toNumber();\n }\n\n // console.log(`reduce items price: ${price}, priceKey: ${priceKey}, depth: ${depth}, resetPriceKey: ${price.toString === priceKey.toString}`);\n // console.log(`ask: ${asks} reduce items price: ${priceKey}`);\n\n if (prices.has(priceKey)) {\n const item = prices.get(priceKey)!;\n const itemPrice = new Decimal(item[1]).add(quantity).toNumber();\n\n // prices.push([price, quantity]);\n prices.set(priceKey, [priceKey, itemPrice]);\n } else {\n prices.set(priceKey, [priceKey, quantity]);\n }\n }\n\n newData = Array.from(prices.values());\n }\n\n for (let i = 0; i < newData.length; i++) {\n const [price, quantity] = newData[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n\n const newQuantity = new Decimal(quantity)\n .add(result.length > 0 ? result[result.length - 1][2] : 0)\n .toNumber();\n\n const newAmount = new Decimal(quantity * price)\n .add(result.length > 0 ? result[result.length - 1][3] : 0)\n .toNumber();\n\n result.push([price, quantity, newQuantity, newAmount]);\n // if the total is greater than the level, break\n // TODO:\n // if (i + 1 >= level) {\n // break;\n // }\n }\n\n return result;\n};\n\n/**\n * @name reduceOrderbook\n * @param depth\n * @param level\n * @param data\n */\nexport const reduceOrderbook = (\n depth: number | undefined,\n level: number,\n padding: boolean,\n data: OrderbookData,\n): OrderbookData => {\n let asks = reduceItems(depth, level, data.asks, true);\n\n let bids = reduceItems(depth, level, data.bids);\n\n /// not empty and asks.price <= bids.price\n if (asks.length !== 0 && bids.length !== 0 && asks[0][0] <= bids[0][0]) {\n if (asks.length === 1) {\n const [price, qty, newQuantity, newAmount] = asks[0];\n asks.shift();\n asks.push([price + (depth === undefined ? 0 : depth), qty, newQuantity, newAmount]);\n } else {\n const [bidPrice] = bids[0];\n while (asks.length > 0) {\n const [askPrice, askQty, newQuantity, newAmount] = asks[0];\n\n\n if (askPrice <= bidPrice) {\n // console.log(\"xxxxxxxxxxx reset ask list begin\", [...asks], { ...asks[0] });\n asks.shift();\n let logStr = \"\";\n for (let index = 0; index < asks.length; index++) {\n if (index === 0) {\n const quantity = asks[index][1] + askQty;\n asks[index][1] = quantity;\n asks[index][2] = quantity;\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = Math.ceil(quantity) * asks[index][0];\n } else {\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = asks[index][0] * asks[index][1] + asks[index - 1][3];\n }\n logStr += `index: ${index} ${asks[index]}\\n`;\n }\n // console.log(\"xxxxxxxxxxx reset ask list end\", logStr);\n } else {\n break;\n }\n }\n }\n }\n\n asks = asks.reverse();\n\n if (padding) {\n asks =\n asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;\n bids =\n bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;\n }\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\nconst mergeItems = (data: OrderBookItem[], update: OrderBookItem[]) => {\n // let index = -1;\n if (data.length === 0) return update;\n\n data = data.filter(([price]) => !isNaN(price));\n\n while (update.length > 0) {\n const item = update.shift();\n //\n if (item) {\n const [price, quantity] = item;\n\n const index = data.findIndex(([p], index) => p === price);\n //\n if (index === -1) {\n if (quantity === 0) continue;\n data.push(item);\n } else {\n if (quantity === 0) {\n data.splice(index, 1);\n } else {\n data[index] = item;\n }\n }\n }\n }\n\n return data;\n};\n\nexport const mergeOrderbook = (data: OrderbookData, update: OrderbookData) => {\n let asks = [...data.asks];\n let bids = [...data.bids];\n\n asks = mergeItems(asks, update.asks).sort(asksSortFn);\n bids = mergeItems(bids, update.bids).sort(bidsSortFn);\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\n/**\n * Configuration for the Order Book\n */\nexport type OrderbookOptions = {\n /** Indicates the number of data entries to return for ask/bid, default is 10 */\n level?: number;\n /** Whether to fill in when the actual data entries are less than the level. If filled, it will add [nan, nan, nan, nan]. Default is true */\n padding?: boolean;\n};\n\nconst INIT_DATA = {asks: [], bids: []};\n\n/**\n * @name useOrderbookStream\n * @description React hook that returns the current orderbook for a given market\n */\nexport const useOrderbookStream = (\n symbol: string,\n initial: OrderbookData = INIT_DATA,\n options?: OrderbookOptions\n) => {\n if (!symbol) {\n throw new SDKError(\"useOrderbookStream requires a symbol\");\n }\n\n const level = options?.level ?? 10;\n const padding = options?.padding ?? true;\n\n const [requestData, setRequestData] = useState<OrderbookData | null>(null);\n const [data, setData] = useState<OrderbookData>(initial);\n const [isLoading, setIsLoading] = useState(true);\n // const [level, setLevel] = useState(() => options?.level ?? 10);\n\n const config = useSymbolsInfo()[symbol];\n\n const [depth, setDepth] = useState<number | undefined>();\n\n // markPrice, lastPrice\n const prevMiddlePrice = useRef<number>(0);\n\n const depths = useMemo(() => {\n const tick = config(\"quote_tick\");\n\n return [tick, tick * 10, tick * 100, tick * 1000];\n }, [config(\"quote_tick\")]);\n\n useEffect(() => {\n setDepth(config(\"quote_tick\"));\n }, [config(\"quote_tick\")]);\n\n const ws = useWS();\n\n const ticker = useTickerStream(symbol);\n\n const eventEmitter = useEventEmitter();\n\n // const orderbookRequest =\n\n useEffect(() => {\n let needRequestFullOrderbook= true;\n setIsLoading(true);\n let orderBookUpdateSub: any;\n let fullOrderBookUpdateSub: any;\n orderBookUpdateSub = ws.subscribe(\n {\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {data: wsData, ts} = message;\n const {asks, bids, prevTs} = wsData;\n orderbooksService.updateOrderbook(symbol, {asks, bids, ts, prevTs}, () => needRequestFullOrderbook = true);\n\n\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n }\n }\n )\n\n if ( needRequestFullOrderbook) {\n setIsLoading(true);\n\n fullOrderBookUpdateSub = ws.onceSubscribe(\n {\n event: \"request\",\n id: `${symbol}@orderbook`,\n params: {\n type: \"orderbook\",\n symbol: symbol,\n },\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {symbol, asks, bids, ts} = message.data;\n orderbooksService.setFullOrderbook(symbol, {asks, bids, ts})\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n setIsLoading(false);\n },\n }\n )\n needRequestFullOrderbook= false;\n }\n\n return () => {\n // unsubscribe\n orderBookUpdateSub?.();\n fullOrderBookUpdateSub?.();\n orderbooksService.resetOrderBook(symbol);\n setData(INIT_DATA);\n }\n\n }, [symbol]);\n\n // const {data:markPrices} = useMarkPricesStream();\n\n const {data: markPrice} = useMarkPrice(symbol);\n\n\n const onItemClick = useCallback((item: OrderBookItem) => {\n eventEmitter.emit(\"orderbook:item:click\", item);\n }, []);\n\n const onDepthChange = useCallback((depth: number) => {\n //\n setDepth(() => depth);\n }, []);\n\n\n const reducedData = reduceOrderbook(depth, level, padding, {\n asks: [...data.asks],\n bids: [...data.bids],\n });\n\n // emit the asks0 and bids0\n useEffect(() => {\n const updateData = [\n reducedData.asks?.[reducedData.asks.length - 1]?.[0],\n reducedData.bids?.[0]?.[0]\n ];\n eventEmitter.emit(\"orderbook:update\", updateData);\n }, [reducedData.asks?.[reducedData.asks.length - 1]?.[0], reducedData.bids?.[0]?.[0]]);\n\n const middlePrice = useMemo(() => {\n let asksFrist = 0,\n bidsFirst = 0;\n\n if (data.asks.length > 0) {\n asksFrist = reducedData.asks?.[reducedData.asks.length - 1]?.[0];\n }\n\n if (data.bids.length > 0) {\n bidsFirst = data.bids[0][0];\n }\n\n if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;\n\n\n return [asksFrist, bidsFirst, ticker[\"24h_close\"]].sort()[1];\n }, [ticker?.[\"24h_close\"], data]);\n\n useEffect(() => {\n prevMiddlePrice.current = middlePrice;\n }, [middlePrice]);\n\n return [\n {\n asks: reducedData.asks.slice(-level),\n bids: reducedData.bids.slice(0, level),\n markPrice: markPrice,\n middlePrice: [prevMiddlePrice.current, middlePrice],\n },\n {onDepthChange, depth, allDepths: depths, isLoading, onItemClick},\n ];\n};\n\nexport type useOrderbookStreamReturn = ReturnType<typeof useOrderbookStream>;\n"],"names":["useCallback","useEffect","useMemo","useRef","useState","useTickerStream","useMarkPrice","useWS","useEventEmitter","useSymbolsInfo","Decimal","min","SDKError","orderbooksService","paddingFn","len","Array","fill","Number","NaN","asksSortFn","a","b","bidsSortFn","reduceItems","depth","level","data","asks","isArray","length","newData","result","prices","Map","i","price","quantity","isNaN","priceKey","Math","ceil","mul","toNumber","floor","toString","indexOf","priceStr","index","decimal","slice","decimalDepth","decimalStr","has","item","get","itemPrice","add","set","from","values","newQuantity","newAmount","push","reduceOrderbook","padding","bids","qty","shift","undefined","bidPrice","askPrice","askQty","logStr","reverse","concat","mergeItems","update","filter","findIndex","p","splice","mergeOrderbook","sort","INIT_DATA","useOrderbookStream","symbol","initial","options","requestData","setRequestData","setData","isLoading","setIsLoading","config","setDepth","prevMiddlePrice","depths","tick","ws","ticker","eventEmitter","needRequestFullOrderbook","orderBookUpdateSub","fullOrderBookUpdateSub","subscribe","event","topic","formatter","message","onMessage","wsData","ts","prevTs","updateOrderbook","getRawOrderbook","onceSubscribe","id","params","type","setFullOrderbook","resetOrderBook","markPrice","onItemClick","emit","onDepthChange","reducedData","updateData","middlePrice","asksFrist","bidsFirst","current","allDepths"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAAQA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAO,QAAQ;AACxE,SAAQC,eAAe,QAAO,oBAAoB;AAClD,SAAQC,YAAY,QAAO,iBAAiB;AAC5C,SAAQC,KAAK,QAAO,WAAW;AAC/B,SAAQC,eAAe,QAAO,qBAAqB;AACnD,SAAQC,cAAc,QAAO,mBAAmB;AAChD,SAAQC,OAAO,QAAO,yBAAyB;AAC/C,SAAaC,GAAG,QAAO,QAAQ;AAC/B,SAAQC,QAAQ,QAAO,yBAAyB;AAChD,OAAOC,uBAAuB,sBAAsB;AASpD,MAAMC,YAAY,CAACC,MACfC,MAAMD,KAAKE,IAAI,CAAC;QAACC,OAAOC,GAAG;QAAED,OAAOC,GAAG;QAAED,OAAOC,GAAG;QAAED,OAAOC,GAAG;KAAC;AAEpE,MAAMC,aAAa,CAACC,GAAkBC,IAAqBD,CAAC,CAAC,EAAE,GAAGC,CAAC,CAAC,EAAE;AAEtE,MAAMC,aAAa,CAACF,GAAkBC,IAAqBA,CAAC,CAAC,EAAE,GAAGD,CAAC,CAAC,EAAE;AAEtE,4EAA4E;AAE5E,MAAMG,cAAc,CAChBC,OACAC,OACAC,MACAC,OAAO,KAAK;IAEZ,IAAI,CAACZ,MAAMa,OAAO,CAACF,SAASA,KAAKG,MAAM,KAAK,GAAG;QAC3C,OAAO,EAAE;IACb;IACA,IAAIC,UAAU;WAAIJ;KAAK;IACvB,MAAMK,SAA0B,EAAE;IAElC,EAAE;IAEF,IAAI,OAAOP,UAAU,aAAa;QAC9B,MAAMQ,SAAS,IAAIC;QACnB,IAAK,IAAIC,IAAI,GAAGA,IAAIR,KAAKG,MAAM,EAAEK,IAAK;YAClC,MAAM,CAACC,OAAOC,SAAS,GAAGV,IAAI,CAACQ,EAAE;YACjC,IAAIG,MAAMF,UAAUE,MAAMD,WAAW;YACrC,IAAIE;YAEJ,IAAIX,MAAM;gBACNW,WAAW,IAAI7B,QAAQ8B,KAAKC,IAAI,CAACL,QAAQX,QAAQiB,GAAG,CAACjB,OAAOkB,QAAQ;YACxE,OAAO;gBACHJ,WAAW,IAAI7B,QAAQ8B,KAAKI,KAAK,CAACR,QAAQX,QAAQiB,GAAG,CAACjB,OAAOkB,QAAQ;YACzE;YAEA,IAAIlB,QAAQ,KAAKA,QAAQ,KAAKc,SAASM,QAAQ,GAAGC,OAAO,CAAC,SAAS,CAAC,GAAG;gBACnE,MAAMC,WAAWX,MAAMS,QAAQ;gBAC/B,MAAMG,QAAQD,SAASD,OAAO,CAAC;gBAC/B,MAAMG,UAAUF,SAASG,KAAK,CAACF,QAAQ;gBACvC,MAAMG,eAAe1B,MAAMoB,QAAQ,GAAGK,KAAK,CAAC,GAAGpB,MAAM;gBACrD,MAAMsB,aAAaH,QAAQC,KAAK,CAAC,GAAGvC,IAAIsC,QAAQnB,MAAM,EAAEqB;gBACxDZ,WAAW,IAAI7B,QACXqC,SAASG,KAAK,CAAC,GAAGF,SAAS,MAAMI,YACnCT,QAAQ;YACd;YAEA,+IAA+I;YAC/I,+DAA+D;YAE/D,IAAIV,OAAOoB,GAAG,CAACd,WAAW;gBACtB,MAAMe,OAAOrB,OAAOsB,GAAG,CAAChB;gBACxB,MAAMiB,YAAY,IAAI9C,QAAQ4C,IAAI,CAAC,EAAE,EAAEG,GAAG,CAACpB,UAAUM,QAAQ;gBAE7D,kCAAkC;gBAClCV,OAAOyB,GAAG,CAACnB,UAAU;oBAACA;oBAAUiB;iBAAU;YAC9C,OAAO;gBACHvB,OAAOyB,GAAG,CAACnB,UAAU;oBAACA;oBAAUF;iBAAS;YAC7C;QACJ;QAEAN,UAAUf,MAAM2C,IAAI,CAAC1B,OAAO2B,MAAM;IACtC;IAEA,IAAK,IAAIzB,IAAI,GAAGA,IAAIJ,QAAQD,MAAM,EAAEK,IAAK;QACrC,MAAM,CAACC,OAAOC,SAAS,GAAGN,OAAO,CAACI,EAAE;QACpC,IAAIG,MAAMF,UAAUE,MAAMD,WAAW;QAErC,MAAMwB,cAAc,IAAInD,QAAQ2B,UAC3BoB,GAAG,CAACzB,OAAOF,MAAM,GAAG,IAAIE,MAAM,CAACA,OAAOF,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,GACvDa,QAAQ;QAEb,MAAMmB,YAAY,IAAIpD,QAAQ2B,WAAWD,OACpCqB,GAAG,CAACzB,OAAOF,MAAM,GAAG,IAAIE,MAAM,CAACA,OAAOF,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,GACvDa,QAAQ;QAEbX,OAAO+B,IAAI,CAAC;YAAC3B;YAAOC;YAAUwB;YAAaC;SAAU;IACrD,gDAAgD;IAChD,QAAQ;IACR,wBAAwB;IACxB,WAAW;IACX,IAAI;IACR;IAEA,OAAO9B;AACX;AAEA;;;;;CAKC,GACD,OAAO,MAAMgC,kBAAkB,CAC3BvC,OACAC,OACAuC,SACAtC;IAEA,IAAIC,OAAOJ,YAAYC,OAAOC,OAAOC,KAAKC,IAAI,EAAE;IAEhD,IAAIsC,OAAO1C,YAAYC,OAAOC,OAAOC,KAAKuC,IAAI;IAE9C,0CAA0C;IAC1C,IAAItC,KAAKE,MAAM,KAAK,KAAKoC,KAAKpC,MAAM,KAAK,KAAKF,IAAI,CAAC,EAAE,CAAC,EAAE,IAAIsC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACpE,IAAItC,KAAKE,MAAM,KAAK,GAAG;YACnB,MAAM,CAACM,OAAO+B,KAAKN,aAAaC,UAAU,GAAGlC,IAAI,CAAC,EAAE;YACpDA,KAAKwC,KAAK;YACVxC,KAAKmC,IAAI,CAAC;gBAAC3B,QAASX,CAAAA,UAAU4C,YAAY,IAAI5C,KAAI;gBAAI0C;gBAAKN;gBAAaC;aAAU;QACtF,OAAO;YACH,MAAM,CAACQ,SAAS,GAAGJ,IAAI,CAAC,EAAE;YAC1B,MAAOtC,KAAKE,MAAM,GAAG,EAAG;gBACpB,MAAM,CAACyC,UAAUC,QAAQX,aAAaC,UAAU,GAAGlC,IAAI,CAAC,EAAE;gBAG1D,IAAI2C,YAAYD,UAAU;oBACtB,8EAA8E;oBAC9E1C,KAAKwC,KAAK;oBACV,IAAIK,SAAS;oBACb,IAAK,IAAIzB,QAAQ,GAAGA,QAAQpB,KAAKE,MAAM,EAAEkB,QAAS;wBAC9C,IAAIA,UAAU,GAAG;4BACb,MAAMX,WAAWT,IAAI,CAACoB,MAAM,CAAC,EAAE,GAAGwB;4BAClC5C,IAAI,CAACoB,MAAM,CAAC,EAAE,GAAGX;4BACjBT,IAAI,CAACoB,MAAM,CAAC,EAAE,GAAGX;4BACjB,+BAA+B;4BAC/B,6BAA6B;4BAC7BT,IAAI,CAACoB,MAAM,CAAC,EAAE,GAAGR,KAAKC,IAAI,CAACJ,YAAYT,IAAI,CAACoB,MAAM,CAAC,EAAE;wBACzD,OAAO;4BACH,+BAA+B;4BAC/B,6BAA6B;4BAC7BpB,IAAI,CAACoB,MAAM,CAAC,EAAE,GAAGpB,IAAI,CAACoB,MAAM,CAAC,EAAE,GAAGpB,IAAI,CAACoB,MAAM,CAAC,EAAE,GAAGpB,IAAI,CAACoB,QAAQ,EAAE,CAAC,EAAE;wBACzE;wBACAyB,UAAU,CAAC,OAAO,EAAEzB,MAAM,CAAC,EAAEpB,IAAI,CAACoB,MAAM,CAAC,EAAE,CAAC;oBAChD;gBACA,yDAAyD;gBAC7D,OAAO;oBACH;gBACJ;YACJ;QACJ;IACJ;IAEApB,OAAOA,KAAK8C,OAAO;IAEnB,IAAIT,SAAS;QACTrC,OACIA,KAAKE,MAAM,GAAGJ,QAAQZ,UAAUY,QAAQE,KAAKE,MAAM,EAAE6C,MAAM,CAAC/C,QAAQA;QACxEsC,OACIA,KAAKpC,MAAM,GAAGJ,QAAQwC,KAAKS,MAAM,CAAC7D,UAAUY,QAAQwC,KAAKpC,MAAM,KAAKoC;IAC5E;IAEA,OAAO;QACHtC,MAAMA;QACNsC,MAAMA;IACV;AACJ,EAAE;AAEF,MAAMU,aAAa,CAACjD,MAAuBkD;IACvC,kBAAkB;IAClB,IAAIlD,KAAKG,MAAM,KAAK,GAAG,OAAO+C;IAE9BlD,OAAOA,KAAKmD,MAAM,CAAC,CAAC,CAAC1C,MAAM,GAAK,CAACE,MAAMF;IAEvC,MAAOyC,OAAO/C,MAAM,GAAG,EAAG;QACtB,MAAMwB,OAAOuB,OAAOT,KAAK;QACzB,EAAE;QACF,IAAId,MAAM;YACN,MAAM,CAAClB,OAAOC,SAAS,GAAGiB;YAE1B,MAAMN,QAAQrB,KAAKoD,SAAS,CAAC,CAAC,CAACC,EAAE,EAAEhC,QAAUgC,MAAM5C;YACnD,EAAE;YACF,IAAIY,UAAU,CAAC,GAAG;gBACd,IAAIX,aAAa,GAAG;gBACpBV,KAAKoC,IAAI,CAACT;YACd,OAAO;gBACH,IAAIjB,aAAa,GAAG;oBAChBV,KAAKsD,MAAM,CAACjC,OAAO;gBACvB,OAAO;oBACHrB,IAAI,CAACqB,MAAM,GAAGM;gBAClB;YACJ;QACJ;IACJ;IAEA,OAAO3B;AACX;AAEA,OAAO,MAAMuD,iBAAiB,CAACvD,MAAqBkD;IAChD,IAAIjD,OAAO;WAAID,KAAKC,IAAI;KAAC;IACzB,IAAIsC,OAAO;WAAIvC,KAAKuC,IAAI;KAAC;IAEzBtC,OAAOgD,WAAWhD,MAAMiD,OAAOjD,IAAI,EAAEuD,IAAI,CAAC/D;IAC1C8C,OAAOU,WAAWV,MAAMW,OAAOX,IAAI,EAAEiB,IAAI,CAAC5D;IAE1C,OAAO;QACHK,MAAMA;QACNsC,MAAMA;IACV;AACJ,EAAE;AAYF,MAAMkB,YAAY;IAACxD,MAAM,EAAE;IAAEsC,MAAM,EAAE;AAAA;AAErC;;;CAGC,GACD,OAAO,MAAMmB,qBAAqB,CAC9BC,QACAC,UAAyBH,SAAS,EAClCI;IAEA,IAAI,CAACF,QAAQ;QACT,MAAM,IAAI1E,SAAS;IACvB;IAEA,MAAMc,QAAQ8D,SAAS9D,SAAS;IAChC,MAAMuC,UAAUuB,SAASvB,WAAW;IAEpC,MAAM,CAACwB,aAAaC,eAAe,GAAGtF,SAA+B;IACrE,MAAM,CAACuB,MAAMgE,QAAQ,GAAGvF,SAAwBmF;IAChD,MAAM,CAACK,WAAWC,aAAa,GAAGzF,SAAS;IAC3C,kEAAkE;IAElE,MAAM0F,SAASrF,gBAAgB,CAAC6E,OAAO;IAEvC,MAAM,CAAC7D,OAAOsE,SAAS,GAAG3F;IAE1B,uBAAuB;IACvB,MAAM4F,kBAAkB7F,OAAe;IAEvC,MAAM8F,SAAS/F,QAAQ;QACnB,MAAMgG,OAAOJ,OAAO;QAEpB,OAAO;YAACI;YAAMA,OAAO;YAAIA,OAAO;YAAKA,OAAO;SAAK;IACrD,GAAG;QAACJ,OAAO;KAAc;IAEzB7F,UAAU;QACN8F,SAASD,OAAO;IACpB,GAAG;QAACA,OAAO;KAAc;IAEzB,MAAMK,KAAK5F;IAEX,MAAM6F,SAAS/F,gBAAgBiF;IAE/B,MAAMe,eAAe7F;IAErB,2BAA2B;IAE3BP,UAAU;QACN,IAAIqG,2BAA0B;QAC9BT,aAAa;QACb,IAAIU;QACJ,IAAIC;QACJD,qBAAqBJ,GAAGM,SAAS,CAC7B;YACIC,OAAO;YACPC,OAAO,CAAC,EAAErB,OAAO,gBAAgB,CAAC;QACtC,GACA;YACIsB,WAAW,CAACC,UAAYA;YACxBC,WAAW,CAACD;gBACR,MAAM,EAAClF,MAAMoF,MAAM,EAAEC,EAAE,EAAC,GAAGH;gBAC3B,MAAM,EAACjF,IAAI,EAAEsC,IAAI,EAAE+C,MAAM,EAAC,GAAGF;gBAC7BlG,kBAAkBqG,eAAe,CAAC5B,QAAQ;oBAAC1D;oBAAMsC;oBAAM8C;oBAAIC;gBAAM,GAAG,IAAMX,2BAA2B;gBAGrG,MAAM3E,OAAOd,kBAAkBsG,eAAe,CAAC7B;gBAC/CK,QAAQ;oBAACzB,MAAMvC,KAAKuC,IAAI;oBAAEtC,MAAMD,KAAKC,IAAI;gBAAA;YAE7C;QACJ;QAGJ,IAAK0E,0BAA0B;YAC3BT,aAAa;YAEbW,yBAAyBL,GAAGiB,aAAa,CACrC;gBACIV,OAAO;gBACPW,IAAI,CAAC,EAAE/B,OAAO,UAAU,CAAC;gBACzBgC,QAAQ;oBACJC,MAAM;oBACNjC,QAAQA;gBACZ;YACJ,GACA;gBACIsB,WAAW,CAACC,UAAYA;gBACxBC,WAAW,CAACD;oBACR,MAAM,EAACvB,MAAM,EAAE1D,IAAI,EAAEsC,IAAI,EAAE8C,EAAE,EAAC,GAAGH,QAAQlF,IAAI;oBAC7Cd,kBAAkB2G,gBAAgB,CAAClC,QAAQ;wBAAC1D;wBAAMsC;wBAAM8C;oBAAE;oBAC1D,MAAMrF,OAAOd,kBAAkBsG,eAAe,CAAC7B;oBAC/CK,QAAQ;wBAACzB,MAAMvC,KAAKuC,IAAI;wBAAEtC,MAAMD,KAAKC,IAAI;oBAAA;oBAEzCiE,aAAa;gBACjB;YACJ;YAEJS,2BAA0B;QAC9B;QAEA,OAAO;YACH,cAAc;YACdC;YACAC;YACA3F,kBAAkB4G,cAAc,CAACnC;YACjCK,QAAQP;QACZ;IAEJ,GAAG;QAACE;KAAO;IAEX,mDAAmD;IAEnD,MAAM,EAAC3D,MAAM+F,SAAS,EAAC,GAAGpH,aAAagF;IAGvC,MAAMqC,cAAc3H,YAAY,CAACsD;QAC7B+C,aAAauB,IAAI,CAAC,wBAAwBtE;IAC9C,GAAG,EAAE;IAEL,MAAMuE,gBAAgB7H,YAAY,CAACyB;QAC/B,EAAE;QACFsE,SAAS,IAAMtE;IACnB,GAAG,EAAE;IAGL,MAAMqG,cAAc9D,gBAAgBvC,OAAOC,OAAOuC,SAAS;QACvDrC,MAAM;eAAID,KAAKC,IAAI;SAAC;QACpBsC,MAAM;eAAIvC,KAAKuC,IAAI;SAAC;IACxB;IAEA,2BAA2B;IAC3BjE,UAAU;QACN,MAAM8H,aAAa;YACfD,YAAYlG,IAAI,EAAE,CAACkG,YAAYlG,IAAI,CAACE,MAAM,GAAG,EAAE,EAAE,CAAC,EAAE;YACpDgG,YAAY5D,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;SAC7B;QACDmC,aAAauB,IAAI,CAAC,oBAAoBG;IAC1C,GAAG;QAACD,YAAYlG,IAAI,EAAE,CAACkG,YAAYlG,IAAI,CAACE,MAAM,GAAG,EAAE,EAAE,CAAC,EAAE;QAAEgG,YAAY5D,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;KAAC;IAErF,MAAM8D,cAAc9H,QAAQ;QACxB,IAAI+H,YAAY,GACZC,YAAY;QAEhB,IAAIvG,KAAKC,IAAI,CAACE,MAAM,GAAG,GAAG;YACtBmG,YAAYH,YAAYlG,IAAI,EAAE,CAACkG,YAAYlG,IAAI,CAACE,MAAM,GAAG,EAAE,EAAE,CAAC,EAAE;QACpE;QAEA,IAAIH,KAAKuC,IAAI,CAACpC,MAAM,GAAG,GAAG;YACtBoG,YAAYvG,KAAKuC,IAAI,CAAC,EAAE,CAAC,EAAE;QAC/B;QAEA,IAAI5B,MAAM2F,cAAc3F,MAAM4F,cAAc,CAAC9B,QAAQ,OAAO;QAG5D,OAAO;YAAC6B;YAAWC;YAAW9B,MAAM,CAAC,YAAY;SAAC,CAACjB,IAAI,EAAE,CAAC,EAAE;IAChE,GAAG;QAACiB,QAAQ,CAAC,YAAY;QAAEzE;KAAK;IAEhC1B,UAAU;QACN+F,gBAAgBmC,OAAO,GAAGH;IAC9B,GAAG;QAACA;KAAY;IAEhB,OAAO;QACH;YACIpG,MAAMkG,YAAYlG,IAAI,CAACsB,KAAK,CAAC,CAACxB;YAC9BwC,MAAM4D,YAAY5D,IAAI,CAAChB,KAAK,CAAC,GAAGxB;YAChCgG,WAAWA;YACXM,aAAa;gBAAChC,gBAAgBmC,OAAO;gBAAEH;aAAY;QACvD;QACA;YAACH;YAAepG;YAAO2G,WAAWnC;YAAQL;YAAW+B;QAAW;KACnE;AACL,EAAE"}