@nkzw/fate 0.1.3 → 1.0.0

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.
Files changed (170) hide show
  1. package/README.md +810 -129
  2. package/docs/api/classes/FateClient.md +832 -0
  3. package/docs/api/functions/clientRoot.md +27 -0
  4. package/docs/api/functions/createClient.md +21 -0
  5. package/docs/api/functions/createHTTPTransport.md +51 -0
  6. package/docs/api/functions/createTRPCTransport.md +46 -0
  7. package/docs/api/functions/getListEntries.md +15 -0
  8. package/docs/api/functions/getSelectionPlan.md +36 -0
  9. package/docs/api/functions/isRecord.md +15 -0
  10. package/docs/api/functions/isViewTag.md +17 -0
  11. package/docs/api/functions/liveConnectionTopic.md +19 -0
  12. package/docs/api/functions/liveEntityTopic.md +19 -0
  13. package/docs/api/functions/liveGlobalConnectionTopic.md +15 -0
  14. package/docs/api/functions/mutation.md +32 -0
  15. package/docs/api/functions/toEntityId.md +21 -0
  16. package/docs/api/functions/view.md +26 -0
  17. package/docs/api/index.md +81 -0
  18. package/docs/api/interfaces/FateThenable.md +31 -0
  19. package/docs/api/interfaces/Transport.md +199 -0
  20. package/docs/api/server/classes/FateRequestError.md +67 -0
  21. package/docs/api/server/drizzle/functions/createDrizzleFate.md +431 -0
  22. package/docs/api/server/drizzle/functions/createDrizzleSourceAdapter.md +21 -0
  23. package/docs/api/server/drizzle/functions/createDrizzleSourceRegistry.md +21 -0
  24. package/docs/api/server/drizzle/index.md +23 -0
  25. package/docs/api/server/drizzle/type-aliases/DrizzleManyToManyConfig.md +15 -0
  26. package/docs/api/server/drizzle/type-aliases/DrizzleManyToManyInput.md +5 -0
  27. package/docs/api/server/drizzle/type-aliases/DrizzleQueryExtra.md +21 -0
  28. package/docs/api/server/drizzle/type-aliases/DrizzleSourceAdapter.md +337 -0
  29. package/docs/api/server/drizzle/type-aliases/DrizzleViewConfig.md +29 -0
  30. package/docs/api/server/functions/bindSourceProcedures.md +32 -0
  31. package/docs/api/server/functions/computed.md +43 -0
  32. package/docs/api/server/functions/count.md +21 -0
  33. package/docs/api/server/functions/createFateFetchHandler.md +21 -0
  34. package/docs/api/server/functions/createFateServer.md +41 -0
  35. package/docs/api/server/functions/createHonoFateHandler.md +21 -0
  36. package/docs/api/server/functions/createLiveEventBus.md +17 -0
  37. package/docs/api/server/functions/createNestedSourcePlan.md +103 -0
  38. package/docs/api/server/functions/createResolver.md +74 -0
  39. package/docs/api/server/functions/createSourcePlan.md +95 -0
  40. package/docs/api/server/functions/createSourceProcedures.md +46 -0
  41. package/docs/api/server/functions/dataView.md +32 -0
  42. package/docs/api/server/functions/field.md +15 -0
  43. package/docs/api/server/functions/getNestedSelection.md +19 -0
  44. package/docs/api/server/functions/getScopedArgs.md +21 -0
  45. package/docs/api/server/functions/hasNestedSelection.md +19 -0
  46. package/docs/api/server/functions/list.md +28 -0
  47. package/docs/api/server/functions/refetchSourceById.md +55 -0
  48. package/docs/api/server/functions/resolveSourceById.md +55 -0
  49. package/docs/api/server/functions/resolveSourceByIds.md +55 -0
  50. package/docs/api/server/functions/resolveSourceConnection.md +67 -0
  51. package/docs/api/server/functions/resolver.md +42 -0
  52. package/docs/api/server/functions/toPrismaSelect.md +25 -0
  53. package/docs/api/server/functions/withConnection.md +24 -0
  54. package/docs/api/server/index.md +109 -0
  55. package/docs/api/server/prisma/functions/createPrismaFate.md +435 -0
  56. package/docs/api/server/prisma/functions/createPrismaSourceAdapter.md +21 -0
  57. package/docs/api/server/prisma/functions/createPrismaSourceRegistry.md +21 -0
  58. package/docs/api/server/prisma/functions/prismaConnectionArgs.md +57 -0
  59. package/docs/api/server/prisma/index.md +23 -0
  60. package/docs/api/server/prisma/type-aliases/PrismaDelegate.md +59 -0
  61. package/docs/api/server/prisma/type-aliases/PrismaQueryExtra.md +5 -0
  62. package/docs/api/server/prisma/type-aliases/PrismaSourceAdapter.md +343 -0
  63. package/docs/api/server/prisma/type-aliases/PrismaViewConfig.md +31 -0
  64. package/docs/api/server/type-aliases/ComputedField.md +55 -0
  65. package/docs/api/server/type-aliases/ComputedSelection.md +5 -0
  66. package/docs/api/server/type-aliases/ConnectionItem.md +29 -0
  67. package/docs/api/server/type-aliases/ConnectionPagination.md +39 -0
  68. package/docs/api/server/type-aliases/ConnectionResult.md +29 -0
  69. package/docs/api/server/type-aliases/CountSelection.md +29 -0
  70. package/docs/api/server/type-aliases/CountWhere.md +5 -0
  71. package/docs/api/server/type-aliases/DataViewListOptions.md +13 -0
  72. package/docs/api/server/type-aliases/DataViewOrderBy.md +5 -0
  73. package/docs/api/server/type-aliases/DataViewOrderDirection.md +5 -0
  74. package/docs/api/server/type-aliases/DataViewResult.md +11 -0
  75. package/docs/api/server/type-aliases/Entity.md +21 -0
  76. package/docs/api/server/type-aliases/FateServer.md +75 -0
  77. package/docs/api/server/type-aliases/FateServerManifest.md +5 -0
  78. package/docs/api/server/type-aliases/FieldSelection.md +21 -0
  79. package/docs/api/server/type-aliases/LiveConnectionEventType.md +5 -0
  80. package/docs/api/server/type-aliases/LiveConnectionSourceEvent.md +5 -0
  81. package/docs/api/server/type-aliases/LiveEventBus.md +5 -0
  82. package/docs/api/server/type-aliases/LiveEventType.md +5 -0
  83. package/docs/api/server/type-aliases/LiveSourceEvent.md +5 -0
  84. package/docs/api/server/type-aliases/NativeFateAPI.md +47 -0
  85. package/docs/api/server/type-aliases/OrderDirection.md +5 -0
  86. package/docs/api/server/type-aliases/SourceConfig.md +55 -0
  87. package/docs/api/server/type-aliases/SourceDefinition.md +55 -0
  88. package/docs/api/server/type-aliases/SourceOrder.md +5 -0
  89. package/docs/api/server/type-aliases/SourceOrderField.md +21 -0
  90. package/docs/api/server/type-aliases/SourcePlan.md +29 -0
  91. package/docs/api/server/type-aliases/SourcePlanNode.md +29 -0
  92. package/docs/api/server/type-aliases/SourceRegistry.md +11 -0
  93. package/docs/api/server/type-aliases/SourceRelation.md +15 -0
  94. package/docs/api/server/type-aliases/SourceRelationConfig.md +23 -0
  95. package/docs/api/server/variables/byIdInput.md +5 -0
  96. package/docs/api/server/variables/connectionArgs.md +7 -0
  97. package/docs/api/type-aliases/ConnectionMetadata.md +7 -0
  98. package/docs/api/type-aliases/ConnectionRef.md +13 -0
  99. package/docs/api/type-aliases/Entity.md +15 -0
  100. package/docs/api/type-aliases/EntityId.md +7 -0
  101. package/docs/api/type-aliases/FateLiveConnectionEvent.md +5 -0
  102. package/docs/api/type-aliases/FateLiveEvent.md +5 -0
  103. package/docs/api/type-aliases/FateMutations.md +7 -0
  104. package/docs/api/type-aliases/FateOperation.md +5 -0
  105. package/docs/api/type-aliases/FateProtocolRequest.md +5 -0
  106. package/docs/api/type-aliases/FateProtocolResponse.md +5 -0
  107. package/docs/api/type-aliases/FateRecord.md +7 -0
  108. package/docs/api/type-aliases/FateRoots.md +7 -0
  109. package/docs/api/type-aliases/InferFateAPI.md +11 -0
  110. package/docs/api/type-aliases/List.md +5 -0
  111. package/docs/api/type-aliases/ListEntry.md +5 -0
  112. package/docs/api/type-aliases/ListItem.md +13 -0
  113. package/docs/api/type-aliases/Mask.md +15 -0
  114. package/docs/api/type-aliases/MutationDefinition.md +21 -0
  115. package/docs/api/type-aliases/MutationEntity.md +13 -0
  116. package/docs/api/type-aliases/MutationIdentifier.md +19 -0
  117. package/docs/api/type-aliases/MutationInput.md +13 -0
  118. package/docs/api/type-aliases/MutationResult.md +13 -0
  119. package/docs/api/type-aliases/NodesItem.md +13 -0
  120. package/docs/api/type-aliases/Pagination.md +39 -0
  121. package/docs/api/type-aliases/Request.md +7 -0
  122. package/docs/api/type-aliases/RequestMode.md +7 -0
  123. package/docs/api/type-aliases/RequestOptions.md +7 -0
  124. package/docs/api/type-aliases/RequestResult.md +18 -0
  125. package/docs/api/type-aliases/Selection.md +13 -0
  126. package/docs/api/type-aliases/Snapshot.md +7 -0
  127. package/docs/api/type-aliases/TypeConfig.md +41 -0
  128. package/docs/api/type-aliases/View.md +17 -0
  129. package/docs/api/type-aliases/ViewData.md +18 -0
  130. package/docs/api/type-aliases/ViewEntity.md +13 -0
  131. package/docs/api/type-aliases/ViewEntityName.md +13 -0
  132. package/docs/api/type-aliases/ViewRef.md +13 -0
  133. package/docs/api/type-aliases/ViewSelection.md +13 -0
  134. package/docs/api/type-aliases/ViewSnapshot.md +18 -0
  135. package/docs/api/type-aliases/ViewTag.md +7 -0
  136. package/docs/api/variables/ConnectionTag.md +7 -0
  137. package/docs/guide/actions.md +263 -0
  138. package/docs/guide/core-concepts.md +22 -0
  139. package/docs/guide/getting-started.md +57 -0
  140. package/docs/guide/list-views.md +86 -0
  141. package/docs/guide/live-views.md +245 -0
  142. package/docs/guide/requests.md +130 -0
  143. package/docs/guide/server-integration.md +630 -0
  144. package/docs/guide/views.md +278 -0
  145. package/docs/guide/void-integration.md +167 -0
  146. package/docs/index.md +4 -0
  147. package/lib/cli.mjs +17 -250
  148. package/lib/clientStub.d.mts +6 -0
  149. package/lib/clientStub.mjs +6 -0
  150. package/lib/executor-BqwHdN3n.d.mts +468 -0
  151. package/lib/index.d.mts +64 -2
  152. package/lib/index.mjs +1961 -555
  153. package/lib/list-4wRNSVgI.d.mts +10 -0
  154. package/lib/list-C_mi6GnE.mjs +16 -0
  155. package/lib/list.d.mts +2 -0
  156. package/lib/list.mjs +2 -0
  157. package/lib/liveTopics-DzNtJaBD.mjs +197 -0
  158. package/lib/{record-DnhZuvUe.mjs → record-AeZJC9fd.mjs} +1 -2
  159. package/lib/record-ENh92gyb.d.mts +315 -0
  160. package/lib/server/drizzle.d.mts +304 -0
  161. package/lib/server/drizzle.mjs +688 -0
  162. package/lib/server/prisma.d.mts +309 -0
  163. package/lib/server/prisma.mjs +345 -0
  164. package/lib/server.d.mts +82 -183
  165. package/lib/server.mjs +870 -416
  166. package/lib/sourceRouter-Bwpkr062.mjs +972 -0
  167. package/lib/{types-HECWvGpd.d.mts → types-Dz46PXr3.d.mts} +215 -63
  168. package/lib/vite.d.mts +17 -0
  169. package/lib/vite.mjs +593 -0
  170. package/package.json +44 -6
