orez-sync-executor 0.12.1 → 0.12.3
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/core.d.ts +3 -2
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +3 -2
- package/dist/core.js.map +1 -1
- package/dist/crud.d.ts.map +1 -1
- package/dist/crud.js +19 -4
- package/dist/crud.js.map +1 -1
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +33 -0
- package/dist/errors.js.map +1 -1
- package/dist/executor.d.ts +5 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +92 -13
- package/dist/executor.js.map +1 -1
- package/dist/packed-ledger.d.ts +16 -0
- package/dist/packed-ledger.d.ts.map +1 -0
- package/dist/packed-ledger.js +251 -0
- package/dist/packed-ledger.js.map +1 -0
- package/dist/types.d.ts +14 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/write-set.d.ts +7 -0
- package/dist/write-set.d.ts.map +1 -0
- package/dist/write-set.js +196 -0
- package/dist/write-set.js.map +1 -0
- package/package.json +2 -2
- package/dist/adapters.d.ts +0 -25
- package/dist/adapters.d.ts.map +0 -1
- package/dist/adapters.js +0 -116
- package/dist/adapters.js.map +0 -1
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { MutationWriteSetError } from './errors.js';
|
|
2
|
+
const ROTATE_AT_BYTES = 768 * 1_024;
|
|
3
|
+
const MAX_PAYLOAD_BYTES = 1_024 * 1_024;
|
|
4
|
+
function counter(value, name) {
|
|
5
|
+
const parsed = Number(value);
|
|
6
|
+
if (!Number.isSafeInteger(parsed) || parsed < 0) {
|
|
7
|
+
throw new MutationWriteSetError(`packed ledger ${name} is unsafe: ${String(value)}`);
|
|
8
|
+
}
|
|
9
|
+
return parsed;
|
|
10
|
+
}
|
|
11
|
+
function parsePayload(value) {
|
|
12
|
+
if (typeof value !== 'string') {
|
|
13
|
+
throw new MutationWriteSetError('packed ledger payload is not text');
|
|
14
|
+
}
|
|
15
|
+
let parsed;
|
|
16
|
+
try {
|
|
17
|
+
parsed = JSON.parse(value);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new MutationWriteSetError('packed ledger payload is invalid JSON');
|
|
21
|
+
}
|
|
22
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
23
|
+
throw new MutationWriteSetError('packed ledger payload is not an object');
|
|
24
|
+
}
|
|
25
|
+
const payload = parsed;
|
|
26
|
+
if (payload.format !== 1 ||
|
|
27
|
+
!payload.lmids ||
|
|
28
|
+
typeof payload.lmids !== 'object' ||
|
|
29
|
+
Array.isArray(payload.lmids) ||
|
|
30
|
+
!Array.isArray(payload.transactions)) {
|
|
31
|
+
throw new MutationWriteSetError('packed ledger payload has an unknown shape');
|
|
32
|
+
}
|
|
33
|
+
return payload;
|
|
34
|
+
}
|
|
35
|
+
function activeSegment(rows) {
|
|
36
|
+
if (rows.length !== 1) {
|
|
37
|
+
throw new MutationWriteSetError('packed ledger has no active segment');
|
|
38
|
+
}
|
|
39
|
+
return rows[0];
|
|
40
|
+
}
|
|
41
|
+
async function readActiveSegment(tx) {
|
|
42
|
+
return activeSegment(await tx.query(`SELECT "startVersion" AS "startVersion", "endVersion" AS "endVersion",
|
|
43
|
+
"payload" AS "payload", "pending" AS "pending",
|
|
44
|
+
"captureMode" AS "captureMode"
|
|
45
|
+
FROM "_zsync_log_segments" ORDER BY "startVersion" DESC LIMIT 1`));
|
|
46
|
+
}
|
|
47
|
+
function emptyPayload(lmids) {
|
|
48
|
+
return { format: 1, lmids, transactions: [] };
|
|
49
|
+
}
|
|
50
|
+
async function rotatePackedLedger(tx, active, payload) {
|
|
51
|
+
const start = counter(active.startVersion, 'start version');
|
|
52
|
+
const end = counter(active.endVersion, 'end version');
|
|
53
|
+
const mode = counter(active.captureMode, 'capture mode');
|
|
54
|
+
if (mode !== 0 && mode !== 1) {
|
|
55
|
+
throw new MutationWriteSetError('packed ledger capture mode is invalid');
|
|
56
|
+
}
|
|
57
|
+
if (end + 1 < start) {
|
|
58
|
+
throw new MutationWriteSetError('packed ledger segment bounds are invalid');
|
|
59
|
+
}
|
|
60
|
+
if (active.pending !== '[]') {
|
|
61
|
+
throw new MutationWriteSetError('packed ledger cannot rotate with pending trigger keys');
|
|
62
|
+
}
|
|
63
|
+
if (end === Number.MAX_SAFE_INTEGER) {
|
|
64
|
+
throw new MutationWriteSetError('packed ledger version space is exhausted');
|
|
65
|
+
}
|
|
66
|
+
if (mode !== 0) {
|
|
67
|
+
const reset = await tx.exec(`UPDATE "_zsync_log_segments" SET "captureMode" = 0
|
|
68
|
+
WHERE "startVersion" = ? AND "captureMode" = ?`, [start, mode]);
|
|
69
|
+
if (reset.changes !== 1) {
|
|
70
|
+
throw new MutationWriteSetError('packed ledger rotation missed its old segment');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const inserted = await tx.exec(`INSERT INTO "_zsync_log_segments"
|
|
74
|
+
("startVersion", "endVersion", "payload", "pending", "captureMode")
|
|
75
|
+
VALUES (?, ?, ?, '[]', ?)`, [end + 1, end, JSON.stringify(emptyPayload(payload.lmids)), mode]);
|
|
76
|
+
if (inserted.changes !== 1) {
|
|
77
|
+
throw new MutationWriteSetError('packed ledger rotation did not create a segment');
|
|
78
|
+
}
|
|
79
|
+
return readActiveSegment(tx);
|
|
80
|
+
}
|
|
81
|
+
export async function initializePackedLedger(database) {
|
|
82
|
+
if (database.dialect !== 'sqlite')
|
|
83
|
+
return;
|
|
84
|
+
await database.transaction(async (tx) => {
|
|
85
|
+
await tx.exec(`CREATE TABLE IF NOT EXISTS "_zsync_log_segments" (
|
|
86
|
+
"startVersion" INTEGER PRIMARY KEY,
|
|
87
|
+
"endVersion" INTEGER NOT NULL,
|
|
88
|
+
"payload" TEXT NOT NULL,
|
|
89
|
+
"pending" TEXT NOT NULL,
|
|
90
|
+
"captureMode" INTEGER NOT NULL CHECK ("captureMode" IN (0, 1))
|
|
91
|
+
) WITHOUT ROWID`);
|
|
92
|
+
const existing = await tx.query('SELECT COUNT(*) AS "count" FROM "_zsync_log_segments"');
|
|
93
|
+
if (counter(existing[0]?.count ?? 0, 'segment count') > 0)
|
|
94
|
+
return;
|
|
95
|
+
const legacy = await tx.query('SELECT COALESCE(MAX("watermark"), 0) AS "watermark" FROM "_zsync_changes"');
|
|
96
|
+
let head = counter(legacy[0]?.watermark ?? 0, 'legacy watermark');
|
|
97
|
+
const watermarkTable = await tx.query(`SELECT name FROM sqlite_schema WHERE type = 'table' AND name = '_zsync_watermark'`);
|
|
98
|
+
if (watermarkTable.length > 0) {
|
|
99
|
+
const durable = await tx.query('SELECT "high" AS "high" FROM "_zsync_watermark" WHERE "lock" = 1');
|
|
100
|
+
head = Math.max(head, counter(durable[0]?.high ?? 0, 'durable watermark'));
|
|
101
|
+
}
|
|
102
|
+
const clients = await tx.query(`SELECT "clientGroupID" AS "clientGroupID", "clientID" AS "clientID",
|
|
103
|
+
"lastMutationID" AS "lastMutationID" FROM "_zsync_clients"`);
|
|
104
|
+
const lmids = {};
|
|
105
|
+
for (const client of clients) {
|
|
106
|
+
if (typeof client.clientGroupID !== 'string' ||
|
|
107
|
+
typeof client.clientID !== 'string') {
|
|
108
|
+
throw new MutationWriteSetError('packed ledger client identity is invalid');
|
|
109
|
+
}
|
|
110
|
+
const group = (lmids[client.clientGroupID] ??= {});
|
|
111
|
+
group[client.clientID] = String(counter(client.lastMutationID, 'legacy last mutation id'));
|
|
112
|
+
}
|
|
113
|
+
await tx.exec(`INSERT INTO "_zsync_log_segments"
|
|
114
|
+
("startVersion", "endVersion", "payload", "pending", "captureMode")
|
|
115
|
+
VALUES (?, ?, ?, '[]', 0)`, [head + 1, head, JSON.stringify(emptyPayload(lmids))]);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
export async function preparePackedLedger(tx) {
|
|
119
|
+
let active = await readActiveSegment(tx);
|
|
120
|
+
if (counter(active.captureMode, 'capture mode') !== 0 || active.pending !== '[]') {
|
|
121
|
+
throw new MutationWriteSetError('packed ledger has uncommitted capture state');
|
|
122
|
+
}
|
|
123
|
+
const payload = parsePayload(active.payload);
|
|
124
|
+
if (new TextEncoder().encode(active.payload).byteLength >= ROTATE_AT_BYTES) {
|
|
125
|
+
active = await rotatePackedLedger(tx, active, payload);
|
|
126
|
+
}
|
|
127
|
+
return counter(active.endVersion, 'end version');
|
|
128
|
+
}
|
|
129
|
+
export async function setPackedCaptureMode(tx, exact) {
|
|
130
|
+
const result = await tx.exec(`UPDATE "_zsync_log_segments" SET "captureMode" = ?
|
|
131
|
+
WHERE "startVersion" = (SELECT MAX("startVersion") FROM "_zsync_log_segments")`, [exact ? 1 : 0]);
|
|
132
|
+
if (result.changes !== 1) {
|
|
133
|
+
throw new MutationWriteSetError('packed ledger capture mode update missed its row');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function parsePending(value) {
|
|
137
|
+
if (typeof value !== 'string') {
|
|
138
|
+
throw new MutationWriteSetError('packed ledger pending keys are not text');
|
|
139
|
+
}
|
|
140
|
+
let parsed;
|
|
141
|
+
try {
|
|
142
|
+
parsed = JSON.parse(value);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
throw new MutationWriteSetError('packed ledger pending keys are invalid JSON');
|
|
146
|
+
}
|
|
147
|
+
if (!Array.isArray(parsed)) {
|
|
148
|
+
throw new MutationWriteSetError('packed ledger pending keys are not an array');
|
|
149
|
+
}
|
|
150
|
+
return parsed.map((entry) => {
|
|
151
|
+
if (!Array.isArray(entry) ||
|
|
152
|
+
entry.length !== 2 ||
|
|
153
|
+
typeof entry[0] !== 'string' ||
|
|
154
|
+
!entry[1] ||
|
|
155
|
+
typeof entry[1] !== 'object' ||
|
|
156
|
+
Array.isArray(entry[1])) {
|
|
157
|
+
throw new MutationWriteSetError('packed ledger pending key has an invalid shape');
|
|
158
|
+
}
|
|
159
|
+
const key = {};
|
|
160
|
+
for (const [column, field] of Object.entries(entry[1])) {
|
|
161
|
+
if (field !== null &&
|
|
162
|
+
typeof field !== 'string' &&
|
|
163
|
+
typeof field !== 'boolean' &&
|
|
164
|
+
!(typeof field === 'number' && Number.isFinite(field))) {
|
|
165
|
+
throw new MutationWriteSetError('packed ledger pending key is not JSON-safe');
|
|
166
|
+
}
|
|
167
|
+
key[column] = field;
|
|
168
|
+
}
|
|
169
|
+
return { table: entry[0], key };
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
export async function commitPackedLedger(tx, exactKeys, identity, rawCaptureStart) {
|
|
173
|
+
let active = await readActiveSegment(tx);
|
|
174
|
+
let payload = parsePayload(active.payload);
|
|
175
|
+
const changes = new Map();
|
|
176
|
+
const rawKeys = new Set();
|
|
177
|
+
if (rawCaptureStart !== undefined && exactKeys.length > 0) {
|
|
178
|
+
const segments = await tx.query(`SELECT "payload" AS "payload" FROM "_zsync_log_segments"
|
|
179
|
+
WHERE "endVersion" > ? ORDER BY "startVersion"`, [rawCaptureStart]);
|
|
180
|
+
for (const segment of segments) {
|
|
181
|
+
for (const transaction of parsePayload(segment.payload).transactions) {
|
|
182
|
+
if (counter(transaction.version, 'transaction version') <= rawCaptureStart) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
for (const change of parsePending(JSON.stringify(transaction.changes))) {
|
|
186
|
+
rawKeys.add(JSON.stringify([change.table, change.key]));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
for (const change of [
|
|
192
|
+
...parsePending(active.pending),
|
|
193
|
+
...exactKeys.filter((change) => !rawKeys.has(JSON.stringify([change.table, change.key]))),
|
|
194
|
+
]) {
|
|
195
|
+
changes.set(JSON.stringify([change.table, change.key]), change);
|
|
196
|
+
}
|
|
197
|
+
if (!identity && changes.size === 0) {
|
|
198
|
+
if (counter(active.captureMode, 'capture mode') !== 0) {
|
|
199
|
+
await setPackedCaptureMode(tx, false);
|
|
200
|
+
}
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (new TextEncoder().encode(active.payload).byteLength >= ROTATE_AT_BYTES) {
|
|
204
|
+
active = await rotatePackedLedger(tx, active, payload);
|
|
205
|
+
payload = parsePayload(active.payload);
|
|
206
|
+
}
|
|
207
|
+
const start = counter(active.startVersion, 'start version');
|
|
208
|
+
const end = counter(active.endVersion, 'end version');
|
|
209
|
+
if (end === Number.MAX_SAFE_INTEGER) {
|
|
210
|
+
throw new MutationWriteSetError('packed ledger version space is exhausted');
|
|
211
|
+
}
|
|
212
|
+
const version = end + 1;
|
|
213
|
+
if (identity) {
|
|
214
|
+
if (!Number.isSafeInteger(identity.mutationID) || identity.mutationID < 0) {
|
|
215
|
+
throw new MutationWriteSetError('packed ledger mutation id is unsafe');
|
|
216
|
+
}
|
|
217
|
+
const group = (payload.lmids[identity.clientGroupID] ??= {});
|
|
218
|
+
group[identity.clientID] = String(identity.mutationID);
|
|
219
|
+
}
|
|
220
|
+
payload.transactions.push({
|
|
221
|
+
version: String(version),
|
|
222
|
+
changes: [...changes.values()]
|
|
223
|
+
.sort((left, right) => JSON.stringify([left.table, left.key]).localeCompare(JSON.stringify([right.table, right.key])))
|
|
224
|
+
.map(({ table, key }) => [table, key]),
|
|
225
|
+
...(identity
|
|
226
|
+
? {
|
|
227
|
+
lmid: {
|
|
228
|
+
clientGroupID: identity.clientGroupID,
|
|
229
|
+
clientID: identity.clientID,
|
|
230
|
+
mutationID: String(identity.mutationID),
|
|
231
|
+
},
|
|
232
|
+
}
|
|
233
|
+
: {}),
|
|
234
|
+
});
|
|
235
|
+
const encoded = JSON.stringify(payload);
|
|
236
|
+
if (new TextEncoder().encode(encoded).byteLength > MAX_PAYLOAD_BYTES) {
|
|
237
|
+
throw new MutationWriteSetError('packed ledger transaction exceeds the 1 MiB limit');
|
|
238
|
+
}
|
|
239
|
+
const result = await tx.exec(`UPDATE "_zsync_log_segments"
|
|
240
|
+
SET "endVersion" = ?, "payload" = ?, "pending" = '[]', "captureMode" = 0
|
|
241
|
+
WHERE "startVersion" = ?`, [version, encoded, start]);
|
|
242
|
+
if (result.changes !== 1) {
|
|
243
|
+
throw new MutationWriteSetError('packed ledger commit missed its active segment');
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
export async function readPackedLMID(tx, clientGroupID, clientID) {
|
|
247
|
+
const active = await readActiveSegment(tx);
|
|
248
|
+
const value = parsePayload(active.payload).lmids[clientGroupID]?.[clientID];
|
|
249
|
+
return value === undefined ? 0 : counter(value, 'last mutation id');
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=packed-ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packed-ledger.js","sourceRoot":"","sources":["../src/packed-ledger.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -28,11 +28,23 @@ export type TransactionQueryFormat = {
|
|
|
28
28
|
readonly relationships: Readonly<Record<string, TransactionQueryFormat>>;
|
|
29
29
|
readonly singular: boolean;
|
|
30
30
|
};
|
|
31
|
-
|
|
31
|
+
type SqlStatementMetadataBase = {
|
|
32
32
|
readonly table: string;
|
|
33
33
|
readonly publicTable: string;
|
|
34
34
|
readonly kind: 'delete' | 'insert' | 'update' | 'upsert';
|
|
35
35
|
};
|
|
36
|
+
export type SqlStatementMetadata = SqlStatementMetadataBase & ({
|
|
37
|
+
/** omitted metadata keeps arbitrary SQL on the transparent trigger lane. */
|
|
38
|
+
readonly capture?: 'triggers';
|
|
39
|
+
readonly primaryKeys?: never;
|
|
40
|
+
} | {
|
|
41
|
+
/** generated `tx.mutate` helpers select the cheaper lane with exact keys. */
|
|
42
|
+
readonly capture: 'exact';
|
|
43
|
+
readonly primaryKeys: readonly {
|
|
44
|
+
readonly before?: Readonly<Record<string, JsonPrimitive>>;
|
|
45
|
+
readonly after?: Readonly<Record<string, JsonPrimitive>>;
|
|
46
|
+
}[];
|
|
47
|
+
});
|
|
36
48
|
export type ExecResult = {
|
|
37
49
|
readonly changes: number;
|
|
38
50
|
};
|
|
@@ -112,4 +124,5 @@ export interface SyncExecutor<S extends Schema> {
|
|
|
112
124
|
}
|
|
113
125
|
export type TransactionQuery = Query<string, Schema, unknown>;
|
|
114
126
|
export type TransactionQueryResult = HumanReadable<unknown>;
|
|
127
|
+
export {};
|
|
115
128
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,MAAM,EACN,iBAAiB,IAAI,qBAAqB,EAC3C,MAAM,gBAAgB,CAAA;AAEvB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAC5D,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,SAAS,SAAS,EAAE,GACpB;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAEzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CACvB,MAAM,CACJ,MAAM,EACN;QACE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CACxB,MAAM,CACJ,MAAM,EACN;YACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;YACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;YAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;YAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAA;SAC1B,CACF,CACF,CAAA;QACD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;KACvC,CACF,CACF,CAAA;CACF,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAA;IACxE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PackedLedgerIdentity } from './packed-ledger.js';
|
|
2
|
+
import type { ApplicationTransaction, ZeroSchemaConfig } from './types.js';
|
|
3
|
+
export declare function beginWriteSetCapture(schema: ZeroSchemaConfig, applicationTx: ApplicationTransaction, dialect: 'sqlite' | 'postgresql'): Promise<{
|
|
4
|
+
readonly transaction: ApplicationTransaction;
|
|
5
|
+
commit(identity?: PackedLedgerIdentity): Promise<void>;
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=write-set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-set.d.ts","sourceRoot":"","sources":["../src/write-set.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAmB,MAAM,oBAAoB,CAAA;AAC/E,OAAO,KAAK,EACV,sBAAsB,EAGtB,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAmHnB,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,gBAAgB,EACxB,aAAa,EAAE,sBAAsB,EACrC,OAAO,EAAE,QAAQ,GAAG,YAAY,GAC/B,OAAO,CAAC;IACT,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAA;IAC5C,MAAM,CAAC,QAAQ,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACvD,CAAC,CA6ID"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { MutationWriteSetError } from './errors.js';
|
|
2
|
+
import { commitPackedLedger, preparePackedLedger, setPackedCaptureMode, } from './packed-ledger.js';
|
|
3
|
+
function isJsonPrimitive(value) {
|
|
4
|
+
return (value === null ||
|
|
5
|
+
typeof value === 'string' ||
|
|
6
|
+
typeof value === 'boolean' ||
|
|
7
|
+
(typeof value === 'number' && Number.isFinite(value)));
|
|
8
|
+
}
|
|
9
|
+
function canonicalPrimaryKey(schema, tableName, value, source) {
|
|
10
|
+
if (!Object.hasOwn(schema.tables, tableName)) {
|
|
11
|
+
throw new MutationWriteSetError(`${source} names unknown table ${tableName}`);
|
|
12
|
+
}
|
|
13
|
+
const table = schema.tables[tableName];
|
|
14
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
15
|
+
throw new MutationWriteSetError(`${source} primary key for ${tableName} is not an object`);
|
|
16
|
+
}
|
|
17
|
+
const input = value;
|
|
18
|
+
const inputColumns = Object.keys(input).sort();
|
|
19
|
+
const primaryKeyColumns = [...table.primaryKey].sort();
|
|
20
|
+
if (inputColumns.length !== primaryKeyColumns.length ||
|
|
21
|
+
inputColumns.some((column, index) => column !== primaryKeyColumns[index])) {
|
|
22
|
+
throw new MutationWriteSetError(`${source} primary key for ${tableName} must contain exactly ${table.primaryKey.join(', ')}`);
|
|
23
|
+
}
|
|
24
|
+
const key = {};
|
|
25
|
+
for (const column of table.primaryKey) {
|
|
26
|
+
let field = input[column];
|
|
27
|
+
if (source === 'database result' && table.columns[column]?.type === 'boolean') {
|
|
28
|
+
if (field === 0)
|
|
29
|
+
field = false;
|
|
30
|
+
if (field === 1)
|
|
31
|
+
field = true;
|
|
32
|
+
}
|
|
33
|
+
if (!isJsonPrimitive(field)) {
|
|
34
|
+
throw new MutationWriteSetError(`${source} primary key ${tableName}.${column} is not a JSON primitive`);
|
|
35
|
+
}
|
|
36
|
+
key[column] = field;
|
|
37
|
+
}
|
|
38
|
+
return { table: tableName, key };
|
|
39
|
+
}
|
|
40
|
+
function encodedPrimaryKey(primaryKey) {
|
|
41
|
+
return JSON.stringify([primaryKey.table, primaryKey.key]);
|
|
42
|
+
}
|
|
43
|
+
function quoteIdentifier(value) {
|
|
44
|
+
return `"${value.replaceAll('"', '""')}"`;
|
|
45
|
+
}
|
|
46
|
+
function expectedResultKeys(schema, metadata) {
|
|
47
|
+
const side = metadata.kind === 'delete' ? 'before' : 'after';
|
|
48
|
+
return metadata.primaryKeys.flatMap((row) => {
|
|
49
|
+
const value = row[side];
|
|
50
|
+
return value
|
|
51
|
+
? [canonicalPrimaryKey(schema, metadata.publicTable, value, 'executor metadata')]
|
|
52
|
+
: [];
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function validateMetadata(schema, metadata) {
|
|
56
|
+
if (!Object.hasOwn(schema.tables, metadata.publicTable)) {
|
|
57
|
+
throw new MutationWriteSetError(`executor metadata names unknown table ${metadata.publicTable}`);
|
|
58
|
+
}
|
|
59
|
+
const table = schema.tables[metadata.publicTable];
|
|
60
|
+
const physicalTable = table.serverName ?? table.name ?? metadata.publicTable;
|
|
61
|
+
if (metadata.table !== physicalTable) {
|
|
62
|
+
throw new MutationWriteSetError(`executor metadata table ${metadata.table} does not match ${physicalTable}`);
|
|
63
|
+
}
|
|
64
|
+
for (const [index, row] of metadata.primaryKeys.entries()) {
|
|
65
|
+
if (!row.before && !row.after) {
|
|
66
|
+
throw new MutationWriteSetError(`executor metadata primaryKeys[${index}] has neither before nor after`);
|
|
67
|
+
}
|
|
68
|
+
const before = row.before
|
|
69
|
+
? canonicalPrimaryKey(schema, metadata.publicTable, row.before, 'executor metadata')
|
|
70
|
+
: undefined;
|
|
71
|
+
const after = row.after
|
|
72
|
+
? canonicalPrimaryKey(schema, metadata.publicTable, row.after, 'executor metadata')
|
|
73
|
+
: undefined;
|
|
74
|
+
if (before && after && encodedPrimaryKey(before) !== encodedPrimaryKey(after)) {
|
|
75
|
+
throw new MutationWriteSetError('primary-key-changing SQL must use transparent trigger capture');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export async function beginWriteSetCapture(schema, applicationTx, dialect) {
|
|
80
|
+
if (dialect !== 'sqlite') {
|
|
81
|
+
return {
|
|
82
|
+
transaction: applicationTx,
|
|
83
|
+
commit: async () => { },
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const captureStart = await preparePackedLedger(applicationTx);
|
|
87
|
+
let active = true;
|
|
88
|
+
let operation = Promise.resolve(undefined);
|
|
89
|
+
let fatalFailure;
|
|
90
|
+
let exactMode = false;
|
|
91
|
+
let rawWrite = false;
|
|
92
|
+
const exactKeys = new Map();
|
|
93
|
+
const assertActive = () => {
|
|
94
|
+
if (!active) {
|
|
95
|
+
throw new MutationWriteSetError('application transaction is no longer active');
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const serialize = (work) => {
|
|
99
|
+
assertActive();
|
|
100
|
+
const result = operation.then(work);
|
|
101
|
+
operation = result.then(() => undefined, () => undefined);
|
|
102
|
+
return result;
|
|
103
|
+
};
|
|
104
|
+
const setMode = async (exact) => {
|
|
105
|
+
if (exactMode === exact)
|
|
106
|
+
return;
|
|
107
|
+
await setPackedCaptureMode(applicationTx, exact);
|
|
108
|
+
exactMode = exact;
|
|
109
|
+
};
|
|
110
|
+
const transaction = {
|
|
111
|
+
exec(sql, params, metadata) {
|
|
112
|
+
return serialize(async () => {
|
|
113
|
+
// arbitrary sql keeps the product's trigger-backed "just use the db"
|
|
114
|
+
// contract. generated helpers opt each modeled run into the packed lane.
|
|
115
|
+
if (metadata?.capture !== 'exact') {
|
|
116
|
+
await setMode(false);
|
|
117
|
+
const result = await applicationTx.exec(sql, params, metadata);
|
|
118
|
+
rawWrite ||= result.changes > 0;
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
validateMetadata(schema, metadata);
|
|
123
|
+
const table = schema.tables[metadata.publicTable];
|
|
124
|
+
if (/\bRETURNING\b/i.test(sql)) {
|
|
125
|
+
throw new MutationWriteSetError('exact write SQL must leave RETURNING to the executor');
|
|
126
|
+
}
|
|
127
|
+
const returning = table.primaryKey
|
|
128
|
+
.map((column) => {
|
|
129
|
+
const physical = table.columns[column]?.serverName ?? column;
|
|
130
|
+
return `${quoteIdentifier(physical)} AS ${quoteIdentifier(column)}`;
|
|
131
|
+
})
|
|
132
|
+
.join(', ');
|
|
133
|
+
const statement = sql.trim().replace(/;$/, '');
|
|
134
|
+
await setMode(true);
|
|
135
|
+
const returned = await applicationTx.query(`${statement} RETURNING ${returning}`, params);
|
|
136
|
+
const actualResultKeys = returned.map((row) => canonicalPrimaryKey(schema, metadata.publicTable, row, 'database result'));
|
|
137
|
+
const expected = returned.length === 0
|
|
138
|
+
? []
|
|
139
|
+
: [
|
|
140
|
+
...new Set(expectedResultKeys(schema, metadata).map(encodedPrimaryKey)),
|
|
141
|
+
].sort();
|
|
142
|
+
const actual = [...new Set(actualResultKeys.map(encodedPrimaryKey))].sort();
|
|
143
|
+
if (expected.length !== actual.length ||
|
|
144
|
+
expected.some((key, index) => key !== actual[index])) {
|
|
145
|
+
throw new MutationWriteSetError(`executor write set ${JSON.stringify(expected)} does not match returned write set ${JSON.stringify(actual)}`);
|
|
146
|
+
}
|
|
147
|
+
if (returned.length > 0) {
|
|
148
|
+
for (const key of actualResultKeys) {
|
|
149
|
+
exactKeys.set(encodedPrimaryKey(key), key);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return { changes: returned.length };
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (error &&
|
|
156
|
+
typeof error === 'object' &&
|
|
157
|
+
'name' in error &&
|
|
158
|
+
error.name === 'MutationWriteSetError') {
|
|
159
|
+
fatalFailure ??= error;
|
|
160
|
+
}
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
},
|
|
165
|
+
query(sql, params) {
|
|
166
|
+
return serialize(async () => {
|
|
167
|
+
await setMode(false);
|
|
168
|
+
const rows = await applicationTx.query(sql, params);
|
|
169
|
+
rawWrite ||= /\b(?:INSERT|UPDATE|DELETE|REPLACE)\b/i.test(sql);
|
|
170
|
+
return rows;
|
|
171
|
+
});
|
|
172
|
+
},
|
|
173
|
+
queryAst(ast, format, queryName) {
|
|
174
|
+
return serialize(async () => {
|
|
175
|
+
await setMode(false);
|
|
176
|
+
return applicationTx.queryAst(ast, format, queryName);
|
|
177
|
+
});
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
return {
|
|
181
|
+
transaction,
|
|
182
|
+
async commit(identity) {
|
|
183
|
+
assertActive();
|
|
184
|
+
try {
|
|
185
|
+
await operation;
|
|
186
|
+
if (fatalFailure !== undefined)
|
|
187
|
+
throw fatalFailure;
|
|
188
|
+
await commitPackedLedger(applicationTx, [...exactKeys.values()], identity, rawWrite ? captureStart : undefined);
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
active = false;
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=write-set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-set.js","sourceRoot":"","sources":["../src/write-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAY3B,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS;QAC1B,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACtD,CAAA;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAwB,EACxB,SAAiB,EACjB,KAAc,EACd,MAA+C;IAE/C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,qBAAqB,CAAC,GAAG,MAAM,wBAAwB,SAAS,EAAE,CAAC,CAAA;IAC/E,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAE,CAAA;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,qBAAqB,CAC7B,GAAG,MAAM,oBAAoB,SAAS,mBAAmB,CAC1D,CAAA;IACH,CAAC;IACD,MAAM,KAAK,GAAG,KAAgC,CAAA;IAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;IAC9C,MAAM,iBAAiB,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAA;IACtD,IACE,YAAY,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM;QAChD,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,EACzE,CAAC;QACD,MAAM,IAAI,qBAAqB,CAC7B,GAAG,MAAM,oBAAoB,SAAS,yBAAyB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7F,CAAA;IACH,CAAC;IAED,MAAM,GAAG,GAAkC,EAAE,CAAA;IAC7C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QACzB,IAAI,MAAM,KAAK,iBAAiB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9E,IAAI,KAAK,KAAK,CAAC;gBAAE,KAAK,GAAG,KAAK,CAAA;YAC9B,IAAI,KAAK,KAAK,CAAC;gBAAE,KAAK,GAAG,IAAI,CAAA;QAC/B,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,qBAAqB,CAC7B,GAAG,MAAM,gBAAgB,SAAS,IAAI,MAAM,0BAA0B,CACvE,CAAA;QACH,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;IACrB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAA;AAClC,CAAC;AAED,SAAS,iBAAiB,CAAC,UAA8B;IACvD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAA;AAC3C,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAwB,EACxB,QAAsE;IAEtE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAA;IAC5D,OAAO,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;QACvB,OAAO,KAAK;YACV,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;YACjF,CAAC,CAAC,EAAE,CAAA;IACR,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAwB,EACxB,QAAsE;IAEtE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,qBAAqB,CAC7B,yCAAyC,QAAQ,CAAC,WAAW,EAAE,CAChE,CAAA;IACH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAE,CAAA;IAClD,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,WAAW,CAAA;IAC5E,IAAI,QAAQ,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;QACrC,MAAM,IAAI,qBAAqB,CAC7B,2BAA2B,QAAQ,CAAC,KAAK,mBAAmB,aAAa,EAAE,CAC5E,CAAA;IACH,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,IAAI,qBAAqB,CAC7B,iCAAiC,KAAK,gCAAgC,CACvE,CAAA;QACH,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM;YACvB,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC;YACpF,CAAC,CAAC,SAAS,CAAA;QACb,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK;YACrB,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC;YACnF,CAAC,CAAC,SAAS,CAAA;QACb,IAAI,MAAM,IAAI,KAAK,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,qBAAqB,CAC7B,+DAA+D,CAChE,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAwB,EACxB,aAAqC,EACrC,OAAgC;IAKhC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO;YACL,WAAW,EAAE,aAAa;YAC1B,MAAM,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;SACvB,CAAA;IACH,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAE7D,IAAI,MAAM,GAAG,IAAI,CAAA;IACjB,IAAI,SAAS,GAAG,OAAO,CAAC,OAAO,CAAU,SAAS,CAAC,CAAA;IACnD,IAAI,YAAqB,CAAA;IACzB,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAA;IAEvD,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,qBAAqB,CAAC,6CAA6C,CAAC,CAAA;QAChF,CAAC;IACH,CAAC,CAAA;IACD,MAAM,SAAS,GAAG,CAAQ,IAA0B,EAAkB,EAAE;QACtE,YAAY,EAAE,CAAA;QACd,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnC,SAAS,GAAG,MAAM,CAAC,IAAI,CACrB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IACD,MAAM,OAAO,GAAG,KAAK,EAAE,KAAc,EAAE,EAAE;QACvC,IAAI,SAAS,KAAK,KAAK;YAAE,OAAM;QAC/B,MAAM,oBAAoB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;QAChD,SAAS,GAAG,KAAK,CAAA;IACnB,CAAC,CAAA;IAED,MAAM,WAAW,GAA2B;QAC1C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ;YACxB,OAAO,SAAS,CAAC,KAAK,IAAI,EAAE;gBAC1B,qEAAqE;gBACrE,yEAAyE;gBACzE,IAAI,QAAQ,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;oBAClC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAA;oBACpB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;oBAC9D,QAAQ,KAAK,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;oBAC/B,OAAO,MAAM,CAAA;gBACf,CAAC;gBACD,IAAI,CAAC;oBACH,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;oBAClC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAE,CAAA;oBAClD,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC/B,MAAM,IAAI,qBAAqB,CAC7B,sDAAsD,CACvD,CAAA;oBACH,CAAC;oBACD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU;yBAC/B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;wBACd,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,IAAI,MAAM,CAAA;wBAC5D,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,EAAE,CAAA;oBACrE,CAAC,CAAC;yBACD,IAAI,CAAC,IAAI,CAAC,CAAA;oBACb,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;oBAC9C,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;oBACnB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,KAAK,CACxC,GAAG,SAAS,cAAc,SAAS,EAAE,EACrC,MAAM,CACP,CAAA;oBACD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5C,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAC1E,CAAA;oBACD,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,KAAK,CAAC;wBACnB,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC;4BACE,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;yBACxE,CAAC,IAAI,EAAE,CAAA;oBACd,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;oBAC3E,IACE,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;wBACjC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EACpD,CAAC;wBACD,MAAM,IAAI,qBAAqB,CAC7B,sBAAsB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,sCAAsC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAC7G,CAAA;oBACH,CAAC;oBACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxB,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;4BACnC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;wBAC5C,CAAC;oBACH,CAAC;oBACD,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAA;gBACrC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IACE,KAAK;wBACL,OAAO,KAAK,KAAK,QAAQ;wBACzB,MAAM,IAAI,KAAK;wBACf,KAAK,CAAC,IAAI,KAAK,uBAAuB,EACtC,CAAC;wBACD,YAAY,KAAK,KAAK,CAAA;oBACxB,CAAC;oBACD,MAAM,KAAK,CAAA;gBACb,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,KAAK,CACH,GAAW,EACX,MAA2B;YAE3B,OAAO,SAAS,CAAC,KAAK,IAAI,EAAE;gBAC1B,MAAM,OAAO,CAAC,KAAK,CAAC,CAAA;gBACpB,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAM,GAAG,EAAE,MAAM,CAAC,CAAA;gBACxD,QAAQ,KAAK,uCAAuC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC9D,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS;YAC7B,OAAO,SAAS,CAAC,KAAK,IAAI,EAAE;gBAC1B,MAAM,OAAO,CAAC,KAAK,CAAC,CAAA;gBACpB,OAAO,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;YACvD,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;IAED,OAAO;QACL,WAAW;QACX,KAAK,CAAC,MAAM,CAAC,QAA+B;YAC1C,YAAY,EAAE,CAAA;YACd,IAAI,CAAC;gBACH,MAAM,SAAS,CAAA;gBACf,IAAI,YAAY,KAAK,SAAS;oBAAE,MAAM,YAAY,CAAA;gBAClD,MAAM,kBAAkB,CACtB,aAAa,EACb,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EACvB,QAAQ,EACR,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CACpC,CAAA;YACH,CAAC;oBAAS,CAAC;gBACT,MAAM,GAAG,KAAK,CAAA;YAChB,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orez-sync-executor",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.3",
|
|
4
4
|
"description": "Internal orez engine package. Do not import directly: consumers use orez-lite (e.g. orez-lite/realtime).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@rocicorp/zero": ">=1.7.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@rocicorp/zero": "1.
|
|
38
|
+
"@rocicorp/zero": "1.8.0",
|
|
39
39
|
"@types/bun": "1.3.14",
|
|
40
40
|
"typescript": "5.9.3",
|
|
41
41
|
"vitest": "3.2.4"
|
package/dist/adapters.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { ApplicationDatabase, ApplicationTransaction, JsonValue, TransactionQueryFormat } from './types.js';
|
|
2
|
-
import type { Schema } from '@rocicorp/zero';
|
|
3
|
-
export type PostgreSQLQueryResult<Row extends Record<string, unknown>> = {
|
|
4
|
-
readonly rows: readonly Row[];
|
|
5
|
-
readonly rowCount?: number | null;
|
|
6
|
-
};
|
|
7
|
-
export type PostgreSQLClient = {
|
|
8
|
-
query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<PostgreSQLQueryResult<Row>>;
|
|
9
|
-
release(): void;
|
|
10
|
-
};
|
|
11
|
-
export type PostgreSQLPool = {
|
|
12
|
-
connect(): Promise<PostgreSQLClient>;
|
|
13
|
-
query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<PostgreSQLQueryResult<Row>>;
|
|
14
|
-
};
|
|
15
|
-
export type PostgreSQLApplicationDatabaseOptions = {
|
|
16
|
-
readonly internalSchema?: string;
|
|
17
|
-
readonly schema?: Schema;
|
|
18
|
-
readonly queryAst?: <Result>(tx: PostgreSQLClient, ast: JsonValue, format: TransactionQueryFormat, queryName?: string) => Promise<Result>;
|
|
19
|
-
};
|
|
20
|
-
export declare function createPostgreSQLApplicationDatabase(pool: PostgreSQLPool, options?: PostgreSQLApplicationDatabaseOptions): ApplicationDatabase;
|
|
21
|
-
export declare function createSQLiteApplicationDatabase(options: {
|
|
22
|
-
transaction<Value>(work: (tx: ApplicationTransaction) => Value | Promise<Value>): Promise<Value>;
|
|
23
|
-
query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<readonly Row[]>;
|
|
24
|
-
}): ApplicationDatabase;
|
|
25
|
-
//# sourceMappingURL=adapters.d.ts.map
|
package/dist/adapters.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EAEtB,SAAS,EAET,sBAAsB,EACvB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAA8B,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAGxE,MAAM,MAAM,qBAAqB,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACvE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAC1B,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAA;IACtC,OAAO,IAAI,IAAI,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACpC,KAAK,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAC1B,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,oCAAoC,GAAG;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EACzB,EAAE,EAAE,gBAAgB,EACpB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,sBAAsB,EAC9B,SAAS,CAAC,EAAE,MAAM,KACf,OAAO,CAAC,MAAM,CAAC,CAAA;CACrB,CAAA;AAED,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,oCAAyC,GACjD,mBAAmB,CAsKrB;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE;IACvD,WAAW,CAAC,KAAK,EACf,IAAI,EAAE,CAAC,EAAE,EAAE,sBAAsB,KAAK,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAC3D,OAAO,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAC1B,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;CAC3B,GAAG,mBAAmB,CAEtB"}
|