@m1212e/rumble 0.15.4 → 0.16.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 CHANGED
@@ -314,6 +314,9 @@ await clientCreator({
314
314
 
315
315
  This way of generating code is especially helpful in monorepos, where it is convenient to output client code when running the server during development. If you do not use a monorepo and want to decouple the generation process, see below.
316
316
 
317
+ > The generated client contains metadata about the schema to function properly. Depending on the project and schema, this might be quite large and will increase bundle size. Additionally, this can provide sensitive information about the structure of your system. If you are concerned about this, it is recommended to use a different client.
318
+
319
+
317
320
  An example usage might look like this:
318
321
  ```ts
319
322
  import { client } from "./generated-client/client";
@@ -345,7 +348,7 @@ console.log(users.firstName)
345
348
  ### Alternative decoupled client generation
346
349
  As an alternative to use the client generator with a fully instanciated rumble instance, you can also import the `generateFromSchema` function from rumble and pass it a standard `GraphQLSchema` object to generate the client:
347
350
  ```ts
348
- import { generateFromSchema } from "@m1212e/rumble";
351
+ import { generateFromSchema } from "@m1212e/rumble/client/generate";
349
352
 
350
353
  await generateFromSchema({
351
354
  // a schema object: https://github.com/graphql/graphql-js/blob/60ae6c48b9c78332bf3d6036e7d931a3617d0674/src/type/schema.ts#L130
@@ -0,0 +1,3 @@
1
+ const require_generate = require('../generate-DE_u0l7g.cjs');
2
+
3
+ exports.generateFromSchema = require_generate.generateFromSchema;
@@ -0,0 +1,23 @@
1
+ import { GraphQLSchema } from "graphql";
2
+
3
+ //#region lib/client/generate/generate.d.ts
4
+ declare function generateFromSchema({
5
+ outputPath,
6
+ schema,
7
+ rumbleImportPath,
8
+ apiUrl,
9
+ useExternalUrqlClient,
10
+ removeExisting,
11
+ forceReactivity
12
+ }: {
13
+ schema: GraphQLSchema;
14
+ outputPath: string;
15
+ rumbleImportPath?: string;
16
+ apiUrl?: string;
17
+ useExternalUrqlClient?: boolean | string;
18
+ removeExisting?: boolean;
19
+ forceReactivity?: boolean;
20
+ }): Promise<void>;
21
+ //#endregion
22
+ export { generateFromSchema };
23
+ //# sourceMappingURL=generate.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.cts","names":[],"sources":["../../lib/client/generate/generate.ts"],"sourcesContent":[],"mappings":";;;iBAWsB,kBAAA;;;;;;;;;UASZ;EATY,UAAA,EAAA,MAAA;EACpB,gBAAA,CAAA,EAAA,MAAA;EACA,MAAA,CAAA,EAAA,MAAA;EACA,qBAAA,CAAA,EAAA,OAAA,GAAA,MAAA;EACA,cAAA,CAAA,EAAA,OAAA;EACA,eAAA,CAAA,EAAA,OAAA;CACA,CAAA,EAUD,OAVC,CAAA,IAAA,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { GraphQLSchema } from "graphql";
2
+
3
+ //#region lib/client/generate/generate.d.ts
4
+ declare function generateFromSchema({
5
+ outputPath,
6
+ schema,
7
+ rumbleImportPath,
8
+ apiUrl,
9
+ useExternalUrqlClient,
10
+ removeExisting,
11
+ forceReactivity
12
+ }: {
13
+ schema: GraphQLSchema;
14
+ outputPath: string;
15
+ rumbleImportPath?: string;
16
+ apiUrl?: string;
17
+ useExternalUrqlClient?: boolean | string;
18
+ removeExisting?: boolean;
19
+ forceReactivity?: boolean;
20
+ }): Promise<void>;
21
+ //#endregion
22
+ export { generateFromSchema };
23
+ //# sourceMappingURL=generate.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.mts","names":[],"sources":["../../lib/client/generate/generate.ts"],"sourcesContent":[],"mappings":";;;iBAWsB,kBAAA;;;;;;;;;UASZ;EATY,UAAA,EAAA,MAAA;EACpB,gBAAA,CAAA,EAAA,MAAA;EACA,MAAA,CAAA,EAAA,MAAA;EACA,qBAAA,CAAA,EAAA,OAAA,GAAA,MAAA;EACA,cAAA,CAAA,EAAA,OAAA;EACA,eAAA,CAAA,EAAA,OAAA;CACA,CAAA,EAUD,OAVC,CAAA,IAAA,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { t as generateFromSchema } from "../generate-lRQdmIB7.mjs";
2
+
3
+ export { generateFromSchema };
package/out/client.cjs ADDED
@@ -0,0 +1,300 @@
1
+ const require_index = require('./index.cjs');
2
+ let es_toolkit = require("es-toolkit");
3
+ let wonka = require("wonka");
4
+
5
+ //#region lib/client/request.ts
6
+ const argsKey = "__args";
7
+ function makeOperationString({ operationVerb, queryName, schema, input }) {
8
+ const otwQueryName = `${(0, es_toolkit.capitalize)(queryName)}${(0, es_toolkit.capitalize)(operationVerb)}`;
9
+ const field = schema.__schema.types.filter((t) => t.kind === "OBJECT").find((t) => t.name === schema.__schema[`${operationVerb}Type`].name).fields.find((f) => f.name === queryName);
10
+ const types = schema.__schema.types;
11
+ const selectionString = input ? stringifySelection({
12
+ field,
13
+ selection: input,
14
+ types
15
+ }) : "";
16
+ return `${operationVerb} ${otwQueryName} { ${queryName}${input?.[argsKey] ? stringifyArgumentObjectToGraphql({
17
+ args: input[argsKey],
18
+ fieldArgs: field.args,
19
+ types
20
+ }) : ""} ${selectionString}}`;
21
+ }
22
+ function makeGraphQLQueryRequest({ queryName, schema, input, client, enableSubscription = false, forceReactivity }) {
23
+ const awaitedReturnValueReference = {};
24
+ const source = (0, wonka.pipe)((0, wonka.merge)([client.query(makeOperationString({
25
+ operationVerb: "query",
26
+ queryName,
27
+ input,
28
+ schema
29
+ }), {}), enableSubscription ? client.subscription(makeOperationString({
30
+ operationVerb: "subscription",
31
+ queryName,
32
+ input,
33
+ schema
34
+ }), {}) : wonka.empty]), wonka.share, (0, wonka.map)((v) => {
35
+ const data = v.data?.[queryName];
36
+ if (!data && v.error) throw v.error;
37
+ return data;
38
+ }), (0, wonka.onPush)((data) => {
39
+ if (typeof data === "object" && data !== null && typeof forceReactivity === "boolean" && forceReactivity) Object.assign(awaitedReturnValueReference, data);
40
+ }));
41
+ const observable = (0, wonka.toObservable)(source);
42
+ const promise = (0, wonka.toPromise)((0, wonka.pipe)(source, (0, wonka.take)(1), (0, wonka.map)((data) => {
43
+ Object.assign(awaitedReturnValueReference, observable);
44
+ if (typeof data === "object" && data !== null && typeof forceReactivity === "boolean" && forceReactivity) {
45
+ Object.assign(awaitedReturnValueReference, data);
46
+ return awaitedReturnValueReference;
47
+ }
48
+ return data;
49
+ })));
50
+ Object.assign(promise, observable);
51
+ return promise;
52
+ }
53
+ function makeGraphQLMutationRequest({ mutationName, input, client, schema }) {
54
+ const response = (0, wonka.pipe)(client.mutation(makeOperationString({
55
+ operationVerb: "mutation",
56
+ queryName: mutationName,
57
+ input,
58
+ schema
59
+ }), {}), (0, wonka.map)((v) => {
60
+ const data = v.data?.[mutationName];
61
+ if (!data && v.error) throw v.error;
62
+ return data;
63
+ }));
64
+ const observable = (0, wonka.toObservable)(response);
65
+ const promise = (0, wonka.toPromise)((0, wonka.pipe)(response, (0, wonka.take)(1)));
66
+ Object.assign(promise, observable);
67
+ return promise;
68
+ }
69
+ function makeGraphQLSubscriptionRequest({ subscriptionName, input, client, schema }) {
70
+ return (0, wonka.pipe)(client.subscription(makeOperationString({
71
+ operationVerb: "subscription",
72
+ queryName: subscriptionName,
73
+ input,
74
+ schema
75
+ }), {}), (0, wonka.map)((v) => {
76
+ const data = v.data?.[subscriptionName];
77
+ if (!data && v.error) throw v.error;
78
+ return data;
79
+ }), wonka.toObservable);
80
+ }
81
+ function stringifySelection({ field, selection, types }) {
82
+ return `{
83
+ ${Object.entries(selection).filter(([key]) => key !== argsKey).reduce((acc, [key, value]) => {
84
+ if (typeof value === "object") {
85
+ let argsString = "";
86
+ if (value[argsKey]) {
87
+ let type = field.type;
88
+ if (type.kind === "NON_NULL") type = type.ofType;
89
+ if (type.kind === "LIST") type = type.ofType;
90
+ if (type.kind === "NON_NULL") type = type.ofType;
91
+ const referenceObject = types.find((t) => t.name === type.name).fields.find((f) => f.name === key);
92
+ argsString = stringifyArgumentObjectToGraphql({
93
+ args: value[argsKey],
94
+ types,
95
+ fieldArgs: referenceObject.args
96
+ });
97
+ }
98
+ acc += `${key}${argsString} ${stringifySelection({
99
+ field,
100
+ selection: value,
101
+ types
102
+ })}
103
+ `;
104
+ } else if (typeof value === "boolean" && value) acc += `${key}
105
+ `;
106
+ return acc;
107
+ }, "")} }`;
108
+ }
109
+ function stringifyArgumentObjectToGraphql({ args, fieldArgs, types }) {
110
+ const entries = Object.entries(args);
111
+ if (entries.length > 0) return `(${entries.map(([key, value]) => {
112
+ const gqlArg = fieldArgs.find((a) => a.name === key);
113
+ if (!gqlArg) throw new Error(`Argument ${key} not found in field args list ${JSON.stringify(fieldArgs.map((a) => a.name))}`);
114
+ return `${key}: ${stringifyArgumentValue({
115
+ arg: value,
116
+ gqlArg,
117
+ types
118
+ })}`;
119
+ }).join(", ")})`;
120
+ return "";
121
+ }
122
+ function stringifyArgumentValue({ arg, gqlArg, types }) {
123
+ if (arg === null) return "null";
124
+ if (Array.isArray(arg)) return `[${arg.map((v) => {
125
+ return stringifyArgumentValue({
126
+ arg: v,
127
+ types,
128
+ gqlArg
129
+ });
130
+ }).join(", ")}]`;
131
+ if (typeof arg === "object") {
132
+ let type$1 = gqlArg.type;
133
+ if (type$1.kind === "NON_NULL") type$1 = type$1.ofType;
134
+ if (type$1.kind === "LIST") type$1 = type$1.ofType;
135
+ if (type$1.kind === "NON_NULL") type$1 = type$1.ofType;
136
+ const referenceInputObject = types.find((t) => t.name === type$1.name);
137
+ if (!referenceInputObject) throw new Error(`Expected an INPUT_OBJECT hit in name based lookup for name ${type$1.name} with arg ${JSON.stringify(arg)}`);
138
+ if (referenceInputObject.kind !== "INPUT_OBJECT") throw new Error("Expected an INPUT_OBJECT hit in named based lookup");
139
+ return `{ ${Object.entries(arg).map(([key, value]) => {
140
+ const subArgType = referenceInputObject.inputFields.find((t) => t.name === key);
141
+ if (!subArgType) throw new Error(`Expected an INPUT_OBJECT hit in named based lookup for name ${key} with arg ${referenceInputObject.inputFields.map((f) => f.name).join(", ")}`);
142
+ return `${key}: ${stringifyArgumentValue({
143
+ arg: value,
144
+ types,
145
+ gqlArg: subArgType
146
+ })}`;
147
+ }).join(", ")} }`;
148
+ }
149
+ let type = gqlArg.type;
150
+ if (type.kind === "NON_NULL") type = type.ofType;
151
+ switch (typeof arg) {
152
+ case "string": return type.kind === "ENUM" ? arg : `"${arg}"`;
153
+ case "number": return `${arg}`;
154
+ case "bigint": return `${arg}`;
155
+ case "boolean": return `${arg}`;
156
+ case "symbol": throw new Error("Cannot stringify a symbol to send as gql arg");
157
+ case "undefined": return "null";
158
+ case "function": throw new Error("Cannot stringify a function to send as gql arg");
159
+ }
160
+ throw new Error("Cannot stringify an unknown type");
161
+ }
162
+
163
+ //#endregion
164
+ //#region lib/client/liveQuery.ts
165
+ function makeLiveQuery({ urqlClient, availableSubscriptions, forceReactivity, schema }) {
166
+ return new Proxy({}, { get: (_target, prop) => {
167
+ return (input) => {
168
+ return makeGraphQLQueryRequest({
169
+ queryName: prop,
170
+ input,
171
+ client: urqlClient,
172
+ enableSubscription: availableSubscriptions.has(prop),
173
+ forceReactivity,
174
+ schema
175
+ });
176
+ };
177
+ } });
178
+ }
179
+
180
+ //#endregion
181
+ //#region lib/client/mutation.ts
182
+ function makeMutation({ urqlClient, schema }) {
183
+ return new Proxy({}, { get: (_target, prop) => {
184
+ return (input) => {
185
+ return makeGraphQLMutationRequest({
186
+ mutationName: prop,
187
+ input,
188
+ client: urqlClient,
189
+ schema
190
+ });
191
+ };
192
+ } });
193
+ }
194
+
195
+ //#endregion
196
+ //#region lib/helpers/deepMap.ts
197
+ /**
198
+ * Recursively applies a mapping function to every value in a nested structure.
199
+ *
200
+ * This helper will traverse arrays and plain objects (objects with `constructor === Object`)
201
+ * and apply the provided `fn` to any value that is not an array or a plain object.
202
+ * - Arrays are mapped to new arrays (a fresh array is returned).
203
+ * - Plain objects are traversed and their own enumerable properties are replaced in-place.
204
+ * - Non-plain objects (e.g. Date, Map, Set, class instances, functions) are treated as leaves
205
+ * and passed directly to `fn`.
206
+ * - `null` and `undefined` are passed to `fn`.
207
+ * - Circular references are detected using a `WeakSet`. When a circular reference is encountered,
208
+ * the original reference is returned unchanged (it is not re-traversed or re-mapped).
209
+ *
210
+ * Note: Because plain objects are mutated in-place, callers who need immutability should first
211
+ * clone the object graph or pass a deep-cloned input to avoid modifying the original.
212
+ *
213
+ * @param input - The value to traverse and map. May be any value (primitive, array, object, etc.).
214
+ * @param fn - A function invoked for every non-array, non-plain-object value encountered.
215
+ * Receives the current value and should return the mapped value.
216
+ * @returns The transformed structure: arrays are returned as new arrays, plain objects are the
217
+ * same object instances with their property values replaced, and other values are the
218
+ * result of `fn`.
219
+ *
220
+ * @example
221
+ * // Map all primitive values to their string representation:
222
+ * // const result = mapValuesDeep({ a: 1, b: [2, { c: 3 }] }, v => String(v));
223
+ * // result => { a: "1", b: ["2", { c: "3" }] }
224
+ *
225
+ * @remarks
226
+ * - Only plain objects (constructed by `Object`) are recursively traversed. This avoids
227
+ * unintentionally iterating internal structure of class instances or built-in collections.
228
+ * - Circular structures are preserved by returning the original reference when detected.
229
+ */
230
+ function mapValuesDeep(input, fn) {
231
+ const seen = /* @__PURE__ */ new WeakSet();
232
+ const recurse = (value) => {
233
+ if (Array.isArray(value)) return value.map(recurse);
234
+ if (value !== null && value !== void 0 && typeof value === "object" && value.constructor === Object) {
235
+ if (seen.has(value)) return value;
236
+ seen.add(value);
237
+ for (const key of Object.keys(value)) value[key] = recurse(value[key]);
238
+ return value;
239
+ }
240
+ return fn(value);
241
+ };
242
+ return recurse(input);
243
+ }
244
+
245
+ //#endregion
246
+ //#region lib/client/nativeDateExchange.ts
247
+ const dateIsoRegex = /^\d{4}-\d{2}-\d{2}(?:[Tt ]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:[Zz]|[+-]\d{2}:\d{2})?)?$/;
248
+ const nativeDateExchange = ({ client, forward }) => {
249
+ return (operations$) => {
250
+ return (0, wonka.pipe)(forward(operations$), (0, wonka.map)((r) => {
251
+ r.data = mapValuesDeep(r.data, (value) => {
252
+ if (typeof value !== "string" || !dateIsoRegex.test(value)) return value;
253
+ const date = Date.parse(value);
254
+ if (!Number.isNaN(date)) return new Date(date);
255
+ return value;
256
+ });
257
+ return r;
258
+ }));
259
+ };
260
+ };
261
+
262
+ //#endregion
263
+ //#region lib/client/query.ts
264
+ function makeQuery({ urqlClient, forceReactivity, schema }) {
265
+ return new Proxy({}, { get: (_target, prop) => {
266
+ return (input) => {
267
+ return makeGraphQLQueryRequest({
268
+ queryName: prop,
269
+ input,
270
+ client: urqlClient,
271
+ enableSubscription: false,
272
+ forceReactivity,
273
+ schema
274
+ });
275
+ };
276
+ } });
277
+ }
278
+
279
+ //#endregion
280
+ //#region lib/client/subscription.ts
281
+ function makeSubscription({ urqlClient, schema }) {
282
+ return new Proxy({}, { get: (_target, prop) => {
283
+ return (input) => {
284
+ return makeGraphQLSubscriptionRequest({
285
+ subscriptionName: prop,
286
+ input,
287
+ client: urqlClient,
288
+ schema
289
+ });
290
+ };
291
+ } });
292
+ }
293
+
294
+ //#endregion
295
+ exports.makeLiveQuery = makeLiveQuery;
296
+ exports.makeMutation = makeMutation;
297
+ exports.makeQuery = makeQuery;
298
+ exports.makeSubscription = makeSubscription;
299
+ exports.nativeDateExchange = nativeDateExchange;
300
+ //# sourceMappingURL=client.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.cjs","names":["empty","share","toObservable","type","nativeDateExchange: Exchange"],"sources":["../lib/client/request.ts","../lib/client/liveQuery.ts","../lib/client/mutation.ts","../lib/helpers/deepMap.ts","../lib/client/nativeDateExchange.ts","../lib/client/query.ts","../lib/client/subscription.ts"],"sourcesContent":["import type { Client } from \"@urql/core\";\nimport { capitalize } from \"es-toolkit\";\nimport type {\n IntrospectionField,\n IntrospectionInputValue,\n IntrospectionQuery,\n IntrospectionType,\n} from \"graphql\";\nimport {\n empty,\n map,\n merge,\n onPush,\n pipe,\n share,\n take,\n toObservable,\n toPromise,\n} from \"wonka\";\n\n//TODO: this could use some refactoring and less type check disable (remove uses of any)\n\nexport const argsKey = \"__args\";\n\nfunction makeOperationString({\n operationVerb,\n queryName,\n schema,\n input,\n}: {\n operationVerb: \"query\" | \"subscription\" | \"mutation\";\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n}) {\n const otwQueryName = `${capitalize(queryName)}${capitalize(operationVerb)}`;\n const field = schema.__schema.types\n .filter((t) => t.kind === \"OBJECT\")\n .find((t) => t.name === schema.__schema[`${operationVerb}Type`]!.name)!\n .fields.find((f) => f.name === queryName)!;\n const types = schema.__schema.types;\n\n const selectionString = input\n ? stringifySelection({ field, selection: input, types })\n : \"\";\n\n const argumentString = input?.[argsKey]\n ? stringifyArgumentObjectToGraphql({\n args: input[argsKey],\n fieldArgs: field.args,\n types,\n })\n : \"\";\n\n const ret = `${operationVerb} ${otwQueryName} { ${queryName}${argumentString} ${selectionString}}`;\n return ret;\n}\n\nexport function makeGraphQLQueryRequest({\n queryName,\n schema,\n input,\n client,\n enableSubscription = false,\n forceReactivity,\n}: {\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n client: Client;\n enableSubscription?: boolean;\n forceReactivity?: boolean;\n}) {\n const awaitedReturnValueReference = {};\n\n const source = pipe(\n merge([\n client.query(\n makeOperationString({\n operationVerb: \"query\",\n queryName,\n input,\n schema,\n }),\n {},\n ),\n enableSubscription\n ? client.subscription(\n makeOperationString({\n operationVerb: \"subscription\",\n queryName,\n input,\n schema,\n }),\n {},\n )\n : empty,\n ]),\n share,\n map((v) => {\n const data = v.data?.[queryName];\n if (!data && v.error) {\n throw v.error;\n }\n\n return data;\n }),\n // keep the returned object reference updated with new data\n onPush((data) => {\n if (\n typeof data === \"object\" &&\n data !== null &&\n typeof forceReactivity === \"boolean\" &&\n forceReactivity\n ) {\n // TODO: Object assign calls should not overwrite store or promise fields\n Object.assign(awaitedReturnValueReference, data);\n }\n }),\n );\n\n const observable = toObservable(source);\n const promise = toPromise(\n pipe(\n source,\n take(1),\n map((data) => {\n Object.assign(awaitedReturnValueReference, observable);\n if (\n typeof data === \"object\" &&\n data !== null &&\n typeof forceReactivity === \"boolean\" &&\n forceReactivity\n ) {\n Object.assign(awaitedReturnValueReference, data);\n return awaitedReturnValueReference;\n }\n\n return data;\n }),\n ),\n );\n Object.assign(promise, observable);\n\n return promise;\n}\n\nexport function makeGraphQLMutationRequest({\n mutationName,\n input,\n client,\n schema,\n}: {\n mutationName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n}) {\n const response = pipe(\n client.mutation(\n makeOperationString({\n operationVerb: \"mutation\",\n queryName: mutationName,\n input,\n schema,\n }),\n {},\n ),\n map((v) => {\n const data = v.data?.[mutationName];\n if (!data && v.error) {\n throw v.error;\n }\n\n return data;\n }),\n );\n\n const observable = toObservable(response);\n const promise = toPromise(pipe(response, take(1)));\n Object.assign(promise, observable);\n\n return promise;\n}\n\nexport function makeGraphQLSubscriptionRequest({\n subscriptionName,\n input,\n client,\n schema,\n}: {\n subscriptionName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n}) {\n return pipe(\n client.subscription(\n makeOperationString({\n operationVerb: \"subscription\",\n queryName: subscriptionName,\n input,\n schema,\n }),\n {},\n ),\n map((v) => {\n const data = v.data?.[subscriptionName];\n if (!data && v.error) {\n throw v.error;\n }\n\n return data;\n }),\n toObservable,\n ) as any;\n}\n\nfunction stringifySelection({\n field,\n selection,\n types,\n}: {\n selection: Record<string, any>;\n field: IntrospectionField;\n types: readonly IntrospectionType[];\n}) {\n const ret = Object.entries(selection)\n .filter(([key]) => key !== argsKey)\n .reduce((acc, [key, value]) => {\n if (typeof value === \"object\") {\n let argsString = \"\";\n if (value[argsKey]) {\n let type = field.type;\n\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n if (type.kind === \"LIST\") {\n type = type.ofType;\n }\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n\n const referenceObject = (types as any)\n .find((t: any) => t.name === (type as any).name)\n .fields.find((f: any) => f.name === key);\n\n argsString = stringifyArgumentObjectToGraphql({\n args: value[argsKey],\n types,\n fieldArgs: referenceObject.args,\n });\n }\n\n acc += `${key}${argsString} ${stringifySelection({\n field,\n selection: value,\n types,\n })}\n`;\n } else {\n if (typeof value === \"boolean\" && value) {\n acc += `${key}\n`;\n }\n }\n return acc;\n }, \"\");\n\n return `{\n${ret} }`;\n}\n\nfunction stringifyArgumentObjectToGraphql({\n args,\n fieldArgs,\n types,\n}: {\n args: Record<any, any>;\n fieldArgs: readonly IntrospectionInputValue[];\n types: readonly IntrospectionType[];\n}) {\n const entries = Object.entries(args);\n\n if (entries.length > 0) {\n return `(${entries\n .map(([key, value]) => {\n const gqlArg = fieldArgs.find((a) => a.name === key);\n\n if (!gqlArg) {\n throw new Error(\n `Argument ${key} not found in field args list ${JSON.stringify(fieldArgs.map((a) => a.name))}`,\n );\n }\n\n return `${key}: ${stringifyArgumentValue({ arg: value, gqlArg, types })}`;\n })\n .join(\", \")})`;\n }\n\n return \"\";\n}\n\nfunction stringifyArgumentValue({\n arg,\n gqlArg,\n types,\n}: {\n arg: any;\n gqlArg: IntrospectionInputValue;\n types: readonly IntrospectionType[];\n}): string {\n if (arg === null) {\n return \"null\";\n }\n\n if (Array.isArray(arg)) {\n return `[${arg\n .map((v) => {\n return stringifyArgumentValue({\n arg: v,\n types,\n gqlArg,\n });\n })\n .join(\", \")}]`;\n }\n\n const argtype = typeof arg;\n\n if (argtype === \"object\") {\n let type = gqlArg.type;\n\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n if (type.kind === \"LIST\") {\n type = type.ofType;\n }\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n\n // if (type.kind !== \"INPUT_OBJECT\") {\n // throw new Error(\"Expected an INPUT_OBJECT type\");\n // }\n\n const referenceInputObject = types.find(\n (t) => t.name === (type as any).name,\n );\n\n if (!referenceInputObject) {\n throw new Error(\n `Expected an INPUT_OBJECT hit in name based lookup for name ${(type as any).name} with arg ${JSON.stringify(arg)}`,\n );\n }\n\n if (referenceInputObject.kind !== \"INPUT_OBJECT\") {\n throw new Error(\"Expected an INPUT_OBJECT hit in named based lookup\");\n }\n\n return `{ ${Object.entries(arg)\n .map(([key, value]) => {\n const subArgType = referenceInputObject.inputFields.find(\n (t) => t.name === key,\n );\n\n if (!subArgType) {\n throw new Error(\n `Expected an INPUT_OBJECT hit in named based lookup for name ${key} with arg ${referenceInputObject.inputFields.map((f) => f.name).join(\", \")}`,\n );\n }\n\n return `${key}: ${stringifyArgumentValue({ arg: value, types, gqlArg: subArgType })}`;\n })\n .join(\", \")} }`;\n }\n\n let type = gqlArg.type;\n\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n\n switch (typeof arg) {\n case \"string\":\n return type.kind === \"ENUM\" ? arg : `\"${arg}\"`;\n case \"number\":\n return `${arg}`;\n case \"bigint\":\n return `${arg}`;\n case \"boolean\":\n return `${arg}`;\n case \"symbol\":\n throw new Error(\"Cannot stringify a symbol to send as gql arg\");\n case \"undefined\":\n return \"null\";\n case \"function\":\n throw new Error(\"Cannot stringify a function to send as gql arg\");\n }\n\n throw new Error(\"Cannot stringify an unknown type\");\n}\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { makeGraphQLQueryRequest } from \"./request\";\nimport type { QueryableObjectFromGeneratedTypes } from \"./types\";\n\nexport function makeLiveQuery<\n Query extends Record<string, any>,\n ForceReactivity extends boolean = false,\n>({\n urqlClient,\n availableSubscriptions,\n forceReactivity,\n schema,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n availableSubscriptions: Set<string>;\n forceReactivity?: ForceReactivity;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input: Record<string, any>) => {\n return makeGraphQLQueryRequest({\n queryName: prop as string,\n input,\n client: urqlClient,\n enableSubscription: availableSubscriptions.has(prop as string),\n forceReactivity,\n schema,\n });\n };\n },\n },\n ) as QueryableObjectFromGeneratedTypes<Query, ForceReactivity>;\n}\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { makeGraphQLMutationRequest } from \"./request\";\nimport type { QueryableObjectFromGeneratedTypes } from \"./types\";\n\nexport function makeMutation<Mutation extends Record<string, any>>({\n urqlClient,\n schema,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input: Record<string, any>) => {\n return makeGraphQLMutationRequest({\n mutationName: prop as string,\n input,\n client: urqlClient,\n schema,\n });\n };\n },\n },\n ) as QueryableObjectFromGeneratedTypes<Mutation, false>;\n}\n","/**\n * Recursively applies a mapping function to every value in a nested structure.\n *\n * This helper will traverse arrays and plain objects (objects with `constructor === Object`)\n * and apply the provided `fn` to any value that is not an array or a plain object.\n * - Arrays are mapped to new arrays (a fresh array is returned).\n * - Plain objects are traversed and their own enumerable properties are replaced in-place.\n * - Non-plain objects (e.g. Date, Map, Set, class instances, functions) are treated as leaves\n * and passed directly to `fn`.\n * - `null` and `undefined` are passed to `fn`.\n * - Circular references are detected using a `WeakSet`. When a circular reference is encountered,\n * the original reference is returned unchanged (it is not re-traversed or re-mapped).\n *\n * Note: Because plain objects are mutated in-place, callers who need immutability should first\n * clone the object graph or pass a deep-cloned input to avoid modifying the original.\n *\n * @param input - The value to traverse and map. May be any value (primitive, array, object, etc.).\n * @param fn - A function invoked for every non-array, non-plain-object value encountered.\n * Receives the current value and should return the mapped value.\n * @returns The transformed structure: arrays are returned as new arrays, plain objects are the\n * same object instances with their property values replaced, and other values are the\n * result of `fn`.\n *\n * @example\n * // Map all primitive values to their string representation:\n * // const result = mapValuesDeep({ a: 1, b: [2, { c: 3 }] }, v => String(v));\n * // result => { a: \"1\", b: [\"2\", { c: \"3\" }] }\n *\n * @remarks\n * - Only plain objects (constructed by `Object`) are recursively traversed. This avoids\n * unintentionally iterating internal structure of class instances or built-in collections.\n * - Circular structures are preserved by returning the original reference when detected.\n */\nexport function mapValuesDeep(input: any, fn: (value: any) => any) {\n const seen = new WeakSet();\n\n const recurse = (value: any): any => {\n if (Array.isArray(value)) {\n return value.map(recurse);\n }\n\n if (\n value !== null &&\n value !== undefined &&\n typeof value === \"object\" &&\n value.constructor === Object\n ) {\n if (seen.has(value)) return value;\n seen.add(value);\n for (const key of Object.keys(value)) {\n value[key] = recurse(value[key]);\n }\n return value;\n }\n\n return fn(value);\n };\n\n return recurse(input);\n}\n","import type { Exchange } from \"@urql/core\";\nimport { map, pipe } from \"wonka\";\nimport { mapValuesDeep } from \"../helpers/deepMap\";\n\nconst dateIsoRegex =\n /^\\d{4}-\\d{2}-\\d{2}(?:[Tt ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:[Zz]|[+-]\\d{2}:\\d{2})?)?$/;\n\nexport const nativeDateExchange: Exchange = ({ client, forward }) => {\n return (operations$) => {\n const operationResult$ = forward(operations$);\n\n return pipe(\n operationResult$,\n map((r) => {\n r.data = mapValuesDeep(r.data, (value) => {\n if (typeof value !== \"string\" || !dateIsoRegex.test(value)) {\n return value;\n }\n\n const date = Date.parse(value);\n if (!Number.isNaN(date)) {\n return new Date(date);\n }\n\n return value;\n });\n return r;\n }),\n );\n };\n};\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { makeGraphQLQueryRequest } from \"./request\";\nimport type { QueryableObjectFromGeneratedTypes } from \"./types\";\n\nexport function makeQuery<\n Query extends Record<string, any>,\n ForceReactivity extends boolean = false,\n>({\n urqlClient,\n forceReactivity,\n schema,\n}: {\n urqlClient: Client;\n forceReactivity?: ForceReactivity;\n schema: IntrospectionQuery;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input?: Record<string, any>) => {\n return makeGraphQLQueryRequest({\n queryName: prop as string,\n input,\n client: urqlClient,\n enableSubscription: false,\n forceReactivity,\n schema,\n });\n };\n },\n },\n ) as QueryableObjectFromGeneratedTypes<Query, ForceReactivity>;\n}\n","import type { Client } from \"@urql/core\";\nimport type { IntrospectionQuery } from \"graphql\";\nimport { argsKey, makeGraphQLSubscriptionRequest } from \"./request\";\nimport type {\n ApplySelection,\n ObjectFieldSelection,\n Subscribeable,\n} from \"./types\";\nimport type { UnArray } from \"./utilTypes\";\n\nexport function makeSubscription<Subscription extends Record<string, any>>({\n urqlClient,\n schema,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n}) {\n return new Proxy(\n {},\n {\n get: (_target, prop) => {\n return (input: Record<string, any>) => {\n return makeGraphQLSubscriptionRequest({\n subscriptionName: prop as string,\n input,\n client: urqlClient,\n schema,\n });\n };\n },\n },\n ) as SubscriptionObject<Subscription>;\n}\n\n// TODO use the query util types\n\nexport type SubscriptionObject<Q> = {\n [Key in keyof Q]: QueryableObjectField<Q[Key]>;\n};\n\ntype QueryableObjectField<T> = T extends (\n p: infer QueryArgs,\n) => infer QueryResponse\n ? <\n Selected extends QueryArgs extends Record<string, any>\n ? ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>> & {\n [argsKey]: QueryArgs;\n }\n : ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>>,\n >(\n s: Selected,\n ) => QueryResponse extends null\n ? Subscribeable<\n NonNullable<QueryResponse> extends Array<any>\n ? ApplySelection<UnArray<NonNullable<QueryResponse>>, Selected>[]\n : ApplySelection<UnArray<NonNullable<QueryResponse>>, Selected>\n > | null\n : Subscribeable<\n QueryResponse extends Array<any>\n ? ApplySelection<UnArray<QueryResponse>, Selected>[]\n : ApplySelection<UnArray<QueryResponse>, Selected>\n >\n : Subscribeable<T>;\n"],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import { IntrospectionQuery } from "graphql";
2
+ import { Client, Exchange } from "@urql/core";
3
+
4
+ //#region lib/client/request.d.ts
5
+ declare const argsKey = "__args";
6
+ //#endregion
7
+ //#region lib/client/utilTypes.d.ts
8
+ type UnArray<T> = T extends Array<infer U> ? U : T;
9
+ type UnFunc<T> = T extends (() => infer A) ? A : T;
10
+ type ExtractGQLTypeFromField<T> = NonNullable<UnArray<UnFunc<T>>>;
11
+ type DeriveArrayType<From, To> = From extends Array<any> ? To[] : To;
12
+ type DeriveNullability<From, To> = From extends null ? To | null : To;
13
+ type RequireAtLeastOneFieldSet<T> = { [K in keyof T]: Required<Pick<T, K>> & Partial<Omit<T, K>> }[keyof T];
14
+ //#endregion
15
+ //#region lib/client/types.d.ts
16
+ type QueryableObjectFromGeneratedTypes<Q, ForceReactivity extends boolean> = { [Key in keyof Q]: Q[Key] extends ((p: infer QueryArgs) => infer QueryResponse) ? <Selected extends (QueryArgs extends Record<string, any> ?
17
+ // in that case we want to extend the object with an args key property
18
+ ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>> & {
19
+ [argsKey]: QueryArgs;
20
+ } : ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>>)>(s: Selected) => DeriveNullability<QueryResponse, Response<DeriveArrayType<QueryResponse, ApplySelection<ExtractGQLTypeFromField<QueryResponse>, Selected>>, ForceReactivity>> : () => Response<Q[Key], ForceReactivity> };
21
+ /**
22
+ * The input to select fields for an object
23
+ */
24
+ type ObjectFieldSelection<O> = RequireAtLeastOneFieldSet<{ [Key in keyof O]: NonNullable<UnArray<O[Key]>> extends ((p: infer P) => infer A) ? P extends Record<string, any> ?
25
+ // if the field is a function with required arguments, require the arguments in the selection
26
+ ObjectFieldSelection<UnArray<NonNullable<A>>> & {
27
+ [argsKey]: P;
28
+ } : ObjectFieldSelection<UnArray<NonNullable<A>>> : boolean }>;
29
+ /**
30
+ * Apply a selection to an object type
31
+ */
32
+ type ApplySelection<Object$1, Selection> = { [Key in keyof Selection & keyof Object$1]: Object$1[Key] extends ((p: infer _RequestArgs) => infer FieldResponse) ? DeriveNullability<FieldResponse, DeriveArrayType<NonNullable<FieldResponse>, ApplySelection<ExtractGQLTypeFromField<FieldResponse>, Selection[Key]>>> : Object$1[Key] };
33
+ type Subscribeable<Data> = {
34
+ subscribe: (subscription: (value: Data) => void) => () => void;
35
+ };
36
+ type Response<Data, ForceReactivity extends boolean> = ForceReactivity extends true ? Promise<Subscribeable<Data>> & Subscribeable<Data | undefined> : Data extends object ? Promise<Subscribeable<Data> & Data> & Subscribeable<Data | undefined> : Promise<Subscribeable<Data>> & Subscribeable<Data | undefined>;
37
+ //#endregion
38
+ //#region lib/client/liveQuery.d.ts
39
+ declare function makeLiveQuery<Query extends Record<string, any>, ForceReactivity extends boolean = false>({
40
+ urqlClient,
41
+ availableSubscriptions,
42
+ forceReactivity,
43
+ schema
44
+ }: {
45
+ urqlClient: Client;
46
+ schema: IntrospectionQuery;
47
+ availableSubscriptions: Set<string>;
48
+ forceReactivity?: ForceReactivity;
49
+ }): QueryableObjectFromGeneratedTypes<Query, ForceReactivity>;
50
+ //#endregion
51
+ //#region lib/client/mutation.d.ts
52
+ declare function makeMutation<Mutation extends Record<string, any>>({
53
+ urqlClient,
54
+ schema
55
+ }: {
56
+ urqlClient: Client;
57
+ schema: IntrospectionQuery;
58
+ }): QueryableObjectFromGeneratedTypes<Mutation, false>;
59
+ //#endregion
60
+ //#region lib/client/nativeDateExchange.d.ts
61
+ declare const nativeDateExchange: Exchange;
62
+ //#endregion
63
+ //#region lib/client/query.d.ts
64
+ declare function makeQuery<Query extends Record<string, any>, ForceReactivity extends boolean = false>({
65
+ urqlClient,
66
+ forceReactivity,
67
+ schema
68
+ }: {
69
+ urqlClient: Client;
70
+ forceReactivity?: ForceReactivity;
71
+ schema: IntrospectionQuery;
72
+ }): QueryableObjectFromGeneratedTypes<Query, ForceReactivity>;
73
+ //#endregion
74
+ //#region lib/client/subscription.d.ts
75
+ declare function makeSubscription<Subscription extends Record<string, any>>({
76
+ urqlClient,
77
+ schema
78
+ }: {
79
+ urqlClient: Client;
80
+ schema: IntrospectionQuery;
81
+ }): SubscriptionObject<Subscription>;
82
+ type SubscriptionObject<Q> = { [Key in keyof Q]: QueryableObjectField<Q[Key]> };
83
+ type QueryableObjectField<T> = T extends ((p: infer QueryArgs) => infer QueryResponse) ? <Selected extends (QueryArgs extends Record<string, any> ? ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>> & {
84
+ [argsKey]: QueryArgs;
85
+ } : ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>>)>(s: Selected) => QueryResponse extends null ? Subscribeable<NonNullable<QueryResponse> extends Array<any> ? ApplySelection<UnArray<NonNullable<QueryResponse>>, Selected>[] : ApplySelection<UnArray<NonNullable<QueryResponse>>, Selected>> | null : Subscribeable<QueryResponse extends Array<any> ? ApplySelection<UnArray<QueryResponse>, Selected>[] : ApplySelection<UnArray<QueryResponse>, Selected>> : Subscribeable<T>;
86
+ //#endregion
87
+ export { makeLiveQuery, makeMutation, makeQuery, makeSubscription, nativeDateExchange };
88
+ //# sourceMappingURL=client.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.cts","names":[],"sources":["../lib/client/request.ts","../lib/client/utilTypes.ts","../lib/client/types.ts","../lib/client/liveQuery.ts","../lib/client/mutation.ts","../lib/client/nativeDateExchange.ts","../lib/client/query.ts","../lib/client/subscription.ts"],"sourcesContent":[],"mappings":";;;;cAsBa,OAAA;;;KCtBD,aAAa,UAAU,iBAAiB,IAAI;KAE5C,YAAY,4BAA0B,IAAI;KAE1C,6BAA6B,YAAY,QAAQ,OAAO;KAExD,4BAA4B,aAAa,aAAa,OAAO;ADgB5D,KCfD,iBDeQ,CAAA,IAAA,EAAA,EAAA,CAAA,GCfsB,IDetB,SAAA,IAAA,GCf0C,EDe1C,GAAA,IAAA,GCfsD,EDetD;ACtBR,KAaA,yBAbO,CAAA,CAAA,CAAA,GAAA,QAAM,MAcX,CAdW,GAcP,QAdO,CAcE,IAdF,CAcO,CAdP,EAcU,CAdV,CAAA,CAAA,GAcgB,OAdhB,CAcwB,IAdxB,CAc6B,CAd7B,EAcgC,CAdhC,CAAA,CAAA,EAAU,CAAA,MAe3B,CAf2B,CAAA;;;KCWvB,wFAKI,IAAI,EAAE,gFAGG,kBAAkB;;AAE/B,oBFCQ,CEDa,OFCb,CEDqB,WFCrB,CEDiC,aFCjC,CAAA,CAAA,CAAA,GAAA;GEAL,OAAA,GAAU;IAGb,qBAAqB,QAAQ,YAAY,sBAE1C,aACA,kBAEH,eAEA,SACE,gBAEE,eAEA,eAAe,wBAAwB,gBAAgB,YAEzD,0BAIE,SAAS,EAAE,MAAM;AD3C7B;;;AAAoD,KCiDxC,oBDjDwC,CAAA,CAAA,CAAA,GCiDd,yBDjDc,CAAA,UAAI,MCkDxC,CDlDwC,GCkDpC,WDlDoC,CCkDxB,ODlDwB,CCkDhB,CDlDgB,CCkDd,GDlDc,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,EAAA,KAAA,EAAA,EAAA,GAAA,KAAA,EAAA,ICmDlD,CDnDkD,SCmDxC,MDnDwC,CAAA,MAAA,EAAA,GAAA,CAAA;AAAA;ACqDhD,oBDrDiD,CCqD5B,ODrD4B,CCqDpB,WDrDoB,CCqDR,CDrDQ,CAAA,CAAA,CAAA,GAAA;EAE7C,CCmD+C,OAAA,CDnDzC,ECmDmD,CDnDnD;AAAM,CAAA,GCqDhB,oBDrDgB,CCqDK,ODrDL,CCqDa,WDrDb,CCqDyB,CDrDzB,CAAA,CAAA,CAAA,GAAA,OAAA,EAA0B,CAAA;;;AAElD;AAAoE,KC2DxD,cD3DwD,CAAA,QAAA,EAAA,SAAA,CAAA,GAAA,UAAP,MC4D7C,SD5D6C,GAAA,MC4D3B,QD5D2B,GC4DlB,QD5DkB,CC4DX,GD5DW,CAAA,UAAA,CAAA,CAAA,EAAA,KAAA,aAAA,EAAA,GAAA,KAAA,cAAA,IC+DvD,iBD/DuD,CCgErD,aDhEqD,ECiErD,eDjEqD,CCkEnD,WDlEmD,CCkEvC,aDlEuC,CAAA,ECmEnD,cDnEmD,CCmEpC,uBDnEoC,CCmEZ,aDnEY,CAAA,ECmEI,SDnEJ,CCmEc,GDnEd,CAAA,CAAA,CAAA,CAAA,GCsEvD,QDtEuD,CCsEhD,GDtEgD,CAAA,EAAR;AAAZ,KCyE7B,aDzE6B,CAAA,IAAA,CAAA,GAAA;EAAW,SAAA,EAAA,CAAA,YAAA,EAAA,CAAA,KAAA,EC0EhB,ID1EgB,EAAA,GAAA,IAAA,EAAA,GAAA,GAAA,GAAA,IAAA;AAEpD,CAAA;KC2EK,QD3EmC,CAAA,IAAA,EAAA,wBAAA,OAAA,CAAA,GC8EpC,eD9EoC,SAAA,IAAA,GC+EpC,OD/EoC,CC+E5B,aD/E4B,CC+Ed,ID/Ec,CAAA,CAAA,GC+EL,aD/EK,CC+ES,ID/ET,GAAA,SAAA,CAAA,GCiFpC,IDjFoC,SAAA,MAAA,GCkFlC,ODlFkC,CCkF1B,aDlF0B,CCkFZ,IDlFY,CAAA,GCkFJ,IDlFI,CAAA,GCkFI,aDlFJ,CCkFkB,IDlFlB,GAAA,SAAA,CAAA,GCmFlC,ODnFkC,CCmF1B,aDnF0B,CCmFZ,IDnFY,CAAA,CAAA,GCmFH,aDnFG,CCmFW,IDnFX,GAAA,SAAA,CAAA;;;iBEDxB,4BACA;;;;;AFNhB;EDsBa,UAAO,EGRN,MHQM;UGPV;0BACgB;oBACN;AFjBpB,CAAA,CAAA,EEmCO,iCFnCY,CEmCsB,KFnCtB,EEmC6B,eFnC7B,CAAA;;;iBGKH,8BAA8B;;;;EJiBjC,UAAO,EIbN,MJaM;UIZV;IAgBH,kCAAkC;;;cCnB5B,oBAAoB;;;iBCFjB,wBACA;;;;;ENgBH,UAAO,EMTN,MNSM;oBMRA;UACV;IAkBH,kCAAkC,OAAO;;;iBCvBhC,sCAAsC;;;ANVtD;cMcc;UACJ;ANfV,CAAA,CAAA,EM+BO,kBN/BY,CM+BO,YN/BP,CAAA;AAAM,KMoCb,kBNpCa,CAAA,CAAA,CAAA,GAAA,UAAU,MMqCnB,CNrCmB,GMqCf,oBNrCe,CMqCM,CNrCN,CMqCQ,GNrCR,CAAA,CAAA,EAAiB;KMwC/C,oBNxCmD,CAAA,CAAA,CAAA,GMwCzB,CNxCyB,UAAA,CAAA,CAAA,EAAA,KAAA,UAAA,EAAA,GAAA,KAAA,cAAA,IAAA,CAAA,kBM4CjC,SN5CiC,SM4Cf,MN5Ce,CAAA,MAAA,EAAA,GAAA,CAAA,GM6C9C,oBN7C8C,CM6CzB,ON7CyB,CM6CjB,WN7CiB,CM6CL,aN7CK,CAAA,CAAA,CAAA,GAAA;EAAC,CM8C5C,OAAA,CN9C4C,EM8ClC,SN9CkC;AAEzD,CAAA,GM8CU,oBN9CQ,CM8Ca,ON9Cb,CM8CqB,WN9CrB,CM8CiC,aN9CjC,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EMgDT,QNhDS,EAAA,GMiDT,aNjDS,SAAA,IAAA,GMkDV,aNlDU,CMmDR,WNnDQ,CMmDI,aNnDJ,CAAA,SMmD2B,KNnD3B,CAAA,GAAA,CAAA,GMoDJ,cNpDI,CMoDW,ONpDX,CMoDmB,WNpDnB,CMoD+B,aNpD/B,CAAA,CAAA,EMoDgD,QNpDhD,CAAA,EAAA,GMqDJ,cNrDI,CMqDW,ONrDX,CMqDmB,WNrDnB,CMqD+B,aNrD/B,CAAA,CAAA,EMqDgD,QNrDhD,CAAA,CAAA,GAAA,IAAA,GMuDV,aNvDU,CMwDR,aNxDQ,SMwDc,KNxDd,CAAA,GAAA,CAAA,GMyDJ,cNzDI,CMyDW,ONzDX,CMyDmB,aNzDnB,CAAA,EMyDmC,QNzDnC,CAAA,EAAA,GM0DJ,cN1DI,CM0DW,ON1DX,CM0DmB,aN1DnB,CAAA,EM0DmC,QN1DnC,CAAA,CAAA,GM4Dd,aN5Dc,CM4DA,CN5DA,CAAA"}
@@ -0,0 +1,88 @@
1
+ import { IntrospectionQuery } from "graphql";
2
+ import { Client, Exchange } from "@urql/core";
3
+
4
+ //#region lib/client/request.d.ts
5
+ declare const argsKey = "__args";
6
+ //#endregion
7
+ //#region lib/client/utilTypes.d.ts
8
+ type UnArray<T> = T extends Array<infer U> ? U : T;
9
+ type UnFunc<T> = T extends (() => infer A) ? A : T;
10
+ type ExtractGQLTypeFromField<T> = NonNullable<UnArray<UnFunc<T>>>;
11
+ type DeriveArrayType<From, To> = From extends Array<any> ? To[] : To;
12
+ type DeriveNullability<From, To> = From extends null ? To | null : To;
13
+ type RequireAtLeastOneFieldSet<T> = { [K in keyof T]: Required<Pick<T, K>> & Partial<Omit<T, K>> }[keyof T];
14
+ //#endregion
15
+ //#region lib/client/types.d.ts
16
+ type QueryableObjectFromGeneratedTypes<Q, ForceReactivity extends boolean> = { [Key in keyof Q]: Q[Key] extends ((p: infer QueryArgs) => infer QueryResponse) ? <Selected extends (QueryArgs extends Record<string, any> ?
17
+ // in that case we want to extend the object with an args key property
18
+ ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>> & {
19
+ [argsKey]: QueryArgs;
20
+ } : ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>>)>(s: Selected) => DeriveNullability<QueryResponse, Response<DeriveArrayType<QueryResponse, ApplySelection<ExtractGQLTypeFromField<QueryResponse>, Selected>>, ForceReactivity>> : () => Response<Q[Key], ForceReactivity> };
21
+ /**
22
+ * The input to select fields for an object
23
+ */
24
+ type ObjectFieldSelection<O> = RequireAtLeastOneFieldSet<{ [Key in keyof O]: NonNullable<UnArray<O[Key]>> extends ((p: infer P) => infer A) ? P extends Record<string, any> ?
25
+ // if the field is a function with required arguments, require the arguments in the selection
26
+ ObjectFieldSelection<UnArray<NonNullable<A>>> & {
27
+ [argsKey]: P;
28
+ } : ObjectFieldSelection<UnArray<NonNullable<A>>> : boolean }>;
29
+ /**
30
+ * Apply a selection to an object type
31
+ */
32
+ type ApplySelection<Object$1, Selection> = { [Key in keyof Selection & keyof Object$1]: Object$1[Key] extends ((p: infer _RequestArgs) => infer FieldResponse) ? DeriveNullability<FieldResponse, DeriveArrayType<NonNullable<FieldResponse>, ApplySelection<ExtractGQLTypeFromField<FieldResponse>, Selection[Key]>>> : Object$1[Key] };
33
+ type Subscribeable<Data> = {
34
+ subscribe: (subscription: (value: Data) => void) => () => void;
35
+ };
36
+ type Response<Data, ForceReactivity extends boolean> = ForceReactivity extends true ? Promise<Subscribeable<Data>> & Subscribeable<Data | undefined> : Data extends object ? Promise<Subscribeable<Data> & Data> & Subscribeable<Data | undefined> : Promise<Subscribeable<Data>> & Subscribeable<Data | undefined>;
37
+ //#endregion
38
+ //#region lib/client/liveQuery.d.ts
39
+ declare function makeLiveQuery<Query extends Record<string, any>, ForceReactivity extends boolean = false>({
40
+ urqlClient,
41
+ availableSubscriptions,
42
+ forceReactivity,
43
+ schema
44
+ }: {
45
+ urqlClient: Client;
46
+ schema: IntrospectionQuery;
47
+ availableSubscriptions: Set<string>;
48
+ forceReactivity?: ForceReactivity;
49
+ }): QueryableObjectFromGeneratedTypes<Query, ForceReactivity>;
50
+ //#endregion
51
+ //#region lib/client/mutation.d.ts
52
+ declare function makeMutation<Mutation extends Record<string, any>>({
53
+ urqlClient,
54
+ schema
55
+ }: {
56
+ urqlClient: Client;
57
+ schema: IntrospectionQuery;
58
+ }): QueryableObjectFromGeneratedTypes<Mutation, false>;
59
+ //#endregion
60
+ //#region lib/client/nativeDateExchange.d.ts
61
+ declare const nativeDateExchange: Exchange;
62
+ //#endregion
63
+ //#region lib/client/query.d.ts
64
+ declare function makeQuery<Query extends Record<string, any>, ForceReactivity extends boolean = false>({
65
+ urqlClient,
66
+ forceReactivity,
67
+ schema
68
+ }: {
69
+ urqlClient: Client;
70
+ forceReactivity?: ForceReactivity;
71
+ schema: IntrospectionQuery;
72
+ }): QueryableObjectFromGeneratedTypes<Query, ForceReactivity>;
73
+ //#endregion
74
+ //#region lib/client/subscription.d.ts
75
+ declare function makeSubscription<Subscription extends Record<string, any>>({
76
+ urqlClient,
77
+ schema
78
+ }: {
79
+ urqlClient: Client;
80
+ schema: IntrospectionQuery;
81
+ }): SubscriptionObject<Subscription>;
82
+ type SubscriptionObject<Q> = { [Key in keyof Q]: QueryableObjectField<Q[Key]> };
83
+ type QueryableObjectField<T> = T extends ((p: infer QueryArgs) => infer QueryResponse) ? <Selected extends (QueryArgs extends Record<string, any> ? ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>> & {
84
+ [argsKey]: QueryArgs;
85
+ } : ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>>)>(s: Selected) => QueryResponse extends null ? Subscribeable<NonNullable<QueryResponse> extends Array<any> ? ApplySelection<UnArray<NonNullable<QueryResponse>>, Selected>[] : ApplySelection<UnArray<NonNullable<QueryResponse>>, Selected>> | null : Subscribeable<QueryResponse extends Array<any> ? ApplySelection<UnArray<QueryResponse>, Selected>[] : ApplySelection<UnArray<QueryResponse>, Selected>> : Subscribeable<T>;
86
+ //#endregion
87
+ export { makeLiveQuery, makeMutation, makeQuery, makeSubscription, nativeDateExchange };
88
+ //# sourceMappingURL=client.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.mts","names":[],"sources":["../lib/client/request.ts","../lib/client/utilTypes.ts","../lib/client/types.ts","../lib/client/liveQuery.ts","../lib/client/mutation.ts","../lib/client/nativeDateExchange.ts","../lib/client/query.ts","../lib/client/subscription.ts"],"sourcesContent":[],"mappings":";;;;cAsBa,OAAA;;;KCtBD,aAAa,UAAU,iBAAiB,IAAI;KAE5C,YAAY,4BAA0B,IAAI;KAE1C,6BAA6B,YAAY,QAAQ,OAAO;KAExD,4BAA4B,aAAa,aAAa,OAAO;ADgB5D,KCfD,iBDeQ,CAAA,IAAA,EAAA,EAAA,CAAA,GCfsB,IDetB,SAAA,IAAA,GCf0C,EDe1C,GAAA,IAAA,GCfsD,EDetD;ACtBR,KAaA,yBAbO,CAAA,CAAA,CAAA,GAAA,QAAM,MAcX,CAdW,GAcP,QAdO,CAcE,IAdF,CAcO,CAdP,EAcU,CAdV,CAAA,CAAA,GAcgB,OAdhB,CAcwB,IAdxB,CAc6B,CAd7B,EAcgC,CAdhC,CAAA,CAAA,EAAU,CAAA,MAe3B,CAf2B,CAAA;;;KCWvB,wFAKI,IAAI,EAAE,gFAGG,kBAAkB;;AAE/B,oBFCQ,CEDa,OFCb,CEDqB,WFCrB,CEDiC,aFCjC,CAAA,CAAA,CAAA,GAAA;GEAL,OAAA,GAAU;IAGb,qBAAqB,QAAQ,YAAY,sBAE1C,aACA,kBAEH,eAEA,SACE,gBAEE,eAEA,eAAe,wBAAwB,gBAAgB,YAEzD,0BAIE,SAAS,EAAE,MAAM;AD3C7B;;;AAAoD,KCiDxC,oBDjDwC,CAAA,CAAA,CAAA,GCiDd,yBDjDc,CAAA,UAAI,MCkDxC,CDlDwC,GCkDpC,WDlDoC,CCkDxB,ODlDwB,CCkDhB,CDlDgB,CCkDd,GDlDc,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,EAAA,KAAA,EAAA,EAAA,GAAA,KAAA,EAAA,ICmDlD,CDnDkD,SCmDxC,MDnDwC,CAAA,MAAA,EAAA,GAAA,CAAA;AAAA;ACqDhD,oBDrDiD,CCqD5B,ODrD4B,CCqDpB,WDrDoB,CCqDR,CDrDQ,CAAA,CAAA,CAAA,GAAA;EAE7C,CCmD+C,OAAA,CDnDzC,ECmDmD,CDnDnD;AAAM,CAAA,GCqDhB,oBDrDgB,CCqDK,ODrDL,CCqDa,WDrDb,CCqDyB,CDrDzB,CAAA,CAAA,CAAA,GAAA,OAAA,EAA0B,CAAA;;;AAElD;AAAoE,KC2DxD,cD3DwD,CAAA,QAAA,EAAA,SAAA,CAAA,GAAA,UAAP,MC4D7C,SD5D6C,GAAA,MC4D3B,QD5D2B,GC4DlB,QD5DkB,CC4DX,GD5DW,CAAA,UAAA,CAAA,CAAA,EAAA,KAAA,aAAA,EAAA,GAAA,KAAA,cAAA,IC+DvD,iBD/DuD,CCgErD,aDhEqD,ECiErD,eDjEqD,CCkEnD,WDlEmD,CCkEvC,aDlEuC,CAAA,ECmEnD,cDnEmD,CCmEpC,uBDnEoC,CCmEZ,aDnEY,CAAA,ECmEI,SDnEJ,CCmEc,GDnEd,CAAA,CAAA,CAAA,CAAA,GCsEvD,QDtEuD,CCsEhD,GDtEgD,CAAA,EAAR;AAAZ,KCyE7B,aDzE6B,CAAA,IAAA,CAAA,GAAA;EAAW,SAAA,EAAA,CAAA,YAAA,EAAA,CAAA,KAAA,EC0EhB,ID1EgB,EAAA,GAAA,IAAA,EAAA,GAAA,GAAA,GAAA,IAAA;AAEpD,CAAA;KC2EK,QD3EmC,CAAA,IAAA,EAAA,wBAAA,OAAA,CAAA,GC8EpC,eD9EoC,SAAA,IAAA,GC+EpC,OD/EoC,CC+E5B,aD/E4B,CC+Ed,ID/Ec,CAAA,CAAA,GC+EL,aD/EK,CC+ES,ID/ET,GAAA,SAAA,CAAA,GCiFpC,IDjFoC,SAAA,MAAA,GCkFlC,ODlFkC,CCkF1B,aDlF0B,CCkFZ,IDlFY,CAAA,GCkFJ,IDlFI,CAAA,GCkFI,aDlFJ,CCkFkB,IDlFlB,GAAA,SAAA,CAAA,GCmFlC,ODnFkC,CCmF1B,aDnF0B,CCmFZ,IDnFY,CAAA,CAAA,GCmFH,aDnFG,CCmFW,IDnFX,GAAA,SAAA,CAAA;;;iBEDxB,4BACA;;;;;AFNhB;EDsBa,UAAO,EGRN,MHQM;UGPV;0BACgB;oBACN;AFjBpB,CAAA,CAAA,EEmCO,iCFnCY,CEmCsB,KFnCtB,EEmC6B,eFnC7B,CAAA;;;iBGKH,8BAA8B;;;;EJiBjC,UAAO,EIbN,MJaM;UIZV;IAgBH,kCAAkC;;;cCnB5B,oBAAoB;;;iBCFjB,wBACA;;;;;ENgBH,UAAO,EMTN,MNSM;oBMRA;UACV;IAkBH,kCAAkC,OAAO;;;iBCvBhC,sCAAsC;;;ANVtD;cMcc;UACJ;ANfV,CAAA,CAAA,EM+BO,kBN/BY,CM+BO,YN/BP,CAAA;AAAM,KMoCb,kBNpCa,CAAA,CAAA,CAAA,GAAA,UAAU,MMqCnB,CNrCmB,GMqCf,oBNrCe,CMqCM,CNrCN,CMqCQ,GNrCR,CAAA,CAAA,EAAiB;KMwC/C,oBNxCmD,CAAA,CAAA,CAAA,GMwCzB,CNxCyB,UAAA,CAAA,CAAA,EAAA,KAAA,UAAA,EAAA,GAAA,KAAA,cAAA,IAAA,CAAA,kBM4CjC,SN5CiC,SM4Cf,MN5Ce,CAAA,MAAA,EAAA,GAAA,CAAA,GM6C9C,oBN7C8C,CM6CzB,ON7CyB,CM6CjB,WN7CiB,CM6CL,aN7CK,CAAA,CAAA,CAAA,GAAA;EAAC,CM8C5C,OAAA,CN9C4C,EM8ClC,SN9CkC;AAEzD,CAAA,GM8CU,oBN9CQ,CM8Ca,ON9Cb,CM8CqB,WN9CrB,CM8CiC,aN9CjC,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EMgDT,QNhDS,EAAA,GMiDT,aNjDS,SAAA,IAAA,GMkDV,aNlDU,CMmDR,WNnDQ,CMmDI,aNnDJ,CAAA,SMmD2B,KNnD3B,CAAA,GAAA,CAAA,GMoDJ,cNpDI,CMoDW,ONpDX,CMoDmB,WNpDnB,CMoD+B,aNpD/B,CAAA,CAAA,EMoDgD,QNpDhD,CAAA,EAAA,GMqDJ,cNrDI,CMqDW,ONrDX,CMqDmB,WNrDnB,CMqD+B,aNrD/B,CAAA,CAAA,EMqDgD,QNrDhD,CAAA,CAAA,GAAA,IAAA,GMuDV,aNvDU,CMwDR,aNxDQ,SMwDc,KNxDd,CAAA,GAAA,CAAA,GMyDJ,cNzDI,CMyDW,ONzDX,CMyDmB,aNzDnB,CAAA,EMyDmC,QNzDnC,CAAA,EAAA,GM0DJ,cN1DI,CM0DW,ON1DX,CM0DmB,aN1DnB,CAAA,EM0DmC,QN1DnC,CAAA,CAAA,GM4Dd,aN5Dc,CM4DA,CN5DA,CAAA"}