@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
@@ -1,91 +1,115 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.useOrderbookStream = exports.mergeOrderbook = exports.reduceOrderbook = void 0;
7
- const react_1 = require("react");
8
- const useTickerStream_1 = require("./useTickerStream");
9
- const useMarkPrice_1 = require("./useMarkPrice");
10
- const useWS_1 = require("../useWS");
11
- const useEventEmitter_1 = require("../useEventEmitter");
12
- const useSymbolsInfo_1 = require("./useSymbolsInfo");
13
- const utils_1 = require("@orderly.network/utils");
14
- const ramda_1 = require("ramda");
15
- const types_1 = require("@orderly.network/types");
16
- const orderbook_service_1 = __importDefault(require("./orderbook.service"));
17
- const paddingFn = (len) => Array(len).fill([Number.NaN, Number.NaN, Number.NaN, Number.NaN]);
18
- const asksSortFn = (a, b) => a[0] - b[0];
19
- const bidsSortFn = (a, b) => b[0] - a[0];
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ mergeOrderbook: function() {
13
+ return mergeOrderbook;
14
+ },
15
+ reduceOrderbook: function() {
16
+ return reduceOrderbook;
17
+ },
18
+ useOrderbookStream: function() {
19
+ return useOrderbookStream;
20
+ }
21
+ });
22
+ const _react = require("react");
23
+ const _useTickerStream = require("./useTickerStream");
24
+ const _useMarkPrice = require("./useMarkPrice");
25
+ const _useWS = require("../useWS");
26
+ const _useEventEmitter = require("../useEventEmitter");
27
+ const _useSymbolsInfo = require("./useSymbolsInfo");
28
+ const _utils = require("@orderly.network/utils");
29
+ const _ramda = require("ramda");
30
+ const _types = require("@orderly.network/types");
31
+ const _orderbookservice = /*#__PURE__*/ _interop_require_default(require("./orderbook.service"));
32
+ function _interop_require_default(obj) {
33
+ return obj && obj.__esModule ? obj : {
34
+ default: obj
35
+ };
36
+ }
37
+ const paddingFn = (len)=>Array(len).fill([
38
+ Number.NaN,
39
+ Number.NaN,
40
+ Number.NaN,
41
+ Number.NaN
42
+ ]);
43
+ const asksSortFn = (a, b)=>a[0] - b[0];
44
+ const bidsSortFn = (a, b)=>b[0] - a[0];
20
45
  // const commonSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];
