@sqlrooms/duckdb 0.4.0 → 0.4.2
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/dist/arrow-utils.js +5 -0
- package/dist/arrow-utils.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/useDuckDb.d.ts.map +1 -1
- package/dist/useDuckDb.js.map +1 -1
- package/dist/useDuckDbQuery.d.ts +106 -0
- package/dist/useDuckDbQuery.d.ts.map +1 -0
- package/dist/useDuckDbQuery.js +83 -0
- package/dist/useDuckDbQuery.js.map +1 -0
- package/package.json +4 -3
package/dist/arrow-utils.js
CHANGED
|
@@ -8,6 +8,11 @@ export function arrowTableToJson(table) {
|
|
|
8
8
|
return [key, convertValue(value)];
|
|
9
9
|
})));
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Converts an Arrow table value to a JSON-compatible value
|
|
13
|
+
* @param value
|
|
14
|
+
* @returns
|
|
15
|
+
*/
|
|
11
16
|
function convertValue(value) {
|
|
12
17
|
if (typeof value === 'bigint') {
|
|
13
18
|
if (value >= Number.MIN_SAFE_INTEGER && value <= Number.MAX_SAFE_INTEGER) {
|
package/dist/arrow-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrow-utils.js","sourceRoot":"","sources":["../src/arrow-utils.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAkB;IAElB,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACjC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACvC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CACH,CACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,IAAI,MAAM,CAAC,gBAAgB,IAAI,KAAK,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACzE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"arrow-utils.js","sourceRoot":"","sources":["../src/arrow-utils.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAkB;IAElB,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACjC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACvC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CACH,CACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,IAAI,MAAM,CAAC,gBAAgB,IAAI,KAAK,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACzE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC"}
|
package/dist/useDuckDb.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDuckDb.d.ts","sourceRoot":"","sources":["../src/useDuckDb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,SAAS,EAAc,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"useDuckDb.d.ts","sourceRoot":"","sources":["../src/useDuckDb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,SAAS,EAAc,MAAM,SAAS,CAAC;AAG/C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,qBAAqB,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAeF,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;gBAChC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS;IAWlE,iBAAiB;CAIlB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,kBAAY,CAAC;AAErC,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CA2EjD;AAKD;;GAEG;AACH,eAAO,MAAM,WAAW,kBAAY,CAAC;AAErC,wBAAgB,SAAS,IAAI,MAAM,CAYlC;AAED,eAAO,MAAM,iBAAiB,SAAU,MAAM,YAKjB,CAAC;AAE9B,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,KAAK,CAAC,KAAK,EAChB,MAAM,GAAE,MAAM,GAAG,MAAU,EAC3B,KAAK,SAAI,GACR,MAAM,CASR;AAED,eAAO,MAAM,SAAS,QAAS,OAAO,WAErC,CAAC;AAEF,eAAO,MAAM,QAAQ,OAAQ,MAAM,WAMlC,CAAC;AAEF,wBAAsB,aAAa,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAYtE;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,SAAS,GACd,OAAO,CAAC,SAAS,CAAC,CAmBpB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,SAAS,GACd,OAAO,CAAC,SAAS,EAAE,CAAC,CAOtB;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,MAAM,SAAS,GACd,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED,wBAAsB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiClE;AAED,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3D;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD"}
|
package/dist/useDuckDb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDuckDb.js","sourceRoot":"","sources":["../src/useDuckDb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"useDuckDb.js","sourceRoot":"","sources":["../src/useDuckDb.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as arrow from 'apache-arrow';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
/**
|
|
4
|
+
* A wrapper interface that exposes the underlying Arrow table,
|
|
5
|
+
* a typed row accessor, and the number of rows.
|
|
6
|
+
*/
|
|
7
|
+
export interface DuckDbQueryResult<T> {
|
|
8
|
+
/** The underlying Arrow table */
|
|
9
|
+
arrowTable: arrow.Table;
|
|
10
|
+
/** Returns a typed row at the specified index by converting on demand */
|
|
11
|
+
getRow(index: number): T;
|
|
12
|
+
/** Number of rows in the table */
|
|
13
|
+
length: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A React hook for executing DuckDB queries with automatic state management.
|
|
17
|
+
* This version provides type safety through TypeScript types but no runtime validation.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* interface User {
|
|
22
|
+
* id: number;
|
|
23
|
+
* name: string;
|
|
24
|
+
* email: string;
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* const {data, isLoading, error} = useDuckDbQuery<User>({
|
|
28
|
+
* query: 'SELECT id, name, email FROM users'
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* if (isLoading) return <div>Loading...</div>;
|
|
32
|
+
* if (error) return <div>Error: {error.message}</div>;
|
|
33
|
+
* if (!data) return null;
|
|
34
|
+
*
|
|
35
|
+
* // Access typed rows
|
|
36
|
+
* const firstUser = data.getRow(0); // Type: User
|
|
37
|
+
* console.log(firstUser.name);
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @template Row The TypeScript type for each row in the result
|
|
41
|
+
* @param options Configuration object containing the query and execution control
|
|
42
|
+
* @returns Object containing the query result, loading state, and any error
|
|
43
|
+
*/
|
|
44
|
+
export declare function useDuckDbQuery<Row>(options: {
|
|
45
|
+
query: string;
|
|
46
|
+
enabled?: boolean;
|
|
47
|
+
}): {
|
|
48
|
+
data: DuckDbQueryResult<Row> | undefined;
|
|
49
|
+
error: Error | null;
|
|
50
|
+
isLoading: boolean;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* A React hook for executing DuckDB queries with automatic state management and runtime validation.
|
|
54
|
+
* This version uses Zod schemas to provide both compile-time and runtime type safety.
|
|
55
|
+
*
|
|
56
|
+
* Key features:
|
|
57
|
+
* - Runtime validation of each row as it's accessed
|
|
58
|
+
* - Automatic TypeScript type inference from the Zod schema
|
|
59
|
+
* - Validation errors if the data doesn't match the expected shape
|
|
60
|
+
* - Ability to transform data during validation
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* // Define a schema for your data
|
|
65
|
+
* const userSchema = z.object({
|
|
66
|
+
* id: z.number(),
|
|
67
|
+
* name: z.string(),
|
|
68
|
+
* email: z.string().email(),
|
|
69
|
+
* createdAt: z.string().transform(str => new Date(str)) // Transform string to Date
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* // The type is automatically inferred from the schema
|
|
73
|
+
* const {data, isLoading, error} = useDuckDbQuery(
|
|
74
|
+
* userSchema,
|
|
75
|
+
* {query: 'SELECT id, name, email, created_at FROM users'}
|
|
76
|
+
* );
|
|
77
|
+
*
|
|
78
|
+
* if (isLoading) return <div>Loading...</div>;
|
|
79
|
+
* if (error) {
|
|
80
|
+
* // Error will be a ZodError if validation fails
|
|
81
|
+
* if (error instanceof z.ZodError) {
|
|
82
|
+
* return <div>Validation Error: {error.errors[0].message}</div>;
|
|
83
|
+
* }
|
|
84
|
+
* return <div>Error: {error.message}</div>;
|
|
85
|
+
* }
|
|
86
|
+
* if (!data) return null;
|
|
87
|
+
*
|
|
88
|
+
* // Rows are validated and transformed according to the schema
|
|
89
|
+
* const user = data.getRow(0);
|
|
90
|
+
* console.log(user.createdAt.toISOString()); // createdAt is now a Date object
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @template Schema The Zod schema type that defines the shape and validation of each row
|
|
94
|
+
* @param schema A Zod schema that defines the expected shape and validation rules for each row
|
|
95
|
+
* @param options Configuration object containing the query and execution control
|
|
96
|
+
* @returns Object containing the validated query result, loading state, and any error
|
|
97
|
+
*/
|
|
98
|
+
export declare function useDuckDbQuery<Schema extends z.ZodType>(schema: Schema, options: {
|
|
99
|
+
query: string;
|
|
100
|
+
enabled?: boolean;
|
|
101
|
+
}): {
|
|
102
|
+
data: DuckDbQueryResult<z.infer<Schema>> | undefined;
|
|
103
|
+
error: Error | null;
|
|
104
|
+
isLoading: boolean;
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=useDuckDbQuery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDuckDbQuery.d.ts","sourceRoot":"","sources":["../src/useDuckDbQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,iCAAiC;IACjC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;IACxB,yEAAyE;IACzE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;IACzB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB;AAmCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG;IACF,IAAI,EAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACzC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,CAAC,CAAC,OAAO,EACrD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IACP,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACA;IACD,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACrD,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { getDuckDb } from './useDuckDb';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a row accessor wrapper around an Arrow table that provides typed row access.
|
|
5
|
+
*/
|
|
6
|
+
function createTypedRowAccessor({ arrowTable, validate, }) {
|
|
7
|
+
return {
|
|
8
|
+
arrowTable,
|
|
9
|
+
get length() {
|
|
10
|
+
return arrowTable.numRows;
|
|
11
|
+
},
|
|
12
|
+
getRow(index) {
|
|
13
|
+
const row = {};
|
|
14
|
+
arrowTable.schema.fields.forEach((field) => {
|
|
15
|
+
const column = arrowTable.getChild(field.name);
|
|
16
|
+
if (column) {
|
|
17
|
+
row[field.name] = column.get(index);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
// If a validator is provided, use it to validate/parse the row
|
|
21
|
+
if (validate) {
|
|
22
|
+
return validate(row);
|
|
23
|
+
}
|
|
24
|
+
return row;
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Implementation of useDuckDbQuery that handles both overloads
|
|
30
|
+
*/
|
|
31
|
+
export function useDuckDbQuery(schemaOrOptions, maybeOptions) {
|
|
32
|
+
// Determine if we're using the schema overload
|
|
33
|
+
const hasSchema = maybeOptions !== undefined;
|
|
34
|
+
const options = hasSchema
|
|
35
|
+
? maybeOptions
|
|
36
|
+
: schemaOrOptions;
|
|
37
|
+
const schema = hasSchema ? schemaOrOptions : undefined;
|
|
38
|
+
const [data, setData] = useState(undefined);
|
|
39
|
+
const [error, setError] = useState(null);
|
|
40
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
let isMounted = true;
|
|
43
|
+
const fetchData = async () => {
|
|
44
|
+
if (!options.enabled && options.enabled !== undefined) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
setIsLoading(true);
|
|
48
|
+
setError(null);
|
|
49
|
+
try {
|
|
50
|
+
const duckDb = await getDuckDb();
|
|
51
|
+
const result = await duckDb.conn.query(options.query);
|
|
52
|
+
// Create a row accessor that optionally validates with the schema
|
|
53
|
+
const rowAccessor = createTypedRowAccessor({
|
|
54
|
+
arrowTable: result,
|
|
55
|
+
validate: schema ? (row) => schema.parse(row) : undefined,
|
|
56
|
+
});
|
|
57
|
+
if (isMounted) {
|
|
58
|
+
setData(rowAccessor);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
if (isMounted) {
|
|
63
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
if (isMounted) {
|
|
68
|
+
setIsLoading(false);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
fetchData();
|
|
73
|
+
return () => {
|
|
74
|
+
isMounted = false;
|
|
75
|
+
};
|
|
76
|
+
}, [options.query, options.enabled]);
|
|
77
|
+
return {
|
|
78
|
+
data,
|
|
79
|
+
error,
|
|
80
|
+
isLoading,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=useDuckDbQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDuckDbQuery.js","sourceRoot":"","sources":["../src/useDuckDbQuery.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/duckdb",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@duckdb/duckdb-wasm": "^1.29.1-dev68.0",
|
|
23
|
-
"apache-arrow": "^18.1.0"
|
|
23
|
+
"apache-arrow": "^18.1.0",
|
|
24
|
+
"zod": "^3.24.1"
|
|
24
25
|
},
|
|
25
26
|
"devDependencies": {
|
|
26
27
|
"@sqlrooms/jest-config": "0.4.0",
|
|
@@ -37,5 +38,5 @@
|
|
|
37
38
|
"test": "jest",
|
|
38
39
|
"test:watch": "jest --watch"
|
|
39
40
|
},
|
|
40
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "c71b75c7c6f391e0760803bcac674b8a59368922"
|
|
41
42
|
}
|