@vuu-ui/vuu-data-test 0.8.33 → 0.8.34
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/_virtual/_commonjsHelpers.js +6 -0
- package/cjs/_virtual/_commonjsHelpers.js.map +1 -0
- package/cjs/_virtual/alphabet.js +6 -0
- package/cjs/_virtual/alphabet.js.map +1 -0
- package/cjs/_virtual/alphanumeric-values.js +6 -0
- package/cjs/_virtual/alphanumeric-values.js.map +1 -0
- package/cjs/_virtual/base-ten-numbers.js +6 -0
- package/cjs/_virtual/base-ten-numbers.js.map +1 -0
- package/cjs/_virtual/convert-string-to-base-ten-number.js +6 -0
- package/cjs/_virtual/convert-string-to-base-ten-number.js.map +1 -0
- package/cjs/_virtual/generate-cusip-check-code.js +6 -0
- package/cjs/_virtual/generate-cusip-check-code.js.map +1 -0
- package/cjs/_virtual/generate-cusip-without-check-code.js +6 -0
- package/cjs/_virtual/generate-cusip-without-check-code.js.map +1 -0
- package/cjs/_virtual/generate-cusip.js +6 -0
- package/cjs/_virtual/generate-cusip.js.map +1 -0
- package/cjs/_virtual/generate-random-alphanumeric.js +6 -0
- package/cjs/_virtual/generate-random-alphanumeric.js.map +1 -0
- package/cjs/_virtual/generate-random-base-ten-number.js +6 -0
- package/cjs/_virtual/generate-random-base-ten-number.js.map +1 -0
- package/cjs/_virtual/generate-random-string-of-alphanumeric-chars.js +6 -0
- package/cjs/_virtual/generate-random-string-of-alphanumeric-chars.js.map +1 -0
- package/cjs/_virtual/generate-random-string-of-base-ten-chars.js +6 -0
- package/cjs/_virtual/generate-random-string-of-base-ten-chars.js.map +1 -0
- package/cjs/_virtual/index.js +6 -0
- package/cjs/_virtual/index.js.map +1 -0
- package/cjs/_virtual/is-odd.js +6 -0
- package/cjs/_virtual/is-odd.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/convert-string-to-base-ten-number.js +13 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/convert-string-to-base-ten-number.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/fixtures/alphabet.js +35 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/fixtures/alphabet.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/fixtures/alphanumeric-values.js +42 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/fixtures/alphanumeric-values.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/fixtures/base-ten-numbers.js +21 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/fixtures/base-ten-numbers.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip-check-code.js +36 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip-check-code.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip-without-check-code.js +21 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip-without-check-code.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip.js +21 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-random-alphanumeric.js +16 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-random-alphanumeric.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-random-base-ten-number.js +13 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-random-base-ten-number.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-random-string-of-alphanumeric-chars.js +20 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-random-string-of-alphanumeric-chars.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-random-string-of-base-ten-chars.js +20 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/generate-random-string-of-base-ten-chars.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/index.js +14 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/index.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/is-odd.js +11 -0
- package/cjs/node_modules/@thomaschaplin/cusip-generator/build/is-odd.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/isin-generator/country-codes.json.js +256 -0
- package/cjs/node_modules/@thomaschaplin/isin-generator/country-codes.json.js.map +1 -0
- package/cjs/node_modules/@thomaschaplin/isin-generator/index.js +52 -0
- package/cjs/node_modules/@thomaschaplin/isin-generator/index.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/ArrayProxy.js +80 -0
- package/cjs/packages/vuu-data-test/src/ArrayProxy.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/Table.js +186 -0
- package/cjs/packages/vuu-data-test/src/Table.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/TickingArrayDataSource.js +134 -0
- package/cjs/packages/vuu-data-test/src/TickingArrayDataSource.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/UpdateGenerator.js +87 -0
- package/cjs/packages/vuu-data-test/src/UpdateGenerator.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/basket/basket-module.js +236 -0
- package/cjs/packages/vuu-data-test/src/basket/basket-module.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/basket/basket-schemas.js +121 -0
- package/cjs/packages/vuu-data-test/src/basket/basket-schemas.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/constituents.js +40 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/constituents.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/ftse100.js +105 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/ftse100.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/hsi.js +87 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/hsi.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/nasdaq100.js +108 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/nasdaq100.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/prices.js +51 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/prices.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/sp500.js +46 -0
- package/cjs/packages/vuu-data-test/src/basket/reference-data/sp500.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/data-utils.js +58 -0
- package/cjs/packages/vuu-data-test/src/data-utils.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/index.js +36 -0
- package/cjs/packages/vuu-data-test/src/index.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/makeSuggestions.js +37 -0
- package/cjs/packages/vuu-data-test/src/makeSuggestions.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/schemas.js +28 -0
- package/cjs/packages/vuu-data-test/src/schemas.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/currencies.js +6 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/currencies.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/instruments-extended.js +18 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/instruments-extended.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/instruments.js +74 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/instruments.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/locations.js +17 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/locations.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/lotsizes.js +28 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/lotsizes.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/orders.js +43 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/orders.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/prices.js +71 -0
- package/cjs/packages/vuu-data-test/src/simul/reference-data/prices.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/simul/simul-module.js +72 -0
- package/cjs/packages/vuu-data-test/src/simul/simul-module.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/simul/simul-schemas.js +137 -0
- package/cjs/packages/vuu-data-test/src/simul/simul-schemas.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/test/test-module.js +58 -0
- package/cjs/packages/vuu-data-test/src/test/test-module.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/test/test-schemas.js +17 -0
- package/cjs/packages/vuu-data-test/src/test/test-schemas.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/vuu-modules.js +15 -0
- package/cjs/packages/vuu-data-test/src/vuu-modules.js.map +1 -0
- package/cjs/packages/vuu-data-test/src/vuu-row-generator.js +74 -0
- package/cjs/packages/vuu-data-test/src/vuu-row-generator.js.map +1 -0
- package/esm/_virtual/_commonjsHelpers.js +4 -0
- package/esm/_virtual/_commonjsHelpers.js.map +1 -0
- package/esm/_virtual/alphabet.js +4 -0
- package/esm/_virtual/alphabet.js.map +1 -0
- package/esm/_virtual/alphanumeric-values.js +4 -0
- package/esm/_virtual/alphanumeric-values.js.map +1 -0
- package/esm/_virtual/base-ten-numbers.js +4 -0
- package/esm/_virtual/base-ten-numbers.js.map +1 -0
- package/esm/_virtual/convert-string-to-base-ten-number.js +4 -0
- package/esm/_virtual/convert-string-to-base-ten-number.js.map +1 -0
- package/esm/_virtual/generate-cusip-check-code.js +4 -0
- package/esm/_virtual/generate-cusip-check-code.js.map +1 -0
- package/esm/_virtual/generate-cusip-without-check-code.js +4 -0
- package/esm/_virtual/generate-cusip-without-check-code.js.map +1 -0
- package/esm/_virtual/generate-cusip.js +4 -0
- package/esm/_virtual/generate-cusip.js.map +1 -0
- package/esm/_virtual/generate-random-alphanumeric.js +4 -0
- package/esm/_virtual/generate-random-alphanumeric.js.map +1 -0
- package/esm/_virtual/generate-random-base-ten-number.js +4 -0
- package/esm/_virtual/generate-random-base-ten-number.js.map +1 -0
- package/esm/_virtual/generate-random-string-of-alphanumeric-chars.js +4 -0
- package/esm/_virtual/generate-random-string-of-alphanumeric-chars.js.map +1 -0
- package/esm/_virtual/generate-random-string-of-base-ten-chars.js +4 -0
- package/esm/_virtual/generate-random-string-of-base-ten-chars.js.map +1 -0
- package/esm/_virtual/index.js +4 -0
- package/esm/_virtual/index.js.map +1 -0
- package/esm/_virtual/is-odd.js +4 -0
- package/esm/_virtual/is-odd.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/convert-string-to-base-ten-number.js +11 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/convert-string-to-base-ten-number.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/fixtures/alphabet.js +33 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/fixtures/alphabet.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/fixtures/alphanumeric-values.js +40 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/fixtures/alphanumeric-values.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/fixtures/base-ten-numbers.js +19 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/fixtures/base-ten-numbers.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip-check-code.js +34 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip-check-code.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip-without-check-code.js +19 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip-without-check-code.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip.js +19 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-cusip.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-random-alphanumeric.js +14 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-random-alphanumeric.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-random-base-ten-number.js +11 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-random-base-ten-number.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-random-string-of-alphanumeric-chars.js +18 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-random-string-of-alphanumeric-chars.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-random-string-of-base-ten-chars.js +18 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/generate-random-string-of-base-ten-chars.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/index.js +12 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/index.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/is-odd.js +9 -0
- package/esm/node_modules/@thomaschaplin/cusip-generator/build/is-odd.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/isin-generator/country-codes.json.js +254 -0
- package/esm/node_modules/@thomaschaplin/isin-generator/country-codes.json.js.map +1 -0
- package/esm/node_modules/@thomaschaplin/isin-generator/index.js +50 -0
- package/esm/node_modules/@thomaschaplin/isin-generator/index.js.map +1 -0
- package/esm/packages/vuu-data-test/src/ArrayProxy.js +78 -0
- package/esm/packages/vuu-data-test/src/ArrayProxy.js.map +1 -0
- package/esm/packages/vuu-data-test/src/Table.js +182 -0
- package/esm/packages/vuu-data-test/src/Table.js.map +1 -0
- package/esm/packages/vuu-data-test/src/TickingArrayDataSource.js +132 -0
- package/esm/packages/vuu-data-test/src/TickingArrayDataSource.js.map +1 -0
- package/esm/packages/vuu-data-test/src/UpdateGenerator.js +85 -0
- package/esm/packages/vuu-data-test/src/UpdateGenerator.js.map +1 -0
- package/esm/packages/vuu-data-test/src/basket/basket-module.js +232 -0
- package/esm/packages/vuu-data-test/src/basket/basket-module.js.map +1 -0
- package/esm/packages/vuu-data-test/src/basket/basket-schemas.js +119 -0
- package/esm/packages/vuu-data-test/src/basket/basket-schemas.js.map +1 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/constituents.js +38 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/constituents.js.map +1 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/ftse100.js +103 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/ftse100.js.map +1 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/hsi.js +85 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/hsi.js.map +1 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/nasdaq100.js +106 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/nasdaq100.js.map +1 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/prices.js +49 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/prices.js.map +1 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/sp500.js +44 -0
- package/esm/packages/vuu-data-test/src/basket/reference-data/sp500.js.map +1 -0
- package/esm/packages/vuu-data-test/src/data-utils.js +53 -0
- package/esm/packages/vuu-data-test/src/data-utils.js.map +1 -0
- package/esm/packages/vuu-data-test/src/index.js +11 -0
- package/esm/packages/vuu-data-test/src/index.js.map +1 -0
- package/esm/packages/vuu-data-test/src/makeSuggestions.js +35 -0
- package/esm/packages/vuu-data-test/src/makeSuggestions.js.map +1 -0
- package/esm/packages/vuu-data-test/src/schemas.js +24 -0
- package/esm/packages/vuu-data-test/src/schemas.js.map +1 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/currencies.js +4 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/currencies.js.map +1 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/instruments-extended.js +16 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/instruments-extended.js.map +1 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/instruments.js +69 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/instruments.js.map +1 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/locations.js +14 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/locations.js.map +1 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/lotsizes.js +26 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/lotsizes.js.map +1 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/orders.js +40 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/orders.js.map +1 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/prices.js +68 -0
- package/esm/packages/vuu-data-test/src/simul/reference-data/prices.js.map +1 -0
- package/esm/packages/vuu-data-test/src/simul/simul-module.js +70 -0
- package/esm/packages/vuu-data-test/src/simul/simul-module.js.map +1 -0
- package/esm/packages/vuu-data-test/src/simul/simul-schemas.js +135 -0
- package/esm/packages/vuu-data-test/src/simul/simul-schemas.js.map +1 -0
- package/esm/packages/vuu-data-test/src/test/test-module.js +56 -0
- package/esm/packages/vuu-data-test/src/test/test-module.js.map +1 -0
- package/esm/packages/vuu-data-test/src/test/test-schemas.js +15 -0
- package/esm/packages/vuu-data-test/src/test/test-schemas.js.map +1 -0
- package/esm/packages/vuu-data-test/src/vuu-modules.js +13 -0
- package/esm/packages/vuu-data-test/src/vuu-modules.js.map +1 -0
- package/esm/packages/vuu-data-test/src/vuu-row-generator.js +68 -0
- package/esm/packages/vuu-data-test/src/vuu-row-generator.js.map +1 -0
- package/package.json +8 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"country-codes.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import require$$0 from './country-codes.json.js';
|
|
2
|
+
import '../cusip-generator/build/index.js';
|
|
3
|
+
import { __exports as build } from '../../../_virtual/index.js';
|
|
4
|
+
|
|
5
|
+
const countryCodes = require$$0;
|
|
6
|
+
const cusip = build.generateCusip();
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
const generateIsin = cusip => {
|
|
10
|
+
let code = countryCodes[Math.floor(Math.random() * countryCodes.length)];
|
|
11
|
+
let isin = code + cusip + generateIsinCheckDigit(code + cusip + '0');
|
|
12
|
+
return isin
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const generateIsinCheckDigit = isin => {
|
|
16
|
+
if (isin.length != 12) return false;
|
|
17
|
+
var v = [];
|
|
18
|
+
for (var i = isin.length - 2; i >= 0; i--) {
|
|
19
|
+
let c = isin.charAt(i);
|
|
20
|
+
if (isNaN(c)) {
|
|
21
|
+
var letterCode = isin.charCodeAt(i) - 55;
|
|
22
|
+
v.push(letterCode % 10);
|
|
23
|
+
if (letterCode > 9) {
|
|
24
|
+
v.push(Math.floor(letterCode / 10));
|
|
25
|
+
}
|
|
26
|
+
} else {
|
|
27
|
+
v.push(Number(c));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
var sum = 0;
|
|
31
|
+
var l = v.length;
|
|
32
|
+
for (var i = 0; i < l; i++) {
|
|
33
|
+
if (i % 2 == 0) {
|
|
34
|
+
var d = v[i] * 2;
|
|
35
|
+
sum += Math.floor(d / 10);
|
|
36
|
+
sum += d % 10;
|
|
37
|
+
} else {
|
|
38
|
+
sum += v[i];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return (10 - (sum % 10)) % 10
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
var isinGenerator_1 = function isinGenerator() {
|
|
46
|
+
return generateIsin(cusip)
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export { isinGenerator_1 as isinGenerator };
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../node_modules/@thomaschaplin/isin-generator/index.js"],"sourcesContent":["'use-strict'\r\n\r\nconst countryCodes = require('./country-codes.json')\r\nconst cusip = require('@thomaschaplin/cusip-generator').generateCusip()\r\n\r\n\r\nconst generateIsin = cusip => {\r\n let code = countryCodes[Math.floor(Math.random() * countryCodes.length)]\r\n let isin = code + cusip + generateIsinCheckDigit(code + cusip + '0')\r\n return isin\r\n}\r\n\r\nconst generateIsinCheckDigit = isin => {\r\n if (isin.length != 12) return false;\r\n var v = [];\r\n for (var i = isin.length - 2; i >= 0; i--) {\r\n let c = isin.charAt(i);\r\n if (isNaN(c)) {\r\n var letterCode = isin.charCodeAt(i) - 55;\r\n v.push(letterCode % 10);\r\n if (letterCode > 9) {\r\n v.push(Math.floor(letterCode / 10));\r\n }\r\n } else {\r\n v.push(Number(c));\r\n }\r\n }\r\n var sum = 0;\r\n var l = v.length;\r\n for (var i = 0; i < l; i++) {\r\n if (i % 2 == 0) {\r\n var d = v[i] * 2;\r\n sum += Math.floor(d / 10)\r\n sum += d % 10;\r\n } else {\r\n sum += v[i];\r\n }\r\n }\r\n return (10 - (sum % 10)) % 10\r\n}\r\n\r\n\r\nexports.isinGenerator = function isinGenerator() {\r\n return generateIsin(cusip)\r\n}"],"names":["require$$1"],"mappings":";;;;AAEA,MAAM,YAAY,GAAG,WAA+B;AACpD,MAAM,KAAK,GAAGA,KAAyC,CAAC,aAAa,GAAE;AACvE;AACA;AACA,MAAM,YAAY,GAAG,KAAK,IAAI;AAC9B,IAAI,IAAI,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAC;AAC5E,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,sBAAsB,CAAC,IAAI,GAAG,KAAK,GAAG,GAAG,EAAC;AACxE,IAAI,OAAO,IAAI;AACf,EAAC;AACD;AACA,MAAM,sBAAsB,GAAG,IAAI,IAAI;AACvC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,KAAK,CAAC;AACxC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AACtB,YAAY,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACrD,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;AACpC,YAAY,IAAI,UAAU,GAAG,CAAC,EAAE;AAChC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;AACpD,aAAa;AACb,SAAS,MAAM;AACf,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAS;AACT,KAAK;AACL,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC;AAChB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACrB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAChC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACxB,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAY,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAC;AACrC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC1B,SAAS,MAAM;AACf,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,SAAS;AACT,KAAK;AACL,IAAI,OAAO,CAAC,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE;AACjC,EAAC;AACD;AACA;AACqB,IAAA,eAAA,GAAG,SAAS,aAAa,GAAG;AACjD,IAAI,OAAO,YAAY,CAAC,KAAK,CAAC;AAC9B;;;;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
var __accessCheck = (obj, member, msg) => {
|
|
2
|
+
if (!member.has(obj))
|
|
3
|
+
throw TypeError("Cannot " + msg);
|
|
4
|
+
};
|
|
5
|
+
var __privateGet = (obj, member, getter) => {
|
|
6
|
+
__accessCheck(obj, member, "read from private field");
|
|
7
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
8
|
+
};
|
|
9
|
+
var __privateAdd = (obj, member, value) => {
|
|
10
|
+
if (member.has(obj))
|
|
11
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
12
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
13
|
+
};
|
|
14
|
+
var __privateSet = (obj, member, value, setter) => {
|
|
15
|
+
__accessCheck(obj, member, "write to private field");
|
|
16
|
+
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
17
|
+
return value;
|
|
18
|
+
};
|
|
19
|
+
var _getItem;
|
|
20
|
+
const _ArrayProxy = class _ArrayProxy {
|
|
21
|
+
constructor(size, getRow) {
|
|
22
|
+
__privateAdd(this, _getItem, void 0);
|
|
23
|
+
this.length = 0;
|
|
24
|
+
this.map = (func) => {
|
|
25
|
+
return new _ArrayProxy(this.length, (i) => {
|
|
26
|
+
return func(__privateGet(this, _getItem).call(this, i), i);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
this.slice = (from, to) => {
|
|
30
|
+
const out = [];
|
|
31
|
+
const end = Math.min(this.length, to);
|
|
32
|
+
for (let i = from; i < end; i++) {
|
|
33
|
+
out.push(__privateGet(this, _getItem).call(this, i));
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
};
|
|
37
|
+
__privateSet(this, _getItem, getRow);
|
|
38
|
+
this.length = size;
|
|
39
|
+
const handler = {
|
|
40
|
+
get: (target, prop) => {
|
|
41
|
+
var _a;
|
|
42
|
+
if (prop === "length") {
|
|
43
|
+
return target.length;
|
|
44
|
+
} else if (prop === "slice") {
|
|
45
|
+
return target.slice;
|
|
46
|
+
} else if (prop === "map") {
|
|
47
|
+
return target.map;
|
|
48
|
+
} else if (prop === "toString") {
|
|
49
|
+
return "[ArrayProxy]";
|
|
50
|
+
}
|
|
51
|
+
if (typeof prop === "string") {
|
|
52
|
+
const index = parseInt(prop, 10);
|
|
53
|
+
if (!isNaN(index)) {
|
|
54
|
+
if (index < this.length) {
|
|
55
|
+
return __privateGet(_a = target, _getItem).call(_a, index);
|
|
56
|
+
} else {
|
|
57
|
+
return void 0;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
throw Error(`unsupported property ${String(prop)} on ArrayProxy`);
|
|
62
|
+
},
|
|
63
|
+
set: (target, prop, newVal) => {
|
|
64
|
+
if (prop === "length") {
|
|
65
|
+
target.length = newVal;
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
throw Error(`ArrayProxy is immutable except for length`);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
return new Proxy(this, handler);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
_getItem = new WeakMap();
|
|
75
|
+
let ArrayProxy = _ArrayProxy;
|
|
76
|
+
|
|
77
|
+
export { ArrayProxy };
|
|
78
|
+
//# sourceMappingURL=ArrayProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrayProxy.js","sources":["../../../../src/ArrayProxy.ts"],"sourcesContent":["export type RowAtIndexFunc<T = unknown> = (index: number) => T | undefined;\n\nexport class ArrayProxy<T = string> {\n #getItem: RowAtIndexFunc;\n public length = 0;\n\n constructor(size: number, getRow: RowAtIndexFunc) {\n this.#getItem = getRow;\n this.length = size;\n\n const handler = {\n get: (target: ArrayProxy<T>, prop: string | symbol): any => {\n if (prop === \"length\") {\n return target.length;\n } else if (prop === \"slice\") {\n return target.slice;\n } else if (prop === \"map\") {\n return target.map;\n } else if (prop === \"toString\") {\n return \"[ArrayProxy]\";\n }\n if (typeof prop === \"string\") {\n const index = parseInt(prop, 10);\n if (!isNaN(index)) {\n if (index < this.length) {\n return target.#getItem(index);\n } else {\n return undefined;\n }\n }\n }\n throw Error(`unsupported property ${String(prop)} on ArrayProxy`);\n },\n set: (target: ArrayProxy<T>, prop: string, newVal: unknown) => {\n if (prop === \"length\") {\n target.length = newVal as number;\n return true;\n }\n throw Error(`ArrayProxy is immutable except for length`);\n },\n };\n return new Proxy(this, handler);\n }\n\n map = (func: (item: T, i: number) => unknown) => {\n return new ArrayProxy(this.length, (i: number) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return func(this.#getItem(i), i);\n });\n };\n slice = (from: number, to: number) => {\n const out = [];\n const end = Math.min(this.length, to);\n for (let i = from; i < end; i++) {\n out.push(this.#getItem(i));\n }\n return out;\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { EventEmitter } from '@vuu-ui/vuu-utils';
|
|
2
|
+
|
|
3
|
+
var __accessCheck = (obj, member, msg) => {
|
|
4
|
+
if (!member.has(obj))
|
|
5
|
+
throw TypeError("Cannot " + msg);
|
|
6
|
+
};
|
|
7
|
+
var __privateGet = (obj, member, getter) => {
|
|
8
|
+
__accessCheck(obj, member, "read from private field");
|
|
9
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
10
|
+
};
|
|
11
|
+
var __privateAdd = (obj, member, value) => {
|
|
12
|
+
if (member.has(obj))
|
|
13
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
14
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
15
|
+
};
|
|
16
|
+
var __privateSet = (obj, member, value, setter) => {
|
|
17
|
+
__accessCheck(obj, member, "write to private field");
|
|
18
|
+
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
19
|
+
return value;
|
|
20
|
+
};
|
|
21
|
+
var _data, _dataMap, _indexOfKey, _index, _schema;
|
|
22
|
+
class Table extends EventEmitter {
|
|
23
|
+
constructor(schema, data, dataMap, updateGenerator) {
|
|
24
|
+
super();
|
|
25
|
+
__privateAdd(this, _data, void 0);
|
|
26
|
+
__privateAdd(this, _dataMap, void 0);
|
|
27
|
+
__privateAdd(this, _indexOfKey, void 0);
|
|
28
|
+
__privateAdd(this, _index, /* @__PURE__ */ new Map());
|
|
29
|
+
__privateAdd(this, _schema, void 0);
|
|
30
|
+
__privateSet(this, _data, data);
|
|
31
|
+
__privateSet(this, _dataMap, dataMap);
|
|
32
|
+
__privateSet(this, _schema, schema);
|
|
33
|
+
__privateSet(this, _indexOfKey, dataMap[schema.key]);
|
|
34
|
+
this.buildIndex();
|
|
35
|
+
updateGenerator?.setTable(this);
|
|
36
|
+
updateGenerator?.setRange({ from: 0, to: 100 });
|
|
37
|
+
}
|
|
38
|
+
buildIndex() {
|
|
39
|
+
for (let i = 0; i < __privateGet(this, _data).length; i++) {
|
|
40
|
+
const key = __privateGet(this, _data)[i][__privateGet(this, _indexOfKey)];
|
|
41
|
+
__privateGet(this, _index).set(key, i);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
get data() {
|
|
45
|
+
return __privateGet(this, _data);
|
|
46
|
+
}
|
|
47
|
+
get map() {
|
|
48
|
+
return __privateGet(this, _dataMap);
|
|
49
|
+
}
|
|
50
|
+
get schema() {
|
|
51
|
+
return __privateGet(this, _schema);
|
|
52
|
+
}
|
|
53
|
+
insert(row) {
|
|
54
|
+
const index = __privateGet(this, _data).length;
|
|
55
|
+
__privateGet(this, _data).push(row);
|
|
56
|
+
const key = row[__privateGet(this, _indexOfKey)];
|
|
57
|
+
__privateGet(this, _index).set(key, index);
|
|
58
|
+
this.emit("insert", row);
|
|
59
|
+
}
|
|
60
|
+
findByKey(key) {
|
|
61
|
+
const index = __privateGet(this, _index).get(key) ?? -1;
|
|
62
|
+
return __privateGet(this, _data)[index];
|
|
63
|
+
}
|
|
64
|
+
update(key, columnName, value) {
|
|
65
|
+
const rowIndex = __privateGet(this, _data).findIndex(
|
|
66
|
+
(row) => row[__privateGet(this, _indexOfKey)] === key
|
|
67
|
+
);
|
|
68
|
+
const colIndex = __privateGet(this, _dataMap)[columnName];
|
|
69
|
+
if (rowIndex !== -1) {
|
|
70
|
+
const row = __privateGet(this, _data)[rowIndex];
|
|
71
|
+
const newRow = row.slice();
|
|
72
|
+
newRow[colIndex] = value;
|
|
73
|
+
__privateGet(this, _data)[rowIndex] = newRow;
|
|
74
|
+
this.emit("update", newRow, columnName);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
updateRow(row) {
|
|
78
|
+
const key = row[__privateGet(this, _indexOfKey)];
|
|
79
|
+
const rowIndex = __privateGet(this, _data).findIndex(
|
|
80
|
+
(row2) => row2[__privateGet(this, _indexOfKey)] === key
|
|
81
|
+
);
|
|
82
|
+
if (rowIndex !== -1) {
|
|
83
|
+
__privateGet(this, _data)[rowIndex] = row;
|
|
84
|
+
this.emit("update", row);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
_data = new WeakMap();
|
|
89
|
+
_dataMap = new WeakMap();
|
|
90
|
+
_indexOfKey = new WeakMap();
|
|
91
|
+
_index = new WeakMap();
|
|
92
|
+
_schema = new WeakMap();
|
|
93
|
+
const buildDataColumnMap = (schema) => Object.values(schema.columns).reduce((map, col, index) => {
|
|
94
|
+
map[col.name] = index;
|
|
95
|
+
return map;
|
|
96
|
+
}, {});
|
|
97
|
+
const getServerDataType = (columnName, { columns: cols1, table: t1 }, { columns: cols2, table: t2 }) => {
|
|
98
|
+
const col1 = cols1.find((col) => col.name === columnName);
|
|
99
|
+
const col2 = cols2.find((col) => col.name === columnName);
|
|
100
|
+
if (col1 && col2) {
|
|
101
|
+
if (col1.serverDataType === col2.serverDataType) {
|
|
102
|
+
return col1.serverDataType;
|
|
103
|
+
} else {
|
|
104
|
+
throw Error(
|
|
105
|
+
`both tables ${t1.table} and ${t2.table} implement column ${columnName}, but with types differ`
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
} else if (col1) {
|
|
109
|
+
return col1.serverDataType;
|
|
110
|
+
} else if (col2) {
|
|
111
|
+
return col2.serverDataType;
|
|
112
|
+
} else {
|
|
113
|
+
throw Error(`WTF how is this possible`);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const joinTables = (joinTable, table1, table2, joinColumn) => {
|
|
117
|
+
const { map: m1, schema: schema1 } = table1;
|
|
118
|
+
const { map: m2, schema: schema2 } = table2;
|
|
119
|
+
const k1 = m1[joinColumn];
|
|
120
|
+
const k2 = m2[joinColumn];
|
|
121
|
+
const combinedColumns = new Set(
|
|
122
|
+
[...schema1.columns, ...schema2.columns].map((col) => col.name).sort()
|
|
123
|
+
);
|
|
124
|
+
const combinedSchema = {
|
|
125
|
+
key: joinColumn,
|
|
126
|
+
table: joinTable,
|
|
127
|
+
columns: Array.from(combinedColumns).map((columnName) => ({
|
|
128
|
+
name: columnName,
|
|
129
|
+
serverDataType: getServerDataType(columnName, schema1, schema2)
|
|
130
|
+
}))
|
|
131
|
+
};
|
|
132
|
+
const data = [];
|
|
133
|
+
const combinedColumnMap = buildDataColumnMap(combinedSchema);
|
|
134
|
+
for (const row of table1.data) {
|
|
135
|
+
const row2 = table2.findByKey(String(row[k1]));
|
|
136
|
+
if (row2) {
|
|
137
|
+
const out = [];
|
|
138
|
+
for (const column of table1.schema.columns) {
|
|
139
|
+
const value = row[m1[column.name]];
|
|
140
|
+
out[combinedColumnMap[column.name]] = value;
|
|
141
|
+
}
|
|
142
|
+
for (const column of table2.schema.columns) {
|
|
143
|
+
const value = row2[m2[column.name]];
|
|
144
|
+
out[combinedColumnMap[column.name]] = value;
|
|
145
|
+
}
|
|
146
|
+
data.push(out);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const newTable = new Table(combinedSchema, data, combinedColumnMap);
|
|
150
|
+
table1.on("insert", (row) => {
|
|
151
|
+
const row2 = table2.findByKey(String(row[k1]));
|
|
152
|
+
if (row2) {
|
|
153
|
+
const out = [];
|
|
154
|
+
for (const column of table1.schema.columns) {
|
|
155
|
+
const value = row[m1[column.name]];
|
|
156
|
+
out[combinedColumnMap[column.name]] = value;
|
|
157
|
+
}
|
|
158
|
+
for (const column of table2.schema.columns) {
|
|
159
|
+
const value = row2[m2[column.name]];
|
|
160
|
+
out[combinedColumnMap[column.name]] = value;
|
|
161
|
+
}
|
|
162
|
+
newTable.insert(out);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
table2.on("update", (row) => {
|
|
166
|
+
const keyValue = row[k2];
|
|
167
|
+
const targetRow = newTable.findByKey(keyValue);
|
|
168
|
+
if (targetRow) {
|
|
169
|
+
const updatedRow = targetRow.slice();
|
|
170
|
+
for (const { name } of table2.schema.columns) {
|
|
171
|
+
if (row[m2[name]] !== updatedRow[combinedColumnMap[name]]) {
|
|
172
|
+
updatedRow[combinedColumnMap[name]] = row[m2[name]];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
newTable.updateRow(updatedRow);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
return newTable;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export { Table, buildDataColumnMap, joinTables };
|
|
182
|
+
//# sourceMappingURL=Table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../../../src/Table.ts"],"sourcesContent":["import { SchemaColumn, TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRowDataItemType, VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, EventEmitter } from \"@vuu-ui/vuu-utils\";\nimport { UpdateGenerator } from \"./rowUpdates\";\n\nexport type TableEvents = {\n delete: (row: VuuRowDataItemType[]) => void;\n insert: (row: VuuRowDataItemType[]) => void;\n update: (row: VuuRowDataItemType[], columnName?: string) => void;\n};\n\nexport class Table extends EventEmitter<TableEvents> {\n #data: VuuRowDataItemType[][];\n #dataMap: ColumnMap;\n #indexOfKey: number;\n #index = new Map<string, number>();\n #schema: TableSchema;\n\n constructor(\n schema: TableSchema,\n data: VuuRowDataItemType[][],\n dataMap: ColumnMap,\n updateGenerator?: UpdateGenerator\n ) {\n super();\n this.#data = data;\n this.#dataMap = dataMap;\n this.#schema = schema;\n this.#indexOfKey = dataMap[schema.key];\n this.buildIndex();\n updateGenerator?.setTable(this);\n updateGenerator?.setRange({ from: 0, to: 100 });\n }\n\n private buildIndex() {\n for (let i = 0; i < this.#data.length; i++) {\n const key = this.#data[i][this.#indexOfKey] as string;\n this.#index.set(key, i);\n }\n }\n\n get data() {\n return this.#data;\n }\n\n get map() {\n return this.#dataMap;\n }\n\n get schema() {\n return this.#schema;\n }\n\n insert(row: VuuRowDataItemType[]) {\n const index = this.#data.length;\n this.#data.push(row);\n const key = row[this.#indexOfKey] as string;\n this.#index.set(key, index);\n this.emit(\"insert\", row);\n }\n\n findByKey(key: string) {\n const index = this.#index.get(key) ?? -1;\n return this.#data[index];\n }\n\n update(key: string, columnName: string, value: VuuRowDataItemType) {\n const rowIndex = this.#data.findIndex(\n (row) => row[this.#indexOfKey] === key\n );\n const colIndex = this.#dataMap[columnName];\n if (rowIndex !== -1) {\n const row = this.#data[rowIndex];\n const newRow = row.slice();\n newRow[colIndex] = value;\n this.#data[rowIndex] = newRow;\n this.emit(\"update\", newRow, columnName);\n }\n }\n updateRow(row: VuuRowDataItemType[]) {\n const key = row[this.#indexOfKey];\n const rowIndex = this.#data.findIndex(\n (row) => row[this.#indexOfKey] === key\n );\n if (rowIndex !== -1) {\n this.#data[rowIndex] = row;\n this.emit(\"update\", row);\n }\n }\n}\n\nexport const buildDataColumnMap = (schema: TableSchema) =>\n Object.values(schema.columns).reduce<ColumnMap>((map, col, index) => {\n map[col.name] = index;\n return map;\n }, {});\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(`WTF how is this possible`);\n }\n};\n\n// Just copies source tables, then registers update listeners.\n// Not terribly efficient, but good enough for showcase\nexport const joinTables = (\n joinTable: VuuTable,\n table1: Table,\n table2: Table,\n joinColumn: string\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 = buildDataColumnMap(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\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"],"names":["row"],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { ArrayDataSource } from '@vuu-ui/vuu-data-local';
|
|
2
|
+
import { metadataKeys } from '@vuu-ui/vuu-utils';
|
|
3
|
+
import { makeSuggestions } from './makeSuggestions.js';
|
|
4
|
+
|
|
5
|
+
var __accessCheck = (obj, member, msg) => {
|
|
6
|
+
if (!member.has(obj))
|
|
7
|
+
throw TypeError("Cannot " + msg);
|
|
8
|
+
};
|
|
9
|
+
var __privateGet = (obj, member, getter) => {
|
|
10
|
+
__accessCheck(obj, member, "read from private field");
|
|
11
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
12
|
+
};
|
|
13
|
+
var __privateAdd = (obj, member, value) => {
|
|
14
|
+
if (member.has(obj))
|
|
15
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
16
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
17
|
+
};
|
|
18
|
+
var __privateSet = (obj, member, value, setter) => {
|
|
19
|
+
__accessCheck(obj, member, "write to private field");
|
|
20
|
+
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var _menuRpcServices, _rpcServices, _table;
|
|
24
|
+
class TickingArrayDataSource extends ArrayDataSource {
|
|
25
|
+
constructor({
|
|
26
|
+
data,
|
|
27
|
+
menuRpcServices,
|
|
28
|
+
rpcServices,
|
|
29
|
+
table,
|
|
30
|
+
menu,
|
|
31
|
+
...arrayDataSourceProps
|
|
32
|
+
}) {
|
|
33
|
+
if (data === void 0 && table === void 0) {
|
|
34
|
+
throw Error("TickingArrayDataSource must be constructed with data");
|
|
35
|
+
}
|
|
36
|
+
super({
|
|
37
|
+
...arrayDataSourceProps,
|
|
38
|
+
data: data ?? table?.data ?? []
|
|
39
|
+
});
|
|
40
|
+
__privateAdd(this, _menuRpcServices, void 0);
|
|
41
|
+
__privateAdd(this, _rpcServices, void 0);
|
|
42
|
+
__privateAdd(this, _table, void 0);
|
|
43
|
+
this._menu = menu;
|
|
44
|
+
__privateSet(this, _menuRpcServices, menuRpcServices);
|
|
45
|
+
__privateSet(this, _rpcServices, rpcServices);
|
|
46
|
+
__privateSet(this, _table, table);
|
|
47
|
+
if (table) {
|
|
48
|
+
table.on("insert", this.insert);
|
|
49
|
+
table.on("update", this.updateRow);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async subscribe(subscribeProps, callback) {
|
|
53
|
+
const subscription = super.subscribe(subscribeProps, callback);
|
|
54
|
+
return subscription;
|
|
55
|
+
}
|
|
56
|
+
set range(range) {
|
|
57
|
+
super.range = range;
|
|
58
|
+
}
|
|
59
|
+
get range() {
|
|
60
|
+
return super.range;
|
|
61
|
+
}
|
|
62
|
+
getSelectedRows() {
|
|
63
|
+
return this.selectedRows.reduce(
|
|
64
|
+
(rows, selected) => {
|
|
65
|
+
if (Array.isArray(selected)) {
|
|
66
|
+
selected.forEach((sel) => {
|
|
67
|
+
const row = this.data[sel];
|
|
68
|
+
if (row) {
|
|
69
|
+
rows.push(row);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
} else {
|
|
73
|
+
const row = this.data[selected];
|
|
74
|
+
if (row) {
|
|
75
|
+
rows.push(row);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return rows;
|
|
79
|
+
},
|
|
80
|
+
[]
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
applyEdit(row, columnName, value) {
|
|
84
|
+
const key = row[metadataKeys.KEY];
|
|
85
|
+
__privateGet(this, _table)?.update(key, columnName, value);
|
|
86
|
+
return Promise.resolve(true);
|
|
87
|
+
}
|
|
88
|
+
async rpcCall(rpcRequest) {
|
|
89
|
+
const rpcService = __privateGet(this, _rpcServices)?.find(
|
|
90
|
+
(service) => service.rpcName === rpcRequest.rpcName
|
|
91
|
+
);
|
|
92
|
+
if (rpcService) {
|
|
93
|
+
return rpcService.service({
|
|
94
|
+
...rpcRequest
|
|
95
|
+
});
|
|
96
|
+
} else {
|
|
97
|
+
console.log(`no implementation for PRC service ${rpcRequest.rpcName}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async menuRpcCall(rpcRequest) {
|
|
101
|
+
const rpcService = __privateGet(this, _rpcServices)?.find(
|
|
102
|
+
(service) => service.rpcName === rpcRequest.rpcName
|
|
103
|
+
);
|
|
104
|
+
if (rpcService) {
|
|
105
|
+
switch (rpcRequest.type) {
|
|
106
|
+
case "VIEW_PORT_MENUS_SELECT_RPC": {
|
|
107
|
+
const selectedRows = this.getSelectedRows();
|
|
108
|
+
return rpcService.service({
|
|
109
|
+
...rpcRequest,
|
|
110
|
+
selectedRows
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return super.menuRpcCall(rpcRequest);
|
|
116
|
+
}
|
|
117
|
+
getTypeaheadSuggestions(column, pattern) {
|
|
118
|
+
if (__privateGet(this, _table)) {
|
|
119
|
+
return makeSuggestions(__privateGet(this, _table), column, pattern);
|
|
120
|
+
} else {
|
|
121
|
+
throw Error(
|
|
122
|
+
"cannot call getTypeaheadSuggestions on TickingDataSOurce if table has not been provided"
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
_menuRpcServices = new WeakMap();
|
|
128
|
+
_rpcServices = new WeakMap();
|
|
129
|
+
_table = new WeakMap();
|
|
130
|
+
|
|
131
|
+
export { TickingArrayDataSource };
|
|
132
|
+
//# sourceMappingURL=TickingArrayDataSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TickingArrayDataSource.js","sources":["../../../../src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport {\n DataSourceRow,\n MenuRpcResponse,\n RpcResponse,\n SelectionItem,\n SubscribeCallback,\n SubscribeProps,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerEditRpc,\n ClientToServerMenuRPC,\n ClientToServerViewportRpcCall,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\n\nexport type RpcService = {\n rpcName: string;\n service: (rpcRequest: any) => Promise<any>;\n};\n\nexport interface TickingArrayDataSourceConstructorProps\n extends Omit<ArrayDataSourceConstructorProps, \"data\"> {\n data?: Array<VuuRowDataItemType[]>;\n menu?: VuuMenu;\n menuRpcServices?: RpcService[];\n rpcServices?: RpcService[];\n table?: Table;\n}\n\nexport class TickingArrayDataSource extends ArrayDataSource {\n #menuRpcServices: RpcService[] | undefined;\n #rpcServices: RpcService[] | undefined;\n #table?: Table;\n\n constructor({\n data,\n menuRpcServices,\n rpcServices,\n table,\n menu,\n ...arrayDataSourceProps\n }: TickingArrayDataSourceConstructorProps) {\n if (data === undefined && table === undefined) {\n throw Error(\"TickingArrayDataSource must be constructed with data\");\n }\n super({\n ...arrayDataSourceProps,\n data: data ?? table?.data ?? [],\n });\n this._menu = menu;\n this.#menuRpcServices = menuRpcServices;\n this.#rpcServices = rpcServices;\n this.#table = table;\n\n if (table) {\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRow);\n }\n }\n\n async subscribe(subscribeProps: SubscribeProps, callback: SubscribeCallback) {\n const subscription = super.subscribe(subscribeProps, callback);\n // if (subscribeProps.range) {\n // this.#updateGenerator?.setRange(subscribeProps.range);\n // }\n return subscription;\n }\n\n set range(range: VuuRange) {\n super.range = range;\n // this.#updateGenerator?.setRange(range);\n }\n get range() {\n return super.range;\n }\n\n private getSelectedRows() {\n return this.selectedRows.reduce<DataSourceRow[]>(\n (rows: DataSourceRow[], selected: SelectionItem) => {\n if (Array.isArray(selected)) {\n selected.forEach((sel) => {\n const row = this.data[sel];\n if (row) {\n rows.push(row);\n }\n });\n } else {\n const row = this.data[selected];\n if (row) {\n rows.push(row);\n }\n }\n return rows;\n },\n []\n );\n }\n\n applyEdit(\n row: DataSourceRow,\n columnName: string,\n value: VuuRowDataItemType\n ): Promise<true> {\n const key = row[metadataKeys.KEY];\n this.#table?.update(key, columnName, value);\n return Promise.resolve(true);\n }\n\n async rpcCall<T extends RpcResponse = RpcResponse>(\n rpcRequest: Omit<ClientToServerViewportRpcCall, \"vpId\">\n ): Promise<T | undefined> {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName ===\n (rpcRequest as ClientToServerViewportRpcCall).rpcName\n );\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n });\n } else {\n console.log(`no implementation for PRC service ${rpcRequest.rpcName}`);\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<ClientToServerMenuRPC, \"vpId\"> | ClientToServerEditRpc\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName === (rpcRequest as ClientToServerMenuRPC).rpcName\n );\n\n if (rpcService) {\n switch (rpcRequest.type) {\n case \"VIEW_PORT_MENUS_SELECT_RPC\": {\n const selectedRows = this.getSelectedRows();\n return rpcService.service({\n ...rpcRequest,\n selectedRows,\n });\n }\n\n default:\n }\n }\n return super.menuRpcCall(rpcRequest);\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n return makeSuggestions(this.#table, column, pattern);\n } else {\n throw Error(\n \"cannot call getTypeaheadSuggestions on TickingDataSOurce if table has not been provided\"\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { random, generateNextBidAsk, nextRandomDouble } from './data-utils.js';
|
|
2
|
+
|
|
3
|
+
const getNewValue = (value) => {
|
|
4
|
+
const multiplier = random(0, 100) / 1e3;
|
|
5
|
+
const direction = random(0, 10) >= 5 ? 1 : -1;
|
|
6
|
+
return value + value * multiplier * direction;
|
|
7
|
+
};
|
|
8
|
+
class BaseUpdateGenerator {
|
|
9
|
+
constructor(tickingColumns) {
|
|
10
|
+
this.updating = false;
|
|
11
|
+
this.update = () => {
|
|
12
|
+
if (this.range && this.table) {
|
|
13
|
+
const data = this.table?.data;
|
|
14
|
+
const { bid, ask, last, ...rest } = this.tickingColumns;
|
|
15
|
+
if (data && data?.length > 0) {
|
|
16
|
+
const maxRange = Math.min(this.range.to, data.length);
|
|
17
|
+
for (let rowIndex = this.range.from; rowIndex < maxRange; rowIndex++) {
|
|
18
|
+
let updateCount = 0;
|
|
19
|
+
const shallUpdateRow = random(0, 10) < 2;
|
|
20
|
+
if (shallUpdateRow) {
|
|
21
|
+
const rowUpdates = this.table.data[rowIndex];
|
|
22
|
+
const row = data[rowIndex];
|
|
23
|
+
if (bid !== void 0 && ask !== void 0) {
|
|
24
|
+
const { [bid]: currentBid, [ask]: currentAsk } = row;
|
|
25
|
+
const [newBid, newAsk] = generateNextBidAsk(
|
|
26
|
+
currentBid,
|
|
27
|
+
currentAsk,
|
|
28
|
+
10,
|
|
29
|
+
5,
|
|
30
|
+
nextRandomDouble
|
|
31
|
+
);
|
|
32
|
+
rowUpdates[ask] = newAsk;
|
|
33
|
+
rowUpdates[bid] = newBid;
|
|
34
|
+
if (last !== void 0) {
|
|
35
|
+
const newLast = Math.round((currentAsk + (newAsk - currentAsk) / 2) * 100) / 100;
|
|
36
|
+
rowUpdates[last] = newLast;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
for (const colIdx of Object.values(rest)) {
|
|
40
|
+
const shallUpdateColumn = random(0, 10) < 5;
|
|
41
|
+
if (shallUpdateColumn) {
|
|
42
|
+
updateCount += 1;
|
|
43
|
+
const newValue = getNewValue(row[colIdx]);
|
|
44
|
+
if (this.table) {
|
|
45
|
+
rowUpdates[colIdx] = newValue;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (this.table && updateCount > 0) {
|
|
50
|
+
this.table.updateRow(rowUpdates);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (this.updating) {
|
|
57
|
+
this.timer = window.setTimeout(this.update, 500);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
this.tickingColumns = tickingColumns;
|
|
61
|
+
}
|
|
62
|
+
setRange(range) {
|
|
63
|
+
this.range = range;
|
|
64
|
+
if (!this.updating && this.table) {
|
|
65
|
+
this.startUpdating();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
setTable(table) {
|
|
69
|
+
this.table = table;
|
|
70
|
+
}
|
|
71
|
+
startUpdating() {
|
|
72
|
+
this.updating = true;
|
|
73
|
+
this.update();
|
|
74
|
+
}
|
|
75
|
+
stopUpdating() {
|
|
76
|
+
this.updating = false;
|
|
77
|
+
if (this.timer) {
|
|
78
|
+
window.clearTimeout(this.timer);
|
|
79
|
+
this.timer = void 0;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export { BaseUpdateGenerator };
|
|
85
|
+
//# sourceMappingURL=UpdateGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpdateGenerator.js","sources":["../../../../src/UpdateGenerator.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { generateNextBidAsk, nextRandomDouble, random } from \"./data-utils\";\nimport type { UpdateGenerator } from \"./rowUpdates\";\nimport { Table } from \"./Table\";\n\nconst getNewValue = (value: number) => {\n const multiplier = random(0, 100) / 1000;\n const direction = random(0, 10) >= 5 ? 1 : -1;\n return value + value * multiplier * direction;\n};\n\nexport class BaseUpdateGenerator implements UpdateGenerator {\n private table: Table | undefined;\n private range: VuuRange | undefined;\n private updating = false;\n private timer: number | undefined;\n private tickingColumns: { [key: string]: number };\n\n constructor(tickingColumns: { [key: string]: number }) {\n this.tickingColumns = tickingColumns;\n }\n\n setRange(range: VuuRange) {\n this.range = range;\n if (!this.updating && this.table) {\n this.startUpdating();\n }\n }\n\n setTable(table: Table) {\n this.table = table;\n }\n\n private startUpdating() {\n this.updating = true;\n this.update();\n }\n\n private stopUpdating() {\n this.updating = false;\n if (this.timer) {\n window.clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n\n update = () => {\n if (this.range && this.table) {\n const data = this.table?.data;\n const { bid, ask, last, ...rest } = this.tickingColumns;\n if (data && data?.length > 0) {\n const maxRange = Math.min(this.range.to, data.length);\n for (let rowIndex = this.range.from; rowIndex < maxRange; rowIndex++) {\n let updateCount = 0;\n const shallUpdateRow = random(0, 10) < 2;\n if (shallUpdateRow) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const rowUpdates = this.table.data[rowIndex];\n const row = data[rowIndex];\n\n if (bid !== undefined && ask !== undefined) {\n const { [bid]: currentBid, [ask]: currentAsk } = row as number[];\n const [newBid, newAsk] = generateNextBidAsk(\n currentBid,\n currentAsk,\n 10,\n 5,\n nextRandomDouble\n );\n rowUpdates[ask] = newAsk;\n rowUpdates[bid] = newBid;\n if (last !== undefined) {\n const newLast =\n Math.round((currentAsk + (newAsk - currentAsk) / 2) * 100) /\n 100.0;\n rowUpdates[last] = newLast;\n }\n }\n\n for (const colIdx of Object.values(rest)) {\n const shallUpdateColumn = random(0, 10) < 5;\n if (shallUpdateColumn) {\n updateCount += 1;\n const newValue = getNewValue(row[colIdx] as number);\n if (this.table) {\n rowUpdates[colIdx] = newValue;\n }\n }\n }\n if (this.table && updateCount > 0) {\n this.table.updateRow(rowUpdates);\n }\n }\n }\n }\n }\n\n if (this.updating) {\n this.timer = window.setTimeout(this.update, 500);\n }\n };\n}\n"],"names":[],"mappings":"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"}
|