@vuu-ui/vuu-data-test 2.1.19-beta.1 → 2.1.19-beta.2

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 (61) hide show
  1. package/package.json +8 -9
  2. package/src/ArrayProxy.js +38 -0
  3. package/src/RuntimeVisualLink.js +45 -0
  4. package/src/SessionTable.js +49 -0
  5. package/src/Table.js +96 -0
  6. package/src/TickingArrayDataSource.js +208 -0
  7. package/src/UpdateGenerator.js +72 -0
  8. package/src/basket/BasketModule.js +272 -0
  9. package/src/basket/basket-schemas.js +355 -0
  10. package/src/basket/index.js +2 -0
  11. package/src/basket/reference-data/constituents.js +76 -0
  12. package/src/basket/reference-data/ftse100.js +686 -0
  13. package/src/basket/reference-data/hsi.js +1047 -0
  14. package/src/basket/reference-data/nasdaq100.js +812 -0
  15. package/src/basket/reference-data/prices.js +43 -0
  16. package/src/basket/reference-data/sp500.js +315 -0
  17. package/src/core/module/ModuleContainer.js +21 -0
  18. package/src/core/module/VuuModule.js +476 -0
  19. package/src/core/table/TableContainer.js +97 -0
  20. package/src/data-utils.js +53 -0
  21. package/src/index.js +13 -0
  22. package/src/local-datasource-provider/LocalDatasourceProvider.js +44 -0
  23. package/src/makeSuggestions.js +20 -0
  24. package/src/rowUpdates.js +0 -0
  25. package/src/schemas.js +19 -0
  26. package/src/session-table-utils.js +16 -0
  27. package/src/simul/SimulModule.js +175 -0
  28. package/src/simul/index.js +2 -0
  29. package/src/simul/reference-data/accounts.js +23 -0
  30. package/src/simul/reference-data/algos.js +9 -0
  31. package/src/simul/reference-data/currencies.js +8 -0
  32. package/src/simul/reference-data/index.js +5 -0
  33. package/src/simul/reference-data/instrument-prices.js +48 -0
  34. package/src/simul/reference-data/instruments-extended.js +12 -0
  35. package/src/simul/reference-data/instruments.js +67 -0
  36. package/src/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +2 -0
  37. package/src/simul/reference-data/isin-generator/fixtures/alphabet.js +27 -0
  38. package/src/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +7 -0
  39. package/src/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +13 -0
  40. package/src/simul/reference-data/isin-generator/generate-cusip-check-code.js +17 -0
  41. package/src/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +8 -0
  42. package/src/simul/reference-data/isin-generator/generate-cusip.js +8 -0
  43. package/src/simul/reference-data/isin-generator/generate-random-alphanumeric.js +3 -0
  44. package/src/simul/reference-data/isin-generator/generate-random-base-ten-number.js +2 -0
  45. package/src/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +7 -0
  46. package/src/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +7 -0
  47. package/src/simul/reference-data/isin-generator/index.js +280 -0
  48. package/src/simul/reference-data/isin-generator/is-odd.js +2 -0
  49. package/src/simul/reference-data/locations.js +45 -0
  50. package/src/simul/reference-data/lotsizes.js +24 -0
  51. package/src/simul/reference-data/orderStatus.js +6 -0
  52. package/src/simul/reference-data/orders.js +64 -0
  53. package/src/simul/reference-data/parent-child-orders.js +117 -0
  54. package/src/simul/reference-data/priceStrategies.js +8 -0
  55. package/src/simul/reference-data/prices.js +78 -0
  56. package/src/simul/reference-data/sides.js +5 -0
  57. package/src/simul/simul-schemas.js +428 -0
  58. package/src/test/TestModule.js +95 -0
  59. package/src/test/index.js +1 -0
  60. package/src/test/test-schemas.js +74 -0
  61. package/src/vuu-row-generator.js +71 -0
