@quantform/core 0.3.260 → 0.3.265

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 (89) hide show
  1. package/dist/adapter/adapter-aggregate.d.ts +4 -5
  2. package/dist/adapter/adapter-aggregate.js +50 -21
  3. package/dist/adapter/adapter-aggregate.js.map +1 -1
  4. package/dist/adapter/adapter.d.ts +30 -7
  5. package/dist/adapter/adapter.js +29 -2
  6. package/dist/adapter/adapter.js.map +1 -1
  7. package/dist/adapter/backtester/backtester-adapter.d.ts +13 -8
  8. package/dist/adapter/backtester/backtester-adapter.js +25 -32
  9. package/dist/adapter/backtester/backtester-adapter.js.map +1 -1
  10. package/dist/adapter/index.d.ts +0 -1
  11. package/dist/adapter/index.js +0 -1
  12. package/dist/adapter/index.js.map +1 -1
  13. package/dist/adapter/paper/paper-adapter.d.ts +10 -7
  14. package/dist/adapter/paper/paper-adapter.js +24 -42
  15. package/dist/adapter/paper/paper-adapter.js.map +1 -1
  16. package/dist/adapter/paper/paper-adapter.spec.js +25 -7
  17. package/dist/adapter/paper/paper-adapter.spec.js.map +1 -1
  18. package/dist/bootstrap.d.ts +1 -1
  19. package/dist/bootstrap.js +5 -5
  20. package/dist/bootstrap.js.map +1 -1
  21. package/dist/domain/index.d.ts +3 -0
  22. package/dist/domain/index.js +3 -0
  23. package/dist/domain/index.js.map +1 -1
  24. package/dist/{session → domain}/session-descriptor.d.ts +2 -2
  25. package/dist/{session → domain}/session-descriptor.js +0 -0
  26. package/dist/domain/session-descriptor.js.map +1 -0
  27. package/dist/{session → domain}/session.d.ts +2 -2
  28. package/dist/{session → domain}/session.js +4 -4
  29. package/dist/domain/session.js.map +1 -0
  30. package/dist/{session → domain}/session.spec.d.ts +0 -0
  31. package/dist/{session → domain}/session.spec.js +0 -0
  32. package/dist/domain/session.spec.js.map +1 -0
  33. package/dist/{session/session-statement.d.ts → domain/statement.d.ts} +2 -2
  34. package/dist/{session/session-statement.js → domain/statement.js} +1 -1
  35. package/dist/domain/statement.js.map +1 -0
  36. package/dist/index.d.ts +0 -1
  37. package/dist/index.js +0 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/ipc.d.ts +1 -1
  40. package/dist/ipc.js +11 -5
  41. package/dist/ipc.js.map +1 -1
  42. package/dist/ipc.spec.js +4 -57
  43. package/dist/ipc.spec.js.map +1 -1
  44. package/dist/shared/task.d.ts +1 -1
  45. package/dist/store/event/store-order.event.js +5 -5
  46. package/dist/store/event/store-order.event.js.map +1 -1
  47. package/dist/tests/backtester-adapter.spec.js +7 -24
  48. package/dist/tests/backtester-adapter.spec.js.map +1 -1
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +1 -1
  51. package/src/adapter/adapter-aggregate.ts +55 -75
  52. package/src/adapter/adapter.ts +83 -5
  53. package/src/adapter/backtester/backtester-adapter.ts +39 -19
  54. package/src/adapter/index.ts +0 -1
  55. package/src/adapter/paper/paper-adapter.spec.ts +42 -7
  56. package/src/adapter/paper/paper-adapter.ts +31 -23
  57. package/src/bootstrap.ts +2 -2
  58. package/src/domain/index.ts +3 -0
  59. package/src/{session → domain}/session-descriptor.ts +2 -2
  60. package/src/{session → domain}/session.spec.ts +0 -0
  61. package/src/{session → domain}/session.ts +18 -6
  62. package/src/{session/session-statement.ts → domain/statement.ts} +1 -1
  63. package/src/index.ts +0 -1
  64. package/src/ipc.spec.ts +7 -45
  65. package/src/ipc.ts +7 -8
  66. package/src/shared/task.ts +1 -1
  67. package/src/store/event/store-order.event.ts +5 -5
  68. package/src/tests/backtester-adapter.spec.ts +6 -12
  69. package/src/tests/session.spec.ts +1 -1
  70. package/dist/adapter/adapter.event.d.ts +0 -43
  71. package/dist/adapter/adapter.event.js +0 -104
  72. package/dist/adapter/adapter.event.js.map +0 -1
  73. package/dist/session/index.d.ts +0 -4
  74. package/dist/session/index.js +0 -17
  75. package/dist/session/index.js.map +0 -1
  76. package/dist/session/session-descriptor.js.map +0 -1
  77. package/dist/session/session-optimizer.d.ts +0 -10
  78. package/dist/session/session-optimizer.js +0 -62
  79. package/dist/session/session-optimizer.js.map +0 -1
  80. package/dist/session/session-optimizer.spec.d.ts +0 -1
  81. package/dist/session/session-optimizer.spec.js +0 -103
  82. package/dist/session/session-optimizer.spec.js.map +0 -1
  83. package/dist/session/session-statement.js.map +0 -1
  84. package/dist/session/session.js.map +0 -1
  85. package/dist/session/session.spec.js.map +0 -1
  86. package/src/adapter/adapter.event.ts +0 -64
  87. package/src/session/index.ts +0 -4
  88. package/src/session/session-optimizer.spec.ts +0 -86
  89. package/src/session/session-optimizer.ts +0 -81
