@runappsai/sdk 0.5.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/activity-tracker.d.ts +8 -0
- package/dist/activity-tracker.d.ts.map +1 -1
- package/dist/activity-tracker.js +3 -0
- package/dist/activity-tracker.js.map +1 -1
- package/dist/browser-auth.d.ts +7 -0
- package/dist/browser-auth.d.ts.map +1 -1
- package/dist/browser-auth.js +105 -15
- package/dist/browser-auth.js.map +1 -1
- package/dist/client.d.ts +25 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +22 -0
- package/dist/client.js.map +1 -1
- package/dist/events.d.ts +20 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/files.d.ts +3 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +4 -1
- package/dist/files.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/sdk.umd.js +2 -2
- package/dist/sdk.umd.js.map +1 -1
- package/dist/sync/codec.d.ts +39 -0
- package/dist/sync/codec.d.ts.map +1 -0
- package/dist/sync/codec.js +364 -0
- package/dist/sync/codec.js.map +1 -0
- package/dist/sync/engine.d.ts +143 -0
- package/dist/sync/engine.d.ts.map +1 -0
- package/dist/sync/engine.js +727 -0
- package/dist/sync/engine.js.map +1 -0
- package/dist/sync/hook.d.ts +42 -0
- package/dist/sync/hook.d.ts.map +1 -0
- package/dist/sync/hook.js +426 -0
- package/dist/sync/hook.js.map +1 -0
- package/dist/sync/index.d.ts +6 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +6 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/log.d.ts +41 -0
- package/dist/sync/log.d.ts.map +1 -0
- package/dist/sync/log.js +143 -0
- package/dist/sync/log.js.map +1 -0
- package/dist/sync/remote.d.ts +38 -0
- package/dist/sync/remote.d.ts.map +1 -0
- package/dist/sync/remote.js +61 -0
- package/dist/sync/remote.js.map +1 -0
- package/dist/transport.d.ts +5 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +19 -6
- package/dist/transport.js.map +1 -1
- package/package.json +2 -1
- package/src/activity-tracker.ts +5 -0
- package/src/browser-auth.ts +103 -16
- package/src/client.ts +37 -0
- package/src/events.ts +22 -0
- package/src/files.ts +7 -5
- package/src/index.ts +13 -0
- package/src/sync/codec.ts +354 -0
- package/src/sync/engine.ts +818 -0
- package/src/sync/hook.ts +495 -0
- package/src/sync/index.ts +5 -0
- package/src/sync/log.ts +170 -0
- package/src/sync/remote.ts +59 -0
- package/src/transport.ts +20 -8
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** How an encoded value refers to a Blob stored out of band. */
|
|
2
|
+
export interface BlobRef {
|
|
3
|
+
ref: string;
|
|
4
|
+
type: string;
|
|
5
|
+
size: number;
|
|
6
|
+
}
|
|
7
|
+
export interface BlobSink {
|
|
8
|
+
/** Store the blob and return a stable reference for it. */
|
|
9
|
+
(blob: Blob): Promise<BlobRef>;
|
|
10
|
+
}
|
|
11
|
+
export interface BlobSource {
|
|
12
|
+
(ref: BlobRef): Promise<Blob>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Encode a structured-clone value into a JSON-safe one. Async only
|
|
16
|
+
* because Blobs have to be read.
|
|
17
|
+
*/
|
|
18
|
+
export declare function encodeValue(value: unknown, sink?: BlobSink): Promise<unknown>;
|
|
19
|
+
/** Inverse of `encodeValue`. */
|
|
20
|
+
export declare function decodeValue(value: unknown, source?: BlobSource): Promise<unknown>;
|
|
21
|
+
export declare function encodeKey(key: IDBValidKey): unknown;
|
|
22
|
+
export declare function decodeKey(encoded: unknown): IDBValidKey;
|
|
23
|
+
/** Canonical string id for a key: equal keys give equal ids. */
|
|
24
|
+
export declare function keyId(key: IDBValidKey): string;
|
|
25
|
+
/** Deterministic 32-bit hash of a string (FNV-1a). */
|
|
26
|
+
export declare function hash32(s: string): number;
|
|
27
|
+
/**
|
|
28
|
+
* Structural equality for structured-clone values: Dates by time,
|
|
29
|
+
* binary by bytes, Map/Set by entries, Blobs by identity (two different
|
|
30
|
+
* Blob objects count as a change). Used to find which fields a write
|
|
31
|
+
* touched.
|
|
32
|
+
*/
|
|
33
|
+
export declare function deepEqual(a: unknown, b: unknown): boolean;
|
|
34
|
+
/** The fields of `value` that differ from `prior` (added, changed or
|
|
35
|
+
* removed). `undefined` when there is no prior: everything is new. */
|
|
36
|
+
export declare function changedFields(prior: unknown, value: unknown): string[] | undefined;
|
|
37
|
+
/** Read an inline key out of a value by IndexedDB keyPath rules. */
|
|
38
|
+
export declare function extractKey(value: unknown, keyPath: string | string[] | null): IDBValidKey | undefined;
|
|
39
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/sync/codec.ts"],"names":[],"mappings":"AAeA,gEAAgE;AAChE,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,2DAA2D;IAC3D,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAmDD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAwEnF;AAED,gCAAgC;AAChC,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAyDvF;AASD,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAiBnD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAcvD;AAED,gEAAgE;AAChE,wBAAgB,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAE9C;AAED,sDAAsD;AACtD,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAOxC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAuCzD;AAED;uEACuE;AACvE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CASlF;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,WAAW,GAAG,SAAS,CAiBrG"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
// sync/codec.ts — JSON encoding for IndexedDB values and keys.
|
|
2
|
+
//
|
|
3
|
+
// IndexedDB stores anything the structured-clone algorithm accepts:
|
|
4
|
+
// Dates, Maps, Sets, binary, Blobs, nested objects, undefined. The sync
|
|
5
|
+
// snapshots on the server are JSON, so every such value is wrapped in a
|
|
6
|
+
// small tagged object on the way out and rebuilt on the way in. Plain
|
|
7
|
+
// JSON values pass through untouched, which keeps the common case (a
|
|
8
|
+
// record of strings and numbers) byte-for-byte readable on the server.
|
|
9
|
+
//
|
|
10
|
+
// Blobs are not inlined: `encodeValue` hands them to a `BlobSink` which
|
|
11
|
+
// stores the bytes elsewhere (the engine uploads them as files) and
|
|
12
|
+
// returns a reference; `decodeValue` asks a `BlobSource` for the bytes.
|
|
13
|
+
const TAG = "$rt";
|
|
14
|
+
const BIN_CTORS = {
|
|
15
|
+
ArrayBuffer: (b) => b,
|
|
16
|
+
Uint8Array: (b) => new Uint8Array(b),
|
|
17
|
+
Int8Array: (b) => new Int8Array(b),
|
|
18
|
+
Uint8ClampedArray: (b) => new Uint8ClampedArray(b),
|
|
19
|
+
Int16Array: (b) => new Int16Array(b),
|
|
20
|
+
Uint16Array: (b) => new Uint16Array(b),
|
|
21
|
+
Int32Array: (b) => new Int32Array(b),
|
|
22
|
+
Uint32Array: (b) => new Uint32Array(b),
|
|
23
|
+
Float32Array: (b) => new Float32Array(b),
|
|
24
|
+
Float64Array: (b) => new Float64Array(b),
|
|
25
|
+
BigInt64Array: (b) => new BigInt64Array(b),
|
|
26
|
+
BigUint64Array: (b) => new BigUint64Array(b),
|
|
27
|
+
DataView: (b) => new DataView(b),
|
|
28
|
+
};
|
|
29
|
+
function bytesToBase64(bytes) {
|
|
30
|
+
let s = "";
|
|
31
|
+
for (let i = 0; i < bytes.length; i += 0x8000) {
|
|
32
|
+
s += String.fromCharCode(...bytes.subarray(i, i + 0x8000));
|
|
33
|
+
}
|
|
34
|
+
return btoa(s);
|
|
35
|
+
}
|
|
36
|
+
function base64ToBytes(b64) {
|
|
37
|
+
const s = atob(b64);
|
|
38
|
+
const out = new Uint8Array(s.length);
|
|
39
|
+
for (let i = 0; i < s.length; i++)
|
|
40
|
+
out[i] = s.charCodeAt(i);
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
function isPlainObject(v) {
|
|
44
|
+
if (v === null || typeof v !== "object")
|
|
45
|
+
return false;
|
|
46
|
+
const proto = Object.getPrototypeOf(v);
|
|
47
|
+
return proto === Object.prototype || proto === null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Encode a structured-clone value into a JSON-safe one. Async only
|
|
51
|
+
* because Blobs have to be read.
|
|
52
|
+
*/
|
|
53
|
+
export async function encodeValue(value, sink) {
|
|
54
|
+
if (value === undefined)
|
|
55
|
+
return { [TAG]: "undef" };
|
|
56
|
+
if (value === null)
|
|
57
|
+
return null;
|
|
58
|
+
switch (typeof value) {
|
|
59
|
+
case "string":
|
|
60
|
+
case "boolean":
|
|
61
|
+
return value;
|
|
62
|
+
case "number":
|
|
63
|
+
if (Number.isNaN(value))
|
|
64
|
+
return { [TAG]: "num", v: "NaN" };
|
|
65
|
+
if (value === Infinity)
|
|
66
|
+
return { [TAG]: "num", v: "Infinity" };
|
|
67
|
+
if (value === -Infinity)
|
|
68
|
+
return { [TAG]: "num", v: "-Infinity" };
|
|
69
|
+
if (Object.is(value, -0))
|
|
70
|
+
return { [TAG]: "num", v: "-0" };
|
|
71
|
+
return value;
|
|
72
|
+
case "bigint":
|
|
73
|
+
return { [TAG]: "bigint", v: value.toString() };
|
|
74
|
+
case "function":
|
|
75
|
+
case "symbol":
|
|
76
|
+
throw new TypeError(`runapps sync: ${typeof value} values cannot be stored`);
|
|
77
|
+
}
|
|
78
|
+
if (value instanceof Date) {
|
|
79
|
+
const t = value.getTime();
|
|
80
|
+
return { [TAG]: "date", v: Number.isNaN(t) ? "invalid" : t };
|
|
81
|
+
}
|
|
82
|
+
if (value instanceof RegExp)
|
|
83
|
+
return { [TAG]: "re", s: value.source, f: value.flags };
|
|
84
|
+
if (typeof Blob !== "undefined" && value instanceof Blob) {
|
|
85
|
+
if (!sink)
|
|
86
|
+
throw new TypeError("runapps sync: Blob values need a blob sink");
|
|
87
|
+
const ref = await sink(value);
|
|
88
|
+
const out = { [TAG]: "blob", r: ref.ref, t: ref.type, s: ref.size };
|
|
89
|
+
const f = value;
|
|
90
|
+
if (typeof File !== "undefined" && value instanceof File) {
|
|
91
|
+
out.n = f.name;
|
|
92
|
+
out.m = f.lastModified;
|
|
93
|
+
}
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
if (value instanceof ArrayBuffer) {
|
|
97
|
+
return { [TAG]: "bin", c: "ArrayBuffer", v: bytesToBase64(new Uint8Array(value)) };
|
|
98
|
+
}
|
|
99
|
+
if (ArrayBuffer.isView(value)) {
|
|
100
|
+
const name = value.constructor.name;
|
|
101
|
+
if (!(name in BIN_CTORS))
|
|
102
|
+
throw new TypeError(`runapps sync: unsupported binary type ${name}`);
|
|
103
|
+
const bytes = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
104
|
+
return { [TAG]: "bin", c: name, v: bytesToBase64(bytes) };
|
|
105
|
+
}
|
|
106
|
+
if (value instanceof Map) {
|
|
107
|
+
const v = [];
|
|
108
|
+
for (const [k, x] of value)
|
|
109
|
+
v.push([await encodeValue(k, sink), await encodeValue(x, sink)]);
|
|
110
|
+
return { [TAG]: "map", v };
|
|
111
|
+
}
|
|
112
|
+
if (value instanceof Set) {
|
|
113
|
+
const v = [];
|
|
114
|
+
for (const x of value)
|
|
115
|
+
v.push(await encodeValue(x, sink));
|
|
116
|
+
return { [TAG]: "set", v };
|
|
117
|
+
}
|
|
118
|
+
if (Array.isArray(value)) {
|
|
119
|
+
const out = new Array(value.length);
|
|
120
|
+
for (let i = 0; i < value.length; i++)
|
|
121
|
+
out[i] = await encodeValue(value[i], sink);
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
if (isPlainObject(value)) {
|
|
125
|
+
// A plain object that happens to carry our tag key is wrapped so it
|
|
126
|
+
// cannot be mistaken for an encoding marker.
|
|
127
|
+
const needsWrap = Object.prototype.hasOwnProperty.call(value, TAG);
|
|
128
|
+
const out = {};
|
|
129
|
+
for (const k of Object.keys(value))
|
|
130
|
+
out[k] = await encodeValue(value[k], sink);
|
|
131
|
+
return needsWrap ? { [TAG]: "obj", v: out } : out;
|
|
132
|
+
}
|
|
133
|
+
// Class instances: structured clone keeps own enumerable properties
|
|
134
|
+
// only, so do the same.
|
|
135
|
+
const out = {};
|
|
136
|
+
for (const k of Object.keys(value))
|
|
137
|
+
out[k] = await encodeValue(value[k], sink);
|
|
138
|
+
return out;
|
|
139
|
+
}
|
|
140
|
+
/** Inverse of `encodeValue`. */
|
|
141
|
+
export async function decodeValue(value, source) {
|
|
142
|
+
if (value === null || typeof value !== "object")
|
|
143
|
+
return value;
|
|
144
|
+
if (Array.isArray(value)) {
|
|
145
|
+
const out = new Array(value.length);
|
|
146
|
+
for (let i = 0; i < value.length; i++)
|
|
147
|
+
out[i] = await decodeValue(value[i], source);
|
|
148
|
+
return out;
|
|
149
|
+
}
|
|
150
|
+
const obj = value;
|
|
151
|
+
const tag = obj[TAG];
|
|
152
|
+
if (typeof tag === "string") {
|
|
153
|
+
const t = obj;
|
|
154
|
+
switch (t[TAG]) {
|
|
155
|
+
case "undef":
|
|
156
|
+
return undefined;
|
|
157
|
+
case "date":
|
|
158
|
+
return t.v === "invalid" ? new Date(NaN) : new Date(t.v);
|
|
159
|
+
case "num":
|
|
160
|
+
return t.v === "NaN" ? NaN : t.v === "Infinity" ? Infinity : t.v === "-Infinity" ? -Infinity : -0;
|
|
161
|
+
case "bigint":
|
|
162
|
+
return BigInt(t.v);
|
|
163
|
+
case "re":
|
|
164
|
+
return new RegExp(t.s, t.f);
|
|
165
|
+
case "bin": {
|
|
166
|
+
const bytes = base64ToBytes(t.v);
|
|
167
|
+
const buf = new ArrayBuffer(bytes.byteLength);
|
|
168
|
+
new Uint8Array(buf).set(bytes);
|
|
169
|
+
const make = BIN_CTORS[t.c];
|
|
170
|
+
if (!make)
|
|
171
|
+
throw new TypeError(`runapps sync: unsupported binary type ${t.c}`);
|
|
172
|
+
return make(buf);
|
|
173
|
+
}
|
|
174
|
+
case "map": {
|
|
175
|
+
const m = new Map();
|
|
176
|
+
for (const pair of t.v) {
|
|
177
|
+
m.set(await decodeValue(pair[0], source), await decodeValue(pair[1], source));
|
|
178
|
+
}
|
|
179
|
+
return m;
|
|
180
|
+
}
|
|
181
|
+
case "set": {
|
|
182
|
+
const s = new Set();
|
|
183
|
+
for (const x of t.v)
|
|
184
|
+
s.add(await decodeValue(x, source));
|
|
185
|
+
return s;
|
|
186
|
+
}
|
|
187
|
+
case "blob": {
|
|
188
|
+
if (!source)
|
|
189
|
+
throw new TypeError("runapps sync: Blob values need a blob source");
|
|
190
|
+
const blob = await source({ ref: t.r, type: t.t, size: t.s });
|
|
191
|
+
if (t.n !== undefined && typeof File !== "undefined") {
|
|
192
|
+
return new File([blob], t.n, { type: t.t, lastModified: t.m ?? Date.now() });
|
|
193
|
+
}
|
|
194
|
+
return blob;
|
|
195
|
+
}
|
|
196
|
+
case "obj":
|
|
197
|
+
return decodeValue(t.v, source);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const out = {};
|
|
201
|
+
for (const k of Object.keys(obj))
|
|
202
|
+
out[k] = await decodeValue(obj[k], source);
|
|
203
|
+
return out;
|
|
204
|
+
}
|
|
205
|
+
// ── Keys ─────────────────────────────────────────────────────────────
|
|
206
|
+
//
|
|
207
|
+
// A valid IndexedDB key is a number, a string, a Date, binary, or an
|
|
208
|
+
// array of those. Keys are encoded synchronously (no Blobs possible)
|
|
209
|
+
// and also rendered to a canonical string that serves as the record id
|
|
210
|
+
// inside a shard and as the input to the shard hash.
|
|
211
|
+
export function encodeKey(key) {
|
|
212
|
+
if (typeof key === "number") {
|
|
213
|
+
if (Number.isNaN(key))
|
|
214
|
+
throw new TypeError("runapps sync: NaN is not a valid key");
|
|
215
|
+
return key;
|
|
216
|
+
}
|
|
217
|
+
if (typeof key === "string")
|
|
218
|
+
return key;
|
|
219
|
+
if (key instanceof Date)
|
|
220
|
+
return { [TAG]: "date", v: key.getTime() };
|
|
221
|
+
if (key instanceof ArrayBuffer)
|
|
222
|
+
return { [TAG]: "bin", c: "ArrayBuffer", v: bytesToBase64(new Uint8Array(key)) };
|
|
223
|
+
if (ArrayBuffer.isView(key)) {
|
|
224
|
+
return {
|
|
225
|
+
[TAG]: "bin",
|
|
226
|
+
c: "ArrayBuffer",
|
|
227
|
+
v: bytesToBase64(new Uint8Array(key.buffer, key.byteOffset, key.byteLength)),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
if (Array.isArray(key))
|
|
231
|
+
return key.map((k) => encodeKey(k));
|
|
232
|
+
throw new TypeError("runapps sync: invalid IndexedDB key");
|
|
233
|
+
}
|
|
234
|
+
export function decodeKey(encoded) {
|
|
235
|
+
if (typeof encoded === "number" || typeof encoded === "string")
|
|
236
|
+
return encoded;
|
|
237
|
+
if (Array.isArray(encoded))
|
|
238
|
+
return encoded.map(decodeKey);
|
|
239
|
+
if (encoded && typeof encoded === "object") {
|
|
240
|
+
const t = encoded;
|
|
241
|
+
if (t[TAG] === "date")
|
|
242
|
+
return new Date(t.v);
|
|
243
|
+
if (t[TAG] === "bin") {
|
|
244
|
+
const bytes = base64ToBytes(t.v);
|
|
245
|
+
const buf = new ArrayBuffer(bytes.byteLength);
|
|
246
|
+
new Uint8Array(buf).set(bytes);
|
|
247
|
+
return buf;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
throw new TypeError("runapps sync: invalid encoded key");
|
|
251
|
+
}
|
|
252
|
+
/** Canonical string id for a key: equal keys give equal ids. */
|
|
253
|
+
export function keyId(key) {
|
|
254
|
+
return JSON.stringify(encodeKey(key));
|
|
255
|
+
}
|
|
256
|
+
/** Deterministic 32-bit hash of a string (FNV-1a). */
|
|
257
|
+
export function hash32(s) {
|
|
258
|
+
let h = 0x811c9dc5;
|
|
259
|
+
for (let i = 0; i < s.length; i++) {
|
|
260
|
+
h ^= s.charCodeAt(i);
|
|
261
|
+
h = Math.imul(h, 0x01000193);
|
|
262
|
+
}
|
|
263
|
+
return h >>> 0;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Structural equality for structured-clone values: Dates by time,
|
|
267
|
+
* binary by bytes, Map/Set by entries, Blobs by identity (two different
|
|
268
|
+
* Blob objects count as a change). Used to find which fields a write
|
|
269
|
+
* touched.
|
|
270
|
+
*/
|
|
271
|
+
export function deepEqual(a, b) {
|
|
272
|
+
if (Object.is(a, b))
|
|
273
|
+
return true;
|
|
274
|
+
if (a === null || b === null || typeof a !== "object" || typeof b !== "object")
|
|
275
|
+
return false;
|
|
276
|
+
if (a instanceof Date || b instanceof Date) {
|
|
277
|
+
return a instanceof Date && b instanceof Date && Object.is(a.getTime(), b.getTime());
|
|
278
|
+
}
|
|
279
|
+
if (typeof Blob !== "undefined" && (a instanceof Blob || b instanceof Blob))
|
|
280
|
+
return false;
|
|
281
|
+
if (ArrayBuffer.isView(a) || a instanceof ArrayBuffer || ArrayBuffer.isView(b) || b instanceof ArrayBuffer) {
|
|
282
|
+
const toBytes = (x) => x instanceof ArrayBuffer ? new Uint8Array(x) : ArrayBuffer.isView(x) ? new Uint8Array(x.buffer, x.byteOffset, x.byteLength) : null;
|
|
283
|
+
const ba = toBytes(a);
|
|
284
|
+
const bb = toBytes(b);
|
|
285
|
+
if (!ba || !bb || ba.length !== bb.length || a.constructor !== b.constructor)
|
|
286
|
+
return false;
|
|
287
|
+
for (let i = 0; i < ba.length; i++)
|
|
288
|
+
if (ba[i] !== bb[i])
|
|
289
|
+
return false;
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
if (a instanceof Map || b instanceof Map) {
|
|
293
|
+
if (!(a instanceof Map && b instanceof Map) || a.size !== b.size)
|
|
294
|
+
return false;
|
|
295
|
+
for (const [k, v] of a)
|
|
296
|
+
if (!b.has(k) || !deepEqual(v, b.get(k)))
|
|
297
|
+
return false;
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
if (a instanceof Set || b instanceof Set) {
|
|
301
|
+
if (!(a instanceof Set && b instanceof Set) || a.size !== b.size)
|
|
302
|
+
return false;
|
|
303
|
+
for (const v of a)
|
|
304
|
+
if (!b.has(v))
|
|
305
|
+
return false;
|
|
306
|
+
return true;
|
|
307
|
+
}
|
|
308
|
+
if (Array.isArray(a) || Array.isArray(b)) {
|
|
309
|
+
if (!(Array.isArray(a) && Array.isArray(b)) || a.length !== b.length)
|
|
310
|
+
return false;
|
|
311
|
+
for (let i = 0; i < a.length; i++)
|
|
312
|
+
if (!deepEqual(a[i], b[i]))
|
|
313
|
+
return false;
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
const ka = Object.keys(a);
|
|
317
|
+
const kb = Object.keys(b);
|
|
318
|
+
if (ka.length !== kb.length)
|
|
319
|
+
return false;
|
|
320
|
+
for (const k of ka) {
|
|
321
|
+
if (!Object.prototype.hasOwnProperty.call(b, k))
|
|
322
|
+
return false;
|
|
323
|
+
if (!deepEqual(a[k], b[k]))
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
return true;
|
|
327
|
+
}
|
|
328
|
+
/** The fields of `value` that differ from `prior` (added, changed or
|
|
329
|
+
* removed). `undefined` when there is no prior: everything is new. */
|
|
330
|
+
export function changedFields(prior, value) {
|
|
331
|
+
if (!isPlainObject(prior) || !isPlainObject(value))
|
|
332
|
+
return undefined;
|
|
333
|
+
const out = [];
|
|
334
|
+
for (const k of new Set([...Object.keys(prior), ...Object.keys(value)])) {
|
|
335
|
+
const inP = Object.prototype.hasOwnProperty.call(prior, k);
|
|
336
|
+
const inV = Object.prototype.hasOwnProperty.call(value, k);
|
|
337
|
+
if (inP !== inV || !deepEqual(prior[k], value[k]))
|
|
338
|
+
out.push(k);
|
|
339
|
+
}
|
|
340
|
+
return out;
|
|
341
|
+
}
|
|
342
|
+
/** Read an inline key out of a value by IndexedDB keyPath rules. */
|
|
343
|
+
export function extractKey(value, keyPath) {
|
|
344
|
+
if (keyPath === null || keyPath === undefined)
|
|
345
|
+
return undefined;
|
|
346
|
+
const one = (path) => {
|
|
347
|
+
let cur = value;
|
|
348
|
+
if (path === "")
|
|
349
|
+
return cur;
|
|
350
|
+
for (const part of path.split(".")) {
|
|
351
|
+
if (cur === null || typeof cur !== "object")
|
|
352
|
+
return undefined;
|
|
353
|
+
cur = cur[part];
|
|
354
|
+
}
|
|
355
|
+
return cur;
|
|
356
|
+
};
|
|
357
|
+
if (Array.isArray(keyPath)) {
|
|
358
|
+
const parts = keyPath.map(one);
|
|
359
|
+
return parts.some((p) => p === undefined) ? undefined : parts;
|
|
360
|
+
}
|
|
361
|
+
const k = one(keyPath);
|
|
362
|
+
return k === undefined ? undefined : k;
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/sync/codec.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,oEAAoE;AACpE,wEAAwE;AACxE,wEAAwE;AACxE,sEAAsE;AACtE,qEAAqE;AACrE,uEAAuE;AACvE,EAAE;AACF,wEAAwE;AACxE,oEAAoE;AACpE,wEAAwE;AAExE,MAAM,GAAG,GAAG,KAAK,CAAC;AA8BlB,MAAM,SAAS,GAAwE;IACrF,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;IACpC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;IAClC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC;IAClD,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;IACtC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;IACtC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC;IACxC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC;IACxC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IAC1C,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC;IAC5C,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;CACjC,CAAC;AAEF,SAAS,aAAa,CAAC,KAAiB;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;QAC9C,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAc,EAAE,IAAe;IAC/D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAmB,CAAC;IACpE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;YAC3D,IAAI,KAAK,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC/D,IAAI,KAAK,KAAK,CAAC,QAAQ;gBAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;YACjE,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClD,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACX,MAAM,IAAI,SAAS,CAAC,iBAAiB,OAAO,KAAK,0BAA0B,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,KAAK,YAAY,MAAM;QAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACrF,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QACzD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAW,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5E,MAAM,CAAC,GAAG,KAAwD,CAAC;QACnE,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YACzD,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACf,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC;QACzB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;IACrF,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;QACpC,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;QAC/F,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/E,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,MAAM,CAAC,GAAc,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;YAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,MAAM,CAAC,GAAc,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,CAAC,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAc,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,oEAAoE;QACpE,6CAA6C;QAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/E,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,CAAC;IACD,oEAAoE;IACpE,wBAAwB;IACxB,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACtH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gCAAgC;AAChC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAc,EAAE,MAAmB;IACnE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAc,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACpF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,GAAwB,CAAC;QACnC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,KAAK,OAAO;gBACV,OAAO,SAAS,CAAC;YACnB,KAAK,MAAM;gBACT,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,KAAK,KAAK;gBACR,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpG,KAAK,QAAQ;gBACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,KAAK,IAAI;gBACP,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC9C,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,CAAC,GAAG,IAAI,GAAG,EAAoB,CAAC;gBACtC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAyB,EAAE,CAAC;oBAC/C,CAAC,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChF,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC;YACD,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,CAAC,GAAG,IAAI,GAAG,EAAW,CAAC;gBAC7B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;oBAAE,CAAC,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBACzD,OAAO,CAAC,CAAC;YACX,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;gBACjF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9D,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;oBACrD,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC/E,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,KAAK;gBACR,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,wEAAwE;AACxE,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,uEAAuE;AACvE,qDAAqD;AAErD,MAAM,UAAU,SAAS,CAAC,GAAgB;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACnF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,GAAG,YAAY,IAAI;QAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACpE,IAAI,GAAG,YAAY,WAAW;QAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACjH,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,CAAC,GAAG,CAAC,EAAE,KAAK;YACZ,CAAC,EAAE,aAAa;YAChB,CAAC,EAAE,aAAa,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;SAC7E,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAgB,CAAC,CAAC,CAAC;IAC3E,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,OAA0C,CAAC;QACrD,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,MAAM;YAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;QACtD,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;AAC3D,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,KAAK,CAAC,GAAgB;IACpC,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,CAAU,EAAE,CAAU;IAC9C,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC7F,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QAC3C,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1F,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC;QAC3G,MAAM,OAAO,GAAG,CAAC,CAAU,EAAqB,EAAE,CAChD,CAAC,YAAY,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrI,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC/E,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC/E,KAAK,MAAM,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACnF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAW,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAW,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAE,CAA6B,CAAC,CAAC,CAAC,EAAG,CAA6B,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACrG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;uEACuE;AACvE,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,KAAc;IAC1D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACrE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,OAAiC;IAC1E,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,GAAG,GAAG,CAAC,IAAY,EAAW,EAAE;QACpC,IAAI,GAAG,GAAY,KAAK,CAAC;QACzB,IAAI,IAAI,KAAK,EAAE;YAAE,OAAO,GAAG,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YAC9D,GAAG,GAAI,GAA+B,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,KAAuB,CAAC;IACnF,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,CAAiB,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { idbRequest } from "./log.js";
|
|
2
|
+
import type { SDKEvents } from "../events.js";
|
|
3
|
+
export interface SyncOptions {
|
|
4
|
+
/** Observe only these databases (by name). Default: every database the
|
|
5
|
+
* app opens, except the SDK's own. */
|
|
6
|
+
databases?: string[];
|
|
7
|
+
/** Leave out a whole database (`"cache"`) or one store (`"app/videos"`). */
|
|
8
|
+
exclude?: string[];
|
|
9
|
+
/** Shards per store. Default 8. Changing it later splits data: pick once. */
|
|
10
|
+
shards?: number;
|
|
11
|
+
/** How long to gather local writes before pushing. Default 2500 ms. */
|
|
12
|
+
pushDelayMs?: number;
|
|
13
|
+
/** Background pull interval while the page is visible. Default 60 s. */
|
|
14
|
+
pullIntervalMs?: number;
|
|
15
|
+
/** How long a database open waits for the first pull. Default 5 s. */
|
|
16
|
+
openTimeoutMs?: number;
|
|
17
|
+
/** Path prefix in the user's file space. Default "db". */
|
|
18
|
+
prefix?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface SyncState {
|
|
21
|
+
/** off: no signed-in user; idle: everything pushed; syncing: a push or
|
|
22
|
+
* pull is running; offline: changes waiting for the network; error:
|
|
23
|
+
* the last attempt failed, will retry. */
|
|
24
|
+
state: "off" | "idle" | "syncing" | "offline" | "error";
|
|
25
|
+
/** Local changes not yet on the server. */
|
|
26
|
+
pending: number;
|
|
27
|
+
lastSyncedAt?: number;
|
|
28
|
+
error?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface DbChange {
|
|
31
|
+
db: string;
|
|
32
|
+
store: string;
|
|
33
|
+
/** Primary keys that changed; empty when the whole store was cleared. */
|
|
34
|
+
keys: IDBValidKey[];
|
|
35
|
+
cleared: boolean;
|
|
36
|
+
source: "remote";
|
|
37
|
+
}
|
|
38
|
+
/** What the engine needs from the rest of the SDK. */
|
|
39
|
+
export interface SyncDeps {
|
|
40
|
+
remote: SyncRemote;
|
|
41
|
+
events: SDKEvents;
|
|
42
|
+
/** Signed-in user id, or null. */
|
|
43
|
+
userId: () => string | null;
|
|
44
|
+
/** Subscribe to sign-in changes. */
|
|
45
|
+
onAuthChange: (cb: () => void) => () => void;
|
|
46
|
+
/** The IndexedDB factory to observe. Default: the global one. */
|
|
47
|
+
factory?: IDBFactory;
|
|
48
|
+
}
|
|
49
|
+
/** The storage side. Implemented over FilesService; tests use memory. */
|
|
50
|
+
export interface SyncRemote {
|
|
51
|
+
list(prefix: string): Promise<{
|
|
52
|
+
path: string;
|
|
53
|
+
etag: string;
|
|
54
|
+
}[]>;
|
|
55
|
+
getJSON(path: string, ifNoneMatch?: string): Promise<{
|
|
56
|
+
status: "ok";
|
|
57
|
+
value: unknown;
|
|
58
|
+
etag: string;
|
|
59
|
+
serverTime?: number;
|
|
60
|
+
} | {
|
|
61
|
+
status: "missing";
|
|
62
|
+
} | {
|
|
63
|
+
status: "unchanged";
|
|
64
|
+
}>;
|
|
65
|
+
putJSON(path: string, value: unknown, cond: {
|
|
66
|
+
ifMatch?: string;
|
|
67
|
+
ifNoneMatch?: boolean;
|
|
68
|
+
}): Promise<{
|
|
69
|
+
status: "ok";
|
|
70
|
+
etag: string;
|
|
71
|
+
serverTime?: number;
|
|
72
|
+
} | {
|
|
73
|
+
status: "conflict";
|
|
74
|
+
}>;
|
|
75
|
+
putBlob(path: string, blob: Blob): Promise<void>;
|
|
76
|
+
getBlob(path: string): Promise<Blob>;
|
|
77
|
+
}
|
|
78
|
+
export declare class SyncEngine {
|
|
79
|
+
private readonly deps;
|
|
80
|
+
readonly options: Required<SyncOptions>;
|
|
81
|
+
private readonly log;
|
|
82
|
+
private readonly hook;
|
|
83
|
+
private readonly clock;
|
|
84
|
+
private readonly schemas;
|
|
85
|
+
private readonly etags;
|
|
86
|
+
private readonly conns;
|
|
87
|
+
private state;
|
|
88
|
+
private paused;
|
|
89
|
+
private disposed;
|
|
90
|
+
private leader;
|
|
91
|
+
private pushTimer;
|
|
92
|
+
private pushDeadline;
|
|
93
|
+
private pullTimer;
|
|
94
|
+
private backoffMs;
|
|
95
|
+
private backoffUntil;
|
|
96
|
+
private chain;
|
|
97
|
+
private readonly cleanup;
|
|
98
|
+
private channel;
|
|
99
|
+
private metaLoaded;
|
|
100
|
+
constructor(deps: SyncDeps, options?: SyncOptions);
|
|
101
|
+
status(): SyncState;
|
|
102
|
+
/** Push pending changes and pull remote ones now. */
|
|
103
|
+
now(): Promise<void>;
|
|
104
|
+
pause(): void;
|
|
105
|
+
resume(): void;
|
|
106
|
+
dispose(): void;
|
|
107
|
+
private onCommit;
|
|
108
|
+
private logChain;
|
|
109
|
+
private enqueueLog;
|
|
110
|
+
private onOpen;
|
|
111
|
+
private onDeleteDatabase;
|
|
112
|
+
private attachBrowserTriggers;
|
|
113
|
+
private updatePullTimer;
|
|
114
|
+
private schedulePush;
|
|
115
|
+
private schedule;
|
|
116
|
+
private enqueue;
|
|
117
|
+
private setState;
|
|
118
|
+
private refreshPending;
|
|
119
|
+
private fail;
|
|
120
|
+
private loadMeta;
|
|
121
|
+
/** The local copy belongs to one user. Another user signing in on the
|
|
122
|
+
* same browser starts from the server's copy, never from theirs. */
|
|
123
|
+
private ensureOwner;
|
|
124
|
+
private sync;
|
|
125
|
+
private storeExcluded;
|
|
126
|
+
private shardPath;
|
|
127
|
+
private shardOf;
|
|
128
|
+
private readShard;
|
|
129
|
+
private push;
|
|
130
|
+
private encodeOp;
|
|
131
|
+
/** Merge ops into one shard and write it; retried on a 412. */
|
|
132
|
+
private writeShard;
|
|
133
|
+
private storeBlob;
|
|
134
|
+
private pull;
|
|
135
|
+
private pullDatabase;
|
|
136
|
+
private applyListing;
|
|
137
|
+
private applyShard;
|
|
138
|
+
private emitChange;
|
|
139
|
+
private conn;
|
|
140
|
+
private withStore;
|
|
141
|
+
}
|
|
142
|
+
export { idbRequest };
|
|
143
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/sync/engine.ts"],"names":[],"mappings":"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"}
|