@m1212e/rumble 0.16.7 → 0.16.15
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 +4 -1
- package/out/client/generate.cjs +2 -1
- package/out/client/generate.d.cts.map +1 -1
- package/out/client/generate.d.mts.map +1 -1
- package/out/client/generate.mjs +1 -1
- package/out/client.cjs +37 -32
- package/out/client.cjs.map +1 -1
- package/out/client.d.cts +3 -5
- package/out/client.d.cts.map +1 -1
- package/out/client.d.mts +3 -5
- package/out/client.d.mts.map +1 -1
- package/out/client.mjs +37 -33
- package/out/client.mjs.map +1 -1
- package/out/{generate-D3FWZlGu.cjs → generate-9zSO5f7n.cjs} +5 -3
- package/out/generate-9zSO5f7n.cjs.map +1 -0
- package/out/{generate-DcdqYHG4.mjs → generate-PDRNfY6V.mjs} +3 -1
- package/out/generate-PDRNfY6V.mjs.map +1 -0
- package/out/index.cjs +81 -88
- package/out/index.cjs.map +1 -1
- package/out/index.d.cts +4140 -167
- package/out/index.d.cts.map +1 -1
- package/out/index.d.mts +4140 -167
- package/out/index.d.mts.map +1 -1
- package/out/index.mjs +49 -61
- package/out/index.mjs.map +1 -1
- package/out/lazy-BrDkNRyV.cjs +32 -0
- package/out/lazy-BrDkNRyV.cjs.map +1 -0
- package/out/lazy-CoMVcY4X.mjs +26 -0
- package/out/lazy-CoMVcY4X.mjs.map +1 -0
- package/package.json +20 -19
- package/out/generate-D3FWZlGu.cjs.map +0 -1
- package/out/generate-DcdqYHG4.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -7,6 +7,8 @@ rumble is a combined ability and graphql builder built around [drizzle](https://
|
|
|
7
7
|
|
|
8
8
|
> rumble currently works best with postgres. Some features might not work with other databases.
|
|
9
9
|
|
|
10
|
+
> Comes with a fully TS based client to consume any GraphQL API. See the client docs at the end to learn about usage with rumble and independent usage with any GraphQL API.
|
|
11
|
+
|
|
10
12
|
## Getting started
|
|
11
13
|
The following example is an excerpt from the example setup you can find [here](./example). If you are interested in a real world app thats using rumble (and is still work in progress) please see [CHASE](https://github.com/DeutscheModelUnitedNations/munify-chase).
|
|
12
14
|
|
|
@@ -71,7 +73,7 @@ abilityBuilder.users.filter("read").by(({ context, entities }) => {
|
|
|
71
73
|
// const allowed = await queryExternalAuthorizationService(context.user, entities);
|
|
72
74
|
|
|
73
75
|
// we could filter the list to only return the entities the user is allowed to see
|
|
74
|
-
//
|
|
76
|
+
// even mapping to prevent leakage of certain fields is possible
|
|
75
77
|
return entities;
|
|
76
78
|
});
|
|
77
79
|
```
|
|
@@ -345,6 +347,7 @@ users.subscribe((s) => s?.at(0));
|
|
|
345
347
|
// you can directly access the values of an awaited result
|
|
346
348
|
console.log(users.firstName)
|
|
347
349
|
```
|
|
350
|
+
> As of `v0.16.12` the client has special support for the svelte reactive state system (runes). If you run a live query which deploys a subscription inside a svelte effect context, you will get reactivity without subscribing to anything right out of the box. Please see [here](https://github.com/DeutscheModelUnitedNations/munify-chase/blob/f70c4484a92551b564c70603ebfd48d5b8cac637/src/lib/api/customClient.ts#L12) and [here](https://github.com/DeutscheModelUnitedNations/munify-chase/blob/f70c4484a92551b564c70603ebfd48d5b8cac637/src/routes/app/(launcher)/%2Bpage.svelte#L9C9-L9C23) for real world examples.
|
|
348
351
|
### Alternative decoupled client generation
|
|
349
352
|
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:
|
|
350
353
|
```ts
|
package/out/client/generate.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.cts","names":[],"sources":["../../lib/client/generate/generate.ts"],"
|
|
1
|
+
{"version":3,"file":"generate.d.cts","names":[],"sources":["../../lib/client/generate/generate.ts"],"mappings":";;;iBAWsB,kBAAA,CAAA;EACpB,UAAA;EACA,MAAA;EACA,gBAAA;EACA,MAAA;EACA,qBAAA;EACA,cAAA;EACA;AAAA;EAEA,MAAA,EAAQ,aAAA;EACR,UAAA;EACA,gBAAA;EACA,MAAA;EACA,qBAAA;EACA,cAAA;EACA,eAAA;AAAA,IACD,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.mts","names":[],"sources":["../../lib/client/generate/generate.ts"],"
|
|
1
|
+
{"version":3,"file":"generate.d.mts","names":[],"sources":["../../lib/client/generate/generate.ts"],"mappings":";;;iBAWsB,kBAAA,CAAA;EACpB,UAAA;EACA,MAAA;EACA,gBAAA;EACA,MAAA;EACA,qBAAA;EACA,cAAA;EACA;AAAA;EAEA,MAAA,EAAQ,aAAA;EACR,UAAA;EACA,gBAAA;EACA,MAAA;EACA,qBAAA;EACA,cAAA;EACA,eAAA;AAAA,IACD,OAAA"}
|
package/out/client/generate.mjs
CHANGED
package/out/client.cjs
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_lazy = require('./lazy-BrDkNRyV.cjs');
|
|
1
3
|
const require_index = require('./index.cjs');
|
|
2
4
|
let es_toolkit = require("es-toolkit");
|
|
5
|
+
let svelte_reactivity = require("svelte/reactivity");
|
|
3
6
|
let wonka = require("wonka");
|
|
4
7
|
|
|
5
8
|
//#region lib/client/request.ts
|
|
@@ -20,41 +23,43 @@ function makeOperationString({ operationVerb, queryName, schema, input }) {
|
|
|
20
23
|
}) : ""} ${selectionString}}`;
|
|
21
24
|
}
|
|
22
25
|
function makeGraphQLQueryRequest({ queryName, schema, input, client, enableSubscription = false, forceReactivity }) {
|
|
23
|
-
let
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
const
|
|
26
|
+
let currentData;
|
|
27
|
+
const dataProxy = require_lazy.lazy(() => new Proxy(currentData, { get(target, prop, receiver) {
|
|
28
|
+
svelteSubscriber();
|
|
29
|
+
return Reflect.get(currentData, prop, receiver);
|
|
30
|
+
} }));
|
|
31
|
+
const svelteSubscriber = (0, svelte_reactivity.createSubscriber)((update) => {
|
|
32
|
+
const unsub = observable.subscribe((d) => {
|
|
33
|
+
update();
|
|
34
|
+
});
|
|
35
|
+
return () => unsub.unsubscribe();
|
|
36
|
+
});
|
|
37
|
+
const stream = (0, wonka.pipe)((0, wonka.merge)([client.query(makeOperationString({
|
|
35
38
|
operationVerb: "query",
|
|
36
39
|
queryName,
|
|
37
40
|
input,
|
|
38
41
|
schema
|
|
39
|
-
}), {})
|
|
40
|
-
const subscriptionSource = enableSubscription ? client.subscription(makeOperationString({
|
|
42
|
+
}), {}), enableSubscription ? client.subscription(makeOperationString({
|
|
41
43
|
operationVerb: "subscription",
|
|
42
44
|
queryName,
|
|
43
45
|
input,
|
|
44
46
|
schema
|
|
45
|
-
}), {}) : wonka.empty
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
47
|
+
}), {}) : wonka.empty]), wonka.share, (0, wonka.map)((v) => {
|
|
48
|
+
const data = v.data?.[queryName];
|
|
49
|
+
if (!data && v.error) throw v.error;
|
|
50
|
+
currentData = data;
|
|
51
|
+
if (typeof data === "object" && data !== null) return dataProxy();
|
|
52
|
+
return data;
|
|
53
|
+
}));
|
|
54
|
+
const observable = (0, wonka.toObservable)(stream);
|
|
55
|
+
const promise = (0, wonka.toPromise)((0, wonka.pipe)(stream, (0, wonka.take)(1), (0, wonka.map)((data) => {
|
|
56
|
+
if (typeof data === "object" && data !== null) {
|
|
57
|
+
if (typeof forceReactivity === "boolean" && forceReactivity) return observable;
|
|
58
|
+
Object.assign(data, observable);
|
|
59
|
+
return data;
|
|
60
|
+
}
|
|
56
61
|
})));
|
|
57
|
-
Object.assign(promise,
|
|
62
|
+
Object.assign(promise, observable);
|
|
58
63
|
return promise;
|
|
59
64
|
}
|
|
60
65
|
function makeGraphQLMutationRequest({ mutationName, input, client, schema }) {
|
|
@@ -136,12 +141,12 @@ function stringifyArgumentValue({ arg, gqlArg, types }) {
|
|
|
136
141
|
});
|
|
137
142
|
}).join(", ")}]`;
|
|
138
143
|
if (typeof arg === "object") {
|
|
139
|
-
let type
|
|
140
|
-
if (type
|
|
141
|
-
if (type
|
|
142
|
-
if (type
|
|
143
|
-
const referenceInputObject = types.find((t) => t.name === type
|
|
144
|
-
if (!referenceInputObject) throw new Error(`Expected an INPUT_OBJECT hit in name based lookup for name ${type
|
|
144
|
+
let type = gqlArg.type;
|
|
145
|
+
if (type.kind === "NON_NULL") type = type.ofType;
|
|
146
|
+
if (type.kind === "LIST") type = type.ofType;
|
|
147
|
+
if (type.kind === "NON_NULL") type = type.ofType;
|
|
148
|
+
const referenceInputObject = types.find((t) => t.name === type.name);
|
|
149
|
+
if (!referenceInputObject) throw new Error(`Expected an INPUT_OBJECT hit in name based lookup for name ${type.name} with arg ${JSON.stringify(arg)}`);
|
|
145
150
|
if (referenceInputObject.kind !== "INPUT_OBJECT") throw new Error("Expected an INPUT_OBJECT hit in named based lookup");
|
|
146
151
|
return `{ ${Object.entries(arg).map(([key, value]) => {
|
|
147
152
|
const subArgType = referenceInputObject.inputFields.find((t) => t.name === key);
|
package/out/client.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.cjs","names":["awaitedReturnValueReference: any","share","empty","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 fromValue,\n map,\n merge,\n onPush,\n pipe,\n type Source,\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// TODO: the client needs tests\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 let awaitedReturnValueReference: any;\n\n function makeStream(sources: Source<any>[]) {\n return pipe(\n merge(sources),\n share,\n map((v: any) => {\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 if (awaitedReturnValueReference) {\n // TODO: Object assign calls should not overwrite store or promise fields\n Object.assign(awaitedReturnValueReference, data);\n } else {\n awaitedReturnValueReference = data;\n }\n }\n }),\n );\n }\n\n const querySource = client.query(\n makeOperationString({\n operationVerb: \"query\",\n queryName,\n input,\n schema,\n }),\n {},\n );\n\n const subscriptionSource = enableSubscription\n ? client.subscription(\n makeOperationString({\n operationVerb: \"subscription\",\n queryName,\n input,\n schema,\n }),\n {},\n )\n : empty;\n\n const promise = toPromise(\n pipe(\n makeStream([querySource]),\n take(1),\n map((data) => {\n const observable = toObservable(\n makeStream([fromValue(data), querySource, subscriptionSource]),\n );\n if (\n typeof data === \"object\" &&\n data !== null &&\n typeof forceReactivity === \"boolean\" &&\n forceReactivity\n ) {\n return observable;\n }\n awaitedReturnValueReference = data;\n Object.assign(awaitedReturnValueReference, observable);\n return awaitedReturnValueReference;\n }),\n ),\n );\n Object.assign(\n promise,\n toObservable(makeStream([querySource, subscriptionSource])),\n );\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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"}
|
|
1
|
+
{"version":3,"file":"client.cjs","names":["lazy","empty","share","toObservable"],"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 { createSubscriber } from \"svelte/reactivity\";\nimport {\n empty,\n map,\n merge,\n pipe,\n share,\n take,\n toObservable,\n toPromise,\n} from \"wonka\";\nimport { lazy } from \"../helpers/lazy\";\n\n// TODO: this could use some refactoring and less type check disable (remove uses of any)\n// TODO: the client needs tests\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 return `${operationVerb} ${otwQueryName} { ${queryName}${argumentString} ${selectionString}}`;\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 let currentData: any;\n const dataProxy = lazy(\n () =>\n new Proxy(currentData, {\n get(target, prop, receiver) {\n svelteSubscriber();\n return Reflect.get(currentData, prop, receiver);\n },\n }),\n );\n\n const svelteSubscriber = createSubscriber((update) => {\n const unsub = observable.subscribe((d) => {\n update();\n });\n return () => unsub.unsubscribe();\n });\n\n const stream = 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: any) => {\n const data = v.data?.[queryName];\n if (!data && v.error) {\n throw v.error;\n }\n currentData = data;\n\n if (typeof data === \"object\" && data !== null) {\n return dataProxy();\n }\n\n return data;\n }),\n );\n\n const observable = toObservable(stream);\n const promise = toPromise(\n pipe(\n stream,\n take(1),\n map((data) => {\n if (typeof data === \"object\" && data !== null) {\n if (typeof forceReactivity === \"boolean\" && forceReactivity) {\n return observable;\n }\n Object.assign(data, observable);\n return data;\n }\n }),\n ),\n );\n\n Object.assign(promise, observable);\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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"}
|
package/out/client.d.cts
CHANGED
|
@@ -13,23 +13,21 @@ type DeriveNullability<From, To> = From extends null ? To | null : To;
|
|
|
13
13
|
type RequireAtLeastOneFieldSet<T> = { [K in keyof T]: Required<Pick<T, K>> & Partial<Omit<T, K>> }[keyof T];
|
|
14
14
|
//#endregion
|
|
15
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
|
|
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> ? // in that case we want to extend the object with an args key property
|
|
18
17
|
ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>> & {
|
|
19
18
|
[argsKey]: QueryArgs;
|
|
20
19
|
} : ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>>)>(s: Selected) => DeriveNullability<QueryResponse, Response<DeriveArrayType<QueryResponse, ApplySelection<ExtractGQLTypeFromField<QueryResponse>, Selected>>, ForceReactivity>> : () => Response<Q[Key], ForceReactivity> };
|
|
21
20
|
/**
|
|
22
21
|
* The input to select fields for an object
|
|
23
22
|
*/
|
|
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
|
|
23
|
+
type ObjectFieldSelection<O> = RequireAtLeastOneFieldSet<{ [Key in keyof O]: NonNullable<UnArray<O[Key]>> extends ((p: infer P) => infer A) ? P extends Record<string, any> ? // if the field is a function with required arguments, require the arguments in the selection
|
|
26
24
|
ObjectFieldSelection<UnArray<NonNullable<A>>> & {
|
|
27
25
|
[argsKey]: P;
|
|
28
26
|
} : ObjectFieldSelection<UnArray<NonNullable<A>>> : boolean }>;
|
|
29
27
|
/**
|
|
30
28
|
* Apply a selection to an object type
|
|
31
29
|
*/
|
|
32
|
-
type ApplySelection<Object
|
|
30
|
+
type ApplySelection<Object, Selection> = { [Key in keyof Selection & keyof Object]: Object[Key] extends ((p: infer _RequestArgs) => infer FieldResponse) ? DeriveNullability<FieldResponse, DeriveArrayType<NonNullable<FieldResponse>, ApplySelection<ExtractGQLTypeFromField<FieldResponse>, Selection[Key]>>> : Object[Key] };
|
|
33
31
|
type Subscribeable<Data> = {
|
|
34
32
|
subscribe: (subscription: (value: Data) => void) => () => void;
|
|
35
33
|
};
|
package/out/client.d.cts.map
CHANGED
|
@@ -1 +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"],"
|
|
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"],"mappings":"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"}
|
package/out/client.d.mts
CHANGED
|
@@ -13,23 +13,21 @@ type DeriveNullability<From, To> = From extends null ? To | null : To;
|
|
|
13
13
|
type RequireAtLeastOneFieldSet<T> = { [K in keyof T]: Required<Pick<T, K>> & Partial<Omit<T, K>> }[keyof T];
|
|
14
14
|
//#endregion
|
|
15
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
|
|
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> ? // in that case we want to extend the object with an args key property
|
|
18
17
|
ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>> & {
|
|
19
18
|
[argsKey]: QueryArgs;
|
|
20
19
|
} : ObjectFieldSelection<UnArray<NonNullable<QueryResponse>>>)>(s: Selected) => DeriveNullability<QueryResponse, Response<DeriveArrayType<QueryResponse, ApplySelection<ExtractGQLTypeFromField<QueryResponse>, Selected>>, ForceReactivity>> : () => Response<Q[Key], ForceReactivity> };
|
|
21
20
|
/**
|
|
22
21
|
* The input to select fields for an object
|
|
23
22
|
*/
|
|
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
|
|
23
|
+
type ObjectFieldSelection<O> = RequireAtLeastOneFieldSet<{ [Key in keyof O]: NonNullable<UnArray<O[Key]>> extends ((p: infer P) => infer A) ? P extends Record<string, any> ? // if the field is a function with required arguments, require the arguments in the selection
|
|
26
24
|
ObjectFieldSelection<UnArray<NonNullable<A>>> & {
|
|
27
25
|
[argsKey]: P;
|
|
28
26
|
} : ObjectFieldSelection<UnArray<NonNullable<A>>> : boolean }>;
|
|
29
27
|
/**
|
|
30
28
|
* Apply a selection to an object type
|
|
31
29
|
*/
|
|
32
|
-
type ApplySelection<Object
|
|
30
|
+
type ApplySelection<Object, Selection> = { [Key in keyof Selection & keyof Object]: Object[Key] extends ((p: infer _RequestArgs) => infer FieldResponse) ? DeriveNullability<FieldResponse, DeriveArrayType<NonNullable<FieldResponse>, ApplySelection<ExtractGQLTypeFromField<FieldResponse>, Selection[Key]>>> : Object[Key] };
|
|
33
31
|
type Subscribeable<Data> = {
|
|
34
32
|
subscribe: (subscription: (value: Data) => void) => () => void;
|
|
35
33
|
};
|
package/out/client.d.mts.map
CHANGED
|
@@ -1 +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"],"
|
|
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"],"mappings":"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"}
|
package/out/client.mjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { t as lazy } from "./lazy-CoMVcY4X.mjs";
|
|
1
2
|
import { capitalize } from "es-toolkit";
|
|
2
|
-
import {
|
|
3
|
+
import { createSubscriber } from "svelte/reactivity";
|
|
4
|
+
import { empty, map, merge as merge$1, pipe, share, take, toObservable, toPromise } from "wonka";
|
|
3
5
|
|
|
4
6
|
//#region lib/client/request.ts
|
|
5
7
|
const argsKey = "__args";
|
|
@@ -19,41 +21,43 @@ function makeOperationString({ operationVerb, queryName, schema, input }) {
|
|
|
19
21
|
}) : ""} ${selectionString}}`;
|
|
20
22
|
}
|
|
21
23
|
function makeGraphQLQueryRequest({ queryName, schema, input, client, enableSubscription = false, forceReactivity }) {
|
|
22
|
-
let
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
const
|
|
24
|
+
let currentData;
|
|
25
|
+
const dataProxy = lazy(() => new Proxy(currentData, { get(target, prop, receiver) {
|
|
26
|
+
svelteSubscriber();
|
|
27
|
+
return Reflect.get(currentData, prop, receiver);
|
|
28
|
+
} }));
|
|
29
|
+
const svelteSubscriber = createSubscriber((update) => {
|
|
30
|
+
const unsub = observable.subscribe((d) => {
|
|
31
|
+
update();
|
|
32
|
+
});
|
|
33
|
+
return () => unsub.unsubscribe();
|
|
34
|
+
});
|
|
35
|
+
const stream = pipe(merge$1([client.query(makeOperationString({
|
|
34
36
|
operationVerb: "query",
|
|
35
37
|
queryName,
|
|
36
38
|
input,
|
|
37
39
|
schema
|
|
38
|
-
}), {})
|
|
39
|
-
const subscriptionSource = enableSubscription ? client.subscription(makeOperationString({
|
|
40
|
+
}), {}), enableSubscription ? client.subscription(makeOperationString({
|
|
40
41
|
operationVerb: "subscription",
|
|
41
42
|
queryName,
|
|
42
43
|
input,
|
|
43
44
|
schema
|
|
44
|
-
}), {}) : empty
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
}), {}) : empty]), share, map((v) => {
|
|
46
|
+
const data = v.data?.[queryName];
|
|
47
|
+
if (!data && v.error) throw v.error;
|
|
48
|
+
currentData = data;
|
|
49
|
+
if (typeof data === "object" && data !== null) return dataProxy();
|
|
50
|
+
return data;
|
|
51
|
+
}));
|
|
52
|
+
const observable = toObservable(stream);
|
|
53
|
+
const promise = toPromise(pipe(stream, take(1), map((data) => {
|
|
54
|
+
if (typeof data === "object" && data !== null) {
|
|
55
|
+
if (typeof forceReactivity === "boolean" && forceReactivity) return observable;
|
|
56
|
+
Object.assign(data, observable);
|
|
57
|
+
return data;
|
|
58
|
+
}
|
|
55
59
|
})));
|
|
56
|
-
Object.assign(promise,
|
|
60
|
+
Object.assign(promise, observable);
|
|
57
61
|
return promise;
|
|
58
62
|
}
|
|
59
63
|
function makeGraphQLMutationRequest({ mutationName, input, client, schema }) {
|
|
@@ -135,12 +139,12 @@ function stringifyArgumentValue({ arg, gqlArg, types }) {
|
|
|
135
139
|
});
|
|
136
140
|
}).join(", ")}]`;
|
|
137
141
|
if (typeof arg === "object") {
|
|
138
|
-
let type
|
|
139
|
-
if (type
|
|
140
|
-
if (type
|
|
141
|
-
if (type
|
|
142
|
-
const referenceInputObject = types.find((t) => t.name === type
|
|
143
|
-
if (!referenceInputObject) throw new Error(`Expected an INPUT_OBJECT hit in name based lookup for name ${type
|
|
142
|
+
let type = gqlArg.type;
|
|
143
|
+
if (type.kind === "NON_NULL") type = type.ofType;
|
|
144
|
+
if (type.kind === "LIST") type = type.ofType;
|
|
145
|
+
if (type.kind === "NON_NULL") type = type.ofType;
|
|
146
|
+
const referenceInputObject = types.find((t) => t.name === type.name);
|
|
147
|
+
if (!referenceInputObject) throw new Error(`Expected an INPUT_OBJECT hit in name based lookup for name ${type.name} with arg ${JSON.stringify(arg)}`);
|
|
144
148
|
if (referenceInputObject.kind !== "INPUT_OBJECT") throw new Error("Expected an INPUT_OBJECT hit in named based lookup");
|
|
145
149
|
return `{ ${Object.entries(arg).map(([key, value]) => {
|
|
146
150
|
const subArgType = referenceInputObject.inputFields.find((t) => t.name === key);
|