@@ -0,0 +1,468 @@
1
+ import { q as QueryProcedure, t as AnyRecord } from "./types-Dz46PXr3.mjs";
2
+ import { z } from "zod";
3
+
4
+ //#region src/server/dataView.d.ts
5
+ declare const dataViewFieldsKey: unique symbol;
6
+ declare const dataViewBaseKey: unique symbol;
7
+ declare const dataViewListOptionsKey: unique symbol;
8
+ type ResolverSelect<Context> = AnyRecord | ((options: {
9
+ args?: AnyRecord;
10
+ context?: Context;
11
+ }) => AnyRecord | void);
12
+ type Bivariant<Fn extends (...args: Array<any>) => unknown> = {
13
+ bivariance(...args: Parameters<Fn>): ReturnType<Fn>;
14
+ }['bivariance'];
15
+ type ResolverResolve<Item extends AnyRecord, Result, Context> = Bivariant<(item: Item, context?: Context, args?: AnyRecord) => Promise<Result> | Result>;
16
+ type ResolverAuthorize<Item extends AnyRecord, Context> = Bivariant<(item: Item, context?: Context, args?: AnyRecord) => Promise<boolean> | boolean>;
17
+ type FieldSelection = {
18
+ kind: 'field';
19
+ path: string;
20
+ };
21
+ type SQLWrapperLike = {
22
+ getSQL: () => unknown;
23
+ };
24
+ type CountWhere = AnyRecord | SQLWrapperLike | ((columns: Record<string, any>) => SQLWrapperLike | undefined);
25
+ type CountSelection = {
26
+ kind: 'count';
27
+ relation: string;
28
+ where?: CountWhere;
29
+ };
30
+ type ComputedSelection = CountSelection | FieldSelection;
31
+ type ComputedDeps<Select extends Record<string, ComputedSelection> | undefined> = Select extends Record<string, ComputedSelection> ? { [Key in keyof Select]: Select[Key] extends CountSelection ? number : Select[Key] extends FieldSelection ? unknown : never } : Record<string, unknown>;
32
+ type ComputedResolve<Item extends AnyRecord, Result, Select extends Record<string, ComputedSelection> | undefined, Context> = Bivariant<(item: Item, deps: ComputedDeps<Select>, context?: Context, args?: AnyRecord) => Promise<Result> | Result>;
33
+ /**
34
+ * Field configuration for selecting and resolving a computed value on the backend.
35
+ */
36
+ type ResolverField<Item extends AnyRecord, Result, Context> = {
37
+ authorize?: ResolverAuthorize<Item, Context>;
38
+ kind: 'resolver';
39
+ resolve: ResolverResolve<Item, Result, Context>;
40
+ select?: ResolverSelect<Context>;
41
+ };
42
+ type ComputedField<Item extends AnyRecord, Result, Context, Select extends Record<string, ComputedSelection> | undefined = Record<string, ComputedSelection>> = {
43
+ authorize?: ResolverAuthorize<Item, Context>;
44
+ kind: 'computed';
45
+ resolve: ComputedResolve<Item, Result, Select, Context>;
46
+ select?: Select;
47
+ };
48
+ type DataField<Item extends AnyRecord> = true | ComputedField<Item, any, any, any> | DataView<AnyRecord> | ResolverField<Item, any, any>;
49
+ /**
50
+ * Recursively serializes resolver results for transport across the network.
51
+ */
52
+ type Serializable<T> = T extends Date ? string : T extends Array<infer U> ? Array<Serializable<U>> : T extends object ? { [K in keyof T]: Serializable<T[K]> } : T;
53
+ /**
54
+ * Server-side mirror of a view definition describing how to select and resolve
55
+ * fields when fulfilling a client request.
56
+ */
57
+ type DataView<Item extends AnyRecord> = {
58
+ fields: Record<string, DataField<Item>>;
59
+ kind?: 'resolver' | 'list';
60
+ typeName: string;
61
+ };
62
+ type DataViewInternals<Item extends AnyRecord> = {
63
+ readonly [dataViewBaseKey]?: DataView<Item>;
64
+ readonly [dataViewListOptionsKey]?: DataViewListOptions;
65
+ };
66
+ /**
67
+ * Convenience type for declaring the fields of a server data view.
68
+ */
69
+ type DataViewConfig<Item extends AnyRecord> = Record<string, DataField<Item>>;
70
+ type DataViewOrderDirection = 'asc' | 'desc';
71
+ type DataViewOrderBy = Record<string, DataViewOrderDirection> | Array<Record<string, DataViewOrderDirection>>;
72
+ type DataViewListOptions = {
73
+ orderBy?: DataViewOrderBy;
74
+ };
75
+ /**
76
+ * Declares a server data view that exposes an object's available fields to the client.
77
+ *
78
+ * @example
79
+ * const Post = dataView<PostItem>('Post')({
80
+ * id: true,
81
+ * title: true,
82
+ * });
83
+ */
84
+ declare function dataView<Item extends AnyRecord>(typeName: string): <Fields extends DataViewConfig<Item>>(fields: Fields) => DataView<Item> & {
85
+ readonly [dataViewFieldsKey]: Fields;
86
+ };
87
+ /**
88
+ * Marks a data view as a list resolver so the server can respond with
89
+ * connection information.
90
+ */
91
+ declare const list: <Item extends AnyRecord>(view: DataView<Item>, options?: DataViewListOptions) => DataView<Item> & DataViewInternals<Item> & {
92
+ kind: "list";
93
+ };
94
+ /**
95
+ * Declares a resolver field inside a data view, optionally providing a
96
+ * selection for any data dependencies.
97
+ */
98
+ declare function resolver<Item extends AnyRecord, Result = unknown, Context = unknown>(config: {
99
+ authorize?: ResolverAuthorize<Item, Context>;
100
+ resolve: ResolverResolve<Item, Result, Context>;
101
+ select?: ResolverSelect<Context>;
102
+ }): ResolverField<Item, Result, Context>;
103
+ declare const field$1: (path: string) => FieldSelection;
104
+ declare const count: (relation: string, options?: {
105
+ where?: CountWhere;
106
+ }) => CountSelection;
107
+ declare function computed<Item extends AnyRecord, Result = unknown, Context = unknown, Select extends Record<string, ComputedSelection> | undefined = Record<string, ComputedSelection>>(config: {
108
+ authorize?: ResolverAuthorize<Item, Context>;
109
+ resolve: ComputedResolve<Item, Result, Select, Context>;
110
+ select?: Select;
111
+ }): ComputedField<Item, Result, Context, Select>;
112
+ type NonNullish<T> = Exclude<T, null | undefined>;
113
+ type WithNullish<Original, Value> = null extends Original ? undefined extends Original ? Value | null | undefined : Value | null : undefined extends Original ? Value | undefined : Value;
114
+ type ResolverResult<Field> = Field extends ResolverField<AnyRecord, any, any> ? Field['authorize'] extends ResolverAuthorize<any, any> ? Awaited<ReturnType<Field['resolve']>> | null : Awaited<ReturnType<Field['resolve']>> : never;
115
+ type ComputedResult<Field> = Field extends ComputedField<AnyRecord, any, any, any> ? Field['authorize'] extends ResolverAuthorize<any, any> ? Awaited<ReturnType<Field['resolve']>> | null : Awaited<ReturnType<Field['resolve']>> : never;
116
+ type RelationResult<ItemField, V extends DataView<AnyRecord>> = NonNullish<ItemField> extends Array<unknown> ? WithNullish<ItemField, Array<RawDataViewResult<V>>> : WithNullish<ItemField, RawDataViewResult<V>>;
117
+ type ViewFieldConfig<V extends DataView<AnyRecord>> = V extends {
118
+ readonly [dataViewFieldsKey]: infer Fields;
119
+ } ? Fields : V['fields'];
120
+ type RawFieldResult<Item extends AnyRecord, Key extends PropertyKey, Field extends DataField<Item>> = Field extends true ? Key extends keyof Item ? Item[Key] : never : Field extends DataView<infer ChildItem> ? Key extends keyof Item ? RelationResult<Item[Key], DataView<ChildItem>> : never : Field extends ComputedField<Item, any, any, any> ? ComputedResult<Field> : Field extends ResolverField<Item, any, any> ? ResolverResult<Field> : never;
121
+ type RawDataViewResult<V extends DataView<AnyRecord>> = V extends DataView<infer Item> ? { [K in keyof ViewFieldConfig<V>]: RawFieldResult<Item, K, ViewFieldConfig<V>[K]> } : never;
122
+ type DataViewResult<V extends DataView<AnyRecord>> = Serializable<RawDataViewResult<V>>;
123
+ type WithTypename<T, Name extends string> = T & {
124
+ __typename: Name;
125
+ };
126
+ /**
127
+ * Resolved entity type from a data view for client use.
128
+ */
129
+ type Entity<TView extends DataView<AnyRecord>, Name extends string, Replacements extends Record<string, unknown> = Record<never, never>> = WithTypename<Omit<DataViewResult<TView>, keyof Replacements> & Replacements, Name>;
130
+ type SelectedViewNode<Context> = {
131
+ args?: AnyRecord;
132
+ computeds: Map<string, ComputedField<AnyRecord, any, Context>>;
133
+ path: string | null;
134
+ relations: Map<string, SelectedViewNode<Context>>;
135
+ resolvers: Map<string, ResolverField<AnyRecord, any, Context>>;
136
+ selectedFields: Set<string>;
137
+ view: DataView<AnyRecord>;
138
+ };
139
+ type ViewPlanNode<Context = unknown> = SelectedViewNode<Context>;
140
+ type ViewPlan<Item extends AnyRecord = AnyRecord, Context = unknown> = {
141
+ args?: AnyRecord;
142
+ ctx?: Context;
143
+ resolve: (item: Item) => Promise<AnyRecord>;
144
+ resolveMany: (items: Array<AnyRecord>) => Promise<Array<AnyRecord>>;
145
+ root: ViewPlanNode<Context>;
146
+ selectedPaths: ReadonlySet<string>;
147
+ view: DataView<Item>;
148
+ };
149
+ /**
150
+ * Builds a resolver that applies a client's selection to a server data view,
151
+ * filtering fields, running nested resolvers, and shaping Prisma selects.
152
+ */
153
+ declare function createResolver<Item extends AnyRecord, Context = unknown>({
154
+ args,
155
+ ctx,
156
+ select,
157
+ view
158
+ }: {
159
+ args?: AnyRecord;
160
+ ctx?: Context;
161
+ select: Iterable<string>;
162
+ view: DataView<Item>;
163
+ }): {
164
+ resolve: (item: Item) => Promise<AnyRecord>;
165
+ resolveMany: (items: Array<AnyRecord>) => Promise<Array<AnyRecord>>;
166
+ select: {
167
+ [x: string]: unknown;
168
+ };
169
+ };
170
+ //#endregion
171
+ //#region src/server/connection.d.ts
172
+ type ConnectionInput = z.infer<typeof connectionInput>;
173
+ type AdditionalInputSchema = z.ZodObject<Record<string, z.ZodTypeAny>>;
174
+ type ConnectionInputWithAdditional<TAdditionalInput extends AdditionalInputSchema | undefined> = ConnectionInput & {
175
+ args?: ConnectionInput['args'] extends infer A ? A & (TAdditionalInput extends AdditionalInputSchema ? z.infer<TAdditionalInput> : object) : never;
176
+ };
177
+ type ConnectionCursor = string;
178
+ /**
179
+ * Connection item including the node and opaque cursor.
180
+ */
181
+ type ConnectionItem<TNode> = {
182
+ cursor: ConnectionCursor;
183
+ node: TNode;
184
+ };
185
+ /**
186
+ * Pagination metadata returned with connection lists.
187
+ */
188
+ type ConnectionPagination = {
189
+ hasNext: boolean;
190
+ hasPrevious: boolean;
191
+ nextCursor?: ConnectionCursor;
192
+ previousCursor?: ConnectionCursor;
193
+ };
194
+ /**
195
+ * Connection payload that mirrors what the client expects for list fields.
196
+ */
197
+ type ConnectionResult<TNode> = {
198
+ items: Array<ConnectionItem<TNode>>;
199
+ pagination: ConnectionPagination;
200
+ };
201
+ type ProcedureLike = {
202
+ input: (schema: any) => {
203
+ query: (resolver: (options: any) => unknown) => unknown;
204
+ };
205
+ };
206
+ type ProcedureContext<TProcedure> = TProcedure extends {
207
+ input: (schema: any) => {
208
+ query: (resolver: (options: {
209
+ ctx: infer TContext;
210
+ }) => unknown) => unknown;
211
+ };
212
+ } ? TContext : unknown;
213
+ type ConnectionProcedure<TInput, TOutput> = QueryProcedure<{
214
+ input: TInput;
215
+ meta: unknown;
216
+ output: TOutput;
217
+ }>;
218
+ type QueryFn<TContext, TItem, TInput extends ConnectionInput> = (options: {
219
+ ctx: TContext;
220
+ cursor?: ConnectionCursor;
221
+ direction: 'forward' | 'backward';
222
+ input: TInput;
223
+ skip?: number;
224
+ take: number;
225
+ }) => Promise<Array<TItem>>;
226
+ type MapFn<TContext, TItem, TNode, TInput extends ConnectionInput> = (options: {
227
+ ctx: TContext;
228
+ input: TInput;
229
+ items: Array<TItem>;
230
+ }) => Promise<Array<TNode>> | Array<TNode>;
231
+ /**
232
+ * Zod schema for connection args (`after`, `before`, `first`, `last`, etc.).
233
+ */
234
+ declare const connectionArgs: z.ZodOptional<z.ZodType<Record<string, unknown>, unknown, z.core.$ZodTypeInternals<Record<string, unknown>, unknown>>>;
235
+ declare const connectionInput: z.ZodObject<{
236
+ args: z.ZodOptional<z.ZodType<Record<string, unknown>, unknown, z.core.$ZodTypeInternals<Record<string, unknown>, unknown>>>;
237
+ select: z.ZodArray<z.ZodString>;
238
+ }, z.core.$strict>;
239
+ /**
240
+ * Wraps a tRPC procedure to handle cursor-based pagination with consistent
241
+ * connection semantics.
242
+ */
243
+ declare function withConnection<TProcedure extends ProcedureLike>(procedure: TProcedure): <TItem, TNode = TItem, TAdditionalInput extends AdditionalInputSchema | undefined = undefined>(options: {
244
+ defaultSize?: number;
245
+ getCursor?: (node: TNode) => ConnectionCursor;
246
+ input?: TAdditionalInput;
247
+ map?: MapFn<ProcedureContext<TProcedure>, TItem, TNode, ConnectionInputWithAdditional<TAdditionalInput>>;
248
+ query: QueryFn<ProcedureContext<TProcedure>, TItem, ConnectionInputWithAdditional<TAdditionalInput>>;
249
+ }) => ConnectionProcedure<ConnectionInputWithAdditional<TAdditionalInput>, ConnectionResult<TNode>>;
250
+ //#endregion
251
+ //#region src/server/source.d.ts
252
+ type OrderDirection = 'asc' | 'desc';
253
+ type SourceOrderField = {
254
+ direction: OrderDirection;
255
+ field: string;
256
+ };
257
+ type SourceOrder = Array<SourceOrderField>;
258
+ type SourceReference<Item extends AnyRecord = AnyRecord, Adapter = unknown> = SourceDefinition<Item, Adapter> | (() => SourceDefinition<Item, Adapter>);
259
+ type SourceRelationBase<Item extends AnyRecord = AnyRecord, Adapter = unknown> = {
260
+ foreignKey: string;
261
+ localKey: string;
262
+ source: SourceReference<Item, Adapter>;
263
+ };
264
+ type SourceRelation<Item extends AnyRecord = AnyRecord, Adapter = unknown> = SourceRelationBase<Item, Adapter> & ({
265
+ kind: 'one';
266
+ orderBy?: never;
267
+ through?: never;
268
+ } | {
269
+ kind: 'many';
270
+ orderBy?: SourceOrder;
271
+ through?: never;
272
+ } | {
273
+ kind: 'manyToMany';
274
+ orderBy?: SourceOrder;
275
+ through?: {
276
+ foreignKey: string;
277
+ localKey: string;
278
+ };
279
+ });
280
+ type SourceRelationKeyConfig = {
281
+ foreignKey: string;
282
+ localKey: string;
283
+ };
284
+ type SourceRelationConfig = Partial<SourceRelationKeyConfig> & {
285
+ orderBy?: SourceOrder;
286
+ through?: {
287
+ foreignKey: string;
288
+ localKey: string;
289
+ };
290
+ };
291
+ type SourceDefinition<Item extends AnyRecord = AnyRecord, Adapter = unknown> = {
292
+ adapter?: Adapter;
293
+ id: string;
294
+ orderBy?: SourceOrder;
295
+ relations?: Record<string, SourceRelation<AnyRecord, Adapter>>;
296
+ view: DataView<Item>;
297
+ };
298
+ type SourceConfig<Item extends AnyRecord = AnyRecord, Adapter = unknown> = {
299
+ adapter?: Adapter;
300
+ id?: string;
301
+ orderBy?: SourceOrder;
302
+ relations?: Record<string, SourceRelationConfig>;
303
+ view: DataView<Item>;
304
+ };
305
+ type SourcePlanNode<Context = unknown, Adapter = unknown> = ViewPlanNode<Context> & {
306
+ orderBy: SourceOrder;
307
+ relations: Map<string, SourcePlanNode<Context, Adapter>>;
308
+ source: SourceDefinition<AnyRecord, Adapter>;
309
+ };
310
+ type SourcePlan<Item extends AnyRecord = AnyRecord, Context = unknown, Adapter = unknown> = Omit<ViewPlan<Item, Context>, 'root'> & {
311
+ root: SourcePlanNode<Context, Adapter>;
312
+ source: SourceDefinition<Item, Adapter>;
313
+ };
314
+ type DataViewModule = Record<string, unknown>;
315
+ declare const hasNestedSelection: (select: Iterable<string>, field: string) => boolean;
316
+ declare const getNestedSelection: (select: Iterable<string>, field: string) => Array<string>;
317
+ declare function createSourcePlan<Item extends AnyRecord, Context = unknown, Adapter = unknown>({
318
+ args,
319
+ ctx,
320
+ select,
321
+ source
322
+ }: {
323
+ args?: Record<string, unknown>;
324
+ ctx?: Context;
325
+ select: Iterable<string>;
326
+ source: SourceDefinition<Item, Adapter>;
327
+ }): {
328
+ root: SourcePlanNode<unknown, Adapter>;
329
+ source: SourceDefinition<Item, Adapter>;
330
+ args: AnyRecord | undefined;
331
+ ctx: Context | undefined;
332
+ resolve: (item: Item) => Promise<AnyRecord>;
333
+ resolveMany: (items: Array<AnyRecord>) => Promise<Array<AnyRecord>>;
334
+ selectedPaths: Set<string>;
335
+ view: DataView<Item>;
336
+ };
337
+ declare function createNestedSourcePlan<Item extends AnyRecord, Context = unknown, Adapter = unknown>({
338
+ ctx,
339
+ field,
340
+ input,
341
+ source
342
+ }: {
343
+ ctx?: Context;
344
+ field: string;
345
+ input: {
346
+ args?: Record<string, unknown>;
347
+ select: Iterable<string>;
348
+ };
349
+ source: SourceDefinition<Item, Adapter>;
350
+ }): {
351
+ root: SourcePlanNode<unknown, Adapter>;
352
+ source: SourceDefinition<Item, Adapter>;
353
+ args: AnyRecord | undefined;
354
+ ctx: Context | undefined;
355
+ resolve: (item: Item) => Promise<AnyRecord>;
356
+ resolveMany: (items: Array<AnyRecord>) => Promise<Array<AnyRecord>>;
357
+ selectedPaths: Set<string>;
358
+ view: DataView<Item>;
359
+ };
360
+ //#endregion
361
+ //#region src/server/executor.d.ts
362
+ type SourceConnectionHandler<Context, Extra = unknown, Item extends AnyRecord = AnyRecord> = (options: {
363
+ ctx: Context;
364
+ cursor?: string;
365
+ direction: 'backward' | 'forward';
366
+ extra?: Extra;
367
+ plan: SourcePlan<Item, Context>;
368
+ skip?: number;
369
+ take: number;
370
+ }) => Promise<Array<Item>>;
371
+ type SourceByIdHandler<Context, Extra = unknown, Item extends AnyRecord = AnyRecord> = (options: {
372
+ ctx: Context;
373
+ extra?: Extra;
374
+ id: string;
375
+ plan: SourcePlan<Item, Context>;
376
+ }) => Promise<Item | null>;
377
+ type SourceByIdsHandler<Context, Extra = unknown, Item extends AnyRecord = AnyRecord> = (options: {
378
+ ctx: Context;
379
+ extra?: Extra;
380
+ ids: Array<string>;
381
+ plan: SourcePlan<Item, Context>;
382
+ }) => Promise<Array<Item>>;
383
+ type SourceExecutor<Context, Item extends AnyRecord = AnyRecord, ByIdExtra = unknown, ByIdsExtra = unknown, ConnectionExtra = unknown> = {
384
+ byId?: SourceByIdHandler<Context, ByIdExtra, Item>;
385
+ byIds?: SourceByIdsHandler<Context, ByIdsExtra, Item>;
386
+ connection?: SourceConnectionHandler<Context, ConnectionExtra, Item>;
387
+ };
388
+ type SourceRegistry<Context> = Map<SourceDefinition<AnyRecord, unknown>, SourceExecutor<Context, AnyRecord, any, any, any>>;
389
+ declare const resolveSourceByIds: <Context, Item extends AnyRecord>({
390
+ ctx,
391
+ extra,
392
+ ids,
393
+ input,
394
+ registry,
395
+ source
396
+ }: {
397
+ ctx: Context;
398
+ extra?: unknown;
399
+ ids: Array<string>;
400
+ input: {
401
+ args?: Record<string, unknown>;
402
+ select: Iterable<string>;
403
+ };
404
+ registry: SourceRegistry<Context>;
405
+ source: SourceDefinition<Item, unknown>;
406
+ }) => Promise<AnyRecord[]>;
407
+ declare const resolveSourceById: <Context, Item extends AnyRecord>({
408
+ ctx,
409
+ extra,
410
+ id,
411
+ input,
412
+ registry,
413
+ source
414
+ }: {
415
+ ctx: Context;
416
+ extra?: unknown;
417
+ id: string;
418
+ input: {
419
+ args?: Record<string, unknown>;
420
+ select: Iterable<string>;
421
+ };
422
+ registry: SourceRegistry<Context>;
423
+ source: SourceDefinition<Item, unknown>;
424
+ }) => Promise<AnyRecord | null>;
425
+ declare const resolveSourceConnection: <Context, Item extends AnyRecord>({
426
+ ctx,
427
+ cursor,
428
+ direction,
429
+ extra,
430
+ input,
431
+ registry,
432
+ skip,
433
+ source,
434
+ take
435
+ }: {
436
+ ctx: Context;
437
+ cursor?: string;
438
+ direction: "backward" | "forward";
439
+ extra?: unknown;
440
+ input: {
441
+ args?: Record<string, unknown>;
442
+ select: Iterable<string>;
443
+ };
444
+ registry: SourceRegistry<Context>;
445
+ skip?: number;
446
+ source: SourceDefinition<Item, unknown>;
447
+ take: number;
448
+ }) => Promise<AnyRecord[]>;
449
+ declare const refetchSourceById: <Context, Item extends AnyRecord>({
450
+ ctx,
451
+ extra,
452
+ id,
453
+ input,
454
+ registry,
455
+ source
456
+ }: {
457
+ ctx: Context;
458
+ extra?: unknown;
459
+ id: string;
460
+ input: {
461
+ args?: Record<string, unknown>;
462
+ select: Iterable<string>;
463
+ };
464
+ registry: SourceRegistry<Context>;
465
+ source: SourceDefinition<Item, unknown>;
466
+ }) => Promise<AnyRecord | null>;
467
+ //#endregion
468
+ export { DataViewListOptions as A, dataView as B, connectionArgs as C, CountSelection as D, ComputedSelection as E, FieldSelection as F, list as H, ViewPlan as I, computed as L, DataViewOrderDirection as M, DataViewResult as N, CountWhere as O, Entity as P, count as R, ConnectionResult as S, ComputedField as T, resolver as U, field$1 as V, createSourcePlan as _, resolveSourceConnection as a, ConnectionItem as b, SourceConfig as c, SourceOrderField as d, SourcePlan as f, createNestedSourcePlan as g, SourceRelationConfig as h, resolveSourceByIds as i, DataViewOrderBy as j, DataView as k, SourceDefinition as l, SourceRelation as m, refetchSourceById as n, DataViewModule as o, SourcePlanNode as p, resolveSourceById as r, OrderDirection as s, SourceRegistry as t, SourceOrder as u, getNestedSelection as v, withConnection as w, ConnectionPagination as x, hasNestedSelection as y, createResolver as z };
package/lib/index.d.mts CHANGED
@@ -1,5 +1,67 @@
1
- import { A as ViewSelection, B as RequestOptions, C as TypeConfig, D as ViewEntity, E as ViewData, F as isViewTag, G as getSelectionPlan, H as Transport, I as FateMutations, L as mutation, M as ViewTag, N as __FateEntityBrand, O as ViewEntityName, P as __FateSelectionBrand, R as FateClient, S as Snapshot, T as View, U as createTRPCTransport, V as createClient, _ as Pagination, a as Entity, b as RootDefinition, c as FateThenable, d as MutationDefinition, f as MutationEntity, g as NodesItem, h as MutationResult, i as ConnectionTag, j as ViewSnapshot, k as ViewRef, l as ListItem, m as MutationInput, n as ConnectionMetadata, o as EntityId, p as MutationIdentifier, r as ConnectionRef, s as FateRoots, t as AnyRecord, u as Mask, v as Request, w as TypeName, x as Selection, y as RequestResult, z as RequestMode } from "./types-HECWvGpd.mjs";
1
+ import { A as ViewRef, B as RequestMode, C as Snapshot, D as ViewData, E as View, F as __FateSelectionBrand, G as createTRPCTransport, H as createClient, I as isViewTag, J as getSelectionPlan, L as FateMutations, M as ViewSnapshot, N as ViewTag, O as ViewEntity, P as __FateEntityBrand, R as mutation, S as Selection, T as TypeName, U as List, V as RequestOptions, W as Transport, _ as NodesItem, a as Entity, b as RequestResult, c as FateThenable, d as MutationDefinition, f as MutationEntity, g as MutationShape, h as MutationResult, i as ConnectionTag, j as ViewSelection, k as ViewEntityName, l as ListItem, m as MutationInput, n as ConnectionMetadata, o as EntityId, p as MutationIdentifier, r as ConnectionRef, s as FateRoots, t as AnyRecord, u as Mask, v as Pagination, w as TypeConfig, x as RootDefinition, y as Request$1, z as FateClient } from "./types-Dz46PXr3.mjs";
2
+ import { C as liveGlobalConnectionTopic, S as liveEntityTopic, a as FateProtocolRequest, i as FateOperation, n as FateLiveConnectionEvent, o as FateProtocolResponse, r as FateLiveEvent, t as isRecord, u as InferFateAPI, x as liveConnectionTopic } from "./record-ENh92gyb.mjs";
3
+ import { n as getListEntries, t as ListEntry } from "./list-4wRNSVgI.mjs";
2
4
 
