@supalive/core 1.11.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/db-ClCicssQ.js.map +1 -1
- package/dist/helper-zdJT5FUc.js +58 -0
- package/dist/helper-zdJT5FUc.js.map +1 -0
- package/dist/index-BIIcgvu8.d.ts +2300 -0
- package/dist/index-BIIcgvu8.d.ts.map +1 -0
- package/dist/index-BedlCLem.d.ts +2292 -0
- package/dist/index-BedlCLem.d.ts.map +1 -0
- package/dist/index-BnV8LnOf.d.ts +2286 -0
- package/dist/index-BnV8LnOf.d.ts.map +1 -0
- package/dist/index-BziK63TZ.d.ts +2271 -0
- package/dist/index-BziK63TZ.d.ts.map +1 -0
- package/dist/index-D31hMBDE.d.ts +2288 -0
- package/dist/index-D31hMBDE.d.ts.map +1 -0
- package/dist/index-DDDAcnJj.d.ts +2208 -0
- package/dist/index-DDDAcnJj.d.ts.map +1 -0
- package/dist/index-DZhReQWB.d.ts +2288 -0
- package/dist/index-DZhReQWB.d.ts.map +1 -0
- package/dist/index-DlG8HDCO.d.ts +2215 -0
- package/dist/index-DlG8HDCO.d.ts.map +1 -0
- package/dist/index-Wgi_dGzj.d.ts +2215 -0
- package/dist/index-Wgi_dGzj.d.ts.map +1 -0
- package/dist/index-j3YTMNlF.d.ts +2223 -0
- package/dist/index-j3YTMNlF.d.ts.map +1 -0
- package/dist/mysql-BBbilD4I.js +614 -0
- package/dist/mysql-BBbilD4I.js.map +1 -0
- package/dist/mysql-BHJ2mrwZ.d.ts +113 -0
- package/dist/mysql-BHJ2mrwZ.d.ts.map +1 -0
- package/dist/mysql-BQbHJ_rK.js +617 -0
- package/dist/mysql-BQbHJ_rK.js.map +1 -0
- package/dist/mysql-BXoAON7c.d.ts +113 -0
- package/dist/mysql-BXoAON7c.d.ts.map +1 -0
- package/dist/mysql-BgfCUYGt.d.ts +113 -0
- package/dist/mysql-BgfCUYGt.d.ts.map +1 -0
- package/dist/mysql-Br7MqUXg.js +620 -0
- package/dist/mysql-Br7MqUXg.js.map +1 -0
- package/dist/mysql-BrueWtO9.d.ts +113 -0
- package/dist/mysql-BrueWtO9.d.ts.map +1 -0
- package/dist/mysql-CCo--z6n.d.ts +113 -0
- package/dist/mysql-CCo--z6n.d.ts.map +1 -0
- package/dist/mysql-CQcbcZB8.d.ts +113 -0
- package/dist/mysql-CQcbcZB8.d.ts.map +1 -0
- package/dist/mysql-CbgCY89y.d.ts +113 -0
- package/dist/mysql-CbgCY89y.d.ts.map +1 -0
- package/dist/mysql-CqD1ZnNY.js +619 -0
- package/dist/mysql-CqD1ZnNY.js.map +1 -0
- package/dist/mysql-D3Db2q3_.js +619 -0
- package/dist/mysql-D3Db2q3_.js.map +1 -0
- package/dist/mysql-DBrhTmYm.js +619 -0
- package/dist/mysql-DBrhTmYm.js.map +1 -0
- package/dist/mysql-DF8eJO-v.d.ts +113 -0
- package/dist/mysql-DF8eJO-v.d.ts.map +1 -0
- package/dist/mysql-DX7YA7IS.d.ts +113 -0
- package/dist/mysql-DX7YA7IS.d.ts.map +1 -0
- package/dist/mysql-DZ0_Rsjc.js +614 -0
- package/dist/mysql-DZ0_Rsjc.js.map +1 -0
- package/dist/mysql-Dko1MJqQ.js +619 -0
- package/dist/mysql-Dko1MJqQ.js.map +1 -0
- package/dist/mysql-F831ycnw.d.ts +113 -0
- package/dist/mysql-F831ycnw.d.ts.map +1 -0
- package/dist/mysql-TLPG62tv.js +618 -0
- package/dist/mysql-TLPG62tv.js.map +1 -0
- package/dist/mysql-XUkTkefP.js +610 -0
- package/dist/mysql-XUkTkefP.js.map +1 -0
- package/dist/mysql-e-ii74yG.js +613 -0
- package/dist/mysql-e-ii74yG.js.map +1 -0
- package/dist/overlap-checker-BBkqRdcs.js +259 -0
- package/dist/overlap-checker-BBkqRdcs.js.map +1 -0
- package/dist/overlap-checker-BdNoCPtA.js +259 -0
- package/dist/overlap-checker-BdNoCPtA.js.map +1 -0
- package/dist/overlap-checker-DHUJe-Yy.js +259 -0
- package/dist/overlap-checker-DHUJe-Yy.js.map +1 -0
- package/dist/overlap-checker-DWeQLpSD.js +259 -0
- package/dist/overlap-checker-DWeQLpSD.js.map +1 -0
- package/dist/overlap-checker-Kz7B_jsp.js +259 -0
- package/dist/overlap-checker-Kz7B_jsp.js.map +1 -0
- package/dist/postgres-7hJuQX4Y.d.ts +117 -0
- package/dist/postgres-7hJuQX4Y.d.ts.map +1 -0
- package/dist/postgres-B4H78IkW.js +864 -0
- package/dist/postgres-B4H78IkW.js.map +1 -0
- package/dist/postgres-B4h8D5U2.d.ts +117 -0
- package/dist/postgres-B4h8D5U2.d.ts.map +1 -0
- package/dist/postgres-BXFPamkP.js +864 -0
- package/dist/postgres-BXFPamkP.js.map +1 -0
- package/dist/postgres-C7CHroi9.js +865 -0
- package/dist/postgres-C7CHroi9.js.map +1 -0
- package/dist/postgres-CoR3TUMd.js +865 -0
- package/dist/postgres-CoR3TUMd.js.map +1 -0
- package/dist/postgres-D-RsG12a.d.ts +117 -0
- package/dist/postgres-D-RsG12a.d.ts.map +1 -0
- package/dist/postgres-D5Z1S3J9.d.ts +117 -0
- package/dist/postgres-D5Z1S3J9.d.ts.map +1 -0
- package/dist/postgres-DHs89iWT.js +864 -0
- package/dist/postgres-DHs89iWT.js.map +1 -0
- package/dist/postgres-DvBIRnYA.d.ts +117 -0
- package/dist/postgres-DvBIRnYA.d.ts.map +1 -0
- package/dist/postgres-EXjuHMUi.d.ts +117 -0
- package/dist/postgres-EXjuHMUi.d.ts.map +1 -0
- package/dist/postgres-Eo-lpUiX.d.ts +117 -0
- package/dist/postgres-Eo-lpUiX.d.ts.map +1 -0
- package/dist/postgres-VLAGIFLR.d.ts +117 -0
- package/dist/postgres-VLAGIFLR.d.ts.map +1 -0
- package/dist/postgres-hrQmDPUp.d.ts +117 -0
- package/dist/postgres-hrQmDPUp.d.ts.map +1 -0
- package/dist/postgres-pXrP9Fx0.d.ts +117 -0
- package/dist/postgres-pXrP9Fx0.d.ts.map +1 -0
- package/dist/query-Bpw8wO6L.js +730 -0
- package/dist/query-Bpw8wO6L.js.map +1 -0
- package/dist/query-BuOs9w-U.js +730 -0
- package/dist/query-BuOs9w-U.js.map +1 -0
- package/dist/query-Xw2hi6TB.js +730 -0
- package/dist/query-Xw2hi6TB.js.map +1 -0
- package/dist/read-routing-BUcQAwnd.js +62 -0
- package/dist/read-routing-BUcQAwnd.js.map +1 -0
- package/dist/read-routing-BXflWzQI.js +61 -0
- package/dist/read-routing-BXflWzQI.js.map +1 -0
- package/dist/read-routing-CcsLp0ow.js +61 -0
- package/dist/read-routing-CcsLp0ow.js.map +1 -0
- package/dist/realtime_db-B70vqtRZ.js +272 -0
- package/dist/realtime_db-B70vqtRZ.js.map +1 -0
- package/dist/realtime_db-BMysrWym.js +312 -0
- package/dist/realtime_db-BMysrWym.js.map +1 -0
- package/dist/realtime_db-Bi7S938D.js +312 -0
- package/dist/realtime_db-Bi7S938D.js.map +1 -0
- package/dist/realtime_db-CVze3gM0.js +312 -0
- package/dist/realtime_db-CVze3gM0.js.map +1 -0
- package/dist/realtime_db-DMipkUmD.js +312 -0
- package/dist/realtime_db-DMipkUmD.js.map +1 -0
- package/dist/realtime_db-XWzuq2JS.js +272 -0
- package/dist/realtime_db-XWzuq2JS.js.map +1 -0
- package/dist/realtime_db-e3TztUUT.js +272 -0
- package/dist/realtime_db-e3TztUUT.js.map +1 -0
- package/dist/router-Kgrlci8X.js +337 -0
- package/dist/router-Kgrlci8X.js.map +1 -0
- package/dist/router-g8qSQb8m.js +314 -0
- package/dist/router-g8qSQb8m.js.map +1 -0
- package/dist/schema-CWdfWuIj.js +105 -0
- package/dist/schema-CWdfWuIj.js.map +1 -0
- package/dist/schema-DLue3K2s.js +134 -0
- package/dist/schema-DLue3K2s.js.map +1 -0
- package/dist/schema-DfowI0ip.js +134 -0
- package/dist/schema-DfowI0ip.js.map +1 -0
- package/dist/schema-fKldWzwc.js +134 -0
- package/dist/schema-fKldWzwc.js.map +1 -0
- package/dist/src/client/index.d.ts +1 -1
- package/dist/src/client/index.js +69 -29
- package/dist/src/client/index.js.map +1 -1
- package/dist/src/exports/mysql.d.ts +1 -1
- package/dist/src/exports/mysql.js +1 -1
- package/dist/src/exports/postgres.d.ts +1 -1
- package/dist/src/exports/postgres.js +1 -1
- package/dist/src/exports/procedure.d.ts +1 -1
- package/dist/src/exports/procedure.js +5 -5
- package/dist/src/exports/schema-sql.d.ts +18 -1
- package/dist/src/exports/schema-sql.d.ts.map +1 -1
- package/dist/src/exports/schema-sql.js +91 -15
- package/dist/src/exports/schema-sql.js.map +1 -1
- package/dist/src/exports/server.d.ts +11 -4
- package/dist/src/exports/server.d.ts.map +1 -1
- package/dist/src/exports/server.js +136 -59
- package/dist/src/exports/server.js.map +1 -1
- package/dist/src/exports/sub-manager-worker-entry.js +1 -1
- package/dist/src/exports/types.d.ts +2 -2
- package/dist/src/exports/types.js +4 -4
- package/dist/sub-worker-dispatch-CO9nVdSG.js +813 -0
- package/dist/sub-worker-dispatch-CO9nVdSG.js.map +1 -0
- package/dist/sub-worker-dispatch-CQBknEL7.js +813 -0
- package/dist/sub-worker-dispatch-CQBknEL7.js.map +1 -0
- package/dist/sub-worker-dispatch-CQHeit6D.js +813 -0
- package/dist/sub-worker-dispatch-CQHeit6D.js.map +1 -0
- package/dist/sub-worker-dispatch-Cl-XnBwq.js +810 -0
- package/dist/sub-worker-dispatch-Cl-XnBwq.js.map +1 -0
- package/dist/sub-worker-dispatch-CmEW10it.js +813 -0
- package/dist/sub-worker-dispatch-CmEW10it.js.map +1 -0
- package/dist/sub-worker-dispatch-CunxuOPT.js +823 -0
- package/dist/sub-worker-dispatch-CunxuOPT.js.map +1 -0
- package/dist/sub-worker-dispatch-CvvFm40r.js +817 -0
- package/dist/sub-worker-dispatch-CvvFm40r.js.map +1 -0
- package/dist/sub-worker-dispatch-D15UHo1g.js +813 -0
- package/dist/sub-worker-dispatch-D15UHo1g.js.map +1 -0
- package/dist/sub-worker-dispatch-D8DY56ry.js +817 -0
- package/dist/sub-worker-dispatch-D8DY56ry.js.map +1 -0
- package/dist/sub-worker-dispatch-DJgWxtSQ.js +823 -0
- package/dist/sub-worker-dispatch-DJgWxtSQ.js.map +1 -0
- package/dist/sub-worker-dispatch-Dplqeubd.js +813 -0
- package/dist/sub-worker-dispatch-Dplqeubd.js.map +1 -0
- package/dist/sub-worker-dispatch-dXjUmSMN.js +813 -0
- package/dist/sub-worker-dispatch-dXjUmSMN.js.map +1 -0
- package/dist/table-id-BJdmctEQ.js +91 -0
- package/dist/table-id-BJdmctEQ.js.map +1 -0
- package/dist/table-id-DyrJBKAQ.js +105 -0
- package/dist/table-id-DyrJBKAQ.js.map +1 -0
- package/dist/table-id-x9y1eHUr.js +91 -0
- package/dist/table-id-x9y1eHUr.js.map +1 -0
- package/dist/types_client_rpc-BGMwPJst.js +123 -0
- package/dist/types_client_rpc-BGMwPJst.js.map +1 -0
- package/dist/types_client_rpc-ByGwoRCL.js +132 -0
- package/dist/types_client_rpc-ByGwoRCL.js.map +1 -0
- package/dist/types_db-BsR02Sph.js +171 -0
- package/dist/types_db-BsR02Sph.js.map +1 -0
- package/dist/types_db-CgGlOMmr.js +187 -0
- package/dist/types_db-CgGlOMmr.js.map +1 -0
- package/dist/types_db-CmxFWgU3.js +171 -0
- package/dist/types_db-CmxFWgU3.js.map +1 -0
- package/dist/types_db-OUou3o2Z.js +172 -0
- package/dist/types_db-OUou3o2Z.js.map +1 -0
- package/dist/types_server-B3z8hi-Z.d.ts +523 -0
- package/dist/types_server-B3z8hi-Z.d.ts.map +1 -0
- package/dist/types_server-BF5Y0s__.d.ts +521 -0
- package/dist/types_server-BF5Y0s__.d.ts.map +1 -0
- package/dist/types_server-BXBvz4T8.d.ts +523 -0
- package/dist/types_server-BXBvz4T8.d.ts.map +1 -0
- package/dist/types_server-BhC19R2a.js +27 -0
- package/dist/types_server-BhC19R2a.js.map +1 -0
- package/dist/types_server-CClUPZn1.d.ts +521 -0
- package/dist/types_server-CClUPZn1.d.ts.map +1 -0
- package/dist/types_server-CnYTSPhM.d.ts +523 -0
- package/dist/types_server-CnYTSPhM.d.ts.map +1 -0
- package/dist/types_server-DHpGUHB_.d.ts +521 -0
- package/dist/types_server-DHpGUHB_.d.ts.map +1 -0
- package/dist/types_server-Ded1u3bL.d.ts +521 -0
- package/dist/types_server-Ded1u3bL.d.ts.map +1 -0
- package/dist/types_server-fons7nmo.d.ts +523 -0
- package/dist/types_server-fons7nmo.d.ts.map +1 -0
- package/dist/types_server-okvBG4v_.d.ts +521 -0
- package/dist/types_server-okvBG4v_.d.ts.map +1 -0
- package/dist/types_server-pD8DiI7s.d.ts +521 -0
- package/dist/types_server-pD8DiI7s.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { r as utf8Encode } from "./bytes-AuEkyxeU.js";
|
|
2
|
+
import z from "zod";
|
|
3
|
+
//#region src/db/types_db.ts
|
|
4
|
+
const BigIntSchema = z.string().transform((val) => BigInt(val));
|
|
5
|
+
const CompareOperatorSchema = z.enum([
|
|
6
|
+
"=",
|
|
7
|
+
"!=",
|
|
8
|
+
">",
|
|
9
|
+
">=",
|
|
10
|
+
"<",
|
|
11
|
+
"<=",
|
|
12
|
+
"like",
|
|
13
|
+
"ilike",
|
|
14
|
+
"contains",
|
|
15
|
+
"icontains",
|
|
16
|
+
"between",
|
|
17
|
+
"in",
|
|
18
|
+
"jsonContains",
|
|
19
|
+
"jsonContainedBy",
|
|
20
|
+
"jsonHasKey",
|
|
21
|
+
"jsonArrayContains",
|
|
22
|
+
"isNull",
|
|
23
|
+
"isNotNull"
|
|
24
|
+
]);
|
|
25
|
+
const PredicateSchema = z.lazy(() => z.union([
|
|
26
|
+
LeafPredicateSchema,
|
|
27
|
+
AndPredicateSchema,
|
|
28
|
+
OrPredicateSchema
|
|
29
|
+
]));
|
|
30
|
+
const LeafPredicateSchema = z.object({
|
|
31
|
+
"kind": z.literal("leaf"),
|
|
32
|
+
column: z.string(),
|
|
33
|
+
operator: CompareOperatorSchema,
|
|
34
|
+
value: z.unknown(),
|
|
35
|
+
value2: z.unknown().optional(),
|
|
36
|
+
raw: z.boolean().optional(),
|
|
37
|
+
path: z.string().optional(),
|
|
38
|
+
mode: z.enum(["one", "all"]).optional()
|
|
39
|
+
});
|
|
40
|
+
const AndPredicateSchema = z.object({
|
|
41
|
+
kind: z.literal("and"),
|
|
42
|
+
children: z.array(PredicateSchema)
|
|
43
|
+
});
|
|
44
|
+
const OrPredicateSchema = z.object({
|
|
45
|
+
kind: z.literal("or"),
|
|
46
|
+
children: z.array(PredicateSchema)
|
|
47
|
+
});
|
|
48
|
+
const Uint8ArraySchema = z.any().transform((val) => {
|
|
49
|
+
if (val instanceof Uint8Array) return val;
|
|
50
|
+
return bytesFromJson(val);
|
|
51
|
+
});
|
|
52
|
+
function normalizeIdToBytes(id, fromHex = false) {
|
|
53
|
+
const data = (typeof id === "number" ? String(id) : id).replace(/-/g, "");
|
|
54
|
+
if (fromHex === true) {
|
|
55
|
+
const len = data.length >>> 1;
|
|
56
|
+
const out = new Uint8Array(len);
|
|
57
|
+
for (let i = 0; i < len; i++) out[i] = parseInt(data.substring(i * 2, i * 2 + 2), 16);
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
return utf8Encode(data);
|
|
61
|
+
}
|
|
62
|
+
function normalizeToBytes(value) {
|
|
63
|
+
try {
|
|
64
|
+
return bytesFromJson(value);
|
|
65
|
+
} catch (_) {
|
|
66
|
+
return /* @__PURE__ */ new Uint8Array(0);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function bytesFromJson(value) {
|
|
70
|
+
if (value instanceof Uint8Array) return value;
|
|
71
|
+
if (Array.isArray(value)) return Uint8Array.from(value);
|
|
72
|
+
if (value && typeof value === "object" && "type" in value && value.type === "Buffer" && "data" in value) return Uint8Array.from(value.data);
|
|
73
|
+
if (typeof value === "string") return utf8Encode(value);
|
|
74
|
+
if (typeof value === "number") return utf8Encode(String(value));
|
|
75
|
+
throw new Error("Invalid buffer value");
|
|
76
|
+
}
|
|
77
|
+
const PointReadSchema = z.object({
|
|
78
|
+
kind: z.literal("point"),
|
|
79
|
+
table: z.string(),
|
|
80
|
+
id: z.string(),
|
|
81
|
+
expectedCommitTs: BigIntSchema.nullable().optional()
|
|
82
|
+
});
|
|
83
|
+
const RawPointReadSchema = z.object({
|
|
84
|
+
kind: z.literal("point"),
|
|
85
|
+
tableId: Uint8ArraySchema,
|
|
86
|
+
id: Uint8ArraySchema,
|
|
87
|
+
table: z.string(),
|
|
88
|
+
expectedCommitTs: BigIntSchema.nullable().optional()
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* Query specification for a range read (get with filters).
|
|
92
|
+
* This is the query definition, not the result.
|
|
93
|
+
*/
|
|
94
|
+
const RangeReadSchema = z.object({
|
|
95
|
+
kind: z.literal("range"),
|
|
96
|
+
table: z.string(),
|
|
97
|
+
predicate: PredicateSchema,
|
|
98
|
+
columns: z.array(z.string()),
|
|
99
|
+
orderBy: z.array(z.string()).nullable().optional(),
|
|
100
|
+
limit: z.number().nullable().optional(),
|
|
101
|
+
offset: z.number().nullable().optional()
|
|
102
|
+
});
|
|
103
|
+
const RawRangeReadSchema = z.object({
|
|
104
|
+
kind: z.literal("range"),
|
|
105
|
+
table: z.string(),
|
|
106
|
+
tableId: Uint8ArraySchema,
|
|
107
|
+
predicate: PredicateSchema,
|
|
108
|
+
columns: z.array(z.string()),
|
|
109
|
+
orderBy: z.array(z.string()).nullable().optional(),
|
|
110
|
+
limit: z.number().nullable().optional(),
|
|
111
|
+
offset: z.number().nullable().optional()
|
|
112
|
+
});
|
|
113
|
+
const ReadEntrySchema = z.union([PointReadSchema, RangeReadSchema]);
|
|
114
|
+
const RawReadEntrySchema = z.union([RawPointReadSchema, RawRangeReadSchema]);
|
|
115
|
+
const WriteOpSchema = z.enum([
|
|
116
|
+
"insert",
|
|
117
|
+
"update",
|
|
118
|
+
"delete"
|
|
119
|
+
]);
|
|
120
|
+
const WriteEntrySchema = z.object({
|
|
121
|
+
table: z.string(),
|
|
122
|
+
tableId: Uint8ArraySchema,
|
|
123
|
+
id: z.string(),
|
|
124
|
+
op: WriteOpSchema,
|
|
125
|
+
data: z.record(z.string(), z.unknown()).optional(),
|
|
126
|
+
prevData: z.record(z.string(), z.unknown()).optional(),
|
|
127
|
+
expectedCommitTs: BigIntSchema.nullable().optional()
|
|
128
|
+
});
|
|
129
|
+
const QueryCacheMetadataSchema = z.object({
|
|
130
|
+
lastSnapshotTs: BigIntSchema,
|
|
131
|
+
version: z.string(),
|
|
132
|
+
readSet: z.array(ReadEntrySchema)
|
|
133
|
+
});
|
|
134
|
+
const QueryCacheEntrySchema = z.object({
|
|
135
|
+
data: z.unknown(),
|
|
136
|
+
version: z.string()
|
|
137
|
+
});
|
|
138
|
+
const CachedPgMetadataSchema = z.record(z.string(), z.record(z.string(), z.string()));
|
|
139
|
+
const NO_RETRY = {
|
|
140
|
+
maxAttempts: 1,
|
|
141
|
+
backoff: "none"
|
|
142
|
+
};
|
|
143
|
+
const DEFAULT_RETRY = {
|
|
144
|
+
maxAttempts: 12,
|
|
145
|
+
backoff: "exponential",
|
|
146
|
+
delayMs: 15
|
|
147
|
+
};
|
|
148
|
+
var OccConflictError = class OccConflictError extends Error {
|
|
149
|
+
reason;
|
|
150
|
+
conflictDetail;
|
|
151
|
+
constructor(reason, conflictDetail) {
|
|
152
|
+
super(`OCC conflict: ${reason}`);
|
|
153
|
+
this.reason = reason;
|
|
154
|
+
this.conflictDetail = conflictDetail;
|
|
155
|
+
this.name = "OccConflictError";
|
|
156
|
+
}
|
|
157
|
+
static isOccConflictError(err) {
|
|
158
|
+
if (err instanceof OccConflictError || err && typeof err === "object" && err.name === "OccConflictError") return true;
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
var OccAbortError = class extends Error {
|
|
163
|
+
constructor(message) {
|
|
164
|
+
super(message);
|
|
165
|
+
this.name = "OccAbortError";
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
//#endregion
|
|
169
|
+
export { normalizeIdToBytes as C, bytesFromJson as S, RawRangeReadSchema as _, DEFAULT_RETRY as a, WriteEntrySchema as b, OccAbortError as c, PointReadSchema as d, PredicateSchema as f, RawPointReadSchema as g, RangeReadSchema as h, CompareOperatorSchema as i, OccConflictError as l, QueryCacheMetadataSchema as m, BigIntSchema as n, LeafPredicateSchema as o, QueryCacheEntrySchema as p, CachedPgMetadataSchema as r, NO_RETRY as s, AndPredicateSchema as t, OrPredicateSchema as u, RawReadEntrySchema as v, normalizeToBytes as w, WriteOpSchema as x, ReadEntrySchema as y };
|
|
170
|
+
|
|
171
|
+
//# sourceMappingURL=types_db-CmxFWgU3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types_db-CmxFWgU3.js","names":[],"sources":["../src/db/types_db.ts"],"sourcesContent":["import z from \"zod\";\nimport { utf8Encode } from \"./bytes\";\n\n/** Monotonically increasing integer from global_commit_ts sequence in Postgres */\nexport type CommitTs = bigint;\n\nexport const BigIntSchema = z.string().transform((val) => BigInt(val));\n\nexport const CompareOperatorSchema = z.enum([\n \"=\", \"!=\", \">\", \">=\", \"<\", \"<=\",\n \"like\", \"ilike\", \"contains\", \"icontains\",\n \"between\", \"in\",\n \"jsonContains\", \"jsonContainedBy\", \"jsonHasKey\", \"jsonArrayContains\",\n \"isNull\", \"isNotNull\"\n]);\nexport type CompareOperator = z.infer<typeof CompareOperatorSchema>;\n\n// Define the type first so z.lazy() can reference it\nexport type Predicate =\n | LeafPredicate\n | { kind: \"and\"; children: Predicate[] }\n | { kind: \"or\"; children: Predicate[] };\nexport const PredicateSchema: z.ZodType<Predicate> = z.lazy(() =>\n z.union([\n LeafPredicateSchema,\n AndPredicateSchema,\n OrPredicateSchema,\n ])\n);\n\nexport const LeafPredicateSchema = z.object({\n \"kind\": z.literal(\"leaf\"),\n column: z.string(),\n operator: CompareOperatorSchema,\n value: z.unknown(),\n value2: z.unknown().optional(),\n // For JSON ops: `true` means `value` is already in dialect-prepared form\n // (a path expression for jsonHasKey, a JSON string for the contains family)\n // and the SqlBuilder should pass it through without further escaping.\n raw: z.boolean().optional(),\n // For jsonContains/jsonContainedBy/jsonArrayContains: optional sub-path\n // into the target JSON value to scope the check (jsonpath syntax, e.g.\n // `$.\"a\".\"b\"`). Already compiled to a single string.\n path: z.string().optional(),\n // For jsonHasKey multi-path mode: when set, `value` is `string[]` (each\n // entry a jsonpath) and the predicate checks for existence of any (`one`)\n // or all (`all`) of them.\n mode: z.enum([\"one\", \"all\"]).optional(),\n});\nexport type LeafPredicate = z.infer<typeof LeafPredicateSchema>;\n\nexport const AndPredicateSchema = z.object({\n kind: z.literal(\"and\"),\n children: z.array(PredicateSchema),\n});\nexport type AndPredicate = z.infer<typeof AndPredicateSchema>;\n\nexport const OrPredicateSchema = z.object({\n kind: z.literal(\"or\"),\n children: z.array(PredicateSchema),\n});\nexport type OrPredicate = z.infer<typeof OrPredicateSchema>;\n\n/** Query specification - what was queried (used for cache key generation) */\nexport type QuerySpec = ReadEntry;\n\nconst Uint8ArraySchema = z.any().transform((val) => {\n if (val instanceof Uint8Array) return val;\n return bytesFromJson(val);\n});\n\nexport function normalizeIdToBytes(id: string | number, fromHex = false): Uint8Array {\n const idStr = typeof id === \"number\" ? String(id) : id;\n const data = idStr.replace(/-/g, \"\");\n if (fromHex === true) {\n const len = data.length >>> 1;\n const out = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n out[i] = parseInt(data.substring(i * 2, i * 2 + 2), 16);\n }\n return out;\n }\n return utf8Encode(data);\n}\n\nexport function normalizeToBytes(value: Uint8Array | unknown): Uint8Array {\n try {\n return bytesFromJson(value);\n } catch (_) {\n return new Uint8Array(0);\n }\n}\n\nexport function bytesFromJson(value: Uint8Array | unknown): Uint8Array {\n if (value instanceof Uint8Array) {\n return value;\n }\n if (Array.isArray(value)) {\n return Uint8Array.from(value as number[]);\n }\n if (value && typeof value === \"object\" && \"type\" in value && (value as any).type === \"Buffer\" && \"data\" in value) {\n return Uint8Array.from((value as any).data);\n }\n if (typeof value === \"string\") {\n return utf8Encode(value);\n }\n if (typeof value === \"number\") {\n return utf8Encode(String(value));\n }\n\n throw new Error(\"Invalid buffer value\");\n}\n\n/* \n * Query specification for a point read (find by ID).\n */\nexport const PointReadSchema = z.object({\n kind: z.literal(\"point\"),\n table: z.string(),\n id: z.string(),\n // No `tableId`: it is `utf8(table)` and is derived on demand (mapReadEntryToRaw\n // → tableIdOf), so it is never stored in the persisted/wire read set.\n // tableId: Uint8ArraySchema,\n\n // commit_ts of the row at read time. `null` = row didn't exist (so a later\n // insert is a conflict). `undefined` = the read was added synthetically and\n // OCC should fall back to the commit-log scan / general validator.\n expectedCommitTs: BigIntSchema.nullable().optional(),\n});\nexport type PointRead = z.infer<typeof PointReadSchema>;\n\nexport const RawPointReadSchema = z.object({\n kind: z.literal(\"point\"),\n tableId: Uint8ArraySchema,\n id: Uint8ArraySchema,\n table: z.string(),\n expectedCommitTs: BigIntSchema.nullable().optional(),\n});\nexport type RawPointRead = z.infer<typeof RawPointReadSchema>;\n\n/**\n * Query specification for a range read (get with filters).\n * This is the query definition, not the result.\n */\nexport const RangeReadSchema = z.object({\n kind: z.literal(\"range\"),\n table: z.string(),\n // No `tableId`: derived on demand from `table` (see PointReadSchema).\n // tableId: Uint8ArraySchema,\n\n predicate: PredicateSchema,\n columns: z.array(z.string()),\n orderBy: z.array(z.string()).nullable().optional(),\n limit: z.number().nullable().optional(),\n offset: z.number().nullable().optional(),\n});\nexport type RangeRead = z.infer<typeof RangeReadSchema>;\n\nexport const RawRangeReadSchema = z.object({\n kind: z.literal(\"range\"),\n table: z.string(),\n tableId: Uint8ArraySchema,\n predicate: PredicateSchema,\n columns: z.array(z.string()),\n orderBy: z.array(z.string()).nullable().optional(),\n limit: z.number().nullable().optional(),\n offset: z.number().nullable().optional(),\n});\nexport type RawRangeRead = z.infer<typeof RawRangeReadSchema>;\n\nexport const ReadEntrySchema = z.union([PointReadSchema, RangeReadSchema]);\nexport type ReadEntry = z.infer<typeof ReadEntrySchema>;\n\nexport const RawReadEntrySchema = z.union([RawPointReadSchema, RawRangeReadSchema]);\nexport type RawReadEntry = z.infer<typeof RawReadEntrySchema>;\n\nexport const WriteOpSchema = z.enum([\"insert\", \"update\", \"delete\"]);\nexport type WriteOp = z.infer<typeof WriteOpSchema>;\n\nexport const WriteEntrySchema = z.object({\n table: z.string(),\n tableId: Uint8ArraySchema,\n id: z.string(),\n op: WriteOpSchema,\n data: z.record(z.string(), z.unknown()).optional(),\n // Row state at beginTs, before this write. Populated server-side by\n // attachPrevDataToWriteSet for `update`/`delete`. Lets the invalidator\n // detect rows leaving a filtered result set (e.g. status changed from\n // matching to non-matching).\n prevData: z.record(z.string(), z.unknown()).optional(),\n // commit_ts the row had right before this write. Drives the CAS guard:\n // `UPDATE ... WHERE id=? AND commit_ts=expectedCommitTs`. Populated by\n // attachPrevDataToWriteSet or carried over from a prior find() in the\n // same txn. Undefined on inserts.\n expectedCommitTs: BigIntSchema.nullable().optional(),\n});\nexport type WriteEntry = z.infer<typeof WriteEntrySchema>;\n\nexport interface CommitLogEntry {\n id: Uint8Array;\n ts: bigint;\n tableId: Uint8Array;\n data: Uint8Array;\n\n _parsedData?: Record<string, unknown> | null\n}\n\nexport interface MutationResult<T> {\n result: T;\n writeSet: WriteEntry[];\n commitTs: CommitTs;\n}\n\nexport interface LiveResult<T> {\n ts: bigint,\n data: T;\n readSet: ReadEntry[];\n}\n\nexport const QueryCacheMetadataSchema = z.object({\n lastSnapshotTs: BigIntSchema,\n // Identity of the cached DATA this metadata describes = the data's compute\n // snapshot ts, stringified. Distinct from `lastSnapshotTs`, which the worker\n // can advance past the compute ts (a still-fresh entry gets a higher horizon\n // without recomputing). A reader trusts the cached data blob only when its\n // `version` matches this — so a data/metadata pair that diverged (torn read,\n // cross-process write race) is detected and recomputed instead of served stale.\n version: z.string(),\n readSet: z.array(ReadEntrySchema),\n});\nexport type QueryCacheMetadata = z.infer<typeof QueryCacheMetadataSchema>;\n\nexport const QueryCacheEntrySchema = z.object({\n data: z.unknown(),\n // Must equal the metadata's `version` for the data to be served (see above).\n version: z.string(),\n});\nexport type QueryCacheEntry = z.infer<typeof QueryCacheEntrySchema>;\n\nexport const CachedPgMetadataSchema = z.record(z.string(), z.record(z.string(), z.string()));\nexport type CachedPgMetadata = z.infer<typeof CachedPgMetadataSchema>;\n\nexport interface RetryConfig {\n maxAttempts: number;\n backoff: \"none\" | \"linear\" | \"exponential\";\n delayMs?: number;\n onConflict?: (attempt: number, error: OccConflictError) => void;\n}\n\nexport const NO_RETRY: RetryConfig = { maxAttempts: 1, backoff: \"none\" };\n\nexport const DEFAULT_RETRY: RetryConfig = {\n maxAttempts: 12,\n backoff: \"exponential\",\n delayMs: 15,\n};\n\nexport class OccConflictError extends Error {\n constructor(\n public readonly reason: string,\n public readonly conflictDetail?: unknown\n ) {\n super(`OCC conflict: ${reason}`);\n this.name = \"OccConflictError\";\n }\n\n static isOccConflictError(err: unknown): boolean {\n if (err instanceof OccConflictError ||\n (err && typeof err === \"object\" && (err as { name?: string }).name === \"OccConflictError\")) {\n return true;\n }\n return false;\n }\n}\n\nexport class OccAbortError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"OccAbortError\";\n }\n}"],"mappings":"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"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { o as utf8Encode } from "./helper-zdJT5FUc.js";
|
|
2
|
+
import z from "zod";
|
|
3
|
+
//#region src/db/types_db.ts
|
|
4
|
+
const BigIntSchema = z.string().transform((val) => BigInt(val));
|
|
5
|
+
const CompareOperatorSchema = z.enum([
|
|
6
|
+
"=",
|
|
7
|
+
"!=",
|
|
8
|
+
">",
|
|
9
|
+
">=",
|
|
10
|
+
"<",
|
|
11
|
+
"<=",
|
|
12
|
+
"like",
|
|
13
|
+
"ilike",
|
|
14
|
+
"contains",
|
|
15
|
+
"icontains",
|
|
16
|
+
"between",
|
|
17
|
+
"in",
|
|
18
|
+
"jsonContains",
|
|
19
|
+
"jsonContainedBy",
|
|
20
|
+
"jsonHasKey",
|
|
21
|
+
"jsonArrayContains",
|
|
22
|
+
"isNull",
|
|
23
|
+
"isNotNull"
|
|
24
|
+
]);
|
|
25
|
+
const PredicateSchema = z.lazy(() => z.union([
|
|
26
|
+
LeafPredicateSchema,
|
|
27
|
+
AndPredicateSchema,
|
|
28
|
+
OrPredicateSchema
|
|
29
|
+
]));
|
|
30
|
+
const LeafPredicateSchema = z.object({
|
|
31
|
+
"kind": z.literal("leaf"),
|
|
32
|
+
column: z.string(),
|
|
33
|
+
operator: CompareOperatorSchema,
|
|
34
|
+
value: z.unknown(),
|
|
35
|
+
value2: z.unknown().optional(),
|
|
36
|
+
raw: z.boolean().optional(),
|
|
37
|
+
path: z.string().optional(),
|
|
38
|
+
mode: z.enum(["one", "all"]).optional()
|
|
39
|
+
});
|
|
40
|
+
const AndPredicateSchema = z.object({
|
|
41
|
+
kind: z.literal("and"),
|
|
42
|
+
children: z.array(PredicateSchema)
|
|
43
|
+
});
|
|
44
|
+
const OrPredicateSchema = z.object({
|
|
45
|
+
kind: z.literal("or"),
|
|
46
|
+
children: z.array(PredicateSchema)
|
|
47
|
+
});
|
|
48
|
+
const Uint8ArraySchema = z.any().transform((val) => {
|
|
49
|
+
if (val instanceof Uint8Array) return val;
|
|
50
|
+
return bytesFromJson(val);
|
|
51
|
+
});
|
|
52
|
+
function normalizeIdToBytes(id, fromHex = false) {
|
|
53
|
+
const data = (typeof id === "number" ? String(id) : id).replace(/-/g, "");
|
|
54
|
+
if (fromHex === true) {
|
|
55
|
+
const len = data.length >>> 1;
|
|
56
|
+
const out = new Uint8Array(len);
|
|
57
|
+
for (let i = 0; i < len; i++) out[i] = parseInt(data.substring(i * 2, i * 2 + 2), 16);
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
return utf8Encode(data);
|
|
61
|
+
}
|
|
62
|
+
function normalizeToBytes(value) {
|
|
63
|
+
try {
|
|
64
|
+
return bytesFromJson(value);
|
|
65
|
+
} catch (_) {
|
|
66
|
+
return /* @__PURE__ */ new Uint8Array(0);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function bytesFromJson(value) {
|
|
70
|
+
if (value instanceof Uint8Array) return value;
|
|
71
|
+
if (Array.isArray(value)) return Uint8Array.from(value);
|
|
72
|
+
if (value && typeof value === "object" && "type" in value && value.type === "Buffer" && "data" in value) return Uint8Array.from(value.data);
|
|
73
|
+
if (typeof value === "string") return utf8Encode(value);
|
|
74
|
+
if (typeof value === "number") return utf8Encode(String(value));
|
|
75
|
+
throw new Error("Invalid buffer value");
|
|
76
|
+
}
|
|
77
|
+
const PointReadSchema = z.object({
|
|
78
|
+
kind: z.literal("point"),
|
|
79
|
+
table: z.string(),
|
|
80
|
+
id: z.string(),
|
|
81
|
+
expectedCommitTs: BigIntSchema.nullable().optional()
|
|
82
|
+
});
|
|
83
|
+
const RawPointReadSchema = z.object({
|
|
84
|
+
kind: z.literal("point"),
|
|
85
|
+
tableId: Uint8ArraySchema,
|
|
86
|
+
id: Uint8ArraySchema,
|
|
87
|
+
table: z.string(),
|
|
88
|
+
expectedCommitTs: BigIntSchema.nullable().optional()
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* Query specification for a range read (get with filters).
|
|
92
|
+
* This is the query definition, not the result.
|
|
93
|
+
*/
|
|
94
|
+
const RangeReadSchema = z.object({
|
|
95
|
+
kind: z.literal("range"),
|
|
96
|
+
table: z.string(),
|
|
97
|
+
predicate: PredicateSchema,
|
|
98
|
+
columns: z.array(z.string()),
|
|
99
|
+
orderBy: z.array(z.string()).nullable().optional(),
|
|
100
|
+
limit: z.number().nullable().optional(),
|
|
101
|
+
offset: z.number().nullable().optional()
|
|
102
|
+
});
|
|
103
|
+
const RawRangeReadSchema = z.object({
|
|
104
|
+
kind: z.literal("range"),
|
|
105
|
+
table: z.string(),
|
|
106
|
+
tableId: Uint8ArraySchema,
|
|
107
|
+
predicate: PredicateSchema,
|
|
108
|
+
columns: z.array(z.string()),
|
|
109
|
+
orderBy: z.array(z.string()).nullable().optional(),
|
|
110
|
+
limit: z.number().nullable().optional(),
|
|
111
|
+
offset: z.number().nullable().optional()
|
|
112
|
+
});
|
|
113
|
+
const ReadEntrySchema = z.union([PointReadSchema, RangeReadSchema]);
|
|
114
|
+
const RawReadEntrySchema = z.union([RawPointReadSchema, RawRangeReadSchema]);
|
|
115
|
+
const WriteOpSchema = z.enum([
|
|
116
|
+
"insert",
|
|
117
|
+
"update",
|
|
118
|
+
"delete"
|
|
119
|
+
]);
|
|
120
|
+
const WriteEntrySchema = z.object({
|
|
121
|
+
table: z.string(),
|
|
122
|
+
tableId: Uint8ArraySchema,
|
|
123
|
+
id: z.string(),
|
|
124
|
+
op: WriteOpSchema,
|
|
125
|
+
data: z.record(z.string(), z.unknown()).optional(),
|
|
126
|
+
prevData: z.record(z.string(), z.unknown()).optional(),
|
|
127
|
+
expectedCommitTs: BigIntSchema.nullable().optional()
|
|
128
|
+
});
|
|
129
|
+
const QueryCacheMetadataSchema = z.object({
|
|
130
|
+
lastSnapshotTs: BigIntSchema,
|
|
131
|
+
version: z.string(),
|
|
132
|
+
readSet: z.array(ReadEntrySchema)
|
|
133
|
+
});
|
|
134
|
+
const QueryCacheEntrySchema = z.object({
|
|
135
|
+
lastSnapshotTs: BigIntSchema,
|
|
136
|
+
data: z.unknown(),
|
|
137
|
+
version: z.string()
|
|
138
|
+
});
|
|
139
|
+
const CachedPgMetadataSchema = z.record(z.string(), z.record(z.string(), z.string()));
|
|
140
|
+
const NO_RETRY = {
|
|
141
|
+
maxAttempts: 1,
|
|
142
|
+
backoff: "none"
|
|
143
|
+
};
|
|
144
|
+
const DEFAULT_RETRY = {
|
|
145
|
+
maxAttempts: 12,
|
|
146
|
+
backoff: "exponential",
|
|
147
|
+
delayMs: 15
|
|
148
|
+
};
|
|
149
|
+
var OccConflictError = class OccConflictError extends Error {
|
|
150
|
+
reason;
|
|
151
|
+
conflictDetail;
|
|
152
|
+
constructor(reason, conflictDetail) {
|
|
153
|
+
super(`OCC conflict: ${reason}`);
|
|
154
|
+
this.reason = reason;
|
|
155
|
+
this.conflictDetail = conflictDetail;
|
|
156
|
+
this.name = "OccConflictError";
|
|
157
|
+
}
|
|
158
|
+
static isOccConflictError(err) {
|
|
159
|
+
if (err instanceof OccConflictError || err && typeof err === "object" && err.name === "OccConflictError") return true;
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
var OccAbortError = class extends Error {
|
|
164
|
+
constructor(message) {
|
|
165
|
+
super(message);
|
|
166
|
+
this.name = "OccAbortError";
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
//#endregion
|
|
170
|
+
export { normalizeIdToBytes as C, bytesFromJson as S, RawRangeReadSchema as _, DEFAULT_RETRY as a, WriteEntrySchema as b, OccAbortError as c, PointReadSchema as d, PredicateSchema as f, RawPointReadSchema as g, RangeReadSchema as h, CompareOperatorSchema as i, OccConflictError as l, QueryCacheMetadataSchema as m, BigIntSchema as n, LeafPredicateSchema as o, QueryCacheEntrySchema as p, CachedPgMetadataSchema as r, NO_RETRY as s, AndPredicateSchema as t, OrPredicateSchema as u, RawReadEntrySchema as v, normalizeToBytes as w, WriteOpSchema as x, ReadEntrySchema as y };
|
|
171
|
+
|
|
172
|
+
//# sourceMappingURL=types_db-OUou3o2Z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types_db-OUou3o2Z.js","names":[],"sources":["../src/db/types_db.ts"],"sourcesContent":["import z from \"zod\";\nimport { utf8Encode } from \"./bytes\";\n\n/** Monotonically increasing integer from global_commit_ts sequence in Postgres */\nexport type CommitTs = bigint;\n\nexport const BigIntSchema = z.string().transform((val) => BigInt(val));\n\nexport const CompareOperatorSchema = z.enum([\n \"=\", \"!=\", \">\", \">=\", \"<\", \"<=\",\n \"like\", \"ilike\", \"contains\", \"icontains\",\n \"between\", \"in\",\n \"jsonContains\", \"jsonContainedBy\", \"jsonHasKey\", \"jsonArrayContains\",\n \"isNull\", \"isNotNull\"\n]);\nexport type CompareOperator = z.infer<typeof CompareOperatorSchema>;\n\n// Define the type first so z.lazy() can reference it\nexport type Predicate =\n | LeafPredicate\n | { kind: \"and\"; children: Predicate[] }\n | { kind: \"or\"; children: Predicate[] };\nexport const PredicateSchema: z.ZodType<Predicate> = z.lazy(() =>\n z.union([\n LeafPredicateSchema,\n AndPredicateSchema,\n OrPredicateSchema,\n ])\n);\n\nexport const LeafPredicateSchema = z.object({\n \"kind\": z.literal(\"leaf\"),\n column: z.string(),\n operator: CompareOperatorSchema,\n value: z.unknown(),\n value2: z.unknown().optional(),\n // For JSON ops: `true` means `value` is already in dialect-prepared form\n // (a path expression for jsonHasKey, a JSON string for the contains family)\n // and the SqlBuilder should pass it through without further escaping.\n raw: z.boolean().optional(),\n // For jsonContains/jsonContainedBy/jsonArrayContains: optional sub-path\n // into the target JSON value to scope the check (jsonpath syntax, e.g.\n // `$.\"a\".\"b\"`). Already compiled to a single string.\n path: z.string().optional(),\n // For jsonHasKey multi-path mode: when set, `value` is `string[]` (each\n // entry a jsonpath) and the predicate checks for existence of any (`one`)\n // or all (`all`) of them.\n mode: z.enum([\"one\", \"all\"]).optional(),\n});\nexport type LeafPredicate = z.infer<typeof LeafPredicateSchema>;\n\nexport const AndPredicateSchema = z.object({\n kind: z.literal(\"and\"),\n children: z.array(PredicateSchema),\n});\nexport type AndPredicate = z.infer<typeof AndPredicateSchema>;\n\nexport const OrPredicateSchema = z.object({\n kind: z.literal(\"or\"),\n children: z.array(PredicateSchema),\n});\nexport type OrPredicate = z.infer<typeof OrPredicateSchema>;\n\n/** Query specification - what was queried (used for cache key generation) */\nexport type QuerySpec = ReadEntry;\n\nconst Uint8ArraySchema = z.any().transform((val) => {\n if (val instanceof Uint8Array) return val;\n return bytesFromJson(val);\n});\n\nexport function normalizeIdToBytes(id: string | number, fromHex = false): Uint8Array {\n const idStr = typeof id === \"number\" ? String(id) : id;\n const data = idStr.replace(/-/g, \"\");\n if (fromHex === true) {\n const len = data.length >>> 1;\n const out = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n out[i] = parseInt(data.substring(i * 2, i * 2 + 2), 16);\n }\n return out;\n }\n return utf8Encode(data);\n}\n\nexport function normalizeToBytes(value: Uint8Array | unknown): Uint8Array {\n try {\n return bytesFromJson(value);\n } catch (_) {\n return new Uint8Array(0);\n }\n}\n\nexport function bytesFromJson(value: Uint8Array | unknown): Uint8Array {\n if (value instanceof Uint8Array) {\n return value;\n }\n if (Array.isArray(value)) {\n return Uint8Array.from(value as number[]);\n }\n if (value && typeof value === \"object\" && \"type\" in value && (value as any).type === \"Buffer\" && \"data\" in value) {\n return Uint8Array.from((value as any).data);\n }\n if (typeof value === \"string\") {\n return utf8Encode(value);\n }\n if (typeof value === \"number\") {\n return utf8Encode(String(value));\n }\n\n throw new Error(\"Invalid buffer value\");\n}\n\n/* \n * Query specification for a point read (find by ID).\n */\nexport const PointReadSchema = z.object({\n kind: z.literal(\"point\"),\n table: z.string(),\n id: z.string(),\n // No `tableId`: it is `utf8(table)` and is derived on demand (mapReadEntryToRaw\n // → tableIdOf), so it is never stored in the persisted/wire read set.\n // tableId: Uint8ArraySchema,\n\n // commit_ts of the row at read time. `null` = row didn't exist (so a later\n // insert is a conflict). `undefined` = the read was added synthetically and\n // OCC should fall back to the commit-log scan / general validator.\n expectedCommitTs: BigIntSchema.nullable().optional(),\n});\nexport type PointRead = z.infer<typeof PointReadSchema>;\n\nexport const RawPointReadSchema = z.object({\n kind: z.literal(\"point\"),\n tableId: Uint8ArraySchema,\n id: Uint8ArraySchema,\n table: z.string(),\n expectedCommitTs: BigIntSchema.nullable().optional(),\n});\nexport type RawPointRead = z.infer<typeof RawPointReadSchema>;\n\n/**\n * Query specification for a range read (get with filters).\n * This is the query definition, not the result.\n */\nexport const RangeReadSchema = z.object({\n kind: z.literal(\"range\"),\n table: z.string(),\n // No `tableId`: derived on demand from `table` (see PointReadSchema).\n // tableId: Uint8ArraySchema,\n\n predicate: PredicateSchema,\n columns: z.array(z.string()),\n orderBy: z.array(z.string()).nullable().optional(),\n limit: z.number().nullable().optional(),\n offset: z.number().nullable().optional(),\n});\nexport type RangeRead = z.infer<typeof RangeReadSchema>;\n\nexport const RawRangeReadSchema = z.object({\n kind: z.literal(\"range\"),\n table: z.string(),\n tableId: Uint8ArraySchema,\n predicate: PredicateSchema,\n columns: z.array(z.string()),\n orderBy: z.array(z.string()).nullable().optional(),\n limit: z.number().nullable().optional(),\n offset: z.number().nullable().optional(),\n});\nexport type RawRangeRead = z.infer<typeof RawRangeReadSchema>;\n\nexport const ReadEntrySchema = z.union([PointReadSchema, RangeReadSchema]);\nexport type ReadEntry = z.infer<typeof ReadEntrySchema>;\n\nexport const RawReadEntrySchema = z.union([RawPointReadSchema, RawRangeReadSchema]);\nexport type RawReadEntry = z.infer<typeof RawReadEntrySchema>;\n\nexport const WriteOpSchema = z.enum([\"insert\", \"update\", \"delete\"]);\nexport type WriteOp = z.infer<typeof WriteOpSchema>;\n\nexport const WriteEntrySchema = z.object({\n table: z.string(),\n tableId: Uint8ArraySchema,\n id: z.string(),\n op: WriteOpSchema,\n data: z.record(z.string(), z.unknown()).optional(),\n // Row state at beginTs, before this write. Populated server-side by\n // attachPrevDataToWriteSet for `update`/`delete`. Lets the invalidator\n // detect rows leaving a filtered result set (e.g. status changed from\n // matching to non-matching).\n prevData: z.record(z.string(), z.unknown()).optional(),\n // commit_ts the row had right before this write. Drives the CAS guard:\n // `UPDATE ... WHERE id=? AND commit_ts=expectedCommitTs`. Populated by\n // attachPrevDataToWriteSet or carried over from a prior find() in the\n // same txn. Undefined on inserts.\n expectedCommitTs: BigIntSchema.nullable().optional(),\n});\nexport type WriteEntry = z.infer<typeof WriteEntrySchema>;\n\nexport interface CommitLogEntry {\n id: Uint8Array;\n ts: bigint;\n tableId: Uint8Array;\n data: Uint8Array;\n\n _parsedData?: Record<string, unknown> | null\n}\n\nexport interface MutationResult<T> {\n result: T;\n writeSet: WriteEntry[];\n commitTs: CommitTs;\n}\n\nexport interface LiveResult<T> {\n ts: bigint,\n data: T;\n readSet: ReadEntry[];\n}\n\nexport const QueryCacheMetadataSchema = z.object({\n lastSnapshotTs: BigIntSchema,\n // Identity of the cached DATA this metadata describes = the data's compute\n // snapshot ts, stringified. Distinct from `lastSnapshotTs`, which the worker\n // can advance past the compute ts (a still-fresh entry gets a higher horizon\n // without recomputing). A reader trusts the cached data blob only when its\n // `version` matches this — so a data/metadata pair that diverged (torn read,\n // cross-process write race) is detected and recomputed instead of served stale.\n version: z.string(),\n readSet: z.array(ReadEntrySchema),\n});\nexport type QueryCacheMetadata = z.infer<typeof QueryCacheMetadataSchema>;\n\nexport const QueryCacheEntrySchema = z.object({\n lastSnapshotTs: BigIntSchema,\n data: z.unknown(),\n // Must equal the metadata's `version` for the data to be served (see above).\n version: z.string(),\n});\nexport type QueryCacheEntry = z.infer<typeof QueryCacheEntrySchema>;\n\nexport const CachedPgMetadataSchema = z.record(z.string(), z.record(z.string(), z.string()));\nexport type CachedPgMetadata = z.infer<typeof CachedPgMetadataSchema>;\n\nexport interface RetryConfig {\n maxAttempts: number;\n backoff: \"none\" | \"linear\" | \"exponential\";\n delayMs?: number;\n onConflict?: (attempt: number, error: OccConflictError) => void;\n}\n\nexport const NO_RETRY: RetryConfig = { maxAttempts: 1, backoff: \"none\" };\n\nexport const DEFAULT_RETRY: RetryConfig = {\n maxAttempts: 12,\n backoff: \"exponential\",\n delayMs: 15,\n};\n\nexport class OccConflictError extends Error {\n constructor(\n public readonly reason: string,\n public readonly conflictDetail?: unknown\n ) {\n super(`OCC conflict: ${reason}`);\n this.name = \"OccConflictError\";\n }\n\n static isOccConflictError(err: unknown): boolean {\n if (err instanceof OccConflictError ||\n (err && typeof err === \"object\" && (err as { name?: string }).name === \"OccConflictError\")) {\n return true;\n }\n return false;\n }\n}\n\nexport class OccAbortError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"OccAbortError\";\n }\n}"],"mappings":"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"}
|