@quantform/core 0.3.254 → 0.3.255

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 (50) hide show
  1. package/dist/adapter/backtester/backtester-cursor.spec.js.map +1 -1
  2. package/dist/adapter/backtester/backtester-streamer.spec.js.map +1 -1
  3. package/dist/store/event/store-balance.event.d.ts +5 -6
  4. package/dist/store/event/store-balance.event.js +8 -8
  5. package/dist/store/event/store-balance.event.js.map +1 -1
  6. package/dist/store/event/store-candle.event.d.ts +2 -1
  7. package/dist/store/event/store-candle.event.js +25 -19
  8. package/dist/store/event/store-candle.event.js.map +1 -1
  9. package/dist/store/event/store-candle.event.spec.js +7 -8
  10. package/dist/store/event/store-candle.event.spec.js.map +1 -1
  11. package/dist/store/event/store-instrument.event.d.ts +6 -6
  12. package/dist/store/event/store-instrument.event.js +7 -7
  13. package/dist/store/event/store-instrument.event.js.map +1 -1
  14. package/dist/store/event/store-order.event.d.ts +9 -9
  15. package/dist/store/event/store-order.event.js +16 -16
  16. package/dist/store/event/store-order.event.js.map +1 -1
  17. package/dist/store/event/store-order.event.spec.js +7 -7
  18. package/dist/store/event/store-order.event.spec.js.map +1 -1
  19. package/dist/store/event/store-orderbook.event.d.ts +2 -3
  20. package/dist/store/event/store-orderbook.event.js +2 -2
  21. package/dist/store/event/store-orderbook.event.js.map +1 -1
  22. package/dist/store/event/store-position.event.d.ts +3 -3
  23. package/dist/store/event/store-position.event.js +6 -5
  24. package/dist/store/event/store-position.event.js.map +1 -1
  25. package/dist/store/event/store-trade.event.d.ts +2 -3
  26. package/dist/store/event/store-trade.event.js +2 -2
  27. package/dist/store/event/store-trade.event.js.map +1 -1
  28. package/dist/store/event/store-trade.event.spec.js +16 -17
  29. package/dist/store/event/store-trade.event.spec.js.map +1 -1
  30. package/dist/store/store.d.ts +23 -20
  31. package/dist/store/store.js +29 -28
  32. package/dist/store/store.js.map +1 -1
  33. package/dist/store/store.state.d.ts +5 -1
  34. package/dist/store/store.state.js.map +1 -1
  35. package/dist/tsconfig.tsbuildinfo +1 -1
  36. package/package.json +1 -1
  37. package/src/adapter/backtester/backtester-cursor.spec.ts +2 -2
  38. package/src/adapter/backtester/backtester-streamer.spec.ts +0 -1
  39. package/src/store/event/store-balance.event.ts +25 -9
  40. package/src/store/event/store-candle.event.spec.ts +8 -10
  41. package/src/store/event/store-candle.event.ts +44 -30
  42. package/src/store/event/store-instrument.event.ts +12 -7
  43. package/src/store/event/store-order.event.spec.ts +8 -8
  44. package/src/store/event/store-order.event.ts +46 -17
  45. package/src/store/event/store-orderbook.event.ts +7 -3
  46. package/src/store/event/store-position.event.ts +15 -7
  47. package/src/store/event/store-trade.event.spec.ts +18 -20
  48. package/src/store/event/store-trade.event.ts +7 -3
  49. package/src/store/store.state.ts +8 -2
  50. package/src/store/store.ts +33 -31
@@ -1,21 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const __1 = require("../");
4
3
  const shared_1 = require("../../shared");
5
4
  const domain_1 = require("../../domain");
6
5
  const store_order_event_1 = require("./store-order.event");
6
+ const store_1 = require("../store");
7
7
  const instrument = new domain_1.Instrument(new domain_1.Asset('btc', 'binance', 8), new domain_1.Asset('usdt', 'binance', 2), 'binance:btc-usdt');
8
8
  describe('order load event tests', () => {
9
9
  test('should load order to store', () => {
10
10
  const timestamp = (0, shared_1.now)();
11
- const state = new __1.State();
11
+ const store = new store_1.Store();
12
12
  const order = domain_1.Order.buyMarket(instrument, 1.0);
13
13
  order.state = 'PENDING';
14
- state.universe.instrument[instrument.toString()] = instrument;
15
- state.subscription.instrument[instrument.toString()] = instrument;
16
- (0, store_order_event_1.OrderLoadEventHandler)(new store_order_event_1.OrderLoadEvent(order, timestamp), state);
17
- expect(Object.keys(state.order.pending).length).toEqual(1);
18
- expect(state.order.pending[order.id]).toEqual(order);
14
+ store.snapshot.universe.instrument[instrument.toString()] = instrument;
15
+ store.snapshot.subscription.instrument[instrument.toString()] = instrument;
16
+ store.dispatch(new store_order_event_1.OrderLoadEvent(order, timestamp));
17
+ expect(Object.keys(store.snapshot.order.pending).length).toEqual(1);
18
+ expect(store.snapshot.order.pending[order.id]).toEqual(order);
19
19
  });
20
20
  });
