@quantform/core 0.6.6 → 0.6.7

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 (336) hide show
  1. package/dist/adapter/adapter-aggregate.d.ts +2 -2
  2. package/dist/adapter/adapter-aggregate.d.ts.map +1 -1
  3. package/dist/adapter/adapter-aggregate.js +12 -11
  4. package/dist/adapter/adapter.d.ts +2 -3
  5. package/dist/adapter/adapter.d.ts.map +1 -1
  6. package/dist/adapter/backtester/backtester-adapter.d.ts +1 -5
  7. package/dist/adapter/backtester/backtester-adapter.d.ts.map +1 -1
  8. package/dist/adapter/backtester/backtester-adapter.js +2 -2
  9. package/dist/adapter/backtester/backtester-cursor.d.ts.map +1 -1
  10. package/dist/adapter/backtester/backtester-cursor.js +2 -2
  11. package/dist/adapter/backtester/backtester-cursor.spec.d.ts +2 -0
  12. package/dist/adapter/backtester/backtester-cursor.spec.d.ts.map +1 -0
  13. package/dist/adapter/backtester/backtester-cursor.spec.js +47 -0
  14. package/dist/adapter/backtester/backtester-streamer.d.ts +1 -1
  15. package/dist/adapter/backtester/backtester-streamer.d.ts.map +1 -1
  16. package/dist/adapter/backtester/backtester-streamer.js +4 -5
  17. package/dist/adapter/backtester/backtester-streamer.spec.d.ts +2 -0
  18. package/dist/adapter/backtester/backtester-streamer.spec.d.ts.map +1 -0
  19. package/dist/adapter/backtester/backtester-streamer.spec.js +45 -0
  20. package/dist/adapter/backtester/error.d.ts +6 -2
  21. package/dist/adapter/backtester/error.d.ts.map +1 -1
  22. package/dist/adapter/backtester/error.js +11 -7
  23. package/dist/adapter/backtester/index.d.ts +4 -2
  24. package/dist/adapter/backtester/index.d.ts.map +1 -1
  25. package/dist/adapter/backtester/index.js +4 -2
  26. package/dist/adapter/error.d.ts +9 -3
  27. package/dist/adapter/error.d.ts.map +1 -1
  28. package/dist/adapter/error.js +16 -10
  29. package/dist/adapter/index.d.ts +5 -4
  30. package/dist/adapter/index.d.ts.map +1 -1
  31. package/dist/adapter/index.js +5 -4
  32. package/dist/adapter/paper/engine/paper-engine.d.ts.map +1 -1
  33. package/dist/adapter/paper/engine/paper-engine.js +7 -8
  34. package/dist/adapter/paper/engine/paper-engine.spec.d.ts +2 -0
  35. package/dist/adapter/paper/engine/paper-engine.spec.d.ts.map +1 -0
  36. package/dist/adapter/paper/engine/paper-engine.spec.js +63 -0
  37. package/dist/adapter/paper/index.d.ts +2 -2
  38. package/dist/adapter/paper/index.d.ts.map +1 -1
  39. package/dist/adapter/paper/index.js +2 -2
  40. package/dist/adapter/paper/paper-adapter.d.ts +1 -3
  41. package/dist/adapter/paper/paper-adapter.d.ts.map +1 -1
  42. package/dist/adapter/paper/paper-adapter.js +8 -7
  43. package/dist/cli/build.js +1 -1
  44. package/dist/cli/dev.js +6 -6
  45. package/dist/cli/index.js +5 -5
  46. package/dist/cli/internal/workspace.js +1 -1
  47. package/dist/cli/pull.js +6 -6
  48. package/dist/cli/run.js +6 -6
  49. package/dist/cli/test.d.ts.map +1 -1
  50. package/dist/cli/test.js +9 -8
  51. package/dist/domain/asset.d.ts +5 -1
  52. package/dist/domain/asset.d.ts.map +1 -1
  53. package/dist/domain/asset.js +13 -7
  54. package/dist/domain/asset.spec.d.ts +2 -0
  55. package/dist/domain/asset.spec.d.ts.map +1 -0
  56. package/dist/domain/asset.spec.js +54 -0
  57. package/dist/domain/balance-operator.d.ts +1 -3
  58. package/dist/domain/balance-operator.d.ts.map +1 -1
  59. package/dist/domain/balance-operator.js +2 -2
  60. package/dist/domain/balance-operator.spec.d.ts +2 -0
  61. package/dist/domain/balance-operator.spec.d.ts.map +1 -0
  62. package/dist/domain/balance-operator.spec.js +21 -0
  63. package/dist/domain/balance.d.ts +14 -15
  64. package/dist/domain/balance.d.ts.map +1 -1
  65. package/dist/domain/balance.js +30 -48
  66. package/dist/domain/balance.spec.d.ts +2 -0
  67. package/dist/domain/balance.spec.d.ts.map +1 -0
  68. package/dist/domain/balance.spec.js +32 -0
  69. package/dist/domain/commission.d.ts.map +1 -1
  70. package/dist/domain/commission.spec.d.ts +2 -0
  71. package/dist/domain/commission.spec.d.ts.map +1 -0
  72. package/dist/domain/commission.spec.js +30 -0
  73. package/dist/domain/component.d.ts +2 -2
  74. package/dist/domain/component.d.ts.map +1 -1
  75. package/dist/domain/error.d.ts +15 -5
  76. package/dist/domain/error.d.ts.map +1 -1
  77. package/dist/domain/error.js +26 -16
  78. package/dist/domain/index.d.ts +21 -21
  79. package/dist/domain/index.d.ts.map +1 -1
  80. package/dist/domain/index.js +21 -21
  81. package/dist/domain/instrument-operator.d.ts +1 -2
  82. package/dist/domain/instrument-operator.d.ts.map +1 -1
  83. package/dist/domain/instrument-operator.js +3 -3
  84. package/dist/domain/instrument-operator.spec.d.ts +2 -0
  85. package/dist/domain/instrument-operator.spec.d.ts.map +1 -0
  86. package/dist/domain/instrument-operator.spec.js +21 -0
  87. package/dist/domain/instrument.d.ts +3 -3
  88. package/dist/domain/instrument.d.ts.map +1 -1
  89. package/dist/domain/instrument.js +10 -8
  90. package/dist/domain/instrument.spec.d.ts +2 -0
  91. package/dist/domain/instrument.spec.d.ts.map +1 -0
  92. package/dist/domain/instrument.spec.js +51 -0
  93. package/dist/domain/ohlc-operator.d.ts +1 -1
  94. package/dist/domain/ohlc-operator.d.ts.map +1 -1
  95. package/dist/domain/ohlc-operator.js +4 -5
  96. package/dist/domain/ohlc-operator.spec.d.ts +2 -0
  97. package/dist/domain/ohlc-operator.spec.d.ts.map +1 -0
  98. package/dist/domain/ohlc-operator.spec.js +110 -0
  99. package/dist/domain/ohlc.d.ts.map +1 -1
  100. package/dist/domain/ohlc.spec.d.ts +2 -0
  101. package/dist/domain/ohlc.spec.d.ts.map +1 -0
  102. package/dist/domain/ohlc.spec.js +25 -0
  103. package/dist/domain/order-operator.d.ts +1 -3
  104. package/dist/domain/order-operator.d.ts.map +1 -1
  105. package/dist/domain/order-operator.js +3 -3
  106. package/dist/domain/order-operator.spec.d.ts +2 -0
  107. package/dist/domain/order-operator.spec.d.ts.map +1 -0
  108. package/dist/domain/order-operator.spec.js +61 -0
  109. package/dist/domain/order.d.ts +5 -8
  110. package/dist/domain/order.d.ts.map +1 -1
  111. package/dist/domain/order.js +14 -22
  112. package/dist/domain/order.spec.d.ts +2 -0
  113. package/dist/domain/order.spec.d.ts.map +1 -0
  114. package/dist/domain/order.spec.js +27 -0
  115. package/dist/domain/orderbook-operator.d.ts +1 -3
  116. package/dist/domain/orderbook-operator.d.ts.map +1 -1
  117. package/dist/domain/orderbook-operator.js +2 -2
  118. package/dist/domain/orderbook-operator.spec.d.ts +2 -0
  119. package/dist/domain/orderbook-operator.spec.d.ts.map +1 -0
  120. package/dist/domain/orderbook-operator.spec.js +19 -0
  121. package/dist/domain/orderbook.d.ts +3 -2
  122. package/dist/domain/orderbook.d.ts.map +1 -1
  123. package/dist/domain/orderbook.js +3 -0
  124. package/dist/domain/orderbook.spec.d.ts +2 -0
  125. package/dist/domain/orderbook.spec.d.ts.map +1 -0
  126. package/dist/domain/orderbook.spec.js +11 -0
  127. package/dist/domain/position-operator.d.ts +1 -3
  128. package/dist/domain/position-operator.d.ts.map +1 -1
  129. package/dist/domain/position-operator.js +3 -4
  130. package/dist/domain/position-operator.spec.d.ts +2 -0
  131. package/dist/domain/position-operator.spec.d.ts.map +1 -0
  132. package/dist/domain/position-operator.spec.js +44 -0
  133. package/dist/domain/position.d.ts +3 -2
  134. package/dist/domain/position.d.ts.map +1 -1
  135. package/dist/domain/position.js +2 -0
  136. package/dist/domain/position.spec.d.ts +2 -0
  137. package/dist/domain/position.spec.d.ts.map +1 -0
  138. package/dist/domain/position.spec.js +28 -0
  139. package/dist/domain/session-builder.d.ts +8 -4
  140. package/dist/domain/session-builder.d.ts.map +1 -1
  141. package/dist/domain/session-builder.js +10 -15
  142. package/dist/domain/session.d.ts +1 -1
  143. package/dist/domain/session.d.ts.map +1 -1
  144. package/dist/domain/session.js +11 -17
  145. package/dist/domain/session.spec.d.ts +2 -0
  146. package/dist/domain/session.spec.d.ts.map +1 -0
  147. package/dist/domain/session.spec.js +17 -0
  148. package/dist/domain/trade-operator.d.ts +1 -3
  149. package/dist/domain/trade-operator.d.ts.map +1 -1
  150. package/dist/domain/trade-operator.js +2 -2
  151. package/dist/domain/trade-operator.spec.d.ts +2 -0
  152. package/dist/domain/trade-operator.spec.d.ts.map +1 -0
  153. package/dist/domain/trade-operator.spec.js +21 -0
  154. package/dist/domain/trade.d.ts +3 -2
  155. package/dist/domain/trade.d.ts.map +1 -1
  156. package/dist/domain/trade.js +3 -0
  157. package/dist/domain/trade.spec.d.ts +2 -0
  158. package/dist/domain/trade.spec.d.ts.map +1 -0
  159. package/dist/domain/trade.spec.js +11 -0
  160. package/dist/index.d.ts +2 -2
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +9 -8
  163. package/dist/shared/collections.spec.d.ts +2 -0
  164. package/dist/shared/collections.spec.d.ts.map +1 -0
  165. package/dist/shared/collections.spec.js +29 -0
  166. package/dist/shared/decimals.spec.d.ts +2 -0
  167. package/dist/shared/decimals.spec.d.ts.map +1 -0
  168. package/dist/shared/decimals.spec.js +28 -0
  169. package/dist/shared/hash.d.ts +2 -0
  170. package/dist/shared/hash.d.ts.map +1 -0
  171. package/dist/shared/hash.js +12 -0
  172. package/dist/shared/index.d.ts +7 -7
  173. package/dist/shared/index.d.ts.map +1 -1
  174. package/dist/shared/index.js +7 -7
  175. package/dist/shared/logger.d.ts +8 -5
  176. package/dist/shared/logger.d.ts.map +1 -1
  177. package/dist/shared/logger.js +23 -16
  178. package/dist/storage/cache.d.ts +1 -1
  179. package/dist/storage/cache.d.ts.map +1 -1
  180. package/dist/storage/cache.spec.d.ts +2 -0
  181. package/dist/storage/cache.spec.d.ts.map +1 -0
  182. package/dist/storage/cache.spec.js +25 -0
  183. package/dist/storage/feed.d.ts +1 -1
  184. package/dist/storage/feed.d.ts.map +1 -1
  185. package/dist/storage/index.d.ts +4 -4
  186. package/dist/storage/index.d.ts.map +1 -1
  187. package/dist/storage/index.js +4 -4
  188. package/dist/storage/measurement.d.ts +1 -1
  189. package/dist/storage/measurement.d.ts.map +1 -1
  190. package/dist/store/error.d.ts +21 -7
  191. package/dist/store/error.d.ts.map +1 -1
  192. package/dist/store/error.js +36 -22
  193. package/dist/store/index.d.ts +10 -9
  194. package/dist/store/index.d.ts.map +1 -1
  195. package/dist/store/index.js +10 -9
  196. package/dist/store/store-balance-event.d.ts +10 -30
  197. package/dist/store/store-balance-event.d.ts.map +1 -1
  198. package/dist/store/store-balance-event.js +19 -94
  199. package/dist/store/store-balance-event.spec.d.ts +2 -0
  200. package/dist/store/store-balance-event.spec.d.ts.map +1 -0
  201. package/dist/store/store-balance-event.spec.js +24 -0
  202. package/dist/store/store-event.d.ts +1 -1
  203. package/dist/store/store-event.d.ts.map +1 -1
  204. package/dist/store/store-instrument-event.d.ts +1 -2
  205. package/dist/store/store-instrument-event.d.ts.map +1 -1
  206. package/dist/store/store-instrument-event.js +5 -6
  207. package/dist/store/store-instrument-event.spec.d.ts +2 -0
  208. package/dist/store/store-instrument-event.spec.d.ts.map +1 -0
  209. package/dist/store/store-instrument-event.spec.js +22 -0
  210. package/dist/store/store-order-event.d.ts +1 -2
  211. package/dist/store/store-order-event.d.ts.map +1 -1
  212. package/dist/store/store-order-event.js +60 -22
  213. package/dist/store/store-order-event.spec.d.ts +2 -0
  214. package/dist/store/store-order-event.spec.d.ts.map +1 -0
  215. package/dist/store/store-order-event.spec.js +23 -0
  216. package/dist/store/store-orderbook-event.d.ts +1 -2
  217. package/dist/store/store-orderbook-event.d.ts.map +1 -1
  218. package/dist/store/store-orderbook-event.js +3 -3
  219. package/dist/store/store-orderbook-event.spec.d.ts +2 -0
  220. package/dist/store/store-orderbook-event.spec.d.ts.map +1 -0
  221. package/dist/store/store-orderbook-event.spec.js +27 -0
  222. package/dist/store/store-position-event.d.ts +1 -2
  223. package/dist/store/store-position-event.d.ts.map +1 -1
  224. package/dist/store/store-position-event.js +5 -5
  225. package/dist/store/store-state.d.ts.map +1 -1
  226. package/dist/store/store-trade-event.d.ts +1 -2
  227. package/dist/store/store-trade-event.d.ts.map +1 -1
  228. package/dist/store/store-trade-event.js +3 -3
  229. package/dist/store/store-trade-event.spec.d.ts +2 -0
  230. package/dist/store/store-trade-event.spec.d.ts.map +1 -0
  231. package/dist/store/store-trade-event.spec.js +44 -0
  232. package/dist/store/store.d.ts +1 -2
  233. package/dist/store/store.d.ts.map +1 -1
  234. package/dist/store/store.js +5 -2
  235. package/dist/store/store.spec.d.ts +2 -0
  236. package/dist/store/store.spec.d.ts.map +1 -0
  237. package/dist/store/store.spec.js +122 -0
  238. package/jest.config.ts +23 -2
  239. package/package.json +2 -2
  240. package/src/adapter/adapter-aggregate.ts +35 -21
  241. package/src/adapter/adapter.ts +6 -7
  242. package/src/adapter/backtester/backtester-adapter.ts +12 -8
  243. package/src/adapter/backtester/backtester-cursor.spec.ts +6 -6
  244. package/src/adapter/backtester/backtester-cursor.ts +5 -5
  245. package/src/adapter/backtester/backtester-streamer.spec.ts +6 -6
  246. package/src/adapter/backtester/backtester-streamer.ts +12 -9
  247. package/src/adapter/backtester/error.ts +8 -4
  248. package/src/adapter/backtester/index.ts +4 -2
  249. package/src/adapter/error.ts +14 -8
  250. package/src/adapter/index.ts +5 -4
  251. package/src/adapter/paper/engine/paper-engine.spec.ts +6 -12
  252. package/src/adapter/paper/engine/paper-engine.ts +13 -28
  253. package/src/adapter/paper/index.ts +2 -2
  254. package/src/adapter/paper/paper-adapter.ts +18 -11
  255. package/src/cli/build.ts +1 -1
  256. package/src/cli/dev.ts +5 -5
  257. package/src/cli/index.ts +5 -5
  258. package/src/cli/internal/workspace.ts +1 -1
  259. package/src/cli/pull.ts +7 -7
  260. package/src/cli/run.ts +5 -5
  261. package/src/cli/test.ts +8 -7
  262. package/src/domain/asset.spec.ts +4 -4
  263. package/src/domain/asset.ts +13 -6
  264. package/src/domain/balance-operator.spec.ts +3 -6
  265. package/src/domain/balance-operator.ts +5 -6
  266. package/src/domain/balance.spec.ts +7 -77
  267. package/src/domain/balance.ts +51 -64
  268. package/src/domain/commission.spec.ts +3 -3
  269. package/src/domain/commission.ts +1 -1
  270. package/src/domain/component.ts +3 -3
  271. package/src/domain/error.ts +23 -18
  272. package/src/domain/index.ts +21 -21
  273. package/src/domain/instrument-operator.spec.ts +10 -7
  274. package/src/domain/instrument-operator.ts +6 -6
  275. package/src/domain/instrument.spec.ts +11 -6
  276. package/src/domain/instrument.ts +16 -7
  277. package/src/domain/ohlc-operator.spec.ts +5 -6
  278. package/src/domain/ohlc-operator.ts +2 -3
  279. package/src/domain/ohlc.spec.ts +2 -2
  280. package/src/domain/ohlc.ts +2 -2
  281. package/src/domain/order-operator.spec.ts +14 -10
  282. package/src/domain/order-operator.ts +8 -7
  283. package/src/domain/order.spec.ts +3 -6
  284. package/src/domain/order.ts +26 -29
  285. package/src/domain/orderbook-operator.spec.ts +11 -9
  286. package/src/domain/orderbook-operator.ts +5 -6
  287. package/src/domain/orderbook.spec.ts +3 -6
  288. package/src/domain/orderbook.ts +5 -3
  289. package/src/domain/position-operator.spec.ts +14 -11
  290. package/src/domain/position-operator.ts +12 -9
  291. package/src/domain/position.spec.ts +3 -6
  292. package/src/domain/position.ts +5 -3
  293. package/src/domain/session-builder.ts +14 -14
  294. package/src/domain/session.spec.ts +4 -4
  295. package/src/domain/session.ts +20 -15
  296. package/src/domain/trade-operator.spec.ts +4 -9
  297. package/src/domain/trade-operator.ts +5 -6
  298. package/src/domain/trade.spec.ts +3 -6
  299. package/src/domain/trade.ts +5 -3
  300. package/src/index.ts +15 -14
  301. package/src/shared/collections.spec.ts +2 -2
  302. package/src/shared/decimals.spec.ts +1 -1
  303. package/src/shared/hash.ts +10 -0
  304. package/src/shared/index.ts +7 -7
  305. package/src/shared/logger.ts +22 -15
  306. package/src/storage/cache.spec.ts +2 -3
  307. package/src/storage/cache.ts +2 -2
  308. package/src/storage/feed.ts +4 -4
  309. package/src/storage/index.ts +4 -4
  310. package/src/storage/measurement.ts +2 -2
  311. package/src/store/error.ts +33 -22
  312. package/src/store/index.ts +10 -9
  313. package/src/store/store-balance-event.spec.ts +5 -7
  314. package/src/store/store-balance-event.ts +20 -115
  315. package/src/store/store-event.ts +2 -2
  316. package/src/store/store-instrument-event.spec.ts +4 -5
  317. package/src/store/store-instrument-event.ts +13 -9
  318. package/src/store/store-order-event.spec.ts +6 -5
  319. package/src/store/store-order-event.ts +92 -23
  320. package/src/store/store-orderbook-event.spec.ts +4 -5
  321. package/src/store/store-orderbook-event.ts +11 -7
  322. package/src/store/store-position-event.ts +13 -9
  323. package/src/store/store-state.ts +2 -2
  324. package/src/store/store-trade-event.spec.ts +4 -5
  325. package/src/store/store-trade-event.ts +11 -7
  326. package/src/store/store.spec.ts +45 -31
  327. package/src/store/store.ts +6 -3
  328. package/tsconfig.json +7 -4
  329. package/dist/cli/error.d.ts +0 -2
  330. package/dist/cli/error.d.ts.map +0 -1
  331. package/dist/cli/error.js +0 -7
  332. package/dist/shared/pipe.d.ts +0 -5
  333. package/dist/shared/pipe.d.ts.map +0 -1
  334. package/dist/shared/pipe.js +0 -8
  335. package/src/cli/error.ts +0 -5
  336. package/src/shared/pipe.ts +0 -12
