@vuu-ui/vuu-data-test 0.13.18 → 0.13.19
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/cjs/Table.js +3 -86
- package/cjs/Table.js.map +1 -1
- package/cjs/basket/BasketModule.js +11 -11
- package/cjs/basket/BasketModule.js.map +1 -1
- package/cjs/core/table/TableContainer.js +138 -0
- package/cjs/core/table/TableContainer.js.map +1 -0
- package/cjs/data-utils.js +0 -10
- package/cjs/data-utils.js.map +1 -1
- package/cjs/index.js +9 -8
- package/cjs/index.js.map +1 -1
- package/cjs/simul/SimulModule.js +4 -4
- package/cjs/simul/SimulModule.js.map +1 -1
- package/cjs/simul/reference-data/instruments-extended.js +2 -1
- package/cjs/simul/reference-data/instruments-extended.js.map +1 -1
- package/cjs/simul/reference-data/instruments.js +3 -1
- package/cjs/simul/reference-data/instruments.js.map +1 -1
- package/cjs/simul/reference-data/orders.js +2 -1
- package/cjs/simul/reference-data/orders.js.map +1 -1
- package/cjs/simul/reference-data/parent-child-orders.js +4 -3
- package/cjs/simul/reference-data/parent-child-orders.js.map +1 -1
- package/cjs/simul/reference-data/prices.js +2 -1
- package/cjs/simul/reference-data/prices.js.map +1 -1
- package/cjs/vuu-modules.js +1 -1
- package/cjs/vuu-modules.js.map +1 -1
- package/esm/Table.js +4 -86
- package/esm/Table.js.map +1 -1
- package/esm/basket/BasketModule.js +11 -11
- package/esm/basket/BasketModule.js.map +1 -1
- package/esm/core/table/TableContainer.js +136 -0
- package/esm/core/table/TableContainer.js.map +1 -0
- package/esm/data-utils.js +1 -10
- package/esm/data-utils.js.map +1 -1
- package/esm/index.js +5 -4
- package/esm/index.js.map +1 -1
- package/esm/simul/SimulModule.js +4 -4
- package/esm/simul/SimulModule.js.map +1 -1
- package/esm/simul/reference-data/instruments-extended.js +3 -2
- package/esm/simul/reference-data/instruments-extended.js.map +1 -1
- package/esm/simul/reference-data/instruments.js +4 -2
- package/esm/simul/reference-data/instruments.js.map +1 -1
- package/esm/simul/reference-data/orders.js +3 -2
- package/esm/simul/reference-data/orders.js.map +1 -1
- package/esm/simul/reference-data/parent-child-orders.js +5 -4
- package/esm/simul/reference-data/parent-child-orders.js.map +1 -1
- package/esm/simul/reference-data/prices.js +3 -2
- package/esm/simul/reference-data/prices.js.map +1 -1
- package/esm/vuu-modules.js +1 -1
- package/esm/vuu-modules.js.map +1 -1
- package/package.json +6 -6
- package/types/Table.d.ts +2 -2
- package/types/basket/BasketModule.d.ts +2 -2
- package/types/basket/reference-data/prices.d.ts +1 -2
- package/types/core/table/TableContainer.d.ts +16 -0
- package/types/index.d.ts +3 -2
- package/types/simul/reference-data/instruments-extended.d.ts +1 -2
- package/types/simul/reference-data/instruments.d.ts +1 -2
- package/types/simul/reference-data/orders.d.ts +1 -2
- package/types/simul/reference-data/parent-child-orders.d.ts +2 -3
- package/types/simul/reference-data/prices.d.ts +1 -2
- package/types/vuu-modules.d.ts +3 -0
- package/cjs/basket/reference-data/prices.js +0 -54
- package/cjs/basket/reference-data/prices.js.map +0 -1
- package/esm/basket/reference-data/prices.js +0 -52
- package/esm/basket/reference-data/prices.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasketModule.js","sources":["../../../../packages/vuu-data-test/src/basket/BasketModule.ts"],"sourcesContent":["import { ColumnMap, isViewportRpcRequest } from \"@vuu-ui/vuu-utils\";\nimport { ServiceHandler, VuuModule } from \"../core/module/VuuModule\";\nimport { BasketsTableName, schemas } from \"./basket-schemas\";\nimport { joinTables, Table } from \"../Table\";\nimport basketConstituentData from \"./reference-data/constituents\";\nimport pricesTable from \"./reference-data/prices\";\nimport {\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcViewportAction,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nlet basketIncrement = 1;\n\n// export as convenience for showcase examples\nexport const createBasketTradingRow = (\n basketId: string,\n basketName: string,\n side = \"BUY\",\n status = \"OFF MARKET\",\n) => [\n basketId,\n basketName,\n 0,\n 1.25,\n `steve-${basketIncrement++}`,\n side,\n status,\n 1_000_000,\n 1_250_000,\n 100,\n];\n\nconst viewportRpcResponse = (\n params: string[],\n vpId: string,\n action?: Partial<VuuRpcViewportAction>,\n): VuuRpcViewportResponse => ({\n type: \"VIEW_PORT_RPC_RESPONSE\",\n action: {\n type: \"VP_RPC_SUCCESS\",\n ...action,\n },\n method: \"???\",\n namedParams: {},\n params,\n vpId,\n});\n\nconst undefinedTables = {\n algoType: undefined,\n basket: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\n// This is a 'local' columnMap\nconst buildDataColumnMap = (tableName: BasketsTableName) =>\n Object.values(schemas[tableName].columns).reduce<ColumnMap>(\n (map, col, index) => {\n map[col.name] = index;\n return map;\n },\n {},\n );\n\nconst tableMaps: Record<BasketsTableName, ColumnMap> = {\n algoType: buildDataColumnMap(\"algoType\"),\n basket: buildDataColumnMap(\"basket\"),\n basketTrading: buildDataColumnMap(\"basketTrading\"),\n basketTradingConstituent: buildDataColumnMap(\"basketTradingConstituent\"),\n basketConstituent: buildDataColumnMap(\"basketConstituent\"),\n basketTradingConstituentJoin: buildDataColumnMap(\n \"basketTradingConstituentJoin\",\n ),\n priceStrategyType: buildDataColumnMap(\"priceStrategyType\"),\n};\n\nconst basketTradingConstituent = new Table(\n schemas.basketTradingConstituent,\n [],\n tableMaps.basketTradingConstituent,\n);\n\n/**\n * This is an example of how we might extend the built-in VuuModule to\n * implement a module-specific service in such a way that it can invoke\n * methods on the VuuModule.\n */\nexport class BasketModule extends VuuModule<BasketsTableName> {\n #tables: Record<BasketsTableName, Table> = {\n algoType: new Table(\n schemas.algoType,\n [\n [\"Sniper\", 0],\n [\"Dark Liquidity\", 1],\n [\"VWAP\", 2],\n [\"POV\", 3],\n [\"Dynamic Close\", 4],\n ],\n tableMaps.algoType,\n ),\n basket: new Table(\n schemas.basket,\n [\n [\".NASDAQ100\", \".NASDAQ100\", 0, 0],\n [\".HSI\", \".HSI\", 0, 0],\n [\".FTSE100\", \".FTSE100\", 0, 0],\n [\".SP500\", \".SP500\", 0, 0],\n ],\n tableMaps.basket,\n ),\n basketConstituent: new Table(\n schemas.basketConstituent,\n basketConstituentData,\n tableMaps.basketConstituent,\n ),\n basketTrading: new Table(\n schemas.basketTrading,\n [],\n tableMaps.basketTrading,\n ),\n basketTradingConstituent,\n basketTradingConstituentJoin: joinTables(\n { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n basketTradingConstituent,\n pricesTable,\n \"ric\",\n ),\n priceStrategyType: new Table(\n schemas.priceStrategyType,\n [\n [\"Peg to Near Touch\", 0],\n [\"Far Touch\", 1],\n [\"Limit\", 2],\n [\"Algo\", 3],\n ],\n tableMaps.priceStrategyType,\n ),\n };\n\n constructor() {\n super(\"BASKET\");\n }\n\n get menus(): Record<BasketsTableName, VuuMenu | undefined> {\n return {\n ...undefinedTables,\n basket: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Basket\",\n rpcName: \"CREATE_NEW_BASKET\",\n },\n ],\n },\n };\n }\n\n get schemas() {\n return schemas;\n }\n\n get services() {\n return {\n ...undefinedTables,\n basket: [\n {\n rpcName: \"createBasket\",\n service: this.createNewBasket,\n },\n ],\n basketTrading: [\n {\n rpcName: \"sendToMarket\",\n service: this.sendToMarket,\n },\n {\n rpcName: \"takeOffMarket\",\n service: this.takeOffMarket,\n },\n ],\n basketTradingConstituentJoin: [\n {\n rpcName: \"addConstituent\",\n service: this.addConstituent,\n },\n ],\n };\n }\n\n get tables() {\n return this.#tables;\n }\n\n get visualLinks() {\n return {\n ...undefinedTables,\n basketConstituent: [\n { fromColumn: \"basketId\", toColumn: \"id\", toTable: \"basket\" },\n ],\n };\n }\n\n private createTradingBasket(basketId: string, basketName: string) {\n const basketTradingRow = createBasketTradingRow(basketId, basketName);\n\n this.tables.basketTrading.insert(basketTradingRow);\n\n const { basketId: key } = buildDataColumnMap(\"basketConstituent\");\n const constituents = this.tables.basketConstituent.data.filter(\n (c) => c[key] === basketId,\n );\n\n const { instanceId } = tableMaps.basketTrading;\n\n constituents.forEach(\n ([, , description, , ric, , , quantity, weighting]) => {\n const algo = \"\";\n const algoParams = \"\";\n const limitPrice = 95;\n const notionalLocal = 0;\n const notionalUsd = 0;\n const pctFilled = 0;\n const priceSpread = 0;\n const priceStrategyId = \"\";\n const side = \"BUY\";\n const venue = \"venue\";\n\n const basketInstanceId = basketTradingRow[instanceId];\n const basketTradingConstituentRow: VuuRowDataItemType[] = [\n algo,\n algoParams,\n basketId,\n description,\n basketInstanceId,\n `${basketInstanceId}-${ric}`,\n limitPrice,\n notionalLocal,\n notionalUsd,\n pctFilled,\n priceSpread,\n priceStrategyId,\n quantity,\n ric,\n side,\n venue,\n weighting,\n ];\n basketTradingConstituent.insert(basketTradingConstituentRow);\n },\n );\n\n // return the key\n return basketTradingRow[instanceId] as string;\n }\n\n private createNewBasket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n const params = rpcRequest.params as string[];\n const [basketId, basketName] = params;\n const key = this.createTradingBasket(basketId, basketName);\n return viewportRpcResponse(params, vpId, { key });\n } else {\n throw Error(`createNewBasket invalid rpcRequest`);\n }\n };\n\n private sendToMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n const params = rpcRequest.params as string[];\n const [basketInstanceId] = params;\n this.tables.basketTrading.update(basketInstanceId, \"status\", \"ON_MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`sendToMarket invalid rpcRequest`);\n }\n };\n private takeOffMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n const params = rpcRequest.params as string[];\n const [basketInstanceId] = params;\n this.tables.basketTrading.update(\n basketInstanceId,\n \"status\",\n \"OFF-MARKET\",\n );\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`takeOffMarket invalid rpcRequest`);\n }\n };\n\n private addConstituent: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n throw Error(`addConstituent not implemented`);\n } else {\n throw Error(`addConstituent invalid rpcRequest`);\n }\n };\n}\n\nexport const basketModule = new BasketModule();\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BasketModule.js","sources":["../../../../packages/vuu-data-test/src/basket/BasketModule.ts"],"sourcesContent":["import {\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcViewportAction,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, isViewportRpcRequest } from \"@vuu-ui/vuu-utils\";\nimport { ServiceHandler, VuuModule } from \"../core/module/VuuModule\";\nimport tableContainer from \"../core/table/TableContainer\";\nimport { BasketsTableName, schemas } from \"./basket-schemas\";\nimport basketConstituentData from \"./reference-data/constituents\";\nimport { type Table } from \"../Table\";\n\nconst { createTable } = tableContainer;\n\nlet basketIncrement = 1;\n\n// export as convenience for showcase examples\nexport const createBasketTradingRow = (\n basketId: string,\n basketName: string,\n side = \"BUY\",\n status = \"OFF MARKET\",\n) => [\n basketId,\n basketName,\n 0,\n 1.25,\n `steve-${basketIncrement++}`,\n side,\n status,\n 1_000_000,\n 1_250_000,\n 100,\n];\n\nconst viewportRpcResponse = (\n params: string[],\n vpId: string,\n action?: Partial<VuuRpcViewportAction>,\n): VuuRpcViewportResponse => ({\n type: \"VIEW_PORT_RPC_RESPONSE\",\n action: {\n type: \"VP_RPC_SUCCESS\",\n ...action,\n },\n method: \"???\",\n namedParams: {},\n params,\n vpId,\n});\n\nconst undefinedTables = {\n algoType: undefined,\n basket: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\n// This is a 'local' columnMap\nconst buildDataColumnMap = (tableName: BasketsTableName) =>\n Object.values(schemas[tableName].columns).reduce<ColumnMap>(\n (map, col, index) => {\n map[col.name] = index;\n return map;\n },\n {},\n );\n\nconst tableMaps: Record<BasketsTableName, ColumnMap> = {\n algoType: buildDataColumnMap(\"algoType\"),\n basket: buildDataColumnMap(\"basket\"),\n basketTrading: buildDataColumnMap(\"basketTrading\"),\n basketTradingConstituent: buildDataColumnMap(\"basketTradingConstituent\"),\n basketConstituent: buildDataColumnMap(\"basketConstituent\"),\n basketTradingConstituentJoin: buildDataColumnMap(\n \"basketTradingConstituentJoin\",\n ),\n priceStrategyType: buildDataColumnMap(\"priceStrategyType\"),\n};\n\nconst basketTradingConstituent = tableContainer.createTable(\n schemas.basketTradingConstituent,\n [],\n tableMaps.basketTradingConstituent,\n);\n\n/**\n * This is an example of how we might extend the built-in VuuModule to\n * implement a module-specific service in such a way that it can invoke\n * methods on the VuuModule.\n */\nexport class BasketModule extends VuuModule<BasketsTableName> {\n #tables: Record<BasketsTableName, Table> = {\n algoType: createTable(\n schemas.algoType,\n [\n [\"Sniper\", 0],\n [\"Dark Liquidity\", 1],\n [\"VWAP\", 2],\n [\"POV\", 3],\n [\"Dynamic Close\", 4],\n ],\n tableMaps.algoType,\n ),\n basket: createTable(\n schemas.basket,\n [\n [\".NASDAQ100\", \".NASDAQ100\", 0, 0],\n [\".HSI\", \".HSI\", 0, 0],\n [\".FTSE100\", \".FTSE100\", 0, 0],\n [\".SP500\", \".SP500\", 0, 0],\n ],\n tableMaps.basket,\n ),\n basketConstituent: createTable(\n schemas.basketConstituent,\n basketConstituentData,\n tableMaps.basketConstituent,\n ),\n basketTrading: createTable(\n schemas.basketTrading,\n [],\n tableMaps.basketTrading,\n ),\n basketTradingConstituent,\n basketTradingConstituentJoin: tableContainer.createJoinTable(\n { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n { module: \"BASKET\", table: \"basketTradingConstituent\" },\n { module: \"SIMUL\", table: \"prices\" },\n \"ric\",\n ),\n priceStrategyType: createTable(\n schemas.priceStrategyType,\n [\n [\"Peg to Near Touch\", 0],\n [\"Far Touch\", 1],\n [\"Limit\", 2],\n [\"Algo\", 3],\n ],\n tableMaps.priceStrategyType,\n ),\n };\n\n constructor() {\n super(\"BASKET\");\n }\n\n get menus(): Record<BasketsTableName, VuuMenu | undefined> {\n return {\n ...undefinedTables,\n basket: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Basket\",\n rpcName: \"CREATE_NEW_BASKET\",\n },\n ],\n },\n };\n }\n\n get schemas() {\n return schemas;\n }\n\n get services() {\n return {\n ...undefinedTables,\n basket: [\n {\n rpcName: \"createBasket\",\n service: this.createNewBasket,\n },\n ],\n basketTrading: [\n {\n rpcName: \"sendToMarket\",\n service: this.sendToMarket,\n },\n {\n rpcName: \"takeOffMarket\",\n service: this.takeOffMarket,\n },\n ],\n basketTradingConstituentJoin: [\n {\n rpcName: \"addConstituent\",\n service: this.addConstituent,\n },\n ],\n };\n }\n\n get tables() {\n return this.#tables;\n }\n\n get visualLinks() {\n return {\n ...undefinedTables,\n basketConstituent: [\n { fromColumn: \"basketId\", toColumn: \"id\", toTable: \"basket\" },\n ],\n };\n }\n\n private createTradingBasket(basketId: string, basketName: string) {\n const basketTradingRow = createBasketTradingRow(basketId, basketName);\n\n this.tables.basketTrading.insert(basketTradingRow);\n\n const { basketId: key } = buildDataColumnMap(\"basketConstituent\");\n const constituents = this.tables.basketConstituent.data.filter(\n (c) => c[key] === basketId,\n );\n\n const { instanceId } = tableMaps.basketTrading;\n\n constituents.forEach(\n ([, , description, , ric, , , quantity, weighting]) => {\n const algo = \"\";\n const algoParams = \"\";\n const limitPrice = 95;\n const notionalLocal = 0;\n const notionalUsd = 0;\n const pctFilled = 0;\n const priceSpread = 0;\n const priceStrategyId = \"\";\n const side = \"BUY\";\n const venue = \"venue\";\n\n const basketInstanceId = basketTradingRow[instanceId];\n const basketTradingConstituentRow: VuuRowDataItemType[] = [\n algo,\n algoParams,\n basketId,\n description,\n basketInstanceId,\n `${basketInstanceId}-${ric}`,\n limitPrice,\n notionalLocal,\n notionalUsd,\n pctFilled,\n priceSpread,\n priceStrategyId,\n quantity,\n ric,\n side,\n venue,\n weighting,\n ];\n basketTradingConstituent.insert(basketTradingConstituentRow);\n },\n );\n\n // return the key\n return basketTradingRow[instanceId] as string;\n }\n\n private createNewBasket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n const params = rpcRequest.params as string[];\n const [basketId, basketName] = params;\n const key = this.createTradingBasket(basketId, basketName);\n return viewportRpcResponse(params, vpId, { key });\n } else {\n throw Error(`createNewBasket invalid rpcRequest`);\n }\n };\n\n private sendToMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n const params = rpcRequest.params as string[];\n const [basketInstanceId] = params;\n this.tables.basketTrading.update(basketInstanceId, \"status\", \"ON_MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`sendToMarket invalid rpcRequest`);\n }\n };\n private takeOffMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n const params = rpcRequest.params as string[];\n const [basketInstanceId] = params;\n this.tables.basketTrading.update(\n basketInstanceId,\n \"status\",\n \"OFF-MARKET\",\n );\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`takeOffMarket invalid rpcRequest`);\n }\n };\n\n private addConstituent: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n throw Error(`addConstituent not implemented`);\n } else {\n throw Error(`addConstituent invalid rpcRequest`);\n }\n };\n}\n\nexport const basketModule = new BasketModule();\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { buildDataColumnMapFromSchema, Table } from '../../Table.js';
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __typeError = (msg) => {
|
|
5
|
+
throw TypeError(msg);
|
|
6
|
+
};
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
|
|
9
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
10
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
11
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
12
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
13
|
+
var _instance, _tables;
|
|
14
|
+
const _TableContainer = class _TableContainer {
|
|
15
|
+
constructor() {
|
|
16
|
+
__privateAdd(this, _tables, /* @__PURE__ */ new Map());
|
|
17
|
+
__publicField(this, "createTable", (schema, data, dataMap, updateGenerator) => {
|
|
18
|
+
const table = new Table(schema, data, dataMap, updateGenerator);
|
|
19
|
+
this.addTable(table);
|
|
20
|
+
return table;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
static get instance() {
|
|
24
|
+
if (!__privateGet(_TableContainer, _instance)) {
|
|
25
|
+
__privateSet(_TableContainer, _instance, new _TableContainer());
|
|
26
|
+
}
|
|
27
|
+
return __privateGet(_TableContainer, _instance);
|
|
28
|
+
}
|
|
29
|
+
// TODO this is problematic in that it assumes both tables are already created
|
|
30
|
+
// depends on the order in which modules are imnported
|
|
31
|
+
// Make this independent odf base table creation order
|
|
32
|
+
createJoinTable(joinTable, { table: t1 }, { table: t2 }, joinColumn) {
|
|
33
|
+
const table1 = this.getTable(t1);
|
|
34
|
+
const table2 = this.getTable(t2);
|
|
35
|
+
const { map: m1, schema: schema1 } = table1;
|
|
36
|
+
const { map: m2, schema: schema2 } = table2;
|
|
37
|
+
const k1 = m1[joinColumn];
|
|
38
|
+
const k2 = m2[joinColumn];
|
|
39
|
+
const combinedColumns = new Set(
|
|
40
|
+
[...schema1.columns, ...schema2.columns].map((col) => col.name).sort()
|
|
41
|
+
);
|
|
42
|
+
const combinedSchema = {
|
|
43
|
+
key: joinColumn,
|
|
44
|
+
table: joinTable,
|
|
45
|
+
columns: Array.from(combinedColumns).map((columnName) => ({
|
|
46
|
+
name: columnName,
|
|
47
|
+
serverDataType: getServerDataType(columnName, schema1, schema2)
|
|
48
|
+
}))
|
|
49
|
+
};
|
|
50
|
+
const data = [];
|
|
51
|
+
const combinedColumnMap = buildDataColumnMapFromSchema(combinedSchema);
|
|
52
|
+
for (const row of table1.data) {
|
|
53
|
+
const row2 = table2.findByKey(String(row[k1]));
|
|
54
|
+
if (row2) {
|
|
55
|
+
const out = [];
|
|
56
|
+
for (const column of table1.schema.columns) {
|
|
57
|
+
const value = row[m1[column.name]];
|
|
58
|
+
out[combinedColumnMap[column.name]] = value;
|
|
59
|
+
}
|
|
60
|
+
for (const column of table2.schema.columns) {
|
|
61
|
+
const value = row2[m2[column.name]];
|
|
62
|
+
out[combinedColumnMap[column.name]] = value;
|
|
63
|
+
}
|
|
64
|
+
data.push(out);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const newTable = new Table(combinedSchema, data, combinedColumnMap);
|
|
68
|
+
table1.on("insert", (row) => {
|
|
69
|
+
const row2 = table2.findByKey(String(row[k1]));
|
|
70
|
+
if (row2) {
|
|
71
|
+
const out = [];
|
|
72
|
+
for (const column of table1.schema.columns) {
|
|
73
|
+
const value = row[m1[column.name]];
|
|
74
|
+
out[combinedColumnMap[column.name]] = value;
|
|
75
|
+
}
|
|
76
|
+
for (const column of table2.schema.columns) {
|
|
77
|
+
const value = row2[m2[column.name]];
|
|
78
|
+
out[combinedColumnMap[column.name]] = value;
|
|
79
|
+
}
|
|
80
|
+
newTable.insert(out);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
table2.on("update", (row) => {
|
|
84
|
+
const keyValue = row[k2];
|
|
85
|
+
const targetRow = newTable.findByKey(keyValue);
|
|
86
|
+
if (targetRow) {
|
|
87
|
+
const updatedRow = targetRow.slice();
|
|
88
|
+
for (const { name } of table2.schema.columns) {
|
|
89
|
+
if (row[m2[name]] !== updatedRow[combinedColumnMap[name]]) {
|
|
90
|
+
updatedRow[combinedColumnMap[name]] = row[m2[name]];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
newTable.updateRow(updatedRow);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
return newTable;
|
|
97
|
+
}
|
|
98
|
+
addTable(table) {
|
|
99
|
+
__privateGet(this, _tables).set(table.name, table);
|
|
100
|
+
}
|
|
101
|
+
getTable(tableName) {
|
|
102
|
+
const table = __privateGet(this, _tables).get(tableName);
|
|
103
|
+
if (table) {
|
|
104
|
+
return table;
|
|
105
|
+
} else {
|
|
106
|
+
throw Error(`[TableContainer] no table ${tableName}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
_instance = new WeakMap();
|
|
111
|
+
_tables = new WeakMap();
|
|
112
|
+
__privateAdd(_TableContainer, _instance);
|
|
113
|
+
let TableContainer = _TableContainer;
|
|
114
|
+
var tableContainer = TableContainer.instance;
|
|
115
|
+
const getServerDataType = (columnName, { columns: cols1, table: t1 }, { columns: cols2, table: t2 }) => {
|
|
116
|
+
const col1 = cols1.find((col) => col.name === columnName);
|
|
117
|
+
const col2 = cols2.find((col) => col.name === columnName);
|
|
118
|
+
if (col1 && col2) {
|
|
119
|
+
if (col1.serverDataType === col2.serverDataType) {
|
|
120
|
+
return col1.serverDataType;
|
|
121
|
+
} else {
|
|
122
|
+
throw Error(
|
|
123
|
+
`both tables ${t1.table} and ${t2.table} implement column ${columnName}, but with types differ`
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
} else if (col1) {
|
|
127
|
+
return col1.serverDataType;
|
|
128
|
+
} else if (col2) {
|
|
129
|
+
return col2.serverDataType;
|
|
130
|
+
} else {
|
|
131
|
+
throw Error(`how is this possible`);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
export { tableContainer as default };
|
|
136
|
+
//# sourceMappingURL=TableContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableContainer.js","sources":["../../../../../packages/vuu-data-test/src/core/table/TableContainer.ts"],"sourcesContent":["import { SchemaColumn, TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport { buildDataColumnMapFromSchema, Table } from \"../../Table\";\nimport { VuuRowDataItemType, VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"@vuu-ui/vuu-utils\";\nimport { UpdateGenerator } from \"../../rowUpdates\";\n\nclass TableContainer {\n private constructor() {\n // empty constructor is all we need\n }\n static #instance: TableContainer;\n\n public static get instance(): TableContainer {\n if (!TableContainer.#instance) {\n TableContainer.#instance = new TableContainer();\n }\n return TableContainer.#instance;\n }\n\n #tables = new Map<string, Table>();\n\n createTable = (\n schema: TableSchema,\n data: VuuRowDataItemType[][],\n dataMap: ColumnMap,\n updateGenerator?: UpdateGenerator,\n ) => {\n const table = new Table(schema, data, dataMap, updateGenerator);\n this.addTable(table);\n return table;\n };\n\n // TODO this is problematic in that it assumes both tables are already created\n // depends on the order in which modules are imnported\n // Make this independent odf base table creation order\n createJoinTable(\n joinTable: VuuTable,\n { table: t1 }: VuuTable,\n { table: t2 }: VuuTable,\n joinColumn: string,\n ) {\n const table1 = this.getTable(t1);\n const table2 = this.getTable(t2);\n\n // Just copies source tables, then registers update listeners.\n // Not terribly efficient, but good enough for showcase\n\n const { map: m1, schema: schema1 } = table1;\n const { map: m2, schema: schema2 } = table2;\n const k1 = m1[joinColumn];\n const k2 = m2[joinColumn];\n\n const combinedColumns = new Set(\n [...schema1.columns, ...schema2.columns].map((col) => col.name).sort(),\n );\n\n const combinedSchema: TableSchema = {\n key: joinColumn,\n table: joinTable,\n columns: Array.from(combinedColumns).map<SchemaColumn>((columnName) => ({\n name: columnName,\n serverDataType: getServerDataType(columnName, schema1, schema2),\n })),\n };\n\n const data: VuuRowDataItemType[][] = [];\n const combinedColumnMap = buildDataColumnMapFromSchema(combinedSchema);\n // const start = performance.now();\n for (const row of table1.data) {\n const row2 = table2.findByKey(String(row[k1]));\n if (row2) {\n const out = [];\n for (const column of table1.schema.columns) {\n const value = row[m1[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n for (const column of table2.schema.columns) {\n const value = row2[m2[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n data.push(out);\n }\n }\n // const end = performance.now();\n // console.log(`took ${end - start} ms to create join table ${joinTable.table}`);\n\n const newTable = new Table(combinedSchema, data, combinedColumnMap);\n\n table1.on(\"insert\", (row) => {\n const row2 = table2.findByKey(String(row[k1]));\n if (row2) {\n const out = [];\n for (const column of table1.schema.columns) {\n const value = row[m1[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n for (const column of table2.schema.columns) {\n const value = row2[m2[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n newTable.insert(out);\n }\n });\n\n table2.on(\"update\", (row) => {\n const keyValue = row[k2] as string;\n const targetRow = newTable.findByKey(keyValue);\n if (targetRow) {\n const updatedRow = targetRow.slice();\n for (const { name } of table2.schema.columns) {\n if (row[m2[name]] !== updatedRow[combinedColumnMap[name]]) {\n updatedRow[combinedColumnMap[name]] = row[m2[name]];\n }\n }\n newTable.updateRow(updatedRow);\n }\n });\n\n return newTable;\n }\n\n addTable(table: Table) {\n this.#tables.set(table.name, table);\n }\n getTable<T = Table>(tableName: string) {\n const table = this.#tables.get(tableName) as T;\n if (table) {\n return table;\n } else {\n throw Error(`[TableContainer] no table ${tableName}`);\n }\n }\n}\n\nexport default TableContainer.instance;\n\nconst getServerDataType = (\n columnName: string,\n { columns: cols1, table: t1 }: TableSchema,\n { columns: cols2, table: t2 }: TableSchema,\n) => {\n const col1 = cols1.find((col) => col.name === columnName);\n const col2 = cols2.find((col) => col.name === columnName);\n if (col1 && col2) {\n if (col1.serverDataType === col2.serverDataType) {\n return col1.serverDataType;\n } else {\n throw Error(\n `both tables ${t1.table} and ${t2.table} implement column ${columnName}, but with types differ`,\n );\n }\n } else if (col1) {\n return col1.serverDataType;\n } else if (col2) {\n return col2.serverDataType;\n } else {\n throw Error(`how is this possible`);\n }\n};\n"],"names":[],"mappings":"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"}
|
package/esm/data-utils.js
CHANGED
|
@@ -4,15 +4,6 @@ function random(min, max) {
|
|
|
4
4
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
5
5
|
}
|
|
6
6
|
const nextRandomDouble = (min, max) => min + (max - min) * Math.random();
|
|
7
|
-
const initBidAsk = (priceMaxDelta, nextRandomDouble2) => {
|
|
8
|
-
const mid = nextRandomDouble2(0, 1e3);
|
|
9
|
-
const tempBid = nextRandomDouble2(mid - priceMaxDelta, mid - 1);
|
|
10
|
-
const ask = nextRandomDouble2(mid + 1, mid + priceMaxDelta);
|
|
11
|
-
const bid = tempBid < 0 ? mid : tempBid;
|
|
12
|
-
const newBid = Math.round(bid * 100) / 100;
|
|
13
|
-
const newAsk = Math.round(ask * 100) / 100;
|
|
14
|
-
return [newBid, newAsk];
|
|
15
|
-
};
|
|
16
7
|
const maxAsk = (bid, ask, spreadMultipler, priceMaxDelta) => {
|
|
17
8
|
const spread = ask - bid;
|
|
18
9
|
return Math.min(
|
|
@@ -48,5 +39,5 @@ const generateNextBidAsk = (bid, ask, spreadMultipler, priceMaxDelta, nextRandom
|
|
|
48
39
|
return [newBid, newAsk];
|
|
49
40
|
};
|
|
50
41
|
|
|
51
|
-
export { generateNextBidAsk,
|
|
42
|
+
export { generateNextBidAsk, nextRandomDouble, random };
|
|
52
43
|
//# sourceMappingURL=data-utils.js.map
|
package/esm/data-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-utils.js","sources":["../../../packages/vuu-data-test/src/data-utils.ts"],"sourcesContent":["export function random(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nexport function randomPercentage(value: number) {\n const dec = random(2, 99);\n const percentage = dec / 100;\n return value * percentage;\n}\nexport type PriceGenerator = (min: number, max: number) => number;\n\nexport const nextRandomDouble: PriceGenerator = (min, max) =>\n min + (max - min) * Math.random();\n\nexport const initBidAsk = (\n priceMaxDelta: number,\n nextRandomDouble: PriceGenerator\n) => {\n const mid = nextRandomDouble(0, 1000);\n const tempBid = nextRandomDouble(mid - priceMaxDelta, mid - 1);\n const ask = nextRandomDouble(mid + 1, mid + priceMaxDelta);\n const bid = tempBid < 0 ? mid : tempBid;\n const newBid = Math.round(bid * 100) / 100.0;\n const newAsk = Math.round(ask * 100) / 100.0;\n return [newBid, newAsk];\n};\n\nconst maxAsk = (\n bid: number,\n ask: number,\n spreadMultipler: number,\n priceMaxDelta: number\n) => {\n const spread = ask - bid;\n return Math.min(\n ask + spreadMultipler * spread,\n spread / 2 + bid + priceMaxDelta\n );\n};\n\nconst minAsk = (bid: number, ask: number) => {\n return Math.max(bid + 1, (ask - bid) / 2 + bid);\n};\n\nconst maxBid = (bid: number, ask: number) => {\n const result = Math.min(ask - 1, (ask - bid) / 2 + bid);\n return result < 1 ? bid + 1 : result;\n};\n\nconst minBid = (\n bid: number,\n ask: number,\n spreadMultipler: number,\n priceMaxDelta: number\n) => {\n const spread = ask - bid;\n const mid = spread / 2 + bid;\n const result = Math.max(\n bid - Math.min(spreadMultipler * spread, 10),\n mid - priceMaxDelta\n );\n return result < 0 ? bid : result;\n};\n\nexport const generateNextBidAsk = (\n bid: number,\n ask: number,\n spreadMultipler: number,\n priceMaxDelta: number,\n nextRandomDouble: PriceGenerator\n) => {\n let tempAsk = ask;\n if (Math.abs(bid - ask) <= 1) tempAsk = ask + 1;\n const minBidValue = minBid(bid, tempAsk, spreadMultipler, priceMaxDelta);\n const maxBidValue = maxBid(bid, tempAsk);\n const minAskValue = minAsk(bid, tempAsk);\n const maxAskValue = maxAsk(bid, tempAsk, spreadMultipler, priceMaxDelta);\n const newBid =\n Math.round(nextRandomDouble(minBidValue, maxBidValue) * 100) / 100.0;\n const newAsk =\n Math.round(nextRandomDouble(minAskValue, maxAskValue) * 100) / 100.0;\n return [newBid, newAsk];\n};\n"],"names":["nextRandomDouble"],"mappings":"AAAgB,SAAA,MAAA,CAAO,KAAa,GAAa,EAAA;AAC/C,EAAM,GAAA,GAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AACnB,EAAM,GAAA,GAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AACpB,EAAO,OAAA,IAAA,CAAK,MAAM,IAAK,CAAA,MAAA,MAAY,GAAM,GAAA,GAAA,GAAM,EAAE,CAAI,GAAA,GAAA;AACvD;AASa,MAAA,gBAAA,GAAmC,CAAC,GAAK,EAAA,GAAA,KACpD,OAAO,GAAM,GAAA,GAAA,IAAO,KAAK,MAAO;
|
|
1
|
+
{"version":3,"file":"data-utils.js","sources":["../../../packages/vuu-data-test/src/data-utils.ts"],"sourcesContent":["export function random(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nexport function randomPercentage(value: number) {\n const dec = random(2, 99);\n const percentage = dec / 100;\n return value * percentage;\n}\nexport type PriceGenerator = (min: number, max: number) => number;\n\nexport const nextRandomDouble: PriceGenerator = (min, max) =>\n min + (max - min) * Math.random();\n\nexport const initBidAsk = (\n priceMaxDelta: number,\n nextRandomDouble: PriceGenerator\n) => {\n const mid = nextRandomDouble(0, 1000);\n const tempBid = nextRandomDouble(mid - priceMaxDelta, mid - 1);\n const ask = nextRandomDouble(mid + 1, mid + priceMaxDelta);\n const bid = tempBid < 0 ? mid : tempBid;\n const newBid = Math.round(bid * 100) / 100.0;\n const newAsk = Math.round(ask * 100) / 100.0;\n return [newBid, newAsk];\n};\n\nconst maxAsk = (\n bid: number,\n ask: number,\n spreadMultipler: number,\n priceMaxDelta: number\n) => {\n const spread = ask - bid;\n return Math.min(\n ask + spreadMultipler * spread,\n spread / 2 + bid + priceMaxDelta\n );\n};\n\nconst minAsk = (bid: number, ask: number) => {\n return Math.max(bid + 1, (ask - bid) / 2 + bid);\n};\n\nconst maxBid = (bid: number, ask: number) => {\n const result = Math.min(ask - 1, (ask - bid) / 2 + bid);\n return result < 1 ? bid + 1 : result;\n};\n\nconst minBid = (\n bid: number,\n ask: number,\n spreadMultipler: number,\n priceMaxDelta: number\n) => {\n const spread = ask - bid;\n const mid = spread / 2 + bid;\n const result = Math.max(\n bid - Math.min(spreadMultipler * spread, 10),\n mid - priceMaxDelta\n );\n return result < 0 ? bid : result;\n};\n\nexport const generateNextBidAsk = (\n bid: number,\n ask: number,\n spreadMultipler: number,\n priceMaxDelta: number,\n nextRandomDouble: PriceGenerator\n) => {\n let tempAsk = ask;\n if (Math.abs(bid - ask) <= 1) tempAsk = ask + 1;\n const minBidValue = minBid(bid, tempAsk, spreadMultipler, priceMaxDelta);\n const maxBidValue = maxBid(bid, tempAsk);\n const minAskValue = minAsk(bid, tempAsk);\n const maxAskValue = maxAsk(bid, tempAsk, spreadMultipler, priceMaxDelta);\n const newBid =\n Math.round(nextRandomDouble(minBidValue, maxBidValue) * 100) / 100.0;\n const newAsk =\n Math.round(nextRandomDouble(minAskValue, maxAskValue) * 100) / 100.0;\n return [newBid, newAsk];\n};\n"],"names":["nextRandomDouble"],"mappings":"AAAgB,SAAA,MAAA,CAAO,KAAa,GAAa,EAAA;AAC/C,EAAM,GAAA,GAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AACnB,EAAM,GAAA,GAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AACpB,EAAO,OAAA,IAAA,CAAK,MAAM,IAAK,CAAA,MAAA,MAAY,GAAM,GAAA,GAAA,GAAM,EAAE,CAAI,GAAA,GAAA;AACvD;AASa,MAAA,gBAAA,GAAmC,CAAC,GAAK,EAAA,GAAA,KACpD,OAAO,GAAM,GAAA,GAAA,IAAO,KAAK,MAAO;AAelC,MAAM,MAAS,GAAA,CACb,GACA,EAAA,GAAA,EACA,iBACA,aACG,KAAA;AACH,EAAA,MAAM,SAAS,GAAM,GAAA,GAAA;AACrB,EAAA,OAAO,IAAK,CAAA,GAAA;AAAA,IACV,MAAM,eAAkB,GAAA,MAAA;AAAA,IACxB,MAAA,GAAS,IAAI,GAAM,GAAA;AAAA,GACrB;AACF,CAAA;AAEA,MAAM,MAAA,GAAS,CAAC,GAAA,EAAa,GAAgB,KAAA;AAC3C,EAAA,OAAO,KAAK,GAAI,CAAA,GAAA,GAAM,IAAI,GAAM,GAAA,GAAA,IAAO,IAAI,GAAG,CAAA;AAChD,CAAA;AAEA,MAAM,MAAA,GAAS,CAAC,GAAA,EAAa,GAAgB,KAAA;AAC3C,EAAM,MAAA,MAAA,GAAS,KAAK,GAAI,CAAA,GAAA,GAAM,IAAI,GAAM,GAAA,GAAA,IAAO,IAAI,GAAG,CAAA;AACtD,EAAO,OAAA,MAAA,GAAS,CAAI,GAAA,GAAA,GAAM,CAAI,GAAA,MAAA;AAChC,CAAA;AAEA,MAAM,MAAS,GAAA,CACb,GACA,EAAA,GAAA,EACA,iBACA,aACG,KAAA;AACH,EAAA,MAAM,SAAS,GAAM,GAAA,GAAA;AACrB,EAAM,MAAA,GAAA,GAAM,SAAS,CAAI,GAAA,GAAA;AACzB,EAAA,MAAM,SAAS,IAAK,CAAA,GAAA;AAAA,IAClB,GAAM,GAAA,IAAA,CAAK,GAAI,CAAA,eAAA,GAAkB,QAAQ,EAAE,CAAA;AAAA,IAC3C,GAAM,GAAA;AAAA,GACR;AACA,EAAO,OAAA,MAAA,GAAS,IAAI,GAAM,GAAA,MAAA;AAC5B,CAAA;AAEO,MAAM,qBAAqB,CAChC,GAAA,EACA,GACA,EAAA,eAAA,EACA,eACAA,iBACG,KAAA;AACH,EAAA,IAAI,OAAU,GAAA,GAAA;AACd,EAAA,IAAI,KAAK,GAAI,CAAA,GAAA,GAAM,GAAG,CAAK,IAAA,CAAA,YAAa,GAAM,GAAA,CAAA;AAC9C,EAAA,MAAM,WAAc,GAAA,MAAA,CAAO,GAAK,EAAA,OAAA,EAAS,iBAAiB,aAAa,CAAA;AACvE,EAAM,MAAA,WAAA,GAAc,MAAO,CAAA,GAAA,EAAK,OAAO,CAAA;AACvC,EAAM,MAAA,WAAA,GAAc,MAAO,CAAA,GAAA,EAAK,OAAO,CAAA;AACvC,EAAA,MAAM,WAAc,GAAA,MAAA,CAAO,GAAK,EAAA,OAAA,EAAS,iBAAiB,aAAa,CAAA;AACvE,EAAM,MAAA,MAAA,GACJ,KAAK,KAAMA,CAAAA,iBAAAA,CAAiB,aAAa,WAAW,CAAA,GAAI,GAAG,CAAI,GAAA,GAAA;AACjE,EAAM,MAAA,MAAA,GACJ,KAAK,KAAMA,CAAAA,iBAAAA,CAAiB,aAAa,WAAW,CAAA,GAAI,GAAG,CAAI,GAAA,GAAA;AACjE,EAAO,OAAA,CAAC,QAAQ,MAAM,CAAA;AACxB;;;;"}
|
package/esm/index.js
CHANGED
|
@@ -3,13 +3,14 @@ export { getAllSchemas, getSchema, schemas } from './schemas.js';
|
|
|
3
3
|
export { TickingArrayDataSource } from './TickingArrayDataSource.js';
|
|
4
4
|
export { DefaultColumnGenerator, DefaultRowGenerator, defaultGenerators, getColumnAndRowGenerator, populateArray } from './vuu-row-generator.js';
|
|
5
5
|
export { vuuModule } from './vuu-modules.js';
|
|
6
|
-
export { schemas as basketSchemas, isBasketTable } from './basket/basket-schemas.js';
|
|
7
|
-
export { basketModule } from './basket/BasketModule.js';
|
|
8
|
-
export { makeSuggestions } from './makeSuggestions.js';
|
|
9
6
|
export { isSimulTable, schemas as simulSchemas } from './simul/simul-schemas.js';
|
|
10
7
|
export { simulModule } from './simul/SimulModule.js';
|
|
8
|
+
export { schemas as basketSchemas, isBasketTable } from './basket/basket-schemas.js';
|
|
9
|
+
export { basketModule } from './basket/BasketModule.js';
|
|
11
10
|
export { testModule } from './test/TestModule.js';
|
|
12
|
-
export {
|
|
11
|
+
export { makeSuggestions } from './makeSuggestions.js';
|
|
12
|
+
export { Table, buildDataColumnMap, buildDataColumnMapFromSchema } from './Table.js';
|
|
13
13
|
export { VuuModule, withNamedParams, withParams } from './core/module/VuuModule.js';
|
|
14
14
|
export { LocalDataSourceProvider } from './local-datasource-provider/LocalDatasourceProvider.js';
|
|
15
|
+
export { default as tableContainer } from './core/table/TableContainer.js';
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
|
package/esm/simul/SimulModule.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { isVuuMenuRpcRequest } from '@vuu-ui/vuu-utils';
|
|
2
2
|
import { VuuModule } from '../core/module/VuuModule.js';
|
|
3
|
-
import { joinTables } from '../Table.js';
|
|
4
3
|
import { instrumentsTable } from './reference-data/instruments.js';
|
|
5
4
|
import { instrumentsExtendedTable } from './reference-data/instruments-extended.js';
|
|
6
5
|
import { ordersTable } from './reference-data/orders.js';
|
|
7
6
|
import { childOrdersTable, parentOrdersTable, startGeneratingNewOrders, stopGeneratingNewOrders } from './reference-data/parent-child-orders.js';
|
|
8
7
|
import { pricesTable } from './reference-data/prices.js';
|
|
9
8
|
import { schemas } from './simul-schemas.js';
|
|
9
|
+
import tableContainer from '../core/table/TableContainer.js';
|
|
10
10
|
|
|
11
11
|
var __defProp = Object.defineProperty;
|
|
12
12
|
var __typeError = (msg) => {
|
|
@@ -35,10 +35,10 @@ class SimulModule extends VuuModule {
|
|
|
35
35
|
childOrders: childOrdersTable,
|
|
36
36
|
instruments: instrumentsTable,
|
|
37
37
|
instrumentsExtended: instrumentsExtendedTable,
|
|
38
|
-
instrumentPrices:
|
|
38
|
+
instrumentPrices: tableContainer.createJoinTable(
|
|
39
39
|
{ module: "SIMUL", table: "instrumentPrices" },
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
{ module: "SIMUL", table: "instruments" },
|
|
41
|
+
{ module: "SIMUL", table: "prices" },
|
|
42
42
|
"ric"
|
|
43
43
|
),
|
|
44
44
|
orders: ordersTable,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimulModule.js","sources":["../../../../packages/vuu-data-test/src/simul/SimulModule.ts"],"sourcesContent":["import {\n ClientToServerMenuRowRPC,\n VuuLink,\n VuuMenu,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isVuuMenuRpcRequest } from \"@vuu-ui/vuu-utils\";\nimport {\n RpcService,\n ServiceHandler,\n VuuModule,\n} from \"../core/module/VuuModule\";\nimport {
|
|
1
|
+
{"version":3,"file":"SimulModule.js","sources":["../../../../packages/vuu-data-test/src/simul/SimulModule.ts"],"sourcesContent":["import {\n ClientToServerMenuRowRPC,\n VuuLink,\n VuuMenu,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isVuuMenuRpcRequest } from \"@vuu-ui/vuu-utils\";\nimport {\n RpcService,\n ServiceHandler,\n VuuModule,\n} from \"../core/module/VuuModule\";\nimport { Table } from \"../Table\";\nimport { instrumentsTable } from \"./reference-data/instruments\";\nimport { instrumentsExtendedTable } from \"./reference-data/instruments-extended\";\nimport { ordersTable } from \"./reference-data/orders\";\nimport {\n childOrdersTable,\n parentOrdersTable,\n startGeneratingNewOrders,\n stopGeneratingNewOrders,\n} from \"./reference-data/parent-child-orders\";\nimport { pricesTable } from \"./reference-data/prices\";\nimport { schemas, type SimulTableName } from \"./simul-schemas\";\nimport tableContainer from \"../core/table/TableContainer\";\n\nconst undefinedTables = {\n childOrders: undefined,\n instruments: undefined,\n instrumentsExtended: undefined,\n instrumentPrices: undefined,\n orders: undefined,\n parentOrders: undefined,\n prices: undefined,\n};\n\n/**\n * This is an example of how we might extend the built-in VuuModule to\n * implement a module-specific service in such a way that it can invoke\n * methods on the VuuModule.\n */\nexport class SimulModule extends VuuModule<SimulTableName> {\n constructor() {\n super(\"SIMUL\");\n }\n\n #schemas = schemas;\n #tables: Record<SimulTableName, Table> = {\n childOrders: childOrdersTable,\n instruments: instrumentsTable,\n instrumentsExtended: instrumentsExtendedTable,\n instrumentPrices: tableContainer.createJoinTable(\n { module: \"SIMUL\", table: \"instrumentPrices\" },\n { module: \"SIMUL\", table: \"instruments\" },\n { module: \"SIMUL\", table: \"prices\" },\n \"ric\",\n ),\n orders: ordersTable,\n parentOrders: parentOrdersTable,\n prices: pricesTable,\n };\n\n get menus(): Record<SimulTableName, VuuMenu | undefined> | undefined {\n return {\n childOrders: undefined,\n instruments: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Instruments To Order\",\n rpcName: \"ADD_INSTRUMENTS_TO_ORDER\",\n },\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Edit Row\",\n rpcName: \"EDIT_ROW\",\n },\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Edit Rows\",\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n },\n ],\n },\n instrumentsExtended: undefined,\n instrumentPrices: undefined,\n orders: {\n name: \"ROOT\",\n menus: [\n {\n context: \"row\",\n filter: `status in [\"New\",\"Partial Exec\"]`,\n name: \"Cancel Order\",\n rpcName: \"CANCEL_ORDER\",\n },\n ],\n },\n parentOrders: undefined,\n prices: undefined,\n };\n }\n\n get schemas() {\n return this.#schemas;\n }\n\n get services(): Record<SimulTableName, RpcService[] | undefined> | undefined {\n return {\n ...undefinedTables,\n orders: [\n {\n rpcName: \"CANCEL_ORDER\",\n service: this.cancelOrder,\n },\n ],\n parentOrders: [\n {\n rpcName: \"startGeneratingNewOrders\",\n service: this.startOrders,\n },\n {\n rpcName: \"stopGeneratingNewOrders\",\n service: this.stopOrders,\n },\n ],\n };\n }\n\n get tables() {\n return this.#tables;\n }\n\n get visualLinks(): Record<SimulTableName, VuuLink[] | undefined> {\n return {\n ...undefinedTables,\n childOrders: [\n {\n fromColumn: \"parentOrderId\",\n toColumn: \"id\",\n toTable: \"parentOrders\",\n },\n ],\n parentOrders: [\n { fromColumn: \"ric\", toColumn: \"ric\", toTable: \"instruments\" },\n ],\n };\n }\n\n cancelOrder: ServiceHandler = async (rpcRequest) => {\n if (isVuuMenuRpcRequest(rpcRequest)) {\n const { rowKey, vpId } = rpcRequest as ClientToServerMenuRowRPC;\n const table = this.tables.orders;\n const row = table.findByKey(rowKey);\n row[table.map.status] = \"Cancelled\";\n table.updateRow(row);\n\n return {\n action: {\n type: \"SHOW_NOTIFICATION_ACTION\",\n message: `Order id: ${rowKey}`,\n title: \"Order cancelled\",\n },\n rpcName: \"CANCEL_ORDER\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n };\n } else {\n throw Error(\"cancelOrder invalid rpcRequest\");\n }\n };\n\n startOrders = async () => {\n startGeneratingNewOrders();\n return {\n type: \"VIEW_PORT_RPC_RESPONSE\",\n action: {\n type: \"VP_RPC_SUCCESS\",\n },\n method: \"???\",\n namedParams: {},\n params: [],\n vpId: \"\",\n } as VuuRpcViewportResponse;\n };\n stopOrders = async () => {\n stopGeneratingNewOrders();\n return {\n type: \"VIEW_PORT_RPC_RESPONSE\",\n action: {\n type: \"VP_RPC_SUCCESS\",\n },\n method: \"???\",\n namedParams: {},\n params: [],\n vpId: \"\",\n } as VuuRpcViewportResponse;\n };\n}\n\nexport const simulModule = new SimulModule();\n"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { random } from '../../data-utils.js';
|
|
2
|
-
import {
|
|
2
|
+
import { buildDataColumnMap } from '../../Table.js';
|
|
3
3
|
import { schemas } from '../simul-schemas.js';
|
|
4
4
|
import { instrumentsData } from './instruments.js';
|
|
5
|
+
import tableContainer from '../../core/table/TableContainer.js';
|
|
5
6
|
|
|
6
7
|
const instrumentsExtendedData = instrumentsData.map(
|
|
7
8
|
(row) => row.slice(0, -1).concat([random(0, 1) === 1, random(0, 1) === 1, (/* @__PURE__ */ new Date()).getTime()])
|
|
8
9
|
);
|
|
9
|
-
const instrumentsExtendedTable =
|
|
10
|
+
const instrumentsExtendedTable = tableContainer.createTable(
|
|
10
11
|
schemas.instrumentsExtended,
|
|
11
12
|
instrumentsExtendedData,
|
|
12
13
|
buildDataColumnMap(schemas, "instrumentsExtended")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruments-extended.js","sources":["../../../../../packages/vuu-data-test/src/simul/reference-data/instruments-extended.ts"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap
|
|
1
|
+
{"version":3,"file":"instruments-extended.js","sources":["../../../../../packages/vuu-data-test/src/simul/reference-data/instruments-extended.ts"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap } from \"../../Table\";\nimport { schemas } from \"../simul-schemas\";\nimport { instrumentsData } from \"./instruments\";\nimport tableContainer from \"../../core/table/TableContainer\";\n\nconst instrumentsExtendedData = instrumentsData.map((row) =>\n (row as VuuRowDataItemType[])\n .slice(0, -1)\n .concat([random(0, 1) === 1, random(0, 1) === 1, new Date().getTime()]),\n);\n\nexport const instrumentsExtendedTable = tableContainer.createTable(\n schemas.instrumentsExtended,\n instrumentsExtendedData,\n buildDataColumnMap(schemas, \"instrumentsExtended\"),\n);\n"],"names":[],"mappings":";;;;;;AAOA,MAAM,0BAA0B,eAAgB,CAAA,GAAA;AAAA,EAAI,CAAC,GAClD,KAAA,GAAA,CACE,KAAM,CAAA,CAAA,EAAG,EAAE,CACX,CAAA,MAAA,CAAO,CAAC,MAAA,CAAO,CAAG,EAAA,CAAC,MAAM,CAAG,EAAA,MAAA,CAAO,CAAG,EAAA,CAAC,CAAM,KAAA,CAAA,EAAA,qBAAO,IAAK,EAAA,EAAE,OAAQ,EAAC,CAAC;AAC1E,CAAA;AAEO,MAAM,2BAA2B,cAAe,CAAA,WAAA;AAAA,EACrD,OAAQ,CAAA,mBAAA;AAAA,EACR,uBAAA;AAAA,EACA,kBAAA,CAAmB,SAAS,qBAAqB;AACnD;;;;"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { isinGenerator } from './isin-generator/index.js';
|
|
2
|
+
import tableContainer from '../../core/table/TableContainer.js';
|
|
2
3
|
import { currencies } from './currencies.js';
|
|
3
4
|
import { suffixes, locations } from './locations.js';
|
|
4
5
|
import { lotsizes } from './lotsizes.js';
|
|
5
6
|
import { random } from '../../data-utils.js';
|
|
6
|
-
import {
|
|
7
|
+
import { buildDataColumnMap } from '../../Table.js';
|
|
7
8
|
import { schemas } from '../simul-schemas.js';
|
|
8
9
|
|
|
10
|
+
const { createTable } = tableContainer;
|
|
9
11
|
const InstrumentColumnMap = {
|
|
10
12
|
bbg: 0,
|
|
11
13
|
currency: 1,
|
|
@@ -62,7 +64,7 @@ const getRic = (defaultRic) => {
|
|
|
62
64
|
const row = instrumentsData.at(random(0, instrumentsData.length));
|
|
63
65
|
return row?.[InstrumentColumnMap.ric] ?? defaultRic;
|
|
64
66
|
};
|
|
65
|
-
const instrumentsTable =
|
|
67
|
+
const instrumentsTable = createTable(
|
|
66
68
|
schemas.instruments,
|
|
67
69
|
instrumentsData,
|
|
68
70
|
buildDataColumnMap(schemas, "instruments")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruments.js","sources":["../../../../../packages/vuu-data-test/src/simul/reference-data/instruments.ts"],"sourcesContent":["import { isinGenerator } from \"./isin-generator\";\nimport { currencies } from \"./currencies\";\nimport { locations, suffixes } from \"./locations\";\nimport { lotsizes } from \"./lotsizes\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap
|
|
1
|
+
{"version":3,"file":"instruments.js","sources":["../../../../../packages/vuu-data-test/src/simul/reference-data/instruments.ts"],"sourcesContent":["import { isinGenerator } from \"./isin-generator\";\nimport tableContainer from \"../../core/table/TableContainer\";\nimport { currencies } from \"./currencies\";\nimport { locations, suffixes } from \"./locations\";\nimport { lotsizes } from \"./lotsizes\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap } from \"../../Table\";\nimport { schemas } from \"../simul-schemas\";\n\nconst { createTable } = tableContainer;\n\nexport type bbg = string;\nexport type currency = string;\nexport type ric = string;\nexport type description = string;\nexport type exchange = string;\n// seed for price generation\nexport type price = number;\nexport type date = number;\n\nexport type InstrumentsDataRow = [\n bbg,\n currency,\n description,\n exchange,\n string,\n number,\n ric,\n price,\n date,\n];\n\nexport const InstrumentColumnMap = {\n bbg: 0,\n currency: 1,\n description: 2,\n exchange: 3,\n string: 4,\n number: 5,\n ric: 6,\n price: 7,\n date: 8,\n} as const;\n\nconst instrumentsData: InstrumentsDataRow[] = [];\n\nconst chars1 = Array.from(\"ABCEFGHKMN\");\nconst chars2 = Array.from(\"ABCEFGHKMN\");\nconst chars3 = Array.from(\"OPQRTUVWYZ\");\nconst chars4 = Array.from(\"OPQRTUVWYZ\");\n\nconst randomPrice = () => {\n const price = random(0, 10000);\n const multiplier = random(1, 10);\n return price / multiplier;\n};\n\n// const start = performance.now();\n// Create 10_000 Instruments\nlet count = 0;\nfor (const char1 of chars1) {\n for (const char2 of chars2) {\n for (const char3 of chars3) {\n for (const char4 of chars4) {\n const suffix = suffixes[count % 8];\n const ric = char1 + char2 + char3 + char4 + \".\" + suffix;\n const bbg = char1 + char2 + char3 + char4 + \" \" + suffix;\n const description = `${ric} description`;\n const currency = currencies[random(0, 4)];\n const isin = isinGenerator();\n const lotSize = lotsizes[random(0, lotsizes.length - 1)];\n\n const exchange = locations[suffix][1];\n const price = randomPrice();\n const date = new Date().getTime();\n\n instrumentsData.push([\n bbg,\n currency,\n description,\n exchange,\n String(isin),\n lotSize,\n ric,\n price,\n date,\n ]);\n count++;\n }\n }\n }\n}\n\n// const end = performance.now();\n// console.log(`generating 10,000 instruments took ${end - start} ms`);\n\nexport const getRic = (defaultRic: string) => {\n const row = instrumentsData.at(random(0, instrumentsData.length));\n return row?.[InstrumentColumnMap.ric] ?? defaultRic;\n};\n\nexport const instrumentsTable = createTable(\n schemas.instruments,\n instrumentsData,\n buildDataColumnMap(schemas, \"instruments\"),\n);\n\nexport { instrumentsData };\n"],"names":[],"mappings":";;;;;;;;;AASA,MAAM,EAAE,aAAgB,GAAA,cAAA;AAuBjB,MAAM,mBAAsB,GAAA;AAAA,EACjC,GAAK,EAAA,CAAA;AAAA,EACL,QAAU,EAAA,CAAA;AAAA,EACV,WAAa,EAAA,CAAA;AAAA,EACb,QAAU,EAAA,CAAA;AAAA,EACV,MAAQ,EAAA,CAAA;AAAA,EACR,MAAQ,EAAA,CAAA;AAAA,EACR,GAAK,EAAA,CAAA;AAAA,EACL,KAAO,EAAA,CAAA;AAAA,EACP,IAAM,EAAA;AACR;AAEA,MAAM,kBAAwC;AAE9C,MAAM,MAAA,GAAS,KAAM,CAAA,IAAA,CAAK,YAAY,CAAA;AACtC,MAAM,MAAA,GAAS,KAAM,CAAA,IAAA,CAAK,YAAY,CAAA;AACtC,MAAM,MAAA,GAAS,KAAM,CAAA,IAAA,CAAK,YAAY,CAAA;AACtC,MAAM,MAAA,GAAS,KAAM,CAAA,IAAA,CAAK,YAAY,CAAA;AAEtC,MAAM,cAAc,MAAM;AACxB,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,CAAA,EAAG,GAAK,CAAA;AAC7B,EAAM,MAAA,UAAA,GAAa,MAAO,CAAA,CAAA,EAAG,EAAE,CAAA;AAC/B,EAAA,OAAO,KAAQ,GAAA,UAAA;AACjB,CAAA;AAIA,IAAI,KAAQ,GAAA,CAAA;AACZ,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,EAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,IAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,MAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,QAAM,MAAA,MAAA,GAAS,QAAS,CAAA,KAAA,GAAQ,CAAC,CAAA;AACjC,QAAA,MAAM,GAAM,GAAA,KAAA,GAAQ,KAAQ,GAAA,KAAA,GAAQ,QAAQ,GAAM,GAAA,MAAA;AAClD,QAAA,MAAM,GAAM,GAAA,KAAA,GAAQ,KAAQ,GAAA,KAAA,GAAQ,QAAQ,GAAM,GAAA,MAAA;AAClD,QAAM,MAAA,WAAA,GAAc,GAAG,GAAG,CAAA,YAAA,CAAA;AAC1B,QAAA,MAAM,QAAW,GAAA,UAAA,CAAW,MAAO,CAAA,CAAA,EAAG,CAAC,CAAC,CAAA;AACxC,QAAA,MAAM,OAAO,aAAc,EAAA;AAC3B,QAAA,MAAM,UAAU,QAAS,CAAA,MAAA,CAAO,GAAG,QAAS,CAAA,MAAA,GAAS,CAAC,CAAC,CAAA;AAEvD,QAAA,MAAM,QAAW,GAAA,SAAA,CAAU,MAAM,CAAA,CAAE,CAAC,CAAA;AACpC,QAAA,MAAM,QAAQ,WAAY,EAAA;AAC1B,QAAA,MAAM,IAAO,GAAA,iBAAA,IAAI,IAAK,EAAA,EAAE,OAAQ,EAAA;AAEhC,QAAA,eAAA,CAAgB,IAAK,CAAA;AAAA,UACnB,GAAA;AAAA,UACA,QAAA;AAAA,UACA,WAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAO,IAAI,CAAA;AAAA,UACX,OAAA;AAAA,UACA,GAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAA,KAAA,EAAA;AAAA;AACF;AACF;AAEJ;AAKa,MAAA,MAAA,GAAS,CAAC,UAAuB,KAAA;AAC5C,EAAA,MAAM,MAAM,eAAgB,CAAA,EAAA,CAAG,OAAO,CAAG,EAAA,eAAA,CAAgB,MAAM,CAAC,CAAA;AAChE,EAAO,OAAA,GAAA,GAAM,mBAAoB,CAAA,GAAG,CAAK,IAAA,UAAA;AAC3C;AAEO,MAAM,gBAAmB,GAAA,WAAA;AAAA,EAC9B,OAAQ,CAAA,WAAA;AAAA,EACR,eAAA;AAAA,EACA,kBAAA,CAAmB,SAAS,aAAa;AAC3C;;;;"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { currencies } from './currencies.js';
|
|
2
2
|
import { getRic } from './instruments.js';
|
|
3
3
|
import { random } from '../../data-utils.js';
|
|
4
|
-
import {
|
|
4
|
+
import { buildDataColumnMap } from '../../Table.js';
|
|
5
5
|
import { schemas } from '../simul-schemas.js';
|
|
6
6
|
import { sides } from './sides.js';
|
|
7
|
+
import tableContainer from '../../core/table/TableContainer.js';
|
|
7
8
|
|
|
8
9
|
const traders = ["Trader A", "Trader B", "Trader C"];
|
|
9
10
|
const orderStatus = [
|
|
@@ -41,7 +42,7 @@ for (let i = 0; i < 100; i++) {
|
|
|
41
42
|
trader
|
|
42
43
|
]);
|
|
43
44
|
}
|
|
44
|
-
const ordersTable =
|
|
45
|
+
const ordersTable = tableContainer.createTable(
|
|
45
46
|
schemas.orders,
|
|
46
47
|
ordersData,
|
|
47
48
|
buildDataColumnMap(schemas, "orders")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orders.js","sources":["../../../../../packages/vuu-data-test/src/simul/reference-data/orders.ts"],"sourcesContent":["import { currencies } from \"./currencies\";\nimport { getRic } from \"./instruments\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap
|
|
1
|
+
{"version":3,"file":"orders.js","sources":["../../../../../packages/vuu-data-test/src/simul/reference-data/orders.ts"],"sourcesContent":["import { currencies } from \"./currencies\";\nimport { getRic } from \"./instruments\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap } from \"../../Table\";\nimport { schemas } from \"../simul-schemas\";\nimport { sides } from \"./sides\";\nimport tableContainer from \"../../core/table/TableContainer\";\n\nexport type status = string;\nexport type ccy = string;\nexport type created = number;\nexport type filledQuantity = number;\nexport type lastUpdate = number;\nexport type orderId = string;\nexport type quantity = number;\nexport type ric = string;\nexport type side = string;\nexport type trader = string;\n\nconst traders = [\"Trader A\", \"Trader B\", \"Trader C\"];\nconst orderStatus = [\n \"Filled\",\n \"Cancelled\",\n \"New\",\n \"Partial Exec\",\n \"Booked\",\n \"All Done\",\n];\n\nconst isComplete = (status: string) =>\n [\"Filled\", \"All Done\", \"Booked\"].includes(status);\n\nexport type OrdersDataRow = [\n status,\n ccy,\n created,\n filledQuantity,\n lastUpdate,\n orderId,\n quantity,\n ric,\n side,\n trader,\n];\n\nexport const OrderColumnMap = {\n ccy: 0,\n created: 1,\n filledQuantity: 2,\n lastUpdate: 3,\n orderId: 4,\n quantity: 5,\n ric: 6,\n side: 7,\n trader: 8,\n} as const;\n\nconst ordersData: OrdersDataRow[] = [];\n\n// const start = performance.now();\n// Create 10_000 Instruments\n\nconst now = +new Date();\nfor (let i = 0; i < 100; i++) {\n const status = orderStatus[random(0, orderStatus.length - 1)];\n const ccy = currencies[random(0, currencies.length - 1)];\n const created = now;\n const lastUpdate = now;\n const orderId = `ORD${(\"0000\" + i).slice(-4)}`;\n const quantity = random(1000, 10000);\n const filledQuantity = isComplete(status)\n ? quantity\n : status === \"New\"\n ? 0\n : random(0, quantity);\n const ric = getRic(\"AAP.L\");\n const side = sides[random(0, sides.length - 1)];\n const trader = traders[random(0, traders.length - 1)];\n\n ordersData.push([\n status,\n ccy,\n created,\n filledQuantity,\n lastUpdate,\n orderId,\n quantity,\n ric,\n side,\n trader,\n ]);\n}\n// const end = performance.now();\n// console.log(`generating 10,000 instruments took ${end - start} ms`);\n\nexport const ordersTable = tableContainer.createTable(\n schemas.orders,\n ordersData,\n buildDataColumnMap(schemas, \"orders\"),\n);\n\nexport { ordersData };\n"],"names":[],"mappings":";;;;;;;;AAmBA,MAAM,OAAU,GAAA,CAAC,UAAY,EAAA,UAAA,EAAY,UAAU,CAAA;AACnD,MAAM,WAAc,GAAA;AAAA,EAClB,QAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA;AAEA,MAAM,UAAA,GAAa,CAAC,MAClB,KAAA,CAAC,UAAU,UAAY,EAAA,QAAQ,CAAE,CAAA,QAAA,CAAS,MAAM,CAAA;AA2BlD,MAAM,aAA8B;AAKpC,MAAM,GAAA,GAAM,iBAAC,IAAI,IAAK,EAAA;AACtB,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,EAAK,CAAK,EAAA,EAAA;AAC5B,EAAA,MAAM,SAAS,WAAY,CAAA,MAAA,CAAO,GAAG,WAAY,CAAA,MAAA,GAAS,CAAC,CAAC,CAAA;AAC5D,EAAA,MAAM,MAAM,UAAW,CAAA,MAAA,CAAO,GAAG,UAAW,CAAA,MAAA,GAAS,CAAC,CAAC,CAAA;AACvD,EAAA,MAAM,OAAU,GAAA,GAAA;AAChB,EAAA,MAAM,UAAa,GAAA,GAAA;AACnB,EAAA,MAAM,UAAU,CAAO,GAAA,EAAA,CAAA,MAAA,GAAS,CAAG,EAAA,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA;AAC5C,EAAM,MAAA,QAAA,GAAW,MAAO,CAAA,GAAA,EAAM,GAAK,CAAA;AACnC,EAAM,MAAA,cAAA,GAAiB,UAAW,CAAA,MAAM,CACpC,GAAA,QAAA,GACA,WAAW,KACT,GAAA,CAAA,GACA,MAAO,CAAA,CAAA,EAAG,QAAQ,CAAA;AACxB,EAAM,MAAA,GAAA,GAAM,OAAO,OAAO,CAAA;AAC1B,EAAA,MAAM,OAAO,KAAM,CAAA,MAAA,CAAO,GAAG,KAAM,CAAA,MAAA,GAAS,CAAC,CAAC,CAAA;AAC9C,EAAA,MAAM,SAAS,OAAQ,CAAA,MAAA,CAAO,GAAG,OAAQ,CAAA,MAAA,GAAS,CAAC,CAAC,CAAA;AAEpD,EAAA,UAAA,CAAW,IAAK,CAAA;AAAA,IACd,MAAA;AAAA,IACA,GAAA;AAAA,IACA,OAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAIO,MAAM,cAAc,cAAe,CAAA,WAAA;AAAA,EACxC,OAAQ,CAAA,MAAA;AAAA,EACR,UAAA;AAAA,EACA,kBAAA,CAAmB,SAAS,QAAQ;AACtC;;;;"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Clock } from '@vuu-ui/vuu-utils';
|
|
2
|
+
import tableContainer from '../../core/table/TableContainer.js';
|
|
2
3
|
import { random } from '../../data-utils.js';
|
|
3
|
-
import { buildDataColumnMap
|
|
4
|
+
import { buildDataColumnMap } from '../../Table.js';
|
|
4
5
|
import { schemas } from '../simul-schemas.js';
|
|
5
6
|
import { accounts } from './accounts.js';
|
|
7
|
+
import { algos } from './algos.js';
|
|
6
8
|
import { instrumentsData } from './instruments.js';
|
|
7
9
|
import { orderStatus } from './orderStatus.js';
|
|
8
10
|
import { sides } from './sides.js';
|
|
9
|
-
import { algos } from './algos.js';
|
|
10
11
|
|
|
11
12
|
const instrumentMap = buildDataColumnMap(schemas, "instruments");
|
|
12
13
|
const PARENT_ORDER_COUNT = 5e3;
|
|
@@ -17,12 +18,12 @@ const avgChildOrderPerOrder = Math.round(
|
|
|
17
18
|
const childMaxMultiple = 10;
|
|
18
19
|
const clock = new Clock().goBack(120, "minutes");
|
|
19
20
|
console.log(`starting order generation at ${clock}`);
|
|
20
|
-
const parentOrdersTable =
|
|
21
|
+
const parentOrdersTable = tableContainer.createTable(
|
|
21
22
|
schemas.parentOrders,
|
|
22
23
|
[],
|
|
23
24
|
buildDataColumnMap(schemas, "parentOrders")
|
|
24
25
|
);
|
|
25
|
-
const childOrdersTable =
|
|
26
|
+
const childOrdersTable = tableContainer.createTable(
|
|
26
27
|
schemas.childOrders,
|
|
27
28
|
[],
|
|
28
29
|
buildDataColumnMap(schemas, "childOrders")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parent-child-orders.js","sources":["../../../../../packages/vuu-data-test/src/simul/reference-data/parent-child-orders.ts"],"sourcesContent":["import { Clock } from \"@vuu-ui/vuu-utils\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap
|
|
1
|
+
{"version":3,"file":"parent-child-orders.js","sources":["../../../../../packages/vuu-data-test/src/simul/reference-data/parent-child-orders.ts"],"sourcesContent":["import { Clock } from \"@vuu-ui/vuu-utils\";\nimport tableContainer from \"../../core/table/TableContainer\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap } from \"../../Table\";\nimport { schemas } from \"../simul-schemas\";\nimport { accounts } from \"./accounts\";\nimport { algos } from \"./algos\";\nimport { instrumentsData } from \"./instruments\";\nimport { orderStatus as statusValues } from \"./orderStatus\";\nimport { sides } from \"./sides\";\n\nconst instrumentMap = buildDataColumnMap(schemas, \"instruments\");\n\n// const PARENT_ORDER_COUNT = 75_000;\nconst PARENT_ORDER_COUNT = 5_000;\nconst CHILD_ORDER_COUNT = 20_000;\n// const CHILD_ORDER_COUNT = 200_000;\n\nconst avgChildOrderPerOrder = Math.round(\n CHILD_ORDER_COUNT / PARENT_ORDER_COUNT,\n);\nconst childMaxMultiple = 10;\n\nconst clock = new Clock().goBack(120, \"minutes\");\nconsole.log(`starting order generation at ${clock}`);\n\nexport const parentOrdersTable = tableContainer.createTable(\n schemas.parentOrders,\n [],\n buildDataColumnMap(schemas, \"parentOrders\"),\n);\n\nexport const childOrdersTable = tableContainer.createTable(\n schemas.childOrders,\n [],\n buildDataColumnMap(schemas, \"childOrders\"),\n);\n\nlet parentOrderCount = 0;\nlet childOrderCount = 0;\nlet notifyNewOrders = false;\n\nfunction createParentAndChildOrders() {\n parentOrderCount += 1;\n const instrument = instrumentsData[random(0, instrumentsData.length - 1)];\n const orderQuantity = 1000 * random(1, 100);\n const orderStatus = statusValues[random(0, statusValues.length - 1)];\n const filledQty =\n orderStatus === \"FILLED\"\n ? orderQuantity\n : orderStatus === \"NEW\"\n ? 0\n : orderQuantity - random(100, orderQuantity);\n const openQty = orderQuantity - filledQty;\n const account = accounts[random(0, accounts.length - 1)];\n const algo = algos[random(0, algos.length - 1)];\n const averagePrice = 0;\n const ccy = \"GBP\";\n const exchange = instrument[instrumentMap.exchange];\n const parentOrderIdAsInt = parentOrderCount;\n const parentOrderId = parentOrderCount.toString().padStart(10, \"0\");\n const price = 100;\n const quantity = orderQuantity;\n const ric = instrument[instrumentMap.ric];\n const side = sides[random(0, sides.length - 1)];\n const status = orderStatus;\n const volLimit = 100;\n const lastUpdate = clock.now;\n const created = clock.now;\n\n const numberOfChildOrders = random(\n 0,\n avgChildOrderPerOrder * random(1, childMaxMultiple),\n );\n\n let remainingQty = orderQuantity;\n for (let j = 0; j < numberOfChildOrders; j++) {\n childOrderCount += 1;\n\n const childOrderQuantity = Math.round(remainingQty / (childOrderCount - j));\n remainingQty -= childOrderQuantity;\n const childOrderStatus = statusValues[random(0, statusValues.length - 1)];\n const childFilledQty =\n orderStatus === \"FILLED\"\n ? childOrderQuantity\n : childOrderStatus === \"NEW\"\n ? 0\n : childOrderQuantity - random(100, childOrderQuantity);\n const childOpenQty = childOrderQuantity - childFilledQty;\n const averagePrice = 0;\n const childIdAsInt = childOrderCount;\n const childId = childOrderCount.toString().padStart(10, \"0\");\n const lastUpdate = 0;\n const price = 100;\n const strategy = 0;\n\n childOrdersTable.insert(\n [\n account,\n averagePrice,\n ccy,\n exchange,\n childFilledQty,\n childId,\n childIdAsInt,\n childOpenQty,\n parentOrderId,\n price,\n childOrderQuantity,\n ric,\n side,\n childOrderStatus,\n strategy,\n volLimit,\n lastUpdate,\n created,\n ],\n notifyNewOrders,\n );\n }\n\n parentOrdersTable.insert(\n [\n account,\n algo,\n averagePrice,\n ccy,\n childOrderCount,\n exchange,\n filledQty,\n parentOrderId,\n parentOrderIdAsInt,\n openQty,\n price,\n quantity,\n ric,\n side,\n status,\n volLimit,\n lastUpdate,\n created,\n ],\n notifyNewOrders,\n );\n}\n\nfunction createInitialOrders() {\n const start = performance.now();\n for (let i = 0; i < PARENT_ORDER_COUNT; i++) {\n clock.advance(random(0, 100));\n createParentAndChildOrders();\n }\n const end = performance.now();\n console.log(\n `took ${end - start} to create ${parentOrdersTable.data.length} orders and ${childOrdersTable.data.length} child orders, last order created at ${clock}`,\n );\n}\n\nlet newOrderInterval: undefined | ReturnType<typeof setInterval> = undefined;\n\nexport function startGeneratingNewOrders() {\n newOrderInterval = setInterval(createParentAndChildOrders, 100);\n}\n\nexport function stopGeneratingNewOrders() {\n clearInterval(newOrderInterval);\n}\n\ncreateInitialOrders();\n\nclock.showCurrentTime = true;\nnotifyNewOrders = true;\n\n// startGeneratingNewOrders();\n"],"names":["orderStatus","statusValues","averagePrice","lastUpdate","price"],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { buildDataColumnMap
|
|
1
|
+
import { buildDataColumnMap } from '../../Table.js';
|
|
2
2
|
import { BaseUpdateGenerator } from '../../UpdateGenerator.js';
|
|
3
3
|
import { schemas } from '../simul-schemas.js';
|
|
4
4
|
import { instrumentsData, InstrumentColumnMap } from './instruments.js';
|
|
5
5
|
import { random } from '../../data-utils.js';
|
|
6
6
|
import basketConstituentData from '../../basket/reference-data/constituents.js';
|
|
7
|
+
import tableContainer from '../../core/table/TableContainer.js';
|
|
7
8
|
|
|
8
9
|
const { bid, bidSize, ask, askSize } = buildDataColumnMap(schemas, "prices");
|
|
9
10
|
const pricesUpdateGenerator = new BaseUpdateGenerator({
|
|
@@ -77,7 +78,7 @@ for (const [, , , lastTrade, ric] of basketConstituentData) {
|
|
|
77
78
|
]);
|
|
78
79
|
}
|
|
79
80
|
}
|
|
80
|
-
const pricesTable =
|
|
81
|
+
const pricesTable = tableContainer.createTable(
|
|
81
82
|
schemas.prices,
|
|
82
83
|
pricesData,
|
|
83
84
|
buildDataColumnMap(schemas, "prices"),
|