21
21
  //# sourceMappingURL=store-order.event.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store-order.event.spec.js","sourceRoot":"","sources":["../../../src/store/event/store-order.event.spec.ts"],"names":[],"mappings":";;AAAA,2BAA4B;AAC5B,yCAAmC;AACnC,yCAAwD;AACxD,2DAA4E;AAE5E,MAAM,UAAU,GAAG,IAAI,mBAAU,CAC/B,IAAI,cAAK,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,EAC9B,IAAI,cAAK,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,EAC/B,kBAAkB,CACnB,CAAC;AAEF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACtC,MAAM,SAAS,GAAG,IAAA,YAAG,GAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,SAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,cAAK,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAE/C,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QAExB,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC;QAC9D,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC;QAElE,IAAA,yCAAqB,EAAC,IAAI,kCAAc,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;QAEnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"store-order.event.spec.js","sourceRoot":"","sources":["../../../src/store/event/store-order.event.spec.ts"],"names":[],"mappings":";;AAAA,yCAAmC;AACnC,yCAAwD;AACxD,2DAAqD;AACrD,oCAAiC;AAEjC,MAAM,UAAU,GAAG,IAAI,mBAAU,CAC/B,IAAI,cAAK,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,EAC9B,IAAI,cAAK,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,EAC/B,kBAAkB,CACnB,CAAC;AAEF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACtC,MAAM,SAAS,GAAG,IAAA,YAAG,GAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,cAAK,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAE/C,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QAExB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC;QACvE,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC;QAE3E,KAAK,CAAC,QAAQ,CAAC,IAAI,kCAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAErD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,7 +1,6 @@
1
1
  import { timestamp } from '../../shared';
2
2
  import { InstrumentSelector } from '../../domain/instrument';
3
- import { Orderbook } from '../../domain/orderbook';
4
- import { State } from '../store.state';
3
+ import { State, StateChangeTracker } from '../store.state';
5
4
  import { StoreEvent } from './store.event';
