@vuu-ui/vuu-data-test 3.0.0 → 3.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/package.json +15 -12
  2. package/src/ArrayProxy.js +38 -0
  3. package/src/RuntimeVisualLink.js +45 -0
  4. package/src/Table.js +96 -0
  5. package/src/TickingArrayDataSource.js +265 -0
  6. package/src/UpdateGenerator.js +72 -0
  7. package/src/basket/BasketModule.js +272 -0
  8. package/src/basket/basket-schemas.js +366 -0
  9. package/src/basket/index.js +2 -0
  10. package/src/basket/reference-data/constituents.js +76 -0
  11. package/src/basket/reference-data/ftse100.js +686 -0
  12. package/src/basket/reference-data/hsi.js +1047 -0
  13. package/src/basket/reference-data/nasdaq100.js +812 -0
  14. package/src/basket/reference-data/prices.js +43 -0
  15. package/src/basket/reference-data/sp500.js +315 -0
  16. package/src/core/module/ModuleContainer.js +21 -0
  17. package/src/core/module/VuuModule.js +635 -0
  18. package/src/core/table/TableContainer.js +102 -0
  19. package/src/data-utils.js +57 -0
  20. package/src/default-column-definitions.js +15 -0
  21. package/src/index.js +12 -0
  22. package/src/local-datasource-provider/LocalDatasourceProvider.js +44 -0
  23. package/src/makeSuggestions.js +20 -0
  24. package/src/rowUpdates.js +0 -0
  25. package/src/schemas.js +19 -0
  26. package/src/session-table-utils.js +31 -0
  27. package/src/simul/SimulModule.js +175 -0
  28. package/src/simul/index.js +2 -0
  29. package/src/simul/reference-data/accounts.js +23 -0
  30. package/src/simul/reference-data/algos.js +9 -0
  31. package/src/simul/reference-data/currencies.js +8 -0
  32. package/src/simul/reference-data/index.js +5 -0
  33. package/src/simul/reference-data/instrument-prices.js +48 -0
  34. package/src/simul/reference-data/instruments-extended.js +12 -0
  35. package/src/simul/reference-data/instruments.js +69 -0
  36. package/src/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +2 -0
  37. package/src/simul/reference-data/isin-generator/fixtures/alphabet.js +27 -0
  38. package/src/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +7 -0
  39. package/src/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +13 -0
  40. package/src/simul/reference-data/isin-generator/generate-cusip-check-code.js +17 -0
  41. package/src/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +8 -0
  42. package/src/simul/reference-data/isin-generator/generate-cusip.js +8 -0
  43. package/src/simul/reference-data/isin-generator/generate-random-alphanumeric.js +3 -0
  44. package/src/simul/reference-data/isin-generator/generate-random-base-ten-number.js +2 -0
  45. package/src/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +7 -0
  46. package/src/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +7 -0
  47. package/src/simul/reference-data/isin-generator/index.js +280 -0
  48. package/src/simul/reference-data/isin-generator/is-odd.js +2 -0
  49. package/src/simul/reference-data/locations.js +45 -0
  50. package/src/simul/reference-data/lotsizes.js +24 -0
  51. package/src/simul/reference-data/orderStatus.js +6 -0
  52. package/src/simul/reference-data/orders.js +64 -0
  53. package/src/simul/reference-data/parent-child-orders.js +119 -0
  54. package/src/simul/reference-data/priceStrategies.js +8 -0
  55. package/src/simul/reference-data/prices.js +80 -0
  56. package/src/simul/reference-data/sides.js +5 -0
  57. package/src/simul/simul-schemas.js +430 -0
  58. package/src/test/TestModule.js +582 -0
  59. package/src/test/index.js +1 -0
  60. package/src/vuu-row-generator.js +71 -0
  61. package/cjs/ArrayProxy.js +0 -72
  62. package/cjs/ArrayProxy.js.map +0 -1
  63. package/cjs/RuntimeVisualLink.js +0 -73
  64. package/cjs/RuntimeVisualLink.js.map +0 -1
  65. package/cjs/Table.js +0 -128
  66. package/cjs/Table.js.map +0 -1
  67. package/cjs/TickingArrayDataSource.js +0 -343
  68. package/cjs/TickingArrayDataSource.js.map +0 -1
  69. package/cjs/UpdateGenerator.js +0 -94
  70. package/cjs/UpdateGenerator.js.map +0 -1
  71. package/cjs/basket/BasketModule.js +0 -282
  72. package/cjs/basket/BasketModule.js.map +0 -1
  73. package/cjs/basket/basket-schemas.js +0 -134
  74. package/cjs/basket/basket-schemas.js.map +0 -1
  75. package/cjs/basket/reference-data/constituents.js +0 -40
  76. package/cjs/basket/reference-data/constituents.js.map +0 -1
  77. package/cjs/basket/reference-data/ftse100.js +0 -105
  78. package/cjs/basket/reference-data/ftse100.js.map +0 -1
  79. package/cjs/basket/reference-data/hsi.js +0 -87
  80. package/cjs/basket/reference-data/hsi.js.map +0 -1
  81. package/cjs/basket/reference-data/nasdaq100.js +0 -108
  82. package/cjs/basket/reference-data/nasdaq100.js.map +0 -1
  83. package/cjs/basket/reference-data/sp500.js +0 -46
  84. package/cjs/basket/reference-data/sp500.js.map +0 -1
  85. package/cjs/core/module/ModuleContainer.js +0 -43
  86. package/cjs/core/module/ModuleContainer.js.map +0 -1
  87. package/cjs/core/module/VuuModule.js +0 -843
  88. package/cjs/core/module/VuuModule.js.map +0 -1
  89. package/cjs/core/table/TableContainer.js +0 -144
  90. package/cjs/core/table/TableContainer.js.map +0 -1
  91. package/cjs/data-utils.js +0 -55
  92. package/cjs/data-utils.js.map +0 -1
  93. package/cjs/default-column-definitions.js +0 -10
  94. package/cjs/default-column-definitions.js.map +0 -1
  95. package/cjs/index.js +0 -44
  96. package/cjs/index.js.map +0 -1
  97. package/cjs/local-datasource-provider/LocalDatasourceProvider.js +0 -70
  98. package/cjs/local-datasource-provider/LocalDatasourceProvider.js.map +0 -1
  99. package/cjs/makeSuggestions.js +0 -26
  100. package/cjs/makeSuggestions.js.map +0 -1
  101. package/cjs/schemas.js +0 -28
  102. package/cjs/schemas.js.map +0 -1
  103. package/cjs/session-table-utils.js +0 -29
  104. package/cjs/session-table-utils.js.map +0 -1
  105. package/cjs/simul/SimulModule.js +0 -187
  106. package/cjs/simul/SimulModule.js.map +0 -1
  107. package/cjs/simul/reference-data/accounts.js +0 -27
  108. package/cjs/simul/reference-data/accounts.js.map +0 -1
  109. package/cjs/simul/reference-data/algos.js +0 -6
  110. package/cjs/simul/reference-data/algos.js.map +0 -1
  111. package/cjs/simul/reference-data/currencies.js +0 -6
  112. package/cjs/simul/reference-data/currencies.js.map +0 -1
  113. package/cjs/simul/reference-data/instruments-extended.js +0 -19
  114. package/cjs/simul/reference-data/instruments-extended.js.map +0 -1
  115. package/cjs/simul/reference-data/instruments.js +0 -87
  116. package/cjs/simul/reference-data/instruments.js.map +0 -1
  117. package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +0 -6
  118. package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +0 -1
  119. package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js +0 -31
  120. package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js.map +0 -1
  121. package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +0 -9
  122. package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +0 -1
  123. package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +0 -17
  124. package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +0 -1
  125. package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js +0 -24
  126. package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +0 -1
  127. package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +0 -13
  128. package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +0 -1
  129. package/cjs/simul/reference-data/isin-generator/generate-cusip.js +0 -13
  130. package/cjs/simul/reference-data/isin-generator/generate-cusip.js.map +0 -1
  131. package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js +0 -8
  132. package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +0 -1
  133. package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js +0 -6
  134. package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +0 -1
  135. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +0 -14
  136. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +0 -1
  137. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +0 -14
  138. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +0 -1
  139. package/cjs/simul/reference-data/isin-generator/index.js +0 -295
  140. package/cjs/simul/reference-data/isin-generator/index.js.map +0 -1
  141. package/cjs/simul/reference-data/isin-generator/is-odd.js +0 -6
  142. package/cjs/simul/reference-data/isin-generator/is-odd.js.map +0 -1
  143. package/cjs/simul/reference-data/locations.js +0 -17
  144. package/cjs/simul/reference-data/locations.js.map +0 -1
  145. package/cjs/simul/reference-data/lotsizes.js +0 -28
  146. package/cjs/simul/reference-data/lotsizes.js.map +0 -1
  147. package/cjs/simul/reference-data/orderStatus.js +0 -6
  148. package/cjs/simul/reference-data/orderStatus.js.map +0 -1
  149. package/cjs/simul/reference-data/orders.js +0 -55
  150. package/cjs/simul/reference-data/orders.js.map +0 -1
  151. package/cjs/simul/reference-data/parent-child-orders.js +0 -146
  152. package/cjs/simul/reference-data/parent-child-orders.js.map +0 -1
  153. package/cjs/simul/reference-data/prices.js +0 -91
  154. package/cjs/simul/reference-data/prices.js.map +0 -1
  155. package/cjs/simul/reference-data/sides.js +0 -6
  156. package/cjs/simul/reference-data/sides.js.map +0 -1
  157. package/cjs/simul/simul-schemas.js +0 -159
  158. package/cjs/simul/simul-schemas.js.map +0 -1
  159. package/cjs/test/TestModule.js +0 -255
  160. package/cjs/test/TestModule.js.map +0 -1
  161. package/cjs/vuu-row-generator.js +0 -74
  162. package/cjs/vuu-row-generator.js.map +0 -1
  163. package/esm/ArrayProxy.js +0 -70
  164. package/esm/ArrayProxy.js.map +0 -1
  165. package/esm/RuntimeVisualLink.js +0 -71
  166. package/esm/RuntimeVisualLink.js.map +0 -1
  167. package/esm/Table.js +0 -124
  168. package/esm/Table.js.map +0 -1
  169. package/esm/TickingArrayDataSource.js +0 -341
  170. package/esm/TickingArrayDataSource.js.map +0 -1
  171. package/esm/UpdateGenerator.js +0 -92
  172. package/esm/UpdateGenerator.js.map +0 -1
  173. package/esm/basket/BasketModule.js +0 -278
  174. package/esm/basket/BasketModule.js.map +0 -1
  175. package/esm/basket/basket-schemas.js +0 -131
  176. package/esm/basket/basket-schemas.js.map +0 -1
  177. package/esm/basket/reference-data/constituents.js +0 -38
  178. package/esm/basket/reference-data/constituents.js.map +0 -1
  179. package/esm/basket/reference-data/ftse100.js +0 -103
  180. package/esm/basket/reference-data/ftse100.js.map +0 -1
  181. package/esm/basket/reference-data/hsi.js +0 -85
  182. package/esm/basket/reference-data/hsi.js.map +0 -1
  183. package/esm/basket/reference-data/nasdaq100.js +0 -106
  184. package/esm/basket/reference-data/nasdaq100.js.map +0 -1
  185. package/esm/basket/reference-data/sp500.js +0 -44
  186. package/esm/basket/reference-data/sp500.js.map +0 -1
  187. package/esm/core/module/ModuleContainer.js +0 -41
  188. package/esm/core/module/ModuleContainer.js.map +0 -1
  189. package/esm/core/module/VuuModule.js +0 -841
  190. package/esm/core/module/VuuModule.js.map +0 -1
  191. package/esm/core/table/TableContainer.js +0 -142
  192. package/esm/core/table/TableContainer.js.map +0 -1
  193. package/esm/data-utils.js +0 -50
  194. package/esm/data-utils.js.map +0 -1
  195. package/esm/default-column-definitions.js +0 -8
  196. package/esm/default-column-definitions.js.map +0 -1
  197. package/esm/index.js +0 -15
  198. package/esm/index.js.map +0 -1
  199. package/esm/local-datasource-provider/LocalDatasourceProvider.js +0 -68
  200. package/esm/local-datasource-provider/LocalDatasourceProvider.js.map +0 -1
  201. package/esm/makeSuggestions.js +0 -24
  202. package/esm/makeSuggestions.js.map +0 -1
  203. package/esm/schemas.js +0 -24
  204. package/esm/schemas.js.map +0 -1
  205. package/esm/session-table-utils.js +0 -26
  206. package/esm/session-table-utils.js.map +0 -1
  207. package/esm/simul/SimulModule.js +0 -184
  208. package/esm/simul/SimulModule.js.map +0 -1
  209. package/esm/simul/reference-data/accounts.js +0 -25
  210. package/esm/simul/reference-data/accounts.js.map +0 -1
  211. package/esm/simul/reference-data/algos.js +0 -4
  212. package/esm/simul/reference-data/algos.js.map +0 -1
  213. package/esm/simul/reference-data/currencies.js +0 -4
  214. package/esm/simul/reference-data/currencies.js.map +0 -1
  215. package/esm/simul/reference-data/instruments-extended.js +0 -17
  216. package/esm/simul/reference-data/instruments-extended.js.map +0 -1
  217. package/esm/simul/reference-data/instruments.js +0 -82
  218. package/esm/simul/reference-data/instruments.js.map +0 -1
  219. package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +0 -4
  220. package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +0 -1
  221. package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js +0 -29
  222. package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js.map +0 -1
  223. package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +0 -7
  224. package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +0 -1
  225. package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +0 -15
  226. package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +0 -1
  227. package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js +0 -22
  228. package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +0 -1
  229. package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +0 -11
  230. package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +0 -1
  231. package/esm/simul/reference-data/isin-generator/generate-cusip.js +0 -11
  232. package/esm/simul/reference-data/isin-generator/generate-cusip.js.map +0 -1
  233. package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js +0 -6
  234. package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +0 -1
  235. package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js +0 -4
  236. package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +0 -1
  237. package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +0 -12
  238. package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +0 -1
  239. package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +0 -12
  240. package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +0 -1
  241. package/esm/simul/reference-data/isin-generator/index.js +0 -293
  242. package/esm/simul/reference-data/isin-generator/index.js.map +0 -1
  243. package/esm/simul/reference-data/isin-generator/is-odd.js +0 -4
  244. package/esm/simul/reference-data/isin-generator/is-odd.js.map +0 -1
  245. package/esm/simul/reference-data/locations.js +0 -14
  246. package/esm/simul/reference-data/locations.js.map +0 -1
  247. package/esm/simul/reference-data/lotsizes.js +0 -26
  248. package/esm/simul/reference-data/lotsizes.js.map +0 -1
  249. package/esm/simul/reference-data/orderStatus.js +0 -4
  250. package/esm/simul/reference-data/orderStatus.js.map +0 -1
  251. package/esm/simul/reference-data/orders.js +0 -52
  252. package/esm/simul/reference-data/orders.js.map +0 -1
  253. package/esm/simul/reference-data/parent-child-orders.js +0 -141
  254. package/esm/simul/reference-data/parent-child-orders.js.map +0 -1
  255. package/esm/simul/reference-data/prices.js +0 -88
  256. package/esm/simul/reference-data/prices.js.map +0 -1
  257. package/esm/simul/reference-data/sides.js +0 -4
  258. package/esm/simul/reference-data/sides.js.map +0 -1
  259. package/esm/simul/simul-schemas.js +0 -156
  260. package/esm/simul/simul-schemas.js.map +0 -1
  261. package/esm/test/TestModule.js +0 -253
  262. package/esm/test/TestModule.js.map +0 -1
  263. package/esm/vuu-row-generator.js +0 -68
  264. package/esm/vuu-row-generator.js.map +0 -1
