@flowblade/sqlduck 0.7.0 → 0.8.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 (3) hide show
  1. package/dist/index.cjs +29 -29
  2. package/dist/index.mjs +29 -29
  3. package/package.json +26 -18
package/dist/index.cjs CHANGED
@@ -111,35 +111,6 @@ var DuckMemory = class {
111
111
  return `${query} ORDER BY ${orderByClause}`;
112
112
  };
113
113
  };
114
- const toDuckValue = (value) => {
115
- if (value instanceof Date) return new _duckdb_node_api.DuckDBTimestampValue(BigInt(value.getTime() * 1e3));
116
- return value === void 0 ? null : value;
117
- };
118
- async function* rowsToColumnsChunks(rows, chunkSize) {
119
- if (!Number.isSafeInteger(chunkSize) || chunkSize <= 0) throw new Error(`chunkSize must be a positive integer, got ${chunkSize}`);
120
- const first = await rows.next();
121
- if (first.done) return;
122
- const keys = Object.keys(first.value);
123
- let columns = keys.map(() => []);
124
- let rowsInChunk = 0;
125
- keys.forEach((k, i) => columns[i].push(toDuckValue(first.value[k])));
126
- rowsInChunk++;
127
- if (rowsInChunk >= chunkSize) {
128
- yield columns;
129
- columns = keys.map(() => []);
130
- rowsInChunk = 0;
131
- }
132
- for await (const row of rows) {
133
- keys.forEach((k, i) => columns[i].push(toDuckValue(row[k])));
134
- rowsInChunk++;
135
- if (rowsInChunk >= chunkSize) {
136
- yield columns;
137
- columns = keys.map(() => []);
138
- rowsInChunk = 0;
139
- }
140
- }
141
- if (rowsInChunk > 0) yield columns;
142
- }
143
114
  const isOnDataAppendedAsyncCb = (v) => {
144
115
  return v.constructor.name === "AsyncFunction";
145
116
  };
@@ -225,6 +196,35 @@ const createTableFromZod = async (params) => {
225
196
  columnTypes
226
197
  };
227
198
  };
199
+ const toDuckValue = (value) => {
200
+ if (value instanceof Date) return new _duckdb_node_api.DuckDBTimestampValue(BigInt(value.getTime() * 1e3));
201
+ return value === void 0 ? null : value;
202
+ };
203
+ async function* rowsToColumnsChunks(rows, chunkSize) {
204
+ if (!Number.isSafeInteger(chunkSize) || chunkSize <= 0) throw new Error(`chunkSize must be a positive integer, got ${chunkSize}`);
205
+ const first = await rows.next();
206
+ if (first.done) return;
207
+ const keys = Object.keys(first.value);
208
+ let columns = keys.map(() => []);
209
+ let rowsInChunk = 0;
210
+ keys.forEach((k, i) => columns[i].push(toDuckValue(first.value[k])));
211
+ rowsInChunk++;
212
+ if (rowsInChunk >= chunkSize) {
213
+ yield columns;
214
+ columns = keys.map(() => []);
215
+ rowsInChunk = 0;
216
+ }
217
+ for await (const row of rows) {
218
+ keys.forEach((k, i) => columns[i].push(toDuckValue(row[k])));
219
+ rowsInChunk++;
220
+ if (rowsInChunk >= chunkSize) {
221
+ yield columns;
222
+ columns = keys.map(() => []);
223
+ rowsInChunk = 0;
224
+ }
225
+ }
226
+ if (rowsInChunk > 0) yield columns;
227
+ }
228
228
  var SqlDuck = class {
229
229
  #duck;
230
230
  #logger;
package/dist/index.mjs CHANGED
@@ -90,35 +90,6 @@ var DuckMemory = class {
90
90
  return `${query} ORDER BY ${orderByClause}`;
91
91
  };
92
92
  };