6
5
  export declare class OrderbookPatchEvent implements StoreEvent {
7
6
  readonly instrument: InstrumentSelector;
@@ -13,4 +12,4 @@ export declare class OrderbookPatchEvent implements StoreEvent {
13
12
  type: string;
14
13
  constructor(instrument: InstrumentSelector, bestAskRate: number, bestAskQuantity: number, bestBidRate: number, bestBidQuantity: number, timestamp: timestamp);
15
14
  }
16
- export declare function OrderbookPatchEventHandler(event: OrderbookPatchEvent, state: State): Orderbook;
15
+ export declare function OrderbookPatchEventHandler(event: OrderbookPatchEvent, state: State, changes: StateChangeTracker): void;
@@ -29,7 +29,7 @@ OrderbookPatchEvent = __decorate([
29
29
  __metadata("design:paramtypes", [instrument_1.InstrumentSelector, Number, Number, Number, Number, Number])
30
30
  ], OrderbookPatchEvent);
31
31
  exports.OrderbookPatchEvent = OrderbookPatchEvent;
32
- function OrderbookPatchEventHandler(event, state) {
32
+ function OrderbookPatchEventHandler(event, state, changes) {
33
33
  const instrumentKey = event.instrument.toString();
34
34
  if (!(instrumentKey in state.subscription.instrument)) {
35
35
  throw new Error(`Trying to patch unsubscribed instrument: ${instrumentKey}`);
@@ -59,7 +59,7 @@ function OrderbookPatchEventHandler(event, state) {
59
59
  throw new Error('liquidated');
60
60
  }
61
61
  }
62
- return orderbook;
62
+ changes.commit(orderbook);
63
63
  }
64
64
  exports.OrderbookPatchEventHandler = OrderbookPatchEventHandler;
65
65
  //# sourceMappingURL=store-orderbook.event.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store-orderbook.event.js","sourceRoot":"","sources":["../../../src/store/event/store-orderbook.event.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA2C;AAE3C,wDAA6D;AAC7D,sDAAmD;AAKnD,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAG9B,YACW,UAA8B,EAC9B,WAAmB,EACnB,eAAuB,EACvB,WAAmB,EACnB,eAAuB,EACvB,SAAoB;QALpB,eAAU,GAAV,UAAU,CAAoB;QAC9B,gBAAW,GAAX,WAAW,CAAQ;QACnB,oBAAe,GAAf,eAAe,CAAQ;QACvB,gBAAW,GAAX,WAAW,CAAQ;QACnB,oBAAe,GAAf,eAAe,CAAQ;QACvB,cAAS,GAAT,SAAS,CAAW;QAR/B,SAAI,GAAG,iBAAiB,CAAC;IAStB,CAAC;CACL,CAAA;AAXY,mBAAmB;IAD/B,aAAK;qCAKmB,+BAAkB;GAJ9B,mBAAmB,CAW/B;AAXY,kDAAmB;AAahC,SAAgB,0BAA0B,CAAC,KAA0B,EAAE,KAAY;IACjF,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAElD,IAAI,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QACrD,MAAM,IAAI,KAAK,CAAC,4CAA4C,aAAa,EAAE,CAAC,CAAC;KAC9E;IAED,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAE/C,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAE5D,SAAS,GAAG,IAAI,qBAAS,CAAC,UAAU,CAAC,CAAC;QAEtC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;KAC5C;IAED,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACtC,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5E,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACnF,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5E,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEnE,IAAI,KAAK,EAAE;QACT,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACpD,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE;gBAC1D,SAAS;aACV;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;YAEhF,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SAC7B;QAED,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;SAC/B;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AA5CD,gEA4CC"}
1
+ {"version":3,"file":"store-orderbook.event.js","sourceRoot":"","sources":["../../../src/store/event/store-orderbook.event.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA2C;AAE3C,wDAA6D;AAC7D,sDAAmD;AAKnD,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAG9B,YACW,UAA8B,EAC9B,WAAmB,EACnB,eAAuB,EACvB,WAAmB,EACnB,eAAuB,EACvB,SAAoB;QALpB,eAAU,GAAV,UAAU,CAAoB;QAC9B,gBAAW,GAAX,WAAW,CAAQ;QACnB,oBAAe,GAAf,eAAe,CAAQ;QACvB,gBAAW,GAAX,WAAW,CAAQ;QACnB,oBAAe,GAAf,eAAe,CAAQ;QACvB,cAAS,GAAT,SAAS,CAAW;QAR/B,SAAI,GAAG,iBAAiB,CAAC;IAStB,CAAC;CACL,CAAA;AAXY,mBAAmB;IAD/B,aAAK;qCAKmB,+BAAkB;GAJ9B,mBAAmB,CAW/B;AAXY,kDAAmB;AAahC,SAAgB,0BAA0B,CACxC,KAA0B,EAC1B,KAAY,EACZ,OAA2B;IAE3B,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAElD,IAAI,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QACrD,MAAM,IAAI,KAAK,CAAC,4CAA4C,aAAa,EAAE,CAAC,CAAC;KAC9E;IAED,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAE/C,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAE5D,SAAS,GAAG,IAAI,qBAAS,CAAC,UAAU,CAAC,CAAC;QAEtC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;KAC5C;IAED,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACtC,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5E,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACnF,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5E,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEnE,IAAI,KAAK,EAAE;QACT,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACpD,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE;gBAC1D,SAAS;aACV;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;YAEhF,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SAC7B;QAED,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;SAC/B;KACF;IAED,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC;AAhDD,gEAgDC"}
@@ -1,6 +1,6 @@
1
1
  import { timestamp } from '../../shared';
2
2
  import { Position, Instrument, PositionMode } from '../../domain';
3
- import { State } from '../store.state';
3
+ import { State, StateChangeTracker } from '../store.state';
4
4
  import { StoreEvent } from './store.event';
5
5
  export declare class PositionLoadEvent implements StoreEvent {
6
6
  readonly position: Position;
@@ -8,7 +8,7 @@ export declare class PositionLoadEvent implements StoreEvent {
8
8
  type: string;
9
9
  constructor(position: Position, timestamp: timestamp);
10
10
  }
11
- export declare function PositionLoadEventHandler(event: PositionLoadEvent, state: State): Position;
11
+ export declare function PositionLoadEventHandler(event: PositionLoadEvent, state: State, changes: StateChangeTracker): Position;
12
12
  export declare class PositionPatchEvent implements StoreEvent {
13
13
  readonly id: string;
14
14
  readonly instrument: Instrument;
@@ -20,4 +20,4 @@ export declare class PositionPatchEvent implements StoreEvent {
20
20
  type: string;
21
21
  constructor(id: string, instrument: Instrument, rate: number, size: number, leverage: number, mode: PositionMode, timestamp: timestamp);
22
22
  }
23
- export declare function PositionPatchEventHandler(event: PositionPatchEvent, state: State): (Position | import("../../domain").Balance)[];
23
+ export declare function PositionPatchEventHandler(event: PositionPatchEvent, state: State, changes: StateChangeTracker): void;
@@ -24,7 +24,7 @@ PositionLoadEvent = __decorate([
24
24
  __metadata("design:paramtypes", [domain_1.Position, Number])
25
25
  ], PositionLoadEvent);
26
26
  exports.PositionLoadEvent = PositionLoadEvent;
27
- function PositionLoadEventHandler(event, state) {
27
+ function PositionLoadEventHandler(event, state, changes) {
28
28
  if (event.position.instrument.toString() in state.subscription.instrument ||
29
29
  event.position.size == 0) {
30
30
  return;
@@ -57,7 +57,7 @@ PositionPatchEvent = __decorate([
57
57
  __metadata("design:paramtypes", [String, domain_1.Instrument, Number, Number, Number, String, Number])
58
58
  ], PositionPatchEvent);
59
59
  exports.PositionPatchEvent = PositionPatchEvent;
60
- function PositionPatchEventHandler(event, state) {
60
+ function PositionPatchEventHandler(event, state, changes) {
61
61
  if (!(event.instrument.toString() in state.subscription.instrument)) {
62
62
  return;
63
63
  }
@@ -74,9 +74,9 @@ function PositionPatchEventHandler(event, state) {
74
74
  const rate = position.size >= 0 ? orderbook.bestBidRate : orderbook.bestAskRate;
75
75
  position.calculatePnL(rate);
76
76
  }
77
- return [position, balance];
77
+ changes.commit(position);
78
+ changes.commit(balance);
78
79
  }
79
- return;
80
80
  }
81
81
  if (!position) {
82
82
  position = new domain_1.Position(event.id, event.instrument);
@@ -90,7 +90,8 @@ function PositionPatchEventHandler(event, state) {
90
90
  const rate = position.size >= 0 ? orderbook.bestBidRate : orderbook.bestAskRate;
91
91
  position.calculatePnL(rate);
92
92
  }
93
- return [position, balance];
93
+ changes.commit(position);
94
+ changes.commit(balance);
94
95
  }
95
96
  exports.PositionPatchEventHandler = PositionPatchEventHandler;
96
97
  //# sourceMappingURL=store-position.event.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store-position.event.js","sourceRoot":"","sources":["../../../src/store/event/store-position.event.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store-position.event.js","sourceRoot":"","sources":["../../../src/store/event/store-position.event.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { timestamp } from '../../shared';
2
- import { Trade } from '../../domain';
3
2
  import { InstrumentSelector } from '../../domain/instrument';
4
- import { State } from '../store.state';
3
+ import { State, StateChangeTracker } from '../store.state';
5
4
  import { StoreEvent } from './store.event';
6
5
  export declare class TradePatchEvent implements StoreEvent {
7
6
  readonly instrument: InstrumentSelector;
@@ -11,4 +10,4 @@ export declare class TradePatchEvent implements StoreEvent {
11
10
  type: string;
12
11
  constructor(instrument: InstrumentSelector, rate: number, quantity: number, timestamp: timestamp);
13
12
  }
14
- export declare function TradePatchEventHandler(event: TradePatchEvent, state: State): Trade;
13
+ export declare function TradePatchEventHandler(event: TradePatchEvent, state: State, changes: StateChangeTracker): void;
@@ -27,7 +27,7 @@ TradePatchEvent = __decorate([
27
27
  __metadata("design:paramtypes", [instrument_1.InstrumentSelector, Number, Number, Number])
28
28
  ], TradePatchEvent);
29
29
  exports.TradePatchEvent = TradePatchEvent;
30
- function TradePatchEventHandler(event, state) {
30
+ function TradePatchEventHandler(event, state, changes) {
31
31
  const instrumentKey = event.instrument.toString();
32
32
  if (!(instrumentKey in state.subscription.instrument)) {
33
33
  throw new Error(`Trying to patch unsubscribed instrument: ${instrumentKey}`);
@@ -41,7 +41,7 @@ function TradePatchEventHandler(event, state) {
41
41
  trade.timestamp = event.timestamp;
42
42
  trade.rate = trade.instrument.quote.fixed(event.rate);
43
43
  trade.quantity = trade.instrument.base.fixed(event.quantity);
44
- return trade;
44
+ changes.commit(trade);
45
45
  }
46
46
  exports.TradePatchEventHandler = TradePatchEventHandler;
47
47
  //# sourceMappingURL=store-trade.event.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store-trade.event.js","sourceRoot":"","sources":["../../../src/store/event/store-trade.event.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA2C;AAE3C,yCAAqC;AACrC,wDAA6D;AAQ7D,IAAa,eAAe,GAA5B,MAAa,eAAe;IAG1B,YACW,UAA8B,EAC9B,IAAY,EACZ,QAAgB,EAChB,SAAoB;QAHpB,eAAU,GAAV,UAAU,CAAoB;QAC9B,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAW;QAN/B,SAAI,GAAG,aAAa,CAAC;IAOlB,CAAC;CACL,CAAA;AATY,eAAe;IAD3B,aAAK;qCAKmB,+BAAkB;GAJ9B,eAAe,CAS3B;AATY,0CAAe;AAe5B,SAAgB,sBAAsB,CAAC,KAAsB,EAAE,KAAY;IACzE,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAElD,IAAI,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QACrD,MAAM,IAAI,KAAK,CAAC,4CAA4C,aAAa,EAAE,CAAC,CAAC;KAC9E;IAED,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE;QACV,KAAK,GAAG,IAAI,cAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;QAE5D,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;KACpC;IAED,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE7D,OAAO,KAAK,CAAC;AACf,CAAC;AArBD,wDAqBC"}
1
+ {"version":3,"file":"store-trade.event.js","sourceRoot":"","sources":["../../../src/store/event/store-trade.event.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA2C;AAE3C,yCAAqC;AACrC,wDAA6D;AAQ7D,IAAa,eAAe,GAA5B,MAAa,eAAe;IAG1B,YACW,UAA8B,EAC9B,IAAY,EACZ,QAAgB,EAChB,SAAoB;QAHpB,eAAU,GAAV,UAAU,CAAoB;QAC9B,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAW;QAN/B,SAAI,GAAG,aAAa,CAAC;IAOlB,CAAC;CACL,CAAA;AATY,eAAe;IAD3B,aAAK;qCAKmB,+BAAkB;GAJ9B,eAAe,CAS3B;AATY,0CAAe;AAe5B,SAAgB,sBAAsB,CACpC,KAAsB,EACtB,KAAY,EACZ,OAA2B;IAE3B,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAElD,IAAI,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QACrD,MAAM,IAAI,KAAK,CAAC,4CAA4C,aAAa,EAAE,CAAC,CAAC;KAC9E;IAED,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE;QACV,KAAK,GAAG,IAAI,cAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;QAE5D,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;KACpC;IAED,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAzBD,wDAyBC"}
@@ -2,42 +2,41 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const domain_1 = require("../../domain");
4
4
  const _1 = require(".");
5
- const store_state_1 = require("../store.state");
6
5
  const shared_1 = require("../../shared");
6
+ const __1 = require("..");
7
7
  const instrument = new domain_1.Instrument(new domain_1.Asset('btc', 'binance', 8), new domain_1.Asset('usdt', 'binance', 2), 'binance:btc-usdt');
8
8
  describe('trade patch event tests', () => {
9
9
  test('should create a new trade object and patch a store', () => {
10
10
  const timestamp = (0, shared_1.now)();
11
- const state = new store_state_1.State();
12
- state.universe.instrument[instrument.toString()] = instrument;
13
- state.subscription.instrument[instrument.toString()] = instrument;
14
- const event = new _1.TradePatchEvent(instrument, 1000, 0.1, timestamp);
15
- (0, _1.TradePatchEventHandler)(event, state);
16
- const trade = state.trade[instrument.toString()];
11
+ const store = new __1.Store();
12
+ store.snapshot.universe.instrument[instrument.toString()] = instrument;
13
+ store.snapshot.subscription.instrument[instrument.toString()] = instrument;
14
+ store.dispatch(new _1.TradePatchEvent(instrument, 1000, 0.1, timestamp));
15
+ const trade = store.snapshot.trade[instrument.toString()];
17
16
  expect(trade.timestamp).toEqual(timestamp);
18
17
  expect(trade.instrument.toString()).toEqual(trade.instrument.toString());
19
18
  expect(trade.rate).toEqual(1000);
20
19
  expect(trade.quantity).toEqual(0.1);
21
- expect(state.timestamp).toEqual(timestamp);
20
+ expect(store.snapshot.timestamp).toEqual(timestamp);
22
21
  });
23
22
  test('should use the existing instance of trade when patching a store', () => {
24
- const state = new store_state_1.State();
25
- state.universe.instrument[instrument.toString()] = instrument;
26
- state.subscription.instrument[instrument.toString()] = instrument;
27
- (0, _1.TradePatchEventHandler)(new _1.TradePatchEvent(instrument, 1000, 0.1, (0, shared_1.now)()), state);
23
+ const store = new __1.Store();
24
+ store.snapshot.universe.instrument[instrument.toString()] = instrument;
25
+ store.snapshot.subscription.instrument[instrument.toString()] = instrument;
26
+ store.dispatch(new _1.TradePatchEvent(instrument, 1000, 0.1, (0, shared_1.now)()));
28
27
  const timestamp = (0, shared_1.now)();
29
- const trade = state.trade[instrument.toString()];
30
- (0, _1.TradePatchEventHandler)(new _1.TradePatchEvent(instrument, 2000, 0.2, timestamp), state);
28
+ const trade = store.snapshot.trade[instrument.toString()];
29
+ store.dispatch(new _1.TradePatchEvent(instrument, 2000, 0.2, (0, shared_1.now)()));
31
30
  expect(trade.timestamp).toEqual(timestamp);
32
31
  expect(trade.instrument.toString()).toEqual(instrument.toString());
33
32
  expect(trade.rate).toEqual(2000);
34
33
  expect(trade.quantity).toEqual(0.2);
35
- expect(state.timestamp).toEqual(timestamp);
34
+ expect(store.snapshot.timestamp).toEqual(timestamp);
36
35
  });
37
36
  test('should throw exception when patching unsubscribed instrument', () => {
37
+ const store = new __1.Store();
38
38
  const fn = () => {
39
- const event = new _1.TradePatchEvent(instrument, 1000, 0.1, (0, shared_1.now)());
40
- (0, _1.TradePatchEventHandler)(event, new store_state_1.State());
39
+ store.dispatch(new _1.TradePatchEvent(instrument, 1000, 0.1, (0, shared_1.now)()));
41
40
  };
42
41
  expect(fn).toThrow(Error);
43
42
  });
@@ -1 +1 @@
1
- {"version":3,"file":"store-trade.event.spec.js","sourceRoot":"","sources":["../../../src/store/event/store-trade.event.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store-trade.event.spec.js","sourceRoot":"","sources":["../../../src/store/event/store-trade.event.spec.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,38 @@
1
1
  import { Observable } from 'rxjs';
2
- import { State } from './store.state';
2
+ import { State, StateChangeTracker } from './store.state';
3
3
  import { Component } from '../domain';
4
4
  import { StoreEvent } from './event/store.event';
5
5
  import { Topic } from '../shared/topic';
6
6
  import { TradePatchEvent } from './event/store-trade.event';
7
7
  import { BalanceFreezEvent, BalancePatchEvent, BalanceTransactEvent, BalanceUnfreezEvent, CandleEvent, InstrumentPatchEvent, InstrumentSubscriptionEvent, OrderbookPatchEvent, OrderCanceledEvent, OrderCancelFailedEvent, OrderCancelingEvent, OrderFilledEvent, OrderLoadEvent, OrderNewEvent, OrderPendingEvent, OrderRejectedEvent, PositionLoadEvent, PositionPatchEvent } from './event';
8
- export declare class Store extends Topic<StoreEvent, any> {
8
+ export declare class Store extends Topic<StoreEvent, any> implements StateChangeTracker {
9
+ private readonly pendingChanges;
9
10
  private readonly changes;
10
11
  private readonly state;
11
12
  get state$(): Observable<State>;
12
13
  get changes$(): Observable<Component>;
13
14
  get snapshot(): State;
14
15
  dispatch(...events: StoreEvent[]): void;
16
+ commit(component: Component): void;
17
+ commitPendingChanges(): void;
15
18
  dispose(): void;
16
- onInstrumentPatch(event: InstrumentPatchEvent): import("../domain").Instrument;
17
- onInstrumentSubscription(event: InstrumentSubscriptionEvent): import("../domain").Instrument;
18
- onBalancePatch(event: BalancePatchEvent): import("../domain").Balance;
19
- onBalanceTransact(event: BalanceTransactEvent): import("../domain").Balance;
20
- onBalanceFreez(event: BalanceFreezEvent): import("../domain").Balance;
21
- onBalanceUnfreez(event: BalanceUnfreezEvent): import("../domain").Balance;
22
- onOrderLoad(event: OrderLoadEvent): import("../domain").Order;
23
- onOrderNew(event: OrderNewEvent): import("../domain").Order;
24
- onOrderPending(event: OrderPendingEvent): import("../domain").Order;
25
- onOrderFilled(event: OrderFilledEvent): import("../domain").Order;
26
- onOrderCanceling(event: OrderCancelingEvent): import("../domain").Order;
27
- onOrderCanceled(event: OrderCanceledEvent): import("../domain").Order;
28
- onOrderCancelFailed(event: OrderCancelFailedEvent): import("../domain").Order;
29
- onOrderRejected(event: OrderRejectedEvent): import("../domain").Order;
30
- onOrderbookPatch(event: OrderbookPatchEvent): import("../domain").Orderbook;
19
+ onInstrumentPatch(event: InstrumentPatchEvent): void;
20
+ onInstrumentSubscription(event: InstrumentSubscriptionEvent): void;
21
+ onBalancePatch(event: BalancePatchEvent): void;
22
+ onBalanceTransact(event: BalanceTransactEvent): void;
23
+ onBalanceFreez(event: BalanceFreezEvent): void;
24
+ onBalanceUnfreez(event: BalanceUnfreezEvent): void;
25
+ onOrderLoad(event: OrderLoadEvent): void;
26
+ onOrderNew(event: OrderNewEvent): void;
27
+ onOrderPending(event: OrderPendingEvent): void;
28
+ onOrderFilled(event: OrderFilledEvent): void;
29
+ onOrderCanceling(event: OrderCancelingEvent): void;
30
+ onOrderCanceled(event: OrderCanceledEvent): void;
31
+ onOrderCancelFailed(event: OrderCancelFailedEvent): void;
32
+ onOrderRejected(event: OrderRejectedEvent): void;
33
+ onOrderbookPatch(event: OrderbookPatchEvent): void;
31
34
  onPositionLoad(event: PositionLoadEvent): import("../domain").Position;
32
- onPositionPatch(event: PositionPatchEvent): (import("../domain").Position | import("../domain").Balance)[];
33
- onTradePatch(event: TradePatchEvent): import("../domain").Trade;
34
- onCandle(event: CandleEvent): (import("../domain").Orderbook | import("../domain").Trade)[];
35
+ onPositionPatch(event: PositionPatchEvent): void;
36
+ onTradePatch(event: TradePatchEvent): void;
37
+ onCandle(event: CandleEvent): void;
35
38
  }
@@ -19,6 +19,7 @@ const event_1 = require("./event");
19
19
  class Store extends topic_1.Topic {
20
20
  constructor() {
21
21
  super(...arguments);
22
+ this.pendingChanges = new typescript_collections_1.Set();
22
23
  this.changes = new rxjs_1.Subject();
23
24
  this.state = new rxjs_1.BehaviorSubject(new store_state_1.State());
24
25
  }
@@ -32,78 +33,78 @@ class Store extends topic_1.Topic {
32
33
  return this.state.value;
33
34
  }
34
35
  dispatch(...events) {
35
- const notifyComponentsChanged = new typescript_collections_1.Set();
36
36
  for (const event of events) {
37
- const componentOrComponents = super.dispatch(event, {});
38
- if (Array.isArray(componentOrComponents)) {
39
- componentOrComponents.forEach(it => notifyComponentsChanged.add(it));
40
- }
41
- else {
42
- notifyComponentsChanged.add(componentOrComponents);
43
- }
37
+ super.dispatch(event, {});
44
38
  }
45
- notifyComponentsChanged.forEach(it => this.changes.next(it));
39
+ this.commitPendingChanges();
40
+ }
41
+ commit(component) {
42
+ this.pendingChanges.add(component);
43
+ }
44
+ commitPendingChanges() {
45
+ this.pendingChanges.forEach(it => this.changes.next(it));
46
+ this.pendingChanges.clear();
46
47
  }
47
48
  dispose() {
48
49
  this.state.complete();
49
50
  this.changes.complete();
50
51
  }
51
52
  onInstrumentPatch(event) {
52
- return (0, event_1.InstrumentPatchEventHandler)(event, this.snapshot);
53
+ return (0, event_1.InstrumentPatchEventHandler)(event, this.snapshot, this);
53
54
  }
54
55
  onInstrumentSubscription(event) {
55
- return (0, event_1.InstrumentSubscriptionEventHandler)(event, this.snapshot);
56
+ return (0, event_1.InstrumentSubscriptionEventHandler)(event, this.snapshot, this);
56
57
  }
57
58
  onBalancePatch(event) {
58
- return (0, event_1.BalancePatchEventHandler)(event, this.snapshot);
59
+ return (0, event_1.BalancePatchEventHandler)(event, this.snapshot, this);
59
60
  }
60
61
  onBalanceTransact(event) {
61
- return (0, event_1.BalanceTransactEventHandler)(event, this.snapshot);
62
+ return (0, event_1.BalanceTransactEventHandler)(event, this.snapshot, this);
62
63
  }
63
64
  onBalanceFreez(event) {
64
- return (0, event_1.BalanceFreezEventHandler)(event, this.snapshot);
65
+ return (0, event_1.BalanceFreezEventHandler)(event, this.snapshot, this);
65
66
  }
66
67
  onBalanceUnfreez(event) {
67
- return (0, event_1.BalanceUnfreezEventHandler)(event, this.snapshot);
68
+ return (0, event_1.BalanceUnfreezEventHandler)(event, this.snapshot, this);
68
69
  }
69
70
  onOrderLoad(event) {
70
- return (0, event_1.OrderLoadEventHandler)(event, this.snapshot);
71
+ return (0, event_1.OrderLoadEventHandler)(event, this.snapshot, this);
71
72
  }
72
73
  onOrderNew(event) {
73
- return (0, event_1.OrderNewEventHandler)(event, this.snapshot);
74
+ return (0, event_1.OrderNewEventHandler)(event, this.snapshot, this);
74
75
  }
75
76
  onOrderPending(event) {
76
- return (0, event_1.OrderPendingEventHandler)(event, this.snapshot);
77
+ return (0, event_1.OrderPendingEventHandler)(event, this.snapshot, this);
77
78
  }
78
79
  onOrderFilled(event) {
79
- return (0, event_1.OrderFilledEventHandler)(event, this.snapshot);
80
+ return (0, event_1.OrderFilledEventHandler)(event, this.snapshot, this);
80
81
  }
81
82
  onOrderCanceling(event) {
82
- return (0, event_1.OrderCancelingEventHandler)(event, this.snapshot);
83
+ return (0, event_1.OrderCancelingEventHandler)(event, this.snapshot, this);
83
84
  }
84
85
  onOrderCanceled(event) {
85
- return (0, event_1.OrderCanceledEventHandler)(event, this.snapshot);
86
+ return (0, event_1.OrderCanceledEventHandler)(event, this.snapshot, this);
86
87
  }
87
88
  onOrderCancelFailed(event) {
88
- return (0, event_1.OrderCancelFailedEventHandler)(event, this.snapshot);
89
+ return (0, event_1.OrderCancelFailedEventHandler)(event, this.snapshot, this);
89
90
  }
90
91
  onOrderRejected(event) {
91
- return (0, event_1.OrderRejectedEventHandler)(event, this.snapshot);
92
+ return (0, event_1.OrderRejectedEventHandler)(event, this.snapshot, this);
92
93
  }
93
94
  onOrderbookPatch(event) {
94
- return (0, event_1.OrderbookPatchEventHandler)(event, this.snapshot);
95
+ return (0, event_1.OrderbookPatchEventHandler)(event, this.snapshot, this);
95
96
  }
96
97
  onPositionLoad(event) {
97
- return (0, event_1.PositionLoadEventHandler)(event, this.snapshot);
98
+ return (0, event_1.PositionLoadEventHandler)(event, this.snapshot, this);
98
99
  }
99
100
  onPositionPatch(event) {
100
- return (0, event_1.PositionPatchEventHandler)(event, this.snapshot);
101
+ return (0, event_1.PositionPatchEventHandler)(event, this.snapshot, this);
101
102
  }
102
103
  onTradePatch(event) {
103
- return (0, store_trade_event_1.TradePatchEventHandler)(event, this.snapshot);
104
+ return (0, store_trade_event_1.TradePatchEventHandler)(event, this.snapshot, this);
104
105
  }
105
106
  onCandle(event) {
106
- return (0, event_1.CandleEventHandler)(event, this.snapshot);
107
+ return (0, event_1.CandleEventHandler)(event, this.snapshot, this);
107
108
  }
108
109
  }
109
110
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,9 @@
1
1
  import { timestamp } from '../shared';
2
- import { Instrument, Balance, Order, Orderbook, Asset, Trade, AssetSelector, InstrumentSelector } from '../domain';
2
+ import { Instrument, Balance, Order, Orderbook, Asset, Trade, AssetSelector, InstrumentSelector, Component } from '../domain';
3
+ export interface StateChangeTracker {
4
+ commit(component: Component): any;
5
+ commitPendingChanges(): any;
6
+ }
3
7
  export declare class State {
4
8
  timestamp: timestamp;
5
9
  universe: {
@@ -1 +1 @@
1
- {"version":3,"file":"store.state.js","sourceRoot":"","sources":["../../src/store/store.state.ts"],"names":[],"mappings":";;;AAYA,MAAa,KAAK;IAAlB;QAIE,aAAQ,GAGJ;YACF,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,iBAAY,GAGR;YACF,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,UAAK,GAA0B,EAAE,CAAC;QAClC,cAAS,GAA8B,EAAE,CAAC;QAC1C,YAAO,GAA4B,EAAE,CAAC;QAEtC,UAAK,GAKD;YACF,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;CAAA;AAnCD,sBAmCC"}
1
+ {"version":3,"file":"store.state.js","sourceRoot":"","sources":["../../src/store/store.state.ts"],"names":[],"mappings":";;;AAkBA,MAAa,KAAK;IAAlB;QAIE,aAAQ,GAGJ;YACF,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,iBAAY,GAGR;YACF,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,UAAK,GAA0B,EAAE,CAAC;QAClC,cAAS,GAA8B,EAAE,CAAC;QAC1C,YAAO,GAA4B,EAAE,CAAC;QAEtC,UAAK,GAKD;YACF,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;CAAA;AAnCD,sBAmCC"}