@vuu-ui/vuu-data-test 3.0.0 → 3.1.0-beta.1
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/package.json +15 -12
- package/src/ArrayProxy.mjs +38 -0
- package/src/RuntimeVisualLink.mjs +45 -0
- package/src/Table.mjs +96 -0
- package/src/TickingArrayDataSource.mjs +265 -0
- package/src/UpdateGenerator.mjs +72 -0
- package/src/basket/BasketModule.mjs +272 -0
- package/src/basket/basket-schemas.mjs +366 -0
- package/src/basket/index.mjs +2 -0
- package/src/basket/reference-data/constituents.mjs +76 -0
- package/src/basket/reference-data/ftse100.mjs +686 -0
- package/src/basket/reference-data/hsi.mjs +1047 -0
- package/src/basket/reference-data/nasdaq100.mjs +812 -0
- package/src/basket/reference-data/prices.mjs +43 -0
- package/src/basket/reference-data/sp500.mjs +315 -0
- package/src/core/module/ModuleContainer.mjs +21 -0
- package/src/core/module/VuuModule.mjs +635 -0
- package/src/core/table/TableContainer.mjs +102 -0
- package/src/data-utils.mjs +57 -0
- package/src/default-column-definitions.mjs +15 -0
- package/src/index.mjs +12 -0
- package/src/local-datasource-provider/LocalDatasourceProvider.mjs +44 -0
- package/src/makeSuggestions.mjs +20 -0
- package/src/rowUpdates.mjs +0 -0
- package/src/schemas.mjs +19 -0
- package/src/session-table-utils.mjs +31 -0
- package/src/simul/SimulModule.mjs +175 -0
- package/src/simul/index.mjs +2 -0
- package/src/simul/reference-data/accounts.mjs +23 -0
- package/src/simul/reference-data/algos.mjs +9 -0
- package/src/simul/reference-data/currencies.mjs +8 -0
- package/src/simul/reference-data/index.mjs +5 -0
- package/src/simul/reference-data/instrument-prices.mjs +48 -0
- package/src/simul/reference-data/instruments-extended.mjs +12 -0
- package/src/simul/reference-data/instruments.mjs +69 -0
- package/src/simul/reference-data/isin-generator/convert-string-to-base-ten-number.mjs +2 -0
- package/src/simul/reference-data/isin-generator/fixtures/alphabet.mjs +27 -0
- package/src/simul/reference-data/isin-generator/fixtures/alphanumeric-values.mjs +7 -0
- package/src/simul/reference-data/isin-generator/fixtures/base-ten-numbers.mjs +13 -0
- package/src/simul/reference-data/isin-generator/generate-cusip-check-code.mjs +17 -0
- package/src/simul/reference-data/isin-generator/generate-cusip-without-check-code.mjs +8 -0
- package/src/simul/reference-data/isin-generator/generate-cusip.mjs +8 -0
- package/src/simul/reference-data/isin-generator/generate-random-alphanumeric.mjs +3 -0
- package/src/simul/reference-data/isin-generator/generate-random-base-ten-number.mjs +2 -0
- package/src/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.mjs +7 -0
- package/src/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.mjs +7 -0
- package/src/simul/reference-data/isin-generator/index.mjs +280 -0
- package/src/simul/reference-data/isin-generator/is-odd.mjs +2 -0
- package/src/simul/reference-data/locations.mjs +45 -0
- package/src/simul/reference-data/lotsizes.mjs +24 -0
- package/src/simul/reference-data/orderStatus.mjs +6 -0
- package/src/simul/reference-data/orders.mjs +64 -0
- package/src/simul/reference-data/parent-child-orders.mjs +119 -0
- package/src/simul/reference-data/priceStrategies.mjs +8 -0
- package/src/simul/reference-data/prices.mjs +80 -0
- package/src/simul/reference-data/sides.mjs +5 -0
- package/src/simul/simul-schemas.mjs +430 -0
- package/src/test/TestModule.mjs +582 -0
- package/src/test/index.mjs +1 -0
- package/src/vuu-row-generator.mjs +71 -0
- package/cjs/ArrayProxy.js +0 -72
- package/cjs/ArrayProxy.js.map +0 -1
- package/cjs/RuntimeVisualLink.js +0 -73
- package/cjs/RuntimeVisualLink.js.map +0 -1
- package/cjs/Table.js +0 -128
- package/cjs/Table.js.map +0 -1
- package/cjs/TickingArrayDataSource.js +0 -343
- package/cjs/TickingArrayDataSource.js.map +0 -1
- package/cjs/UpdateGenerator.js +0 -94
- package/cjs/UpdateGenerator.js.map +0 -1
- package/cjs/basket/BasketModule.js +0 -282
- package/cjs/basket/BasketModule.js.map +0 -1
- package/cjs/basket/basket-schemas.js +0 -134
- package/cjs/basket/basket-schemas.js.map +0 -1
- package/cjs/basket/reference-data/constituents.js +0 -40
- package/cjs/basket/reference-data/constituents.js.map +0 -1
- package/cjs/basket/reference-data/ftse100.js +0 -105
- package/cjs/basket/reference-data/ftse100.js.map +0 -1
- package/cjs/basket/reference-data/hsi.js +0 -87
- package/cjs/basket/reference-data/hsi.js.map +0 -1
- package/cjs/basket/reference-data/nasdaq100.js +0 -108
- package/cjs/basket/reference-data/nasdaq100.js.map +0 -1
- package/cjs/basket/reference-data/sp500.js +0 -46
- package/cjs/basket/reference-data/sp500.js.map +0 -1
- package/cjs/core/module/ModuleContainer.js +0 -43
- package/cjs/core/module/ModuleContainer.js.map +0 -1
- package/cjs/core/module/VuuModule.js +0 -843
- package/cjs/core/module/VuuModule.js.map +0 -1
- package/cjs/core/table/TableContainer.js +0 -144
- package/cjs/core/table/TableContainer.js.map +0 -1
- package/cjs/data-utils.js +0 -55
- package/cjs/data-utils.js.map +0 -1
- package/cjs/default-column-definitions.js +0 -10
- package/cjs/default-column-definitions.js.map +0 -1
- package/cjs/index.js +0 -44
- package/cjs/index.js.map +0 -1
- package/cjs/local-datasource-provider/LocalDatasourceProvider.js +0 -70
- package/cjs/local-datasource-provider/LocalDatasourceProvider.js.map +0 -1
- package/cjs/makeSuggestions.js +0 -26
- package/cjs/makeSuggestions.js.map +0 -1
- package/cjs/schemas.js +0 -28
- package/cjs/schemas.js.map +0 -1
- package/cjs/session-table-utils.js +0 -29
- package/cjs/session-table-utils.js.map +0 -1
- package/cjs/simul/SimulModule.js +0 -187
- package/cjs/simul/SimulModule.js.map +0 -1
- package/cjs/simul/reference-data/accounts.js +0 -27
- package/cjs/simul/reference-data/accounts.js.map +0 -1
- package/cjs/simul/reference-data/algos.js +0 -6
- package/cjs/simul/reference-data/algos.js.map +0 -1
- package/cjs/simul/reference-data/currencies.js +0 -6
- package/cjs/simul/reference-data/currencies.js.map +0 -1
- package/cjs/simul/reference-data/instruments-extended.js +0 -19
- package/cjs/simul/reference-data/instruments-extended.js.map +0 -1
- package/cjs/simul/reference-data/instruments.js +0 -87
- package/cjs/simul/reference-data/instruments.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +0 -6
- package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js +0 -31
- package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +0 -9
- package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +0 -17
- package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js +0 -24
- package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +0 -13
- package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/generate-cusip.js +0 -13
- package/cjs/simul/reference-data/isin-generator/generate-cusip.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js +0 -8
- package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js +0 -6
- package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +0 -14
- package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +0 -14
- package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/index.js +0 -295
- package/cjs/simul/reference-data/isin-generator/index.js.map +0 -1
- package/cjs/simul/reference-data/isin-generator/is-odd.js +0 -6
- package/cjs/simul/reference-data/isin-generator/is-odd.js.map +0 -1
- package/cjs/simul/reference-data/locations.js +0 -17
- package/cjs/simul/reference-data/locations.js.map +0 -1
- package/cjs/simul/reference-data/lotsizes.js +0 -28
- package/cjs/simul/reference-data/lotsizes.js.map +0 -1
- package/cjs/simul/reference-data/orderStatus.js +0 -6
- package/cjs/simul/reference-data/orderStatus.js.map +0 -1
- package/cjs/simul/reference-data/orders.js +0 -55
- package/cjs/simul/reference-data/orders.js.map +0 -1
- package/cjs/simul/reference-data/parent-child-orders.js +0 -146
- package/cjs/simul/reference-data/parent-child-orders.js.map +0 -1
- package/cjs/simul/reference-data/prices.js +0 -91
- package/cjs/simul/reference-data/prices.js.map +0 -1
- package/cjs/simul/reference-data/sides.js +0 -6
- package/cjs/simul/reference-data/sides.js.map +0 -1
- package/cjs/simul/simul-schemas.js +0 -159
- package/cjs/simul/simul-schemas.js.map +0 -1
- package/cjs/test/TestModule.js +0 -255
- package/cjs/test/TestModule.js.map +0 -1
- package/cjs/vuu-row-generator.js +0 -74
- package/cjs/vuu-row-generator.js.map +0 -1
- package/esm/ArrayProxy.js +0 -70
- package/esm/ArrayProxy.js.map +0 -1
- package/esm/RuntimeVisualLink.js +0 -71
- package/esm/RuntimeVisualLink.js.map +0 -1
- package/esm/Table.js +0 -124
- package/esm/Table.js.map +0 -1
- package/esm/TickingArrayDataSource.js +0 -341
- package/esm/TickingArrayDataSource.js.map +0 -1
- package/esm/UpdateGenerator.js +0 -92
- package/esm/UpdateGenerator.js.map +0 -1
- package/esm/basket/BasketModule.js +0 -278
- package/esm/basket/BasketModule.js.map +0 -1
- package/esm/basket/basket-schemas.js +0 -131
- package/esm/basket/basket-schemas.js.map +0 -1
- package/esm/basket/reference-data/constituents.js +0 -38
- package/esm/basket/reference-data/constituents.js.map +0 -1
- package/esm/basket/reference-data/ftse100.js +0 -103
- package/esm/basket/reference-data/ftse100.js.map +0 -1
- package/esm/basket/reference-data/hsi.js +0 -85
- package/esm/basket/reference-data/hsi.js.map +0 -1
- package/esm/basket/reference-data/nasdaq100.js +0 -106
- package/esm/basket/reference-data/nasdaq100.js.map +0 -1
- package/esm/basket/reference-data/sp500.js +0 -44
- package/esm/basket/reference-data/sp500.js.map +0 -1
- package/esm/core/module/ModuleContainer.js +0 -41
- package/esm/core/module/ModuleContainer.js.map +0 -1
- package/esm/core/module/VuuModule.js +0 -841
- package/esm/core/module/VuuModule.js.map +0 -1
- package/esm/core/table/TableContainer.js +0 -142
- package/esm/core/table/TableContainer.js.map +0 -1
- package/esm/data-utils.js +0 -50
- package/esm/data-utils.js.map +0 -1
- package/esm/default-column-definitions.js +0 -8
- package/esm/default-column-definitions.js.map +0 -1
- package/esm/index.js +0 -15
- package/esm/index.js.map +0 -1
- package/esm/local-datasource-provider/LocalDatasourceProvider.js +0 -68
- package/esm/local-datasource-provider/LocalDatasourceProvider.js.map +0 -1
- package/esm/makeSuggestions.js +0 -24
- package/esm/makeSuggestions.js.map +0 -1
- package/esm/schemas.js +0 -24
- package/esm/schemas.js.map +0 -1
- package/esm/session-table-utils.js +0 -26
- package/esm/session-table-utils.js.map +0 -1
- package/esm/simul/SimulModule.js +0 -184
- package/esm/simul/SimulModule.js.map +0 -1
- package/esm/simul/reference-data/accounts.js +0 -25
- package/esm/simul/reference-data/accounts.js.map +0 -1
- package/esm/simul/reference-data/algos.js +0 -4
- package/esm/simul/reference-data/algos.js.map +0 -1
- package/esm/simul/reference-data/currencies.js +0 -4
- package/esm/simul/reference-data/currencies.js.map +0 -1
- package/esm/simul/reference-data/instruments-extended.js +0 -17
- package/esm/simul/reference-data/instruments-extended.js.map +0 -1
- package/esm/simul/reference-data/instruments.js +0 -82
- package/esm/simul/reference-data/instruments.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +0 -4
- package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js +0 -29
- package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +0 -7
- package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +0 -15
- package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js +0 -22
- package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +0 -11
- package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/generate-cusip.js +0 -11
- package/esm/simul/reference-data/isin-generator/generate-cusip.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js +0 -6
- package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js +0 -4
- package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +0 -12
- package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +0 -12
- package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/index.js +0 -293
- package/esm/simul/reference-data/isin-generator/index.js.map +0 -1
- package/esm/simul/reference-data/isin-generator/is-odd.js +0 -4
- package/esm/simul/reference-data/isin-generator/is-odd.js.map +0 -1
- package/esm/simul/reference-data/locations.js +0 -14
- package/esm/simul/reference-data/locations.js.map +0 -1
- package/esm/simul/reference-data/lotsizes.js +0 -26
- package/esm/simul/reference-data/lotsizes.js.map +0 -1
- package/esm/simul/reference-data/orderStatus.js +0 -4
- package/esm/simul/reference-data/orderStatus.js.map +0 -1
- package/esm/simul/reference-data/orders.js +0 -52
- package/esm/simul/reference-data/orders.js.map +0 -1
- package/esm/simul/reference-data/parent-child-orders.js +0 -141
- package/esm/simul/reference-data/parent-child-orders.js.map +0 -1
- package/esm/simul/reference-data/prices.js +0 -88
- package/esm/simul/reference-data/prices.js.map +0 -1
- package/esm/simul/reference-data/sides.js +0 -4
- package/esm/simul/reference-data/sides.js.map +0 -1
- package/esm/simul/simul-schemas.js +0 -156
- package/esm/simul/simul-schemas.js.map +0 -1
- package/esm/test/TestModule.js +0 -253
- package/esm/test/TestModule.js.map +0 -1
- package/esm/vuu-row-generator.js +0 -68
- package/esm/vuu-row-generator.js.map +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Table, buildDataColumnMapFromSchema } from "../../Table.mjs";
|
|
2
|
+
const DEFAULT_RANGE_LIMITS = {
|
|
3
|
+
maxRangeEnd: 1000000,
|
|
4
|
+
maxRangeWidth: 1000
|
|
5
|
+
};
|
|
6
|
+
class TableContainer {
|
|
7
|
+
static #instance;
|
|
8
|
+
static get instance() {
|
|
9
|
+
if (!TableContainer.#instance) TableContainer.#instance = new TableContainer();
|
|
10
|
+
return TableContainer.#instance;
|
|
11
|
+
}
|
|
12
|
+
#tables = new Map();
|
|
13
|
+
createTable = (schema, data, dataMap, updateGenerator)=>{
|
|
14
|
+
const table = new Table(schema, data, dataMap, updateGenerator);
|
|
15
|
+
this.addTable(table);
|
|
16
|
+
return table;
|
|
17
|
+
};
|
|
18
|
+
createJoinTable(joinTable, { table: t1 }, { table: t2 }, joinColumn) {
|
|
19
|
+
const table1 = this.getTable(t1);
|
|
20
|
+
const table2 = this.getTable(t2);
|
|
21
|
+
const { map: m1, schema: schema1 } = table1;
|
|
22
|
+
const { map: m2, schema: schema2 } = table2;
|
|
23
|
+
const k1 = m1[joinColumn];
|
|
24
|
+
const k2 = m2[joinColumn];
|
|
25
|
+
const combinedColumns = new Set([
|
|
26
|
+
...schema1.columns,
|
|
27
|
+
...schema2.columns
|
|
28
|
+
].map((col)=>col.name).sort());
|
|
29
|
+
const combinedSchema = {
|
|
30
|
+
key: joinColumn,
|
|
31
|
+
table: joinTable,
|
|
32
|
+
rangeLimits: DEFAULT_RANGE_LIMITS,
|
|
33
|
+
columns: Array.from(combinedColumns).map((columnName)=>({
|
|
34
|
+
name: columnName,
|
|
35
|
+
serverDataType: getServerDataType(columnName, schema1, schema2)
|
|
36
|
+
}))
|
|
37
|
+
};
|
|
38
|
+
const data = [];
|
|
39
|
+
const combinedColumnMap = buildDataColumnMapFromSchema(combinedSchema);
|
|
40
|
+
for (const row of table1.data){
|
|
41
|
+
const row2 = table2.findByKey(String(row[k1]));
|
|
42
|
+
if (row2) {
|
|
43
|
+
const out = [];
|
|
44
|
+
for (const column of table1.schema.columns){
|
|
45
|
+
const value = row[m1[column.name]];
|
|
46
|
+
out[combinedColumnMap[column.name]] = value;
|
|
47
|
+
}
|
|
48
|
+
for (const column of table2.schema.columns){
|
|
49
|
+
const value = row2[m2[column.name]];
|
|
50
|
+
out[combinedColumnMap[column.name]] = value;
|
|
51
|
+
}
|
|
52
|
+
data.push(out);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const newTable = new Table(combinedSchema, data, combinedColumnMap);
|
|
56
|
+
table1.on("insert", (row)=>{
|
|
57
|
+
const row2 = table2.findByKey(String(row[k1]));
|
|
58
|
+
if (row2) {
|
|
59
|
+
const out = [];
|
|
60
|
+
for (const column of table1.schema.columns){
|
|
61
|
+
const value = row[m1[column.name]];
|
|
62
|
+
out[combinedColumnMap[column.name]] = value;
|
|
63
|
+
}
|
|
64
|
+
for (const column of table2.schema.columns){
|
|
65
|
+
const value = row2[m2[column.name]];
|
|
66
|
+
out[combinedColumnMap[column.name]] = value;
|
|
67
|
+
}
|
|
68
|
+
newTable.insert(out);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
table2.on("update", (row)=>{
|
|
72
|
+
const keyValue = row[k2];
|
|
73
|
+
const targetRow = newTable.findByKey(keyValue);
|
|
74
|
+
if (targetRow) {
|
|
75
|
+
const updatedRow = targetRow.slice();
|
|
76
|
+
for (const { name } of table2.schema.columns)if (row[m2[name]] !== updatedRow[combinedColumnMap[name]]) updatedRow[combinedColumnMap[name]] = row[m2[name]];
|
|
77
|
+
newTable.updateRow(updatedRow);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
this.addTable(newTable);
|
|
81
|
+
return newTable;
|
|
82
|
+
}
|
|
83
|
+
addTable(table) {
|
|
84
|
+
this.#tables.set(table.name, table);
|
|
85
|
+
}
|
|
86
|
+
getTable(tableName) {
|
|
87
|
+
const table = this.#tables.get(tableName);
|
|
88
|
+
if (table) return table;
|
|
89
|
+
throw Error(`[TableContainer] no table ${tableName}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
var table_TableContainer = TableContainer.instance;
|
|
93
|
+
const getServerDataType = (columnName, { columns: cols1, table: t1 }, { columns: cols2, table: t2 })=>{
|
|
94
|
+
const col1 = cols1.find((col)=>col.name === columnName);
|
|
95
|
+
const col2 = cols2.find((col)=>col.name === columnName);
|
|
96
|
+
if (col1 && col2) if (col1.serverDataType === col2.serverDataType) return col1.serverDataType;
|
|
97
|
+
else throw Error(`both tables ${t1.table} and ${t2.table} implement column ${columnName}, but with types differ`);
|
|
98
|
+
if (col1) return col1.serverDataType;
|
|
99
|
+
if (col2) return col2.serverDataType;
|
|
100
|
+
throw Error("how is this possible");
|
|
101
|
+
};
|
|
102
|
+
export default table_TableContainer;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
function random(min, max) {
|
|
2
|
+
min = Math.ceil(min);
|
|
3
|
+
max = Math.floor(max);
|
|
4
|
+
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
5
|
+
}
|
|
6
|
+
function randomPercentage(value) {
|
|
7
|
+
const dec = random(2, 99);
|
|
8
|
+
const percentage = dec / 100;
|
|
9
|
+
return value * percentage;
|
|
10
|
+
}
|
|
11
|
+
const data_utils_nextRandomDouble = (min, max)=>min + (max - min) * Math.random();
|
|
12
|
+
const initBidAsk = (priceMaxDelta, nextRandomDouble)=>{
|
|
13
|
+
const mid = nextRandomDouble(0, 1000);
|
|
14
|
+
const tempBid = nextRandomDouble(mid - priceMaxDelta, mid - 1);
|
|
15
|
+
const ask = nextRandomDouble(mid + 1, mid + priceMaxDelta);
|
|
16
|
+
const bid = tempBid < 0 ? mid : tempBid;
|
|
17
|
+
const newBid = Math.round(100 * bid) / 100.0;
|
|
18
|
+
const newAsk = Math.round(100 * ask) / 100.0;
|
|
19
|
+
return [
|
|
20
|
+
newBid,
|
|
21
|
+
newAsk
|
|
22
|
+
];
|
|
23
|
+
};
|
|
24
|
+
const maxAsk = (bid, ask, spreadMultipler, priceMaxDelta)=>{
|
|
25
|
+
const spread = ask - bid;
|
|
26
|
+
return Math.min(ask + spreadMultipler * spread, spread / 2 + bid + priceMaxDelta);
|
|
27
|
+
};
|
|
28
|
+
const minAsk = (bid, ask)=>Math.max(bid + 1, (ask - bid) / 2 + bid);
|
|
29
|
+
const maxBid = (bid, ask)=>{
|
|
30
|
+
const result = Math.min(ask - 1, (ask - bid) / 2 + bid);
|
|
31
|
+
return result < 1 ? bid + 1 : result;
|
|
32
|
+
};
|
|
33
|
+
const minBid = (bid, ask, spreadMultipler, priceMaxDelta)=>{
|
|
34
|
+
const spread = ask - bid;
|
|
35
|
+
const mid = spread / 2 + bid;
|
|
36
|
+
const result = Math.max(bid - Math.min(spreadMultipler * spread, 10), mid - priceMaxDelta);
|
|
37
|
+
return result < 0 ? bid : result;
|
|
38
|
+
};
|
|
39
|
+
const generateNextBidAsk = (bid, ask, spreadMultipler, priceMaxDelta, nextRandomDouble)=>{
|
|
40
|
+
let tempAsk = ask;
|
|
41
|
+
if (Math.abs(bid - ask) <= 1) tempAsk = ask + 1;
|
|
42
|
+
const minBidValue = minBid(bid, tempAsk, spreadMultipler, priceMaxDelta);
|
|
43
|
+
const maxBidValue = maxBid(bid, tempAsk);
|
|
44
|
+
const minAskValue = minAsk(bid, tempAsk);
|
|
45
|
+
const maxAskValue = maxAsk(bid, tempAsk, spreadMultipler, priceMaxDelta);
|
|
46
|
+
const newBid = Math.round(100 * nextRandomDouble(minBidValue, maxBidValue)) / 100.0;
|
|
47
|
+
const newAsk = Math.round(100 * nextRandomDouble(minAskValue, maxAskValue)) / 100.0;
|
|
48
|
+
return [
|
|
49
|
+
newBid,
|
|
50
|
+
newAsk
|
|
51
|
+
];
|
|
52
|
+
};
|
|
53
|
+
const withNanoMs = (ts, nanos = 0)=>{
|
|
54
|
+
if (nanos > 0) return 1000000n * BigInt(ts) + BigInt(nanos);
|
|
55
|
+
return 1000000n * BigInt(ts);
|
|
56
|
+
};
|
|
57
|
+
export { data_utils_nextRandomDouble as nextRandomDouble, generateNextBidAsk, initBidAsk, random, randomPercentage, withNanoMs };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const VUU_DEFAULT_COLUMNS = [
|
|
2
|
+
{
|
|
3
|
+
name: "vuuCreatedTimestamp",
|
|
4
|
+
serverDataType: "epochtimestamp"
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
name: "vuuUpdatedTimestamp",
|
|
8
|
+
serverDataType: "epochtimestamp"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "vuuMsg",
|
|
12
|
+
serverDataType: "string"
|
|
13
|
+
}
|
|
14
|
+
];
|
|
15
|
+
export { VUU_DEFAULT_COLUMNS };
|
package/src/index.mjs
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from "./ArrayProxy.mjs";
|
|
2
|
+
export * from "./core/module/VuuModule.mjs";
|
|
3
|
+
export * from "./local-datasource-provider/LocalDatasourceProvider.mjs";
|
|
4
|
+
export * from "./makeSuggestions.mjs";
|
|
5
|
+
export * from "./schemas.mjs";
|
|
6
|
+
export * from "./simul/index.mjs";
|
|
7
|
+
export * from "./basket/index.mjs";
|
|
8
|
+
export * from "./test/index.mjs";
|
|
9
|
+
export * from "./TickingArrayDataSource.mjs";
|
|
10
|
+
export * from "./vuu-row-generator.mjs";
|
|
11
|
+
export { default as tableContainer } from "./core/table/TableContainer.mjs";
|
|
12
|
+
export { Table, buildDataColumnMap, buildDataColumnMapFromSchema } from "./Table.mjs";
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { DataProvider } from "@vuu-ui/vuu-utils";
|
|
3
|
+
import ModuleContainer from "../core/module/ModuleContainer.mjs";
|
|
4
|
+
import TableContainer from "../core/table/TableContainer.mjs";
|
|
5
|
+
const serverAPI = {
|
|
6
|
+
getTableList: async ()=>{
|
|
7
|
+
const tables = ModuleContainer.moduleNames.reduce((tableList, moduleName)=>{
|
|
8
|
+
const moduleTables = ModuleContainer.get(moduleName).getTableList();
|
|
9
|
+
moduleTables.forEach((tableName)=>{
|
|
10
|
+
const table = TableContainer.getTable(tableName);
|
|
11
|
+
tableList.push(table.schema.table);
|
|
12
|
+
});
|
|
13
|
+
return tableList;
|
|
14
|
+
}, []);
|
|
15
|
+
return {
|
|
16
|
+
tables
|
|
17
|
+
};
|
|
18
|
+
},
|
|
19
|
+
getTableSchema: async ({ module, table })=>ModuleContainer.get(module).getTableSchema(table),
|
|
20
|
+
rpcCall: async ()=>{
|
|
21
|
+
throw Error("RpcCall no longer supported on LocalDataSourceProvider ServerAPI");
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const getServerAPI = async ()=>serverAPI;
|
|
25
|
+
class VuuDataSource {
|
|
26
|
+
constructor({ aggregations, columns, filterSpec, groupBy, sort, table, viewport, visualLink }){
|
|
27
|
+
const config = {
|
|
28
|
+
aggregations,
|
|
29
|
+
columns,
|
|
30
|
+
filterSpec,
|
|
31
|
+
groupBy,
|
|
32
|
+
sort,
|
|
33
|
+
visualLink
|
|
34
|
+
};
|
|
35
|
+
const module = ModuleContainer.get(table.module);
|
|
36
|
+
return module.createDataSource(table.table, viewport, config);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const LocalDataSourceProvider = ({ children })=>/*#__PURE__*/ jsx(DataProvider, {
|
|
40
|
+
VuuDataSource: VuuDataSource,
|
|
41
|
+
getServerAPI: getServerAPI,
|
|
42
|
+
children: children
|
|
43
|
+
});
|
|
44
|
+
export { LocalDataSourceProvider };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const checkPattern = (value, pattern)=>new RegExp(`^${pattern}`, "i").test(value);
|
|
2
|
+
const getUniqueValues = (data, columnIndex, pattern = "")=>{
|
|
3
|
+
const uniqueValues = [];
|
|
4
|
+
const set = new Set();
|
|
5
|
+
for (const row of data){
|
|
6
|
+
const value = row[columnIndex];
|
|
7
|
+
if (void 0 !== value && !set.has(value)) {
|
|
8
|
+
set.add(value);
|
|
9
|
+
uniqueValues.push(value);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
uniqueValues.sort();
|
|
13
|
+
return pattern ? uniqueValues.filter((value)=>checkPattern(value.toString(), pattern)).slice(0, 10) : uniqueValues.slice(0, 10);
|
|
14
|
+
};
|
|
15
|
+
const makeSuggestions = (data, columnIndex, pattern)=>new Promise((resolve)=>{
|
|
16
|
+
const uniqueValues = getUniqueValues(data, columnIndex, pattern);
|
|
17
|
+
const result = uniqueValues.length > 20 ? uniqueValues?.slice(0, 20).map((v)=>v.toString()) : uniqueValues.map((v)=>v.toString());
|
|
18
|
+
setTimeout(()=>resolve(result), 100);
|
|
19
|
+
});
|
|
20
|
+
export { makeSuggestions };
|
|
File without changes
|
package/src/schemas.mjs
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { schemas } from "./basket/basket-schemas.mjs";
|
|
2
|
+
import { schemas as simul_schemas_mjs_schemas } from "./simul/simul-schemas.mjs";
|
|
3
|
+
import { testModule } from "./test/TestModule.mjs";
|
|
4
|
+
const schemas_schemas = {
|
|
5
|
+
...schemas,
|
|
6
|
+
...simul_schemas_mjs_schemas,
|
|
7
|
+
...testModule.schemas
|
|
8
|
+
};
|
|
9
|
+
const allSchemas = {
|
|
10
|
+
...schemas,
|
|
11
|
+
...simul_schemas_mjs_schemas,
|
|
12
|
+
...testModule.schemas
|
|
13
|
+
};
|
|
14
|
+
const getAllSchemas = ()=>schemas_schemas;
|
|
15
|
+
const getSchema = (tableName)=>{
|
|
16
|
+
if (allSchemas[tableName]) return allSchemas[tableName];
|
|
17
|
+
throw Error(`getSchema no schema for table ${tableName}`);
|
|
18
|
+
};
|
|
19
|
+
export { getAllSchemas, getSchema, schemas_schemas as schemas };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Table, buildDataColumnMapFromSchema } from "./Table.mjs";
|
|
2
|
+
import { metadataKeys } from "@vuu-ui/vuu-utils";
|
|
3
|
+
const { KEY: KEY } = metadataKeys;
|
|
4
|
+
const sessionTableRow = (row, schema)=>{
|
|
5
|
+
const sessionRow = row.slice();
|
|
6
|
+
if (!schema.columns.some(({ name })=>"vuuMsg" === name)) sessionRow.push("");
|
|
7
|
+
if (!schema.columns.some(({ name })=>"vuu_action" === name)) sessionRow.push("");
|
|
8
|
+
return sessionRow;
|
|
9
|
+
};
|
|
10
|
+
const createSessionTableFromSelectedRows = (table, selectedRowIds)=>{
|
|
11
|
+
const sessionData = [];
|
|
12
|
+
for(let i = 0; i < selectedRowIds.length; i++)for(let j = 0; j < table.data.length; j++)if (table.data[j][KEY] === selectedRowIds[i]) sessionData.push(sessionTableRow(table.data[j], table.schema));
|
|
13
|
+
const schema = sessionTableSchema(table.schema);
|
|
14
|
+
return new Table(schema, sessionData, buildDataColumnMapFromSchema(schema));
|
|
15
|
+
};
|
|
16
|
+
const sessionTableSchema = (schema)=>{
|
|
17
|
+
const columns = schema.columns.slice();
|
|
18
|
+
if (!columns.some(({ name })=>"vuuMsg" === name)) columns.push({
|
|
19
|
+
name: "vuuMsg",
|
|
20
|
+
serverDataType: "string"
|
|
21
|
+
});
|
|
22
|
+
if (!columns.some(({ name })=>"vuu_action" === name)) columns.push({
|
|
23
|
+
name: "vuu_action",
|
|
24
|
+
serverDataType: "string"
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
...schema,
|
|
28
|
+
columns
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export { createSessionTableFromSelectedRows, sessionTableRow, sessionTableSchema };
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { VuuModule } from "../core/module/VuuModule.mjs";
|
|
2
|
+
import { instrumentsTable } from "./reference-data/instruments.mjs";
|
|
3
|
+
import { instrumentsExtendedTable } from "./reference-data/instruments-extended.mjs";
|
|
4
|
+
import { ordersTable } from "./reference-data/orders.mjs";
|
|
5
|
+
import { childOrdersTable, parentOrdersTable, startGeneratingNewOrders, stopGeneratingNewOrders } from "./reference-data/parent-child-orders.mjs";
|
|
6
|
+
import { pricesTable } from "./reference-data/prices.mjs";
|
|
7
|
+
import { schemas } from "./simul-schemas.mjs";
|
|
8
|
+
import TableContainer from "../core/table/TableContainer.mjs";
|
|
9
|
+
const undefinedTables = {
|
|
10
|
+
childOrders: void 0,
|
|
11
|
+
instruments: void 0,
|
|
12
|
+
instrumentsExtended: void 0,
|
|
13
|
+
instrumentPrices: void 0,
|
|
14
|
+
orders: void 0,
|
|
15
|
+
parentOrders: void 0,
|
|
16
|
+
prices: void 0
|
|
17
|
+
};
|
|
18
|
+
class SimulModule extends VuuModule {
|
|
19
|
+
constructor(){
|
|
20
|
+
super("SIMUL");
|
|
21
|
+
}
|
|
22
|
+
#schemas = schemas;
|
|
23
|
+
#tables = {
|
|
24
|
+
childOrders: childOrdersTable,
|
|
25
|
+
instruments: instrumentsTable,
|
|
26
|
+
instrumentsExtended: instrumentsExtendedTable,
|
|
27
|
+
instrumentPrices: TableContainer.createJoinTable({
|
|
28
|
+
module: "SIMUL",
|
|
29
|
+
table: "instrumentPrices"
|
|
30
|
+
}, {
|
|
31
|
+
module: "SIMUL",
|
|
32
|
+
table: "instruments"
|
|
33
|
+
}, {
|
|
34
|
+
module: "SIMUL",
|
|
35
|
+
table: "prices"
|
|
36
|
+
}, "ric"),
|
|
37
|
+
orders: ordersTable,
|
|
38
|
+
parentOrders: parentOrdersTable,
|
|
39
|
+
prices: pricesTable
|
|
40
|
+
};
|
|
41
|
+
get menus() {
|
|
42
|
+
return {
|
|
43
|
+
childOrders: void 0,
|
|
44
|
+
instruments: {
|
|
45
|
+
name: "ROOT",
|
|
46
|
+
menus: [
|
|
47
|
+
{
|
|
48
|
+
context: "selected-rows",
|
|
49
|
+
filter: "",
|
|
50
|
+
name: "Add Instruments To Order",
|
|
51
|
+
rpcName: "ADD_INSTRUMENTS_TO_ORDER"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
context: "selected-rows",
|
|
55
|
+
filter: "",
|
|
56
|
+
name: "Edit Row (server)",
|
|
57
|
+
rpcName: "EDIT_ROW"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
context: "selected-rows",
|
|
61
|
+
filter: "",
|
|
62
|
+
name: "Edit Rows (server)",
|
|
63
|
+
rpcName: "beginEditSession"
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
instrumentsExtended: void 0,
|
|
68
|
+
instrumentPrices: void 0,
|
|
69
|
+
orders: {
|
|
70
|
+
name: "ROOT",
|
|
71
|
+
menus: [
|
|
72
|
+
{
|
|
73
|
+
context: "row",
|
|
74
|
+
filter: 'status in ["New","Partial Exec"]',
|
|
75
|
+
name: "Cancel Order",
|
|
76
|
+
rpcName: "CANCEL_ORDER"
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
parentOrders: void 0,
|
|
81
|
+
prices: void 0
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
get schemas() {
|
|
85
|
+
return this.#schemas;
|
|
86
|
+
}
|
|
87
|
+
get editServices() {}
|
|
88
|
+
get menuServices() {
|
|
89
|
+
return {
|
|
90
|
+
...undefinedTables,
|
|
91
|
+
orders: [
|
|
92
|
+
{
|
|
93
|
+
rpcName: "CANCEL_ORDER",
|
|
94
|
+
service: this.cancelOrder
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
get services() {
|
|
100
|
+
return {
|
|
101
|
+
...undefinedTables,
|
|
102
|
+
instruments: [
|
|
103
|
+
{
|
|
104
|
+
rpcName: "DELETE_ROW",
|
|
105
|
+
service: this.deleteRow
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
parentOrders: [
|
|
109
|
+
{
|
|
110
|
+
rpcName: "startGeneratingNewOrders",
|
|
111
|
+
service: this.startOrders
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
rpcName: "stopGeneratingNewOrders",
|
|
115
|
+
service: this.stopOrders
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
get tables() {
|
|
121
|
+
return this.#tables;
|
|
122
|
+
}
|
|
123
|
+
get visualLinks() {
|
|
124
|
+
return {
|
|
125
|
+
...undefinedTables,
|
|
126
|
+
childOrders: [
|
|
127
|
+
{
|
|
128
|
+
fromColumn: "parentOrderId",
|
|
129
|
+
toColumn: "id",
|
|
130
|
+
toTable: "parentOrders"
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
parentOrders: [
|
|
134
|
+
{
|
|
135
|
+
fromColumn: "ric",
|
|
136
|
+
toColumn: "ric",
|
|
137
|
+
toTable: "instruments"
|
|
138
|
+
}
|
|
139
|
+
]
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
cancelOrder = async (rpcRequest)=>{
|
|
143
|
+
const { rowKey, vpId } = rpcRequest;
|
|
144
|
+
const table = this.tables.orders;
|
|
145
|
+
const row = table.findByKey(rowKey);
|
|
146
|
+
row[table.map.status] = "Cancelled";
|
|
147
|
+
table.updateRow(row);
|
|
148
|
+
return {
|
|
149
|
+
action: {
|
|
150
|
+
type: "SHOW_NOTIFICATION_ACTION",
|
|
151
|
+
message: `Order id: ${rowKey}`,
|
|
152
|
+
title: "Order cancelled"
|
|
153
|
+
},
|
|
154
|
+
rpcName: "CANCEL_ORDER",
|
|
155
|
+
type: "VIEW_PORT_MENU_RESP",
|
|
156
|
+
vpId
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
startOrders = async ()=>{
|
|
160
|
+
startGeneratingNewOrders();
|
|
161
|
+
return {
|
|
162
|
+
type: "SUCCESS_RESULT",
|
|
163
|
+
data: void 0
|
|
164
|
+
};
|
|
165
|
+
};
|
|
166
|
+
stopOrders = async ()=>{
|
|
167
|
+
stopGeneratingNewOrders();
|
|
168
|
+
return {
|
|
169
|
+
type: "SUCCESS_RESULT",
|
|
170
|
+
data: void 0
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
const simulModule = new SimulModule();
|
|
175
|
+
export { SimulModule, simulModule };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const accounts = [
|
|
2
|
+
"Account 01",
|
|
3
|
+
"Account 02",
|
|
4
|
+
"Account 03",
|
|
5
|
+
"Account 04",
|
|
6
|
+
"Account 105",
|
|
7
|
+
"Account 06",
|
|
8
|
+
"Account 07",
|
|
9
|
+
"Account 08",
|
|
10
|
+
"Account 09",
|
|
11
|
+
"Account 10",
|
|
12
|
+
"Account 11",
|
|
13
|
+
"Account 12",
|
|
14
|
+
"Account 13",
|
|
15
|
+
"Account 14",
|
|
16
|
+
"Account 15",
|
|
17
|
+
"Account 16",
|
|
18
|
+
"Account 17",
|
|
19
|
+
"Account 18",
|
|
20
|
+
"Account 19",
|
|
21
|
+
"Account 20"
|
|
22
|
+
];
|
|
23
|
+
export { accounts };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { instrumentsData } from "./instruments.mjs";
|
|
2
|
+
import { pricesData } from "./prices.mjs";
|
|
3
|
+
const InstrumentPricesColumnMap = {
|
|
4
|
+
ask: 0,
|
|
5
|
+
askSize: 1,
|
|
6
|
+
bbg: 2,
|
|
7
|
+
bid: 3,
|
|
8
|
+
bidSize: 4,
|
|
9
|
+
close: 5,
|
|
10
|
+
currency: 6,
|
|
11
|
+
description: 7,
|
|
12
|
+
exchange: 8,
|
|
13
|
+
isin: 9,
|
|
14
|
+
last: 10,
|
|
15
|
+
lotSize: 11,
|
|
16
|
+
open: 12,
|
|
17
|
+
phase: 13,
|
|
18
|
+
ric: 14,
|
|
19
|
+
scenario: 15,
|
|
20
|
+
vuuCreatedTimestamp: 16,
|
|
21
|
+
vuuUpdatedTimestamp: 17
|
|
22
|
+
};
|
|
23
|
+
const instrumentPrices = [];
|
|
24
|
+
for(let i = 0; i < instrumentsData.length; i++){
|
|
25
|
+
const [bbg, currency, description, exchange, isin, lotSize, ric] = instrumentsData[i];
|
|
26
|
+
const [ask, askSize, bid, bidSize, close, last, open, phase, , scenario] = pricesData[i];
|
|
27
|
+
instrumentPrices.push([
|
|
28
|
+
ask,
|
|
29
|
+
askSize,
|
|
30
|
+
bbg,
|
|
31
|
+
bid,
|
|
32
|
+
bidSize,
|
|
33
|
+
close,
|
|
34
|
+
currency,
|
|
35
|
+
description,
|
|
36
|
+
exchange,
|
|
37
|
+
isin,
|
|
38
|
+
last,
|
|
39
|
+
lotSize,
|
|
40
|
+
open,
|
|
41
|
+
phase,
|
|
42
|
+
ric,
|
|
43
|
+
scenario,
|
|
44
|
+
0,
|
|
45
|
+
0
|
|
46
|
+
]);
|
|
47
|
+
}
|
|
48
|
+
export { InstrumentPricesColumnMap, instrumentPrices };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { random } from "../../data-utils.mjs";
|
|
2
|
+
import { buildDataColumnMap } from "../../Table.mjs";
|
|
3
|
+
import { schemas } from "../simul-schemas.mjs";
|
|
4
|
+
import { instrumentsData } from "./instruments.mjs";
|
|
5
|
+
import TableContainer from "../../core/table/TableContainer.mjs";
|
|
6
|
+
const instrumentsExtendedData = instrumentsData.map((row)=>row.slice(0, -1).concat([
|
|
7
|
+
1 === random(0, 1),
|
|
8
|
+
1 === random(0, 1),
|
|
9
|
+
new Date().getTime()
|
|
10
|
+
]));
|
|
11
|
+
const instrumentsExtendedTable = TableContainer.createTable(schemas.instrumentsExtended, instrumentsExtendedData, buildDataColumnMap(schemas, "instrumentsExtended"));
|
|
12
|
+
export { instrumentsExtendedTable };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { isinGenerator } from "./isin-generator/index.mjs";
|
|
2
|
+
import TableContainer from "../../core/table/TableContainer.mjs";
|
|
3
|
+
import { currencies } from "./currencies.mjs";
|
|
4
|
+
import { locations, suffixes } from "./locations.mjs";
|
|
5
|
+
import { lotsizes } from "./lotsizes.mjs";
|
|
6
|
+
import { random } from "../../data-utils.mjs";
|
|
7
|
+
import { buildDataColumnMap } from "../../Table.mjs";
|
|
8
|
+
import { schemas } from "../simul-schemas.mjs";
|
|
9
|
+
import { Clock } from "@vuu-ui/vuu-utils";
|
|
10
|
+
const { createTable: createTable } = TableContainer;
|
|
11
|
+
const today = new Date();
|
|
12
|
+
const clock = new Clock({
|
|
13
|
+
year: today.getFullYear(),
|
|
14
|
+
month: today.getMonth() + 1,
|
|
15
|
+
day: today.getDate(),
|
|
16
|
+
hours: 7,
|
|
17
|
+
minutes: 0,
|
|
18
|
+
seconds: 0,
|
|
19
|
+
milliseconds: 0
|
|
20
|
+
});
|
|
21
|
+
const InstrumentColumnMap = {
|
|
22
|
+
bbg: 0,
|
|
23
|
+
currency: 1,
|
|
24
|
+
description: 2,
|
|
25
|
+
exchange: 3,
|
|
26
|
+
string: 4,
|
|
27
|
+
number: 5,
|
|
28
|
+
ric: 6,
|
|
29
|
+
vuuCreatedTimestamp: 7,
|
|
30
|
+
vuuUpdatedTimestamp: 8,
|
|
31
|
+
vuuMsg: 9
|
|
32
|
+
};
|
|
33
|
+
const instrumentsData = [];
|
|
34
|
+
const chars1 = Array.from("ABCEFGHKMN");
|
|
35
|
+
const chars2 = Array.from("ABCEFGHKMN");
|
|
36
|
+
const chars3 = Array.from("OPQRTUVWYZ");
|
|
37
|
+
const chars4 = Array.from("OPQRTUVWYZ");
|
|
38
|
+
let count = 0;
|
|
39
|
+
for (const char1 of chars1)for (const char2 of chars2)for (const char3 of chars3)for (const char4 of chars4){
|
|
40
|
+
const suffix = suffixes[count % 8];
|
|
41
|
+
const ric = char1 + char2 + char3 + char4 + "." + suffix;
|
|
42
|
+
const bbg = char1 + char2 + char3 + char4 + " " + suffix;
|
|
43
|
+
const description = `${ric} description`;
|
|
44
|
+
const currency = currencies[random(0, 4)];
|
|
45
|
+
const isin = isinGenerator();
|
|
46
|
+
const lotSize = lotsizes[random(0, lotsizes.length - 1)];
|
|
47
|
+
const exchange = locations[suffix][1];
|
|
48
|
+
const timestamp = clock.now;
|
|
49
|
+
instrumentsData.push([
|
|
50
|
+
bbg,
|
|
51
|
+
currency,
|
|
52
|
+
description,
|
|
53
|
+
exchange,
|
|
54
|
+
String(isin),
|
|
55
|
+
lotSize,
|
|
56
|
+
ric,
|
|
57
|
+
timestamp,
|
|
58
|
+
timestamp,
|
|
59
|
+
''
|
|
60
|
+
]);
|
|
61
|
+
count++;
|
|
62
|
+
clock.advance(random(0, 10000));
|
|
63
|
+
}
|
|
64
|
+
const getRic = (defaultRic)=>{
|
|
65
|
+
const row = instrumentsData.at(random(0, instrumentsData.length));
|
|
66
|
+
return row?.[InstrumentColumnMap.ric] ?? defaultRic;
|
|
67
|
+
};
|
|
68
|
+
const instrumentsTable = createTable(schemas.instruments, instrumentsData, buildDataColumnMap(schemas, "instruments"));
|
|
69
|
+
export { InstrumentColumnMap, getRic, instrumentsData, instrumentsTable };
|