@@ -1,22 +1,26 @@
1
- import { Instrument, Position, PositionMode } from '../domain';
2
- import { decimal, timestamp } from '../shared';
3
- import { balanceNotFoundError, instrumentNotSubscribedError } from './error';
4
- import { StoreEvent } from './store-event';
5
- import { State, StateChangeTracker } from './store-state';
1
+ import { Instrument, Position, PositionMode } from '@lib/domain';
2
+ import { decimal, timestamp } from '@lib/shared';
3
+ import {
4
+ BalanceNotFoundError,
5
+ InstrumentNotSubscribedError,
6
+ State,
7
+ StateChangeTracker,
8
+ StoreEvent
9
+ } from '@lib/store';
6
10
 
7
11
  export class PositionLoadEvent implements StoreEvent {
8
12
  constructor(readonly position: Position, readonly timestamp: timestamp) {}
9
13
 
10
14
  handle(state: State): void {
11
15
  if (!state.subscription.instrument.get(this.position.instrument.id)) {
12
- throw instrumentNotSubscribedError(this.position.instrument);
16
+ throw new InstrumentNotSubscribedError(this.position.instrument);
13
17
  }
14
18
 
15
19
  this.position.timestamp = this.timestamp;
16
20
 
17
21
  const balance = state.balance.get(this.position.instrument.quote.id);
18
22
  if (!balance) {
19
- throw balanceNotFoundError(this.position.instrument.quote);
23
+ throw new BalanceNotFoundError(this.position.instrument.quote);
20
24
  }
21
25
 
22
26
  balance.position[this.position.id] = this.position;
@@ -48,12 +52,12 @@ export class PositionPatchEvent implements StoreEvent {
48
52
  // eslint-disable-next-line complexity
49
53
  handle(state: State, changes: StateChangeTracker): void {
50
54
  if (!state.subscription.instrument.get(this.instrument.id)) {
51
- throw instrumentNotSubscribedError(this.instrument);
55
+ throw new InstrumentNotSubscribedError(this.instrument);
52
56
  }
53
57
 
54
58
  const balance = state.balance.get(this.instrument.quote.id);
55
59
  if (!balance) {
56
- throw balanceNotFoundError(this.instrument.quote);
60
+ throw new BalanceNotFoundError(this.instrument.quote);
57
61
  }
58
62
 
59
63
  const orderbook = state.orderbook.get(this.instrument.id);
@@ -8,8 +8,8 @@ import {
8
8
  Order,
9
9
  Orderbook,
10
10
  Trade
11
- } from '../domain';
12
- import { Set, timestamp } from '../shared';
11
+ } from '@lib/domain';
12
+ import { Set, timestamp } from '@lib/shared';
13
13
 
14
14
  export interface StateChangeTracker {
15
15
  commit(component: Component): void;
@@ -1,7 +1,6 @@
1
- import { Asset, Commission, Instrument } from '../domain';
2
- import { d, now } from '../shared';
3
- import { TradePatchEvent } from '.';
4
- import { Store } from './store';
1
+ import { Asset, Commission, Instrument } from '@lib/domain';
2
+ import { d, now } from '@lib/shared';
3
+ import { Store, TradePatchEvent } from '@lib/store';
5
4
 
6
5
  const instrument = new Instrument(
7
6
  0,
@@ -11,7 +10,7 @@ const instrument = new Instrument(
11
10
  Commission.Zero
12
11
  );
13
12
 
14
- describe('TradePatchEvent', () => {
13
+ describe(TradePatchEvent.name, () => {
15
14
  test('should create a new trade object and patch a store', () => {
16
15
  const timestamp = now();
17
16
  const store = new Store();
@@ -1,8 +1,12 @@
1
- import { InstrumentSelector, Trade } from '../domain';
2
- import { d, decimal, timestamp } from '../shared';
3
- import { instrumentNotSubscribedError, instrumentNotSupportedError } from './error';
4
- import { StoreEvent } from './store-event';
5
- import { State, StateChangeTracker } from './store-state';
1
+ import { InstrumentSelector, Trade } from '@lib/domain';
2
+ import { d, decimal, timestamp } from '@lib/shared';
3
+ import {
4
+ InstrumentNotSubscribedError,
5
+ InstrumentNotSupportedError,
6
+ State,
7
+ StateChangeTracker,
8
+ StoreEvent
9
+ } from '@lib/store';
6
10
 
7
11
  /**
8
12
  * Patches a store with specific event @see TradePatchEvent
@@ -18,12 +22,12 @@ export class TradePatchEvent implements StoreEvent {
18
22
 
19
23
  handle(state: State, changes: StateChangeTracker): void {
20
24
  if (!state.subscription.instrument.get(this.instrument.id)) {
21
- throw instrumentNotSubscribedError(this.instrument);
25
+ throw new InstrumentNotSubscribedError(this.instrument);
22
26
  }
23
27
 
24
28
  const instrument = state.universe.instrument.get(this.instrument.id);
25
29
  if (!instrument) {
26
- throw instrumentNotSupportedError(this.instrument);
30
+ throw new InstrumentNotSupportedError(this.instrument);
27
31
  }
28
32
 
29
33
  const trade = state.trade.tryGetOrSet(
@@ -1,17 +1,18 @@
1
- import { withLatestFrom } from 'rxjs';
1
+ import { combineLatest } from 'rxjs';
2
2
 
3
- import { Asset, balance, Commission, Instrument, Order, order } from '../domain';
4
- import { d, now } from '../shared';
5
- import { Store } from './store';
6
- import { BalanceTransactEvent } from './store-balance-event';
3
+ import { Asset, balance, Commission, Instrument, Order, order } from '@lib/domain';
4
+ import { d, now } from '@lib/shared';
7
5
  import {
6
+ BalanceLoadEvent,
7
+ BalancePatchEvent,
8
8
  OrderCanceledEvent,
9
9
  OrderCancelingEvent,
10
10
  OrderFilledEvent,
11
11
  OrderLoadEvent,
12
12
  OrderNewEvent,
13
- OrderPendingEvent
14
- } from './store-order-event';
13
+ OrderPendingEvent,
14
+ Store
15
+ } from '@lib/store';
15
16
 
16
17
  const instrument = new Instrument(
17
18
  0,
@@ -21,11 +22,15 @@ const instrument = new Instrument(
21
22
  Commission.Zero
22
23
  );
23
24
 
24
- describe('Store', () => {
25
+ describe(Store.name, () => {
25
26
  let store: Store;
26
27
 
27
28
  beforeEach(() => {
28
29
  store = new Store();
30
+
31
+ store.snapshot.universe.asset.upsert(instrument.base);
32
+ store.snapshot.universe.asset.upsert(instrument.quote);
33
+ store.snapshot.universe.instrument.upsert(instrument);
29
34
  });
30
35
 
31
36
  test('should load an existing order and not pipe a changes', () => {
@@ -37,7 +42,10 @@ describe('Store', () => {
37
42
  }
38
43
  });
39
44
 
40
- store.dispatch(new OrderLoadEvent(new Order(0, '1', instrument, d(10), 0), now()));
45
+ store.dispatch(
46
+ new BalanceLoadEvent(instrument.quote, d(100), d.Zero, now()),
47
+ new OrderLoadEvent(new Order(0, '1', instrument, d(10), 0), now())
48
+ );
41
49
 
42
50
  expect(hasUpdatedOrder).toBe(false);
43
51
  });
@@ -51,7 +59,11 @@ describe('Store', () => {
51
59
  }
52
60
  });
53
61
 
54
- store.dispatch(new OrderNewEvent(new Order(0, '1', instrument, d(10), 0), now()));
62
+ store.dispatch(
63
+ new BalanceLoadEvent(instrument.base, d(100), d.Zero, now()),
64
+ new BalanceLoadEvent(instrument.quote, d(100), d.Zero, now()),
65
+ new OrderNewEvent(new Order(0, '1', instrument, d(10), 0), now())
66
+ );
55
67
 
56
68
  expect(hasUpdatedOrder).toBe(true);
57
69
  });
@@ -67,6 +79,8 @@ describe('Store', () => {
67
79
 
68
80
  const buyOrder = new Order(0, '1', instrument, d(10), 0);
69
81
 
82
+ store.dispatch(new BalanceLoadEvent(instrument.base, d(100), d.Zero, now()));
83
+ store.dispatch(new BalanceLoadEvent(instrument.quote, d(100), d.Zero, now()));
70
84
  store.dispatch(new OrderNewEvent(buyOrder, now()));
71
85
  store.dispatch(new OrderPendingEvent(buyOrder.id, instrument, now()));
72
86
 
@@ -85,6 +99,8 @@ describe('Store', () => {
85
99
 
86
100
  const buyOrder = new Order(0, '1', instrument, d(10), 0);
87
101
 
102
+ store.dispatch(new BalanceLoadEvent(instrument.base, d(100), d.Zero, now()));
103
+ store.dispatch(new BalanceLoadEvent(instrument.quote, d(100), d.Zero, now()));
88
104
  store.dispatch(new OrderNewEvent(buyOrder, now()));
89
105
  store.dispatch(new OrderPendingEvent(buyOrder.id, instrument, now()));
90
106
  store.dispatch(new OrderFilledEvent(buyOrder.id, instrument, d(44), now()));
@@ -105,6 +121,8 @@ describe('Store', () => {
105
121
 
106
122
  const buyOrder = new Order(0, '1', instrument, d(10), 0);
107
123
 
124
+ store.dispatch(new BalanceLoadEvent(instrument.base, d(100), d.Zero, now()));
125
+ store.dispatch(new BalanceLoadEvent(instrument.quote, d(100), d.Zero, now()));
108
126
  store.dispatch(new OrderNewEvent(buyOrder, now()));
109
127
  store.dispatch(new OrderPendingEvent(buyOrder.id, instrument, now()));
110
128
  store.dispatch(new OrderCancelingEvent(buyOrder.id, instrument, now()));
@@ -115,36 +133,30 @@ describe('Store', () => {
115
133
  });
116
134
 
117
135
  test('should patch balance with order and pipe changes once', done => {
118
- store.snapshot.universe.instrument.upsert(instrument);
119
- store.snapshot.universe.asset.upsert(instrument.quote);
120
-
121
- store.changes$
122
- .pipe(
123
- balance(instrument.quote, store.snapshot),
124
- withLatestFrom(store.changes$.pipe(order(instrument)))
125
- )
126
- .subscribe({
127
- next: ([balance, order]) => {
128
- expect(balance.free).toEqual(d(10));
129
- expect(order.state).toEqual('PENDING');
130
-
131
- done();
132
- }
133
- });
136
+ combineLatest([
137
+ store.changes$.pipe(balance(instrument.quote, store.snapshot)),
138
+ store.changes$.pipe(order(instrument))
139
+ ]).subscribe({
140
+ next: ([balance, order]) => {
141
+ expect(balance.free).toEqual(d(10));
142
+ expect(order.state).toEqual('PENDING');
143
+
144
+ done();
145
+ }
146
+ });
134
147
 
135
148
  const buyOrder = new Order(0, '1', instrument, d(10), 0);
136
149
 
137
150
  store.dispatch(
151
+ new BalanceLoadEvent(instrument.base, d(10), d.Zero, now()),
152
+ new BalanceLoadEvent(instrument.quote, d(10), d.Zero, now()),
138
153
  new OrderNewEvent(buyOrder, now()),
139
154
  new OrderPendingEvent(buyOrder.id, instrument, now()),
140
- new BalanceTransactEvent(instrument.quote, d(10), now())
155
+ new BalancePatchEvent(instrument.quote, d(10), d.Zero, now())
141
156
  );
142
157
  });
143
158
 
144
159
  test('should pipe balance and order changes', done => {
145
- store.snapshot.universe.instrument.upsert(instrument);
146
- store.snapshot.universe.asset.upsert(instrument.quote);
147
-
148
160
  let counter = 2;
149
161
 
150
162
  store.changes$.pipe(balance(instrument.quote, store.snapshot)).subscribe({
@@ -174,9 +186,11 @@ describe('Store', () => {
174
186
  const buyOrder = new Order(0, '1', instrument, d(10), 0);
175
187
 
176
188
  store.dispatch(
189
+ new BalanceLoadEvent(instrument.base, d(10), d.Zero, now()),
190
+ new BalanceLoadEvent(instrument.quote, d(10), d.Zero, now()),
177
191
  new OrderNewEvent(buyOrder, now()),
178
192
  new OrderPendingEvent(buyOrder.id, instrument, now()),
179
- new BalanceTransactEvent(instrument.quote, d(10), now())
193
+ new BalancePatchEvent(instrument.quote, d(10), d.Zero, now())
180
194
  );
181
195
  });
182
196
  });
@@ -1,8 +1,7 @@
1
1
  import { Observable, Subject } from 'rxjs';
2
2
 
3
- import { Component } from '../domain';
4
- import { StoreEvent } from './store-event';
5
- import { State, StateChangeTracker } from './store-state';
3
+ import { Component } from '@lib/domain';
4
+ import { State, StateChangeTracker, StoreEvent } from '@lib/store';
6
5
 
7
6
  export class Store implements StateChangeTracker {
8
7
  private readonly pendingChanges = new Array<Component>();
@@ -23,6 +22,10 @@ export class Store implements StateChangeTracker {
23
22
  }
24
23
 
25
24
  commit(component: Component) {
25
+ if (this.pendingChanges.some(it => it === component)) {
26
+ return;
27
+ }
28
+
26
29
  this.pendingChanges.push(component);
27
30
  }
28
31
 
package/tsconfig.json CHANGED
@@ -1,15 +1,18 @@
1
1
  {
2
2
  "extends": "../../tsconfig.lib.json",
3
3
  "compilerOptions": {
4
- "outDir": "dist"
4
+ "rootDir": "src",
5
+ "baseUrl": ".",
6
+ "outDir": "dist",
7
+ "paths": {
8
+ "@lib/*": ["src/*"]
9
+ }
5
10
  },
6
11
  "include": [
7
12
  "src/**/*",
8
13
  ],
9
14
  "exclude": [
10
15
  "jest.config.js",
11
- "**/*.spec.ts",
12
- "**/*.test.ts",
13
- "lib/**/*"
16
+ "dist/**/*"
14
17
  ]
15
18
  }
@@ -1,2 +0,0 @@
1
- export declare function missingDescriptorParameterError(parameterName: string): Error;
2
- //# sourceMappingURL=error.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/cli/error.ts"],"names":[],"mappings":"AAAA,wBAAgB,+BAA+B,CAAC,aAAa,EAAE,MAAM,SAIpE"}
package/dist/cli/error.js DELETED
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.missingDescriptorParameterError = void 0;
4
- function missingDescriptorParameterError(parameterName) {
5
- return new Error(`please set a "${parameterName}" date in session descriptor or provide the date as parameter.`);
6
- }
7
- exports.missingDescriptorParameterError = missingDescriptorParameterError;
@@ -1,5 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- declare type Constructor<T> = new (...args: any[]) => T;
3
- export declare function ofType<T extends K, K>(type: Constructor<T>): (input: Observable<K>) => Observable<T>;
4
- export {};
5
- //# sourceMappingURL=pipe.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../../src/shared/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,UAAU,EAAE,MAAM,MAAM,CAAC;AAG/C,aAAK,WAAW,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEhD,wBAAgB,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,WAC1C,WAAW,CAAC,CAAC,mBAK7B"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ofType = void 0;
4
- const rxjs_1 = require("rxjs");
5
- function ofType(type) {
6
- return (input) => input.pipe((0, rxjs_1.filter)(it => it instanceof type), (0, rxjs_1.map)(it => it));
7
- }
8
- exports.ofType = ofType;
package/src/cli/error.ts DELETED
@@ -1,5 +0,0 @@
1
- export function missingDescriptorParameterError(parameterName: string) {
2
- return new Error(
3
- `please set a "${parameterName}" date in session descriptor or provide the date as parameter.`
4
- );
5
- }
@@ -1,12 +0,0 @@
1
- import { filter, map, Observable } from 'rxjs';
2
-
3
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
- type Constructor<T> = new (...args: any[]) => T;
5
-
6
- export function ofType<T extends K, K>(type: Constructor<T>) {
7
- return (input: Observable<K>) =>
8
- input.pipe(
9
- filter(it => it instanceof type),
10
- map(it => it as T)
11
- );
12
- }