@@ -0,0 +1,102 @@
1
+ import { Table, buildDataColumnMapFromSchema } from "../../Table.js";
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.js ADDED
@@ -0,0 +1,12 @@
1
+ export * from "./ArrayProxy.js";
2
+ export * from "./core/module/VuuModule.js";
3
+ export * from "./local-datasource-provider/LocalDatasourceProvider.js";
4
+ export * from "./makeSuggestions.js";
5
+ export * from "./schemas.js";
6
+ export * from "./simul/index.js";
7
+ export * from "./basket/index.js";
8
+ export * from "./test/index.js";
9
+ export * from "./TickingArrayDataSource.js";
10
+ export * from "./vuu-row-generator.js";
11
+ export { default as tableContainer } from "./core/table/TableContainer.js";
12
+ export { Table, buildDataColumnMap, buildDataColumnMapFromSchema } from "./Table.js";
@@ -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.js";
4
+ import TableContainer from "../core/table/TableContainer.js";
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.js ADDED
@@ -0,0 +1,19 @@
1
+ import { schemas } from "./basket/basket-schemas.js";
2
+ import { schemas as simul_schemas_js_schemas } from "./simul/simul-schemas.js";
3
+ import { testModule } from "./test/TestModule.js";
4
+ const schemas_schemas = {
5
+ ...schemas,
6
+ ...simul_schemas_js_schemas,
7
+ ...testModule.schemas
8
+ };
9
+ const allSchemas = {
10
+ ...schemas,
11
+ ...simul_schemas_js_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.js";
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.js";
2
+ import { instrumentsTable } from "./reference-data/instruments.js";
3
+ import { instrumentsExtendedTable } from "./reference-data/instruments-extended.js";
4
+ import { ordersTable } from "./reference-data/orders.js";
5
+ import { childOrdersTable, parentOrdersTable, startGeneratingNewOrders, stopGeneratingNewOrders } from "./reference-data/parent-child-orders.js";
6
+ import { pricesTable } from "./reference-data/prices.js";
7
+ import { schemas } from "./simul-schemas.js";
8
+ import TableContainer from "../core/table/TableContainer.js";
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,2 @@
1
+ export { isSimulTable, schemas as simulSchemas } from "./simul-schemas.js";
2
+ export { simulModule } from "./SimulModule.js";
@@ -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,9 @@
1
+ const algos = [
2
+ "DARKLIQ",
3
+ "IS",
4
+ "SURESHOT",
5
+ "VWAP",
6
+ "LITLIQ",
7
+ "TWAP"
8
+ ];
9
+ export { algos };
@@ -0,0 +1,8 @@
1
+ const currencies = [
2
+ "CAD",
3
+ "GBX",
4
+ "USD",
5
+ "EUR",
6
+ "GBP"
7
+ ];
8
+ export { currencies };
@@ -0,0 +1,5 @@
1
+ export * from "./currencies.js";
2
+ export * from "./instruments.js";
3
+ export * from "./instrument-prices.js";
4
+ export * from "./prices.js";
5
+ export * from "./locations.js";
@@ -0,0 +1,48 @@
1
+ import { instrumentsData } from "./instruments.js";
2
+ import { pricesData } from "./prices.js";
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.js";
2
+ import { buildDataColumnMap } from "../../Table.js";
3
+ import { schemas } from "../simul-schemas.js";
4
+ import { instrumentsData } from "./instruments.js";
5
+ import TableContainer from "../../core/table/TableContainer.js";
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.js";
2
+ import TableContainer from "../../core/table/TableContainer.js";
3
+ import { currencies } from "./currencies.js";
4
+ import { locations, suffixes } from "./locations.js";
5
+ import { lotsizes } from "./lotsizes.js";
6
+ import { random } from "../../data-utils.js";
7
+ import { buildDataColumnMap } from "../../Table.js";
8
+ import { schemas } from "../simul-schemas.js";
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 };
@@ -0,0 +1,2 @@
1
+ const convertStringToBaseTenNumber = (value)=>parseInt(value, 10);
2
+ export { convertStringToBaseTenNumber };