93
- const toDuckValue = (value) => {
94
- if (value instanceof Date) return new DuckDBTimestampValue(BigInt(value.getTime() * 1e3));
95
- return value === void 0 ? null : value;
96
- };
97
- async function* rowsToColumnsChunks(rows, chunkSize) {
98
- if (!Number.isSafeInteger(chunkSize) || chunkSize <= 0) throw new Error(`chunkSize must be a positive integer, got ${chunkSize}`);
99
- const first = await rows.next();
100
- if (first.done) return;
101
- const keys = Object.keys(first.value);
102
- let columns = keys.map(() => []);
103
- let rowsInChunk = 0;
104
- keys.forEach((k, i) => columns[i].push(toDuckValue(first.value[k])));
105
- rowsInChunk++;
106
- if (rowsInChunk >= chunkSize) {
107
- yield columns;
108
- columns = keys.map(() => []);
109
- rowsInChunk = 0;
110
- }
111
- for await (const row of rows) {
112
- keys.forEach((k, i) => columns[i].push(toDuckValue(row[k])));
113
- rowsInChunk++;
114
- if (rowsInChunk >= chunkSize) {
115
- yield columns;
116
- columns = keys.map(() => []);
117
- rowsInChunk = 0;
118
- }
119
- }
120
- if (rowsInChunk > 0) yield columns;
121
- }
122
93
  const isOnDataAppendedAsyncCb = (v) => {
123
94
  return v.constructor.name === "AsyncFunction";
124
95
  };
@@ -204,6 +175,35 @@ const createTableFromZod = async (params) => {
204
175
  columnTypes
205
176
  };
206
177
  };
178
+ const toDuckValue = (value) => {
179
+ if (value instanceof Date) return new DuckDBTimestampValue(BigInt(value.getTime() * 1e3));
180
+ return value === void 0 ? null : value;
181
+ };
182
+ async function* rowsToColumnsChunks(rows, chunkSize) {
183
+ if (!Number.isSafeInteger(chunkSize) || chunkSize <= 0) throw new Error(`chunkSize must be a positive integer, got ${chunkSize}`);
184
+ const first = await rows.next();
185
+ if (first.done) return;
186
+ const keys = Object.keys(first.value);
187
+ let columns = keys.map(() => []);
188
+ let rowsInChunk = 0;
189
+ keys.forEach((k, i) => columns[i].push(toDuckValue(first.value[k])));
190
+ rowsInChunk++;
191
+ if (rowsInChunk >= chunkSize) {
192
+ yield columns;
193
+ columns = keys.map(() => []);
194
+ rowsInChunk = 0;
195
+ }
196
+ for await (const row of rows) {
197
+ keys.forEach((k, i) => columns[i].push(toDuckValue(row[k])));
198
+ rowsInChunk++;
199
+ if (rowsInChunk >= chunkSize) {
200
+ yield columns;
201
+ columns = keys.map(() => []);
202
+ rowsInChunk = 0;
203
+ }
204
+ }
205
+ if (rowsInChunk > 0) yield columns;
206
+ }
207
207
  var SqlDuck = class {
208
208
  #duck;
209
209
  #logger;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowblade/sqlduck",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -33,6 +33,12 @@
33
33
  "build-release": "yarn build && rimraf ./_release && yarn pack && mkdir ./_release && tar zxvf ./package.tgz --directory ./_release && rm ./package.tgz",
34
34
  "docgen": "run-s docgen-typedoc",
35
35
  "docgen-typedoc": "rimraf ./docs/api && typedoc --plugin typedoc-plugin-markdown --out ./docs/api",
36
+ "bench": "vitest bench --run",
37
+ "bench-bun": "bun --bun run vitest bench --run",
38
+ "bench-mitata": "node --experimental-strip-types --expose-gc ./bench/stream.mitata.ts ",
39
+ "bench-mitata-bun": "bun --expose-gc ./bench/stream.mitata.ts ",
40
+ "bench-codspeed": "cross-env CODSPEED=1 vitest bench --run",
41
+ "bench-watch": "vitest bench",
36
42
  "test": "vitest run",
37
43
  "test-unit": "vitest run",
38
44
  "test-unit-bun": "bun --bun run vitest run",
@@ -49,36 +55,37 @@
49
55
  },
