@rocicorp/zero 0.24.2025093001 → 0.24.2025100800
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/{chunk-QCPDXNFF.js → chunk-ASFIXQH7.js} +2 -4
- package/out/chunk-ASFIXQH7.js.map +7 -0
- package/out/{chunk-L2ZHMO4E.js → chunk-QROPZW7G.js} +2 -2
- package/out/chunk-X7SAVR5O.js +220 -0
- package/out/chunk-X7SAVR5O.js.map +7 -0
- package/out/react-native.js +5 -208
- package/out/react-native.js.map +3 -3
- package/out/react.js +1 -1
- package/out/replicache/src/sqlite.d.ts +3 -0
- package/out/replicache/src/sqlite.d.ts.map +1 -0
- package/out/solid.js +2 -2
- package/out/sqlite.js +14 -0
- package/out/sqlite.js.map +7 -0
- package/out/zero/package.json +14 -10
- 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/sqlite.d.ts +2 -0
- package/out/zero/src/sqlite.d.ts.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/change-source/pg/logical-replication/stream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +15 -14
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
- package/out/zero-client/src/client/zero.d.ts.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.js +2 -2
- package/package.json +14 -10
- package/out/chunk-QCPDXNFF.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-L2ZHMO4E.js.map → chunk-QROPZW7G.js.map} +0 -0
package/out/zero/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rocicorp/zero",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.2025100800",
|
|
4
4
|
"description": "Zero is a web framework for serverless web development.",
|
|
5
5
|
"author": "Rocicorp, Inc.",
|
|
6
6
|
"repository": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"@rocicorp/lock": "^1.0.4",
|
|
48
48
|
"@rocicorp/logger": "^5.4.0",
|
|
49
49
|
"@rocicorp/resolver": "^1.0.2",
|
|
50
|
-
"@rocicorp/zero-sqlite3": "^1.0.
|
|
50
|
+
"@rocicorp/zero-sqlite3": "^1.0.9",
|
|
51
51
|
"@types/basic-auth": "^1.1.8",
|
|
52
52
|
"basic-auth": "^2.0.1",
|
|
53
53
|
"chalk": "^5.3.0",
|
|
@@ -76,7 +76,6 @@
|
|
|
76
76
|
"ws": "^8.18.1"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
|
-
"@rocicorp/eslint-config": "^0.7.0",
|
|
80
79
|
"@rocicorp/prettier-config": "^0.3.0",
|
|
81
80
|
"@vitest/runner": "3.2.4",
|
|
82
81
|
"esbuild": "^0.25.0",
|
|
@@ -114,12 +113,16 @@
|
|
|
114
113
|
"default": "./out/zero/src/server.js"
|
|
115
114
|
},
|
|
116
115
|
"./server/adapters/postgresjs": {
|
|
117
|
-
"types": "./out/zero-server/src/adapters/
|
|
116
|
+
"types": "./out/zero-server/src/adapters/postgresjs.d.ts",
|
|
118
117
|
"default": "./out/zero/src/adapters/postgresjs.js"
|
|
119
118
|
},
|
|
120
|
-
"./server/adapters/
|
|
121
|
-
"types": "./out/zero-server/src/adapters/
|
|
122
|
-
"default": "./out/zero/src/adapters/
|
|
119
|
+
"./server/adapters/pg": {
|
|
120
|
+
"types": "./out/zero-server/src/adapters/pg.d.ts",
|
|
121
|
+
"default": "./out/zero/src/adapters/pg.js"
|
|
122
|
+
},
|
|
123
|
+
"./server/adapters/drizzle": {
|
|
124
|
+
"types": "./out/zero-server/src/adapters/drizzle.d.ts",
|
|
125
|
+
"default": "./out/zero/src/adapters/drizzle.js"
|
|
123
126
|
},
|
|
124
127
|
"./solid": {
|
|
125
128
|
"types": "./out/zero-solid/src/mod.d.ts",
|
|
@@ -140,6 +143,10 @@
|
|
|
140
143
|
"./react-native": {
|
|
141
144
|
"types": "./out/zero-react-native/src/mod.d.ts",
|
|
142
145
|
"default": "./out/react-native.js"
|
|
146
|
+
},
|
|
147
|
+
"./sqlite": {
|
|
148
|
+
"types": "./out/zero/src/sqlite.d.ts",
|
|
149
|
+
"default": "./out/sqlite.js"
|
|
143
150
|
}
|
|
144
151
|
},
|
|
145
152
|
"bin": {
|
|
@@ -158,8 +165,5 @@
|
|
|
158
165
|
"out",
|
|
159
166
|
"!*.tsbuildinfo"
|
|
160
167
|
],
|
|
161
|
-
"eslintConfig": {
|
|
162
|
-
"extends": "../../eslint-config.json"
|
|
163
|
-
},
|
|
164
168
|
"prettier": "@rocicorp/prettier-config"
|
|
165
169
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../../../src/adapters/drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,8CAA8C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle.js","sourceRoot":"","sources":["../../../../src/adapters/drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAIZ,MAAM,8CAA8C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../../../src/adapters/pg.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pg.js","sourceRoot":"","sources":["../../../../src/adapters/pg.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/sqlite.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC"}
|
|
@@ -36,8 +36,12 @@ async function main() {
|
|
|
36
36
|
lc.error?.('Exiting');
|
|
37
37
|
process.exit(-1);
|
|
38
38
|
});
|
|
39
|
-
|
|
40
|
-
const {
|
|
39
|
+
// Parse options for each subprocess to get environment variables
|
|
40
|
+
const { env: deployPermissionsEnv } = parseOptionsAdvanced(deployPermissionsOptions, {
|
|
41
|
+
envNamePrefix: ZERO_ENV_VAR_PREFIX,
|
|
42
|
+
allowUnknown: true,
|
|
43
|
+
});
|
|
44
|
+
const { env: zeroCacheEnv } = parseOptionsAdvanced(zeroOptions, {
|
|
41
45
|
envNamePrefix: ZERO_ENV_VAR_PREFIX,
|
|
42
46
|
allowUnknown: true,
|
|
43
47
|
});
|
|
@@ -58,7 +62,8 @@ async function main() {
|
|
|
58
62
|
await killProcess(permissionsProcess);
|
|
59
63
|
permissionsProcess = undefined;
|
|
60
64
|
lc.info?.(`Running ${deployPermissionsScript}.`);
|
|
61
|
-
permissionsProcess = spawn(deployPermissionsScript,
|
|
65
|
+
permissionsProcess = spawn(deployPermissionsScript, [], {
|
|
66
|
+
env: { ...process.env, ...deployPermissionsEnv },
|
|
62
67
|
stdio: 'inherit',
|
|
63
68
|
shell: true,
|
|
64
69
|
});
|
|
@@ -89,8 +94,9 @@ async function main() {
|
|
|
89
94
|
['NODE_ENV']: 'development',
|
|
90
95
|
// But let the developer override any of these dev defaults.
|
|
91
96
|
...process.env,
|
|
97
|
+
...zeroCacheEnv,
|
|
92
98
|
};
|
|
93
|
-
zeroCacheProcess = spawn(zeroCacheScript,
|
|
99
|
+
zeroCacheProcess = spawn(zeroCacheScript, [], {
|
|
94
100
|
env,
|
|
95
101
|
stdio: 'inherit',
|
|
96
102
|
shell: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zero-cache-dev.js","sourceRoot":"","sources":["../../../src/zero-cache-dev.ts"],"names":[],"mappings":";AACA,+BAA+B;AAE/B,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAC,KAAK,EAAC,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAC,KAAK,EAAoB,MAAM,oBAAoB,CAAC;AAC5D,OAAO,4BAA4B,CAAC;AACpC,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,WAAW,GACZ,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAC,wBAAwB,EAAC,MAAM,6CAA6C,CAAC;AAErF,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAC1D,MAAM,eAAe,GAAG,YAAY,CAAC;AAErC,SAAS,WAAW,CAAC,YAAsC;IACzD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,QAAQ,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,kDAAkD;IAClD,0DAA0D;IAC1D,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,EAAC,MAAM,EAAC,GAAG,oBAAoB,CACnC;QACE,GAAG,wBAAwB;QAC3B,GAAG,WAAW;KACf,EACD;QACE,aAAa,EAAE,mBAAmB;QAClC,wEAAwE;QACxE,YAAY,EAAE,IAAI,EAAE,sCAAsC;KAC3D,CACF,CAAC;IAEF,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAAE;QACxC,EAAE,CAAC,KAAK,EAAE,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;QACtD,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,MAAM,EAAC,
|
|
1
|
+
{"version":3,"file":"zero-cache-dev.js","sourceRoot":"","sources":["../../../src/zero-cache-dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ async function validatePermissions(db, permissions) {
|
|
|
25
25
|
const schema = upstreamSchema(shard);
|
|
26
26
|
// Check if the shardConfig table has been initialized.
|
|
27
27
|
const result = await db `
|
|
28
|
-
SELECT relname FROM pg_class
|
|
28
|
+
SELECT relname FROM pg_class
|
|
29
29
|
JOIN pg_namespace ON relnamespace = pg_namespace.oid
|
|
30
30
|
WHERE nspname = ${schema} AND relname = ${SHARD_CONFIG_TABLE}`;
|
|
31
31
|
if (result.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/logical-replication/stream.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAKjD,OAAO,EAAC,KAAK,UAAU,EAAC,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAO,KAAK,IAAI,EAAE,KAAK,MAAM,EAAC,MAAM,8BAA8B,CAAC;AAK1E,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/logical-replication/stream.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAKjD,OAAO,EAAC,KAAK,UAAU,EAAC,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAO,KAAK,IAAI,EAAE,KAAK,MAAM,EAAC,MAAM,8BAA8B,CAAC;AAK1E,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAIjD,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG;IAAC,GAAG,EAAE,WAAW,CAAA;CAAC,CAAC,CAAC;AAExE,wBAAsB,SAAS,CAC7B,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,EAAE,MAAM,EACX,8BAA8B,SAA6C,EAC3E,eAAe,SAAoB,GAClC,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;CAAC,CAAC,CA8FhE"}
|
|
@@ -10,16 +10,6 @@ import { AutoResetSignal } from "../../../change-streamer/schema/tables.js";
|
|
|
10
10
|
import { fromBigInt } from "../lsn.js";
|
|
11
11
|
import { PgoutputParser } from "./pgoutput-parser.js";
|
|
12
12
|
const DEFAULT_RETRIES_IF_REPLICATION_SLOT_ACTIVE = 5;
|
|
13
|
-
// Postgres will send keepalives every 30 seconds before timing out
|
|
14
|
-
// a wal_sender. It is possible that these keepalives are not received
|
|
15
|
-
// if there is back-pressure in the replication stream. To keep the
|
|
16
|
-
// connection alive anyway, explicitly send keepalives if none have been sent.
|
|
17
|
-
//
|
|
18
|
-
// Note that although the default wal_sender timeout is 60 seconds
|
|
19
|
-
// (https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-WAL-SENDER-TIMEOUT)
|
|
20
|
-
// this shorter timeout accounts for Neon, which appears to run its instances with
|
|
21
|
-
// a 30 second timeout.
|
|
22
|
-
const MANUAL_KEEPALIVE_TIMEOUT = parseInt(process.env.PG_REPLICATION_STREAM_KEEPALIVE_TIMEOUT ?? '20000');
|
|
23
13
|
export async function subscribe(lc, db, slot, publications, lsn, retriesIfReplicationSlotActive = DEFAULT_RETRIES_IF_REPLICATION_SLOT_ACTIVE, applicationName = 'zero-replicator') {
|
|
24
14
|
const session = postgres(defu({
|
|
25
15
|
max: 1,
|
|
@@ -36,19 +26,31 @@ export async function subscribe(lc, db, slot, publications, lsn, retriesIfReplic
|
|
|
36
26
|
// merge of ParsedOptions and Options here:
|
|
37
27
|
// https://github.com/porsager/postgres/blob/089214e85c23c90cf142d47fb30bd03f42874984/src/subscribe.js#L13
|
|
38
28
|
db.options));
|
|
29
|
+
// Postgres will send keepalives before timing out a wal_sender. It is possible that
|
|
30
|
+
// these keepalives are not received if there is back-pressure in the replication
|
|
31
|
+
// stream. To keep the connection alive, explicitly send keepalives if none have been
|
|
32
|
+
// sent within the last 75% of the wal_sender_timeout.
|
|
33
|
+
//
|
|
34
|
+
// https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-WAL-SENDER-TIMEOUT
|
|
35
|
+
const [{ walSenderTimeoutMs }] = await session `SELECT EXTRACT(EPOCH FROM (setting || unit)::interval) * 1000
|
|
36
|
+
AS "walSenderTimeoutMs" FROM pg_settings
|
|
37
|
+
WHERE name = 'wal_sender_timeout'`.simple();
|
|
38
|
+
const manualKeepaliveTimeout = Math.floor(walSenderTimeoutMs * 0.75);
|
|
39
|
+
lc.info?.(`wal_sender_timeout: ${walSenderTimeoutMs}ms. ` +
|
|
40
|
+
`Ensuring manual keepalives at least every ${manualKeepaliveTimeout}ms`);
|
|
39
41
|
const [readable, writable] = await startReplicationStream(lc, session, slot, publications, lsn, retriesIfReplicationSlotActive + 1);
|
|
40
42
|
let lastAckTime = Date.now();
|
|
41
43
|
function sendAck(lsn) {
|
|
42
44
|
writable.write(makeAck(lsn));
|
|
43
45
|
lastAckTime = Date.now();
|
|
44
|
-
lc.debug?.(`sent ack: ${lsn}`);
|
|
45
46
|
}
|
|
46
47
|
const livenessTimer = setInterval(() => {
|
|
47
48
|
const now = Date.now();
|
|
48
|
-
if (now - lastAckTime >
|
|
49
|
+
if (now - lastAckTime > manualKeepaliveTimeout) {
|
|
49
50
|
sendAck(0n);
|
|
51
|
+
lc.debug?.(`sent manual keepalive`);
|
|
50
52
|
}
|
|
51
|
-
},
|
|
53
|
+
}, manualKeepaliveTimeout / 5);
|
|
52
54
|
let destroyed = false;
|
|
53
55
|
const typeParsers = await getTypeParsers(db);
|
|
54
56
|
const parser = new PgoutputParser(typeParsers);
|
|
@@ -128,7 +130,6 @@ function parseStreamMessage(lc, buffer, parser) {
|
|
|
128
130
|
lc.debug?.(`pg keepalive (shouldRespond: true) ${lsn}`);
|
|
129
131
|
return [lsn, { tag: 'keepalive' }];
|
|
130
132
|
}
|
|
131
|
-
lc.debug?.(`pg keepalive (shouldRespond: false) ${lsn}`);
|
|
132
133
|
return null;
|
|
133
134
|
}
|
|
134
135
|
// https://www.postgresql.org/docs/current/protocol-replication.html#PROTOCOL-REPLICATION-STANDBY-STATUS-UPDATE
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/logical-replication/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mCAAmC,GACpC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,QAAQ,EAAE,EAAiC,MAAM,UAAU,CAAC;AACnE,OAAO,EAAC,KAAK,EAAC,MAAM,uCAAuC,CAAC;AAC5D,OAAO,EAAC,cAAc,EAAC,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAiB,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAC,IAAI,EAAyB,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAC,YAAY,EAAC,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAC,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAC,UAAU,EAAC,MAAM,WAAW,CAAC;AACrC,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAGpD,MAAM,0CAA0C,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/logical-replication/stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zero.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/zero.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"zero.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/zero.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type SQL } from 'drizzle-orm';
|
|
2
|
+
import type { PgDatabase, PgQueryResultHKT, PgTransaction } from 'drizzle-orm/pg-core';
|
|
3
|
+
import type { ExtractTablesWithRelations } from 'drizzle-orm/relations';
|
|
4
|
+
import type { Schema } from '../../../zero-schema/src/builder/schema-builder.ts';
|
|
5
|
+
import type { DBConnection, DBTransaction, Row } from '../../../zql/src/mutate/custom.ts';
|
|
6
|
+
import { ZQLDatabase } from '../zql-database.ts';
|
|
7
|
+
export type DrizzleDatabase<TQueryResult extends PgQueryResultHKT = PgQueryResultHKT, TClient = unknown> = PgDatabase<TQueryResult, Record<string, unknown>> & {
|
|
8
|
+
$client: TClient;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Helper type for the wrapped transaction used by drizzle-orm.
|
|
12
|
+
*
|
|
13
|
+
* @remarks Use with `ServerTransaction` as `ServerTransaction<Schema, DrizzleTransaction<typeof drizzleDb>>`.
|
|
14
|
+
*/
|
|
15
|
+
export type DrizzleTransaction<TDbOrSchema extends DrizzleDatabase<TQueryResult, TClient> | Record<string, unknown>, TQueryResult extends PgQueryResultHKT = PgQueryResultHKT, TClient = unknown, TSchema extends Record<string, unknown> = TDbOrSchema extends PgDatabase<TQueryResult, infer TSchema> ? TSchema : TDbOrSchema> = PgTransaction<TQueryResult, TSchema, ExtractTablesWithRelations<TSchema>>;
|
|
16
|
+
export declare class DrizzleConnection<TDrizzle extends DrizzleDatabase<TQueryResult, TClient> & {
|
|
17
|
+
$client: TClient;
|
|
18
|
+
}, TQueryResult extends PgQueryResultHKT = PgQueryResultHKT, TClient = unknown, TTransaction extends DrizzleTransaction<TDrizzle, TQueryResult, TClient> = DrizzleTransaction<TDrizzle, TQueryResult, TClient>> implements DBConnection<TTransaction> {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(drizzle: TDrizzle);
|
|
21
|
+
transaction<T>(fn: (tx: DBTransaction<TTransaction>) => Promise<T>): Promise<T>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Turn `$1, $2...` placeholders into a Drizzle SQL object with bound params.
|
|
25
|
+
*/
|
|
26
|
+
export declare function fromDollarParams(text: string, params: unknown[]): SQL;
|
|
27
|
+
export declare function toIterableRows(result: unknown): Iterable<Row>;
|
|
28
|
+
/**
|
|
29
|
+
* Wrap a `drizzle-orm` database for Zero ZQL.
|
|
30
|
+
*
|
|
31
|
+
* Provides ZQL querying plus access to the underlying drizzle transaction.
|
|
32
|
+
* Use {@link DrizzleTransaction} to type your server mutator transaction.
|
|
33
|
+
*
|
|
34
|
+
* @param schema - Zero schema.
|
|
35
|
+
* @param client - Drizzle database.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* import {Pool} from 'pg';
|
|
40
|
+
* import {drizzle} from 'drizzle-orm/node-postgres';
|
|
41
|
+
* import type {ServerTransaction} from '@rocicorp/zero';
|
|
42
|
+
*
|
|
43
|
+
* const pool = new Pool({connectionString: process.env.ZERO_UPSTREAM_DB!});
|
|
44
|
+
* const drizzleDb = drizzle(pool, {schema: drizzleSchema});
|
|
45
|
+
*
|
|
46
|
+
* const zql = zeroDrizzle(schema, drizzleDb);
|
|
47
|
+
*
|
|
48
|
+
* // Define the server mutator transaction type using the helper
|
|
49
|
+
* type ServerTx = ServerTransaction<Schema, DrizzleTransaction<typeof drizzleDb>>;
|
|
50
|
+
*
|
|
51
|
+
* async function createUser(
|
|
52
|
+
* tx: ServerTx,
|
|
53
|
+
* {id, name}: {id: string; name: string},
|
|
54
|
+
* ) {
|
|
55
|
+
* await tx.dbTransaction.wrappedTransaction
|
|
56
|
+
* .insert(drizzleSchema.user)
|
|
57
|
+
* .values({id, name})
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function zeroDrizzle<S extends Schema, TDrizzle extends PgDatabase<PgQueryResultHKT, Record<string, unknown>> & {
|
|
62
|
+
$client: TClient;
|
|
63
|
+
}, TClient = unknown>(schema: S, client: TDrizzle): ZQLDatabase<S, DrizzleTransaction<TDrizzle, PgQueryResultHKT, unknown, TDrizzle extends PgDatabase<PgQueryResultHKT, infer TSchema extends Record<string, unknown>, ExtractTablesWithRelations<infer TSchema extends Record<string, unknown>>> ? TSchema : TDrizzle>>;
|
|
64
|
+
//# sourceMappingURL=drizzle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../../../../zero-server/src/adapters/drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,GAAG,EAAC,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,aAAa,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,0BAA0B,EAAC,MAAM,uBAAuB,CAAC;AACtE,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,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAE/C,MAAM,MAAM,eAAe,CACzB,YAAY,SAAS,gBAAgB,GAAG,gBAAgB,EACxD,OAAO,GAAG,OAAO,IACf,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG;IACtD,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAC5B,WAAW,SACP,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,GACtC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3B,YAAY,SAAS,gBAAgB,GAAG,gBAAgB,EACxD,OAAO,GAAG,OAAO,EACjB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,SAAS,UAAU,CACtE,YAAY,EACZ,MAAM,OAAO,CACd,GACG,OAAO,GACP,WAAW,IACb,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;AAE9E,qBAAa,iBAAiB,CAC5B,QAAQ,SAAS,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG;IACxD,OAAO,EAAE,OAAO,CAAC;CAClB,EACD,YAAY,SAAS,gBAAgB,GAAG,gBAAgB,EACxD,OAAO,GAAG,OAAO,EACjB,YAAY,SAAS,kBAAkB,CACrC,QAAQ,EACR,YAAY,EACZ,OAAO,CACR,GAAG,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CACvD,YAAW,YAAY,CAAC,YAAY,CAAC;;gBAIzB,OAAO,EAAE,QAAQ;IAI7B,WAAW,CAAC,CAAC,EACX,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAClD,OAAO,CAAC,CAAC,CAAC;CASd;AA4BD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAiBrE;AASD,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAuB7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,WAAW,CACzB,CAAC,SAAS,MAAM,EAChB,QAAQ,SAAS,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG;IACvE,OAAO,EAAE,OAAO,CAAC;CAClB,EACD,OAAO,GAAG,OAAO,EACjB,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,8HA7JnB,OAAO,mEAAP,OAAO,0DA+JhB"}
|
|
@@ -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"}
|