@nkzw/fate 1.0.0 → 1.0.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 +98 -29
- package/docs/api/classes/FateClient.md +36 -36
- package/docs/api/functions/clientRoot.md +1 -1
- package/docs/api/functions/createClient.md +1 -1
- package/docs/api/functions/createHTTPTransport.md +1 -1
- package/docs/api/functions/createTRPCTransport.md +1 -1
- package/docs/api/functions/getListEntries.md +1 -1
- package/docs/api/functions/getSelectionPlan.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/interfaces/FateThenable.md +3 -3
- package/docs/api/interfaces/Transport.md +7 -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/index.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 +2 -2
- 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 +2 -2
- 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/index.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/Entity.md +2 -2
- package/docs/api/type-aliases/EntityId.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/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/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/Request.md +1 -1
- package/docs/api/type-aliases/RequestMode.md +1 -1
- package/docs/api/type-aliases/RequestOptions.md +1 -1
- package/docs/api/type-aliases/RequestResult.md +1 -1
- package/docs/api/type-aliases/Selection.md +1 -1
- package/docs/api/type-aliases/Snapshot.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/guide/actions.md +46 -4
- package/docs/guide/live-views.md +15 -2
- package/docs/guide/requests.md +1 -1
- package/docs/guide/server-integration.md +35 -21
- package/docs/guide/views.md +1 -1
- package/docs/guide/void-integration.md +3 -3
- package/lib/index.d.mts +1 -1
- package/lib/index.mjs +5 -4
- package/lib/{record-ENh92gyb.d.mts → record-CirbfZWX.d.mts} +2 -1
- package/lib/server/drizzle.d.mts +2 -0
- package/lib/server/drizzle.mjs +21 -5
- package/lib/server/prisma.mjs +2 -2
- package/lib/server.d.mts +2 -2
- package/lib/server.mjs +39 -8
- package/lib/{sourceRouter-Bwpkr062.mjs → sourceRouter-C22uFcZg.mjs} +1 -1
- package/package.json +1 -1
package/lib/server.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as isRecord } from "./record-AeZJC9fd.mjs";
|
|
2
2
|
import { d as hashArgs, i as FateRequestError, n as liveEntityTopic, o as toProtocolError, r as liveGlobalConnectionTopic, t as liveConnectionTopic, u as filterConnectionArgs } from "./liveTopics-DzNtJaBD.mjs";
|
|
3
|
-
import { C as list, D as resolveConnection, E as connectionArgs, O as withConnection, S as isDataView, T as toPrismaSelect, _ as computed, a as refetchSourceById, b as dataView, c as resolveSourceConnection, f as createSourcePlan, h as hasNestedSelection, k as getScopedArgs, m as getNestedSelection, n as createSourceProcedures, o as resolveSourceById, r as byIdInput, s as resolveSourceByIds, t as bindSourceProcedures, u as createNestedSourcePlan, v as count, w as resolver, x as field, y as createResolver } from "./sourceRouter-
|
|
3
|
+
import { C as list, D as resolveConnection, E as connectionArgs, O as withConnection, S as isDataView, T as toPrismaSelect, _ as computed, a as refetchSourceById, b as dataView, c as resolveSourceConnection, f as createSourcePlan, h as hasNestedSelection, k as getScopedArgs, m as getNestedSelection, n as createSourceProcedures, o as resolveSourceById, r as byIdInput, s as resolveSourceByIds, t as bindSourceProcedures, u as createNestedSourcePlan, v as count, w as resolver, x as field, y as createResolver } from "./sourceRouter-C22uFcZg.mjs";
|
|
4
4
|
import { EventEmitter, on } from "node:events";
|
|
5
5
|
//#region src/server/live.ts
|
|
6
6
|
const eventName = (type, id) => `${type}:${String(id)}`;
|
|
@@ -71,7 +71,7 @@ const mergeEvents = (emitter, names, signal) => ({ [Symbol.asyncIterator]() {
|
|
|
71
71
|
};
|
|
72
72
|
} });
|
|
73
73
|
/**
|
|
74
|
-
* Creates a small in-memory event bus for
|
|
74
|
+
* Creates a small in-memory event bus for fate live view subscriptions.
|
|
75
75
|
*
|
|
76
76
|
* The bus signals that an entity changed and can optionally include changed
|
|
77
77
|
* field paths. The native live handler refetches the selected record, or only
|
|
@@ -218,6 +218,27 @@ const getLiveBus = (live) => {
|
|
|
218
218
|
if ("subscribe" in live) return live;
|
|
219
219
|
return live.bus;
|
|
220
220
|
};
|
|
221
|
+
const defaultLiveMaxQueueSize = 1e3;
|
|
222
|
+
const getLiveMaxQueueSize = (live) => {
|
|
223
|
+
if (!live || "subscribe" in live) return defaultLiveMaxQueueSize;
|
|
224
|
+
const value = live.maxQueueSize;
|
|
225
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : defaultLiveMaxQueueSize;
|
|
226
|
+
};
|
|
227
|
+
const compactLiveQueue = (connection) => {
|
|
228
|
+
if (connection.queueHead === 0) return;
|
|
229
|
+
connection.queue = connection.queue.slice(connection.queueHead);
|
|
230
|
+
connection.queueHead = 0;
|
|
231
|
+
};
|
|
232
|
+
const getLiveQueueSize = (connection) => connection.queue.length - connection.queueHead;
|
|
233
|
+
const dequeueLiveItem = (connection) => {
|
|
234
|
+
if (connection.queueHead >= connection.queue.length) {
|
|
235
|
+
compactLiveQueue(connection);
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
const item = connection.queue[connection.queueHead++];
|
|
239
|
+
if (connection.queueHead > 64 && connection.queueHead * 2 >= connection.queue.length) compactLiveQueue(connection);
|
|
240
|
+
return item;
|
|
241
|
+
};
|
|
221
242
|
const getWaitUntil = (adapterContext) => {
|
|
222
243
|
const context = adapterContext;
|
|
223
244
|
if (!context) return;
|
|
@@ -400,6 +421,7 @@ function createFateServer({ context, lists, live, mutations, queries, roots, sou
|
|
|
400
421
|
}
|
|
401
422
|
for (const name of rootQueries.keys()) if (!queries?.[name]) throw new Error(`Native fate root query '${name}' requires a matching resolver in createFateServer({ queries }).`);
|
|
402
423
|
const liveBus = getLiveBus(live);
|
|
424
|
+
const liveMaxQueueSize = getLiveMaxQueueSize(live);
|
|
403
425
|
const getContext = async (request, adapterContext) => context ? await context({
|
|
404
426
|
adapterContext,
|
|
405
427
|
request
|
|
@@ -540,13 +562,22 @@ function createFateServer({ context, lists, live, mutations, queries, roots, sou
|
|
|
540
562
|
connection.closed = true;
|
|
541
563
|
}
|
|
542
564
|
};
|
|
565
|
+
const enqueueLiveItem = (connection, item) => {
|
|
566
|
+
if (connection.closed) return;
|
|
567
|
+
if (getLiveQueueSize(connection) >= liveMaxQueueSize) {
|
|
568
|
+
cleanupLiveConnection(connection.id);
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
571
|
+
connection.queue.push(item);
|
|
572
|
+
scheduleLiveDrain(connection);
|
|
573
|
+
};
|
|
543
574
|
const drainLiveConnection = async (connection) => {
|
|
544
575
|
if (connection.closed || connection.draining) return;
|
|
545
576
|
connection.draining = true;
|
|
546
577
|
let activeOperationId = null;
|
|
547
578
|
try {
|
|
548
|
-
|
|
549
|
-
|
|
579
|
+
let item;
|
|
580
|
+
while (!connection.closed && (item = dequeueLiveItem(connection))) {
|
|
550
581
|
activeOperationId = item.operation.id;
|
|
551
582
|
if (!item.subscription.active || connection.subscriptions.get(item.operation.id) !== item.subscription) continue;
|
|
552
583
|
if (item.kind === "entity") {
|
|
@@ -657,14 +688,13 @@ function createFateServer({ context, lists, live, mutations, queries, roots, sou
|
|
|
657
688
|
};
|
|
658
689
|
if (liveBus.listen) {
|
|
659
690
|
const unsubscribe = liveBus.listen(operation.type, operation.entityId, (event) => {
|
|
660
|
-
connection
|
|
691
|
+
enqueueLiveItem(connection, {
|
|
661
692
|
event,
|
|
662
693
|
kind: "entity",
|
|
663
694
|
operation,
|
|
664
695
|
source,
|
|
665
696
|
subscription
|
|
666
697
|
});
|
|
667
|
-
scheduleLiveDrain(connection);
|
|
668
698
|
}, {
|
|
669
699
|
lastEventId: operation.lastEventId,
|
|
670
700
|
signal: subscriptionController.signal
|
|
@@ -742,13 +772,12 @@ function createFateServer({ context, lists, live, mutations, queries, roots, sou
|
|
|
742
772
|
args: operation.args,
|
|
743
773
|
procedure: operation.procedure
|
|
744
774
|
}, (event) => {
|
|
745
|
-
connection
|
|
775
|
+
enqueueLiveItem(connection, {
|
|
746
776
|
event,
|
|
747
777
|
kind: "connection",
|
|
748
778
|
operation,
|
|
749
779
|
subscription
|
|
750
780
|
});
|
|
751
|
-
scheduleLiveDrain(connection);
|
|
752
781
|
}, {
|
|
753
782
|
lastEventId: operation.lastEventId,
|
|
754
783
|
signal: subscriptionController.signal
|
|
@@ -842,8 +871,10 @@ function createFateServer({ context, lists, live, mutations, queries, roots, sou
|
|
|
842
871
|
closed: false,
|
|
843
872
|
controller,
|
|
844
873
|
ctx,
|
|
874
|
+
id: connectionId,
|
|
845
875
|
lastHeartbeat: Date.now(),
|
|
846
876
|
queue: [],
|
|
877
|
+
queueHead: 0,
|
|
847
878
|
subscriptions: /* @__PURE__ */ new Map()
|
|
848
879
|
};
|
|
849
880
|
connection.drainInterval = setInterval(() => void drainLiveConnection(connection), 100);
|
|
@@ -926,7 +926,7 @@ const byIdInput = z.object({
|
|
|
926
926
|
//#region src/server/sourceRouter.ts
|
|
927
927
|
const normalizeSourceOptions = (input) => "source" in input ? input : { source: input };
|
|
928
928
|
/**
|
|
929
|
-
* Creates standard `byId` and `list` procedures for a
|
|
929
|
+
* Creates standard `byId` and `list` procedures for a fate source.
|
|
930
930
|
*
|
|
931
931
|
* Use this when a router also has custom mutations or custom queries and you
|
|
932
932
|
* want to spread the generated source procedures into that router.
|