50
56
  "dependencies": {
51
57
  "@flowblade/core": "^0.2.25",
52
- "@flowblade/source-duckdb": "^0.17.3",
53
- "@flowblade/sql-tag": "^0.3.0",
58
+ "@flowblade/source-duckdb": "^0.18.0",
59
+ "@flowblade/sql-tag": "^0.3.1",
54
60
  "@standard-schema/spec": "^1.1.0",
55
61
  "p-mutex": "^1.0.0",
56
62
  "valibot": "^1.2.0",
57
- "zod": "^4.3.5"
63
+ "zod": "^4.3.6"
58
64
  },
59
65
  "peerDependencies": {
60
- "@duckdb/node-api": "^1.4.3-r.3"
66
+ "@duckdb/node-api": "^1.4.4-r.1"
61
67
  },
62
68
  "devDependencies": {
63
69
  "@belgattitude/eslint-config-bases": "8.9.0",
64
- "@dotenvx/dotenvx": "1.51.4",
65
- "@duckdb/node-api": "1.4.3-r.3",
70
+ "@dotenvx/dotenvx": "1.52.0",
71
+ "@duckdb/node-api": "1.4.4-r.1",
66
72
  "@faker-js/faker": "10.2.0",
67
73
  "@flowblade/source-kysely": "^1.2.2",
68
74
  "@httpx/assert": "0.16.7",
75
+ "@mitata/counters": "0.0.8",
69
76
  "@size-limit/esbuild": "12.0.0",
70
77
  "@size-limit/file": "12.0.0",
71
78
  "@testcontainers/mssqlserver": "11.11.0",
72
79
  "@total-typescript/ts-reset": "0.6.1",
73
80
  "@traversable/zod": "0.0.57",
74
- "@types/node": "25.0.9",
75
- "@typescript-eslint/eslint-plugin": "8.53.0",
76
- "@typescript-eslint/parser": "8.53.0",
77
- "@vitest/coverage-v8": "4.0.17",
78
- "@vitest/ui": "4.0.17",
81
+ "@types/node": "25.0.10",
82
+ "@typescript-eslint/eslint-plugin": "8.54.0",
83
+ "@typescript-eslint/parser": "8.54.0",
84
+ "@vitest/coverage-v8": "4.0.18",
85
+ "@vitest/ui": "4.0.18",
79
86
  "ansis": "4.2.0",
80
87
  "browserslist-to-esbuild": "2.1.1",
81
- "core-js": "3.47.0",
88
+ "core-js": "3.48.0",
82
89
  "cross-env": "10.1.0",
83
90
  "es-check": "9.5.4",
84
91
  "esbuild": "0.27.2",
@@ -86,9 +93,10 @@
86
93
  "execa": "9.6.1",
87
94
  "is-in-ci": "2.0.0",
88
95
  "kysely": "0.28.10",
96
+ "mitata": "1.0.34",
89
97
  "npm-run-all2": "8.0.4",
90
- "prettier": "3.8.0",
91
- "publint": "0.3.16",
98
+ "prettier": "3.8.1",
99
+ "publint": "0.3.17",
92
100
  "regexp.escape": "2.0.1",
93
101
  "rimraf": "6.1.2",
94
102
  "size-limit": "12.0.0",
@@ -96,13 +104,13 @@
96
104
  "tarn": "3.0.2",
97
105
  "tedious": "19.2.0",
98
106
  "testcontainers": "11.11.0",
99
- "tsdown": "0.19.0",
107
+ "tsdown": "0.20.1",
100
108
  "tsx": "4.21.0",
101
109
  "typedoc": "0.28.16",
102
110
  "typedoc-plugin-markdown": "4.9.0",
103
111
  "typescript": "5.9.3",
104
- "vite-tsconfig-paths": "6.0.4",
105
- "vitest": "4.0.17"
112
+ "vite-tsconfig-paths": "6.0.5",
113
+ "vitest": "4.0.18"
106
114
  },
107
115
  "files": [
108
116
  "dist"