package/src/ipc.spec.ts CHANGED
@@ -1,20 +1,10 @@
1
- import { Session } from './session';
2
- import {
3
- Adapter,
4
- AdapterFeedCommand,
5
- AdapterAwakeCommand,
6
- AdapterAccountCommand,
7
- AdapterSubscribeCommand,
8
- AdapterDisposeCommand
9
- } from './adapter';
1
+ import { Adapter, AdapterContext } from './adapter';
10
2
  import { PaperAdapter, PaperSpotExecutor } from './adapter/paper';
11
3
  import { PaperExecutor } from './adapter/paper/executor/paper-executor';
12
4
  import { run } from './ipc';
13
- import { Feed, InMemoryStorage } from './storage';
14
- import { instrumentOf } from './domain';
15
- import { handler, task } from './shared';
5
+ import { task } from './shared';
16
6
  import { EventEmitter } from 'events';
17
- import { from, of, take, tap } from 'rxjs';
7
+ import { of, take, tap } from 'rxjs';
18
8
 
19
9
  class DefaultAdapter extends Adapter {
20
10
  name = 'default';
@@ -27,42 +17,14 @@ class DefaultAdapter extends Adapter {
27
17
  return new PaperSpotExecutor(adapter);
28
18
  }
29
19
 
30
- @handler(AdapterAwakeCommand)
31
- onAwake(command: AdapterAwakeCommand) {}
32
-
33
- @handler(AdapterDisposeCommand)
34
- onDispose(command: AdapterDisposeCommand) {}
35
-
36
- @handler(AdapterSubscribeCommand)
37
- onSubscribe(command: AdapterSubscribeCommand) {}
38
-
39
- @handler(AdapterAccountCommand)
40
- onAccount(command: AdapterAccountCommand) {}
20
+ awake(context: AdapterContext): Promise<void> {
21
+ return super.awake(context);
22
+ }
41
23
 
42
- @handler(AdapterFeedCommand)
43
- onFeed(command: AdapterFeedCommand) {}
24
+ async account(): Promise<void> {}
44
25
  }
45
26
 
