@rocicorp/zero 1.11.0-head-e0952422-20260928 → 1.11.0-head-a8a46237-20260928
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/replicache/src/replicache-impl.d.ts +28 -0
- package/out/replicache/src/replicache-impl.d.ts.map +1 -1
- package/out/replicache/src/replicache-impl.js +84 -19
- package/out/replicache/src/replicache-impl.js.map +1 -1
- package/out/zero/package.js +1 -1
- package/out/zero/package.js.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +1 -0
- package/out/zero-client/src/client/zero.js.map +1 -1
- package/out/zero-server/src/logging.d.ts +2 -2
- package/out/zero-server/src/logging.d.ts.map +1 -1
- package/out/zero-server/src/logging.js +2 -2
- package/out/zero-server/src/logging.js.map +1 -1
- package/out/zero-server/src/process-mutations.d.ts +12 -3
- package/out/zero-server/src/process-mutations.d.ts.map +1 -1
- package/out/zero-server/src/process-mutations.js +13 -8
- package/out/zero-server/src/process-mutations.js.map +1 -1
- package/out/zero-server/src/push-processor.d.ts +8 -2
- package/out/zero-server/src/push-processor.d.ts.map +1 -1
- package/out/zero-server/src/push-processor.js +12 -4
- package/out/zero-server/src/push-processor.js.map +1 -1
- package/package.json +1 -1
|
@@ -314,6 +314,34 @@ export declare class ReplicacheImpl<MD extends MutatorDefs = {}> {
|
|
|
314
314
|
beginPull(): Promise<BeginPullResult>;
|
|
315
315
|
persist(): Promise<void>;
|
|
316
316
|
refresh(): Promise<void>;
|
|
317
|
+
/**
|
|
318
|
+
* Stops every write to the local store, for an instance whose database is
|
|
319
|
+
* about to be dropped from under it: the store-writing background
|
|
320
|
+
* processes (heartbeat, GC, collection, mutation recovery) are aborted, a
|
|
321
|
+
* `persist()` already in flight is waited for, and every later `persist()`
|
|
322
|
+
* — scheduled or explicit — is a no-op. Mutations keep running against the in-memory
|
|
323
|
+
* dag until the app replaces the instance (see `onClientStateNotFound`).
|
|
324
|
+
*
|
|
325
|
+
* Use together with {@link stopRefresh} before dropping the database, so
|
|
326
|
+
* the drop's own footprint — `database is closed` from the next scheduled
|
|
327
|
+
* persist and the background processes — is not logged as errors against a
|
|
328
|
+
* store that was deleted on purpose.
|
|
329
|
+
*/
|
|
330
|
+
stopPersist(): Promise<void>;
|
|
331
|
+
/**
|
|
332
|
+
* Stops every refresh from the local store, for an instance whose database
|
|
333
|
+
* is about to be dropped from under it: the store-reading background
|
|
334
|
+
* process (the new-client channel) is aborted, a `refresh()` already in
|
|
335
|
+
* flight is waited for, and every later `refresh()` / `runRefresh()` —
|
|
336
|
+
* scheduled or explicit — is a no-op. Queries keep running against the
|
|
337
|
+
* in-memory dag until the app replaces the instance (see
|
|
338
|
+
* `onClientStateNotFound`).
|
|
339
|
+
*
|
|
340
|
+
* Use together with {@link stopPersist} before dropping the database, so
|
|
341
|
+
* the run loop's refresh after a connect error does not run into the
|
|
342
|
+
* dropped store and log `database is closed` as an error.
|
|
343
|
+
*/
|
|
344
|
+
stopRefresh(): Promise<void>;
|
|
317
345
|
disableClientGroup(): Promise<void>;
|
|
318
346
|
/**
|
|
319
347
|
* Runs a refresh as soon as possible through the refresh scheduler.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replicache-impl.d.ts","sourceRoot":"","sources":["../../../../replicache/src/replicache-impl.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"replicache-impl.d.ts","sourceRoot":"","sources":["../../../../replicache/src/replicache-impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -174,15 +174,23 @@ var ReplicacheImpl = class {
|
|
|
174
174
|
#zero;
|
|
175
175
|
#closeAbortController = new AbortController();
|
|
176
176
|
/**
|
|
177
|
-
* Aborted on close
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
* instead, where they keep
|
|
177
|
+
* Aborted on close, on a storage failure after the open, and by
|
|
178
|
+
* {@link stopPersist}. `persist()`, the persist scheduler and the
|
|
179
|
+
* store-writing background processes (heartbeat, client and client-group
|
|
180
|
+
* GC, database collection, mutation recovery) stop on this signal, so the
|
|
181
|
+
* first detected failure stops them instead of letting each retry the
|
|
182
|
+
* fault at its interval and log `Error running.` every time. A failure
|
|
183
|
+
* during the open moves the stores onto memory instead, where they keep
|
|
184
|
+
* running.
|
|
184
185
|
*/
|
|
185
|
-
#
|
|
186
|
+
#persistAbortController = new AbortController();
|
|
187
|
+
/**
|
|
188
|
+
* Aborted on close, on a storage failure after the open, and by
|
|
189
|
+
* {@link stopRefresh}. `refresh()`, the refresh scheduler and the
|
|
190
|
+
* store-reading background process (the new-client channel's store read)
|
|
191
|
+
* stop on this signal.
|
|
192
|
+
*/
|
|
193
|
+
#refreshAbortController = new AbortController();
|
|
186
194
|
#persistLock = new Lock();
|
|
187
195
|
#enableScheduledPersist;
|
|
188
196
|
#enableScheduledRefresh;
|
|
@@ -277,6 +285,18 @@ var ReplicacheImpl = class {
|
|
|
277
285
|
*/
|
|
278
286
|
#storageFailure;
|
|
279
287
|
/**
|
|
288
|
+
* The last persist queued on the persist lock, if any, so
|
|
289
|
+
* {@link stopPersist} can wait for it. The lock runs persists in order, so
|
|
290
|
+
* this one settles after every persist queued before it. Settled to
|
|
291
|
+
* `undefined` rather than left rejected.
|
|
292
|
+
*/
|
|
293
|
+
#persistInFlight;
|
|
294
|
+
/**
|
|
295
|
+
* The refresh currently running, if any, so {@link stopRefresh} can wait
|
|
296
|
+
* for it. Settled to `undefined` rather than left rejected.
|
|
297
|
+
*/
|
|
298
|
+
#refreshInFlight;
|
|
299
|
+
/**
|
|
280
300
|
* `onUpdateNeeded` is called when a code update is needed.
|
|
281
301
|
*
|
|
282
302
|
* A code update can be needed because:
|
|
@@ -328,7 +348,10 @@ var ReplicacheImpl = class {
|
|
|
328
348
|
name,
|
|
329
349
|
"replicache version": version
|
|
330
350
|
});
|
|
331
|
-
this.#closeAbortController.signal.addEventListener("abort", () =>
|
|
351
|
+
this.#closeAbortController.signal.addEventListener("abort", () => {
|
|
352
|
+
this.#persistAbortController.abort();
|
|
353
|
+
this.#refreshAbortController.abort();
|
|
354
|
+
}, { once: true });
|
|
332
355
|
this.#subscriptions = new SubscriptionsManagerImpl(this.#queryInternal, this.#lc, this.#closeAbortController.signal);
|
|
333
356
|
const kvStoreProvider = new MemFallbackStoreProvider(getKVStoreProvider(this.#lc, options.kvStore), (failure) => this.#onMemFallBack(failure), (failure) => this.#handleStorageFailure(failure));
|
|
334
357
|
this.#kvStoreProvider = kvStoreProvider;
|
|
@@ -390,14 +413,14 @@ var ReplicacheImpl = class {
|
|
|
390
413
|
this.pull().catch(noop);
|
|
391
414
|
this.push().catch(noop);
|
|
392
415
|
}
|
|
393
|
-
const { signal } = this.#
|
|
416
|
+
const { signal } = this.#persistAbortController;
|
|
394
417
|
startHeartbeats(clientID, this.perdag, () => {
|
|
395
418
|
this.#clientStateNotFoundOnClient(clientID);
|
|
396
419
|
}, HEARTBEAT_INTERVAL, this.#lc, signal, this.#reportStorageFailure);
|
|
397
420
|
initClientGC(clientID, this.perdag, clientMaxAgeMs, GC_INTERVAL, onClientsDeleted, this.#lc, signal, this.#reportStorageFailure);
|
|
398
421
|
initCollectIDBDatabases(this.#idbDatabases, this.#kvStoreProvider, COLLECT_IDB_INTERVAL, INITIAL_COLLECT_IDB_DELAY, 2 * clientMaxAgeMs, enableMutationRecovery, onClientsDeleted, this.#lc, signal, (name, createKVStore) => new StoreImpl(createKVStore(name), newRandomHash, assertHash, name === this.idbName ? this.#onInvalidRefCount : void 0), this.#reportStorageFailure);
|
|
399
422
|
initClientGroupGC(this.perdag, enableMutationRecovery, this.#lc, signal, this.#reportStorageFailure);
|
|
400
|
-
initNewClientChannel(this.name, this.idbName, signal, client.clientGroupID, isNewClientGroup, () => {
|
|
423
|
+
initNewClientChannel(this.name, this.idbName, this.#refreshAbortController.signal, client.clientGroupID, isNewClientGroup, () => {
|
|
401
424
|
this.#fireOnUpdateNeeded(updateNeededReasonNewClientGroup);
|
|
402
425
|
}, this.perdag);
|
|
403
426
|
setIntervalWithSignal(() => this.recoverMutations(), RECOVER_MUTATIONS_INTERVAL_MS, signal);
|
|
@@ -719,10 +742,10 @@ var ReplicacheImpl = class {
|
|
|
719
742
|
};
|
|
720
743
|
}
|
|
721
744
|
persist() {
|
|
722
|
-
|
|
745
|
+
const run = this.#persistLock.withLock(async () => {
|
|
723
746
|
const { clientID } = this;
|
|
724
747
|
await this.#ready;
|
|
725
|
-
if (this.#closed || this.#storageFailure) return;
|
|
748
|
+
if (this.#closed || this.#storageFailure || this.#persistAbortController.signal.aborted) return;
|
|
726
749
|
try {
|
|
727
750
|
await persistDD31(this.#lc, clientID, this.memdag, this.perdag, this.#mutatorRegistry, () => this.#closed, 7, this.#zero?.getTxData);
|
|
728
751
|
} catch (e) {
|
|
@@ -745,11 +768,18 @@ var ReplicacheImpl = class {
|
|
|
745
768
|
clientGroupID
|
|
746
769
|
});
|
|
747
770
|
});
|
|
771
|
+
this.#persistInFlight = run.catch(noop);
|
|
772
|
+
return run;
|
|
748
773
|
}
|
|
749
|
-
|
|
774
|
+
refresh() {
|
|
775
|
+
const run = this.#refresh();
|
|
776
|
+
this.#refreshInFlight = run.catch(noop);
|
|
777
|
+
return run;
|
|
778
|
+
}
|
|
779
|
+
async #refresh() {
|
|
750
780
|
await this.#ready;
|
|
751
781
|
const { clientID } = this;
|
|
752
|
-
if (this.#closed || this.#storageFailure || !this.#enableRefresh()) return;
|
|
782
|
+
if (this.#closed || this.#storageFailure || this.#refreshAbortController.signal.aborted || !this.#enableRefresh()) return;
|
|
753
783
|
let refreshResult;
|
|
754
784
|
try {
|
|
755
785
|
refreshResult = await refresh(this.#lc, this.memdag, this.perdag, clientID, this.#mutatorRegistry, this.#subscriptions, () => this.closed, 7, this.#zero);
|
|
@@ -797,7 +827,8 @@ var ReplicacheImpl = class {
|
|
|
797
827
|
#handleStorageFailure(failure) {
|
|
798
828
|
if (this.#storageFailure !== void 0) return;
|
|
799
829
|
this.#storageFailure = failure;
|
|
800
|
-
this.#
|
|
830
|
+
this.#persistAbortController.abort();
|
|
831
|
+
this.#refreshAbortController.abort();
|
|
801
832
|
this.#lc.warn?.(`Local store storage failed (${failure.kind}) for ${this.idbName}; persistence is stopped for this instance`, failure);
|
|
802
833
|
this.#fireOnStorageFailure(failure);
|
|
803
834
|
}
|
|
@@ -891,6 +922,40 @@ var ReplicacheImpl = class {
|
|
|
891
922
|
await this.disableClientGroup();
|
|
892
923
|
this.#fireOnClientStateNotFound();
|
|
893
924
|
}
|
|
925
|
+
/**
|
|
926
|
+
* Stops every write to the local store, for an instance whose database is
|
|
927
|
+
* about to be dropped from under it: the store-writing background
|
|
928
|
+
* processes (heartbeat, GC, collection, mutation recovery) are aborted, a
|
|
929
|
+
* `persist()` already in flight is waited for, and every later `persist()`
|
|
930
|
+
* — scheduled or explicit — is a no-op. Mutations keep running against the in-memory
|
|
931
|
+
* dag until the app replaces the instance (see `onClientStateNotFound`).
|
|
932
|
+
*
|
|
933
|
+
* Use together with {@link stopRefresh} before dropping the database, so
|
|
934
|
+
* the drop's own footprint — `database is closed` from the next scheduled
|
|
935
|
+
* persist and the background processes — is not logged as errors against a
|
|
936
|
+
* store that was deleted on purpose.
|
|
937
|
+
*/
|
|
938
|
+
async stopPersist() {
|
|
939
|
+
this.#persistAbortController.abort();
|
|
940
|
+
await this.#persistInFlight;
|
|
941
|
+
}
|
|
942
|
+
/**
|
|
943
|
+
* Stops every refresh from the local store, for an instance whose database
|
|
944
|
+
* is about to be dropped from under it: the store-reading background
|
|
945
|
+
* process (the new-client channel) is aborted, a `refresh()` already in
|
|
946
|
+
* flight is waited for, and every later `refresh()` / `runRefresh()` —
|
|
947
|
+
* scheduled or explicit — is a no-op. Queries keep running against the
|
|
948
|
+
* in-memory dag until the app replaces the instance (see
|
|
949
|
+
* `onClientStateNotFound`).
|
|
950
|
+
*
|
|
951
|
+
* Use together with {@link stopPersist} before dropping the database, so
|
|
952
|
+
* the run loop's refresh after a connect error does not run into the
|
|
953
|
+
* dropped store and log `database is closed` as an error.
|
|
954
|
+
*/
|
|
955
|
+
async stopRefresh() {
|
|
956
|
+
this.#refreshAbortController.abort();
|
|
957
|
+
await this.#refreshInFlight;
|
|
958
|
+
}
|
|
894
959
|
async disableClientGroup() {
|
|
895
960
|
const clientGroupID = await this.#clientGroupIDPromise;
|
|
896
961
|
assert(clientGroupID, "Expected clientGroupID to be defined");
|
|
@@ -902,7 +967,7 @@ var ReplicacheImpl = class {
|
|
|
902
967
|
this.onUpdateNeeded?.(reason);
|
|
903
968
|
}
|
|
904
969
|
async #schedulePersist() {
|
|
905
|
-
if (!this.#enableScheduledPersist || this.#storageFailure) return;
|
|
970
|
+
if (!this.#enableScheduledPersist || this.#storageFailure || this.#persistAbortController.signal.aborted) return;
|
|
906
971
|
await this.#schedule("persist", this.#persistScheduler);
|
|
907
972
|
}
|
|
908
973
|
async #handlePersist(persistInfo) {
|
|
@@ -911,7 +976,7 @@ var ReplicacheImpl = class {
|
|
|
911
976
|
if (persistInfo.clientGroupID === clientGroupID) this.#scheduleRefresh();
|
|
912
977
|
}
|
|
913
978
|
async #scheduleRefresh() {
|
|
914
|
-
if (!this.#enableScheduledRefresh || this.#storageFailure) return;
|
|
979
|
+
if (!this.#enableScheduledRefresh || this.#storageFailure || this.#refreshAbortController.signal.aborted) return;
|
|
915
980
|
await this.#schedule("refresh from storage", this.#refreshScheduler);
|
|
916
981
|
}
|
|
917
982
|
async #schedule(name, scheduler) {
|
|
@@ -1070,7 +1135,7 @@ var ReplicacheImpl = class {
|
|
|
1070
1135
|
return ex;
|
|
1071
1136
|
}
|
|
1072
1137
|
recoverMutations() {
|
|
1073
|
-
if (this.#
|
|
1138
|
+
if (this.#persistAbortController.signal.aborted) return promiseFalse;
|
|
1074
1139
|
}
|
|
1075
1140
|
/**
|
|
1076
1141
|
* List of pending mutations. The order of this is from oldest to newest.
|