@nkzw/fate 1.4.0 → 1.5.1
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 +324 -0
- package/docs/api/classes/FateClient.md +51 -199
- 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 +5 -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 +6 -1
- package/docs/api/interfaces/FateThenable.md +3 -3
- package/docs/api/interfaces/Persistence.md +5 -0
- package/docs/api/interfaces/PersistenceSession.md +109 -0
- package/docs/api/interfaces/Transport.md +46 -7
- package/docs/api/server/classes/FateRequestError.md +5 -5
- package/docs/api/server/drizzle/functions/createDrizzleFate.md +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +2 -2
- 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 +19 -11
- 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 +7 -0
- 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 +5 -0
- 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/getting-started.md +2 -0
- package/docs/guide/persistence.md +321 -0
- package/lib/{liveTopics-uVP0LG-Q.mjs → args-CRLIRl_v.mjs} +1 -59
- package/lib/{executor-BRudKWDY.d.mts → executor-oPTYqgQV.d.mts} +1 -1
- package/lib/{graphqlTransport-BDR1pnUQ.d.mts → graphqlTransport-CGYE4NdD.d.mts} +3 -2
- package/lib/{graphqlTransport-DSBVS2Fq.mjs → graphqlTransport-DmheG3AO.mjs} +3 -2
- package/lib/graphqlTransport.d.mts +1 -1
- package/lib/graphqlTransport.mjs +1 -1
- package/lib/hydration-DPZRJgnu.mjs +273 -0
- package/lib/idempotency-types-DuqJ7KSd.d.mts +16 -0
- package/lib/idempotency.d.mts +26 -0
- package/lib/idempotency.mjs +34 -0
- package/lib/index.d.mts +5 -5
- package/lib/index.mjs +275 -1567
- package/lib/{list-Bb1SeABn.d.mts → list-5hrTVoiB.d.mts} +1 -1
- package/lib/list.d.mts +1 -1
- package/lib/liveTopics-DuFkDZQm.mjs +17 -0
- package/lib/persistence.d.mts +40 -0
- package/lib/persistence.mjs +1730 -0
- package/lib/protocol-DS5sf6sd.mjs +44 -0
- package/lib/{record-BTUXkHQU.d.mts → record-Dxjvpsep.d.mts} +8 -4
- package/lib/server/drizzle.d.mts +2 -2
- package/lib/server/drizzle.mjs +1 -1
- package/lib/server/prisma.d.mts +2 -2
- package/lib/server/prisma.mjs +1 -6
- package/lib/server.d.mts +3 -3
- package/lib/server.mjs +19 -7
- package/lib/sortObjectKeys-yhuitEQZ.mjs +9 -0
- package/lib/{sourceRouter-DSaADXSf.mjs → sourceRouter-51POBlEE.mjs} +9 -6
- package/lib/store-CakBBzWG.mjs +1386 -0
- package/lib/{transport-Bo1Jgo9R.d.mts → transport-DR0fwleU.d.mts} +607 -412
- package/lib/vite.mjs +18 -10
- package/package.json +12 -2
- package/docs/api/type-aliases/Snapshot.md +0 -7
package/lib/vite.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { t as sortObjectKeys } from "./sortObjectKeys-yhuitEQZ.mjs";
|
|
1
2
|
import path from "node:path";
|
|
2
3
|
import { runnerImport, transformWithOxc } from "vite";
|
|
3
4
|
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
@@ -69,12 +70,7 @@ const formatTypes = (types) => {
|
|
|
69
70
|
};
|
|
70
71
|
const indentBlock = (value, spaces) => value.split("\n").map((line) => line.length ? `${" ".repeat(spaces)}${line}` : line).join("\n");
|
|
71
72
|
const compareStrings = (left, right) => left < right ? -1 : left > right ? 1 : 0;
|
|
72
|
-
const
|
|
73
|
-
if (Array.isArray(value)) return value.map(canonicalizeHydrationScopeValue);
|
|
74
|
-
if (!value || typeof value !== "object") return value;
|
|
75
|
-
return Object.fromEntries(Object.entries(value).sort(([left], [right]) => compareStrings(left, right)).map(([key, entry]) => [key, canonicalizeHydrationScopeValue(entry)]));
|
|
76
|
-
};
|
|
77
|
-
const getHydrationScope = (moduleName, roots, types) => JSON.stringify(canonicalizeHydrationScopeValue({
|
|
73
|
+
const getHydrationScope = (moduleName, roots, types) => JSON.stringify(sortObjectKeys({
|
|
78
74
|
moduleName,
|
|
79
75
|
roots,
|
|
80
76
|
types: [...types].sort((left, right) => compareStrings(left.type, right.type))
|
|
@@ -260,24 +256,27 @@ export type GeneratedClientMutations = typeof mutations;
|
|
|
260
256
|
export type GeneratedClientRoots = typeof roots;
|
|
261
257
|
const hydrationScope = ${JSON.stringify(getHydrationScope(moduleName, roots, types))} as const;
|
|
262
258
|
|
|
259
|
+
const trpcMutations = {
|
|
260
|
+
${mutationResolverBlock}
|
|
261
|
+
} as const;
|
|
262
|
+
|
|
263
263
|
export const createFateClient = (options: {
|
|
264
264
|
links: Parameters<typeof createTRPCProxyClient>[0]['links'];
|
|
265
265
|
${indentBlock(liveOptions.trim(), 2)}
|
|
266
|
+
mutateDurably?: Parameters<typeof createTRPCTransport<AppRouter, typeof trpcMutations>>[0]['mutateDurably'];
|
|
266
267
|
onLiveError?: (error: unknown) => void;
|
|
268
|
+
persistence?: import("@nkzw/fate").Persistence;
|
|
267
269
|
}) => {
|
|
268
270
|
const trpcClient = createTRPCProxyClient<AppRouter>(options);
|
|
269
271
|
${liveTransportSetup}
|
|
270
272
|
|
|
271
|
-
const trpcMutations = {
|
|
272
|
-
${mutationResolverBlock}
|
|
273
|
-
} as const;
|
|
274
|
-
|
|
275
273
|
const transport = createTRPCTransport<AppRouter, typeof trpcMutations>({
|
|
276
274
|
byId: {
|
|
277
275
|
${byIdBlock}
|
|
278
276
|
},
|
|
279
277
|
client: trpcClient,
|
|
280
278
|
${queriesBlock}${listsBlock} mutations: trpcMutations,
|
|
279
|
+
mutateDurably: options.mutateDurably,
|
|
281
280
|
});
|
|
282
281
|
${liveTransportAssignment}
|
|
283
282
|
|
|
@@ -285,6 +284,7 @@ ${liveTransportAssignment}
|
|
|
285
284
|
hydrationScope,
|
|
286
285
|
mutations,
|
|
287
286
|
onLiveError: options.onLiveError,
|
|
287
|
+
persistence: options.persistence,
|
|
288
288
|
roots,
|
|
289
289
|
transport,
|
|
290
290
|
types: ${typesBlock.trimStart()},
|
|
@@ -395,13 +395,16 @@ export const createFateClient = (options: {
|
|
|
395
395
|
fetch?: typeof fetch;
|
|
396
396
|
headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);
|
|
397
397
|
live?: Parameters<typeof createGraphQLTransport>[0]['live'];
|
|
398
|
+
mutateDurably?: Parameters<typeof createGraphQLTransport<GraphQLTransportMutations>>[0]['mutateDurably'];
|
|
398
399
|
onLiveError?: (error: unknown) => void;
|
|
400
|
+
persistence?: import("@nkzw/fate").Persistence;
|
|
399
401
|
url: string | URL;
|
|
400
402
|
}) =>
|
|
401
403
|
createClient<[GeneratedClientRoots, GeneratedClientMutations], typeof hydrationScope>({
|
|
402
404
|
hydrationScope,
|
|
403
405
|
mutations,
|
|
404
406
|
onLiveError: options.onLiveError,
|
|
407
|
+
persistence: options.persistence,
|
|
405
408
|
roots,
|
|
406
409
|
transport: createGraphQLTransport<GraphQLTransportMutations>({
|
|
407
410
|
decodeNodeId: options.decodeNodeId,
|
|
@@ -411,6 +414,7 @@ export const createFateClient = (options: {
|
|
|
411
414
|
headers: options.headers,
|
|
412
415
|
live: options.live,
|
|
413
416
|
mutations: graphQL.mutations,
|
|
417
|
+
mutateDurably: options.mutateDurably,
|
|
414
418
|
roots: graphQL.roots,
|
|
415
419
|
types: ${typesBlock.trimStart()},
|
|
416
420
|
url: options.url,
|
|
@@ -537,6 +541,7 @@ const toEndpointUrl = (url: string | URL | undefined, path: string, origin: stri
|
|
|
537
541
|
liveRetryMs?: number;
|
|
538
542
|
liveUrl?: string | URL;
|
|
539
543
|
onLiveError?: (error: unknown) => void;
|
|
544
|
+
persistence?: import("@nkzw/fate").Persistence;
|
|
540
545
|
origin?: string | URL;
|
|
541
546
|
rpcPath?: string;
|
|
542
547
|
url?: string | URL;
|
|
@@ -547,6 +552,7 @@ const toEndpointUrl = (url: string | URL | undefined, path: string, origin: stri
|
|
|
547
552
|
liveRetryMs?: number;
|
|
548
553
|
liveUrl?: string | URL;
|
|
549
554
|
onLiveError?: (error: unknown) => void;
|
|
555
|
+
persistence?: import("@nkzw/fate").Persistence;
|
|
550
556
|
url: string | URL;
|
|
551
557
|
}`;
|
|
552
558
|
const clientSetup = voidTransport || cloudflareTransport ? ` => {
|
|
@@ -556,6 +562,7 @@ const toEndpointUrl = (url: string | URL | undefined, path: string, origin: stri
|
|
|
556
562
|
hydrationScope,
|
|
557
563
|
mutations,
|
|
558
564
|
onLiveError: options.onLiveError,
|
|
565
|
+
persistence: options.persistence,
|
|
559
566
|
roots,
|
|
560
567
|
transport: createHTTPTransport<FateAPI>({
|
|
561
568
|
fetch: ${voidTransport ? "createVoidFetch(options)" : "options.fetch"},
|
|
@@ -576,6 +583,7 @@ const toEndpointUrl = (url: string | URL | undefined, path: string, origin: stri
|
|
|
576
583
|
hydrationScope,
|
|
577
584
|
mutations,
|
|
578
585
|
onLiveError: options.onLiveError,
|
|
586
|
+
persistence: options.persistence,
|
|
579
587
|
roots,
|
|
580
588
|
transport: createHTTPTransport<FateAPI>({
|
|
581
589
|
fetch: options.fetch,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nkzw/fate",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "fate is a modern data client for React.",
|
|
5
5
|
"homepage": "https://github.com/nkzw-tech/fate",
|
|
6
6
|
"license": "MIT",
|
|
@@ -62,6 +62,16 @@
|
|
|
62
62
|
"types": "./lib/vite.d.mts",
|
|
63
63
|
"@nkzw/source": "./src/vite.ts",
|
|
64
64
|
"default": "./lib/vite.mjs"
|
|
65
|
+
},
|
|
66
|
+
"./persistence": {
|
|
67
|
+
"types": "./lib/persistence.d.mts",
|
|
68
|
+
"@nkzw/source": "./src/persistence.ts",
|
|
69
|
+
"default": "./lib/persistence.mjs"
|
|
70
|
+
},
|
|
71
|
+
"./persistence/server": {
|
|
72
|
+
"types": "./lib/idempotency.d.mts",
|
|
73
|
+
"@nkzw/source": "./src/idempotency.ts",
|
|
74
|
+
"default": "./lib/idempotency.mjs"
|
|
65
75
|
}
|
|
66
76
|
},
|
|
67
77
|
"dependencies": {
|
|
@@ -96,6 +106,6 @@
|
|
|
96
106
|
}
|
|
97
107
|
},
|
|
98
108
|
"scripts": {
|
|
99
|
-
"build": "vp pack --tsconfig tsconfig.json -d lib --target=node24 src/index.ts src/clientStub.ts src/list.ts src/cli.ts src/server.ts src/server/drizzle.ts src/server/prisma.ts src/graphqlTransport.ts src/vite.ts"
|
|
109
|
+
"build": "vp pack --tsconfig tsconfig.json -d lib --target=node24 src/index.ts src/clientStub.ts src/list.ts src/cli.ts src/server.ts src/server/drizzle.ts src/server/prisma.ts src/graphqlTransport.ts src/vite.ts src/persistence.ts src/idempotency.ts"
|
|
100
110
|
}
|
|
101
111
|
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Type Alias: Snapshot
|
|
2
|
-
|
|
3
|
-
> **Snapshot** = `Readonly`\<\{ `mask?`: `FieldMask`; `record?`: [`FateRecord`](FateRecord.md); \}\>
|
|
4
|
-
|
|
5
|
-
Defined in: [packages/fate/src/types.ts:513](https://github.com/nkzw-tech/fate/blob/aec05ea2ab0386693600d573021cd2a93f1d8b59/packages/fate/src/types.ts#L513)
|
|
6
|
-
|
|
7
|
-
Snapshot captured before mutating the cache, used to roll back on errors.
|