46
27
  describe('ipc feed tests', () => {
47
- test('should trigger adapter feed command', async () => {
48
- const command = {
49
- type: 'feed',
50
- instrument: 'default:btc-usdt',
51
- from: 0,
52
- to: 100
53
- };
54
-
55
- const session = await run(
56
- {
57
- adapter: [new DefaultAdapter()],
58
- feed: new Feed(new InMemoryStorage())
59
- },
60
- command
61
- );
62
-
63
- //expect(session.descriptor).toBeUndefined();
64
- });
65
-
66
28
  test('should dispatch session started event', done => {
67
29
  const command = {
68
30
  type: 'paper'
package/src/ipc.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { Session, SessionDescriptor } from './session';
2
- import { instrumentOf } from './domain';
1
+ import { Session, SessionDescriptor, instrumentOf } from './domain';
3
2
  import { Topic, event, handler } from './shared/topic';
4
3
  import { runTask, Logger } from './shared';
5
4
  import { Bootstrap } from './bootstrap';
@@ -216,19 +215,19 @@ class IpcHandler extends Topic<{ type: string }, IpcSessionAccessor> {
216
215
 
217
216
  this.emit({ type: 'feed:started' });
218
217
 
219
- await accessor.session.aggregate.feed(
218
+ await accessor.session.aggregate.feed({
220
219
  instrument,
221
- command.from,
222
- command.to,
223
- feed,
224
- timestamp =>
220
+ from: command.from,
221
+ to: command.to,
222
+ destination: feed,
223
+ callback: timestamp =>
225
224
  this.emit({
226
225
  type: 'feed:updated',
227
226
  timestamp,
228
227
  from: command.from,
229
228
  to: command.to
230
229
  })
231
- );
230
+ });
232
231
 
233
232
  this.emit({ type: 'feed:completed' });
234
233
 
@@ -1,5 +1,5 @@
1
1
  import { lastValueFrom, Observable } from 'rxjs';
2
- import { Session } from './../session';
2
+ import { Session } from './../domain';
3
3
 
4
4
  declare type Task = (session: Session) => Observable<any> | Promise<any> | any;
5
5
 
@@ -66,7 +66,7 @@ export function OrderPendingEventHandler(
66
66
  const order = state.order[event.id];
67
67
 
68
68
  if (order.state != 'NEW') {
69
- throw new Error(`Order is not new`);
69
+ throw new Error(`Order is not NEW: ${order.state}`);
70
70
  }
71
71
 
72
72
  order.state = 'PENDING';
@@ -98,7 +98,7 @@ export function OrderFilledEventHandler(
98
98
  const order = state.order[event.id];
99
99
 
100
100
  if (order.state != 'PENDING' && order.state != 'CANCELING') {
101
- throw new Error('Order is not pending');
101
+ throw new Error(`Order is not PENDING or CANCELING: ${order.state}`);
102
102
  }
103
103
 
104
104
  order.state = 'FILLED';
@@ -132,7 +132,7 @@ export function OrderCancelingEventHandler(
132
132
  }
133
133
 
134
134
  if (order.state != 'PENDING') {
135
- throw new Error('Order is not pending');
135
+ throw new Error(`Order is not PENDING: ${order.state}`);
136
136
  }
137
137
 
138
138
  order.state = 'CANCELING';
@@ -160,7 +160,7 @@ export function OrderCanceledEventHandler(
160
160
  }
161
161
 
162
162
  if (order.state != 'CANCELING') {
163
- throw new Error('Order is not canceling');
163
+ throw new Error(`Order is not CANCELING: ${order.state}`);
164
164
  }
165
165
 
166
166
  order.state = 'CANCELED';
@@ -208,7 +208,7 @@ export function OrderRejectedEventHandler(
208
208
  const order = state.order[event.id];
209
209
 
210
210
  if (order.state != 'NEW') {
211
- throw new Error('Order is not new.');
211
+ throw new Error(`Order is not NEW: ${order.state}`);
212
212
  }
213
213
 
214
214
  order.state = 'REJECTED';
@@ -1,5 +1,3 @@
1
- import { AdapterAwakeCommand } from '../adapter';
2
- import { AdapterSubscribeCommand } from '../adapter';
3
1
  import { Asset, Commission, instrumentOf } from '../domain';
4
2
  import { InMemoryStorage, Feed } from '../storage';
5
3
  import { Store } from '../store';
@@ -10,7 +8,6 @@ import { PaperExecutor } from '../adapter/paper/executor/paper-executor';
10
8
  import { PaperAdapter } from '../adapter/paper/paper-adapter';
11
9
  import { BacktesterAdapter } from '../adapter/backtester/backtester-adapter';
12
10
  import { BacktesterStreamer } from '../adapter/backtester/backtester-streamer';
13
- import { handler } from '../shared';
14
11
 
15
12
  const base = new Asset('btc', 'binance', 8);
16
13
  const quote = new Asset('usdt', 'binance', 4);
@@ -26,9 +23,10 @@ class DefaultAdapter extends Adapter {
26
23
  return new PaperSpotExecutor(adapter);
27
24
  }
28
25
 
29
- @handler(AdapterAwakeCommand)
30
- onAwake(command: AdapterAwakeCommand, context: AdapterContext) {
31
- context.store.dispatch(
26
+ async awake(context: AdapterContext): Promise<void> {
27
+ await super.awake(context);
28
+
29
+ context.dispatch(
32
30
  new InstrumentPatchEvent(
33
31
  context.timestamp,
34
32
  base,
@@ -88,12 +86,8 @@ describe('backtester adapter tests', () => {
88
86
 
89
87
  const sut = new BacktesterAdapter(adapter, streamer);
90
88
 
91
- sut.dispatch(new AdapterAwakeCommand(), new AdapterContext(sut, store));
92
-
93
- sut.dispatch(
94
- new AdapterSubscribeCommand([instrument]),
95
- new AdapterContext(sut, store)
96
- );
89
+ sut.awake(new AdapterContext(sut, store));
90
+ sut.subscribe([instrument]);
97
91
 
98
92
  expect(sut.name).toEqual('default');
99
93
  });
@@ -1,4 +1,4 @@
1
- import { SessionDescriptor } from '../session';
1
+ import { SessionDescriptor } from '../domain';
2
2
  import { assetOf, instrumentOf, Timeframe } from '../domain';
3
3
  import { finalize, tap } from 'rxjs/operators';
4
4
  /*
@@ -1,43 +0,0 @@
1
- import { Feed } from '../storage';
2
- import { timestamp } from '../shared';
3
- import { InstrumentSelector, Order } from '../domain';
4
- export declare class AdapterAwakeCommand {
5
- type: string;
6
- }
7
- export declare class AdapterDisposeCommand {
8
- type: string;
9
- }
10
- export declare class AdapterAccountCommand {
11
- type: string;
12
- }
13
- export declare class AdapterSubscribeCommand {
14
- readonly instrument: Array<InstrumentSelector>;
15
- type: string;
16
- constructor(instrument: Array<InstrumentSelector>);
17
- }
18
- export declare class AdapterOrderOpenCommand {
19
- readonly order: Order;
20
- type: string;
21
- constructor(order: Order);
22
- }
23
- export declare class AdapterOrderCancelCommand {
24
- readonly order: Order;
25
- type: string;
26
- constructor(order: Order);
27
- }
28
- export declare class AdapterHistoryQuery {
29
- readonly instrument: InstrumentSelector;
30
- readonly timeframe: number;
31
- readonly length: number;
32
- type: string;
33
- constructor(instrument: InstrumentSelector, timeframe: number, length: number);
34
- }
35
- export declare class AdapterFeedCommand {
36
- readonly instrument: InstrumentSelector;
37
- readonly from: timestamp;
38
- readonly to: timestamp;
39
- readonly feed: Feed;
40
- readonly progress: (timestamp: number) => void;
41
- type: string;
42
- constructor(instrument: InstrumentSelector, from: timestamp, to: timestamp, feed: Feed, progress: (timestamp: number) => void);
43
- }
@@ -1,104 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.AdapterFeedCommand = exports.AdapterHistoryQuery = exports.AdapterOrderCancelCommand = exports.AdapterOrderOpenCommand = exports.AdapterSubscribeCommand = exports.AdapterAccountCommand = exports.AdapterDisposeCommand = exports.AdapterAwakeCommand = void 0;
13
- const storage_1 = require("../storage");
14
- const domain_1 = require("../domain");
15
- const topic_1 = require("../shared/topic");
16
- let AdapterAwakeCommand = class AdapterAwakeCommand {
17
- constructor() {
18
- this.type = 'awake';
19
- }
20
- };
21
- AdapterAwakeCommand = __decorate([
22
- topic_1.event
23
- ], AdapterAwakeCommand);
24
- exports.AdapterAwakeCommand = AdapterAwakeCommand;
25
- let AdapterDisposeCommand = class AdapterDisposeCommand {
26
- constructor() {
27
- this.type = 'dispose';
28
- }
29
- };
30
- AdapterDisposeCommand = __decorate([
31
- topic_1.event
32
- ], AdapterDisposeCommand);
33
- exports.AdapterDisposeCommand = AdapterDisposeCommand;
34
- let AdapterAccountCommand = class AdapterAccountCommand {
35
- constructor() {
36
- this.type = 'account';
37
- }
38
- };
39
- AdapterAccountCommand = __decorate([
40
- topic_1.event
41
- ], AdapterAccountCommand);
42
- exports.AdapterAccountCommand = AdapterAccountCommand;
43
- let AdapterSubscribeCommand = class AdapterSubscribeCommand {
44
- constructor(instrument) {
45
- this.instrument = instrument;
46
- this.type = 'subscribe';
47
- }
48
- };
49
- AdapterSubscribeCommand = __decorate([
50
- topic_1.event,
51
- __metadata("design:paramtypes", [Array])
52
- ], AdapterSubscribeCommand);
53
- exports.AdapterSubscribeCommand = AdapterSubscribeCommand;
54
- let AdapterOrderOpenCommand = class AdapterOrderOpenCommand {
55
- constructor(order) {
56
- this.order = order;
57
- this.type = 'order-open';
58
- }
59
- };
60
- AdapterOrderOpenCommand = __decorate([
61
- topic_1.event,
62
- __metadata("design:paramtypes", [domain_1.Order])
63
- ], AdapterOrderOpenCommand);
64
- exports.AdapterOrderOpenCommand = AdapterOrderOpenCommand;
65
- let AdapterOrderCancelCommand = class AdapterOrderCancelCommand {
66
- constructor(order) {
67
- this.order = order;
68
- this.type = 'order-cancel';
69
- }
70
- };
71
- AdapterOrderCancelCommand = __decorate([
72
- topic_1.event,
73
- __metadata("design:paramtypes", [domain_1.Order])
74
- ], AdapterOrderCancelCommand);
75
- exports.AdapterOrderCancelCommand = AdapterOrderCancelCommand;
76
- let AdapterHistoryQuery = class AdapterHistoryQuery {
77
- constructor(instrument, timeframe, length) {
78
- this.instrument = instrument;
79
- this.timeframe = timeframe;
80
- this.length = length;
81
- this.type = 'history';
82
- }
83
- };
84
- AdapterHistoryQuery = __decorate([
85
- topic_1.event,
86
- __metadata("design:paramtypes", [domain_1.InstrumentSelector, Number, Number])
87
- ], AdapterHistoryQuery);
88
- exports.AdapterHistoryQuery = AdapterHistoryQuery;
89
- let AdapterFeedCommand = class AdapterFeedCommand {
90
- constructor(instrument, from, to, feed, progress) {
91
- this.instrument = instrument;
92
- this.from = from;
93
- this.to = to;
94
- this.feed = feed;
95
- this.progress = progress;
96
- this.type = 'feed';
97
- }
98
- };
99
- AdapterFeedCommand = __decorate([
100
- topic_1.event,
101
- __metadata("design:paramtypes", [domain_1.InstrumentSelector, Number, Number, storage_1.Feed, Function])
102
- ], AdapterFeedCommand);
103
- exports.AdapterFeedCommand = AdapterFeedCommand;
104
- //# sourceMappingURL=adapter.event.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.event.js","sourceRoot":"","sources":["../../src/adapter/adapter.event.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAAkC;AAElC,sCAAsD;AACtD,2CAAwC;AAGxC,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAAhC;QACE,SAAI,GAAG,OAAO,CAAC;IACjB,CAAC;CAAA,CAAA;AAFY,mBAAmB;IAD/B,aAAK;GACO,mBAAmB,CAE/B;AAFY,kDAAmB;AAKhC,IAAa,qBAAqB,GAAlC,MAAa,qBAAqB;IAAlC;QACE,SAAI,GAAG,SAAS,CAAC;IACnB,CAAC;CAAA,CAAA;AAFY,qBAAqB;IADjC,aAAK;GACO,qBAAqB,CAEjC;AAFY,sDAAqB;AAKlC,IAAa,qBAAqB,GAAlC,MAAa,qBAAqB;IAAlC;QACE,SAAI,GAAG,SAAS,CAAC;IACnB,CAAC;CAAA,CAAA;AAFY,qBAAqB;IADjC,aAAK;GACO,qBAAqB,CAEjC;AAFY,sDAAqB;AAKlC,IAAa,uBAAuB,GAApC,MAAa,uBAAuB;IAGlC,YAAqB,UAAqC;QAArC,eAAU,GAAV,UAAU,CAA2B;QAF1D,SAAI,GAAG,WAAW,CAAC;IAE0C,CAAC;CAC/D,CAAA;AAJY,uBAAuB;IADnC,aAAK;qCAI6B,KAAK;GAH3B,uBAAuB,CAInC;AAJY,0DAAuB;AAOpC,IAAa,uBAAuB,GAApC,MAAa,uBAAuB;IAGlC,YAAqB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;QAFjC,SAAI,GAAG,YAAY,CAAC;IAEgB,CAAC;CACtC,CAAA;AAJY,uBAAuB;IADnC,aAAK;qCAIwB,cAAK;GAHtB,uBAAuB,CAInC;AAJY,0DAAuB;AAOpC,IAAa,yBAAyB,GAAtC,MAAa,yBAAyB;IAGpC,YAAqB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;QAFjC,SAAI,GAAG,cAAc,CAAC;IAEc,CAAC;CACtC,CAAA;AAJY,yBAAyB;IADrC,aAAK;qCAIwB,cAAK;GAHtB,yBAAyB,CAIrC;AAJY,8DAAyB;AAOtC,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAG9B,YACW,UAA8B,EAC9B,SAAiB,EACjB,MAAc;QAFd,eAAU,GAAV,UAAU,CAAoB;QAC9B,cAAS,GAAT,SAAS,CAAQ;QACjB,WAAM,GAAN,MAAM,CAAQ;QALzB,SAAI,GAAG,SAAS,CAAC;IAMd,CAAC;CACL,CAAA;AARY,mBAAmB;IAD/B,aAAK;qCAKmB,2BAAkB;GAJ9B,mBAAmB,CAQ/B;AARY,kDAAmB;AAWhC,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAG7B,YACW,UAA8B,EAC9B,IAAe,EACf,EAAa,EACb,IAAU,EACV,QAAqC;QAJrC,eAAU,GAAV,UAAU,CAAoB;QAC9B,SAAI,GAAJ,IAAI,CAAW;QACf,OAAE,GAAF,EAAE,CAAW;QACb,SAAI,GAAJ,IAAI,CAAM;QACV,aAAQ,GAAR,QAAQ,CAA6B;QAPhD,SAAI,GAAG,MAAM,CAAC;IAQX,CAAC;CACL,CAAA;AAVY,kBAAkB;IAD9B,aAAK;qCAKmB,2BAAkB,kBAGxB,cAAI;GAPV,kBAAkB,CAU9B;AAVY,gDAAkB"}
@@ -1,4 +0,0 @@
1
- export * from './session';
2
- export * from './session-descriptor';
3
- export * from './session-optimizer';
4
- export * from './session-statement';
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
- };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./session"), exports);
14
- __exportStar(require("./session-descriptor"), exports);
15
- __exportStar(require("./session-optimizer"), exports);
16
- __exportStar(require("./session-statement"), exports);
17
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAA0B;AAC1B,uDAAqC;AACrC,sDAAoC;AACpC,sDAAoC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-descriptor.js","sourceRoot":"","sources":["../../src/session/session-descriptor.ts"],"names":[],"mappings":""}
@@ -1,10 +0,0 @@
1
- export declare function fit(key: string, generator?: any[]): (target: any, propertyKey: string) => void;
2
- export declare class SessionOptimizer {
3
- static source: any;
4
- static provide(key: string): any;
5
- }
6
- export declare class SessionOptimizerGenerator {
7
- static values: Record<string, any[]>;
8
- static get count(): number;
9
- static product(): any[];
10
- }
@@ -1,62 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SessionOptimizerGenerator = exports.SessionOptimizer = exports.fit = void 0;
4
- function fit(key, generator) {
5
- return function (target, propertyKey) {
6
- let defaultSetterValue;
7
- if (generator) {
8
- SessionOptimizerGenerator.values[key] = generator;
9
- }
10
- Object.defineProperty(target, propertyKey, {
11
- get: () => { var _a; return (_a = SessionOptimizer.provide(key)) !== null && _a !== void 0 ? _a : defaultSetterValue; },
12
- set: (newValue) => {
13
- if (!defaultSetterValue) {
14
- defaultSetterValue = newValue;
15
- return;
16
- }
17
- if (defaultSetterValue == newValue) {
18
- return;
19
- }
20
- throw new Error('can not set a value of optimized property.');
21
- }
22
- });
23
- };
24
- }
25
- exports.fit = fit;
26
- class SessionOptimizer {
27
- static provide(key) {
28
- return key
29
- .split('.')
30
- .reduce((aggregate, propertyName) => (aggregate ? aggregate[propertyName] : null), this.source);
31
- }
32
- }
33
- exports.SessionOptimizer = SessionOptimizer;
34
- SessionOptimizer.source = {};
35
- class SessionOptimizerGenerator {
36
- static get count() {
37
- return Object.values(this.values).reduce((aggregate, value) => (aggregate *= value.length), 1);
38
- }
39
- static product() {
40
- const matrix = [];
41
- const keys = Object.keys(this.values);
42
- const values = Object.values(this.values).reduce((a, b) => a.map(x => b.map(y => x.concat(y))).reduce((a, b) => a.concat(b), []), [[]]);
43
- for (const value of values) {
44
- const result = {};
45
- for (let i = 0; i < keys.length; i++) {
46
- const path = keys[i];
47
- const parts = path.split('.');
48
- let it = result;
49
- while (parts.length > 1) {
50
- const part = parts.shift();
51
- it = it[part] = it[part] || {};
52
- }
53
- it[parts[0]] = value[i];
54
- }
55
- matrix.push(result);
56
- }
57
- return matrix;
58
- }
59
- }
60
- exports.SessionOptimizerGenerator = SessionOptimizerGenerator;
61
- SessionOptimizerGenerator.values = {};
62
- //# sourceMappingURL=session-optimizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-optimizer.js","sourceRoot":"","sources":["../../src/session/session-optimizer.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,103 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const domain_1 = require("../domain");
13
- const session_optimizer_1 = require("./session-optimizer");
14
- describe('session optimizer tests', () => {
15
- test('should ignore not provided value for property', () => {
16
- class Target {
17
- constructor() {
18
- this.timeframe = domain_1.Timeframe.H1;
19
- }
20
- }
21
- __decorate([
22
- (0, session_optimizer_1.fit)('timeframe'),
23
- __metadata("design:type", Object)
24
- ], Target.prototype, "timeframe", void 0);
25
- const sut = new Target();
26
- expect(sut.timeframe).toBe(domain_1.Timeframe.H1);
27
- });
28
- test('should ignore not provided descendant value for property', () => {
29
- class Target {
30
- constructor() {
31
- this.timeframe = domain_1.Timeframe.H1;
32
- }
33
- }
34
- __decorate([
35
- (0, session_optimizer_1.fit)('timeframe.daily'),
36
- __metadata("design:type", Object)
37
- ], Target.prototype, "timeframe", void 0);
38
- const sut = new Target();
39
- expect(sut.timeframe).toBe(domain_1.Timeframe.H1);
40
- });
41
- test('should set provided value for property', () => {
42
- class Target {
43
- constructor() {
44
- this.timeframe = domain_1.Timeframe.H1;
45
- }
46
- }
47
- __decorate([
48
- (0, session_optimizer_1.fit)('timeframe'),
49
- __metadata("design:type", Object)
50
- ], Target.prototype, "timeframe", void 0);
51
- session_optimizer_1.SessionOptimizer.source = {
52
- timeframe: domain_1.Timeframe.D1
53
- };
54
- const sut = new Target();
55
- expect(sut.timeframe).toBe(domain_1.Timeframe.D1);
56
- });
57
- test('should set provided descendant value for property', () => {
58
- class Target {
59
- constructor() {
60
- this.timeframe = domain_1.Timeframe.H1;
61
- }
62
- }
63
- __decorate([
64
- (0, session_optimizer_1.fit)('timeframe.daily'),
65
- __metadata("design:type", Object)
66
- ], Target.prototype, "timeframe", void 0);
67
- session_optimizer_1.SessionOptimizer.source = {
68
- timeframe: {
69
- daily: domain_1.Timeframe.D1
70
- }
71
- };
72
- const sut = new Target();
73
- expect(sut.timeframe).toBe(domain_1.Timeframe.D1);
74
- });
75
- });
76
- describe('optimizer generator tests', () => {
77
- test('should generate optimized input', () => {
78
- class Target {
79
- }
80
- __decorate([
81
- (0, session_optimizer_1.fit)('target.timeframe', [domain_1.Timeframe.D1, domain_1.Timeframe.H1]),
82
- __metadata("design:type", Object)
83
- ], Target.prototype, "timeframe", void 0);
84
- __decorate([
85
- (0, session_optimizer_1.fit)('target.length', [7, 14, 21]),
86
- __metadata("design:type", Object)
87
- ], Target.prototype, "length", void 0);
88
- __decorate([
89
- (0, session_optimizer_1.fit)('target.size', [0.1, 0.2, 0.3, 0.4]),
90
- __metadata("design:type", Object)
91
- ], Target.prototype, "size", void 0);
92
- expect(session_optimizer_1.SessionOptimizerGenerator.count).toBe(24);
93
- const product = session_optimizer_1.SessionOptimizerGenerator.product();
94
- expect(product.length).toBe(24);
95
- expect(product[0].target.timeframe).toBe(domain_1.Timeframe.D1);
96
- expect(product[0].target.length).toBe(7);
97
- expect(product[0].target.size).toBe(0.1);
98
- expect(product[23].target.timeframe).toBe(domain_1.Timeframe.H1);
99
- expect(product[23].target.length).toBe(21);
100
- expect(product[23].target.size).toBe(0.4);
101
- });
102
- });
103
- //# sourceMappingURL=session-optimizer.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-optimizer.spec.js","sourceRoot":"","sources":["../../src/session/session-optimizer.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-statement.js","sourceRoot":"","sources":["../../src/session/session-statement.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.spec.js","sourceRoot":"","sources":["../../src/session/session.spec.ts"],"names":[],"mappings":";;AAAA,0CAAsD;AACtD,sCAA8C;AAC9C,sCAAgC;AAEhC,4CAAyC;AAEzC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,UAAU,GAAsB;QACpC,EAAE,EAAE,IAAA,YAAG,GAAE;QACT,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,EAAE;QACjC,MAAM,OAAO,GAAG,IAAI,qBAAS,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;QAElD,OAAO,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;YAC9B,IAAI,EAAE,EAAE,CAAC,EAAE;gBACT,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;YACD,QAAQ,EAAE,IAAI,EAAE;SACjB,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,QAAQ,CACpB,IAAI,4BAAoB,CACtB,IAAA,YAAG,GAAE,EACL,IAAI,cAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAC3B,IAAI,cAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAC1B,IAAI,mBAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,EAAE,CACH,EACD,IAAI,4BAAoB,CACtB,IAAA,YAAG,GAAE,EACL,IAAI,cAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAC5B,IAAI,cAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAC1B,IAAI,mBAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,EAAE,CACH,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}