tinybase 6.1.0-beta.3 → 6.1.0-beta.5
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/@types/persisters/index.d.ts +83 -40
- package/@types/persisters/persister-automerge/index.d.ts +4 -4
- package/@types/persisters/persister-automerge/with-schemas/index.d.ts +4 -4
- package/@types/persisters/persister-browser/index.d.ts +4 -4
- package/@types/persisters/persister-browser/with-schemas/index.d.ts +4 -4
- package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +3 -3
- package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-electric-sql/index.d.ts +3 -3
- package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-expo-sqlite/index.d.ts +3 -3
- package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-file/index.d.ts +2 -2
- package/@types/persisters/persister-file/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-indexed-db/index.d.ts +2 -2
- package/@types/persisters/persister-indexed-db/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-libsql/index.d.ts +3 -3
- package/@types/persisters/persister-libsql/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-partykit-client/index.d.ts +2 -2
- package/@types/persisters/persister-partykit-client/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-pglite/index.d.ts +3 -3
- package/@types/persisters/persister-pglite/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-postgres/index.d.ts +3 -3
- package/@types/persisters/persister-postgres/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-powersync/index.d.ts +3 -3
- package/@types/persisters/persister-powersync/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-remote/index.d.ts +2 -2
- package/@types/persisters/persister-remote/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-sqlite-bun/index.d.ts +159 -0
- package/@types/persisters/persister-sqlite-bun/with-schemas/index.d.ts +178 -0
- package/@types/persisters/persister-sqlite-wasm/index.d.ts +3 -3
- package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-sqlite3/index.d.ts +3 -3
- package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-yjs/index.d.ts +4 -4
- package/@types/persisters/persister-yjs/with-schemas/index.d.ts +4 -4
- package/@types/persisters/with-schemas/index.d.ts +87 -42
- package/@types/synchronizers/index.d.ts +18 -16
- package/@types/synchronizers/synchronizer-broadcast-channel/index.d.ts +3 -3
- package/@types/synchronizers/synchronizer-broadcast-channel/with-schemas/index.d.ts +3 -3
- package/@types/synchronizers/synchronizer-local/index.d.ts +2 -2
- package/@types/synchronizers/synchronizer-local/with-schemas/index.d.ts +2 -2
- package/@types/synchronizers/synchronizer-ws-client/index.d.ts +5 -5
- package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +5 -5
- package/@types/synchronizers/synchronizer-ws-server/index.d.ts +37 -37
- package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +37 -37
- package/@types/synchronizers/synchronizer-ws-server-simple/index.d.ts +7 -7
- package/@types/synchronizers/synchronizer-ws-server-simple/with-schemas/index.d.ts +7 -7
- package/@types/synchronizers/with-schemas/index.d.ts +18 -16
- package/@types/ui-react/index.d.ts +2 -2
- package/@types/ui-react/with-schemas/index.d.ts +2 -2
- package/index.js +23 -17
- package/mergeable-store/index.js +23 -17
- package/mergeable-store/with-schemas/index.js +23 -17
- package/min/index.js +1 -1
- package/min/index.js.gz +0 -0
- package/min/mergeable-store/index.js +1 -1
- package/min/mergeable-store/index.js.gz +0 -0
- package/min/mergeable-store/with-schemas/index.js +1 -1
- package/min/mergeable-store/with-schemas/index.js.gz +0 -0
- package/min/persisters/index.js +1 -1
- package/min/persisters/index.js.gz +0 -0
- package/min/persisters/persister-automerge/index.js +1 -1
- package/min/persisters/persister-automerge/index.js.gz +0 -0
- package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
- package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-browser/index.js +1 -1
- package/min/persisters/persister-browser/index.js.gz +0 -0
- package/min/persisters/persister-browser/with-schemas/index.js +1 -1
- package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/index.js +1 -1
- package/min/persisters/persister-electric-sql/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
- package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-file/index.js +1 -1
- package/min/persisters/persister-file/index.js.gz +0 -0
- package/min/persisters/persister-file/with-schemas/index.js +1 -1
- package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/index.js +1 -1
- package/min/persisters/persister-indexed-db/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
- package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-libsql/index.js +1 -1
- package/min/persisters/persister-libsql/index.js.gz +0 -0
- package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
- package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/index.js +1 -1
- package/min/persisters/persister-partykit-client/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pglite/index.js +1 -1
- package/min/persisters/persister-pglite/index.js.gz +0 -0
- package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
- package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-postgres/index.js +1 -1
- package/min/persisters/persister-postgres/index.js.gz +0 -0
- package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
- package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-powersync/index.js +1 -1
- package/min/persisters/persister-powersync/index.js.gz +0 -0
- package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
- package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-remote/index.js +1 -1
- package/min/persisters/persister-remote/index.js.gz +0 -0
- package/min/persisters/persister-remote/with-schemas/index.js +1 -1
- package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/index.js +1 -0
- package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/index.js +1 -1
- package/min/persisters/persister-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-yjs/index.js +1 -1
- package/min/persisters/persister-yjs/index.js.gz +0 -0
- package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
- package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
- package/min/persisters/with-schemas/index.js +1 -1
- package/min/persisters/with-schemas/index.js.gz +0 -0
- package/min/store/index.js +1 -1
- package/min/store/index.js.gz +0 -0
- package/min/store/with-schemas/index.js +1 -1
- package/min/store/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/index.js +1 -1
- package/min/synchronizers/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/index.js +1 -1
- package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react-inspector/index.js +1 -1
- package/min/ui-react-inspector/index.js.gz +0 -0
- package/min/ui-react-inspector/with-schemas/index.js +1 -1
- package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
- package/min/with-schemas/index.js +1 -1
- package/min/with-schemas/index.js.gz +0 -0
- package/package.json +46 -6
- package/persisters/index.js +293 -161
- package/persisters/persister-automerge/index.js +55 -50
- package/persisters/persister-automerge/with-schemas/index.js +55 -50
- package/persisters/persister-browser/index.js +56 -55
- package/persisters/persister-browser/with-schemas/index.js +56 -55
- package/persisters/persister-cr-sqlite-wasm/index.js +181 -134
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +181 -134
- package/persisters/persister-durable-object-storage/index.js +58 -53
- package/persisters/persister-durable-object-storage/with-schemas/index.js +58 -53
- package/persisters/persister-electric-sql/index.js +181 -134
- package/persisters/persister-electric-sql/with-schemas/index.js +181 -134
- package/persisters/persister-expo-sqlite/index.js +181 -134
- package/persisters/persister-expo-sqlite/with-schemas/index.js +181 -134
- package/persisters/persister-file/index.js +55 -50
- package/persisters/persister-file/with-schemas/index.js +55 -50
- package/persisters/persister-indexed-db/index.js +82 -78
- package/persisters/persister-indexed-db/with-schemas/index.js +82 -78
- package/persisters/persister-libsql/index.js +182 -135
- package/persisters/persister-libsql/with-schemas/index.js +182 -135
- package/persisters/persister-partykit-client/index.js +56 -51
- package/persisters/persister-partykit-client/with-schemas/index.js +56 -51
- package/persisters/persister-pglite/index.js +299 -173
- package/persisters/persister-pglite/with-schemas/index.js +299 -173
- package/persisters/persister-postgres/index.js +296 -171
- package/persisters/persister-postgres/with-schemas/index.js +296 -171
- package/persisters/persister-powersync/index.js +189 -138
- package/persisters/persister-powersync/with-schemas/index.js +189 -138
- package/persisters/persister-remote/index.js +55 -50
- package/persisters/persister-remote/with-schemas/index.js +55 -50
- package/persisters/persister-sqlite-bun/index.js +1171 -0
- package/persisters/persister-sqlite-bun/with-schemas/index.js +1171 -0
- package/persisters/persister-sqlite-wasm/index.js +182 -135
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +182 -135
- package/persisters/persister-sqlite3/index.js +181 -134
- package/persisters/persister-sqlite3/with-schemas/index.js +181 -134
- package/persisters/persister-yjs/index.js +55 -50
- package/persisters/persister-yjs/with-schemas/index.js +55 -50
- package/persisters/with-schemas/index.js +293 -161
- package/readme.md +2 -2
- package/releases.md +29 -1
- package/store/index.js +20 -15
- package/store/with-schemas/index.js +20 -15
- package/synchronizers/index.js +68 -63
- package/synchronizers/synchronizer-broadcast-channel/index.js +68 -63
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +68 -63
- package/synchronizers/synchronizer-local/index.js +68 -63
- package/synchronizers/synchronizer-local/with-schemas/index.js +68 -63
- package/synchronizers/synchronizer-ws-client/index.js +68 -63
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +68 -63
- package/synchronizers/synchronizer-ws-server/index.js +79 -70
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +79 -70
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +69 -51
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +69 -51
- package/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/synchronizers/with-schemas/index.js +68 -63
- package/ui-react-inspector/index.js +68 -60
- package/ui-react-inspector/with-schemas/index.js +68 -60
- package/with-schemas/index.js +23 -17
|
@@ -20,10 +20,19 @@ const isArray = (thing) => Array.isArray(thing);
|
|
|
20
20
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
21
21
|
const size = (arrayOrString) => arrayOrString.length;
|
|
22
22
|
const test = (regex, subject) => regex.test(subject);
|
|
23
|
+
const noop = () => {};
|
|
23
24
|
const promiseNew = (resolver) => new promise(resolver);
|
|
24
25
|
const errorNew = (message) => {
|
|
25
26
|
throw new Error(message);
|
|
26
27
|
};
|
|
28
|
+
const tryCatch = async (action, then1, then2) => {
|
|
29
|
+
try {
|
|
30
|
+
return await action();
|
|
31
|
+
} catch (error) {
|
|
32
|
+
/* istanbul ignore next */
|
|
33
|
+
then1?.(error);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
27
36
|
|
|
28
37
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
29
38
|
const arrayMap = (array, cb) => array.map(cb);
|
|
@@ -313,9 +322,7 @@ const createCustomPersister = (
|
|
|
313
322
|
while (
|
|
314
323
|
!isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
|
|
315
324
|
) {
|
|
316
|
-
|
|
317
|
-
await action();
|
|
318
|
-
} catch (error) {}
|
|
325
|
+
await tryCatch(action, onIgnoredError);
|
|
319
326
|
}
|
|
320
327
|
mapSet(scheduleRunning, scheduleId, 0);
|
|
321
328
|
}
|
|
@@ -335,20 +342,23 @@ const createCustomPersister = (
|
|
|
335
342
|
setStatus(1 /* Loading */);
|
|
336
343
|
loads++;
|
|
337
344
|
await schedule(async () => {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
345
|
+
await tryCatch(
|
|
346
|
+
async () => {
|
|
347
|
+
const content = await getPersisted();
|
|
348
|
+
if (isArray(content)) {
|
|
349
|
+
setContentOrChanges(content);
|
|
350
|
+
} else if (initialContent) {
|
|
351
|
+
setDefaultContent(initialContent);
|
|
352
|
+
} else {
|
|
353
|
+
errorNew(`Content is not an array: ${content}`);
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
() => {
|
|
357
|
+
if (initialContent) {
|
|
358
|
+
setDefaultContent(initialContent);
|
|
359
|
+
}
|
|
360
|
+
},
|
|
361
|
+
);
|
|
352
362
|
setStatus(0 /* Idle */);
|
|
353
363
|
});
|
|
354
364
|
}
|
|
@@ -357,26 +367,33 @@ const createCustomPersister = (
|
|
|
357
367
|
const startAutoLoad = async (initialContent) => {
|
|
358
368
|
stopAutoLoad();
|
|
359
369
|
await load(initialContent);
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
370
|
+
await tryCatch(
|
|
371
|
+
async () =>
|
|
372
|
+
(autoLoadHandle = await addPersisterListener(
|
|
373
|
+
async (content, changes) => {
|
|
374
|
+
if (changes || content) {
|
|
375
|
+
/* istanbul ignore else */
|
|
376
|
+
if (status != 2 /* Saving */) {
|
|
377
|
+
setStatus(1 /* Loading */);
|
|
378
|
+
loads++;
|
|
379
|
+
setContentOrChanges(changes ?? content);
|
|
380
|
+
setStatus(0 /* Idle */);
|
|
381
|
+
}
|
|
382
|
+
} else {
|
|
383
|
+
await load();
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
)),
|
|
387
|
+
onIgnoredError,
|
|
388
|
+
);
|
|
375
389
|
return persister;
|
|
376
390
|
};
|
|
377
|
-
const stopAutoLoad = () => {
|
|
391
|
+
const stopAutoLoad = async () => {
|
|
378
392
|
if (autoLoadHandle) {
|
|
379
|
-
|
|
393
|
+
await tryCatch(
|
|
394
|
+
() => delPersisterListener(autoLoadHandle),
|
|
395
|
+
onIgnoredError,
|
|
396
|
+
);
|
|
380
397
|
autoLoadHandle = void 0;
|
|
381
398
|
}
|
|
382
399
|
return persister;
|
|
@@ -388,9 +405,7 @@ const createCustomPersister = (
|
|
|
388
405
|
setStatus(2 /* Saving */);
|
|
389
406
|
saves++;
|
|
390
407
|
await schedule(async () => {
|
|
391
|
-
|
|
392
|
-
await setPersisted(getContent, changes);
|
|
393
|
-
} catch (error) {}
|
|
408
|
+
await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
|
|
394
409
|
setStatus(0 /* Idle */);
|
|
395
410
|
});
|
|
396
411
|
}
|
|
@@ -407,7 +422,7 @@ const createCustomPersister = (
|
|
|
407
422
|
});
|
|
408
423
|
return persister;
|
|
409
424
|
};
|
|
410
|
-
const stopAutoSave = () => {
|
|
425
|
+
const stopAutoSave = async () => {
|
|
411
426
|
if (autoSaveListenerId) {
|
|
412
427
|
store.delListener(autoSaveListenerId);
|
|
413
428
|
autoSaveListenerId = void 0;
|
|
@@ -428,9 +443,10 @@ const createCustomPersister = (
|
|
|
428
443
|
return persister;
|
|
429
444
|
};
|
|
430
445
|
const getStore = () => store;
|
|
431
|
-
const destroy = () => {
|
|
446
|
+
const destroy = async () => {
|
|
432
447
|
arrayClear(mapGet(scheduleActions, scheduleId));
|
|
433
|
-
|
|
448
|
+
await persister.stopAutoLoad();
|
|
449
|
+
return await persister.stopAutoSave();
|
|
434
450
|
};
|
|
435
451
|
const getStats = () => ({loads, saves});
|
|
436
452
|
const persister = {
|
|
@@ -458,7 +474,7 @@ const createCustomSynchronizer = (
|
|
|
458
474
|
store,
|
|
459
475
|
send,
|
|
460
476
|
registerReceive,
|
|
461
|
-
|
|
477
|
+
extraDestroy,
|
|
462
478
|
requestTimeoutSeconds,
|
|
463
479
|
onSend,
|
|
464
480
|
onReceive,
|
|
@@ -511,12 +527,12 @@ const createCustomSynchronizer = (
|
|
|
511
527
|
});
|
|
512
528
|
tablesStamp[1] = getLatestTime(tablesStamp[1], tablesTime2);
|
|
513
529
|
};
|
|
514
|
-
const getChangesFromOtherStore =
|
|
530
|
+
const getChangesFromOtherStore = (
|
|
515
531
|
otherClientId = null,
|
|
516
532
|
otherContentHashes,
|
|
517
533
|
transactionId = getTransactionId(),
|
|
518
|
-
) =>
|
|
519
|
-
|
|
534
|
+
) =>
|
|
535
|
+
tryCatch(async () => {
|
|
520
536
|
if (isUndefined(otherContentHashes)) {
|
|
521
537
|
[otherContentHashes, otherClientId, transactionId] = await request(
|
|
522
538
|
null,
|
|
@@ -575,8 +591,7 @@ const createCustomSynchronizer = (
|
|
|
575
591
|
)[0],
|
|
576
592
|
1,
|
|
577
593
|
];
|
|
578
|
-
}
|
|
579
|
-
};
|
|
594
|
+
}, onIgnoredError);
|
|
580
595
|
const getPersisted = async () => {
|
|
581
596
|
const changes = await getChangesFromOtherStore();
|
|
582
597
|
return changes && (!objIsEmpty(changes[0][0]) || !objIsEmpty(changes[1][0]))
|
|
@@ -600,12 +615,15 @@ const createCustomSynchronizer = (
|
|
|
600
615
|
await persister.startAutoLoad(initialContent)
|
|
601
616
|
).startAutoSave();
|
|
602
617
|
};
|
|
603
|
-
const stopSync = () => {
|
|
618
|
+
const stopSync = async () => {
|
|
604
619
|
syncing = 0;
|
|
605
|
-
|
|
620
|
+
await persister.stopAutoLoad();
|
|
621
|
+
await persister.stopAutoSave();
|
|
622
|
+
return persister;
|
|
606
623
|
};
|
|
607
|
-
const destroy = () => {
|
|
608
|
-
|
|
624
|
+
const destroy = async () => {
|
|
625
|
+
await persister.stopSync();
|
|
626
|
+
return persister;
|
|
609
627
|
};
|
|
610
628
|
const getSynchronizerStats = () => ({sends, receives});
|
|
611
629
|
const persister = createCustomPersister(
|
|
@@ -704,7 +722,7 @@ class WsServerDurableObject extends DurableObject {
|
|
|
704
722
|
(receive) =>
|
|
705
723
|
(this.#serverClientSend = (payload) =>
|
|
706
724
|
receivePayload(payload, receive)),
|
|
707
|
-
|
|
725
|
+
noop,
|
|
708
726
|
1,
|
|
709
727
|
);
|
|
710
728
|
await persister.load();
|
|
@@ -20,10 +20,19 @@ const isArray = (thing) => Array.isArray(thing);
|
|
|
20
20
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
21
21
|
const size = (arrayOrString) => arrayOrString.length;
|
|
22
22
|
const test = (regex, subject) => regex.test(subject);
|
|
23
|
+
const noop = () => {};
|
|
23
24
|
const promiseNew = (resolver) => new promise(resolver);
|
|
24
25
|
const errorNew = (message) => {
|
|
25
26
|
throw new Error(message);
|
|
26
27
|
};
|
|
28
|
+
const tryCatch = async (action, then1, then2) => {
|
|
29
|
+
try {
|
|
30
|
+
return await action();
|
|
31
|
+
} catch (error) {
|
|
32
|
+
/* istanbul ignore next */
|
|
33
|
+
then1?.(error);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
27
36
|
|
|
28
37
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
29
38
|
const arrayMap = (array, cb) => array.map(cb);
|
|
@@ -313,9 +322,7 @@ const createCustomPersister = (
|
|
|
313
322
|
while (
|
|
314
323
|
!isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
|
|
315
324
|
) {
|
|
316
|
-
|
|
317
|
-
await action();
|
|
318
|
-
} catch (error) {}
|
|
325
|
+
await tryCatch(action, onIgnoredError);
|
|
319
326
|
}
|
|
320
327
|
mapSet(scheduleRunning, scheduleId, 0);
|
|
321
328
|
}
|
|
@@ -335,20 +342,23 @@ const createCustomPersister = (
|
|
|
335
342
|
setStatus(1 /* Loading */);
|
|
336
343
|
loads++;
|
|
337
344
|
await schedule(async () => {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
345
|
+
await tryCatch(
|
|
346
|
+
async () => {
|
|
347
|
+
const content = await getPersisted();
|
|
348
|
+
if (isArray(content)) {
|
|
349
|
+
setContentOrChanges(content);
|
|
350
|
+
} else if (initialContent) {
|
|
351
|
+
setDefaultContent(initialContent);
|
|
352
|
+
} else {
|
|
353
|
+
errorNew(`Content is not an array: ${content}`);
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
() => {
|
|
357
|
+
if (initialContent) {
|
|
358
|
+
setDefaultContent(initialContent);
|
|
359
|
+
}
|
|
360
|
+
},
|
|
361
|
+
);
|
|
352
362
|
setStatus(0 /* Idle */);
|
|
353
363
|
});
|
|
354
364
|
}
|
|
@@ -357,26 +367,33 @@ const createCustomPersister = (
|
|
|
357
367
|
const startAutoLoad = async (initialContent) => {
|
|
358
368
|
stopAutoLoad();
|
|
359
369
|
await load(initialContent);
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
370
|
+
await tryCatch(
|
|
371
|
+
async () =>
|
|
372
|
+
(autoLoadHandle = await addPersisterListener(
|
|
373
|
+
async (content, changes) => {
|
|
374
|
+
if (changes || content) {
|
|
375
|
+
/* istanbul ignore else */
|
|
376
|
+
if (status != 2 /* Saving */) {
|
|
377
|
+
setStatus(1 /* Loading */);
|
|
378
|
+
loads++;
|
|
379
|
+
setContentOrChanges(changes ?? content);
|
|
380
|
+
setStatus(0 /* Idle */);
|
|
381
|
+
}
|
|
382
|
+
} else {
|
|
383
|
+
await load();
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
)),
|
|
387
|
+
onIgnoredError,
|
|
388
|
+
);
|
|
375
389
|
return persister;
|
|
376
390
|
};
|
|
377
|
-
const stopAutoLoad = () => {
|
|
391
|
+
const stopAutoLoad = async () => {
|
|
378
392
|
if (autoLoadHandle) {
|
|
379
|
-
|
|
393
|
+
await tryCatch(
|
|
394
|
+
() => delPersisterListener(autoLoadHandle),
|
|
395
|
+
onIgnoredError,
|
|
396
|
+
);
|
|
380
397
|
autoLoadHandle = void 0;
|
|
381
398
|
}
|
|
382
399
|
return persister;
|
|
@@ -388,9 +405,7 @@ const createCustomPersister = (
|
|
|
388
405
|
setStatus(2 /* Saving */);
|
|
389
406
|
saves++;
|
|
390
407
|
await schedule(async () => {
|
|
391
|
-
|
|
392
|
-
await setPersisted(getContent, changes);
|
|
393
|
-
} catch (error) {}
|
|
408
|
+
await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
|
|
394
409
|
setStatus(0 /* Idle */);
|
|
395
410
|
});
|
|
396
411
|
}
|
|
@@ -407,7 +422,7 @@ const createCustomPersister = (
|
|
|
407
422
|
});
|
|
408
423
|
return persister;
|
|
409
424
|
};
|
|
410
|
-
const stopAutoSave = () => {
|
|
425
|
+
const stopAutoSave = async () => {
|
|
411
426
|
if (autoSaveListenerId) {
|
|
412
427
|
store.delListener(autoSaveListenerId);
|
|
413
428
|
autoSaveListenerId = void 0;
|
|
@@ -428,9 +443,10 @@ const createCustomPersister = (
|
|
|
428
443
|
return persister;
|
|
429
444
|
};
|
|
430
445
|
const getStore = () => store;
|
|
431
|
-
const destroy = () => {
|
|
446
|
+
const destroy = async () => {
|
|
432
447
|
arrayClear(mapGet(scheduleActions, scheduleId));
|
|
433
|
-
|
|
448
|
+
await persister.stopAutoLoad();
|
|
449
|
+
return await persister.stopAutoSave();
|
|
434
450
|
};
|
|
435
451
|
const getStats = () => ({loads, saves});
|
|
436
452
|
const persister = {
|
|
@@ -458,7 +474,7 @@ const createCustomSynchronizer = (
|
|
|
458
474
|
store,
|
|
459
475
|
send,
|
|
460
476
|
registerReceive,
|
|
461
|
-
|
|
477
|
+
extraDestroy,
|
|
462
478
|
requestTimeoutSeconds,
|
|
463
479
|
onSend,
|
|
464
480
|
onReceive,
|
|
@@ -511,12 +527,12 @@ const createCustomSynchronizer = (
|
|
|
511
527
|
});
|
|
512
528
|
tablesStamp[1] = getLatestTime(tablesStamp[1], tablesTime2);
|
|
513
529
|
};
|
|
514
|
-
const getChangesFromOtherStore =
|
|
530
|
+
const getChangesFromOtherStore = (
|
|
515
531
|
otherClientId = null,
|
|
516
532
|
otherContentHashes,
|
|
517
533
|
transactionId = getTransactionId(),
|
|
518
|
-
) =>
|
|
519
|
-
|
|
534
|
+
) =>
|
|
535
|
+
tryCatch(async () => {
|
|
520
536
|
if (isUndefined(otherContentHashes)) {
|
|
521
537
|
[otherContentHashes, otherClientId, transactionId] = await request(
|
|
522
538
|
null,
|
|
@@ -575,8 +591,7 @@ const createCustomSynchronizer = (
|
|
|
575
591
|
)[0],
|
|
576
592
|
1,
|
|
577
593
|
];
|
|
578
|
-
}
|
|
579
|
-
};
|
|
594
|
+
}, onIgnoredError);
|
|
580
595
|
const getPersisted = async () => {
|
|
581
596
|
const changes = await getChangesFromOtherStore();
|
|
582
597
|
return changes && (!objIsEmpty(changes[0][0]) || !objIsEmpty(changes[1][0]))
|
|
@@ -600,12 +615,15 @@ const createCustomSynchronizer = (
|
|
|
600
615
|
await persister.startAutoLoad(initialContent)
|
|
601
616
|
).startAutoSave();
|
|
602
617
|
};
|
|
603
|
-
const stopSync = () => {
|
|
618
|
+
const stopSync = async () => {
|
|
604
619
|
syncing = 0;
|
|
605
|
-
|
|
620
|
+
await persister.stopAutoLoad();
|
|
621
|
+
await persister.stopAutoSave();
|
|
622
|
+
return persister;
|
|
606
623
|
};
|
|
607
|
-
const destroy = () => {
|
|
608
|
-
|
|
624
|
+
const destroy = async () => {
|
|
625
|
+
await persister.stopSync();
|
|
626
|
+
return persister;
|
|
609
627
|
};
|
|
610
628
|
const getSynchronizerStats = () => ({sends, receives});
|
|
611
629
|
const persister = createCustomPersister(
|
|
@@ -704,7 +722,7 @@ class WsServerDurableObject extends DurableObject {
|
|
|
704
722
|
(receive) =>
|
|
705
723
|
(this.#serverClientSend = (payload) =>
|
|
706
724
|
receivePayload(payload, receive)),
|
|
707
|
-
|
|
725
|
+
noop,
|
|
708
726
|
1,
|
|
709
727
|
);
|
|
710
728
|
await persister.load();
|
|
@@ -19,6 +19,14 @@ const promiseNew = (resolver) => new promise(resolver);
|
|
|
19
19
|
const errorNew = (message) => {
|
|
20
20
|
throw new Error(message);
|
|
21
21
|
};
|
|
22
|
+
const tryCatch = async (action, then1, then2) => {
|
|
23
|
+
try {
|
|
24
|
+
return await action();
|
|
25
|
+
} catch (error) {
|
|
26
|
+
/* istanbul ignore next */
|
|
27
|
+
then1?.(error);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
22
30
|
|
|
23
31
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
24
32
|
const arrayMap = (array, cb) => array.map(cb);
|
|
@@ -283,12 +291,7 @@ const createCustomPersister = (
|
|
|
283
291
|
while (
|
|
284
292
|
!isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
|
|
285
293
|
) {
|
|
286
|
-
|
|
287
|
-
await action();
|
|
288
|
-
} catch (error) {
|
|
289
|
-
/* istanbul ignore next */
|
|
290
|
-
onIgnoredError?.(error);
|
|
291
|
-
}
|
|
294
|
+
await tryCatch(action, onIgnoredError);
|
|
292
295
|
}
|
|
293
296
|
mapSet(scheduleRunning, scheduleId, 0);
|
|
294
297
|
}
|
|
@@ -308,21 +311,23 @@ const createCustomPersister = (
|
|
|
308
311
|
setStatus(1 /* Loading */);
|
|
309
312
|
loads++;
|
|
310
313
|
await schedule(async () => {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
314
|
+
await tryCatch(
|
|
315
|
+
async () => {
|
|
316
|
+
const content = await getPersisted();
|
|
317
|
+
if (isArray(content)) {
|
|
318
|
+
setContentOrChanges(content);
|
|
319
|
+
} else if (initialContent) {
|
|
320
|
+
setDefaultContent(initialContent);
|
|
321
|
+
} else {
|
|
322
|
+
errorNew(`Content is not an array: ${content}`);
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
() => {
|
|
326
|
+
if (initialContent) {
|
|
327
|
+
setDefaultContent(initialContent);
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
);
|
|
326
331
|
setStatus(0 /* Idle */);
|
|
327
332
|
});
|
|
328
333
|
}
|
|
@@ -331,29 +336,33 @@ const createCustomPersister = (
|
|
|
331
336
|
const startAutoLoad = async (initialContent) => {
|
|
332
337
|
stopAutoLoad();
|
|
333
338
|
await load(initialContent);
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
339
|
+
await tryCatch(
|
|
340
|
+
async () =>
|
|
341
|
+
(autoLoadHandle = await addPersisterListener(
|
|
342
|
+
async (content, changes) => {
|
|
343
|
+
if (changes || content) {
|
|
344
|
+
/* istanbul ignore else */
|
|
345
|
+
if (status != 2 /* Saving */) {
|
|
346
|
+
setStatus(1 /* Loading */);
|
|
347
|
+
loads++;
|
|
348
|
+
setContentOrChanges(changes ?? content);
|
|
349
|
+
setStatus(0 /* Idle */);
|
|
350
|
+
}
|
|
351
|
+
} else {
|
|
352
|
+
await load();
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
)),
|
|
356
|
+
onIgnoredError,
|
|
357
|
+
);
|
|
352
358
|
return persister;
|
|
353
359
|
};
|
|
354
|
-
const stopAutoLoad = () => {
|
|
360
|
+
const stopAutoLoad = async () => {
|
|
355
361
|
if (autoLoadHandle) {
|
|
356
|
-
|
|
362
|
+
await tryCatch(
|
|
363
|
+
() => delPersisterListener(autoLoadHandle),
|
|
364
|
+
onIgnoredError,
|
|
365
|
+
);
|
|
357
366
|
autoLoadHandle = void 0;
|
|
358
367
|
}
|
|
359
368
|
return persister;
|
|
@@ -365,12 +374,7 @@ const createCustomPersister = (
|
|
|
365
374
|
setStatus(2 /* Saving */);
|
|
366
375
|
saves++;
|
|
367
376
|
await schedule(async () => {
|
|
368
|
-
|
|
369
|
-
await setPersisted(getContent, changes);
|
|
370
|
-
} catch (error) {
|
|
371
|
-
/* istanbul ignore next */
|
|
372
|
-
onIgnoredError?.(error);
|
|
373
|
-
}
|
|
377
|
+
await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
|
|
374
378
|
setStatus(0 /* Idle */);
|
|
375
379
|
});
|
|
376
380
|
}
|
|
@@ -387,7 +391,7 @@ const createCustomPersister = (
|
|
|
387
391
|
});
|
|
388
392
|
return persister;
|
|
389
393
|
};
|
|
390
|
-
const stopAutoSave = () => {
|
|
394
|
+
const stopAutoSave = async () => {
|
|
391
395
|
if (autoSaveListenerId) {
|
|
392
396
|
store.delListener(autoSaveListenerId);
|
|
393
397
|
autoSaveListenerId = void 0;
|
|
@@ -408,9 +412,10 @@ const createCustomPersister = (
|
|
|
408
412
|
return persister;
|
|
409
413
|
};
|
|
410
414
|
const getStore = () => store;
|
|
411
|
-
const destroy = () => {
|
|
415
|
+
const destroy = async () => {
|
|
412
416
|
arrayClear(mapGet(scheduleActions, scheduleId));
|
|
413
|
-
|
|
417
|
+
await persister.stopAutoLoad();
|
|
418
|
+
return await persister.stopAutoSave();
|
|
414
419
|
};
|
|
415
420
|
const getStats = () => ({loads, saves});
|
|
416
421
|
const persister = {
|
|
@@ -448,7 +453,7 @@ const createCustomSynchronizer = (
|
|
|
448
453
|
store,
|
|
449
454
|
send,
|
|
450
455
|
registerReceive,
|
|
451
|
-
|
|
456
|
+
extraDestroy,
|
|
452
457
|
requestTimeoutSeconds,
|
|
453
458
|
onSend,
|
|
454
459
|
onReceive,
|
|
@@ -502,12 +507,12 @@ const createCustomSynchronizer = (
|
|
|
502
507
|
});
|
|
503
508
|
tablesStamp[1] = getLatestTime(tablesStamp[1], tablesTime2);
|
|
504
509
|
};
|
|
505
|
-
const getChangesFromOtherStore =
|
|
510
|
+
const getChangesFromOtherStore = (
|
|
506
511
|
otherClientId = null,
|
|
507
512
|
otherContentHashes,
|
|
508
513
|
transactionId = getTransactionId(),
|
|
509
|
-
) =>
|
|
510
|
-
|
|
514
|
+
) =>
|
|
515
|
+
tryCatch(async () => {
|
|
511
516
|
if (isUndefined(otherContentHashes)) {
|
|
512
517
|
[otherContentHashes, otherClientId, transactionId] = await request(
|
|
513
518
|
null,
|
|
@@ -566,10 +571,7 @@ const createCustomSynchronizer = (
|
|
|
566
571
|
)[0],
|
|
567
572
|
1,
|
|
568
573
|
];
|
|
569
|
-
}
|
|
570
|
-
onIgnoredError?.(error);
|
|
571
|
-
}
|
|
572
|
-
};
|
|
574
|
+
}, onIgnoredError);
|
|
573
575
|
const getPersisted = async () => {
|
|
574
576
|
const changes = await getChangesFromOtherStore();
|
|
575
577
|
return changes && (!objIsEmpty(changes[0][0]) || !objIsEmpty(changes[1][0]))
|
|
@@ -593,13 +595,16 @@ const createCustomSynchronizer = (
|
|
|
593
595
|
await persister.startAutoLoad(initialContent)
|
|
594
596
|
).startAutoSave();
|
|
595
597
|
};
|
|
596
|
-
const stopSync = () => {
|
|
598
|
+
const stopSync = async () => {
|
|
597
599
|
syncing = 0;
|
|
598
|
-
|
|
600
|
+
await persister.stopAutoLoad();
|
|
601
|
+
await persister.stopAutoSave();
|
|
602
|
+
return persister;
|
|
599
603
|
};
|
|
600
|
-
const destroy = () => {
|
|
601
|
-
|
|
602
|
-
|
|
604
|
+
const destroy = async () => {
|
|
605
|
+
await persister.stopSync();
|
|
606
|
+
extraDestroy();
|
|
607
|
+
return persister;
|
|
603
608
|
};
|
|
604
609
|
const getSynchronizerStats = () => ({sends, receives});
|
|
605
610
|
const persister = createCustomPersister(
|