@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.
Files changed (127) hide show
  1. package/README.md +94 -47
  2. package/dist/duckdb-browser-blocking.cjs +25 -0
  3. package/dist/duckdb-browser-blocking.cjs.map +7 -0
  4. package/dist/duckdb-browser-blocking.d.ts +1 -0
  5. package/dist/duckdb-browser-blocking.mjs +25 -0
  6. package/dist/duckdb-browser-blocking.mjs.map +7 -0
  7. package/dist/duckdb-browser-coi.pthread.worker.js +27 -0
  8. package/dist/duckdb-browser-coi.pthread.worker.js.map +7 -0
  9. package/dist/duckdb-browser-coi.worker.js +35 -0
  10. package/dist/duckdb-browser-coi.worker.js.map +7 -0
  11. package/dist/duckdb-browser-eh.worker.js +33 -0
  12. package/dist/duckdb-browser-eh.worker.js.map +7 -0
  13. package/dist/duckdb-browser-mvp.worker.js +33 -0
  14. package/dist/duckdb-browser-mvp.worker.js.map +7 -0
  15. package/dist/duckdb-browser.cjs +2 -0
  16. package/dist/duckdb-browser.cjs.map +7 -0
  17. package/dist/duckdb-browser.d.ts +1 -0
  18. package/dist/duckdb-browser.mjs +2 -0
  19. package/dist/duckdb-browser.mjs.map +7 -0
  20. package/dist/{duckdb-next-coi.wasm → duckdb-coi.wasm} +0 -0
  21. package/dist/{duckdb.wasm → duckdb-eh.wasm} +0 -0
  22. package/dist/duckdb-mvp.wasm +0 -0
  23. package/dist/duckdb-node-blocking.cjs +37 -0
  24. package/dist/duckdb-node-blocking.cjs.map +7 -0
  25. package/dist/duckdb-node-blocking.d.ts +1 -0
  26. package/dist/duckdb-node-eh.worker.cjs +37 -0
  27. package/dist/duckdb-node-eh.worker.cjs.map +7 -0
  28. package/dist/duckdb-node-mvp.worker.cjs +36 -0
  29. package/dist/duckdb-node-mvp.worker.cjs.map +7 -0
  30. package/dist/duckdb-node.cjs +2 -0
  31. package/dist/duckdb-node.cjs.map +7 -0
  32. package/dist/duckdb-node.d.ts +1 -0
  33. package/dist/img/duckdb.svg +6 -0
  34. package/dist/img/duckdb_version_badge.svg +1 -0
  35. package/dist/img/duckdb_wasm.svg +14 -0
  36. package/dist/tests-browser.js +20661 -19449
  37. package/dist/tests-browser.js.map +4 -4
  38. package/dist/tests-node.cjs +17258 -0
  39. package/dist/tests-node.cjs.map +7 -0
  40. package/dist/types/src/bindings/bindings_base.d.ts +30 -8
  41. package/dist/types/src/bindings/{bindings_browser_next.d.ts → bindings_browser_coi.d.ts} +0 -0
  42. package/dist/types/src/bindings/{bindings_browser_next_coi.d.ts → bindings_browser_eh.d.ts} +0 -0
  43. package/dist/types/src/bindings/{bindings_browser.d.ts → bindings_browser_mvp.d.ts} +0 -0
  44. package/dist/types/src/bindings/bindings_interface.d.ts +13 -5
  45. package/dist/types/src/bindings/{bindings_node_next.d.ts → bindings_node_eh.d.ts} +0 -0
  46. package/dist/types/src/bindings/{bindings_node.d.ts → bindings_node_mvp.d.ts} +0 -0
  47. package/dist/types/src/bindings/config.d.ts +43 -2
  48. package/dist/types/src/bindings/connection.d.ts +7 -7
  49. package/dist/types/src/bindings/index.d.ts +1 -1
  50. package/dist/types/src/bindings/insert_options.d.ts +3 -3
  51. package/dist/types/src/bindings/progress.d.ts +9 -0
  52. package/dist/types/src/bindings/runtime.d.ts +41 -10
  53. package/dist/types/src/bindings/runtime_browser.d.ts +5 -3
  54. package/dist/types/src/bindings/runtime_node.d.ts +2 -1
  55. package/dist/types/src/bindings/udf_function.d.ts +14 -0
  56. package/dist/types/src/bindings/udf_runtime.d.ts +3 -0
  57. package/dist/types/src/bindings/web_file.d.ts +11 -0
  58. package/dist/types/src/index.d.ts +1 -0
  59. package/dist/types/src/json_typedef.d.ts +17 -0
  60. package/dist/types/src/log.d.ts +5 -2
  61. package/dist/types/src/parallel/async_bindings.d.ts +19 -6
  62. package/dist/types/src/parallel/async_bindings_interface.d.ts +6 -3
  63. package/dist/types/src/parallel/async_connection.d.ts +4 -6
  64. package/dist/types/src/parallel/worker_dispatcher.d.ts +2 -1
  65. package/dist/types/src/parallel/worker_request.d.ts +18 -7
  66. package/dist/types/src/platform.d.ts +6 -3
  67. package/dist/types/src/targets/duckdb-browser-blocking.d.ts +12 -0
  68. package/dist/types/src/targets/{duckdb-browser-async-next-coi.pthread.worker.d.ts → duckdb-browser-coi.pthread.worker.d.ts} +0 -0
  69. package/dist/types/src/targets/{duckdb-browser-async-next-coi.worker.d.ts → duckdb-browser-coi.worker.d.ts} +0 -0
  70. package/dist/types/src/targets/{duckdb-browser-async-next.worker.d.ts → duckdb-browser-eh.worker.d.ts} +0 -0
  71. package/dist/types/src/targets/{duckdb-browser-async.worker.d.ts → duckdb-browser-mvp.worker.d.ts} +0 -0
  72. package/dist/types/src/targets/duckdb-node-blocking.d.ts +13 -0
  73. package/dist/types/src/targets/{duckdb-node-async-next.worker.d.ts → duckdb-node-eh.worker.d.ts} +0 -0
  74. package/dist/types/src/targets/{duckdb-node-async.worker.d.ts → duckdb-node-mvp.worker.d.ts} +0 -0
  75. package/dist/types/src/targets/duckdb.d.ts +8 -0
  76. package/dist/types/src/utils/index.d.ts +1 -1
  77. package/dist/types/src/utils/s3_helper.d.ts +27 -0
  78. package/dist/types/src/worker.d.ts +1 -0
  79. package/package.json +108 -44
  80. package/dist/duckdb-browser-async-next-coi.d.ts +0 -1
  81. package/dist/duckdb-browser-async-next-coi.pthread.worker.js +0 -4
  82. package/dist/duckdb-browser-async-next-coi.pthread.worker.js.map +0 -7
  83. package/dist/duckdb-browser-async-next-coi.worker.js +0 -19
  84. package/dist/duckdb-browser-async-next-coi.worker.js.map +0 -7
  85. package/dist/duckdb-browser-async-next.d.ts +0 -1
  86. package/dist/duckdb-browser-async-next.worker.js +0 -19
  87. package/dist/duckdb-browser-async-next.worker.js.map +0 -7
  88. package/dist/duckdb-browser-async.d.ts +0 -1
  89. package/dist/duckdb-browser-async.js +0 -18
  90. package/dist/duckdb-browser-async.js.map +0 -7
  91. package/dist/duckdb-browser-async.worker.js +0 -19
  92. package/dist/duckdb-browser-async.worker.js.map +0 -7
  93. package/dist/duckdb-browser-sync-next.d.ts +0 -1
  94. package/dist/duckdb-browser-sync-next.js +0 -19
  95. package/dist/duckdb-browser-sync-next.js.map +0 -7
  96. package/dist/duckdb-browser-sync.d.ts +0 -1
  97. package/dist/duckdb-browser-sync.js +0 -19
  98. package/dist/duckdb-browser-sync.js.map +0 -7
  99. package/dist/duckdb-esm.d.ts +0 -1
  100. package/dist/duckdb-esm.js +0 -2
  101. package/dist/duckdb-esm.js.map +0 -7
  102. package/dist/duckdb-next.wasm +0 -0
  103. package/dist/duckdb-node-async-next.worker.js +0 -4
  104. package/dist/duckdb-node-async-next.worker.js.map +0 -7
  105. package/dist/duckdb-node-async.d.ts +0 -1
  106. package/dist/duckdb-node-async.js +0 -2
  107. package/dist/duckdb-node-async.js.map +0 -7
  108. package/dist/duckdb-node-async.worker.js +0 -3
  109. package/dist/duckdb-node-async.worker.js.map +0 -7
  110. package/dist/duckdb-node-sync-next.d.ts +0 -1
  111. package/dist/duckdb-node-sync-next.js +0 -4
  112. package/dist/duckdb-node-sync-next.js.map +0 -7
  113. package/dist/duckdb-node-sync.d.ts +0 -1
  114. package/dist/duckdb-node-sync.js +0 -3
  115. package/dist/duckdb-node-sync.js.map +0 -7
  116. package/dist/tests-node.js +0 -152
  117. package/dist/tests-node.js.map +0 -7
  118. package/dist/types/src/bindings/insert.d.ts +0 -7
  119. package/dist/types/src/flat_arrow.d.ts +0 -14
  120. package/dist/types/src/targets/duckdb-browser-async.d.ts +0 -4
  121. package/dist/types/src/targets/duckdb-browser-sync-next.d.ts +0 -6
  122. package/dist/types/src/targets/duckdb-browser-sync.d.ts +0 -6
  123. package/dist/types/src/targets/duckdb-esm.d.ts +0 -1
  124. package/dist/types/src/targets/duckdb-node-async.d.ts +0 -4
  125. package/dist/types/src/targets/duckdb-node-sync-next.d.ts +0 -6
  126. package/dist/types/src/targets/duckdb-node-sync.d.ts +0 -6
  127. package/dist/types/src/utils/ipc_buffer.d.ts +0 -4