21
- const reduceItems = (depth, level, data, asks = false) => {
46
+ const reduceItems = (depth, level, data, asks = false)=>{
22
47
  if (!Array.isArray(data) || data.length === 0) {
23
48
  return [];
24
49
  }
25
- let newData = [...data];
50
+ let newData = [
51
+ ...data
52
+ ];
26
53
  const result = [];
27
54
  //
28
55
  if (typeof depth !== "undefined") {
29
56
  const prices = new Map();
30
- for (let i = 0; i < data.length; i++) {
57
+ for(let i = 0; i < data.length; i++){
31
58
  const [price, quantity] = data[i];
32
- if (isNaN(price) || isNaN(quantity))
33
- continue;
59
+ if (isNaN(price) || isNaN(quantity)) continue;
34
60
  let priceKey;
35
61
  if (asks) {
36
- priceKey = new utils_1.Decimal(Math.ceil(price / depth)).mul(depth).toNumber();
37
- }
38
- else {
39
- priceKey = new utils_1.Decimal(Math.floor(price / depth)).mul(depth).toNumber();
62
+ priceKey = new _utils.Decimal(Math.ceil(price / depth)).mul(depth).toNumber();
63
+ } else {
64
+ priceKey = new _utils.Decimal(Math.floor(price / depth)).mul(depth).toNumber();
40
65
  }
41
66
  if (depth < 1 && depth > 0 && priceKey.toString().indexOf(".") !== -1) {
42
67
  const priceStr = price.toString();
43
68
  const index = priceStr.indexOf(".");
44
69
  const decimal = priceStr.slice(index + 1);
45
70
  const decimalDepth = depth.toString().slice(2).length;
46
- const decimalStr = decimal.slice(0, (0, ramda_1.min)(decimal.length, decimalDepth));
47
- priceKey = new utils_1.Decimal(priceStr.slice(0, index) + "." + decimalStr).toNumber();
71
+ const decimalStr = decimal.slice(0, (0, _ramda.min)(decimal.length, decimalDepth));
72
+ priceKey = new _utils.Decimal(priceStr.slice(0, index) + "." + decimalStr).toNumber();
48
73
  }
49
74
  // console.log(`reduce items price: ${price}, priceKey: ${priceKey}, depth: ${depth}, resetPriceKey: ${price.toString === priceKey.toString}`);
50
75
  // console.log(`ask: ${asks} reduce items price: ${priceKey}`);
51
76
  if (prices.has(priceKey)) {
52
77
  const item = prices.get(priceKey);
53
- const itemPrice = new utils_1.Decimal(item[1]).add(quantity).toNumber();
78
+ const itemPrice = new _utils.Decimal(item[1]).add(quantity).toNumber();
54
79
  // prices.push([price, quantity]);
55
- prices.set(priceKey, [priceKey, itemPrice]);
56
- }
57
- else {
58
- prices.set(priceKey, [priceKey, quantity]);
80
+ prices.set(priceKey, [
81
+ priceKey,
82
+ itemPrice
83
+ ]);
84
+ } else {
85
+ prices.set(priceKey, [
86
+ priceKey,
87
+ quantity
88
+ ]);
59
89
  }
60
90
  }
61
91
  newData = Array.from(prices.values());
62
92
  }
63
- for (let i = 0; i < newData.length; i++) {
93
+ for(let i = 0; i < newData.length; i++){
64
94
  const [price, quantity] = newData[i];
65
- if (isNaN(price) || isNaN(quantity))
66
- continue;
67
- const newQuantity = new utils_1.Decimal(quantity)
68
- .add(result.length > 0 ? result[result.length - 1][2] : 0)
69
- .toNumber();
70
- const newAmount = new utils_1.Decimal(quantity * price)
71
- .add(result.length > 0 ? result[result.length - 1][3] : 0)
72
- .toNumber();
73
- result.push([price, quantity, newQuantity, newAmount]);
74
- // if the total is greater than the level, break
75
- // TODO:
76
- // if (i + 1 >= level) {
77
- // break;
78
- // }
95
+ if (isNaN(price) || isNaN(quantity)) continue;
96
+ const newQuantity = new _utils.Decimal(quantity).add(result.length > 0 ? result[result.length - 1][2] : 0).toNumber();
97
+ const newAmount = new _utils.Decimal(quantity * price).add(result.length > 0 ? result[result.length - 1][3] : 0).toNumber();
98
+ result.push([
99
+ price,
100
+ quantity,
101
+ newQuantity,
102
+ newAmount
103
+ ]);
104
+ // if the total is greater than the level, break
105
+ // TODO:
106
+ // if (i + 1 >= level) {
107
+ // break;
108
+ // }
79
109
  }
80
110
  return result;
81
111
  };
82
- /**
83
- * @name reduceOrderbook
84
- * @param depth
85
- * @param level
86
- * @param data
87
- */
88
- const reduceOrderbook = (depth, level, padding, data) => {
112
+ const reduceOrderbook = (depth, level, padding, data)=>{
89
113
  let asks = reduceItems(depth, level, data.asks, true);
90
114
  let bids = reduceItems(depth, level, data.bids);
91
115
  /// not empty and asks.price <= bids.price
@@ -93,17 +117,21 @@ const reduceOrderbook = (depth, level, padding, data) => {
93
117
  if (asks.length === 1) {
94
118
  const [price, qty, newQuantity, newAmount] = asks[0];
95
119
  asks.shift();
96
- asks.push([price + (depth === undefined ? 0 : depth), qty, newQuantity, newAmount]);
97
- }
98
- else {
120
+ asks.push([
121
+ price + (depth === undefined ? 0 : depth),
122
+ qty,
123
+ newQuantity,
124
+ newAmount
125
+ ]);
126
+ } else {
99
127
  const [bidPrice] = bids[0];
100
- while (asks.length > 0) {
128
+ while(asks.length > 0){
101
129
  const [askPrice, askQty, newQuantity, newAmount] = asks[0];
102
130
  if (askPrice <= bidPrice) {
103
131
  // console.log("xxxxxxxxxxx reset ask list begin", [...asks], { ...asks[0] });
104
132
  asks.shift();
105
133
  let logStr = "";
106
- for (let index = 0; index < asks.length; index++) {
134
+ for(let index = 0; index < asks.length; index++){
107
135
  if (index === 0) {
108
136
  const quantity = asks[index][1] + askQty;
109
137
  asks[index][1] = quantity;
@@ -111,17 +139,15 @@ const reduceOrderbook = (depth, level, padding, data) => {
111
139
  // asks[index][3] += newAmount;
112
140
  // FIXME: fix this code later
113
141
  asks[index][3] = Math.ceil(quantity) * asks[index][0];
114
- }
115
- else {
142
+ } else {
116
143
  // asks[index][3] += newAmount;
117
144
  // FIXME: fix this code later
118
145
  asks[index][3] = asks[index][0] * asks[index][1] + asks[index - 1][3];
119
146
  }
120
147
  logStr += `index: ${index} ${asks[index]}\n`;
121
148
  }
122
- // console.log("xxxxxxxxxxx reset ask list end", logStr);
123
- }
124
- else {
149
+ // console.log("xxxxxxxxxxx reset ask list end", logStr);
150
+ } else {
125
151
  break;
126
152
  }
127
153
  }
@@ -129,39 +155,32 @@ const reduceOrderbook = (depth, level, padding, data) => {
129
155
  }
130
156
  asks = asks.reverse();
131
157
  if (padding) {
132
- asks =
133
- asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;
134
- bids =
135
- bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;
158
+ asks = asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;
159
+ bids = bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;
136
160
  }
137
161
  return {
138
162
  asks: asks,
139
- bids: bids,
163
+ bids: bids
140
164
  };
141
165
  };
142
- exports.reduceOrderbook = reduceOrderbook;
143
- const mergeItems = (data, update) => {
166
+ const mergeItems = (data, update)=>{
144
167
  // let index = -1;
145
- if (data.length === 0)
146
- return update;
147
- data = data.filter(([price]) => !isNaN(price));
148
- while (update.length > 0) {
168
+ if (data.length === 0) return update;
169
+ data = data.filter(([price])=>!isNaN(price));
170
+ while(update.length > 0){
149
171
  const item = update.shift();
150
172
  //
151
173
  if (item) {
152
174
  const [price, quantity] = item;
153
- const index = data.findIndex(([p], index) => p === price);
175
+ const index = data.findIndex(([p], index)=>p === price);
154
176
  //
155
177
  if (index === -1) {
156
- if (quantity === 0)
157
- continue;
178
+ if (quantity === 0) continue;
158
179
  data.push(item);
159
- }
160
- else {
180
+ } else {
161
181
  if (quantity === 0) {
162
182
  data.splice(index, 1);
163
- }
164
- else {
183
+ } else {
165
184
  data[index] = item;
166
185
  }
167
186
  }
@@ -169,63 +188,82 @@ const mergeItems = (data, update) => {
169
188
  }
170
189
  return data;
171
190
  };
172
- const mergeOrderbook = (data, update) => {
173
- let asks = [...data.asks];
174
- let bids = [...data.bids];
191
+ const mergeOrderbook = (data, update)=>{
192
+ let asks = [
193
+ ...data.asks
194
+ ];
195
+ let bids = [
196
+ ...data.bids
197
+ ];
175
198
  asks = mergeItems(asks, update.asks).sort(asksSortFn);
176
199
  bids = mergeItems(bids, update.bids).sort(bidsSortFn);
177
200
  return {
178
201
  asks: asks,
179
- bids: bids,
202
+ bids: bids
180
203
  };
181
204
  };
182
- exports.mergeOrderbook = mergeOrderbook;
183
- const INIT_DATA = { asks: [], bids: [] };
184
- /**
185
- * @name useOrderbookStream
186
- * @description React hook that returns the current orderbook for a given market
187
- */
188
- const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
205
+ const INIT_DATA = {
206
+ asks: [],
207
+ bids: []
208
+ };
209
+ const useOrderbookStream = (symbol, initial = INIT_DATA, options)=>{
189
210
  if (!symbol) {
190
- throw new types_1.SDKError("useOrderbookStream requires a symbol");
211
+ throw new _types.SDKError("useOrderbookStream requires a symbol");
191
212
  }
192
213
  const level = options?.level ?? 10;
193
214
  const padding = options?.padding ?? true;
194
- const [requestData, setRequestData] = (0, react_1.useState)(null);
195
- const [data, setData] = (0, react_1.useState)(initial);
196
- const [isLoading, setIsLoading] = (0, react_1.useState)(true);
215
+ const [requestData, setRequestData] = (0, _react.useState)(null);
216
+ const [data, setData] = (0, _react.useState)(initial);
217
+ const [isLoading, setIsLoading] = (0, _react.useState)(true);
197
218
  // const [level, setLevel] = useState(() => options?.level ?? 10);
198
- const config = (0, useSymbolsInfo_1.useSymbolsInfo)()[symbol];
199
- const [depth, setDepth] = (0, react_1.useState)();
219
+ const config = (0, _useSymbolsInfo.useSymbolsInfo)()[symbol];
220
+ const [depth, setDepth] = (0, _react.useState)();
200
221
  // markPrice, lastPrice
201
- const prevMiddlePrice = (0, react_1.useRef)(0);
202
- const depths = (0, react_1.useMemo)(() => {
222
+ const prevMiddlePrice = (0, _react.useRef)(0);
223
+ const depths = (0, _react.useMemo)(()=>{
203
224
  const tick = config("quote_tick");
204
- return [tick, tick * 10, tick * 100, tick * 1000];
205
- }, [config("quote_tick")]);
206
- (0, react_1.useEffect)(() => {
225
+ return [
226
+ tick,
227
+ tick * 10,
228
+ tick * 100,
229
+ tick * 1000
230
+ ];
231
+ }, [
232
+ config("quote_tick")
233
+ ]);
234
+ (0, _react.useEffect)(()=>{
207
235
  setDepth(config("quote_tick"));
208
- }, [config("quote_tick")]);
209
- const ws = (0, useWS_1.useWS)();
210
- const ticker = (0, useTickerStream_1.useTickerStream)(symbol);
211
- const eventEmitter = (0, useEventEmitter_1.useEventEmitter)();
236
+ }, [
237
+ config("quote_tick")
238
+ ]);
239
+ const ws = (0, _useWS.useWS)();
240
+ const ticker = (0, _useTickerStream.useTickerStream)(symbol);
241
+ const eventEmitter = (0, _useEventEmitter.useEventEmitter)();
212
242
  // const orderbookRequest =
213
- (0, react_1.useEffect)(() => {
243
+ (0, _react.useEffect)(()=>{
214
244
  let needRequestFullOrderbook = true;
215
245
  setIsLoading(true);
216
246
  let orderBookUpdateSub;
217
247
  let fullOrderBookUpdateSub;
218
248
  orderBookUpdateSub = ws.subscribe({
219
249
  event: "subscribe",
220
- topic: `${symbol}@orderbookupdate`,
250
+ topic: `${symbol}@orderbookupdate`
221
251
  }, {
222
- formatter: (message) => message,
223
- onMessage: (message) => {
252
+ formatter: (message)=>message,
253
+ onMessage: (message)=>{
224
254
  const { data: wsData, ts } = message;
225
255
  const { asks, bids, prevTs } = wsData;
226
- orderbook_service_1.default.updateOrderbook(symbol, { asks, bids, ts, prevTs }, () => needRequestFullOrderbook = true);
227
- const data = orderbook_service_1.default.getRawOrderbook(symbol);
228
- setData({ bids: data.bids, asks: data.asks });
256
+ _orderbookservice.default.updateOrderbook(symbol, {
257
+ asks,
258
+ bids,
259
+ ts,
260
+ prevTs
261
+ }, ()=>needRequestFullOrderbook = true);
262
+ const data = _orderbookservice.default.getRawOrderbook(symbol);
263
+ setData({
264
+ bids: data.bids,
265
+ asks: data.asks
266
+ });
229
267
  }
230
268
  });
231
269
  if (needRequestFullOrderbook) {
@@ -235,50 +273,66 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
235
273
  id: `${symbol}@orderbook`,
236
274
  params: {
237
275
  type: "orderbook",
238
- symbol: symbol,
239
- },
276
+ symbol: symbol
277
+ }
240
278
  }, {
241
- formatter: (message) => message,
242
- onMessage: (message) => {
279
+ formatter: (message)=>message,
280
+ onMessage: (message)=>{
243
281
  const { symbol, asks, bids, ts } = message.data;
244
- orderbook_service_1.default.setFullOrderbook(symbol, { asks, bids, ts });
245
- const data = orderbook_service_1.default.getRawOrderbook(symbol);
246
- setData({ bids: data.bids, asks: data.asks });
282
+ _orderbookservice.default.setFullOrderbook(symbol, {
283
+ asks,
284
+ bids,
285
+ ts
286
+ });
287
+ const data = _orderbookservice.default.getRawOrderbook(symbol);
288
+ setData({
289
+ bids: data.bids,
290
+ asks: data.asks
291
+ });
247
292
  setIsLoading(false);
248
- },
293
+ }
249
294
  });
250
295
  needRequestFullOrderbook = false;
251
296
  }
252
- return () => {
297
+ return ()=>{
253
298
  // unsubscribe
254
299
  orderBookUpdateSub?.();
255
300
  fullOrderBookUpdateSub?.();
256
- orderbook_service_1.default.resetOrderBook(symbol);
301
+ _orderbookservice.default.resetOrderBook(symbol);
257
302
  setData(INIT_DATA);
258
303
  };
259
- }, [symbol]);
304
+ }, [
305
+ symbol
306
+ ]);
260
307
  // const {data:markPrices} = useMarkPricesStream();
261
- const { data: markPrice } = (0, useMarkPrice_1.useMarkPrice)(symbol);
262
- const onItemClick = (0, react_1.useCallback)((item) => {
308
+ const { data: markPrice } = (0, _useMarkPrice.useMarkPrice)(symbol);
309
+ const onItemClick = (0, _react.useCallback)((item)=>{
263
310
  eventEmitter.emit("orderbook:item:click", item);
264
311
  }, []);
265
- const onDepthChange = (0, react_1.useCallback)((depth) => {
312
+ const onDepthChange = (0, _react.useCallback)((depth)=>{
266
313
  //
267
- setDepth(() => depth);
314
+ setDepth(()=>depth);
268
315
  }, []);
269
- const reducedData = (0, exports.reduceOrderbook)(depth, level, padding, {
270
- asks: [...data.asks],
271
- bids: [...data.bids],
316
+ const reducedData = reduceOrderbook(depth, level, padding, {
317
+ asks: [
318
+ ...data.asks
319
+ ],
320
+ bids: [
321
+ ...data.bids
322
+ ]
272
323
  });
273
324
  // emit the asks0 and bids0
274
- (0, react_1.useEffect)(() => {
325
+ (0, _react.useEffect)(()=>{
275
326
  const updateData = [
276
327
  reducedData.asks?.[reducedData.asks.length - 1]?.[0],
277
328
  reducedData.bids?.[0]?.[0]
278
329
  ];
279
330
  eventEmitter.emit("orderbook:update", updateData);
280
- }, [reducedData.asks?.[reducedData.asks.length - 1]?.[0], reducedData.bids?.[0]?.[0]]);
281
- const middlePrice = (0, react_1.useMemo)(() => {
331
+ }, [
332
+ reducedData.asks?.[reducedData.asks.length - 1]?.[0],
333
+ reducedData.bids?.[0]?.[0]
334
+ ]);
335
+ const middlePrice = (0, _react.useMemo)(()=>{
282
336
  let asksFrist = 0, bidsFirst = 0;
283
337
  if (data.asks.length > 0) {
284
338
  asksFrist = reducedData.asks?.[reducedData.asks.length - 1]?.[0];
@@ -286,21 +340,39 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
286
340
  if (data.bids.length > 0) {
287
341
  bidsFirst = data.bids[0][0];
288
342
  }
289
- if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker)
290
- return 0;
291
- return [asksFrist, bidsFirst, ticker["24h_close"]].sort()[1];
292
- }, [ticker?.["24h_close"], data]);
293
- (0, react_1.useEffect)(() => {
343
+ if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;
344
+ return [
345
+ asksFrist,
346
+ bidsFirst,
347
+ ticker["24h_close"]
348
+ ].sort()[1];
349
+ }, [
350
+ ticker?.["24h_close"],
351
+ data
352
+ ]);
353
+ (0, _react.useEffect)(()=>{
294
354
  prevMiddlePrice.current = middlePrice;
295
- }, [middlePrice]);
355
+ }, [
356
+ middlePrice
357
+ ]);
296
358
  return [
297
359
  {
298
360
  asks: reducedData.asks.slice(-level),
299
361
  bids: reducedData.bids.slice(0, level),
300
362
  markPrice: markPrice,
301
- middlePrice: [prevMiddlePrice.current, middlePrice],
363
+ middlePrice: [
364
+ prevMiddlePrice.current,
365
+ middlePrice
366
+ ]
302
367
  },
303
- { onDepthChange, depth, allDepths: depths, isLoading, onItemClick },
368
+ {
369
+ onDepthChange,
370
+ depth,
371
+ allDepths: depths,
372
+ isLoading,
373
+ onItemClick
374
+ }
304
375
  ];
305
376
  };
306
- exports.useOrderbookStream = useOrderbookStream;
377
+
378
+ //# 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":["mergeOrderbook","reduceOrderbook","useOrderbookStream","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","Decimal","Math","ceil","mul","toNumber","floor","toString","indexOf","priceStr","index","decimal","slice","decimalDepth","decimalStr","min","has","item","get","itemPrice","add","set","from","values","newQuantity","newAmount","push","padding","bids","qty","shift","undefined","bidPrice","askPrice","askQty","logStr","reverse","concat","mergeItems","update","filter","findIndex","p","splice","sort","INIT_DATA","symbol","initial","options","SDKError","requestData","setRequestData","useState","setData","isLoading","setIsLoading","config","useSymbolsInfo","setDepth","prevMiddlePrice","useRef","depths","useMemo","tick","useEffect","ws","useWS","ticker","useTickerStream","eventEmitter","useEventEmitter","needRequestFullOrderbook","orderBookUpdateSub","fullOrderBookUpdateSub","subscribe","event","topic","formatter","message","onMessage","wsData","ts","prevTs","orderbooksService","updateOrderbook","getRawOrderbook","onceSubscribe","id","params","type","setFullOrderbook","resetOrderBook","markPrice","useMarkPrice","onItemClick","useCallback","emit","onDepthChange","reducedData","updateData","middlePrice","asksFrist","bidsFirst","current","allDepths"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IA6MaA,cAAc;eAAdA;;IA9FAC,eAAe;eAAfA;;IA2HAC,kBAAkB;eAAlBA;;;uBA1OmD;iCAClC;8BACH;uBACP;iCACU;gCACD;uBACP;uBACC;uBACA;yEACO;;;;;;AAS9B,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,IAAIC,cAAO,CAACC,KAAKC,IAAI,CAACN,QAAQX,QAAQkB,GAAG,CAAClB,OAAOmB,QAAQ;YACxE,OAAO;gBACHL,WAAW,IAAIC,cAAO,CAACC,KAAKI,KAAK,CAACT,QAAQX,QAAQkB,GAAG,CAAClB,OAAOmB,QAAQ;YACzE;YAEA,IAAInB,QAAQ,KAAKA,QAAQ,KAAKc,SAASO,QAAQ,GAAGC,OAAO,CAAC,SAAS,CAAC,GAAG;gBACnE,MAAMC,WAAWZ,MAAMU,QAAQ;gBAC/B,MAAMG,QAAQD,SAASD,OAAO,CAAC;gBAC/B,MAAMG,UAAUF,SAASG,KAAK,CAACF,QAAQ;gBACvC,MAAMG,eAAe3B,MAAMqB,QAAQ,GAAGK,KAAK,CAAC,GAAGrB,MAAM;gBACrD,MAAMuB,aAAaH,QAAQC,KAAK,CAAC,GAAGG,IAAAA,UAAG,EAACJ,QAAQpB,MAAM,EAAEsB;gBACxDb,WAAW,IAAIC,cAAO,CAClBQ,SAASG,KAAK,CAAC,GAAGF,SAAS,MAAMI,YACnCT,QAAQ;YACd;YAEA,+IAA+I;YAC/I,+DAA+D;YAE/D,IAAIX,OAAOsB,GAAG,CAAChB,WAAW;gBACtB,MAAMiB,OAAOvB,OAAOwB,GAAG,CAAClB;gBACxB,MAAMmB,YAAY,IAAIlB,cAAO,CAACgB,IAAI,CAAC,EAAE,EAAEG,GAAG,CAACtB,UAAUO,QAAQ;gBAE7D,kCAAkC;gBAClCX,OAAO2B,GAAG,CAACrB,UAAU;oBAACA;oBAAUmB;iBAAU;YAC9C,OAAO;gBACHzB,OAAO2B,GAAG,CAACrB,UAAU;oBAACA;oBAAUF;iBAAS;YAC7C;QACJ;QAEAN,UAAUf,MAAM6C,IAAI,CAAC5B,OAAO6B,MAAM;IACtC;IAEA,IAAK,IAAI3B,IAAI,GAAGA,IAAIJ,QAAQD,MAAM,EAAEK,IAAK;QACrC,MAAM,CAACC,OAAOC,SAAS,GAAGN,OAAO,CAACI,EAAE;QACpC,IAAIG,MAAMF,UAAUE,MAAMD,WAAW;QAErC,MAAM0B,cAAc,IAAIvB,cAAO,CAACH,UAC3BsB,GAAG,CAAC3B,OAAOF,MAAM,GAAG,IAAIE,MAAM,CAACA,OAAOF,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,GACvDc,QAAQ;QAEb,MAAMoB,YAAY,IAAIxB,cAAO,CAACH,WAAWD,OACpCuB,GAAG,CAAC3B,OAAOF,MAAM,GAAG,IAAIE,MAAM,CAACA,OAAOF,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,GACvDc,QAAQ;QAEbZ,OAAOiC,IAAI,CAAC;YAAC7B;YAAOC;YAAU0B;YAAaC;SAAU;IACrD,gDAAgD;IAChD,QAAQ;IACR,wBAAwB;IACxB,WAAW;IACX,IAAI;IACR;IAEA,OAAOhC;AACX;AAQO,MAAMpB,kBAAkB,CAC3Ba,OACAC,OACAwC,SACAvC;IAEA,IAAIC,OAAOJ,YAAYC,OAAOC,OAAOC,KAAKC,IAAI,EAAE;IAEhD,IAAIuC,OAAO3C,YAAYC,OAAOC,OAAOC,KAAKwC,IAAI;IAE9C,0CAA0C;IAC1C,IAAIvC,KAAKE,MAAM,KAAK,KAAKqC,KAAKrC,MAAM,KAAK,KAAKF,IAAI,CAAC,EAAE,CAAC,EAAE,IAAIuC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACpE,IAAIvC,KAAKE,MAAM,KAAK,GAAG;YACnB,MAAM,CAACM,OAAOgC,KAAKL,aAAaC,UAAU,GAAGpC,IAAI,CAAC,EAAE;YACpDA,KAAKyC,KAAK;YACVzC,KAAKqC,IAAI,CAAC;gBAAC7B,QAASX,CAAAA,UAAU6C,YAAY,IAAI7C,KAAI;gBAAI2C;gBAAKL;gBAAaC;aAAU;QACtF,OAAO;YACH,MAAM,CAACO,SAAS,GAAGJ,IAAI,CAAC,EAAE;YAC1B,MAAOvC,KAAKE,MAAM,GAAG,EAAG;gBACpB,MAAM,CAAC0C,UAAUC,QAAQV,aAAaC,UAAU,GAAGpC,IAAI,CAAC,EAAE;gBAG1D,IAAI4C,YAAYD,UAAU;oBACtB,8EAA8E;oBAC9E3C,KAAKyC,KAAK;oBACV,IAAIK,SAAS;oBACb,IAAK,IAAIzB,QAAQ,GAAGA,QAAQrB,KAAKE,MAAM,EAAEmB,QAAS;wBAC9C,IAAIA,UAAU,GAAG;4BACb,MAAMZ,WAAWT,IAAI,CAACqB,MAAM,CAAC,EAAE,GAAGwB;4BAClC7C,IAAI,CAACqB,MAAM,CAAC,EAAE,GAAGZ;4BACjBT,IAAI,CAACqB,MAAM,CAAC,EAAE,GAAGZ;4BACjB,+BAA+B;4BAC/B,6BAA6B;4BAC7BT,IAAI,CAACqB,MAAM,CAAC,EAAE,GAAGR,KAAKC,IAAI,CAACL,YAAYT,IAAI,CAACqB,MAAM,CAAC,EAAE;wBACzD,OAAO;4BACH,+BAA+B;4BAC/B,6BAA6B;4BAC7BrB,IAAI,CAACqB,MAAM,CAAC,EAAE,GAAGrB,IAAI,CAACqB,MAAM,CAAC,EAAE,GAAGrB,IAAI,CAACqB,MAAM,CAAC,EAAE,GAAGrB,IAAI,CAACqB,QAAQ,EAAE,CAAC,EAAE;wBACzE;wBACAyB,UAAU,CAAC,OAAO,EAAEzB,MAAM,CAAC,EAAErB,IAAI,CAACqB,MAAM,CAAC,EAAE,CAAC;oBAChD;gBACA,yDAAyD;gBAC7D,OAAO;oBACH;gBACJ;YACJ;QACJ;IACJ;IAEArB,OAAOA,KAAK+C,OAAO;IAEnB,IAAIT,SAAS;QACTtC,OACIA,KAAKE,MAAM,GAAGJ,QAAQZ,UAAUY,QAAQE,KAAKE,MAAM,EAAE8C,MAAM,CAAChD,QAAQA;QACxEuC,OACIA,KAAKrC,MAAM,GAAGJ,QAAQyC,KAAKS,MAAM,CAAC9D,UAAUY,QAAQyC,KAAKrC,MAAM,KAAKqC;IAC5E;IAEA,OAAO;QACHvC,MAAMA;QACNuC,MAAMA;IACV;AACJ;AAEA,MAAMU,aAAa,CAAClD,MAAuBmD;IACvC,kBAAkB;IAClB,IAAInD,KAAKG,MAAM,KAAK,GAAG,OAAOgD;IAE9BnD,OAAOA,KAAKoD,MAAM,CAAC,CAAC,CAAC3C,MAAM,GAAK,CAACE,MAAMF;IAEvC,MAAO0C,OAAOhD,MAAM,GAAG,EAAG;QACtB,MAAM0B,OAAOsB,OAAOT,KAAK;QACzB,EAAE;QACF,IAAIb,MAAM;YACN,MAAM,CAACpB,OAAOC,SAAS,GAAGmB;YAE1B,MAAMP,QAAQtB,KAAKqD,SAAS,CAAC,CAAC,CAACC,EAAE,EAAEhC,QAAUgC,MAAM7C;YACnD,EAAE;YACF,IAAIa,UAAU,CAAC,GAAG;gBACd,IAAIZ,aAAa,GAAG;gBACpBV,KAAKsC,IAAI,CAACT;YACd,OAAO;gBACH,IAAInB,aAAa,GAAG;oBAChBV,KAAKuD,MAAM,CAACjC,OAAO;gBACvB,OAAO;oBACHtB,IAAI,CAACsB,MAAM,GAAGO;gBAClB;YACJ;QACJ;IACJ;IAEA,OAAO7B;AACX;AAEO,MAAMhB,iBAAiB,CAACgB,MAAqBmD;IAChD,IAAIlD,OAAO;WAAID,KAAKC,IAAI;KAAC;IACzB,IAAIuC,OAAO;WAAIxC,KAAKwC,IAAI;KAAC;IAEzBvC,OAAOiD,WAAWjD,MAAMkD,OAAOlD,IAAI,EAAEuD,IAAI,CAAC/D;IAC1C+C,OAAOU,WAAWV,MAAMW,OAAOX,IAAI,EAAEgB,IAAI,CAAC5D;IAE1C,OAAO;QACHK,MAAMA;QACNuC,MAAMA;IACV;AACJ;AAYA,MAAMiB,YAAY;IAACxD,MAAM,EAAE;IAAEuC,MAAM,EAAE;AAAA;AAM9B,MAAMtD,qBAAqB,CAC9BwE,QACAC,UAAyBF,SAAS,EAClCG;IAEA,IAAI,CAACF,QAAQ;QACT,MAAM,IAAIG,eAAQ,CAAC;IACvB;IAEA,MAAM9D,QAAQ6D,SAAS7D,SAAS;IAChC,MAAMwC,UAAUqB,SAASrB,WAAW;IAEpC,MAAM,CAACuB,aAAaC,eAAe,GAAGC,IAAAA,eAAQ,EAAuB;IACrE,MAAM,CAAChE,MAAMiE,QAAQ,GAAGD,IAAAA,eAAQ,EAAgBL;IAChD,MAAM,CAACO,WAAWC,aAAa,GAAGH,IAAAA,eAAQ,EAAC;IAC3C,kEAAkE;IAElE,MAAMI,SAASC,IAAAA,8BAAc,GAAE,CAACX,OAAO;IAEvC,MAAM,CAAC5D,OAAOwE,SAAS,GAAGN,IAAAA,eAAQ;IAElC,uBAAuB;IACvB,MAAMO,kBAAkBC,IAAAA,aAAM,EAAS;IAEvC,MAAMC,SAASC,IAAAA,cAAO,EAAC;QACnB,MAAMC,OAAOP,OAAO;QAEpB,OAAO;YAACO;YAAMA,OAAO;YAAIA,OAAO;YAAKA,OAAO;SAAK;IACrD,GAAG;QAACP,OAAO;KAAc;IAEzBQ,IAAAA,gBAAS,EAAC;QACNN,SAASF,OAAO;IACpB,GAAG;QAACA,OAAO;KAAc;IAEzB,MAAMS,KAAKC,IAAAA,YAAK;IAEhB,MAAMC,SAASC,IAAAA,gCAAe,EAACtB;IAE/B,MAAMuB,eAAeC,IAAAA,gCAAe;IAEpC,2BAA2B;IAE3BN,IAAAA,gBAAS,EAAC;QACN,IAAIO,2BAA0B;QAC9BhB,aAAa;QACb,IAAIiB;QACJ,IAAIC;QACJD,qBAAqBP,GAAGS,SAAS,CAC7B;YACIC,OAAO;YACPC,OAAO,CAAC,EAAE9B,OAAO,gBAAgB,CAAC;QACtC,GACA;YACI+B,WAAW,CAACC,UAAYA;YACxBC,WAAW,CAACD;gBACR,MAAM,EAAC1F,MAAM4F,MAAM,EAAEC,EAAE,EAAC,GAAGH;gBAC3B,MAAM,EAACzF,IAAI,EAAEuC,IAAI,EAAEsD,MAAM,EAAC,GAAGF;gBAC7BG,yBAAiB,CAACC,eAAe,CAACtC,QAAQ;oBAACzD;oBAAMuC;oBAAMqD;oBAAIC;gBAAM,GAAG,IAAMX,2BAA2B;gBAGrG,MAAMnF,OAAO+F,yBAAiB,CAACE,eAAe,CAACvC;gBAC/CO,QAAQ;oBAACzB,MAAMxC,KAAKwC,IAAI;oBAAEvC,MAAMD,KAAKC,IAAI;gBAAA;YAE7C;QACJ;QAGJ,IAAKkF,0BAA0B;YAC3BhB,aAAa;YAEbkB,yBAAyBR,GAAGqB,aAAa,CACrC;gBACIX,OAAO;gBACPY,IAAI,CAAC,EAAEzC,OAAO,UAAU,CAAC;gBACzB0C,QAAQ;oBACJC,MAAM;oBACN3C,QAAQA;gBACZ;YACJ,GACA;gBACI+B,WAAW,CAACC,UAAYA;gBACxBC,WAAW,CAACD;oBACR,MAAM,EAAChC,MAAM,EAAEzD,IAAI,EAAEuC,IAAI,EAAEqD,EAAE,EAAC,GAAGH,QAAQ1F,IAAI;oBAC7C+F,yBAAiB,CAACO,gBAAgB,CAAC5C,QAAQ;wBAACzD;wBAAMuC;wBAAMqD;oBAAE;oBAC1D,MAAM7F,OAAO+F,yBAAiB,CAACE,eAAe,CAACvC;oBAC/CO,QAAQ;wBAACzB,MAAMxC,KAAKwC,IAAI;wBAAEvC,MAAMD,KAAKC,IAAI;oBAAA;oBAEzCkE,aAAa;gBACjB;YACJ;YAEJgB,2BAA0B;QAC9B;QAEA,OAAO;YACH,cAAc;YACdC;YACAC;YACAU,yBAAiB,CAACQ,cAAc,CAAC7C;YACjCO,QAAQR;QACZ;IAEJ,GAAG;QAACC;KAAO;IAEX,mDAAmD;IAEnD,MAAM,EAAC1D,MAAMwG,SAAS,EAAC,GAAGC,IAAAA,0BAAY,EAAC/C;IAGvC,MAAMgD,cAAcC,IAAAA,kBAAW,EAAC,CAAC9E;QAC7BoD,aAAa2B,IAAI,CAAC,wBAAwB/E;IAC9C,GAAG,EAAE;IAEL,MAAMgF,gBAAgBF,IAAAA,kBAAW,EAAC,CAAC7G;QAC/B,EAAE;QACFwE,SAAS,IAAMxE;IACnB,GAAG,EAAE;IAGL,MAAMgH,cAAc7H,gBAAgBa,OAAOC,OAAOwC,SAAS;QACvDtC,MAAM;eAAID,KAAKC,IAAI;SAAC;QACpBuC,MAAM;eAAIxC,KAAKwC,IAAI;SAAC;IACxB;IAEA,2BAA2B;IAC3BoC,IAAAA,gBAAS,EAAC;QACN,MAAMmC,aAAa;YACfD,YAAY7G,IAAI,EAAE,CAAC6G,YAAY7G,IAAI,CAACE,MAAM,GAAG,EAAE,EAAE,CAAC,EAAE;YACpD2G,YAAYtE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;SAC7B;QACDyC,aAAa2B,IAAI,CAAC,oBAAoBG;IAC1C,GAAG;QAACD,YAAY7G,IAAI,EAAE,CAAC6G,YAAY7G,IAAI,CAACE,MAAM,GAAG,EAAE,EAAE,CAAC,EAAE;QAAE2G,YAAYtE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;KAAC;IAErF,MAAMwE,cAActC,IAAAA,cAAO,EAAC;QACxB,IAAIuC,YAAY,GACZC,YAAY;QAEhB,IAAIlH,KAAKC,IAAI,CAACE,MAAM,GAAG,GAAG;YACtB8G,YAAYH,YAAY7G,IAAI,EAAE,CAAC6G,YAAY7G,IAAI,CAACE,MAAM,GAAG,EAAE,EAAE,CAAC,EAAE;QACpE;QAEA,IAAIH,KAAKwC,IAAI,CAACrC,MAAM,GAAG,GAAG;YACtB+G,YAAYlH,KAAKwC,IAAI,CAAC,EAAE,CAAC,EAAE;QAC/B;QAEA,IAAI7B,MAAMsG,cAActG,MAAMuG,cAAc,CAACnC,QAAQ,OAAO;QAG5D,OAAO;YAACkC;YAAWC;YAAWnC,MAAM,CAAC,YAAY;SAAC,CAACvB,IAAI,EAAE,CAAC,EAAE;IAChE,GAAG;QAACuB,QAAQ,CAAC,YAAY;QAAE/E;KAAK;IAEhC4E,IAAAA,gBAAS,EAAC;QACNL,gBAAgB4C,OAAO,GAAGH;IAC9B,GAAG;QAACA;KAAY;IAEhB,OAAO;QACH;YACI/G,MAAM6G,YAAY7G,IAAI,CAACuB,KAAK,CAAC,CAACzB;YAC9ByC,MAAMsE,YAAYtE,IAAI,CAAChB,KAAK,CAAC,GAAGzB;YAChCyG,WAAWA;YACXQ,aAAa;gBAACzC,gBAAgB4C,OAAO;gBAAEH;aAAY;QACvD;QACA;YAACH;YAAe/G;YAAOsH,WAAW3C;YAAQP;YAAWwC;QAAW;KACnE;AACL"}