@flowblade/sqlduck 0.33.0 → 0.35.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 +43 -39
- package/dist/index.d.mts +56 -8
- package/dist/index.mjs +88 -9
- package/package.json +18 -18
package/README.md
CHANGED
|
@@ -128,75 +128,79 @@ const queryResult = await dbDuckDbMemoryConn.query<{
|
|
|
128
128
|
|
|
129
129
|
## Benchmarks
|
|
130
130
|
|
|
131
|
-
### Node 24.
|
|
131
|
+
### Node 24.19
|
|
132
132
|
|
|
133
133
|
```
|
|
134
|
-
RUN v4.1.
|
|
134
|
+
RUN v4.1.10 /home/sebastien/github/flowblade/packages/sqlduck
|
|
135
135
|
|
|
136
136
|
|
|
137
|
-
✓ bench/appender.bench.ts > appender benches
|
|
138
|
-
name
|
|
139
|
-
· duckdb appender memory, count: 100000, chunk size 2048
|
|
140
|
-
· duckdb appender file, count: 100000, chunk size 2048
|
|
141
|
-
· duckdb appender, count: 100000, chunk size
|
|
137
|
+
✓ bench/appender.bench.ts > appender benches 4702ms
|
|
138
|
+
name hz min max mean p75 p99 p995 p999 rme samples
|
|
139
|
+
· duckdb appender memory, count: 100000, chunk size 2048 2.9565 297.19 379.28 338.23 379.28 379.28 379.28 379.28 ±154.25% 2
|
|
140
|
+
· duckdb appender file, count: 100000, chunk size 2048 3.2467 302.16 313.84 308.00 313.84 313.84 313.84 313.84 ±24.10% 2
|
|
141
|
+
· duckdb appender file no wal, count: 100000, chunk size 2048 3.5982 272.83 283.01 277.92 283.01 283.01 283.01 283.01 ±23.29% 2
|
|
142
|
+
· duckdb appender file no wal, count: 100000, chunk size 1024 3.1962 307.89 317.86 312.87 317.86 317.86 317.86 317.86 ±20.24% 2
|
|
143
|
+
· duckdb appender, count: 100000, chunk size 1024 3.9457 238.32 268.56 253.44 268.56 268.56 268.56 268.56 ±75.84% 2
|
|
142
144
|
|
|
143
|
-
✓ bench/stream.bench.ts > Bench rowsToColumnsChunks
|
|
145
|
+
✓ bench/stream.bench.ts > Bench rowsToColumnsChunks 2768ms
|
|
144
146
|
name hz min max mean p75 p99 p995 p999 rme samples
|
|
145
|
-
· rowToColumnsChunk with chunkSize 2048 (count: 100000)
|
|
146
|
-
· rowToColumnsChunk with transformer with chunkSize 2048 (count: 100000)
|
|
147
|
-
· mapFakeRowStream with chunkSize 2048 (count: 100000)
|
|
147
|
+
· rowToColumnsChunk with chunkSize 2048 (count: 100000) 14.7282 55.8866 117.44 67.8968 66.1927 117.44 117.44 117.44 ±18.84% 10
|
|
148
|
+
· rowToColumnsChunk with transformer with chunkSize 2048 (count: 100000) 12.1404 62.2024 138.60 82.3693 80.8803 138.60 138.60 138.60 ±26.30% 10
|
|
149
|
+
· mapFakeRowStream with chunkSize 2048 (count: 100000) 11.5408 79.1225 102.85 86.6494 89.3379 102.85 102.85 102.85 ±5.60% 10
|
|
148
150
|
|
|
149
|
-
✓ bench/table-create.bench.ts > Bench getTableCreateFromZod
|
|
151
|
+
✓ bench/table-create.bench.ts > Bench getTableCreateFromZod 613ms
|
|
150
152
|
name hz min max mean p75 p99 p995 p999 rme samples
|
|
151
|
-
· getTableCreateFromZod
|
|
153
|
+
· getTableCreateFromZod 24,208.11 0.0247 5.2321 0.0413 0.0434 0.1512 0.2186 0.7364 ±2.68% 12105
|
|
152
154
|
|
|
153
155
|
BENCH Summary
|
|
154
156
|
|
|
155
|
-
duckdb appender
|
|
156
|
-
1.
|
|
157
|
-
1.
|
|
157
|
+
duckdb appender, count: 100000, chunk size 1024 - bench/appender.bench.ts > appender benches
|
|
158
|
+
1.10x faster than duckdb appender file no wal, count: 100000, chunk size 2048
|
|
159
|
+
1.22x faster than duckdb appender file, count: 100000, chunk size 2048
|
|
160
|
+
1.23x faster than duckdb appender file no wal, count: 100000, chunk size 1024
|
|
161
|
+
1.33x faster than duckdb appender memory, count: 100000, chunk size 2048
|
|
158
162
|
|
|
159
163
|
rowToColumnsChunk with chunkSize 2048 (count: 100000) - bench/stream.bench.ts > Bench rowsToColumnsChunks
|
|
160
|
-
1.
|
|
164
|
+
1.21x faster than rowToColumnsChunk with transformer with chunkSize 2048 (count: 100000)
|
|
161
165
|
1.28x faster than mapFakeRowStream with chunkSize 2048 (count: 100000)
|
|
162
|
-
|
|
163
|
-
getTableCreateFromZod - bench/table-create.bench.ts > Bench getTableCreateFromZod
|
|
164
|
-
|
|
165
166
|
```
|
|
166
167
|
|
|
167
|
-
### Bun 1.
|
|
168
|
+
### Bun 1.4.0-dev
|
|
168
169
|
|
|
169
170
|
```
|
|
170
|
-
|
|
171
|
+
RUN v4.1.10 /home/sebastien/github/flowblade/packages/sqlduck
|
|
171
172
|
|
|
172
173
|
|
|
173
|
-
✓ bench/appender.bench.ts > appender benches
|
|
174
|
-
name
|
|
175
|
-
· duckdb appender memory, count: 100000, chunk size 2048
|
|
176
|
-
· duckdb appender file, count: 100000, chunk size 2048
|
|
177
|
-
· duckdb appender, count: 100000, chunk size
|
|
174
|
+
✓ bench/appender.bench.ts > appender benches 4421ms
|
|
175
|
+
name hz min max mean p75 p99 p995 p999 rme samples
|
|
176
|
+
· duckdb appender memory, count: 100000, chunk size 2048 3.6500 271.84 276.10 273.97 276.10 276.10 276.10 276.10 ±9.88% 2
|
|
177
|
+
· duckdb appender file, count: 100000, chunk size 2048 3.6469 272.29 276.12 274.21 276.12 276.12 276.12 276.12 ±8.88% 2
|
|
178
|
+
· duckdb appender file no wal, count: 100000, chunk size 2048 3.6858 271.23 271.39 271.31 271.39 271.39 271.39 271.39 ±0.36% 2
|
|
179
|
+
· duckdb appender file no wal, count: 100000, chunk size 1024 3.8828 245.82 269.28 257.55 269.28 269.28 269.28 269.28 ±57.90% 2
|
|
180
|
+
· duckdb appender, count: 100000, chunk size 1024 4.3164 228.90 233.35 231.68 233.35 233.35 233.35 233.35 ±2.60% 3
|
|
178
181
|
|
|
179
|
-
✓ bench/stream.bench.ts > Bench rowsToColumnsChunks
|
|
180
|
-
name hz min max mean p75 p99 p995 p999
|
|
181
|
-
· rowToColumnsChunk with chunkSize 2048 (count: 100000)
|
|
182
|
-
· rowToColumnsChunk with transformer with chunkSize 2048 (count: 100000)
|
|
183
|
-
· mapFakeRowStream with chunkSize 2048 (count: 100000)
|
|
182
|
+
✓ bench/stream.bench.ts > Bench rowsToColumnsChunks 1944ms
|
|
183
|
+
name hz min max mean p75 p99 p995 p999 rme samples
|
|
184
|
+
· rowToColumnsChunk with chunkSize 2048 (count: 100000) 23.3620 34.5897 57.6520 42.8045 46.5939 57.6520 57.6520 57.6520 ±9.96% 12
|
|
185
|
+
· rowToColumnsChunk with transformer with chunkSize 2048 (count: 100000) 19.9773 38.8665 71.6678 50.0569 51.5838 71.6678 71.6678 71.6678 ±14.39% 10
|
|
186
|
+
· mapFakeRowStream with chunkSize 2048 (count: 100000) 19.0996 45.5100 66.2385 52.3572 53.0091 66.2385 66.2385 66.2385 ±7.43% 10
|
|
184
187
|
|
|
185
|
-
✓ bench/table-create.bench.ts > Bench getTableCreateFromZod
|
|
188
|
+
✓ bench/table-create.bench.ts > Bench getTableCreateFromZod 634ms
|
|
186
189
|
name hz min max mean p75 p99 p995 p999 rme samples
|
|
187
|
-
· getTableCreateFromZod
|
|
190
|
+
· getTableCreateFromZod 30,647.46 0.0177 4.5320 0.0326 0.0335 0.1058 0.1550 0.7740 ±4.73% 15324
|
|
188
191
|
|
|
189
192
|
BENCH Summary
|
|
190
193
|
|
|
191
194
|
rowToColumnsChunk with chunkSize 2048 (count: 100000) - bench/stream.bench.ts > Bench rowsToColumnsChunks
|
|
192
|
-
1.
|
|
195
|
+
1.17x faster than rowToColumnsChunk with transformer with chunkSize 2048 (count: 100000)
|
|
193
196
|
1.22x faster than mapFakeRowStream with chunkSize 2048 (count: 100000)
|
|
194
197
|
|
|
195
|
-
|
|
198
|
+
duckdb appender, count: 100000, chunk size 1024 - bench/appender.bench.ts > appender benches
|
|
199
|
+
1.11x faster than duckdb appender file no wal, count: 100000, chunk size 1024
|
|
200
|
+
1.17x faster than duckdb appender file no wal, count: 100000, chunk size 2048
|
|
201
|
+
1.18x faster than duckdb appender memory, count: 100000, chunk size 2048
|
|
202
|
+
1.18x faster than duckdb appender file, count: 100000, chunk size 2048
|
|
196
203
|
|
|
197
|
-
duckdb appender memory, count: 100000, chunk size 2048 - bench/appender.bench.ts > appender benches
|
|
198
|
-
1.00x faster than duckdb appender, count: 100000, chunk size 1024
|
|
199
|
-
1.17x faster than duckdb appender file, count: 100000, chunk size 2048
|
|
200
204
|
```
|
|
201
205
|
|
|
202
206
|
### Local scripts
|
package/dist/index.d.mts
CHANGED
|
@@ -274,14 +274,23 @@ declare const duckDatabaseManagerZodSchemas: {
|
|
|
274
274
|
}, z.core.$strict>;
|
|
275
275
|
};
|
|
276
276
|
//#endregion
|
|
277
|
-
//#region src/manager/database/commands/duck-database-attach-command.d.ts
|
|
278
|
-
type Behaviour = 'OR REPLACE' | 'IF NOT EXISTS';
|
|
279
|
-
type DuckDatabaseAttachCommandOptions = {
|
|
280
|
-
behaviour?: Behaviour;
|
|
281
|
-
};
|
|
282
|
-
//#endregion
|
|
283
277
|
//#region src/manager/database/duck-database-manager.d.ts
|
|
284
278
|
type GetDatabaseInfo = z.infer<typeof duckDatabaseManagerZodSchemas.getDatabases>;
|
|
279
|
+
type AttachOptions = {
|
|
280
|
+
behaviour: 'OR REPLACE';
|
|
281
|
+
/**
|
|
282
|
+
* Since duckdb 1.5.4, the ATTACH OR REPLACE fails if the database is already attached.
|
|
283
|
+
* If this option is set to true, when an attachOrReplace fails with the already attached
|
|
284
|
+
* message, the database will be detached first with regular detach command an re-tried
|
|
285
|
+
*
|
|
286
|
+
* This option might be deprecated in the future as duckdb will fix the issue upstream
|
|
287
|
+
*
|
|
288
|
+
* @default false
|
|
289
|
+
*/
|
|
290
|
+
runDetachIfAttachOrReplaceFailWithAlreadyAttached?: boolean;
|
|
291
|
+
} | {
|
|
292
|
+
behaviour: 'IF NOT EXISTS';
|
|
293
|
+
};
|
|
285
294
|
declare class DuckDatabaseManager {
|
|
286
295
|
#private;
|
|
287
296
|
readonly className = "DuckDatabaseManager";
|
|
@@ -303,8 +312,39 @@ declare class DuckDatabaseManager {
|
|
|
303
312
|
* console.log(database.alias); // 'mydb'
|
|
304
313
|
* ```
|
|
305
314
|
*/
|
|
306
|
-
attach: (dbParams: DuckConnectionParams, options?:
|
|
307
|
-
|
|
315
|
+
attach: (dbParams: DuckConnectionParams, options?: AttachOptions) => Promise<Database>;
|
|
316
|
+
/**
|
|
317
|
+
* Attach or replace a database to the current connection
|
|
318
|
+
*
|
|
319
|
+
* @example
|
|
320
|
+
* ```typescript
|
|
321
|
+
* const dbManager = new DuckDatabaseManager(conn);
|
|
322
|
+
* const database = dbManager.attachOrReplace({
|
|
323
|
+
* type: 'memory', // can be 'filesystem'...
|
|
324
|
+
* alias: 'mydb',
|
|
325
|
+
* options: { COMPRESS: 'true' },
|
|
326
|
+
* }, {
|
|
327
|
+
* // as tested on duckdb 1.5.5, the attach or replace might not work
|
|
328
|
+
* // and complain about already attached database. Set this to true
|
|
329
|
+
* // to implement a detach / attach if the attachOrReplace fails
|
|
330
|
+
* runDetachIfAttachOrReplaceFailWithAlreadyAttached?: boolean;
|
|
331
|
+
* });
|
|
332
|
+
*
|
|
333
|
+
* console.log(database.alias); // 'mydb'
|
|
334
|
+
* ```
|
|
335
|
+
*/
|
|
336
|
+
attachOrReplace: (dbParams: DuckConnectionParams, options?: {
|
|
337
|
+
/**
|
|
338
|
+
* Since duckdb 1.5.4, the ATTACH OR REPLACE fails if the database is already attached.
|
|
339
|
+
* If this option is set to true, when an attachOrReplace fails with the already attached
|
|
340
|
+
* message, the database will be detached first with regular detach command an re-tried
|
|
341
|
+
*
|
|
342
|
+
* This option might be deprecated in the future as duckdb will fix the issue upstream
|
|
343
|
+
*
|
|
344
|
+
* @default false
|
|
345
|
+
*/
|
|
346
|
+
runDetachIfAttachOrReplaceFailWithAlreadyAttached?: boolean;
|
|
347
|
+
}) => Promise<Database>;
|
|
308
348
|
attachIfNotExists: (dbParams: DuckConnectionParams) => Promise<Database>;
|
|
309
349
|
/**
|
|
310
350
|
* Check whether a specific database name / alias is currently attached
|
|
@@ -341,6 +381,14 @@ declare class DuckDatabaseManager {
|
|
|
341
381
|
analyze: () => Promise<boolean>;
|
|
342
382
|
checkpoint: (dbAlias: string) => Promise<boolean>;
|
|
343
383
|
vacuum: () => Promise<boolean>;
|
|
384
|
+
getCurrentDatabase: () => Promise<string | null>;
|
|
385
|
+
getCurrentSchema: () => Promise<string | null>;
|
|
386
|
+
getCurrentCatalog: () => Promise<string | null>;
|
|
387
|
+
/**
|
|
388
|
+
* Set the default database to use
|
|
389
|
+
* @throws if the database alias does not exist
|
|
390
|
+
*/
|
|
391
|
+
use: (dbAlias: string) => Promise<true>;
|
|
344
392
|
/**
|
|
345
393
|
* Helper to create an initial database file.
|
|
346
394
|
*/
|
package/dist/index.mjs
CHANGED
|
@@ -379,6 +379,23 @@ var DuckDatabaseAttachCommand = class {
|
|
|
379
379
|
};
|
|
380
380
|
};
|
|
381
381
|
//#endregion
|
|
382
|
+
//#region src/manager/database/utils/get-already-attached-database-from-error.ts
|
|
383
|
+
/**
|
|
384
|
+
* Return the database name that is already attached to the error message
|
|
385
|
+
*
|
|
386
|
+
* Note duckdb might complain about already attached databases with a message like
|
|
387
|
+
* Binder Error: Unique file handle conflict: Cannot attach "duckdb_second_attached_file" - the database file "/home/sebastien/github/flowblade/packages/sqlduck/tests/tmp/duckdb_test_reattachable_file.db" is already attached by database "duckdb_first_attached_file"
|
|
388
|
+
*/
|
|
389
|
+
const getAlreadyAttachedDatabaseFromError = (error) => {
|
|
390
|
+
if (!(error instanceof Error)) return { isAlreadyAttached: false };
|
|
391
|
+
const dbAlias = /Binder Error:.*Cannot attach.*already attached by database\s+['"“]?\b(?<dbAlias>[\w$]+)\b['"”]?/is.exec(error.message)?.groups?.dbAlias ?? null;
|
|
392
|
+
if (dbAlias === null || dbAlias.trim() === "") return { isAlreadyAttached: false };
|
|
393
|
+
return {
|
|
394
|
+
isAlreadyAttached: true,
|
|
395
|
+
dbAlias
|
|
396
|
+
};
|
|
397
|
+
};
|
|
398
|
+
//#endregion
|
|
382
399
|
//#region src/manager/database/duck-database-manager.ts
|
|
383
400
|
var DuckDatabaseManager = class {
|
|
384
401
|
#conn;
|
|
@@ -408,17 +425,61 @@ var DuckDatabaseManager = class {
|
|
|
408
425
|
*/
|
|
409
426
|
attach = async (dbParams, options) => {
|
|
410
427
|
const params = duckConnectionParamsZodSchema.parse(dbParams);
|
|
411
|
-
const rawSql = new DuckDatabaseAttachCommand(params, options).getRawSql();
|
|
412
|
-
const
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
")"
|
|
417
|
-
|
|
428
|
+
const rawSql = new DuckDatabaseAttachCommand(params, { behaviour: options?.behaviour }).getRawSql();
|
|
429
|
+
const restoreCurrentDb = await this.getCurrentDatabase();
|
|
430
|
+
const tempDbNameHack = "temp_run_detach_if_attached_hack_db";
|
|
431
|
+
let isTempDbNameHackCreated = false;
|
|
432
|
+
try {
|
|
433
|
+
await this.#executor.getRowObjectsJS([`attach(${params.alias}`, options === void 0 ? null : JSON.stringify(options)].filter(Boolean).join(",") + ")", rawSql);
|
|
434
|
+
} catch (e) {
|
|
435
|
+
if (options?.behaviour === "OR REPLACE" && options?.runDetachIfAttachOrReplaceFailWithAlreadyAttached === true) {
|
|
436
|
+
const alreadyAttached = getAlreadyAttachedDatabaseFromError(e);
|
|
437
|
+
if (alreadyAttached.isAlreadyAttached === true) {
|
|
438
|
+
if (alreadyAttached.dbAlias === restoreCurrentDb) {
|
|
439
|
+
await this.attachIfNotExists({
|
|
440
|
+
type: "memory",
|
|
441
|
+
alias: tempDbNameHack
|
|
442
|
+
});
|
|
443
|
+
await this.use(tempDbNameHack);
|
|
444
|
+
isTempDbNameHackCreated = true;
|
|
445
|
+
}
|
|
446
|
+
await this.detachOrIgnore(alreadyAttached.dbAlias);
|
|
447
|
+
await this.attach(dbParams);
|
|
448
|
+
} else throw e;
|
|
449
|
+
} else throw e;
|
|
450
|
+
} finally {
|
|
451
|
+
if (restoreCurrentDb !== null && isTempDbNameHackCreated) {
|
|
452
|
+
await this.use(restoreCurrentDb);
|
|
453
|
+
await this.detachOrIgnore(tempDbNameHack);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
418
456
|
return new Database({ alias: params.alias });
|
|
419
457
|
};
|
|
420
|
-
|
|
421
|
-
|
|
458
|
+
/**
|
|
459
|
+
* Attach or replace a database to the current connection
|
|
460
|
+
*
|
|
461
|
+
* @example
|
|
462
|
+
* ```typescript
|
|
463
|
+
* const dbManager = new DuckDatabaseManager(conn);
|
|
464
|
+
* const database = dbManager.attachOrReplace({
|
|
465
|
+
* type: 'memory', // can be 'filesystem'...
|
|
466
|
+
* alias: 'mydb',
|
|
467
|
+
* options: { COMPRESS: 'true' },
|
|
468
|
+
* }, {
|
|
469
|
+
* // as tested on duckdb 1.5.5, the attach or replace might not work
|
|
470
|
+
* // and complain about already attached database. Set this to true
|
|
471
|
+
* // to implement a detach / attach if the attachOrReplace fails
|
|
472
|
+
* runDetachIfAttachOrReplaceFailWithAlreadyAttached?: boolean;
|
|
473
|
+
* });
|
|
474
|
+
*
|
|
475
|
+
* console.log(database.alias); // 'mydb'
|
|
476
|
+
* ```
|
|
477
|
+
*/
|
|
478
|
+
attachOrReplace = async (dbParams, options) => {
|
|
479
|
+
return this.attach(dbParams, {
|
|
480
|
+
behaviour: "OR REPLACE",
|
|
481
|
+
runDetachIfAttachOrReplaceFailWithAlreadyAttached: options?.runDetachIfAttachOrReplaceFailWithAlreadyAttached
|
|
482
|
+
});
|
|
422
483
|
};
|
|
423
484
|
attachIfNotExists = async (dbParams) => {
|
|
424
485
|
return this.attach(dbParams, { behaviour: "IF NOT EXISTS" });
|
|
@@ -526,6 +587,24 @@ var DuckDatabaseManager = class {
|
|
|
526
587
|
await this.#executor.getRowObjectsJS("vacuum()", "VACUUM");
|
|
527
588
|
return true;
|
|
528
589
|
};
|
|
590
|
+
getCurrentDatabase = async () => {
|
|
591
|
+
return (await this.#executor.getRowObjectsJS("getCurrentDatabase()", "SELECT current_database() as current_database"))[0]?.current_database ?? null;
|
|
592
|
+
};
|
|
593
|
+
getCurrentSchema = async () => {
|
|
594
|
+
return (await this.#executor.getRowObjectsJS("getCurrentSchema()", "SELECT current_schema() as current_schema"))?.[0]?.current_schema ?? null;
|
|
595
|
+
};
|
|
596
|
+
getCurrentCatalog = async () => {
|
|
597
|
+
return (await this.#executor.getRowObjectsJS("getCurrentCatalog()", "SELECT current_catalog() as current_catalog"))?.[0]?.current_catalog ?? null;
|
|
598
|
+
};
|
|
599
|
+
/**
|
|
600
|
+
* Set the default database to use
|
|
601
|
+
* @throws if the database alias does not exist
|
|
602
|
+
*/
|
|
603
|
+
use = async (dbAlias) => {
|
|
604
|
+
const safeAlias = duckValidatorsZod.aliasName.parse(dbAlias);
|
|
605
|
+
await this.#executor.getRowObjectsJS(`use(${safeAlias})`, `USE ${safeAlias}`);
|
|
606
|
+
return true;
|
|
607
|
+
};
|
|
529
608
|
/**
|
|
530
609
|
* Helper to create an initial database file.
|
|
531
610
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowblade/sqlduck",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.35.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": {
|
|
@@ -69,10 +69,10 @@
|
|
|
69
69
|
"@flowblade/core": "^0.2.29",
|
|
70
70
|
"@flowblade/source-duckdb": "^0.27.0",
|
|
71
71
|
"@flowblade/sql-tag": "^0.3.4",
|
|
72
|
-
"@httpx/assert": "^0.
|
|
73
|
-
"@httpx/dsn-parser": "^1.
|
|
74
|
-
"@httpx/plain-object": "^2.
|
|
75
|
-
"@logtape/logtape": "^2.3.
|
|
72
|
+
"@httpx/assert": "^0.18.0",
|
|
73
|
+
"@httpx/dsn-parser": "^1.10.0",
|
|
74
|
+
"@httpx/plain-object": "^2.2.0",
|
|
75
|
+
"@logtape/logtape": "^2.3.1",
|
|
76
76
|
"@standard-schema/spec": "^1.1.0",
|
|
77
77
|
"is-safe-filename": "0.1.1",
|
|
78
78
|
"p-queue": "^9.3.3",
|
|
@@ -93,46 +93,46 @@
|
|
|
93
93
|
},
|
|
94
94
|
"devDependencies": {
|
|
95
95
|
"@belgattitude/eslint-config-bases": "8.19.1",
|
|
96
|
-
"@dotenvx/dotenvx": "2.
|
|
97
|
-
"@duckdb/node-api": "1.5.5-r.
|
|
96
|
+
"@dotenvx/dotenvx": "2.21.0",
|
|
97
|
+
"@duckdb/node-api": "1.5.5-r.4",
|
|
98
98
|
"@faker-js/faker": "10.5.0",
|
|
99
99
|
"@flowblade/source-kysely": "^1.7.0",
|
|
100
|
-
"@httpx/assert": "0.
|
|
100
|
+
"@httpx/assert": "0.18.0",
|
|
101
101
|
"@mitata/counters": "0.0.8",
|
|
102
102
|
"@size-limit/esbuild": "13.0.3",
|
|
103
103
|
"@size-limit/file": "13.0.3",
|
|
104
|
-
"@testcontainers/mssqlserver": "12.0
|
|
104
|
+
"@testcontainers/mssqlserver": "12.1.0",
|
|
105
105
|
"@total-typescript/ts-reset": "0.6.1",
|
|
106
|
-
"@types/node": "26.
|
|
107
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
108
|
-
"@typescript-eslint/parser": "8.
|
|
106
|
+
"@types/node": "26.2.0",
|
|
107
|
+
"@typescript-eslint/eslint-plugin": "8.67.0",
|
|
108
|
+
"@typescript-eslint/parser": "8.67.0",
|
|
109
109
|
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
110
110
|
"@vitest/coverage-v8": "4.1.10",
|
|
111
111
|
"@vitest/ui": "4.1.10",
|
|
112
112
|
"ansis": "4.3.1",
|
|
113
113
|
"browserslist-to-esbuild": "2.1.1",
|
|
114
|
-
"core-js": "3.
|
|
114
|
+
"core-js": "3.50.0",
|
|
115
115
|
"cross-env": "10.1.0",
|
|
116
116
|
"es-check": "9.6.4",
|
|
117
117
|
"es-toolkit": "1.50.0",
|
|
118
|
-
"esbuild": "0.28.
|
|
118
|
+
"esbuild": "0.28.2",
|
|
119
119
|
"eslint": "8.57.1",
|
|
120
120
|
"execa": "10.0.1",
|
|
121
121
|
"is-in-ci": "2.0.0",
|
|
122
|
-
"kysely": "0.29.
|
|
122
|
+
"kysely": "0.29.5",
|
|
123
123
|
"mitata": "1.0.34",
|
|
124
124
|
"npm-run-all2": "9.0.3",
|
|
125
125
|
"prettier": "3.9.6",
|
|
126
|
-
"publint": "0.3.
|
|
126
|
+
"publint": "0.3.23",
|
|
127
127
|
"regexp.escape": "2.0.1",
|
|
128
128
|
"rimraf": "6.1.3",
|
|
129
129
|
"size-limit": "13.0.3",
|
|
130
130
|
"sql-formatter": "15.8.2",
|
|
131
131
|
"tarn": "3.1.2",
|
|
132
132
|
"tedious": "20.0.0",
|
|
133
|
-
"testcontainers": "12.0
|
|
133
|
+
"testcontainers": "12.1.0",
|
|
134
134
|
"tsdown": "0.22.14",
|
|
135
|
-
"tsx": "4.23.
|
|
135
|
+
"tsx": "4.23.12",
|
|
136
136
|
"typedoc": "0.28.20",
|
|
137
137
|
"typedoc-plugin-markdown": "4.12.0",
|
|
138
138
|
"typescript": "6.0.3",
|