5
+ //#region src/httpTransport.d.ts
6
+ type TransportMutations = Record<string, MutationShape>;
7
+ type EmptyTransportMutations = Record<never, MutationShape>;
8
+ type FateAPIShape = {
9
+ mutations?: Record<string, MutationShape>;
10
+ };
11
+ type MutationMapFromAPI<API> = API extends {
12
+ mutations: infer Mutations;
13
+ } ? Mutations extends TransportMutations ? Mutations : EmptyTransportMutations : EmptyTransportMutations;
14
+ type FetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
15
+ type HeadersFactory = HeadersInit | (() => HeadersInit | Promise<HeadersInit>);
16
+ type EventSourceConstructor = new (url: string, options?: {
17
+ withCredentials?: boolean;
18
+ }) => {
19
+ addEventListener(type: string, listener: (event: Event) => void): void;
20
+ close(): void;
21
+ removeEventListener(type: string, listener: (event: Event) => void): void;
22
+ };
23
+ type LiveConnectorOptions = {
24
+ eventSource?: EventSourceConstructor;
25
+ fetch?: typeof fetch;
26
+ headers?: HeadersFactory;
27
+ onError?: (error: Error | Event) => void;
28
+ retryDelay?: number;
29
+ withCredentials?: boolean;
30
+ };
31
+ type LiveConnectorClient = {
32
+ subscribe<Data = unknown>(options: {
33
+ id: string;
34
+ lastEventId?: string;
35
+ onEvent?: (event: VoidLiveClientEvent<Data>) => void;
36
+ topic: string;
37
+ }): Promise<() => Promise<void> | void>;
38
+ };
39
+ type LiveConnector = (url: string | URL, options?: LiveConnectorOptions) => LiveConnectorClient;
40
+ type VoidLiveClientEvent<Data = unknown> = {
41
+ data: Data;
42
+ eventId?: string;
43
+ subscriptionId: string;
44
+ topic: string;
45
+ type?: string;
46
+ };
47
+ declare function createHTTPTransport<API extends FateAPIShape, Mutations extends TransportMutations = MutationMapFromAPI<API>>({
48
+ eventSource,
49
+ fetch: fetchImpl,
50
+ headers,
51
+ live,
52
+ liveRetryMs,
53
+ liveUrl,
54
+ url
55
+ }: {
56
+ eventSource?: EventSourceConstructor;
57
+ fetch?: FetchLike;
58
+ headers?: HeadersFactory;
59
+ live?: boolean | LiveConnector;
60
+ liveRetryMs?: number;
61
+ liveUrl?: string | URL;
62
+ url: string | URL;
63
+ }): Transport<Mutations>;
64
+ //#endregion
3
65
  //#region src/root.d.ts
