@rocicorp/zero 0.24.2025100400 → 0.24.2025100801
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/out/analyze-query/src/bin-analyze.d.ts.map +1 -1
- package/out/analyze-query/src/bin-analyze.js +4 -3
- package/out/analyze-query/src/bin-analyze.js.map +1 -1
- package/out/analyze-query/src/run-ast.d.ts.map +1 -1
- package/out/analyze-query/src/run-ast.js +12 -4
- package/out/analyze-query/src/run-ast.js.map +1 -1
- package/out/{chunk-DPY6BGZO.js → chunk-IEDJQDZ2.js} +3 -3
- package/out/{chunk-YXYKEMHQ.js → chunk-INWZY4XP.js} +8 -3
- package/out/chunk-INWZY4XP.js.map +7 -0
- package/out/{chunk-SBHBYH27.js → chunk-Y6JQACOR.js} +4 -4
- package/out/{chunk-SBHBYH27.js.map → chunk-Y6JQACOR.js.map} +2 -2
- package/out/{lazy-inspector-A5VQLZYJ.js → lazy-inspector-T5SHTECY.js} +2 -2
- package/out/react.js +2 -2
- package/out/solid.js +3 -3
- package/out/zero/package.json +10 -6
- package/out/zero/src/adapters/drizzle.d.ts +2 -0
- package/out/zero/src/adapters/drizzle.d.ts.map +1 -0
- package/out/zero/src/adapters/drizzle.js +2 -0
- package/out/zero/src/adapters/drizzle.js.map +1 -0
- package/out/zero/src/adapters/pg.d.ts +2 -0
- package/out/zero/src/adapters/pg.d.ts.map +1 -0
- package/out/zero/src/adapters/pg.js +2 -0
- package/out/zero/src/adapters/pg.js.map +1 -0
- package/out/zero/src/zero-cache-dev.js +10 -4
- package/out/zero/src/zero-cache-dev.js.map +1 -1
- package/out/zero-cache/src/scripts/deploy-permissions.js +1 -1
- package/out/zero-cache/src/services/mutagen/error.d.ts +4 -0
- package/out/zero-cache/src/services/mutagen/error.d.ts.map +1 -0
- package/out/zero-cache/src/services/mutagen/error.js +8 -0
- package/out/zero-cache/src/services/mutagen/error.js.map +1 -0
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts +0 -3
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +1 -6
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.d.ts +6 -0
- package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
- package/out/zero-protocol/src/analyze-query-result.d.ts +5 -0
- package/out/zero-protocol/src/analyze-query-result.d.ts.map +1 -1
- package/out/zero-protocol/src/analyze-query-result.js +5 -0
- package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +3 -0
- package/out/zero-protocol/src/down.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-down.d.ts +9 -0
- package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +2 -1
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-server/src/adapters/drizzle.d.ts +64 -0
- package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -0
- package/out/zero-server/src/adapters/drizzle.js +109 -0
- package/out/zero-server/src/adapters/drizzle.js.map +1 -0
- package/out/zero-server/src/adapters/pg.d.ts +53 -0
- package/out/zero-server/src/adapters/pg.d.ts.map +1 -0
- package/out/zero-server/src/adapters/pg.js +79 -0
- package/out/zero-server/src/adapters/pg.js.map +1 -0
- package/out/zero-server/src/adapters/postgresjs.d.ts +41 -12
- package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
- package/out/zero-server/src/adapters/postgresjs.js +27 -10
- package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
- package/out/zero-server/src/process-mutations.js +1 -1
- package/out/zero-server/src/process-mutations.js.map +1 -1
- package/out/zero.js +3 -3
- package/out/zqlite/src/table-source.d.ts +1 -1
- package/out/zqlite/src/table-source.d.ts.map +1 -1
- package/out/zqlite/src/table-source.js +21 -8
- package/out/zqlite/src/table-source.js.map +1 -1
- package/package.json +10 -6
- package/out/chunk-YXYKEMHQ.js.map +0 -7
- package/out/zero/src/adapters/drizzle-pg.d.ts +0 -2
- package/out/zero/src/adapters/drizzle-pg.d.ts.map +0 -1
- package/out/zero/src/adapters/drizzle-pg.js +0 -2
- package/out/zero/src/adapters/drizzle-pg.js.map +0 -1
- package/out/zero-server/src/adapters/drizzle-pg.d.ts +0 -22
- package/out/zero-server/src/adapters/drizzle-pg.d.ts.map +0 -1
- package/out/zero-server/src/adapters/drizzle-pg.js +0 -39
- package/out/zero-server/src/adapters/drizzle-pg.js.map +0 -1
- /package/out/{chunk-DPY6BGZO.js.map → chunk-IEDJQDZ2.js.map} +0 -0
- /package/out/{lazy-inspector-A5VQLZYJ.js.map → lazy-inspector-T5SHTECY.js.map} +0 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { sql } from 'drizzle-orm';
|
|
2
|
+
import { ZQLDatabase } from "../zql-database.js";
|
|
3
|
+
export class DrizzleConnection {
|
|
4
|
+
#drizzle;
|
|
5
|
+
constructor(drizzle) {
|
|
6
|
+
this.#drizzle = drizzle;
|
|
7
|
+
}
|
|
8
|
+
transaction(fn) {
|
|
9
|
+
return this.#drizzle.transaction(drizzleTx => fn(new DrizzleInternalTransaction(drizzleTx)));
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
class DrizzleInternalTransaction {
|
|
13
|
+
wrappedTransaction;
|
|
14
|
+
constructor(drizzleTx) {
|
|
15
|
+
this.wrappedTransaction = drizzleTx;
|
|
16
|
+
}
|
|
17
|
+
async query(sql, params) {
|
|
18
|
+
const stmt = fromDollarParams(sql, params);
|
|
19
|
+
const result = await this.wrappedTransaction.execute(stmt);
|
|
20
|
+
return toIterableRows(result);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Turn `$1, $2...` placeholders into a Drizzle SQL object with bound params.
|
|
25
|
+
*/
|
|
26
|
+
export function fromDollarParams(text, params) {
|
|
27
|
+
const re = /\$(\d+)/g;
|
|
28
|
+
const s = sql.empty();
|
|
29
|
+
let last = 0;
|
|
30
|
+
let m;
|
|
31
|
+
while ((m = re.exec(text)) !== null) {
|
|
32
|
+
const idx = Number(m[1]) - 1;
|
|
33
|
+
if (idx < 0 || idx >= params.length) {
|
|
34
|
+
throw new Error(`Missing param for $${m[1]}`);
|
|
35
|
+
}
|
|
36
|
+
if (m.index > last)
|
|
37
|
+
s.append(sql.raw(text.slice(last, m.index)));
|
|
38
|
+
s.append(sql `${params[idx]}`); // parameterized value
|
|
39
|
+
last = m.index + m[0].length;
|
|
40
|
+
}
|
|
41
|
+
if (last < text.length)
|
|
42
|
+
s.append(sql.raw(text.slice(last)));
|
|
43
|
+
return s;
|
|
44
|
+
}
|
|
45
|
+
function isIterable(value) {
|
|
46
|
+
return (value != null &&
|
|
47
|
+
typeof value[Symbol.iterator] === 'function');
|
|
48
|
+
}
|
|
49
|
+
export function toIterableRows(result) {
|
|
50
|
+
if (result === null || result === undefined) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
if (Array.isArray(result)) {
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
if (isIterable(result)) {
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
if (typeof result === 'object') {
|
|
60
|
+
const rows = result.rows;
|
|
61
|
+
if (rows === null || rows === undefined) {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
if (Array.isArray(rows)) {
|
|
65
|
+
return rows;
|
|
66
|
+
}
|
|
67
|
+
if (isIterable(rows)) {
|
|
68
|
+
return rows;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
throw new TypeError('Drizzle query result is not iterable');
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Wrap a `drizzle-orm` database for Zero ZQL.
|
|
75
|
+
*
|
|
76
|
+
* Provides ZQL querying plus access to the underlying drizzle transaction.
|
|
77
|
+
* Use {@link DrizzleTransaction} to type your server mutator transaction.
|
|
78
|
+
*
|
|
79
|
+
* @param schema - Zero schema.
|
|
80
|
+
* @param client - Drizzle database.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* import {Pool} from 'pg';
|
|
85
|
+
* import {drizzle} from 'drizzle-orm/node-postgres';
|
|
86
|
+
* import type {ServerTransaction} from '@rocicorp/zero';
|
|
87
|
+
*
|
|
88
|
+
* const pool = new Pool({connectionString: process.env.ZERO_UPSTREAM_DB!});
|
|
89
|
+
* const drizzleDb = drizzle(pool, {schema: drizzleSchema});
|
|
90
|
+
*
|
|
91
|
+
* const zql = zeroDrizzle(schema, drizzleDb);
|
|
92
|
+
*
|
|
93
|
+
* // Define the server mutator transaction type using the helper
|
|
94
|
+
* type ServerTx = ServerTransaction<Schema, DrizzleTransaction<typeof drizzleDb>>;
|
|
95
|
+
*
|
|
96
|
+
* async function createUser(
|
|
97
|
+
* tx: ServerTx,
|
|
98
|
+
* {id, name}: {id: string; name: string},
|
|
99
|
+
* ) {
|
|
100
|
+
* await tx.dbTransaction.wrappedTransaction
|
|
101
|
+
* .insert(drizzleSchema.user)
|
|
102
|
+
* .values({id, name})
|
|
103
|
+
* }
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export function zeroDrizzle(schema, client) {
|
|
107
|
+
return new ZQLDatabase(new DrizzleConnection(client), schema);
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=drizzle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle.js","sourceRoot":"","sources":["../../../../../zero-server/src/adapters/drizzle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Schema } from '../../../zero-schema/src/builder/schema-builder.ts';
|
|
2
|
+
import type { DBConnection, DBTransaction, Row } from '../../../zql/src/mutate/custom.ts';
|
|
3
|
+
import { Client, Pool, type PoolClient } from 'pg';
|
|
4
|
+
import { ZQLDatabase } from '../zql-database.ts';
|
|
5
|
+
/**
|
|
6
|
+
* Helper type for the wrapped transaction used by node-postgres.
|
|
7
|
+
*
|
|
8
|
+
* @remarks Use with `ServerTransaction` as `ServerTransaction<Schema, NodePgTransaction>`.
|
|
9
|
+
*/
|
|
10
|
+
export type NodePgTransaction = Pool | PoolClient | Client;
|
|
11
|
+
export declare class NodePgConnection implements DBConnection<NodePgTransaction> {
|
|
12
|
+
#private;
|
|
13
|
+
constructor(pool: NodePgTransaction);
|
|
14
|
+
transaction<TRet>(fn: (tx: DBTransaction<NodePgTransaction>) => Promise<TRet>): Promise<TRet>;
|
|
15
|
+
}
|
|
16
|
+
export declare class NodePgTransactionInternal implements DBTransaction<NodePgTransaction> {
|
|
17
|
+
readonly wrappedTransaction: NodePgTransaction;
|
|
18
|
+
constructor(client: NodePgTransaction);
|
|
19
|
+
query(sql: string, params: unknown[]): Promise<Row[]>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Wrap a `pg` Pool for Zero ZQL.
|
|
23
|
+
*
|
|
24
|
+
* Provides ZQL querying plus access to the underlying node-postgres client.
|
|
25
|
+
* Use {@link NodePgTransaction} to type your server mutator transaction.
|
|
26
|
+
*
|
|
27
|
+
* @param schema - Zero schema.
|
|
28
|
+
* @param pg - `pg` Pool or connection string.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* import {Pool} from 'pg';
|
|
33
|
+
*
|
|
34
|
+
* const pool = new Pool({connectionString: process.env.ZERO_UPSTREAM_DB!});
|
|
35
|
+
* const zql = zeroNodePg(schema, pool);
|
|
36
|
+
*
|
|
37
|
+
* // Define the server mutator transaction type using the helper
|
|
38
|
+
* type ServerTx = ServerTransaction<
|
|
39
|
+
* Schema,
|
|
40
|
+
* NodePgTransaction
|
|
41
|
+
* >;
|
|
42
|
+
*
|
|
43
|
+
* async function createUser(
|
|
44
|
+
* tx: ServerTx,
|
|
45
|
+
* {id, name}: {id: string; name: string},
|
|
46
|
+
* ) {
|
|
47
|
+
* await tx.dbTransaction.wrappedTransaction
|
|
48
|
+
* .query('SELECT * FROM "user" WHERE id = $1', [id]);
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function zeroNodePg<S extends Schema>(schema: S, pg: NodePgTransaction | string): ZQLDatabase<S, NodePgTransaction>;
|
|
53
|
+
//# sourceMappingURL=pg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../../../../zero-server/src/adapters/pg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,oDAAoD,CAAC;AAC/E,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,GAAG,EACJ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,UAAU,EAAC,MAAM,IAAI,CAAC;AACjD,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC;AAE3D,qBAAa,gBAAiB,YAAW,YAAY,CAAC,iBAAiB,CAAC;;gBAE1D,IAAI,EAAE,iBAAiB;IAI7B,WAAW,CAAC,IAAI,EACpB,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAC1D,OAAO,CAAC,IAAI,CAAC;CAqBjB;AAED,qBAAa,yBACX,YAAW,aAAa,CAAC,iBAAiB,CAAC;IAE3C,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;gBACnC,MAAM,EAAE,iBAAiB;IAI/B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;CAI5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,MAAM,EAAE,CAAC,EACT,EAAE,EAAE,iBAAiB,GAAG,MAAM,qCAM/B"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Client, Pool } from 'pg';
|
|
2
|
+
import { ZQLDatabase } from "../zql-database.js";
|
|
3
|
+
export class NodePgConnection {
|
|
4
|
+
#pool;
|
|
5
|
+
constructor(pool) {
|
|
6
|
+
this.#pool = pool;
|
|
7
|
+
}
|
|
8
|
+
async transaction(fn) {
|
|
9
|
+
const client = this.#pool instanceof Pool ? await this.#pool.connect() : this.#pool;
|
|
10
|
+
try {
|
|
11
|
+
await client.query('BEGIN');
|
|
12
|
+
const result = await fn(new NodePgTransactionInternal(client));
|
|
13
|
+
await client.query('COMMIT');
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
try {
|
|
18
|
+
await client.query('ROLLBACK');
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// ignore rollback error; original error will be thrown
|
|
22
|
+
}
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
if (this.#pool instanceof Pool && 'release' in client) {
|
|
27
|
+
client.release();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export class NodePgTransactionInternal {
|
|
33
|
+
wrappedTransaction;
|
|
34
|
+
constructor(client) {
|
|
35
|
+
this.wrappedTransaction = client;
|
|
36
|
+
}
|
|
37
|
+
async query(sql, params) {
|
|
38
|
+
const res = await this.wrappedTransaction.query(sql, params);
|
|
39
|
+
return res.rows;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Wrap a `pg` Pool for Zero ZQL.
|
|
44
|
+
*
|
|
45
|
+
* Provides ZQL querying plus access to the underlying node-postgres client.
|
|
46
|
+
* Use {@link NodePgTransaction} to type your server mutator transaction.
|
|
47
|
+
*
|
|
48
|
+
* @param schema - Zero schema.
|
|
49
|
+
* @param pg - `pg` Pool or connection string.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* import {Pool} from 'pg';
|
|
54
|
+
*
|
|
55
|
+
* const pool = new Pool({connectionString: process.env.ZERO_UPSTREAM_DB!});
|
|
56
|
+
* const zql = zeroNodePg(schema, pool);
|
|
57
|
+
*
|
|
58
|
+
* // Define the server mutator transaction type using the helper
|
|
59
|
+
* type ServerTx = ServerTransaction<
|
|
60
|
+
* Schema,
|
|
61
|
+
* NodePgTransaction
|
|
62
|
+
* >;
|
|
63
|
+
*
|
|
64
|
+
* async function createUser(
|
|
65
|
+
* tx: ServerTx,
|
|
66
|
+
* {id, name}: {id: string; name: string},
|
|
67
|
+
* ) {
|
|
68
|
+
* await tx.dbTransaction.wrappedTransaction
|
|
69
|
+
* .query('SELECT * FROM "user" WHERE id = $1', [id]);
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export function zeroNodePg(schema, pg) {
|
|
74
|
+
if (typeof pg === 'string') {
|
|
75
|
+
pg = new Pool({ connectionString: pg });
|
|
76
|
+
}
|
|
77
|
+
return new ZQLDatabase(new NodePgConnection(pg), schema);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=pg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pg.js","sourceRoot":"","sources":["../../../../../zero-server/src/adapters/pg.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,MAAM,EAAE,IAAI,EAAkB,MAAM,IAAI,CAAC;AACjD,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAS/C,MAAM,OAAO,gBAAgB;IAClB,KAAK,CAAoB;IAClC,YAAY,IAAuB;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,WAAW,CACf,EAA2D;QAE3D,MAAM,MAAM,GACV,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACvE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/D,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,uDAAuD;YACzD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,CAAC,KAAK,YAAY,IAAI,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;gBACtD,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,yBAAyB;IAG3B,kBAAkB,CAAoB;IAC/C,YAAY,MAAyB;QACnC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAiB;QACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,MAAmB,CAAC,CAAC;QAC1E,OAAO,GAAG,CAAC,IAAa,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,UAAU,CACxB,MAAS,EACT,EAA8B;IAE9B,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,EAAE,GAAG,IAAI,IAAI,CAAC,EAAC,gBAAgB,EAAE,EAAE,EAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,WAAW,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -1,25 +1,54 @@
|
|
|
1
1
|
import type { Schema } from '../../../zero-schema/src/builder/schema-builder.ts';
|
|
2
|
-
import type { DBConnection, DBTransaction } from '../../../zql/src/mutate/custom.ts';
|
|
2
|
+
import type { DBConnection, DBTransaction, Row } from '../../../zql/src/mutate/custom.ts';
|
|
3
3
|
import postgres from 'postgres';
|
|
4
4
|
import { ZQLDatabase } from '../zql-database.ts';
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Helper type for the wrapped transaction used by postgres.js.
|
|
7
|
+
*
|
|
8
|
+
* @typeParam T - The row-shape context bound to the postgres.js client.
|
|
9
|
+
* @remarks Use with `ServerTransaction` as `ServerTransaction<Schema, PostgresJsTransaction>`.
|
|
10
|
+
*/
|
|
11
|
+
export type PostgresJsTransaction<T extends Record<string, unknown> = Record<string, unknown>> = postgres.TransactionSql<T>;
|
|
12
|
+
export declare class PostgresJSConnection<T extends Record<string, unknown>> implements DBConnection<PostgresJsTransaction<T>> {
|
|
6
13
|
#private;
|
|
7
14
|
constructor(pg: postgres.Sql<T>);
|
|
8
|
-
transaction<TRet>(fn: (tx: DBTransaction<
|
|
15
|
+
transaction<TRet>(fn: (tx: DBTransaction<PostgresJsTransaction<T>>) => Promise<TRet>): Promise<TRet>;
|
|
16
|
+
}
|
|
17
|
+
export declare class PostgresJsTransactionInternal<T extends Record<string, unknown>> implements DBTransaction<PostgresJsTransaction<T>> {
|
|
18
|
+
readonly wrappedTransaction: PostgresJsTransaction<T>;
|
|
19
|
+
constructor(pgTx: PostgresJsTransaction<T>);
|
|
20
|
+
query(sql: string, params: unknown[]): Promise<Row[]>;
|
|
9
21
|
}
|
|
10
22
|
/**
|
|
11
|
-
*
|
|
23
|
+
* Wrap a `postgres` client for Zero ZQL.
|
|
24
|
+
*
|
|
25
|
+
* Provides ZQL querying plus access to the underlying postgres.js transaction.
|
|
26
|
+
* Use {@link PostgresJsTransaction} to type your server mutator transaction.
|
|
27
|
+
*
|
|
28
|
+
* @param schema - Zero schema.
|
|
29
|
+
* @param pg - `postgres` client or connection string.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
12
32
|
* ```ts
|
|
13
33
|
* import postgres from 'postgres';
|
|
14
|
-
* const processor = new PushProcessor(
|
|
15
|
-
* zeroPostgresJS(schema, postgres(process.env.ZERO_UPSTREAM_DB as string)),
|
|
16
|
-
* );
|
|
17
34
|
*
|
|
18
|
-
*
|
|
19
|
-
* const
|
|
20
|
-
*
|
|
21
|
-
* //
|
|
35
|
+
* const sql = postgres(process.env.ZERO_UPSTREAM_DB!);
|
|
36
|
+
* const zql = zeroPostgresJS(schema, sql);
|
|
37
|
+
*
|
|
38
|
+
* // Define the server mutator transaction type using the helper
|
|
39
|
+
* type ServerTx = ServerTransaction<
|
|
40
|
+
* Schema,
|
|
41
|
+
* PostgresJsTransaction
|
|
42
|
+
* >;
|
|
43
|
+
*
|
|
44
|
+
* async function createUser(
|
|
45
|
+
* tx: ServerTx,
|
|
46
|
+
* {id, name}: {id: string; name: string},
|
|
47
|
+
* ) {
|
|
48
|
+
* await tx.dbTransaction.wrappedTransaction
|
|
49
|
+
* .unsafe('INSERT INTO "user" (id, name) VALUES ($1, $2)', [id, name]);
|
|
50
|
+
* }
|
|
22
51
|
* ```
|
|
23
52
|
*/
|
|
24
|
-
export declare function zeroPostgresJS<S extends Schema, T extends Record<string, unknown> = Record<string, unknown>>(schema: S, pg: postgres.Sql<T> | string): ZQLDatabase<S,
|
|
53
|
+
export declare function zeroPostgresJS<S extends Schema, T extends Record<string, unknown> = Record<string, unknown>>(schema: S, pg: postgres.Sql<T> | string): ZQLDatabase<S, PostgresJsTransaction<T>>;
|
|
25
54
|
//# sourceMappingURL=postgresjs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresjs.d.ts","sourceRoot":"","sources":["../../../../../zero-server/src/adapters/postgresjs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,oDAAoD,CAAC;AAC/E,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,
|
|
1
|
+
{"version":3,"file":"postgresjs.d.ts","sourceRoot":"","sources":["../../../../../zero-server/src/adapters/postgresjs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,oDAAoD,CAAC;AAC/E,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,GAAG,EACJ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,CAC/B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACzD,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAE/B,qBAAa,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACjE,YAAW,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;;gBAGrC,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAI/B,WAAW,CAAC,IAAI,EACd,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GACjE,OAAO,CAAC,IAAI,CAAC;CAKjB;AAED,qBAAa,6BAA6B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC1E,YAAW,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAElD,QAAQ,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAI1C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;CAGtD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,cAAc,CAC5B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,4CAKxC"}
|
|
@@ -6,10 +6,10 @@ export class PostgresJSConnection {
|
|
|
6
6
|
this.#pg = pg;
|
|
7
7
|
}
|
|
8
8
|
transaction(fn) {
|
|
9
|
-
return this.#pg.begin(pgTx => fn(new
|
|
9
|
+
return this.#pg.begin(pgTx => fn(new PostgresJsTransactionInternal(pgTx)));
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
-
class
|
|
12
|
+
export class PostgresJsTransactionInternal {
|
|
13
13
|
wrappedTransaction;
|
|
14
14
|
constructor(pgTx) {
|
|
15
15
|
this.wrappedTransaction = pgTx;
|
|
@@ -19,17 +19,34 @@ class Transaction {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Wrap a `postgres` client for Zero ZQL.
|
|
23
|
+
*
|
|
24
|
+
* Provides ZQL querying plus access to the underlying postgres.js transaction.
|
|
25
|
+
* Use {@link PostgresJsTransaction} to type your server mutator transaction.
|
|
26
|
+
*
|
|
27
|
+
* @param schema - Zero schema.
|
|
28
|
+
* @param pg - `postgres` client or connection string.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
23
31
|
* ```ts
|
|
24
32
|
* import postgres from 'postgres';
|
|
25
|
-
* const processor = new PushProcessor(
|
|
26
|
-
* zeroPostgresJS(schema, postgres(process.env.ZERO_UPSTREAM_DB as string)),
|
|
27
|
-
* );
|
|
28
33
|
*
|
|
29
|
-
*
|
|
30
|
-
* const
|
|
31
|
-
*
|
|
32
|
-
* //
|
|
34
|
+
* const sql = postgres(process.env.ZERO_UPSTREAM_DB!);
|
|
35
|
+
* const zql = zeroPostgresJS(schema, sql);
|
|
36
|
+
*
|
|
37
|
+
* // Define the server mutator transaction type using the helper
|
|
38
|
+
* type ServerTx = ServerTransaction<
|
|
39
|
+
* Schema,
|
|
40
|
+
* PostgresJsTransaction
|
|
41
|
+
* >;
|
|
42
|
+
*
|
|
43
|
+
* async function createUser(
|
|
44
|
+
* tx: ServerTx,
|
|
45
|
+
* {id, name}: {id: string; name: string},
|
|
46
|
+
* ) {
|
|
47
|
+
* await tx.dbTransaction.wrappedTransaction
|
|
48
|
+
* .unsafe('INSERT INTO "user" (id, name) VALUES ($1, $2)', [id, name]);
|
|
49
|
+
* }
|
|
33
50
|
* ```
|
|
34
51
|
*/
|
|
35
52
|
export function zeroPostgresJS(schema, pg) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresjs.js","sourceRoot":"","sources":["../../../../../zero-server/src/adapters/postgresjs.ts"],"names":[],"mappings":"AAOA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"postgresjs.js","sourceRoot":"","sources":["../../../../../zero-server/src/adapters/postgresjs.ts"],"names":[],"mappings":"AAOA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAY/C,MAAM,OAAO,oBAAoB;IAGtB,GAAG,CAAkB;IAC9B,YAAY,EAAmB;QAC7B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,WAAW,CACT,EAAkE;QAElE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAC3B,EAAE,CAAC,IAAI,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAC3B,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,6BAA6B;IAG/B,kBAAkB,CAA2B;IACtD,YAAY,IAA8B;QACxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,MAAiB;QAClC,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAqB,CAAC,CAAC;IACpE,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,cAAc,CAG5B,MAAS,EAAE,EAA4B;IACvC,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAoB,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,WAAW,CAAC,IAAI,oBAAoB,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { pushBodySchema, pushParamsSchema, } from "../../zero-protocol/src/push.js";
|
|
2
2
|
import * as v from "../../shared/src/valita.js";
|
|
3
|
-
import { MutationAlreadyProcessedError } from "../../zero-cache/src/services/mutagen/
|
|
3
|
+
import { MutationAlreadyProcessedError } from "../../zero-cache/src/services/mutagen/error.js";
|
|
4
4
|
import { createLogContext } from "./logging.js";
|
|
5
5
|
import { assert } from "../../shared/src/asserts.js";
|
|
6
6
|
export async function handleMutationRequest(cb, queryOrQueryString, body, logLevel) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-mutations.js","sourceRoot":"","sources":["../../../../zero-server/src/process-mutations.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,gBAAgB,GAMjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,CAAC,MAAM,4BAA4B,CAAC;AAChD,OAAO,EAAC,6BAA6B,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"process-mutations.js","sourceRoot":"","sources":["../../../../zero-server/src/process-mutations.ts"],"names":[],"mappings":"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"}
|
package/out/zero.js
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
syncedQuery,
|
|
10
10
|
syncedQueryWithContext,
|
|
11
11
|
withValidation
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-IEDJQDZ2.js";
|
|
13
13
|
import {
|
|
14
14
|
IDBNotFoundError,
|
|
15
15
|
TransactionClosedError,
|
|
@@ -29,11 +29,11 @@ import {
|
|
|
29
29
|
transformRequestMessageSchema,
|
|
30
30
|
transformResponseMessageSchema,
|
|
31
31
|
update_needed_reason_type_enum_exports
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-Y6JQACOR.js";
|
|
33
33
|
import "./chunk-ASRS2LFV.js";
|
|
34
34
|
import {
|
|
35
35
|
applyChange
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-INWZY4XP.js";
|
|
37
37
|
import "./chunk-SGW2EIVJ.js";
|
|
38
38
|
import "./chunk-424PT5DM.js";
|
|
39
39
|
export {
|
|
@@ -57,7 +57,7 @@ export declare class TableSource implements Source {
|
|
|
57
57
|
export declare function filtersToSQL(filters: NoSubqueryCondition): SQLQuery;
|
|
58
58
|
export declare function toSQLiteTypes(columns: readonly string[], row: Row, columnTypes: Record<string, SchemaValue>): readonly unknown[];
|
|
59
59
|
export declare function toSQLiteTypeName(type: ValueType): "INTEGER" | "REAL" | "TEXT" | "NULL";
|
|
60
|
-
export declare function fromSQLiteTypes(valueTypes: Record<string, SchemaValue>, row: Row): Row;
|
|
60
|
+
export declare function fromSQLiteTypes(valueTypes: Record<string, SchemaValue>, row: Row, tableName?: string): Row;
|
|
61
61
|
export declare class UnsupportedValueError extends Error {
|
|
62
62
|
}
|
|
63
63
|
//# sourceMappingURL=table-source.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-source.d.ts","sourceRoot":"","sources":["../../../../zqlite/src/table-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,+BAA+B,CAAC;AAM7D,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EAGT,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAC,GAAG,EAAQ,MAAM,iCAAiC,CAAC;AAEhE,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACV,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;AAWzC,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,eAAe,EACf,WAAW,EACZ,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAC,QAAQ,EAAY,MAAM,SAAS,CAAC;AAG5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,yCAAyC,CAAC;AAa3E;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAY,YAAW,MAAM;;gBActC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAgB5C,IAAI,KAAK,WAER;IAED;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,QAAQ;IA4FlB,OAAO,CACL,IAAI,EAAE,QAAQ,EACd,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,EAC/B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,EACvC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS;IAsCnC,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;IAsF1B,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI;IAMjD,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe;IA6G/C;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,SAAS;CAuFrC;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,QAAQ,CAmBnE;AA6KD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACvC,SAAS,OAAO,EAAE,CAEpB;AAeD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,wCAa/C;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACvC,GAAG,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"table-source.d.ts","sourceRoot":"","sources":["../../../../zqlite/src/table-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,+BAA+B,CAAC;AAM7D,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EAGT,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAC,GAAG,EAAQ,MAAM,iCAAiC,CAAC;AAEhE,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACV,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;AAWzC,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,eAAe,EACf,WAAW,EACZ,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAC,QAAQ,EAAY,MAAM,SAAS,CAAC;AAG5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,yCAAyC,CAAC;AAa3E;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAY,YAAW,MAAM;;gBActC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAgB5C,IAAI,KAAK,WAER;IAED;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,QAAQ;IA4FlB,OAAO,CACL,IAAI,EAAE,QAAQ,EACd,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,EAC/B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,EACvC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS;IAsCnC,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;IAsF1B,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI;IAMjD,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe;IA6G/C;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,SAAS;CAuFrC;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,QAAQ,CAmBnE;AA6KD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACvC,SAAS,OAAO,EAAE,CAEpB;AAeD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,wCAa/C;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACvC,GAAG,EAAE,GAAG,EACR,SAAS,CAAC,EAAE,MAAM,GACjB,GAAG,CAeL;AA2CD,qBAAa,qBAAsB,SAAQ,KAAK;CAAG"}
|
|
@@ -160,7 +160,7 @@ export class TableSource {
|
|
|
160
160
|
if (result.done) {
|
|
161
161
|
break;
|
|
162
162
|
}
|
|
163
|
-
const row = fromSQLiteTypes(valueTypes, result.value);
|
|
163
|
+
const row = fromSQLiteTypes(valueTypes, result.value, this.#table);
|
|
164
164
|
debug?.rowVended(this.#table, query, row);
|
|
165
165
|
yield row;
|
|
166
166
|
} while (!result.done);
|
|
@@ -250,7 +250,7 @@ export class TableSource {
|
|
|
250
250
|
const stmt = this.#getRowStmt(keyCols);
|
|
251
251
|
const row = this.#stmts.cache.use(stmt, cached => cached.statement.safeIntegers(true).get(keyVals));
|
|
252
252
|
if (row) {
|
|
253
|
-
return fromSQLiteTypes(this.#columns, row);
|
|
253
|
+
return fromSQLiteTypes(this.#columns, row, this.#table);
|
|
254
254
|
}
|
|
255
255
|
return row;
|
|
256
256
|
}
|
|
@@ -466,18 +466,21 @@ export function toSQLiteTypeName(type) {
|
|
|
466
466
|
return 'TEXT';
|
|
467
467
|
}
|
|
468
468
|
}
|
|
469
|
-
export function fromSQLiteTypes(valueTypes, row) {
|
|
469
|
+
export function fromSQLiteTypes(valueTypes, row, tableName) {
|
|
470
470
|
const newRow = {};
|
|
471
471
|
for (const key of Object.keys(row)) {
|
|
472
472
|
const valueType = valueTypes[key];
|
|
473
473
|
if (valueType === undefined) {
|
|
474
|
-
|
|
474
|
+
const columnList = Object.keys(valueTypes).sort().join(', ');
|
|
475
|
+
throw new Error(tableName
|
|
476
|
+
? `Invalid column "${key}" for table "${tableName}". Synced columns include ${columnList}`
|
|
477
|
+
: `Invalid column "${key}". Synced columns include ${columnList}`);
|
|
475
478
|
}
|
|
476
|
-
newRow[key] = fromSQLiteType(valueType.type, row[key], key);
|
|
479
|
+
newRow[key] = fromSQLiteType(valueType.type, row[key], key, tableName);
|
|
477
480
|
}
|
|
478
481
|
return newRow;
|
|
479
482
|
}
|
|
480
|
-
function fromSQLiteType(valueType, v, column) {
|
|
483
|
+
function fromSQLiteType(valueType, v, column, tableName) {
|
|
481
484
|
if (v === null) {
|
|
482
485
|
return null;
|
|
483
486
|
}
|
|
@@ -489,13 +492,23 @@ function fromSQLiteType(valueType, v, column) {
|
|
|
489
492
|
case 'null':
|
|
490
493
|
if (typeof v === 'bigint') {
|
|
491
494
|
if (v > Number.MAX_SAFE_INTEGER || v < Number.MIN_SAFE_INTEGER) {
|
|
492
|
-
throw new UnsupportedValueError(
|
|
495
|
+
throw new UnsupportedValueError(tableName
|
|
496
|
+
? `value ${v} (in ${tableName}.${column}) is outside of supported bounds`
|
|
497
|
+
: `value ${v} (in column ${column}) is outside of supported bounds`);
|
|
493
498
|
}
|
|
494
499
|
return Number(v);
|
|
495
500
|
}
|
|
496
501
|
return v;
|
|
497
502
|
case 'json':
|
|
498
|
-
|
|
503
|
+
try {
|
|
504
|
+
return JSON.parse(v);
|
|
505
|
+
}
|
|
506
|
+
catch (error) {
|
|
507
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
508
|
+
throw new UnsupportedValueError(tableName
|
|
509
|
+
? `Failed to parse JSON for ${tableName}.${column}: ${errorMessage}`
|
|
510
|
+
: `Failed to parse JSON for column "${column}": ${errorMessage}`);
|
|
511
|
+
}
|
|
499
512
|
}
|
|
500
513
|
}
|
|
501
514
|
export class UnsupportedValueError extends Error {
|