@uwdata/mosaic-core 0.17.0 → 0.19.0
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/LICENSE +47 -0
- package/README.md +0 -1
- package/dist/src/Coordinator.d.ts +159 -0
- package/dist/src/Coordinator.d.ts.map +1 -0
- package/dist/src/Coordinator.js +250 -0
- package/dist/src/Coordinator.js.map +1 -0
- package/dist/src/MosaicClient.d.ts +138 -0
- package/dist/src/MosaicClient.d.ts.map +1 -0
- package/dist/src/MosaicClient.js +214 -0
- package/dist/src/MosaicClient.js.map +1 -0
- package/dist/src/Param.d.ts +56 -0
- package/dist/src/Param.d.ts.map +1 -0
- package/dist/src/Param.js +89 -0
- package/dist/src/Param.js.map +1 -0
- package/dist/src/QueryConsolidator.d.ts +11 -0
- package/dist/src/QueryConsolidator.d.ts.map +1 -0
- package/dist/src/QueryConsolidator.js +249 -0
- package/dist/src/QueryConsolidator.js.map +1 -0
- package/dist/src/QueryManager.d.ts +77 -0
- package/dist/src/QueryManager.d.ts.map +1 -0
- package/dist/src/QueryManager.js +174 -0
- package/dist/src/QueryManager.js.map +1 -0
- package/dist/src/Selection.d.ts +222 -0
- package/dist/src/Selection.d.ts.map +1 -0
- package/dist/src/Selection.js +322 -0
- package/dist/src/Selection.js.map +1 -0
- package/dist/src/SelectionClause.d.ts +222 -0
- package/dist/src/SelectionClause.d.ts.map +1 -0
- package/dist/src/SelectionClause.js +168 -0
- package/dist/src/SelectionClause.js.map +1 -0
- package/dist/src/connectors/Connector.d.ts +26 -0
- package/dist/src/connectors/Connector.d.ts.map +1 -0
- package/dist/src/connectors/Connector.js +2 -0
- package/dist/src/connectors/Connector.js.map +1 -0
- package/dist/src/connectors/rest.d.ts +24 -0
- package/dist/src/connectors/rest.d.ts.map +1 -0
- package/dist/src/connectors/rest.js +37 -0
- package/dist/src/connectors/rest.js.map +1 -0
- package/dist/src/connectors/socket.d.ts +40 -0
- package/dist/src/connectors/socket.d.ts.map +1 -0
- package/dist/src/connectors/socket.js +115 -0
- package/dist/src/connectors/socket.js.map +1 -0
- package/dist/src/connectors/wasm.d.ts +56 -0
- package/dist/src/connectors/wasm.d.ts.map +1 -0
- package/dist/src/connectors/wasm.js +116 -0
- package/dist/src/connectors/wasm.js.map +1 -0
- package/dist/src/index.d.ts +28 -0
- package/dist/src/index.d.ts.map +1 -0
- package/{src → dist/src}/index.js +8 -11
- package/dist/src/index.js.map +1 -0
- package/dist/src/make-client.d.ts +33 -0
- package/dist/src/make-client.d.ts.map +1 -0
- package/dist/src/make-client.js +52 -0
- package/dist/src/make-client.js.map +1 -0
- package/dist/src/preagg/PreAggregator.d.ts +150 -0
- package/dist/src/preagg/PreAggregator.d.ts.map +1 -0
- package/dist/src/preagg/PreAggregator.js +382 -0
- package/dist/src/preagg/PreAggregator.js.map +1 -0
- package/dist/src/preagg/preagg-columns.d.ts +16 -0
- package/dist/src/preagg/preagg-columns.d.ts.map +1 -0
- package/dist/src/preagg/preagg-columns.js +95 -0
- package/dist/src/preagg/preagg-columns.js.map +1 -0
- package/dist/src/preagg/sufficient-statistics.d.ts +14 -0
- package/dist/src/preagg/sufficient-statistics.d.ts.map +1 -0
- package/dist/src/preagg/sufficient-statistics.js +446 -0
- package/dist/src/preagg/sufficient-statistics.js.map +1 -0
- package/dist/src/types.d.ts +77 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/util/AsyncDispatch.d.ts +121 -0
- package/dist/src/util/AsyncDispatch.d.ts.map +1 -0
- package/dist/src/util/AsyncDispatch.js +188 -0
- package/dist/src/util/AsyncDispatch.js.map +1 -0
- package/dist/src/util/cache.d.ts +19 -0
- package/dist/src/util/cache.d.ts.map +1 -0
- package/dist/src/util/cache.js +66 -0
- package/dist/src/util/cache.js.map +1 -0
- package/dist/src/util/decode-ipc.d.ts +12 -0
- package/dist/src/util/decode-ipc.d.ts.map +1 -0
- package/{src → dist/src}/util/decode-ipc.js +5 -6
- package/dist/src/util/decode-ipc.js.map +1 -0
- package/dist/src/util/distinct.d.ts +3 -0
- package/dist/src/util/distinct.d.ts.map +1 -0
- package/dist/src/util/distinct.js +16 -0
- package/dist/src/util/distinct.js.map +1 -0
- package/dist/src/util/field-info.d.ts +26 -0
- package/dist/src/util/field-info.d.ts.map +1 -0
- package/dist/src/util/field-info.js +91 -0
- package/dist/src/util/field-info.js.map +1 -0
- package/dist/src/util/hash.d.ts +2 -0
- package/dist/src/util/hash.d.ts.map +1 -0
- package/dist/src/util/hash.js +26 -0
- package/dist/src/util/hash.js.map +1 -0
- package/dist/src/util/is-activatable.d.ts +8 -0
- package/dist/src/util/is-activatable.d.ts.map +1 -0
- package/dist/src/util/is-activatable.js +10 -0
- package/dist/src/util/is-activatable.js.map +1 -0
- package/dist/src/util/is-arrow-table.d.ts +9 -0
- package/dist/src/util/is-arrow-table.d.ts.map +1 -0
- package/dist/src/util/is-arrow-table.js +11 -0
- package/dist/src/util/is-arrow-table.js.map +1 -0
- package/dist/src/util/js-type.d.ts +9 -0
- package/dist/src/util/js-type.d.ts.map +1 -0
- package/dist/src/util/js-type.js +59 -0
- package/dist/src/util/js-type.js.map +1 -0
- package/dist/src/util/priority-queue.d.ts +35 -0
- package/dist/src/util/priority-queue.d.ts.map +1 -0
- package/dist/src/util/priority-queue.js +81 -0
- package/dist/src/util/priority-queue.js.map +1 -0
- package/dist/src/util/query-result.d.ts +47 -0
- package/dist/src/util/query-result.d.ts.map +1 -0
- package/dist/src/util/query-result.js +83 -0
- package/dist/src/util/query-result.js.map +1 -0
- package/dist/src/util/synchronizer.d.ts +36 -0
- package/dist/src/util/synchronizer.d.ts.map +1 -0
- package/dist/src/util/synchronizer.js +52 -0
- package/dist/src/util/synchronizer.js.map +1 -0
- package/dist/src/util/throttle.d.ts +12 -0
- package/dist/src/util/throttle.d.ts.map +1 -0
- package/dist/src/util/throttle.js +51 -0
- package/dist/src/util/throttle.js.map +1 -0
- package/dist/src/util/to-data-columns.d.ts +22 -0
- package/dist/src/util/to-data-columns.d.ts.map +1 -0
- package/dist/src/util/to-data-columns.js +51 -0
- package/dist/src/util/to-data-columns.js.map +1 -0
- package/dist/src/util/void-logger.d.ts +13 -0
- package/dist/src/util/void-logger.d.ts.map +1 -0
- package/dist/src/util/void-logger.js +13 -0
- package/dist/src/util/void-logger.js.map +1 -0
- package/package.json +17 -11
- package/src/Coordinator.ts +396 -0
- package/src/{MosaicClient.js → MosaicClient.ts} +50 -43
- package/src/{Param.js → Param.ts} +29 -28
- package/src/{QueryConsolidator.js → QueryConsolidator.ts} +85 -62
- package/src/{QueryManager.js → QueryManager.ts} +61 -54
- package/src/Selection.ts +391 -0
- package/src/SelectionClause.ts +357 -0
- package/src/connectors/Connector.ts +6 -6
- package/src/connectors/rest.ts +56 -0
- package/src/connectors/{socket.js → socket.ts} +53 -42
- package/src/connectors/{wasm.js → wasm.ts} +52 -63
- package/src/index.ts +42 -0
- package/src/make-client.ts +93 -0
- package/src/preagg/{PreAggregator.js → PreAggregator.ts} +164 -145
- package/src/preagg/{preagg-columns.js → preagg-columns.ts} +27 -24
- package/src/preagg/{sufficient-statistics.js → sufficient-statistics.ts} +160 -110
- package/src/types.ts +24 -9
- package/src/util/{AsyncDispatch.js → AsyncDispatch.ts} +62 -43
- package/src/util/{cache.js → cache.ts} +25 -15
- package/src/util/decode-ipc.ts +15 -0
- package/src/util/{distinct.js → distinct.ts} +3 -3
- package/src/util/{field-info.js → field-info.ts} +30 -31
- package/src/util/{hash.js → hash.ts} +4 -4
- package/src/util/is-activatable.ts +11 -0
- package/src/util/is-arrow-table.ts +12 -0
- package/src/util/{js-type.js → js-type.ts} +7 -5
- package/src/util/{priority-queue.js → priority-queue.ts} +32 -20
- package/src/util/{query-result.js → query-result.ts} +24 -17
- package/src/util/synchronizer.ts +56 -0
- package/src/util/throttle.ts +59 -0
- package/src/util/to-data-columns.ts +65 -0
- package/src/util/void-logger.ts +23 -0
- package/src/Coordinator.js +0 -313
- package/src/Selection.js +0 -380
- package/src/SelectionClause.js +0 -159
- package/src/connectors/rest.js +0 -38
- package/src/index-types.ts +0 -5
- package/src/make-client.js +0 -101
- package/src/util/is-activatable.js +0 -8
- package/src/util/is-arrow-table.js +0 -10
- package/src/util/selection-types.ts +0 -137
- package/src/util/synchronizer.js +0 -47
- package/src/util/throttle.js +0 -54
- package/src/util/to-data-columns.js +0 -60
- package/src/util/void-logger.js +0 -13
- package/tsconfig.json +0 -9
- package/vitest.config.ts +0 -3
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps a SQL data type to its corresponding JavaScript type.
|
|
3
|
+
* @param type The name of a SQL data type
|
|
4
|
+
* @returns The corresponding JavaScript type name
|
|
5
|
+
* @throws Throws an error if the given SQL type name is unsupported or unrecognized.
|
|
6
|
+
*/
|
|
7
|
+
export function jsType(type) {
|
|
8
|
+
switch (type) {
|
|
9
|
+
case 'BIGINT':
|
|
10
|
+
case 'HUGEINT':
|
|
11
|
+
case 'INTEGER':
|
|
12
|
+
case 'SMALLINT':
|
|
13
|
+
case 'TINYINT':
|
|
14
|
+
case 'UBIGINT':
|
|
15
|
+
case 'UINTEGER':
|
|
16
|
+
case 'USMALLINT':
|
|
17
|
+
case 'UTINYINT': // integers
|
|
18
|
+
case 'DOUBLE':
|
|
19
|
+
case 'FLOAT':
|
|
20
|
+
case 'REAL':
|
|
21
|
+
return 'number';
|
|
22
|
+
case 'DATE':
|
|
23
|
+
case 'TIMESTAMP':
|
|
24
|
+
case 'TIMESTAMPTZ':
|
|
25
|
+
case 'TIMESTAMP WITH TIME ZONE':
|
|
26
|
+
case 'TIME':
|
|
27
|
+
case 'TIMESTAMP_NS':
|
|
28
|
+
return 'date';
|
|
29
|
+
case 'BOOLEAN':
|
|
30
|
+
return 'boolean';
|
|
31
|
+
case 'VARCHAR':
|
|
32
|
+
case 'UUID':
|
|
33
|
+
case 'JSON':
|
|
34
|
+
return 'string';
|
|
35
|
+
case 'ARRAY':
|
|
36
|
+
case 'LIST':
|
|
37
|
+
return 'array';
|
|
38
|
+
case 'BLOB':
|
|
39
|
+
case 'STRUCT':
|
|
40
|
+
case 'MAP':
|
|
41
|
+
case 'GEOMETRY':
|
|
42
|
+
return 'object';
|
|
43
|
+
default:
|
|
44
|
+
if (type.startsWith('ENUM')) {
|
|
45
|
+
return 'string';
|
|
46
|
+
}
|
|
47
|
+
else if (type.startsWith('DECIMAL')) {
|
|
48
|
+
return 'number';
|
|
49
|
+
}
|
|
50
|
+
else if (type.startsWith('STRUCT') || type.startsWith('MAP')) {
|
|
51
|
+
return 'object';
|
|
52
|
+
}
|
|
53
|
+
else if (type.endsWith(']')) {
|
|
54
|
+
return 'array';
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`Unsupported type: ${type}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=js-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js-type.js","sourceRoot":"","sources":["../../../src/util/js-type.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC,CAAC,WAAW;QAC5B,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,aAAa,CAAC;QACnB,KAAK,0BAA0B,CAAC;QAChC,KAAK,MAAM,CAAC;QACZ,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,OAAO,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,KAAK,CAAC;QACX,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC;QAClB;YACE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/D,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export declare class PriorityQueue<T = unknown> {
|
|
2
|
+
private queue;
|
|
3
|
+
/**
|
|
4
|
+
* Create a new priority queue instance.
|
|
5
|
+
* @param ranks An integer number of rank-order priority levels.
|
|
6
|
+
*/
|
|
7
|
+
constructor(ranks: number);
|
|
8
|
+
/**
|
|
9
|
+
* Indicate if the queue is empty.
|
|
10
|
+
* @returns true if empty, false otherwise.
|
|
11
|
+
*/
|
|
12
|
+
isEmpty(): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Insert an item into the queue with a given priority rank.
|
|
15
|
+
* @param item The item to add.
|
|
16
|
+
* @param rank The integer priority rank.
|
|
17
|
+
* Priority ranks are integers starting at zero.
|
|
18
|
+
* Lower ranks indicate higher priority.
|
|
19
|
+
*/
|
|
20
|
+
insert(item: T, rank: number): void;
|
|
21
|
+
/**
|
|
22
|
+
* Remove a set of items from the queue, regardless of priority rank.
|
|
23
|
+
* If a provided item is not in the queue it will be ignored.
|
|
24
|
+
* @param test A predicate function to test
|
|
25
|
+
* if an item should be removed (true to drop, false to keep).
|
|
26
|
+
*/
|
|
27
|
+
remove(test: (item: T) => boolean): void;
|
|
28
|
+
/**
|
|
29
|
+
* Remove and return the next highest priority item.
|
|
30
|
+
* @returns The next item in the queue,
|
|
31
|
+
* or undefined if this queue is empty.
|
|
32
|
+
*/
|
|
33
|
+
next(): T | undefined;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=priority-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority-queue.d.ts","sourceRoot":"","sources":["../../../src/util/priority-queue.ts"],"names":[],"mappings":"AAUA,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO;IACpC,OAAO,CAAC,KAAK,CAAY;IAEzB;;;OAGG;gBACS,KAAK,EAAE,MAAM;IAQzB;;;OAGG;IACH,OAAO,IAAI,OAAO;IAIlB;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAcnC;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,IAAI;IAkBxC;;;;OAIG;IACH,IAAI,IAAI,CAAC,GAAG,SAAS;CAYtB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export class PriorityQueue {
|
|
2
|
+
queue;
|
|
3
|
+
/**
|
|
4
|
+
* Create a new priority queue instance.
|
|
5
|
+
* @param ranks An integer number of rank-order priority levels.
|
|
6
|
+
*/
|
|
7
|
+
constructor(ranks) {
|
|
8
|
+
// one list for each integer priority level
|
|
9
|
+
this.queue = Array.from({ length: ranks }, () => ({ head: null, tail: null }));
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Indicate if the queue is empty.
|
|
13
|
+
* @returns true if empty, false otherwise.
|
|
14
|
+
*/
|
|
15
|
+
isEmpty() {
|
|
16
|
+
return this.queue.every(list => !list.head);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Insert an item into the queue with a given priority rank.
|
|
20
|
+
* @param item The item to add.
|
|
21
|
+
* @param rank The integer priority rank.
|
|
22
|
+
* Priority ranks are integers starting at zero.
|
|
23
|
+
* Lower ranks indicate higher priority.
|
|
24
|
+
*/
|
|
25
|
+
insert(item, rank) {
|
|
26
|
+
const list = this.queue[rank];
|
|
27
|
+
if (!list) {
|
|
28
|
+
throw new Error(`Invalid queue priority rank: ${rank}`);
|
|
29
|
+
}
|
|
30
|
+
const node = { item, next: null };
|
|
31
|
+
if (list.head === null) {
|
|
32
|
+
list.head = list.tail = node;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
list.tail = list.tail.next = node;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Remove a set of items from the queue, regardless of priority rank.
|
|
40
|
+
* If a provided item is not in the queue it will be ignored.
|
|
41
|
+
* @param test A predicate function to test
|
|
42
|
+
* if an item should be removed (true to drop, false to keep).
|
|
43
|
+
*/
|
|
44
|
+
remove(test) {
|
|
45
|
+
for (const list of this.queue) {
|
|
46
|
+
let { head, tail } = list;
|
|
47
|
+
for (let prev = null, curr = head; curr; prev = curr, curr = curr.next) {
|
|
48
|
+
if (test(curr.item)) {
|
|
49
|
+
if (curr === head) {
|
|
50
|
+
head = curr.next;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
prev.next = curr.next;
|
|
54
|
+
}
|
|
55
|
+
if (curr === tail)
|
|
56
|
+
tail = prev || head;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
list.head = head;
|
|
60
|
+
list.tail = tail;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Remove and return the next highest priority item.
|
|
65
|
+
* @returns The next item in the queue,
|
|
66
|
+
* or undefined if this queue is empty.
|
|
67
|
+
*/
|
|
68
|
+
next() {
|
|
69
|
+
for (const list of this.queue) {
|
|
70
|
+
const { head } = list;
|
|
71
|
+
if (head !== null) {
|
|
72
|
+
list.head = head.next;
|
|
73
|
+
if (list.tail === head) {
|
|
74
|
+
list.tail = null;
|
|
75
|
+
}
|
|
76
|
+
return head.item;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=priority-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priority-queue.js","sourceRoot":"","sources":["../../../src/util/priority-queue.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,aAAa;IAChB,KAAK,CAAY;IAEzB;;;OAGG;IACH,YAAY,KAAa;QACvB,2CAA2C;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CACrB,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB,GAAY,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAC5C,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAO,EAAE,IAAY;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,GAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,IAA0B;QAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;YAC1B,KAAK,IAAI,IAAI,GAAuB,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3F,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBAClB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBACnB,CAAC;yBAAM,CAAC;wBACN,IAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBACzB,CAAC;oBACD,IAAI,IAAI,KAAK,IAAI;wBAAE,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC;gBACzC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;YACtB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACtB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACnB,CAAC;gBACD,OAAO,IAAI,CAAC,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export declare const QueryState: Readonly<{
|
|
2
|
+
pending: symbol;
|
|
3
|
+
ready: symbol;
|
|
4
|
+
error: symbol;
|
|
5
|
+
done: symbol;
|
|
6
|
+
}>;
|
|
7
|
+
type QueryStateType = typeof QueryState[keyof typeof QueryState];
|
|
8
|
+
/**
|
|
9
|
+
* A query result Promise that can allows external callers
|
|
10
|
+
* to resolve or reject the Promise.
|
|
11
|
+
*/
|
|
12
|
+
export declare class QueryResult<T = unknown> extends Promise<T> {
|
|
13
|
+
private _resolve;
|
|
14
|
+
private _reject;
|
|
15
|
+
private _state;
|
|
16
|
+
private _value;
|
|
17
|
+
/**
|
|
18
|
+
* Create a new query result Promise.
|
|
19
|
+
*/
|
|
20
|
+
constructor();
|
|
21
|
+
/**
|
|
22
|
+
* Resolve the result Promise with a prepared value or the provided value.
|
|
23
|
+
* This method will only succeed if either a value is provided or the promise is ready.
|
|
24
|
+
* @param value The result value.
|
|
25
|
+
* @returns This QueryResult instance.
|
|
26
|
+
*/
|
|
27
|
+
fulfill(value?: T): this;
|
|
28
|
+
/**
|
|
29
|
+
* Prepare to resolve with the provided value.
|
|
30
|
+
* @param value The result value.
|
|
31
|
+
* @returns This QueryResult instance.
|
|
32
|
+
*/
|
|
33
|
+
ready(value: T): this;
|
|
34
|
+
/**
|
|
35
|
+
* Rejects the result Promise with the provided error.
|
|
36
|
+
* @param error The error value.
|
|
37
|
+
* @returns This QueryResult instance.
|
|
38
|
+
*/
|
|
39
|
+
reject(error: unknown): this;
|
|
40
|
+
/**
|
|
41
|
+
* Returns the state of this query result.
|
|
42
|
+
* @returns The current state symbol.
|
|
43
|
+
*/
|
|
44
|
+
get state(): QueryStateType;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=query-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-result.d.ts","sourceRoot":"","sources":["../../../src/util/query-result.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;EAKrB,CAAC;AAEH,KAAK,cAAc,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAEjE;;;GAGG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAE9B;;OAEG;;IAcH;;;;;OAKG;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI;IAiBxB;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAMrB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAM5B;;;OAGG;IACH,IAAI,KAAK,IAAI,cAAc,CAE1B;CACF"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export const QueryState = Object.freeze({
|
|
2
|
+
pending: Symbol('pending'),
|
|
3
|
+
ready: Symbol('ready'),
|
|
4
|
+
error: Symbol('error'),
|
|
5
|
+
done: Symbol('done')
|
|
6
|
+
});
|
|
7
|
+
/**
|
|
8
|
+
* A query result Promise that can allows external callers
|
|
9
|
+
* to resolve or reject the Promise.
|
|
10
|
+
*/
|
|
11
|
+
export class QueryResult extends Promise {
|
|
12
|
+
_resolve;
|
|
13
|
+
_reject;
|
|
14
|
+
_state;
|
|
15
|
+
_value;
|
|
16
|
+
/**
|
|
17
|
+
* Create a new query result Promise.
|
|
18
|
+
*/
|
|
19
|
+
constructor() {
|
|
20
|
+
let resolve;
|
|
21
|
+
let reject;
|
|
22
|
+
super((r, e) => {
|
|
23
|
+
resolve = r;
|
|
24
|
+
reject = e;
|
|
25
|
+
});
|
|
26
|
+
this._resolve = resolve;
|
|
27
|
+
this._reject = reject;
|
|
28
|
+
this._state = QueryState.pending;
|
|
29
|
+
this._value = undefined;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolve the result Promise with a prepared value or the provided value.
|
|
33
|
+
* This method will only succeed if either a value is provided or the promise is ready.
|
|
34
|
+
* @param value The result value.
|
|
35
|
+
* @returns This QueryResult instance.
|
|
36
|
+
*/
|
|
37
|
+
fulfill(value) {
|
|
38
|
+
if (this._value !== undefined) {
|
|
39
|
+
if (value !== undefined) {
|
|
40
|
+
throw Error('Promise is ready and fulfill has a provided value');
|
|
41
|
+
}
|
|
42
|
+
this._resolve(this._value);
|
|
43
|
+
}
|
|
44
|
+
else if (value === undefined) {
|
|
45
|
+
throw Error('Promise is neither ready nor has provided value');
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this._resolve(value);
|
|
49
|
+
}
|
|
50
|
+
this._state = QueryState.done;
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Prepare to resolve with the provided value.
|
|
55
|
+
* @param value The result value.
|
|
56
|
+
* @returns This QueryResult instance.
|
|
57
|
+
*/
|
|
58
|
+
ready(value) {
|
|
59
|
+
this._state = QueryState.ready;
|
|
60
|
+
this._value = value;
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Rejects the result Promise with the provided error.
|
|
65
|
+
* @param error The error value.
|
|
66
|
+
* @returns This QueryResult instance.
|
|
67
|
+
*/
|
|
68
|
+
reject(error) {
|
|
69
|
+
this._state = QueryState.error;
|
|
70
|
+
this._reject(error);
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Returns the state of this query result.
|
|
75
|
+
* @returns The current state symbol.
|
|
76
|
+
*/
|
|
77
|
+
get state() {
|
|
78
|
+
return this._state;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// necessary to make Promise subclass act like a Promise
|
|
82
|
+
QueryResult.prototype.constructor = Promise;
|
|
83
|
+
//# sourceMappingURL=query-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-result.js","sourceRoot":"","sources":["../../../src/util/query-result.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;CACrB,CAAC,CAAC;AAIH;;;GAGG;AACH,MAAM,OAAO,WAAyB,SAAQ,OAAU;IAC9C,QAAQ,CAAuC;IAC/C,OAAO,CAA8B;IACrC,MAAM,CAAiB;IACvB,MAAM,CAAgB;IAE9B;;OAEG;IACH;QACE,IAAI,OAA4C,CAAC;QACjD,IAAI,MAAkC,CAAC;QACvC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,OAAO,GAAG,CAAC,CAAC;YACZ,MAAM,GAAG,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,OAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,MAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,KAAS;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;QAE9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAQ;QACZ,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAc;QACnB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,wDAAwD;AACxD,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synchronizer class to aid synchronization of updates on multiple pending operations.
|
|
3
|
+
*/
|
|
4
|
+
export declare class Synchronizer<T = unknown> {
|
|
5
|
+
private _set;
|
|
6
|
+
private _done;
|
|
7
|
+
private _promise;
|
|
8
|
+
/**
|
|
9
|
+
* Create a new synchronizer instance.
|
|
10
|
+
*/
|
|
11
|
+
constructor();
|
|
12
|
+
/**
|
|
13
|
+
* Mark an item as pending.
|
|
14
|
+
* @param item An item to synchronize on.
|
|
15
|
+
*/
|
|
16
|
+
pending(item: T): void;
|
|
17
|
+
/**
|
|
18
|
+
* Mark a pending item as ready, indicating it is
|
|
19
|
+
* ready for a synchronized update.
|
|
20
|
+
* @param item An item to synchronize on.
|
|
21
|
+
* @returns True if the synchronizer is ready to
|
|
22
|
+
* resolve, false otherwise.
|
|
23
|
+
*/
|
|
24
|
+
ready(item: T): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the current synchronization cycle, causing the synchronize
|
|
27
|
+
* promise to resolve and thereby trigger downstream updates.
|
|
28
|
+
*/
|
|
29
|
+
resolve(): void;
|
|
30
|
+
/**
|
|
31
|
+
* The promise for the current synchronization cycle.
|
|
32
|
+
* @returns The synchronization promise.
|
|
33
|
+
*/
|
|
34
|
+
get promise(): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=synchronizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synchronizer.d.ts","sourceRoot":"","sources":["../../../src/util/synchronizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,YAAY,CAAC,CAAC,GAAG,OAAO;IACnC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;OAEG;;IAOH;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAItB;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAKvB;;;OAGG;IACH,OAAO,IAAI,IAAI;IAOf;;;OAGG;IACH,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synchronizer class to aid synchronization of updates on multiple pending operations.
|
|
3
|
+
*/
|
|
4
|
+
export class Synchronizer {
|
|
5
|
+
_set;
|
|
6
|
+
_done;
|
|
7
|
+
_promise;
|
|
8
|
+
/**
|
|
9
|
+
* Create a new synchronizer instance.
|
|
10
|
+
*/
|
|
11
|
+
constructor() {
|
|
12
|
+
this._set = new Set();
|
|
13
|
+
this._done = () => { };
|
|
14
|
+
this._promise = new Promise(resolve => this._done = resolve);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Mark an item as pending.
|
|
18
|
+
* @param item An item to synchronize on.
|
|
19
|
+
*/
|
|
20
|
+
pending(item) {
|
|
21
|
+
this._set.add(item);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Mark a pending item as ready, indicating it is
|
|
25
|
+
* ready for a synchronized update.
|
|
26
|
+
* @param item An item to synchronize on.
|
|
27
|
+
* @returns True if the synchronizer is ready to
|
|
28
|
+
* resolve, false otherwise.
|
|
29
|
+
*/
|
|
30
|
+
ready(item) {
|
|
31
|
+
this._set.delete(item);
|
|
32
|
+
return this._set.size === 0;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve the current synchronization cycle, causing the synchronize
|
|
36
|
+
* promise to resolve and thereby trigger downstream updates.
|
|
37
|
+
*/
|
|
38
|
+
resolve() {
|
|
39
|
+
this._promise = new Promise(resolve => {
|
|
40
|
+
this._done();
|
|
41
|
+
this._done = resolve;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The promise for the current synchronization cycle.
|
|
46
|
+
* @returns The synchronization promise.
|
|
47
|
+
*/
|
|
48
|
+
get promise() {
|
|
49
|
+
return this._promise;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=synchronizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synchronizer.js","sourceRoot":"","sources":["../../../src/util/synchronizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,IAAI,CAAS;IACb,KAAK,CAAa;IAClB,QAAQ,CAAgB;IAEhC;;OAEG;IACH;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAK,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;IACrE,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,IAAO;QACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,IAAO;QACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Throttle invocations of a callback function. The callback must return
|
|
3
|
+
* a Promise. Upon repeated invocation, the callback will not be invoked
|
|
4
|
+
* until a prior Promise resolves. If multiple invocations occurs while
|
|
5
|
+
* waiting, only the most recent invocation will be pending.
|
|
6
|
+
* @param callback The callback function.
|
|
7
|
+
* @param debounce Flag indicating if invocations
|
|
8
|
+
* should also be debounced within the current animation frame.
|
|
9
|
+
* @returns A new function that throttles access to the callback.
|
|
10
|
+
*/
|
|
11
|
+
export declare function throttle<E, T>(callback: (event?: E) => Promise<T> | null, debounce?: boolean): (event?: E) => void;
|
|
12
|
+
//# sourceMappingURL=throttle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../../src/util/throttle.ts"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAC3B,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,EAC1C,QAAQ,GAAE,OAAe,GACxB,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,CAuCrB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const NIL = {};
|
|
2
|
+
/**
|
|
3
|
+
* Throttle invocations of a callback function. The callback must return
|
|
4
|
+
* a Promise. Upon repeated invocation, the callback will not be invoked
|
|
5
|
+
* until a prior Promise resolves. If multiple invocations occurs while
|
|
6
|
+
* waiting, only the most recent invocation will be pending.
|
|
7
|
+
* @param callback The callback function.
|
|
8
|
+
* @param debounce Flag indicating if invocations
|
|
9
|
+
* should also be debounced within the current animation frame.
|
|
10
|
+
* @returns A new function that throttles access to the callback.
|
|
11
|
+
*/
|
|
12
|
+
export function throttle(callback, debounce = false) {
|
|
13
|
+
let curr;
|
|
14
|
+
let next;
|
|
15
|
+
let pending = NIL;
|
|
16
|
+
function invoke(event) {
|
|
17
|
+
curr = callback(event)
|
|
18
|
+
?.catch(() => { })
|
|
19
|
+
.finally(() => {
|
|
20
|
+
if (next) {
|
|
21
|
+
const { event: value } = next;
|
|
22
|
+
next = null;
|
|
23
|
+
invoke(value);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
curr = null;
|
|
27
|
+
}
|
|
28
|
+
}) || null;
|
|
29
|
+
}
|
|
30
|
+
function enqueue(event) {
|
|
31
|
+
next = { event };
|
|
32
|
+
}
|
|
33
|
+
function process(event) {
|
|
34
|
+
if (curr)
|
|
35
|
+
enqueue(event);
|
|
36
|
+
else
|
|
37
|
+
invoke(event);
|
|
38
|
+
}
|
|
39
|
+
function delay(event) {
|
|
40
|
+
if (pending !== event) {
|
|
41
|
+
requestAnimationFrame(() => {
|
|
42
|
+
const e = pending;
|
|
43
|
+
pending = NIL;
|
|
44
|
+
process(e);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
pending = event;
|
|
48
|
+
}
|
|
49
|
+
return debounce ? delay : process;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=throttle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/util/throttle.ts"],"names":[],"mappings":"AAAA,MAAM,GAAG,GAAG,EAAE,CAAC;AAMf;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CACtB,QAA0C,EAC1C,WAAoB,KAAK;IAEzB,IAAI,IAA6B,CAAC;IAClC,IAAI,IAAqC,CAAC;IAC1C,IAAI,OAAO,GAA+B,GAAG,CAAC;IAE9C,SAAS,MAAM,CAAC,KAAS;QACvB,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;YACpB,EAAE,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;aAChB,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;gBAC9B,IAAI,GAAG,IAAI,CAAC;gBACZ,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,IAAI,IAAI,CAAC;IACf,CAAC;IAED,SAAS,OAAO,CAAC,KAAQ;QACvB,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,SAAS,OAAO,CAAC,KAAS;QACxB,IAAI,IAAI;YAAE,OAAO,CAAC,KAAM,CAAC,CAAC;;YAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,SAAS,KAAK,CAAC,KAAS;QACtB,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,qBAAqB,CAAC,GAAG,EAAE;gBACzB,MAAM,CAAC,GAAG,OAAY,CAAC;gBACvB,OAAO,GAAG,GAAG,CAAC;gBACd,OAAO,CAAC,CAAC,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An Array or TypedArray
|
|
3
|
+
*/
|
|
4
|
+
type Arrayish = Array<unknown> | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array;
|
|
5
|
+
/**
|
|
6
|
+
* Data columns structure with either named columns or values array
|
|
7
|
+
*/
|
|
8
|
+
type DataColumns = {
|
|
9
|
+
numRows: number;
|
|
10
|
+
columns: Record<string, Arrayish>;
|
|
11
|
+
} | {
|
|
12
|
+
numRows: number;
|
|
13
|
+
values: Arrayish;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Convert input data to a set of column arrays.
|
|
17
|
+
* @param data The input data.
|
|
18
|
+
* @returns An object with named column arrays.
|
|
19
|
+
*/
|
|
20
|
+
export declare function toDataColumns(data: unknown): DataColumns;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=to-data-columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-data-columns.d.ts","sourceRoot":"","sources":["../../../src/util/to-data-columns.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,KAAK,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,UAAU,GAAG,iBAAiB,GACvE,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GACnD,YAAY,GAAG,YAAY,CAAC;AAEhC;;GAEG;AACH,KAAK,WAAW,GACZ;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;CAAE,GACtD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAQxD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { isArrowTable } from './is-arrow-table.js';
|
|
2
|
+
/**
|
|
3
|
+
* Convert input data to a set of column arrays.
|
|
4
|
+
* @param data The input data.
|
|
5
|
+
* @returns An object with named column arrays.
|
|
6
|
+
*/
|
|
7
|
+
export function toDataColumns(data) {
|
|
8
|
+
if (isArrowTable(data)) {
|
|
9
|
+
return arrowToColumns(data);
|
|
10
|
+
}
|
|
11
|
+
else if (Array.isArray(data)) {
|
|
12
|
+
return arrayToColumns(data);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
throw new Error('Unrecognized data format.');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Convert an Arrow table to a set of column arrays.
|
|
20
|
+
* @param data An Arrow Table.
|
|
21
|
+
* @returns An object with named column arrays.
|
|
22
|
+
*/
|
|
23
|
+
function arrowToColumns(data) {
|
|
24
|
+
const { numRows } = data;
|
|
25
|
+
return { numRows, columns: data.toColumns() };
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Convert an array of values to a set of column arrays.
|
|
29
|
+
* If the array values are objects, build out named columns.
|
|
30
|
+
* We use the keys of the first object as the column names.
|
|
31
|
+
* Otherwise, use a special "values" array.
|
|
32
|
+
* @param data An array of data objects.
|
|
33
|
+
* @returns An object with named column arrays.
|
|
34
|
+
*/
|
|
35
|
+
function arrayToColumns(data) {
|
|
36
|
+
const numRows = data.length;
|
|
37
|
+
if (typeof data[0] === 'object') {
|
|
38
|
+
const names = numRows ? Object.keys(data[0]) : [];
|
|
39
|
+
const columns = {};
|
|
40
|
+
if (names.length > 0) {
|
|
41
|
+
names.forEach(name => {
|
|
42
|
+
columns[name] = data.map(d => d[name]);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return { numRows, columns };
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
return { numRows, values: data };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=to-data-columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-data-columns.js","sourceRoot":"","sources":["../../../src/util/to-data-columns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAiBnD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,IAAW;IACjC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAA8B,EAAE,CAAC;AAC5E,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,IAA8B;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5B,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,OAAO,GAA8B,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACnB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface Logger {
|
|
2
|
+
debug(...args: unknown[]): void;
|
|
3
|
+
info(...args: unknown[]): void;
|
|
4
|
+
log(...args: unknown[]): void;
|
|
5
|
+
warn(...args: unknown[]): void;
|
|
6
|
+
error(...args: unknown[]): void;
|
|
7
|
+
group(label?: string): void;
|
|
8
|
+
groupCollapsed(label?: string): void;
|
|
9
|
+
groupEnd(): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function voidLogger(): Logger;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=void-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"void-logger.d.ts","sourceRoot":"","sources":["../../../src/util/void-logger.ts"],"names":[],"mappings":"AAAA,UAAU,MAAM;IACd,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,wBAAgB,UAAU,IAAI,MAAM,CAWnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"void-logger.js","sourceRoot":"","sources":["../../../src/util/void-logger.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,UAAU;IACxB,OAAO;QACL,KAAK,KAAU,CAAC;QAChB,IAAI,KAAU,CAAC;QACf,GAAG,KAAU,CAAC;QACd,IAAI,KAAU,CAAC;QACf,KAAK,KAAU,CAAC;QAChB,KAAK,KAAU,CAAC;QAChB,cAAc,KAAU,CAAC;QACzB,QAAQ,KAAU,CAAC;KACpB,CAAC;AACJ,CAAC"}
|