@@ -0,0 +1,272 @@
1
+ import { VuuModule } from "../core/module/VuuModule.js";
2
+ import TableContainer from "../core/table/TableContainer.js";
3
+ import { schemas } from "./basket-schemas.js";
4
+ import reference_data_constituents from "./reference-data/constituents.js";
5
+ const { createTable: createTable } = TableContainer;
6
+ let basketIncrement = 1;
7
+ const createBasketTradingRow = (basketId, basketName, side = "BUY", status = "OFF MARKET")=>[
8
+ basketId,
9
+ basketName,
10
+ 0,
11
+ 1.25,
12
+ `steve-${basketIncrement++}`,
13
+ side,
14
+ status,
15
+ 1000000,
16
+ 1250000,
17
+ 100
18
+ ];
19
+ const undefinedTables = {
20
+ algoType: void 0,
21
+ basket: void 0,
22
+ basketTrading: void 0,
23
+ basketTradingConstituent: void 0,
24
+ basketConstituent: void 0,
25
+ basketTradingConstituentJoin: void 0,
26
+ priceStrategyType: void 0
27
+ };
28
+ const buildDataColumnMap = (tableName)=>Object.values(schemas[tableName].columns).reduce((map, col, index)=>{
29
+ map[col.name] = index;
30
+ return map;
31
+ }, {});
32
+ const tableMaps = {
33
+ algoType: buildDataColumnMap("algoType"),
34
+ basket: buildDataColumnMap("basket"),
35
+ basketTrading: buildDataColumnMap("basketTrading"),
36
+ basketTradingConstituent: buildDataColumnMap("basketTradingConstituent"),
37
+ basketConstituent: buildDataColumnMap("basketConstituent"),
38
+ basketTradingConstituentJoin: buildDataColumnMap("basketTradingConstituentJoin"),
39
+ priceStrategyType: buildDataColumnMap("priceStrategyType")
40
+ };
41
+ const basketTradingConstituent = TableContainer.createTable(schemas.basketTradingConstituent, [], tableMaps.basketTradingConstituent);
42
+ class BasketModule extends VuuModule {
43
+ #tables = {
44
+ algoType: createTable(schemas.algoType, [
45
+ [
46
+ "Sniper",
47
+ 0
48
+ ],
49
+ [
50
+ "Dark Liquidity",
51
+ 1
52
+ ],
53
+ [
54
+ "VWAP",
55
+ 2
56
+ ],
57
+ [
58
+ "POV",
59
+ 3
60
+ ],
61
+ [
62
+ "Dynamic Close",
63
+ 4
64
+ ]
65
+ ], tableMaps.algoType),
66
+ basket: createTable(schemas.basket, [
67
+ [
68
+ ".NASDAQ100",
69
+ ".NASDAQ100",
70
+ 0,
71
+ 0
72
+ ],
73
+ [
74
+ ".HSI",
75
+ ".HSI",
76
+ 0,
77
+ 0
78
+ ],
79
+ [
80
+ ".FTSE100",
81
+ ".FTSE100",
82
+ 0,
83
+ 0
84
+ ],
85
+ [
86
+ ".SP500",
87
+ ".SP500",
88
+ 0,
89
+ 0
90
+ ]
91
+ ], tableMaps.basket),
92
+ basketConstituent: createTable(schemas.basketConstituent, reference_data_constituents, tableMaps.basketConstituent),
93
+ basketTrading: createTable(schemas.basketTrading, [], tableMaps.basketTrading),
94
+ basketTradingConstituent: basketTradingConstituent,
95
+ basketTradingConstituentJoin: TableContainer.createJoinTable({
96
+ module: "BASKET",
97
+ table: "basketTradingConstituentJoin"
98
+ }, {
99
+ module: "BASKET",
100
+ table: "basketTradingConstituent"
101
+ }, {
102
+ module: "SIMUL",
103
+ table: "prices"
104
+ }, "ric"),
105
+ priceStrategyType: createTable(schemas.priceStrategyType, [
106
+ [
107
+ "Peg to Near Touch",
108
+ 0
109
+ ],
110
+ [
111
+ "Far Touch",
112
+ 1
113
+ ],
114
+ [
115
+ "Limit",
116
+ 2
117
+ ],
118
+ [
119
+ "Algo",
120
+ 3
121
+ ]
122
+ ], tableMaps.priceStrategyType)
123
+ };
124
+ constructor(){
125
+ super("BASKET");
126
+ }
127
+ get menus() {
128
+ return {
129
+ ...undefinedTables,
130
+ basket: {
131
+ name: "ROOT",
132
+ menus: [
133
+ {
134
+ context: "selected-rows",
135
+ filter: "",
136
+ name: "Add Basket",
137
+ rpcName: "CREATE_NEW_BASKET"
138
+ }
139
+ ]
140
+ }
141
+ };
142
+ }
143
+ get schemas() {
144
+ return schemas;
145
+ }
146
+ get services() {
147
+ return {
148
+ ...undefinedTables,
149
+ basket: [
150
+ {
151
+ rpcName: "createBasket",
152
+ service: this.createNewBasket
153
+ }
154
+ ],
155
+ basketTrading: [
156
+ {
157
+ rpcName: "sendToMarket",
158
+ service: this.sendToMarket
159
+ },
160
+ {
161
+ rpcName: "takeOffMarket",
162
+ service: this.takeOffMarket
163
+ }
164
+ ],
165
+ basketTradingConstituentJoin: [
166
+ {
167
+ rpcName: "addConstituent",
168
+ service: this.addConstituent
169
+ }
170
+ ]
171
+ };
172
+ }
173
+ get menuServices() {
174
+ return {
175
+ ...undefinedTables
176
+ };
177
+ }
178
+ get tables() {
179
+ return this.#tables;
180
+ }
181
+ get visualLinks() {
182
+ return {
183
+ ...undefinedTables,
184
+ basketConstituent: [
185
+ {
186
+ fromColumn: "basketId",
187
+ toColumn: "id",
188
+ toTable: "basket"
189
+ }
190
+ ]
191
+ };
192
+ }
193
+ createTradingBasket(basketId, basketName) {
194
+ const basketTradingRow = createBasketTradingRow(basketId, basketName);
195
+ this.tables.basketTrading.insert(basketTradingRow);
196
+ const { basketId: key } = buildDataColumnMap("basketConstituent");
197
+ const constituents = this.tables.basketConstituent.data.filter((c)=>c[key] === basketId);
198
+ const { instanceId } = tableMaps.basketTrading;
199
+ constituents.forEach(([, , description, , ric, , , quantity, weighting])=>{
200
+ const algo = "";
201
+ const algoParams = "";
202
+ const limitPrice = 95;
203
+ const notionalLocal = 0;
204
+ const notionalUsd = 0;
205
+ const pctFilled = 0;
206
+ const priceSpread = 0;
207
+ const priceStrategyId = "";
208
+ const side = "BUY";
209
+ const venue = "venue";
210
+ const basketInstanceId = basketTradingRow[instanceId];
211
+ const basketTradingConstituentRow = [
212
+ algo,
213
+ algoParams,
214
+ basketId,
215
+ description,
216
+ basketInstanceId,
217
+ `${basketInstanceId}-${ric}`,
218
+ limitPrice,
219
+ notionalLocal,
220
+ notionalUsd,
221
+ pctFilled,
222
+ priceSpread,
223
+ priceStrategyId,
224
+ quantity,
225
+ ric,
226
+ side,
227
+ venue,
228
+ weighting
229
+ ];
230
+ basketTradingConstituent.insert(basketTradingConstituentRow);
231
+ });
232
+ return basketTradingRow[instanceId];
233
+ }
234
+ createNewBasket = async (rpcRequest)=>{
235
+ if ("VIEWPORT_CONTEXT" === rpcRequest.context.type) {
236
+ const { sourceBasketId, tradeBasketName } = rpcRequest.params;
237
+ const key = this.createTradingBasket(sourceBasketId, tradeBasketName);
238
+ return {
239
+ type: "SUCCESS_RESULT",
240
+ data: key
241
+ };
242
+ }
243
+ throw Error("[BasketModule] createNewBasket invalid request type");
244
+ };
245
+ sendToMarket = async (rpcRequest)=>{
246
+ if ("VIEWPORT_CONTEXT" === rpcRequest.context.type) {
247
+ const { basketInstanceId } = rpcRequest.params;
248
+ this.tables.basketTrading.update(basketInstanceId, "status", "ON_MARKET");
249
+ return {
250
+ type: "SUCCESS_RESULT",
251
+ data: void 0
252
+ };
253
+ }
254
+ throw Error("[BasketModule] createNewBasket invalid request type");
255
+ };
256
+ takeOffMarket = async (rpcRequest)=>{
257
+ if ("VIEWPORT_CONTEXT" === rpcRequest.context.type) {
258
+ const { basketInstanceId } = rpcRequest.params;
259
+ this.tables.basketTrading.update(basketInstanceId, "status", "OFF-MARKET");
260
+ return {
261
+ type: "SUCCESS_RESULT",
262
+ data: void 0
263
+ };
264
+ }
265
+ throw Error("[BasketModule] createNewBasket invalid request type");
266
+ };
267
+ addConstituent = async ()=>{
268
+ throw Error("addConstituent not implemented");
269
+ };
270
+ }
271
+ const basketModule = new BasketModule();
272
+ export { BasketModule, basketModule, createBasketTradingRow };
@@ -0,0 +1,355 @@
1
+ const schemas = {
2
+ algoType: {
3
+ columns: [
4
+ {
5
+ name: "algoType",
6
+ serverDataType: "string"
7
+ },
8
+ {
9
+ name: "id",
10
+ serverDataType: "int"
11
+ }
12
+ ],
13
+ key: "id",
14
+ table: {
15
+ module: "BASKET",
16
+ table: "algoType"
17
+ }
18
+ },
19
+ basket: {
20
+ columns: [
21
+ {
22
+ name: "id",
23
+ serverDataType: "string"
24
+ },
25
+ {
26
+ name: "name",
27
+ serverDataType: "string"
28
+ },
29
+ {
30
+ name: "notionalValue",
31
+ serverDataType: "double"
32
+ },
33
+ {
34
+ name: "notionalValueUsd",
35
+ serverDataType: "double"
36
+ }
37
+ ],
38
+ key: "id",
39
+ table: {
40
+ module: "BASKET",
41
+ table: "basket"
42
+ }
43
+ },
44
+ basketConstituent: {
45
+ columns: [
46
+ {
47
+ name: "basketId",
48
+ serverDataType: "string"
49
+ },
50
+ {
51
+ name: "change",
52
+ serverDataType: "string"
53
+ },
54
+ {
55
+ name: "description",
56
+ serverDataType: "string"
57
+ },
58
+ {
59
+ name: "lastTrade",
60
+ serverDataType: "string"
61
+ },
62
+ {
63
+ name: "ric",
64
+ serverDataType: "string"
65
+ },
66
+ {
67
+ name: "ricBasketId",
68
+ serverDataType: "string"
69
+ },
70
+ {
71
+ name: "side",
72
+ serverDataType: "string"
73
+ },
74
+ {
75
+ name: "volume",
76
+ serverDataType: "string"
77
+ },
78
+ {
79
+ name: "weighting",
80
+ serverDataType: "double"
81
+ }
82
+ ],
83
+ key: "ricBasketId",
84
+ table: {
85
+ module: "BASKET",
86
+ table: "basketConstituent"
87
+ }
88
+ },
89
+ basketTrading: {
90
+ columns: [
91
+ {
92
+ name: "basketId",
93
+ serverDataType: "string"
94
+ },
95
+ {
96
+ name: "basketName",
97
+ serverDataType: "string"
98
+ },
99
+ {
100
+ name: "filledPct",
101
+ serverDataType: "double"
102
+ },
103
+ {
104
+ name: "fxRateToUsd",
105
+ serverDataType: "double"
106
+ },
107
+ {
108
+ name: "instanceId",
109
+ serverDataType: "string"
110
+ },
111
+ {
112
+ name: "side",
113
+ serverDataType: "string"
114
+ },
115
+ {
116
+ name: "status",
117
+ serverDataType: "string"
118
+ },
119
+ {
120
+ name: "totalNotional",
121
+ serverDataType: "double"
122
+ },
123
+ {
124
+ name: "totalNotionalUsd",
125
+ serverDataType: "double"
126
+ },
127
+ {
128
+ name: "units",
129
+ serverDataType: "int"
130
+ }
131
+ ],
132
+ key: "instanceId",
133
+ table: {
134
+ module: "BASKET",
135
+ table: "basketTrading"
136
+ }
137
+ },
138
+ basketTradingConstituent: {
139
+ columns: [
140
+ {
141
+ name: "algo",
142
+ serverDataType: "string"
143
+ },
144
+ {
145
+ name: "algoParams",
146
+ serverDataType: "string"
147
+ },
148
+ {
149
+ name: "basketId",
150
+ serverDataType: "string"
151
+ },
152
+ {
153
+ name: "description",
154
+ serverDataType: "string"
155
+ },
156
+ {
157
+ name: "instanceId",
158
+ serverDataType: "string"
159
+ },
160
+ {
161
+ name: "instanceIdRic",
162
+ serverDataType: "string"
163
+ },
164
+ {
165
+ name: "limitPrice",
166
+ serverDataType: "double"
167
+ },
168
+ {
169
+ name: "notionalLocal",
170
+ serverDataType: "double"
171
+ },
172
+ {
173
+ name: "notionalUsd",
174
+ serverDataType: "double"
175
+ },
176
+ {
177
+ name: "pctFilled",
178
+ serverDataType: "double"
179
+ },
180
+ {
181
+ name: "priceSpread",
182
+ serverDataType: "int"
183
+ },
184
+ {
185
+ name: "priceStrategyId",
186
+ serverDataType: "int"
187
+ },
188
+ {
189
+ name: "quantity",
190
+ serverDataType: "long"
191
+ },
192
+ {
193
+ name: "ric",
194
+ serverDataType: "string"
195
+ },
196
+ {
197
+ name: "side",
198
+ serverDataType: "string"
199
+ },
200
+ {
201
+ name: "status",
202
+ serverDataType: "string"
203
+ },
204
+ {
205
+ name: "venue",
206
+ serverDataType: "string"
207
+ },
208
+ {
209
+ name: "weighting",
210
+ serverDataType: "double"
211
+ }
212
+ ],
213
+ key: "instanceIdRic",
214
+ table: {
215
+ module: "BASKET",
216
+ table: "basketTradingConstituent"
217
+ }
218
+ },
219
+ basketTradingConstituentJoin: {
220
+ columns: [
221
+ {
222
+ name: "algo",
223
+ serverDataType: "string"
224
+ },
225
+ {
226
+ name: "algoParams",
227
+ serverDataType: "string"
228
+ },
229
+ {
230
+ name: "ask",
231
+ serverDataType: "double"
232
+ },
233
+ {
234
+ name: "askSize",
235
+ serverDataType: "double"
236
+ },
237
+ {
238
+ name: "basketId",
239
+ serverDataType: "string"
240
+ },
241
+ {
242
+ name: "bid",
243
+ serverDataType: "double"
244
+ },
245
+ {
246
+ name: "bidSize",
247
+ serverDataType: "double"
248
+ },
249
+ {
250
+ name: "close",
251
+ serverDataType: "double"
252
+ },
253
+ {
254
+ name: "description",
255
+ serverDataType: "string"
256
+ },
257
+ {
258
+ name: "instanceId",
259
+ serverDataType: "string"
260
+ },
261
+ {
262
+ name: "instanceIdRic",
263
+ serverDataType: "string"
264
+ },
265
+ {
266
+ name: "last",
267
+ serverDataType: "double"
268
+ },
269
+ {
270
+ name: "limitPrice",
271
+ serverDataType: "double"
272
+ },
273
+ {
274
+ name: "notionalLocal",
275
+ serverDataType: "double"
276
+ },
277
+ {
278
+ name: "notionalUsd",
279
+ serverDataType: "double"
280
+ },
281
+ {
282
+ name: "open",
283
+ serverDataType: "double"
284
+ },
285
+ {
286
+ name: "pctFilled",
287
+ serverDataType: "double"
288
+ },
289
+ {
290
+ name: "phase",
291
+ serverDataType: "string"
292
+ },
293
+ {
294
+ name: "priceSpread",
295
+ serverDataType: "int"
296
+ },
297
+ {
298
+ name: "priceStrategyId",
299
+ serverDataType: "int"
300
+ },
301
+ {
302
+ name: "quantity",
303
+ serverDataType: "long"
304
+ },
305
+ {
306
+ name: "ric",
307
+ serverDataType: "string"
308
+ },
309
+ {
310
+ name: "scenario",
311
+ serverDataType: "string"
312
+ },
313
+ {
314
+ name: "side",
315
+ serverDataType: "string"
316
+ },
317
+ {
318
+ name: "status",
319
+ serverDataType: "string"
320
+ },
321
+ {
322
+ name: "venue",
323
+ serverDataType: "string"
324
+ },
325
+ {
326
+ name: "weighting",
327
+ serverDataType: "double"
328
+ }
329
+ ],
330
+ key: "instanceIdRic",
331
+ table: {
332
+ module: "BASKET",
333
+ table: "basketTradingConstituentJoin"
334
+ }
335
+ },
336
+ priceStrategyType: {
337
+ columns: [
338
+ {
339
+ name: "priceStrategy",
340
+ serverDataType: "string"
341
+ },
342
+ {
343
+ name: "id",
344
+ serverDataType: "int"
345
+ }
346
+ ],
347
+ key: "",
348
+ table: {
349
+ module: "BASKET",
350
+ table: "priceStrategyType"
351
+ }
352
+ }
353
+ };
354
+ const isBasketTable = (table)=>"BASKET" === table.module;
355
+ export { isBasketTable, schemas };
@@ -0,0 +1,2 @@
1
+ export { isBasketTable, schemas as basketSchemas } from "./basket-schemas.js";
2
+ export { basketModule } from "./BasketModule.js";
@@ -0,0 +1,76 @@
1
+ import ftse100 from "./ftse100.js";
2
+ import nasdaq100 from "./nasdaq100.js";
3
+ import sp500 from "./sp500.js";
4
+ import hsi from "./hsi.js";
5
+ const basketConstituentData = [];
6
+ for (const row of ftse100){
7
+ const [ric, name, lastTrade, change, volume] = row;
8
+ const basketId = ".FTSE100";
9
+ const side = "BUY";
10
+ const weighting = 1;
11
+ basketConstituentData.push([
12
+ basketId,
13
+ change,
14
+ name,
15
+ lastTrade,
16
+ ric,
17
+ `${ric}-${basketId}`,
18
+ side,
19
+ volume,
20
+ weighting
21
+ ]);
22
+ }
23
+ for (const row of hsi){
24
+ const [name, ric, lastTrade, change, , volume] = row;
25
+ const basketId = ".HSI";
26
+ const side = "BUY";
27
+ const weighting = 1;
28
+ basketConstituentData.push([
29
+ basketId,
30
+ change,
31
+ name,
32
+ lastTrade,
33
+ ric,
34
+ `${ric}-${basketId}`,
35
+ side,
36
+ volume,
37
+ weighting
38
+ ]);
39
+ }
40
+ for (const row of nasdaq100){
41
+ const [name, ric, weighting, lastTrade, change] = row;
42
+ const basketId = ".NASDAQ100";
43
+ const side = "BUY";
44
+ const volume = 1000;
45
+ basketConstituentData.push([
46
+ basketId,
47
+ change,
48
+ name,
49
+ lastTrade,
50
+ ric,
51
+ `${ric}-${basketId}`,
52
+ side,
53
+ volume,
54
+ weighting
55
+ ]);
56
+ }
57
+ for (const row of sp500){
58
+ const [name, ric, weighting, , change] = row;
59
+ const basketId = ".SP500";
60
+ const side = "BUY";
61
+ const volume = 1000;
62
+ const lastTrade = 0;
63
+ basketConstituentData.push([
64
+ basketId,
65
+ change,
66
+ name,
67
+ lastTrade,
68
+ ric,
69
+ `${ric}-${basketId}`,
70
+ side,
71
+ volume,
72
+ weighting
73
+ ]);
74
+ }
75
+ var constituents = basketConstituentData;
76
+ export default constituents;