package/README.md CHANGED
@@ -1,49 +1,104 @@
1
- <img src="https://github.com/duckdb/duckdb-wasm/blob/447dd9fc3c4f969b2e1d1379f95331e27d622e05/misc/duckdb_wasm.svg" height="64">
1
+ <img src="https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm@latest/dist/img/duckdb_wasm.svg" height="64">
2
2
 
3
3
  [![Main](https://github.com/duckdb/duckdb-wasm/actions/workflows/main.yml/badge.svg)](https://github.com/duckdb/duckdb-wasm/actions/workflows/main.yml)
4
4
  [![Benchmarks](https://github.com/duckdb/duckdb-wasm/actions/workflows/benchmarks.yml/badge.svg)](https://github.com/duckdb/duckdb-wasm/actions/workflows/benchmarks.yml)
5
+ [![duckdb](https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm@latest/dist/img/duckdb_version_badge.svg)](https://github.com/duckdb/duckdb)
5
6
  [![npm](https://img.shields.io/npm/v/@duckdb/duckdb-wasm?logo=npm)](https://www.npmjs.com/package/@duckdb/duckdb-wasm/v/latest)
7
+ [![JSDevlivr](https://data.jsdelivr.com/v1/package/npm/@duckdb/duckdb-wasm/badge?style=rounded)](https://www.jsdelivr.com/package/npm/@duckdb/duckdb-wasm)
6
8
 
7
9
  **DuckDB-Wasm**
8
10
 
9
- is an embedded 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. Try it out at [shell.duckdb.org](https://shell.duckdb.org) and read the [API documentation](https://shell.duckdb.org/docs/modules/index.html).
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
- _DuckDB-Wasm is fast! If you're here for performance numbers, head over to our benchmarks at [shell.duckdb.org/versus](https://shell.duckdb.org/versus)._
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
- // Import the ESM bundle (supports tree-shaking)
17
- import * as duckdb from '@duckdb/duckdb-wasm/dist/duckdb-esm.js';
18
-
19
- // Either bundle them manually, for example as Webpack assets
20
- import duckdb_wasm from '@duckdb/duckdb-wasm/dist/duckdb.wasm';
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-async.worker.js', import.meta.url).toString(),
47
+ mainWorker: new URL('@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js', import.meta.url).toString(),
27
48
  },
28
- asyncNext: {
49
+ eh: {
29
50
  mainModule: duckdb_wasm_next,
30
- mainWorker: new URL('@duckdb/duckdb-wasm/dist/duckdb-browser-async-next.worker.js', import.meta.url).toString(),
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
- asyncNextCOI: {
33
- mainModule: duckdb_wasm_next_coi,
34
- mainWorker: new URL(
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
- // ..., or load the bundles from jsdelivr
45
- const JSDELIVR_BUNDLES = duckdb.getJsDelivrBundles();
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.importCSVFromPath('data.csv', {
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
- { col1”: 1, col2”: foo },
104
- { col1”: 2, col2”: bar },
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
- col1”: [1, 2],
112
- col2”: [foo”, bar]
156
+ "col1": [1, 2],
157
+ "col2": ["foo", "bar"]
113
158
  }`,
114
159
  );
115
160
  // ... with typed insert options
116
- await db.importJSONFromPath('rows.json', { name: 'rows' });
117
- await db.importJSONFromPath('columns.json', { name: 'columns' });
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(`