@nkzw/fate 1.5.0 → 1.5.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 +5 -7
- package/docs/api/classes/FateClient.md +39 -39
- package/docs/api/functions/clientRoot.md +1 -1
- package/docs/api/functions/createClient.md +1 -1
- package/docs/api/functions/createGraphQLTransport.md +1 -1
- package/docs/api/functions/createHTTPTransport.md +1 -1
- package/docs/api/functions/createTRPCTransport.md +1 -1
- package/docs/api/functions/defer.md +1 -1
- package/docs/api/functions/getDeferredMetadata.md +1 -1
- package/docs/api/functions/getListEntries.md +1 -1
- package/docs/api/functions/getSelectionPlan.md +1 -1
- package/docs/api/functions/graphqlMutation.md +1 -1
- package/docs/api/functions/isDeferred.md +1 -1
- package/docs/api/functions/isRecord.md +1 -1
- package/docs/api/functions/isViewTag.md +1 -1
- package/docs/api/functions/liveConnectionTopic.md +1 -1
- package/docs/api/functions/liveEntityTopic.md +1 -1
- package/docs/api/functions/liveGlobalConnectionTopic.md +1 -1
- package/docs/api/functions/mutation.md +1 -1
- package/docs/api/functions/toEntityId.md +1 -1
- package/docs/api/functions/view.md +1 -1
- package/docs/api/index.md +2 -0
- package/docs/api/interfaces/FateThenable.md +3 -3
- package/docs/api/interfaces/Persistence.md +1 -19
- package/docs/api/interfaces/PersistenceSession.md +10 -10
- package/docs/api/interfaces/Transport.md +8 -8
- package/docs/api/server/classes/FateRequestError.md +5 -5
- package/docs/api/server/drizzle/functions/createDrizzleFate.md +3 -3
- package/docs/api/server/drizzle/functions/createDrizzleSourceAdapter.md +1 -1
- package/docs/api/server/drizzle/functions/createDrizzleSourceRegistry.md +1 -1
- package/docs/api/server/drizzle/type-aliases/DrizzleManyToManyConfig.md +1 -1
- package/docs/api/server/drizzle/type-aliases/DrizzleManyToManyInput.md +1 -1
- package/docs/api/server/drizzle/type-aliases/DrizzleQueryExtra.md +3 -3
- package/docs/api/server/drizzle/type-aliases/DrizzleSourceAdapter.md +9 -9
- package/docs/api/server/drizzle/type-aliases/DrizzleViewConfig.md +1 -1
- package/docs/api/server/functions/bindSourceProcedures.md +1 -1
- package/docs/api/server/functions/computed.md +1 -1
- package/docs/api/server/functions/count.md +1 -1
- package/docs/api/server/functions/createFateFetchHandler.md +1 -1
- package/docs/api/server/functions/createFateServer.md +1 -1
- package/docs/api/server/functions/createHonoFateHandler.md +1 -1
- package/docs/api/server/functions/createLiveEventBus.md +1 -1
- package/docs/api/server/functions/createNestedSourcePlan.md +1 -1
- package/docs/api/server/functions/createResolver.md +1 -1
- package/docs/api/server/functions/createSourcePlan.md +1 -1
- package/docs/api/server/functions/createSourceProcedures.md +1 -1
- package/docs/api/server/functions/dataView.md +1 -1
- package/docs/api/server/functions/field.md +1 -1
- package/docs/api/server/functions/getNestedSelection.md +1 -1
- package/docs/api/server/functions/getScopedArgs.md +1 -1
- package/docs/api/server/functions/hasNestedSelection.md +1 -1
- package/docs/api/server/functions/list.md +1 -1
- package/docs/api/server/functions/refetchSourceById.md +1 -1
- package/docs/api/server/functions/resolveSourceById.md +1 -1
- package/docs/api/server/functions/resolveSourceByIds.md +1 -1
- package/docs/api/server/functions/resolveSourceConnection.md +2 -2
- package/docs/api/server/functions/resolver.md +1 -1
- package/docs/api/server/functions/toPrismaSelect.md +1 -1
- package/docs/api/server/functions/withConnection.md +1 -1
- package/docs/api/server/prisma/functions/createPrismaFate.md +3 -3
- package/docs/api/server/prisma/functions/createPrismaSourceAdapter.md +1 -1
- package/docs/api/server/prisma/functions/createPrismaSourceRegistry.md +1 -1
- package/docs/api/server/prisma/functions/prismaConnectionArgs.md +2 -2
- package/docs/api/server/prisma/type-aliases/PrismaDelegate.md +4 -4
- package/docs/api/server/prisma/type-aliases/PrismaQueryExtra.md +1 -1
- package/docs/api/server/prisma/type-aliases/PrismaSourceAdapter.md +9 -9
- package/docs/api/server/prisma/type-aliases/PrismaViewConfig.md +1 -1
- package/docs/api/server/type-aliases/ComputedField.md +5 -5
- package/docs/api/server/type-aliases/ComputedSelection.md +1 -1
- package/docs/api/server/type-aliases/ConnectionItem.md +3 -3
- package/docs/api/server/type-aliases/ConnectionPagination.md +5 -5
- package/docs/api/server/type-aliases/ConnectionResult.md +3 -3
- package/docs/api/server/type-aliases/CountSelection.md +4 -4
- package/docs/api/server/type-aliases/CountWhere.md +1 -1
- package/docs/api/server/type-aliases/DataViewListOptions.md +2 -2
- package/docs/api/server/type-aliases/DataViewOrderBy.md +1 -1
- package/docs/api/server/type-aliases/DataViewOrderDirection.md +1 -1
- package/docs/api/server/type-aliases/DataViewResult.md +1 -1
- package/docs/api/server/type-aliases/Entity.md +1 -1
- package/docs/api/server/type-aliases/FateServer.md +5 -5
- package/docs/api/server/type-aliases/FateServerManifest.md +1 -1
- package/docs/api/server/type-aliases/FieldSelection.md +3 -3
- package/docs/api/server/type-aliases/LiveConnectionEventType.md +1 -1
- package/docs/api/server/type-aliases/LiveConnectionSourceEvent.md +1 -1
- package/docs/api/server/type-aliases/LiveEventBus.md +1 -1
- package/docs/api/server/type-aliases/LiveEventType.md +1 -1
- package/docs/api/server/type-aliases/LiveSourceEvent.md +1 -1
- package/docs/api/server/type-aliases/NativeFateAPI.md +4 -4
- package/docs/api/server/type-aliases/OrderDirection.md +1 -1
- package/docs/api/server/type-aliases/SourceConfig.md +6 -6
- package/docs/api/server/type-aliases/SourceDefinition.md +6 -6
- package/docs/api/server/type-aliases/SourceOrder.md +1 -1
- package/docs/api/server/type-aliases/SourceOrderField.md +3 -3
- package/docs/api/server/type-aliases/SourcePlan.md +1 -1
- package/docs/api/server/type-aliases/SourcePlanNode.md +1 -1
- package/docs/api/server/type-aliases/SourceRegistry.md +1 -1
- package/docs/api/server/type-aliases/SourceRelation.md +1 -1
- package/docs/api/server/type-aliases/SourceRelationConfig.md +1 -1
- package/docs/api/server/variables/byIdInput.md +1 -1
- package/docs/api/server/variables/connectionArgs.md +1 -1
- package/docs/api/type-aliases/ConnectionMetadata.md +1 -1
- package/docs/api/type-aliases/ConnectionRef.md +1 -1
- package/docs/api/type-aliases/Deferred.md +1 -1
- package/docs/api/type-aliases/DeferredMetadata.md +1 -1
- package/docs/api/type-aliases/DeferredSelection.md +1 -1
- package/docs/api/type-aliases/DeferredSnapshot.md +1 -1
- package/docs/api/type-aliases/Entity.md +2 -2
- package/docs/api/type-aliases/EntityId.md +1 -1
- package/docs/api/type-aliases/FateDehydratedState.md +1 -1
- package/docs/api/type-aliases/FateLiveConnectionEvent.md +1 -1
- package/docs/api/type-aliases/FateLiveEvent.md +1 -1
- package/docs/api/type-aliases/FateMutations.md +1 -1
- package/docs/api/type-aliases/FateOperation.md +1 -1
- package/docs/api/type-aliases/FateProtocolRequest.md +1 -1
- package/docs/api/type-aliases/FateProtocolResponse.md +1 -1
- package/docs/api/type-aliases/FateRecord.md +1 -1
- package/docs/api/type-aliases/FateRoots.md +1 -1
- package/docs/api/type-aliases/GraphQLMutationDefinition.md +1 -1
- package/docs/api/type-aliases/GraphQLMutationInput.md +1 -1
- package/docs/api/type-aliases/GraphQLMutationMap.md +1 -1
- package/docs/api/type-aliases/GraphQLMutationOutput.md +1 -1
- package/docs/api/type-aliases/GraphQLTransportOptions.md +12 -12
- package/docs/api/type-aliases/HydrateOptions.md +1 -1
- package/docs/api/type-aliases/HydrationLimits.md +1 -1
- package/docs/api/type-aliases/InferFateAPI.md +1 -1
- package/docs/api/type-aliases/List.md +1 -1
- package/docs/api/type-aliases/ListEntry.md +1 -1
- package/docs/api/type-aliases/ListItem.md +1 -1
- package/docs/api/type-aliases/Mask.md +1 -1
- package/docs/api/type-aliases/MutationDefinition.md +1 -1
- package/docs/api/type-aliases/MutationEntity.md +1 -1
- package/docs/api/type-aliases/MutationIdentifier.md +1 -1
- package/docs/api/type-aliases/MutationIdentity.md +1 -1
- package/docs/api/type-aliases/MutationInput.md +1 -1
- package/docs/api/type-aliases/MutationResult.md +1 -1
- package/docs/api/type-aliases/NodesItem.md +1 -1
- package/docs/api/type-aliases/Pagination.md +5 -5
- package/docs/api/type-aliases/PersistedMutationStatus.md +5 -0
- package/docs/api/type-aliases/PersistenceSnapshot.md +2 -2
- package/docs/api/type-aliases/Request.md +1 -1
- package/docs/api/type-aliases/RequestMode.md +1 -1
- package/docs/api/type-aliases/RequestOptions.md +2 -2
- package/docs/api/type-aliases/RequestPersistenceOptions.md +5 -0
- package/docs/api/type-aliases/RequestResult.md +1 -1
- package/docs/api/type-aliases/Selection.md +1 -1
- package/docs/api/type-aliases/TypeConfig.md +4 -4
- package/docs/api/type-aliases/View.md +1 -1
- package/docs/api/type-aliases/ViewData.md +1 -1
- package/docs/api/type-aliases/ViewEntity.md +1 -1
- package/docs/api/type-aliases/ViewEntityName.md +1 -1
- package/docs/api/type-aliases/ViewRef.md +1 -1
- package/docs/api/type-aliases/ViewSelection.md +1 -1
- package/docs/api/type-aliases/ViewSnapshot.md +1 -1
- package/docs/api/type-aliases/ViewTag.md +1 -1
- package/docs/api/variables/ConnectionTag.md +1 -1
- package/docs/api/variables/DeferTag.md +1 -1
- package/docs/api/variables/DeferredTag.md +1 -1
- package/docs/guide/persistence.md +5 -7
- package/lib/clientStub.d.mts +4 -5
- package/lib/{executor-DoiTBiVv.d.mts → executor-oPTYqgQV.d.mts} +1 -1
- package/lib/{graphqlTransport-DGLYyRxL.d.mts → graphqlTransport-CGYE4NdD.d.mts} +1 -1
- package/lib/graphqlTransport.d.mts +1 -1
- package/lib/idempotency-types-DuqJ7KSd.d.mts +16 -0
- package/lib/idempotency.d.mts +8 -8
- package/lib/index.d.mts +12 -12
- package/lib/index.mjs +25 -15
- package/lib/{list-BRT1VtiT.d.mts → list-5hrTVoiB.d.mts} +1 -1
- package/lib/list.d.mts +1 -1
- package/lib/persistence.d.mts +21 -19
- package/lib/persistence.mjs +553 -352
- package/lib/{record-DITM4zb_.d.mts → record-Dxjvpsep.d.mts} +3 -3
- package/lib/server/drizzle.d.mts +14 -13
- package/lib/server/prisma.d.mts +14 -13
- package/lib/server.d.mts +9 -9
- package/lib/{store-CeatPJeK.mjs → store-CakBBzWG.mjs} +47 -11
- package/lib/{transport-DqjhjLfC.d.mts → transport-DR0fwleU.d.mts} +29 -16
- package/lib/vite.d.mts +3 -3
- package/package.json +3 -3
- package/lib/idempotency-types-CqA-BFpn.d.mts +0 -15
package/lib/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as isRecord } from "./record-B07VwXd-.mjs";
|
|
2
2
|
import { a as hashArgs, c as scopeArgsPayload, i as filterConnectionArgs, r as combineArgsPayload, s as resolvedArgsFromPlan, t as applyArgsPayloadToPlan } from "./args-CRLIRl_v.mjs";
|
|
3
3
|
import { _ as isNodesItem, a as createNodeRef, c as ConnectionTag, f as RootKind, g as isNodeItem, i as resolveHydrationLimits, l as DeferTag, m as ViewsTag, o as getNodeRefId, r as encodeHydrationValue, s as isNodeRef, t as decodeClientHydrationState, u as DeferredTag, v as isQueryItem, y as isViewTag } from "./hydration-DPZRJgnu.mjs";
|
|
4
|
-
import { C as isDeferredSelection, S as isDeferred, _ as view, a as mutation, b as getDeferredMetadata, c as getDeferredSelectionPlan, d as createRefWithViewNames, f as getRootViewNames, g as getViewPayloads, h as getViewNames, l as getSelectionPlan, m as toEntityId, n as getListKey, p as parseEntityId, r as mergePreservingExisting, s as wrapMutation, t as Store, u as assignViewTag, v as createDeferred, x as getDeferredSelection, y as defer } from "./store-
|
|
4
|
+
import { C as isDeferredSelection, S as isDeferred, _ as view, a as mutation, b as getDeferredMetadata, c as getDeferredSelectionPlan, d as createRefWithViewNames, f as getRootViewNames, g as getViewPayloads, h as getViewNames, l as getSelectionPlan, m as toEntityId, n as getListKey, p as parseEntityId, r as mergePreservingExisting, s as wrapMutation, t as Store, u as assignViewTag, v as createDeferred, x as getDeferredSelection, y as defer } from "./store-CakBBzWG.mjs";
|
|
5
5
|
import { t as getListEntries } from "./list-_6fXYLtJ.mjs";
|
|
6
6
|
import { n as errorCodeFromStatus, t as FateRequestError } from "./protocol-DS5sf6sd.mjs";
|
|
7
7
|
import { n as graphqlMutation, t as createGraphQLTransport } from "./graphqlTransport-DmheG3AO.mjs";
|
|
@@ -478,7 +478,7 @@ var FateClient = class {
|
|
|
478
478
|
this.store = new Store((ids) => {
|
|
479
479
|
for (const id of ids) this.viewDataCache.invalidate(id);
|
|
480
480
|
this.runPendingGarbageCollection();
|
|
481
|
-
}, (
|
|
481
|
+
}, (change) => this.persistenceRuntime?.changed(change));
|
|
482
482
|
this.viewDataCache = new ViewDataCache(() => !this.store.isRebasing);
|
|
483
483
|
this.liveConnectionInvalidationToken = 0;
|
|
484
484
|
this.persistenceDisposal = options.persistence ? new AbortController() : void 0;
|
|
@@ -508,7 +508,8 @@ var FateClient = class {
|
|
|
508
508
|
setNestedValue(this.actions, key, async (_previousState, data) => data === "reset" ? null : await this.mutationMap[key](data));
|
|
509
509
|
}
|
|
510
510
|
this.initializeParentLists();
|
|
511
|
-
this.
|
|
511
|
+
this.persistenceRuntime = options.persistence?.attach(this);
|
|
512
|
+
this.persistence = this.persistenceRuntime;
|
|
512
513
|
}
|
|
513
514
|
initializeParentLists() {
|
|
514
515
|
for (const config of this.types.values()) {
|
|
@@ -704,6 +705,11 @@ var FateClient = class {
|
|
|
704
705
|
if (this.mutationEntities?.size) this.requireDurableMutationTransport();
|
|
705
706
|
}
|
|
706
707
|
/** @internal */
|
|
708
|
+
persistMutation(command) {
|
|
709
|
+
if (!this.persistenceRuntime) throw new Error("fate: Persistence is not configured.");
|
|
710
|
+
return this.persistenceRuntime.mutate(command);
|
|
711
|
+
}
|
|
712
|
+
/** @internal */
|
|
707
713
|
assertPersistenceActive() {
|
|
708
714
|
if (this.persistenceDisposal?.signal.aborted || this.persistence?.getSnapshot().status === "disposed") throw new Error("fate: Persistence was disposed.");
|
|
709
715
|
}
|
|
@@ -828,7 +834,8 @@ var FateClient = class {
|
|
|
828
834
|
const pendingPromise = this.pending.get(key) || null;
|
|
829
835
|
if (pendingPromise) return pendingPromise;
|
|
830
836
|
const promise = this.trackPendingRequest(async () => {
|
|
831
|
-
|
|
837
|
+
const persistence = this.persistenceRuntime;
|
|
838
|
+
if (persistence) {
|
|
832
839
|
const persistedRequest = {
|
|
833
840
|
items: [{
|
|
834
841
|
ids: [id],
|
|
@@ -841,11 +848,11 @@ var FateClient = class {
|
|
|
841
848
|
}],
|
|
842
849
|
key: `view:${key}`
|
|
843
850
|
};
|
|
844
|
-
await
|
|
851
|
+
await persistence.restoreRequest(persistedRequest);
|
|
845
852
|
const remaining = this.store.missingForSelection(entityId, selectedPaths);
|
|
846
853
|
if (remaining.size) {
|
|
847
854
|
await this.fetchByIdAndNormalize(type, [id], remaining, plan);
|
|
848
|
-
|
|
855
|
+
persistence.fetched({
|
|
849
856
|
...persistedRequest,
|
|
850
857
|
items: persistedRequest.items.map((item) => ({
|
|
851
858
|
...item,
|
|
@@ -1433,15 +1440,16 @@ var FateClient = class {
|
|
|
1433
1440
|
}
|
|
1434
1441
|
requestWithDescriptor(descriptor, mode, { revalidateExisting }, options) {
|
|
1435
1442
|
this.assertPersistenceActive();
|
|
1436
|
-
|
|
1443
|
+
const persistence = this.persistenceRuntime;
|
|
1444
|
+
if (persistence && options?.persist && (!Number.isSafeInteger(options.persist.maxAge) || options.persist.maxAge < 0 || options.persist.maxAge > Number.MAX_SAFE_INTEGER - Date.now())) throw new Error("fate: Persistence maxAge must be a non-negative finite duration.");
|
|
1437
1445
|
const requestKey = descriptor.key;
|
|
1438
1446
|
const existingRequest = this.requests.get(requestKey)?.get(mode);
|
|
1439
1447
|
if (existingRequest) {
|
|
1440
|
-
if (
|
|
1448
|
+
if (persistence && options?.persist) {
|
|
1441
1449
|
const executionOptions = this.requestExecutionOptions.get(existingRequest.descriptor);
|
|
1442
1450
|
if (executionOptions) executionOptions.persist = { ...options.persist };
|
|
1443
1451
|
}
|
|
1444
|
-
if (
|
|
1452
|
+
if (persistence && options?.persist && existingRequest.status === "fulfilled") persistence.used(existingRequest.descriptor, options.persist);
|
|
1445
1453
|
const isFulfilledCacheFirstWithMissingData = mode === "cache-first" && existingRequest.status === "fulfilled" && !this.hasRequestData(existingRequest.descriptor);
|
|
1446
1454
|
if (existingRequest.status !== "pending" && (isFulfilledCacheFirstWithMissingData || revalidateExisting && (mode === "network-only" || mode === "stale-while-revalidate" || mode === "cache-first" && existingRequest.status === "rejected"))) this.executeRequestHandle(existingRequest, mode, options);
|
|
1447
1455
|
return existingRequest;
|
|
@@ -1562,17 +1570,18 @@ var FateClient = class {
|
|
|
1562
1570
|
}
|
|
1563
1571
|
}
|
|
1564
1572
|
executeRequestHandle(handle, mode, options) {
|
|
1573
|
+
const persistence = this.persistenceRuntime;
|
|
1565
1574
|
const executionOptions = {
|
|
1566
1575
|
fetchAll: mode !== "cache-first",
|
|
1567
1576
|
persist: options?.persist ? { ...options.persist } : void 0
|
|
1568
1577
|
};
|
|
1569
|
-
if (
|
|
1578
|
+
if (persistence) this.requestExecutionOptions.set(handle.descriptor, executionOptions);
|
|
1570
1579
|
const execute = () => {
|
|
1571
1580
|
this.assertPersistenceActive();
|
|
1572
1581
|
if (mode === "stale-while-revalidate") return this.handleStoreAndNetworkRequest(handle.descriptor, executionOptions);
|
|
1573
1582
|
return this.executeRequest(handle.descriptor, executionOptions).then(() => this.getRequestResultFromDescriptor(handle.descriptor));
|
|
1574
1583
|
};
|
|
1575
|
-
handle.start(
|
|
1584
|
+
handle.start(persistence ? this.withPersistenceLifecycle(() => persistence.ready.then(() => mode === "network-only" ? void 0 : persistence.restoreRequest(handle.descriptor)).then(execute)) : execute());
|
|
1576
1585
|
}
|
|
1577
1586
|
markRecordReferences(record, markRecord) {
|
|
1578
1587
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -1625,7 +1634,7 @@ var FateClient = class {
|
|
|
1625
1634
|
return await this.withPersistenceLifecycle(request);
|
|
1626
1635
|
} finally {
|
|
1627
1636
|
this.pendingNetworkRequests -= 1;
|
|
1628
|
-
this.
|
|
1637
|
+
this.persistenceRuntime?.changed();
|
|
1629
1638
|
}
|
|
1630
1639
|
});
|
|
1631
1640
|
}
|
|
@@ -1714,12 +1723,13 @@ var FateClient = class {
|
|
|
1714
1723
|
fetchedItems.push(item);
|
|
1715
1724
|
}
|
|
1716
1725
|
await Promise.all([...promises, ...Array.from(groups.values()).map((group) => group.ids.length ? this.fetchByIdAndNormalize(group.type, group.ids, group.fields, group.plan) : Promise.resolve())]);
|
|
1717
|
-
|
|
1718
|
-
|
|
1726
|
+
const persistence = this.persistenceRuntime;
|
|
1727
|
+
if (persistence) {
|
|
1728
|
+
if (fetchedItems.length) persistence.fetched(fetchedAll ? request : {
|
|
1719
1729
|
items: fetchedItems,
|
|
1720
1730
|
key: `partial:${JSON.stringify([request.key, fetchedItems.map((item) => [item.name, "ids" in item ? item.ids : null])])}`
|
|
1721
1731
|
}, options.persist);
|
|
1722
|
-
if (!fetchedItems.length || !fetchedAll)
|
|
1732
|
+
if (!fetchedItems.length || !fetchedAll) persistence.used(request, options.persist);
|
|
1723
1733
|
}
|
|
1724
1734
|
}
|
|
1725
1735
|
hasRequestData(request) {
|
package/lib/list.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as getListEntries, t as ListEntry } from "./list-
|
|
1
|
+
import { n as getListEntries, t as ListEntry } from "./list-5hrTVoiB.mjs";
|
|
2
2
|
export { ListEntry, getListEntries };
|
package/lib/persistence.d.mts
CHANGED
|
@@ -1,29 +1,25 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { a as Persistence, c as RequestPersistenceOptions, i as PersistedMutationStatus, o as PersistenceSession, s as PersistenceSnapshot } from "./transport-DR0fwleU.mjs";
|
|
2
2
|
//#region src/persistence.d.ts
|
|
3
3
|
/**
|
|
4
|
-
* Backend-neutral durable storage.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Backend-neutral durable storage. Batches apply atomically and resolve only after
|
|
5
|
+
* commit. Exclusive sections must coordinate ALL instances using this key
|
|
6
|
+
* (including other tabs/processes). Use distinct lock names independently.
|
|
7
7
|
*/
|
|
8
|
-
|
|
8
|
+
export type PersistenceStorageEntry = Readonly<{
|
|
9
|
+
key: string;
|
|
10
|
+
value: unknown;
|
|
11
|
+
}>;
|
|
12
|
+
export type PersistenceStorageWrite = readonly [key: string, value: unknown];
|
|
13
|
+
export interface PersistenceStorage {
|
|
9
14
|
exclusive<T>(key: string, run: () => Promise<T>): Promise<T>;
|
|
10
15
|
read(key: string): Promise<unknown>;
|
|
11
16
|
/** Ordered, bounded scan. Return keys strictly after `after`, under `prefix`. */
|
|
12
|
-
scan(prefix: string, after?: string, limit?: number): Promise<Array<
|
|
13
|
-
key: string;
|
|
14
|
-
value: unknown;
|
|
15
|
-
}>>;
|
|
17
|
+
scan(prefix: string, after?: string, limit?: number): Promise<Array<PersistenceStorageEntry>>;
|
|
16
18
|
subscribe?(key: string, listener: () => void): () => void;
|
|
17
|
-
write(key: string, value: unknown): Promise<void>;
|
|
18
19
|
/** Atomically apply a batch. Undefined deletes the key. */
|
|
19
|
-
writeBatch(entries: ReadonlyArray<
|
|
20
|
+
writeBatch(entries: ReadonlyArray<PersistenceStorageWrite>): Promise<void>;
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
-
* Enables cache persistence and durable delivery through the existing mutation API.
|
|
23
|
-
* Import this entry point only in applications using persistence. Storage keys must
|
|
24
|
-
* isolate authenticated accounts/workspaces and match the server's identity scope.
|
|
25
|
-
*/
|
|
26
|
-
declare function createPersistence({ key, maxAge, maxBytes, online, retryDelay, storage }: {
|
|
22
|
+
export type PersistenceOptions = Readonly<{
|
|
27
23
|
key: string;
|
|
28
24
|
/** Maximum disk retention since a successful fetch, in milliseconds. Defaults to one day. */
|
|
29
25
|
maxAge?: number;
|
|
@@ -33,6 +29,12 @@ declare function createPersistence({ key, maxAge, maxBytes, online, retryDelay,
|
|
|
33
29
|
online?: () => boolean;
|
|
34
30
|
retryDelay?: number;
|
|
35
31
|
storage: PersistenceStorage;
|
|
36
|
-
}
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Enables cache persistence and durable delivery through the existing mutation API.
|
|
35
|
+
* Import this entry point only in applications using persistence. Storage keys must
|
|
36
|
+
* isolate authenticated accounts/workspaces and match the server's identity scope.
|
|
37
|
+
*/
|
|
38
|
+
export declare function createPersistence({ key, maxAge, maxBytes, online, retryDelay, storage }: PersistenceOptions): Persistence;
|
|
37
39
|
//#endregion
|
|
38
|
-
export {
|
|
40
|
+
export type { PersistedMutationStatus, Persistence, PersistenceSession, PersistenceSnapshot, RequestPersistenceOptions };
|