@uwdata/mosaic-core 0.17.0 → 0.18.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 +147 -0
- package/dist/src/Coordinator.d.ts.map +1 -0
- package/dist/src/Coordinator.js +269 -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 +213 -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 +319 -0
- package/dist/src/Selection.js.map +1 -0
- package/dist/src/SelectionClause.d.ts +192 -0
- package/dist/src/SelectionClause.d.ts.map +1 -0
- package/dist/src/SelectionClause.js +126 -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 +53 -0
- package/dist/src/connectors/wasm.d.ts.map +1 -0
- package/dist/src/connectors/wasm.js +113 -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/dist/src/index.js +25 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/make-client.d.ts +35 -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 +16 -10
- package/src/Coordinator.ts +367 -0
- package/src/{MosaicClient.js → MosaicClient.ts} +49 -43
- package/src/{Param.js → Param.ts} +29 -28
- package/src/{QueryConsolidator.js → QueryConsolidator.ts} +81 -58
- package/src/{QueryManager.js → QueryManager.ts} +61 -54
- package/src/Selection.ts +388 -0
- package/src/SelectionClause.ts +275 -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} +46 -62
- package/src/{index.js → index.ts} +13 -1
- 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} +31 -32
- 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,26 @@
|
|
|
1
|
+
import type { Table } from '@uwdata/flechette';
|
|
2
|
+
export interface ConnectorQueryRequest {
|
|
3
|
+
/** The query type. */
|
|
4
|
+
type?: string;
|
|
5
|
+
/** A SQL query string. */
|
|
6
|
+
sql: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ArrowQueryRequest extends ConnectorQueryRequest {
|
|
9
|
+
/** The query type. */
|
|
10
|
+
type?: 'arrow';
|
|
11
|
+
}
|
|
12
|
+
export interface ExecQueryRequest extends ConnectorQueryRequest {
|
|
13
|
+
/** The query type. */
|
|
14
|
+
type: 'exec';
|
|
15
|
+
}
|
|
16
|
+
export interface JSONQueryRequest extends ConnectorQueryRequest {
|
|
17
|
+
/** The query type. */
|
|
18
|
+
type: 'json';
|
|
19
|
+
}
|
|
20
|
+
export interface Connector {
|
|
21
|
+
/** Issue a query and return the result. */
|
|
22
|
+
query(query: ArrowQueryRequest): Promise<Table>;
|
|
23
|
+
query(query: ExecQueryRequest): Promise<void>;
|
|
24
|
+
query(query: JSONQueryRequest): Promise<Record<string, unknown>[]>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=Connector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connector.d.ts","sourceRoot":"","sources":["../../../src/connectors/Connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,WAAW,qBAAqB;IACpC,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB;IAC9D,sBAAsB;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,2CAA2C;IAC3C,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;CACpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connector.js","sourceRoot":"","sources":["../../../src/connectors/Connector.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ExtractionOptions, Table } from '@uwdata/flechette';
|
|
2
|
+
import type { ArrowQueryRequest, Connector, ExecQueryRequest, JSONQueryRequest } from './Connector.js';
|
|
3
|
+
interface RestOptions {
|
|
4
|
+
uri?: string;
|
|
5
|
+
ipc?: ExtractionOptions;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Connect to a DuckDB server over an HTTP REST interface.
|
|
9
|
+
* @param options Connector options.
|
|
10
|
+
* @param options.uri The URI for the DuckDB REST server.
|
|
11
|
+
* @param options.ipc Arrow IPC extraction options.
|
|
12
|
+
* @returns A connector instance.
|
|
13
|
+
*/
|
|
14
|
+
export declare function restConnector(options?: RestOptions): RestConnector;
|
|
15
|
+
export declare class RestConnector implements Connector {
|
|
16
|
+
private _uri;
|
|
17
|
+
private _ipc?;
|
|
18
|
+
constructor({ uri, ipc }?: RestOptions);
|
|
19
|
+
query(query: ArrowQueryRequest): Promise<Table>;
|
|
20
|
+
query(query: ExecQueryRequest): Promise<void>;
|
|
21
|
+
query(query: JSONQueryRequest): Promise<Record<string, unknown>[]>;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=rest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../../../src/connectors/rest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAyB,MAAM,gBAAgB,CAAC;AAG9H,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,iBAAiB,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,WAAW,iBAElD;AAED,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAC,CAAoB;gBAErB,EACV,GAA8B,EAC9B,GAAe,EAChB,GAAE,WAAgB;IAKb,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/C,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7C,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAqBzE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { decodeIPC } from '../util/decode-ipc.js';
|
|
2
|
+
/**
|
|
3
|
+
* Connect to a DuckDB server over an HTTP REST interface.
|
|
4
|
+
* @param options Connector options.
|
|
5
|
+
* @param options.uri The URI for the DuckDB REST server.
|
|
6
|
+
* @param options.ipc Arrow IPC extraction options.
|
|
7
|
+
* @returns A connector instance.
|
|
8
|
+
*/
|
|
9
|
+
export function restConnector(options) {
|
|
10
|
+
return new RestConnector(options);
|
|
11
|
+
}
|
|
12
|
+
export class RestConnector {
|
|
13
|
+
_uri;
|
|
14
|
+
_ipc;
|
|
15
|
+
constructor({ uri = 'http://localhost:3000/', ipc = undefined } = {}) {
|
|
16
|
+
this._uri = uri;
|
|
17
|
+
this._ipc = ipc;
|
|
18
|
+
}
|
|
19
|
+
async query(query) {
|
|
20
|
+
const req = fetch(this._uri, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
mode: 'cors',
|
|
23
|
+
cache: 'no-cache',
|
|
24
|
+
credentials: 'omit',
|
|
25
|
+
headers: { 'Content-Type': 'application/json' },
|
|
26
|
+
body: JSON.stringify(query)
|
|
27
|
+
});
|
|
28
|
+
const res = await req;
|
|
29
|
+
if (!res.ok) {
|
|
30
|
+
throw new Error(`Query failed with HTTP status ${res.status}: ${await res.text()}`);
|
|
31
|
+
}
|
|
32
|
+
return query.type === 'exec' ? req
|
|
33
|
+
: query.type === 'arrow' ? decodeIPC(await res.arrayBuffer(), this._ipc)
|
|
34
|
+
: res.json();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=rest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../src/connectors/rest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAOlD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,OAAqB;IACjD,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,aAAa;IAChB,IAAI,CAAS;IACb,IAAI,CAAqB;IAEjC,YAAY,EACV,GAAG,GAAG,wBAAwB,EAC9B,GAAG,GAAG,SAAS,KACA,EAAE;QACjB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAKD,KAAK,CAAC,KAAK,CAAC,KAA4B;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC;QAEtB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG;YAChC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;gBACxE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ExtractionOptions, Table } from '@uwdata/flechette';
|
|
2
|
+
import type { ArrowQueryRequest, Connector, ExecQueryRequest, JSONQueryRequest, ConnectorQueryRequest } from './Connector.js';
|
|
3
|
+
interface SocketOptions {
|
|
4
|
+
uri?: string;
|
|
5
|
+
ipc?: ExtractionOptions;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Connect to a DuckDB server over a WebSocket interface.
|
|
9
|
+
* @param options Connector options.
|
|
10
|
+
* @param options.uri The URI for the DuckDB REST server.
|
|
11
|
+
* @param options.ipc Arrow IPC extraction options.
|
|
12
|
+
* @returns A connector instance.
|
|
13
|
+
*/
|
|
14
|
+
export declare function socketConnector(options?: SocketOptions): SocketConnector;
|
|
15
|
+
/**
|
|
16
|
+
* DuckDB socket connector.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SocketConnector implements Connector {
|
|
19
|
+
private _uri;
|
|
20
|
+
private _queue;
|
|
21
|
+
private _connected;
|
|
22
|
+
private _request;
|
|
23
|
+
private _ws;
|
|
24
|
+
private _events;
|
|
25
|
+
/**
|
|
26
|
+
* @param options Connector options.
|
|
27
|
+
* @param options.uri The URI for the DuckDB REST server.
|
|
28
|
+
* @param options.ipc Arrow IPC extraction options.
|
|
29
|
+
*/
|
|
30
|
+
constructor({ uri, ipc, }?: SocketOptions);
|
|
31
|
+
get connected(): boolean;
|
|
32
|
+
init(): void;
|
|
33
|
+
enqueue(query: ConnectorQueryRequest, resolve: (value?: unknown) => void, reject: (reason?: unknown) => void): void;
|
|
34
|
+
next(): void;
|
|
35
|
+
query(query: ArrowQueryRequest): Promise<Table>;
|
|
36
|
+
query(query: ExecQueryRequest): Promise<void>;
|
|
37
|
+
query(query: JSONQueryRequest): Promise<Record<string, unknown>[]>;
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../../src/connectors/socket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAG9H,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,iBAAiB,CAAC;CACzB;AAQD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,aAAa,mBAEtD;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,GAAG,CAAmB;IAC9B,OAAO,CAAC,OAAO,CAA4C;IAE3D;;;;OAIG;gBACS,EACV,GAA4B,EAC5B,GAAe,GAChB,GAAE,aAAkB;IA+DrB,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,IAAI,IAAI;IAQZ,OAAO,CACL,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,EAClC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,GACjC,IAAI;IAMP,IAAI,IAAI,IAAI;IAOZ,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/C,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7C,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAMnE"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { decodeIPC } from '../util/decode-ipc.js';
|
|
2
|
+
/**
|
|
3
|
+
* Connect to a DuckDB server over a WebSocket interface.
|
|
4
|
+
* @param options Connector options.
|
|
5
|
+
* @param options.uri The URI for the DuckDB REST server.
|
|
6
|
+
* @param options.ipc Arrow IPC extraction options.
|
|
7
|
+
* @returns A connector instance.
|
|
8
|
+
*/
|
|
9
|
+
export function socketConnector(options) {
|
|
10
|
+
return new SocketConnector(options);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* DuckDB socket connector.
|
|
14
|
+
*/
|
|
15
|
+
export class SocketConnector {
|
|
16
|
+
_uri;
|
|
17
|
+
_queue;
|
|
18
|
+
_connected;
|
|
19
|
+
_request;
|
|
20
|
+
_ws;
|
|
21
|
+
_events;
|
|
22
|
+
/**
|
|
23
|
+
* @param options Connector options.
|
|
24
|
+
* @param options.uri The URI for the DuckDB REST server.
|
|
25
|
+
* @param options.ipc Arrow IPC extraction options.
|
|
26
|
+
*/
|
|
27
|
+
constructor({ uri = 'ws://localhost:3000/', ipc = undefined, } = {}) {
|
|
28
|
+
this._uri = uri;
|
|
29
|
+
this._queue = [];
|
|
30
|
+
this._connected = false;
|
|
31
|
+
this._request = null;
|
|
32
|
+
this._ws = null;
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
34
|
+
const c = this;
|
|
35
|
+
this._events = {
|
|
36
|
+
open() {
|
|
37
|
+
c._connected = true;
|
|
38
|
+
c.next();
|
|
39
|
+
},
|
|
40
|
+
close() {
|
|
41
|
+
c._connected = false;
|
|
42
|
+
c._request = null;
|
|
43
|
+
c._ws = null;
|
|
44
|
+
while (c._queue.length) {
|
|
45
|
+
c._queue.shift().reject('Socket closed');
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
error(event) {
|
|
49
|
+
if (c._request) {
|
|
50
|
+
const { reject } = c._request;
|
|
51
|
+
c._request = null;
|
|
52
|
+
c.next();
|
|
53
|
+
reject(event);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.error('WebSocket error: ', event);
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
message(msg) {
|
|
60
|
+
const { data } = msg;
|
|
61
|
+
if (c._request) {
|
|
62
|
+
const { query, resolve, reject } = c._request;
|
|
63
|
+
// clear state, start next request
|
|
64
|
+
c._request = null;
|
|
65
|
+
c.next();
|
|
66
|
+
// process result
|
|
67
|
+
if (typeof data === 'string') {
|
|
68
|
+
const json = JSON.parse(data);
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
70
|
+
json.error ? reject(json.error) : resolve(json);
|
|
71
|
+
}
|
|
72
|
+
else if (query.type === 'exec') {
|
|
73
|
+
resolve();
|
|
74
|
+
}
|
|
75
|
+
else if (query.type === 'arrow') {
|
|
76
|
+
resolve(decodeIPC(data, ipc));
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
throw new Error(`Unexpected socket data: ${data}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.log('WebSocket message: ', data);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
get connected() {
|
|
89
|
+
return this._connected;
|
|
90
|
+
}
|
|
91
|
+
init() {
|
|
92
|
+
this._ws = new WebSocket(this._uri);
|
|
93
|
+
this._ws.binaryType = 'arraybuffer';
|
|
94
|
+
for (const type in this._events) {
|
|
95
|
+
this._ws.addEventListener(type, this._events[type]);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
enqueue(query, resolve, reject) {
|
|
99
|
+
if (this._ws == null)
|
|
100
|
+
this.init();
|
|
101
|
+
this._queue.push({ query, resolve, reject });
|
|
102
|
+
if (this._connected && !this._request)
|
|
103
|
+
this.next();
|
|
104
|
+
}
|
|
105
|
+
next() {
|
|
106
|
+
if (this._queue.length) {
|
|
107
|
+
this._request = this._queue.shift();
|
|
108
|
+
this._ws.send(JSON.stringify(this._request.query));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
query(query) {
|
|
112
|
+
return new Promise((resolve, reject) => this.enqueue(query, resolve, reject));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../src/connectors/socket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ExtractionOptions, Table } from '@uwdata/flechette';
|
|
2
|
+
import type { ArrowQueryRequest, Connector, ExecQueryRequest, JSONQueryRequest } from './Connector.js';
|
|
3
|
+
import * as duckdb from '@duckdb/duckdb-wasm';
|
|
4
|
+
interface DuckDBWASMOptions {
|
|
5
|
+
/** Flag to enable logging. */
|
|
6
|
+
log?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface DuckDBWASMConnectorOptions extends DuckDBWASMOptions {
|
|
9
|
+
/** Arrow IPC extraction options. */
|
|
10
|
+
ipc?: ExtractionOptions;
|
|
11
|
+
/** Optional pre-existing DuckDB-WASM instance. */
|
|
12
|
+
duckdb?: duckdb.AsyncDuckDB;
|
|
13
|
+
/** Optional pre-existing DuckDB-WASM connection. */
|
|
14
|
+
connection?: duckdb.AsyncDuckDBConnection;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Connect to a DuckDB-WASM instance.
|
|
18
|
+
* @param options Connector options.
|
|
19
|
+
* @returns A connector instance.
|
|
20
|
+
*/
|
|
21
|
+
export declare function wasmConnector(options?: DuckDBWASMConnectorOptions): DuckDBWASMConnector;
|
|
22
|
+
/**
|
|
23
|
+
* DuckDB-WASM connector.
|
|
24
|
+
*/
|
|
25
|
+
export declare class DuckDBWASMConnector implements Connector {
|
|
26
|
+
private _ipc?;
|
|
27
|
+
_options: DuckDBWASMOptions;
|
|
28
|
+
_db?: duckdb.AsyncDuckDB;
|
|
29
|
+
_con?: duckdb.AsyncDuckDBConnection;
|
|
30
|
+
_loadPromise?: Promise<unknown>;
|
|
31
|
+
/**
|
|
32
|
+
* Create a new DuckDB-WASM connector instance.
|
|
33
|
+
* @param options Connector options.
|
|
34
|
+
*/
|
|
35
|
+
constructor(options?: DuckDBWASMConnectorOptions);
|
|
36
|
+
/**
|
|
37
|
+
* Get the backing DuckDB-WASM instance.
|
|
38
|
+
* Lazily initializes DuckDB-WASM if not already loaded.
|
|
39
|
+
* @returns The DuckDB-WASM instance.
|
|
40
|
+
*/
|
|
41
|
+
getDuckDB(): Promise<duckdb.AsyncDuckDB>;
|
|
42
|
+
/**
|
|
43
|
+
* Get the backing DuckDB-WASM connection.
|
|
44
|
+
* Lazily initializes DuckDB-WASM if not already loaded.
|
|
45
|
+
* @returns The DuckDB-WASM connection.
|
|
46
|
+
*/
|
|
47
|
+
getConnection(): Promise<duckdb.AsyncDuckDBConnection>;
|
|
48
|
+
query(query: ArrowQueryRequest): Promise<Table>;
|
|
49
|
+
query(query: ExecQueryRequest): Promise<void>;
|
|
50
|
+
query(query: JSONQueryRequest): Promise<Record<string, unknown>[]>;
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=wasm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../../src/connectors/wasm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAyB,MAAM,gBAAgB,CAAC;AAC9H,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAG9C,UAAU,iBAAiB;IACzB,8BAA8B;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,UAAU,0BAA2B,SAAQ,iBAAiB;IAC5D,oCAAoC;IACpC,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC,qBAAqB,CAAC;CAC3C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,0BAA+B,GAAG,mBAAmB,CAE3F;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,SAAS;IACnD,OAAO,CAAC,IAAI,CAAC,CAAoB;IAC1B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,qBAAqB,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvC;;;OAGG;gBACS,OAAO,GAAE,0BAA+B;IAQpD;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;IAK9C;;;;OAIG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAKtD,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/C,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7C,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CASzE"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import * as duckdb from '@duckdb/duckdb-wasm';
|
|
2
|
+
import { decodeIPC } from '../util/decode-ipc.js';
|
|
3
|
+
/**
|
|
4
|
+
* Connect to a DuckDB-WASM instance.
|
|
5
|
+
* @param options Connector options.
|
|
6
|
+
* @returns A connector instance.
|
|
7
|
+
*/
|
|
8
|
+
export function wasmConnector(options = {}) {
|
|
9
|
+
return new DuckDBWASMConnector(options);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* DuckDB-WASM connector.
|
|
13
|
+
*/
|
|
14
|
+
export class DuckDBWASMConnector {
|
|
15
|
+
_ipc;
|
|
16
|
+
_options;
|
|
17
|
+
_db;
|
|
18
|
+
_con;
|
|
19
|
+
_loadPromise;
|
|
20
|
+
/**
|
|
21
|
+
* Create a new DuckDB-WASM connector instance.
|
|
22
|
+
* @param options Connector options.
|
|
23
|
+
*/
|
|
24
|
+
constructor(options = {}) {
|
|
25
|
+
const { ipc, duckdb, connection, ...opts } = options;
|
|
26
|
+
this._ipc = ipc;
|
|
27
|
+
this._options = opts;
|
|
28
|
+
this._db = duckdb;
|
|
29
|
+
this._con = connection;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the backing DuckDB-WASM instance.
|
|
33
|
+
* Lazily initializes DuckDB-WASM if not already loaded.
|
|
34
|
+
* @returns The DuckDB-WASM instance.
|
|
35
|
+
*/
|
|
36
|
+
async getDuckDB() {
|
|
37
|
+
if (!this._db)
|
|
38
|
+
await connect(this);
|
|
39
|
+
return this._db;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get the backing DuckDB-WASM connection.
|
|
43
|
+
* Lazily initializes DuckDB-WASM if not already loaded.
|
|
44
|
+
* @returns The DuckDB-WASM connection.
|
|
45
|
+
*/
|
|
46
|
+
async getConnection() {
|
|
47
|
+
if (!this._con)
|
|
48
|
+
await connect(this);
|
|
49
|
+
return this._con;
|
|
50
|
+
}
|
|
51
|
+
async query(query) {
|
|
52
|
+
const { type, sql } = query;
|
|
53
|
+
const con = await this.getConnection();
|
|
54
|
+
const result = await getArrowIPC(con, sql);
|
|
55
|
+
return type === 'exec' ? undefined
|
|
56
|
+
: type === 'arrow' ? decodeIPC(result, this._ipc)
|
|
57
|
+
: decodeIPC(result).toArray();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Bypass duckdb-wasm query method to get Arrow IPC bytes directly.
|
|
62
|
+
* https://github.com/duckdb/duckdb-wasm/issues/267#issuecomment-2252749509
|
|
63
|
+
* @param con The DuckDB-WASM connection.
|
|
64
|
+
* @param query The SQL query to run.
|
|
65
|
+
*/
|
|
66
|
+
function getArrowIPC(con, query) {
|
|
67
|
+
return new Promise((resolve, reject) => {
|
|
68
|
+
con.useUnsafe(async (bindings, conn) => {
|
|
69
|
+
try {
|
|
70
|
+
const buffer = await bindings.runQuery(conn, query);
|
|
71
|
+
resolve(buffer);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
reject(error);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Establish a new database connection for the given connector.
|
|
81
|
+
* @param c The connector.
|
|
82
|
+
* @returns Connection promise.
|
|
83
|
+
*/
|
|
84
|
+
function connect(c) {
|
|
85
|
+
if (!c._loadPromise) {
|
|
86
|
+
// use a loading promise to avoid race conditions
|
|
87
|
+
// synchronizes multiple callees on the same load
|
|
88
|
+
c._loadPromise = (c._db
|
|
89
|
+
? Promise.resolve(c._db)
|
|
90
|
+
: initDatabase(c._options).then(result => c._db = result))
|
|
91
|
+
.then(db => db.connect())
|
|
92
|
+
.then(result => c._con = result);
|
|
93
|
+
}
|
|
94
|
+
return c._loadPromise;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Initialize a new DuckDB-WASM instance.
|
|
98
|
+
* @param options Database initialization options.
|
|
99
|
+
*/
|
|
100
|
+
async function initDatabase({ log = false } = {}) {
|
|
101
|
+
const JSDELIVR_BUNDLES = duckdb.getJsDelivrBundles();
|
|
102
|
+
// Select a bundle based on browser checks
|
|
103
|
+
const bundle = await duckdb.selectBundle(JSDELIVR_BUNDLES);
|
|
104
|
+
const worker_url = URL.createObjectURL(new Blob([`importScripts("${bundle.mainWorker}");`], { type: 'text/javascript' }));
|
|
105
|
+
// Instantiate the asynchronus version of DuckDB-wasm
|
|
106
|
+
const worker = new Worker(worker_url);
|
|
107
|
+
const logger = log ? new duckdb.ConsoleLogger() : new duckdb.VoidLogger();
|
|
108
|
+
const db = new duckdb.AsyncDuckDB(logger, worker);
|
|
109
|
+
await db.instantiate(bundle.mainModule, bundle.pthreadWorker);
|
|
110
|
+
URL.revokeObjectURL(worker_url);
|
|
111
|
+
return db;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=wasm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../../src/connectors/wasm.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAgBlD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,UAAsC,EAAE;IACpE,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACtB,IAAI,CAAqB;IAC1B,QAAQ,CAAoB;IAC5B,GAAG,CAAsB;IACzB,IAAI,CAAgC;IACpC,YAAY,CAAoB;IAEvC;;;OAGG;IACH,YAAY,UAAsC,EAAE;QAClD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QACrD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC,GAAI,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,IAAK,CAAC;IACpB,CAAC;IAKD,KAAK,CAAC,KAAK,CAAC,KAA4B;QACtC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3C,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS;YAChC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;gBACjD,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;CACF;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,GAAiC,EAAE,KAAa;IACnE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACpD,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,OAAO,CAAC,CAAsB;IACrC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;QACpB,iDAAiD;QACjD,iDAAiD;QACjD,CAAC,CAAC,YAAY,GAAG,CACf,CAAC,CAAC,GAAG;YACH,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YACxB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;aAC3D,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;aACxB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,CAAC,YAAY,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,YAAY,CAAC,EAC1B,GAAG,GAAG,KAAK,KACU,EAAE;IACvB,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IAErD,0CAA0C;IAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAE3D,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,CACpC,IAAI,IAAI,CAAC,CAAC,kBAAkB,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,EAAC,IAAI,EAAE,iBAAiB,EAAC,CAAC,CAChF,CAAC;IAEF,qDAAqD;IACrD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1E,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC9D,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAEhC,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { MosaicClient } from './MosaicClient.js';
|
|
2
|
+
export { makeClient } from './make-client.js';
|
|
3
|
+
export { Coordinator, coordinator } from './Coordinator.js';
|
|
4
|
+
export { Selection, isSelection } from './Selection.js';
|
|
5
|
+
export { Param, isParam } from './Param.js';
|
|
6
|
+
export { Priority } from './QueryManager.js';
|
|
7
|
+
export { restConnector } from './connectors/rest.js';
|
|
8
|
+
export { socketConnector } from './connectors/socket.js';
|
|
9
|
+
export { wasmConnector } from './connectors/wasm.js';
|
|
10
|
+
export { RestConnector } from './connectors/rest.js';
|
|
11
|
+
export { SocketConnector } from './connectors/socket.js';
|
|
12
|
+
export { DuckDBWASMConnector } from './connectors/wasm.js';
|
|
13
|
+
export { clauseInterval, clauseIntervals, clausePoint, clausePoints, clauseMatch } from './SelectionClause.js';
|
|
14
|
+
export { decodeIPC } from './util/decode-ipc.js';
|
|
15
|
+
export { distinct } from './util/distinct.js';
|
|
16
|
+
export { isArrowTable } from './util/is-arrow-table.js';
|
|
17
|
+
export { Synchronizer } from './util/synchronizer.js';
|
|
18
|
+
export { throttle } from './util/throttle.js';
|
|
19
|
+
export { toDataColumns } from './util/to-data-columns.js';
|
|
20
|
+
export { queryFieldInfo } from './util/field-info.js';
|
|
21
|
+
export { jsType } from './util/js-type.js';
|
|
22
|
+
export { isActivatable } from './util/is-activatable.js';
|
|
23
|
+
export type { QueryResult } from './util/query-result.js';
|
|
24
|
+
export * from './types.js';
|
|
25
|
+
export type * from './connectors/Connector.js';
|
|
26
|
+
export type * from './Selection.js';
|
|
27
|
+
export type * from './SelectionClause.js';
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EACL,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,cAAc,YAAY,CAAC;AAE3B,mBAAmB,2BAA2B,CAAC;AAC/C,mBAAmB,gBAAgB,CAAC;AACpC,mBAAmB,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export { MosaicClient } from './MosaicClient.js';
|
|
2
|
+
export { makeClient } from './make-client.js';
|
|
3
|
+
export { Coordinator, coordinator } from './Coordinator.js';
|
|
4
|
+
export { Selection, isSelection } from './Selection.js';
|
|
5
|
+
export { Param, isParam } from './Param.js';
|
|
6
|
+
export { Priority } from './QueryManager.js';
|
|
7
|
+
// deprecated in favor of constructors
|
|
8
|
+
export { restConnector } from './connectors/rest.js';
|
|
9
|
+
export { socketConnector } from './connectors/socket.js';
|
|
10
|
+
export { wasmConnector } from './connectors/wasm.js';
|
|
11
|
+
export { RestConnector } from './connectors/rest.js';
|
|
12
|
+
export { SocketConnector } from './connectors/socket.js';
|
|
13
|
+
export { DuckDBWASMConnector } from './connectors/wasm.js';
|
|
14
|
+
export { clauseInterval, clauseIntervals, clausePoint, clausePoints, clauseMatch } from './SelectionClause.js';
|
|
15
|
+
export { decodeIPC } from './util/decode-ipc.js';
|
|
16
|
+
export { distinct } from './util/distinct.js';
|
|
17
|
+
export { isArrowTable } from './util/is-arrow-table.js';
|
|
18
|
+
export { Synchronizer } from './util/synchronizer.js';
|
|
19
|
+
export { throttle } from './util/throttle.js';
|
|
20
|
+
export { toDataColumns } from './util/to-data-columns.js';
|
|
21
|
+
export { queryFieldInfo } from './util/field-info.js';
|
|
22
|
+
export { jsType } from './util/js-type.js';
|
|
23
|
+
export { isActivatable } from './util/is-activatable.js';
|
|
24
|
+
export * from './types.js';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EACL,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Coordinator } from './Coordinator.js';
|
|
2
|
+
import type { Selection } from './Selection.js';
|
|
3
|
+
import type { FilterExpr } from '@uwdata/mosaic-sql';
|
|
4
|
+
import { type ClientQuery, MosaicClient } from './MosaicClient.js';
|
|
5
|
+
export interface MakeClientOptions {
|
|
6
|
+
/** Mosaic coordinator. Defaults to the global coordinator. */
|
|
7
|
+
coordinator?: Coordinator;
|
|
8
|
+
/** A selection whose predicates are fed into the query function to produce the SQL query. */
|
|
9
|
+
selection?: Selection;
|
|
10
|
+
/** A flag (default `true`) indicating if the client should initially be enabled or not. */
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
/** A flag (default `true`) indicating if client queries can be sped up using pre-aggregated data.
|
|
13
|
+
* Should be set to `false` if filtering changes the groupby domain of the query. */
|
|
14
|
+
filterStable?: boolean;
|
|
15
|
+
/** An async function to prepare the client before running queries. */
|
|
16
|
+
prepare?: () => Promise<void>;
|
|
17
|
+
/** A function that returns a query from a list of selection predicates. */
|
|
18
|
+
query?: (filter: FilterExpr) => ClientQuery;
|
|
19
|
+
/** Called by the coordinator to return a query result. */
|
|
20
|
+
queryResult?: (data: unknown) => void;
|
|
21
|
+
/** Called by the coordinator to inform the client that a query is pending. */
|
|
22
|
+
queryPending?: () => void;
|
|
23
|
+
/** Called by the coordinator to report a query execution error. */
|
|
24
|
+
queryError?: (error: Error) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Make a new client with the given options, and connect the client to the
|
|
28
|
+
* provided coordinator.
|
|
29
|
+
* @param options The options for making the client.
|
|
30
|
+
* @returns The resulting client, along with a method to destroy the client when no longer needed.
|
|
31
|
+
*/
|
|
32
|
+
export declare function makeClient(options: MakeClientOptions): MosaicClient & {
|
|
33
|
+
destroy: () => void;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=make-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-client.d.ts","sourceRoot":"","sources":["../../src/make-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGnE,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,6FAA6F;IAC7F,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;wFACoF;IACpF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,2EAA2E;IAC3E,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,WAAW,CAAC;IAC5C,0DAA0D;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,mEAAmE;IACnE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAQ7F"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { MosaicClient } from './MosaicClient.js';
|
|
2
|
+
import { coordinator as defaultCoordinator } from './Coordinator.js';
|
|
3
|
+
/**
|
|
4
|
+
* Make a new client with the given options, and connect the client to the
|
|
5
|
+
* provided coordinator.
|
|
6
|
+
* @param options The options for making the client.
|
|
7
|
+
* @returns The resulting client, along with a method to destroy the client when no longer needed.
|
|
8
|
+
*/
|
|
9
|
+
export function makeClient(options) {
|
|
10
|
+
const { coordinator = defaultCoordinator(), ...clientOptions } = options;
|
|
11
|
+
const client = new ProxyClient(clientOptions);
|
|
12
|
+
coordinator.connect(client);
|
|
13
|
+
return client;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* An internal class used to implement the makeClient API.
|
|
17
|
+
*/
|
|
18
|
+
class ProxyClient extends MosaicClient {
|
|
19
|
+
_methods;
|
|
20
|
+
_filterStable;
|
|
21
|
+
/**
|
|
22
|
+
* @param options The options for making the client.
|
|
23
|
+
*/
|
|
24
|
+
constructor({ selection = undefined, enabled = true, filterStable = true, ...methods }) {
|
|
25
|
+
super(selection);
|
|
26
|
+
this.enabled = enabled;
|
|
27
|
+
this._methods = methods;
|
|
28
|
+
this._filterStable = filterStable;
|
|
29
|
+
}
|
|
30
|
+
get filterStable() {
|
|
31
|
+
return this._filterStable;
|
|
32
|
+
}
|
|
33
|
+
async prepare() {
|
|
34
|
+
await this._methods.prepare?.();
|
|
35
|
+
}
|
|
36
|
+
query(filter) {
|
|
37
|
+
return this._methods.query?.(filter) ?? null;
|
|
38
|
+
}
|
|
39
|
+
queryResult(data) {
|
|
40
|
+
this._methods.queryResult?.(data);
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
queryPending() {
|
|
44
|
+
this._methods.queryPending?.();
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
queryError(error) {
|
|
48
|
+
this._methods.queryError?.(error);
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=make-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-client.js","sourceRoot":"","sources":["../../src/make-client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAwBrE;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,OAA0B;IACnD,MAAM,EACJ,WAAW,GAAG,kBAAkB,EAAE,EAClC,GAAG,aAAa,EACjB,GAAG,OAAO,CAAC;IACZ,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,aAAa,CAAC,CAAC;IAC9C,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,WAAY,SAAQ,YAAY;IACnB,QAAQ,CAAoF;IAC5F,aAAa,CAAU;IAExC;;OAEG;IACH,YAAY,EACV,SAAS,GAAG,SAAS,EACrB,OAAO,GAAG,IAAI,EACd,YAAY,GAAG,IAAI,EACnB,GAAG,OAAO,EAC6B;QACvC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,MAAkB;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,WAAW,CAAC,IAAa;QACvB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,KAAY;QACrB,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|