4
66
  /**
5
67
  * Defines a root query for an entity type, capturing the response shape.
@@ -25,4 +87,4 @@ type SelectionValidation<T extends Entity, S extends Selection<T>> = Exclude<key
25
87
  */
26
88
  declare function view<T extends Entity>(): <S extends Selection<T>>(select: S & SelectionValidation<T, S>) => View<T, S>;
27
89
  //#endregion
28
- export { type ConnectionMetadata, type ConnectionRef, ConnectionTag, type Entity, type EntityId, FateClient, type FateMutations, type AnyRecord as FateRecord, type FateRoots, type FateThenable, type ListItem, type Mask, type MutationDefinition, type MutationEntity, type MutationIdentifier, type MutationInput, type MutationResult, type NodesItem, type Pagination, type Request, type RequestMode, type RequestOptions, type RequestResult, type Selection, type Snapshot, type Transport, type TypeConfig, type View, type ViewData, type ViewEntity, type ViewEntityName, type ViewRef, type ViewSelection, type ViewSnapshot, type ViewTag, clientRoot, createClient, createTRPCTransport, getSelectionPlan, isViewTag, mutation, toEntityId, view };
90
+ export { type ConnectionMetadata, type ConnectionRef, ConnectionTag, type Entity, type EntityId, FateClient, type FateLiveConnectionEvent, type FateLiveEvent, type FateMutations, type FateOperation, type FateProtocolRequest, type FateProtocolResponse, type AnyRecord as FateRecord, type FateRoots, type FateThenable, type InferFateAPI, type List, type ListEntry, type ListItem, type Mask, type MutationDefinition, type MutationEntity, type MutationIdentifier, type MutationInput, type MutationResult, type NodesItem, type Pagination, type Request$1 as Request, type RequestMode, type RequestOptions, type RequestResult, type Selection, type Snapshot, type Transport, type TypeConfig, type View, type ViewData, type ViewEntity, type ViewEntityName, type ViewRef, type ViewSelection, type ViewSnapshot, type ViewTag, clientRoot, createClient, createHTTPTransport, createTRPCTransport, getListEntries, getSelectionPlan, isRecord, isViewTag, liveConnectionTopic, liveEntityTopic, liveGlobalConnectionTopic, mutation, toEntityId, view };