@duckdb/duckdb-wasm 1.10.0 → 1.11.1-dev.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/README.md +94 -47
- package/dist/duckdb-browser-blocking.cjs +25 -0
- package/dist/duckdb-browser-blocking.cjs.map +7 -0
- package/dist/duckdb-browser-blocking.d.ts +1 -0
- package/dist/duckdb-browser-blocking.mjs +25 -0
- package/dist/duckdb-browser-blocking.mjs.map +7 -0
- package/dist/duckdb-browser-coi.pthread.worker.js +27 -0
- package/dist/duckdb-browser-coi.pthread.worker.js.map +7 -0
- package/dist/duckdb-browser-coi.worker.js +35 -0
- package/dist/duckdb-browser-coi.worker.js.map +7 -0
- package/dist/duckdb-browser-eh.worker.js +33 -0
- package/dist/duckdb-browser-eh.worker.js.map +7 -0
- package/dist/duckdb-browser-mvp.worker.js +33 -0
- package/dist/duckdb-browser-mvp.worker.js.map +7 -0
- package/dist/duckdb-browser.cjs +2 -0
- package/dist/duckdb-browser.cjs.map +7 -0
- package/dist/duckdb-browser.d.ts +1 -0
- package/dist/duckdb-browser.mjs +2 -0
- package/dist/duckdb-browser.mjs.map +7 -0
- package/dist/{duckdb-next-coi.wasm → duckdb-coi.wasm} +0 -0
- package/dist/{duckdb.wasm → duckdb-eh.wasm} +0 -0
- package/dist/duckdb-mvp.wasm +0 -0
- package/dist/duckdb-node-blocking.cjs +37 -0
- package/dist/duckdb-node-blocking.cjs.map +7 -0
- package/dist/duckdb-node-blocking.d.ts +1 -0
- package/dist/duckdb-node-eh.worker.cjs +37 -0
- package/dist/duckdb-node-eh.worker.cjs.map +7 -0
- package/dist/duckdb-node-mvp.worker.cjs +36 -0
- package/dist/duckdb-node-mvp.worker.cjs.map +7 -0
- package/dist/duckdb-node.cjs +2 -0
- package/dist/duckdb-node.cjs.map +7 -0
- package/dist/duckdb-node.d.ts +1 -0
- package/dist/img/duckdb.svg +6 -0
- package/dist/img/duckdb_version_badge.svg +1 -0
- package/dist/img/duckdb_wasm.svg +14 -0
- package/dist/tests-browser.js +20661 -19449
- package/dist/tests-browser.js.map +4 -4
- package/dist/tests-node.cjs +17258 -0
- package/dist/tests-node.cjs.map +7 -0
- package/dist/types/src/bindings/bindings_base.d.ts +30 -8
- package/dist/types/src/bindings/{bindings_browser_next.d.ts → bindings_browser_coi.d.ts} +0 -0
- package/dist/types/src/bindings/{bindings_browser_next_coi.d.ts → bindings_browser_eh.d.ts} +0 -0
- package/dist/types/src/bindings/{bindings_browser.d.ts → bindings_browser_mvp.d.ts} +0 -0
- package/dist/types/src/bindings/bindings_interface.d.ts +13 -5
- package/dist/types/src/bindings/{bindings_node_next.d.ts → bindings_node_eh.d.ts} +0 -0
- package/dist/types/src/bindings/{bindings_node.d.ts → bindings_node_mvp.d.ts} +0 -0
- package/dist/types/src/bindings/config.d.ts +43 -2
- package/dist/types/src/bindings/connection.d.ts +7 -7
- package/dist/types/src/bindings/index.d.ts +1 -1
- package/dist/types/src/bindings/insert_options.d.ts +3 -3
- package/dist/types/src/bindings/progress.d.ts +9 -0
- package/dist/types/src/bindings/runtime.d.ts +41 -10
- package/dist/types/src/bindings/runtime_browser.d.ts +5 -3
- package/dist/types/src/bindings/runtime_node.d.ts +2 -1
- package/dist/types/src/bindings/udf_function.d.ts +14 -0
- package/dist/types/src/bindings/udf_runtime.d.ts +3 -0
- package/dist/types/src/bindings/web_file.d.ts +11 -0
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/json_typedef.d.ts +17 -0
- package/dist/types/src/log.d.ts +5 -2
- package/dist/types/src/parallel/async_bindings.d.ts +19 -6
- package/dist/types/src/parallel/async_bindings_interface.d.ts +6 -3
- package/dist/types/src/parallel/async_connection.d.ts +4 -6
- package/dist/types/src/parallel/worker_dispatcher.d.ts +2 -1
- package/dist/types/src/parallel/worker_request.d.ts +18 -7
- package/dist/types/src/platform.d.ts +6 -3
- package/dist/types/src/targets/duckdb-browser-blocking.d.ts +12 -0
- package/dist/types/src/targets/{duckdb-browser-async-next-coi.pthread.worker.d.ts → duckdb-browser-coi.pthread.worker.d.ts} +0 -0
- package/dist/types/src/targets/{duckdb-browser-async-next-coi.worker.d.ts → duckdb-browser-coi.worker.d.ts} +0 -0
- package/dist/types/src/targets/{duckdb-browser-async-next.worker.d.ts → duckdb-browser-eh.worker.d.ts} +0 -0
- package/dist/types/src/targets/{duckdb-browser-async.worker.d.ts → duckdb-browser-mvp.worker.d.ts} +0 -0
- package/dist/types/src/targets/duckdb-node-blocking.d.ts +13 -0
- package/dist/types/src/targets/{duckdb-node-async-next.worker.d.ts → duckdb-node-eh.worker.d.ts} +0 -0
- package/dist/types/src/targets/{duckdb-node-async.worker.d.ts → duckdb-node-mvp.worker.d.ts} +0 -0
- package/dist/types/src/targets/duckdb.d.ts +8 -0
- package/dist/types/src/utils/index.d.ts +1 -1
- package/dist/types/src/utils/s3_helper.d.ts +27 -0
- package/dist/types/src/worker.d.ts +1 -0
- package/package.json +108 -44
- package/dist/duckdb-browser-async-next-coi.d.ts +0 -1
- package/dist/duckdb-browser-async-next-coi.pthread.worker.js +0 -4
- package/dist/duckdb-browser-async-next-coi.pthread.worker.js.map +0 -7
- package/dist/duckdb-browser-async-next-coi.worker.js +0 -19
- package/dist/duckdb-browser-async-next-coi.worker.js.map +0 -7
- package/dist/duckdb-browser-async-next.d.ts +0 -1
- package/dist/duckdb-browser-async-next.worker.js +0 -19
- package/dist/duckdb-browser-async-next.worker.js.map +0 -7
- package/dist/duckdb-browser-async.d.ts +0 -1
- package/dist/duckdb-browser-async.js +0 -18
- package/dist/duckdb-browser-async.js.map +0 -7
- package/dist/duckdb-browser-async.worker.js +0 -19
- package/dist/duckdb-browser-async.worker.js.map +0 -7
- package/dist/duckdb-browser-sync-next.d.ts +0 -1
- package/dist/duckdb-browser-sync-next.js +0 -19
- package/dist/duckdb-browser-sync-next.js.map +0 -7
- package/dist/duckdb-browser-sync.d.ts +0 -1
- package/dist/duckdb-browser-sync.js +0 -19
- package/dist/duckdb-browser-sync.js.map +0 -7
- package/dist/duckdb-esm.d.ts +0 -1
- package/dist/duckdb-esm.js +0 -2
- package/dist/duckdb-esm.js.map +0 -7
- package/dist/duckdb-next.wasm +0 -0
- package/dist/duckdb-node-async-next.worker.js +0 -4
- package/dist/duckdb-node-async-next.worker.js.map +0 -7
- package/dist/duckdb-node-async.d.ts +0 -1
- package/dist/duckdb-node-async.js +0 -2
- package/dist/duckdb-node-async.js.map +0 -7
- package/dist/duckdb-node-async.worker.js +0 -3
- package/dist/duckdb-node-async.worker.js.map +0 -7
- package/dist/duckdb-node-sync-next.d.ts +0 -1
- package/dist/duckdb-node-sync-next.js +0 -4
- package/dist/duckdb-node-sync-next.js.map +0 -7
- package/dist/duckdb-node-sync.d.ts +0 -1
- package/dist/duckdb-node-sync.js +0 -3
- package/dist/duckdb-node-sync.js.map +0 -7
- package/dist/tests-node.js +0 -152
- package/dist/tests-node.js.map +0 -7
- package/dist/types/src/bindings/insert.d.ts +0 -7
- package/dist/types/src/flat_arrow.d.ts +0 -14
- package/dist/types/src/targets/duckdb-browser-async.d.ts +0 -4
- package/dist/types/src/targets/duckdb-browser-sync-next.d.ts +0 -6
- package/dist/types/src/targets/duckdb-browser-sync.d.ts +0 -6
- package/dist/types/src/targets/duckdb-esm.d.ts +0 -1
- package/dist/types/src/targets/duckdb-node-async.d.ts +0 -4
- package/dist/types/src/targets/duckdb-node-sync-next.d.ts +0 -6
- package/dist/types/src/targets/duckdb-node-sync.d.ts +0 -6
- package/dist/types/src/utils/ipc_buffer.d.ts +0 -4
package/README.md
CHANGED
|
@@ -1,49 +1,104 @@
|
|
|
1
|
-
<img src="https://
|
|
1
|
+
<img src="https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm@latest/dist/img/duckdb_wasm.svg" height="64">
|
|
2
2
|
|
|
3
3
|
[](https://github.com/duckdb/duckdb-wasm/actions/workflows/main.yml)
|
|
4
4
|
[](https://github.com/duckdb/duckdb-wasm/actions/workflows/benchmarks.yml)
|
|
5
|
+
[](https://github.com/duckdb/duckdb)
|
|
5
6
|
[](https://www.npmjs.com/package/@duckdb/duckdb-wasm/v/latest)
|
|
7
|
+
[](https://www.jsdelivr.com/package/npm/@duckdb/duckdb-wasm)
|
|
6
8
|
|
|
7
9
|
**DuckDB-Wasm**
|
|
8
10
|
|
|
9
|
-
is an
|
|
11
|
+
DuckDB-Wasm is an in-process analytical SQL database for the browser. It is powered by WebAssembly, speaks Arrow fluently, reads Parquet, CSV and JSON files backed by Filesystem APIs or HTTP requests and has been tested with Chrome, Firefox, Safari and Node.js. Read the [launch blog post](https://duckdb.org/2021/10/29/duckdb-wasm.html).
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
Try it out at [shell.duckdb.org](https://shell.duckdb.org) and on [Observable](https://observablehq.com/@cmudig/duckdb) and read the [API documentation](https://shell.duckdb.org/docs/modules/index.html).
|
|
14
|
+
|
|
15
|
+
_DuckDB-Wasm is fast! If you're here for performance numbers, head over to [our benchmarks](https://shell.duckdb.org/versus)._
|
|
12
16
|
|
|
13
17
|
## Instantiation
|
|
18
|
+
cdn(jsdelivr)
|
|
19
|
+
```ts
|
|
20
|
+
import * as duckdb from '@duckdb/duckdb-wasm';
|
|
21
|
+
|
|
22
|
+
const JSDELIVR_BUNDLES = duckdb.getJsDelivrBundles();
|
|
14
23
|
|
|
24
|
+
// Select a bundle based on browser checks
|
|
25
|
+
const bundle = await duckdb.selectBundle(JSDELIVR_BUNDLES);
|
|
26
|
+
|
|
27
|
+
const worker_url = URL.createObjectURL(
|
|
28
|
+
new Blob([`importScripts("${bundle.mainWorker!}");`], {type: 'text/javascript'})
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
// Instantiate the asynchronus version of DuckDB-wasm
|
|
32
|
+
const worker = new Worker(worker_url);
|
|
33
|
+
const logger = new duckdb.ConsoleLogger();
|
|
34
|
+
const db = new duckdb.AsyncDuckDB(logger, worker);
|
|
35
|
+
await db.instantiate(bundle.mainModule, bundle.pthreadWorker);
|
|
36
|
+
URL.revokeObjectURL(worker_url);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
webpack
|
|
15
40
|
```ts
|
|
16
|
-
|
|
17
|
-
import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
import duckdb_wasm_next from '@duckdb/duckdb-wasm/dist/duckdb-next.wasm';
|
|
22
|
-
import duckdb_wasm_next_coi from '@duckdb/duckdb-wasm/dist/duckdb-next-coi.wasm';
|
|
23
|
-
const WEBPACK_BUNDLES: duckdb.DuckDBBundles = {
|
|
24
|
-
asyncDefault: {
|
|
41
|
+
import * as duckdb from '@duckdb/duckdb-wasm';
|
|
42
|
+
import duckdb_wasm from '@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm';
|
|
43
|
+
import duckdb_wasm_next from '@duckdb/duckdb-wasm/dist/duckdb-eh.wasm';
|
|
44
|
+
const MANUAL_BUNDLES: duckdb.DuckDBBundles = {
|
|
45
|
+
mvp: {
|
|
25
46
|
mainModule: duckdb_wasm,
|
|
26
|
-
mainWorker: new URL('@duckdb/duckdb-wasm/dist/duckdb-browser-
|
|
47
|
+
mainWorker: new URL('@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js', import.meta.url).toString(),
|
|
27
48
|
},
|
|
28
|
-
|
|
49
|
+
eh: {
|
|
29
50
|
mainModule: duckdb_wasm_next,
|
|
30
|
-
mainWorker: new URL('@duckdb/duckdb-wasm/dist/duckdb-browser-
|
|
51
|
+
mainWorker: new URL('@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js', import.meta.url).toString(),
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
// Select a bundle based on browser checks
|
|
55
|
+
const bundle = await duckdb.selectBundle(MANUAL_BUNDLES);
|
|
56
|
+
// Instantiate the asynchronus version of DuckDB-wasm
|
|
57
|
+
const worker = new Worker(bundle.mainWorker!);
|
|
58
|
+
const logger = new duckdb.ConsoleLogger();
|
|
59
|
+
const db = new duckdb.AsyncDuckDB(logger, worker);
|
|
60
|
+
await db.instantiate(bundle.mainModule, bundle.pthreadWorker);
|
|
61
|
+
```
|
|
62
|
+
vite
|
|
63
|
+
```ts
|
|
64
|
+
import * as duckdb from '@duckdb/duckdb-wasm';
|
|
65
|
+
import duckdb_wasm from '@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm?url';
|
|
66
|
+
import mvp_worker from '@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js?url';
|
|
67
|
+
import duckdb_wasm_eh from '@duckdb/duckdb-wasm/dist/duckdb-eh.wasm?url';
|
|
68
|
+
import eh_worker from '@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js?url';
|
|
69
|
+
|
|
70
|
+
const MANUAL_BUNDLES: duckdb.DuckDBBundles = {
|
|
71
|
+
mvp: {
|
|
72
|
+
mainModule: duckdb_wasm,
|
|
73
|
+
mainWorker: mvp_worker,
|
|
31
74
|
},
|
|
32
|
-
|
|
33
|
-
mainModule:
|
|
34
|
-
mainWorker:
|
|
35
|
-
'@duckdb/duckdb-wasm/dist/duckdb-browser-async-next-coi.worker.js',
|
|
36
|
-
import.meta.url,
|
|
37
|
-
).toString(),
|
|
38
|
-
pthreadWorker: new URL(
|
|
39
|
-
'@duckdb/duckdb-wasm/dist/duckdb-browser-async-next-coi.pthread.worker.js',
|
|
40
|
-
import.meta.url,
|
|
41
|
-
).toString(),
|
|
75
|
+
eh: {
|
|
76
|
+
mainModule: duckdb_wasm_eh,
|
|
77
|
+
mainWorker: eh_worker,
|
|
42
78
|
},
|
|
43
79
|
};
|
|
44
|
-
//
|
|
45
|
-
const
|
|
80
|
+
// Select a bundle based on browser checks
|
|
81
|
+
const bundle = await duckdb.selectBundle(MANUAL_BUNDLES);
|
|
82
|
+
// Instantiate the asynchronus version of DuckDB-wasm
|
|
83
|
+
const worker = new Worker(bundle.mainWorker!);
|
|
84
|
+
const logger = new duckdb.ConsoleLogger();
|
|
85
|
+
const db = new duckdb.AsyncDuckDB(logger, worker);
|
|
86
|
+
await db.instantiate(bundle.mainModule, bundle.pthreadWorker);
|
|
87
|
+
```
|
|
88
|
+
static served(manually download the files from https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm@1.13.0/dist/)
|
|
89
|
+
```ts
|
|
90
|
+
import * as duckdb from '@duckdb/duckdb-wasm';
|
|
46
91
|
|
|
92
|
+
const MANUAL_BUNDLES: duckdb.DuckDBBundles = {
|
|
93
|
+
mvp: {
|
|
94
|
+
mainModule: 'change/me/../duckdb-mvp.wasm',
|
|
95
|
+
mainWorker: 'change/me/../duckdb-browser-mvp.worker.js',
|
|
96
|
+
},
|
|
97
|
+
eh: {
|
|
98
|
+
mainModule: 'change/m/../duckdb-eh.wasm',
|
|
99
|
+
mainWorker: 'change/m/../duckdb-browser-eh.worker.js',
|
|
100
|
+
},
|
|
101
|
+
};
|
|
47
102
|
// Select a bundle based on browser checks
|
|
48
103
|
const bundle = await duckdb.selectBundle(JSDELIVR_BUNDLES);
|
|
49
104
|
// Instantiate the asynchronus version of DuckDB-wasm
|
|
@@ -51,23 +106,13 @@ const worker = new Worker(bundle.mainWorker!);
|
|
|
51
106
|
const logger = new duckdb.ConsoleLogger();
|
|
52
107
|
const db = new duckdb.AsyncDuckDB(logger, worker);
|
|
53
108
|
await db.instantiate(bundle.mainModule, bundle.pthreadWorker);
|
|
54
|
-
```
|
|
109
|
+
```
|
|
55
110
|
|
|
56
111
|
## Data Import
|
|
57
112
|
|
|
58
113
|
```ts
|
|
59
114
|
// Data can be inserted from an existing arrow.Table
|
|
60
115
|
await c.insertArrowTable(existingTable, { name: 'arrow_table' });
|
|
61
|
-
// ..., from Arrow vectors
|
|
62
|
-
await c.insertArrowVectors(
|
|
63
|
-
{
|
|
64
|
-
col1: arrow.Int32Vector.from([1, 2]),
|
|
65
|
-
col2: arrow.Utf8Vector.from(['foo', 'bar']),
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
name: 'arrow_vectors',
|
|
69
|
-
},
|
|
70
|
-
);
|
|
71
116
|
// ..., from a raw Arrow IPC stream
|
|
72
117
|
const c = await db.connect();
|
|
73
118
|
const streamResponse = await fetch(`someapi`);
|
|
@@ -84,7 +129,7 @@ await Promise.all(streamInserts);
|
|
|
84
129
|
// (interchangeable: registerFile{Text,Buffer,URL,Handle})
|
|
85
130
|
await db.registerFileText(`data.csv`, '1|foo\n2|bar\n');
|
|
86
131
|
// ... with typed insert options
|
|
87
|
-
await db.
|
|
132
|
+
await db.insertCSVFromPath('data.csv', {
|
|
88
133
|
schema: 'main',
|
|
89
134
|
name: 'foo',
|
|
90
135
|
detect: false,
|
|
@@ -100,26 +145,28 @@ await db.importCSVFromPath('data.csv', {
|
|
|
100
145
|
await db.registerFileText(
|
|
101
146
|
'rows.json',
|
|
102
147
|
`[
|
|
103
|
-
{
|
|
104
|
-
{
|
|
148
|
+
{ "col1": 1, "col2": "foo" },
|
|
149
|
+
{ "col1": 2, "col2": "bar" },
|
|
105
150
|
]`,
|
|
106
151
|
);
|
|
107
152
|
// ... or column-major format
|
|
108
153
|
await db.registerFileText(
|
|
109
154
|
'columns.json',
|
|
110
155
|
`{
|
|
111
|
-
|
|
112
|
-
|
|
156
|
+
"col1": [1, 2],
|
|
157
|
+
"col2": ["foo", "bar"]
|
|
113
158
|
}`,
|
|
114
159
|
);
|
|
115
160
|
// ... with typed insert options
|
|
116
|
-
await
|
|
117
|
-
await
|
|
161
|
+
await c.insertJSONFromPath('rows.json', { name: 'rows' });
|
|
162
|
+
await c.insertJSONFromPath('columns.json', { name: 'columns' });
|
|
118
163
|
|
|
119
164
|
// ..., from Parquet files
|
|
120
165
|
const pickedFile: File = letUserPickFile();
|
|
121
|
-
await db.registerFileHandle('local.parquet', pickedFile);
|
|
122
|
-
await db.registerFileURL('remote.parquet', 'https://origin/remote.parquet');
|
|
166
|
+
await db.registerFileHandle('local.parquet', pickedFile, DuckDBDataProtocol.BROWSER_FILEREADER, true);
|
|
167
|
+
await db.registerFileURL('remote.parquet', 'https://origin/remote.parquet', DuckDBDataProtocol.HTTP, false);
|
|
168
|
+
const res = await fetch('https://origin/remote.parquet');
|
|
169
|
+
await db.registerFileBuffer('buffer.parquet', new Uint8Array(await res.arrayBuffer()));
|
|
123
170
|
|
|
124
171
|
// ..., by specifying URLs in the SQL text
|
|
125
172
|
await c.query(`
|