@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.
- package/dist/adapter/backtester/backtester-cursor.spec.js.map +1 -1
- package/dist/adapter/backtester/backtester-streamer.spec.js.map +1 -1
- package/dist/store/event/store-balance.event.d.ts +5 -6
- package/dist/store/event/store-balance.event.js +8 -8
- package/dist/store/event/store-balance.event.js.map +1 -1
- package/dist/store/event/store-candle.event.d.ts +2 -1
- package/dist/store/event/store-candle.event.js +25 -19
- package/dist/store/event/store-candle.event.js.map +1 -1
- package/dist/store/event/store-candle.event.spec.js +7 -8
- package/dist/store/event/store-candle.event.spec.js.map +1 -1
- package/dist/store/event/store-instrument.event.d.ts +6 -6
- package/dist/store/event/store-instrument.event.js +7 -7
- package/dist/store/event/store-instrument.event.js.map +1 -1
- package/dist/store/event/store-order.event.d.ts +9 -9
- package/dist/store/event/store-order.event.js +16 -16
- package/dist/store/event/store-order.event.js.map +1 -1
- package/dist/store/event/store-order.event.spec.js +7 -7
- package/dist/store/event/store-order.event.spec.js.map +1 -1
- package/dist/store/event/store-orderbook.event.d.ts +2 -3
- package/dist/store/event/store-orderbook.event.js +2 -2
- package/dist/store/event/store-orderbook.event.js.map +1 -1
- package/dist/store/event/store-position.event.d.ts +3 -3
- package/dist/store/event/store-position.event.js +6 -5
- package/dist/store/event/store-position.event.js.map +1 -1
- package/dist/store/event/store-trade.event.d.ts +2 -3
- package/dist/store/event/store-trade.event.js +2 -2
- package/dist/store/event/store-trade.event.js.map +1 -1
- package/dist/store/event/store-trade.event.spec.js +16 -17
- package/dist/store/event/store-trade.event.spec.js.map +1 -1
- package/dist/store/store.d.ts +23 -20
- package/dist/store/store.js +29 -28
- package/dist/store/store.js.map +1 -1
- package/dist/store/store.state.d.ts +5 -1
- package/dist/store/store.state.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/adapter/backtester/backtester-cursor.spec.ts +2 -2
- package/src/adapter/backtester/backtester-streamer.spec.ts +0 -1
- package/src/store/event/store-balance.event.ts +25 -9
- package/src/store/event/store-candle.event.spec.ts +8 -10
- package/src/store/event/store-candle.event.ts +44 -30
- package/src/store/event/store-instrument.event.ts +12 -7
- package/src/store/event/store-order.event.spec.ts +8 -8
- package/src/store/event/store-order.event.ts +46 -17
- package/src/store/event/store-orderbook.event.ts +7 -3
- package/src/store/event/store-position.event.ts +15 -7
- package/src/store/event/store-trade.event.spec.ts +18 -20
- package/src/store/event/store-trade.event.ts +7 -3
- package/src/store/store.state.ts +8 -2
- 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
|
|
11
|
+
const store = new store_1.Store();
|
|
12
12
|
const order = domain_1.Order.buyMarket(instrument, 1.0);
|
|
13
13
|
order.state = 'PENDING';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
expect(Object.keys(
|
|
18
|
-
expect(
|
|
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,
|
|
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 {
|
|
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):
|
|
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
|
-
|
|
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,
|
|
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):
|
|
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
|
-
|
|
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
|
-
|
|
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":";;;;;;;;;;;;AAAA,8CAA2C;AAE3C,yCAAkE;AAKlE,IAAa,iBAAiB,GAA9B,MAAa,iBAAiB;IAG5B,YAAqB,QAAkB,EAAW,SAAoB;QAAjD,aAAQ,GAAR,QAAQ,CAAU;QAAW,cAAS,GAAT,SAAS,CAAW;QAFtE,SAAI,GAAG,eAAe,CAAC;IAEkD,CAAC;CAC3E,CAAA;AAJY,iBAAiB;IAD7B,aAAK;qCAI2B,iBAAQ;GAH5B,iBAAiB,CAI7B;AAJY,8CAAiB;AAM9B,SAAgB,wBAAwB,
|
|
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):
|
|
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
|
-
|
|
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,
|
|
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
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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(
|
|
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
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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 =
|
|
30
|
-
|
|
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(
|
|
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
|
-
|
|
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":";;AAAA,yCAAiD;AACjD,
|
|
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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"}
|
package/dist/store/store.d.ts
CHANGED
|
@@ -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):
|
|
17
|
-
onInstrumentSubscription(event: InstrumentSubscriptionEvent):
|
|
18
|
-
onBalancePatch(event: BalancePatchEvent):
|
|
19
|
-
onBalanceTransact(event: BalanceTransactEvent):
|
|
20
|
-
onBalanceFreez(event: BalanceFreezEvent):
|
|
21
|
-
onBalanceUnfreez(event: BalanceUnfreezEvent):
|
|
22
|
-
onOrderLoad(event: OrderLoadEvent):
|
|
23
|
-
onOrderNew(event: OrderNewEvent):
|
|
24
|
-
onOrderPending(event: OrderPendingEvent):
|
|
25
|
-
onOrderFilled(event: OrderFilledEvent):
|
|
26
|
-
onOrderCanceling(event: OrderCancelingEvent):
|
|
27
|
-
onOrderCanceled(event: OrderCanceledEvent):
|
|
28
|
-
onOrderCancelFailed(event: OrderCancelFailedEvent):
|
|
29
|
-
onOrderRejected(event: OrderRejectedEvent):
|
|
30
|
-
onOrderbookPatch(event: OrderbookPatchEvent):
|
|
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):
|
|
33
|
-
onTradePatch(event: TradePatchEvent):
|
|
34
|
-
onCandle(event: CandleEvent):
|
|
35
|
+
onPositionPatch(event: PositionPatchEvent): void;
|
|
36
|
+
onTradePatch(event: TradePatchEvent): void;
|
|
37
|
+
onCandle(event: CandleEvent): void;
|
|
35
38
|
}
|
package/dist/store/store.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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([
|
package/dist/store/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAA4D;AAC5D,+
|
|
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":";;;
|
|
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"}
|