@m1212e/rumble 0.16.39 → 0.16.41
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/out/client/generate.cjs +1 -1
- package/out/client/generate.mjs +1 -1
- package/out/client.cjs +93 -48
- package/out/client.cjs.map +1 -1
- package/out/client.d.cts.map +1 -1
- package/out/client.d.mts.map +1 -1
- package/out/client.mjs +94 -49
- package/out/client.mjs.map +1 -1
- package/out/{generate-kjqygrmB.cjs → generate-CqpjHD9X.cjs} +9 -3
- package/out/generate-CqpjHD9X.cjs.map +1 -0
- package/out/{generate-CwAZQRah.mjs → generate-D2VqOgQa.mjs} +9 -3
- package/out/generate-D2VqOgQa.mjs.map +1 -0
- package/out/index.cjs +2 -2
- package/out/index.mjs +2 -2
- package/package.json +1 -1
- package/out/generate-CwAZQRah.mjs.map +0 -1
- package/out/generate-kjqygrmB.cjs.map +0 -1
package/out/client/generate.cjs
CHANGED
package/out/client/generate.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as generateFromSchema } from "../generate-
|
|
1
|
+
import { t as generateFromSchema } from "../generate-D2VqOgQa.mjs";
|
|
2
2
|
export { generateFromSchema };
|
package/out/client.cjs
CHANGED
|
@@ -3,25 +3,53 @@ const require_lazy = require("./lazy-DT--QoPa.cjs");
|
|
|
3
3
|
require("./index.cjs");
|
|
4
4
|
let es_toolkit = require("es-toolkit");
|
|
5
5
|
let graphql_scalars = require("graphql-scalars");
|
|
6
|
+
require("@urql/core");
|
|
6
7
|
let svelte_reactivity = require("svelte/reactivity");
|
|
7
8
|
let wonka = require("wonka");
|
|
8
9
|
//#region lib/client/request.ts
|
|
10
|
+
function typeToString(type) {
|
|
11
|
+
if (type.kind === "NON_NULL") return `${typeToString(type.ofType)}!`;
|
|
12
|
+
if (type.kind === "LIST") return `[${typeToString(type.ofType)}]`;
|
|
13
|
+
return type.name;
|
|
14
|
+
}
|
|
15
|
+
function allocateVarName(ctx, baseName) {
|
|
16
|
+
if (!ctx.usedNames.has(baseName)) {
|
|
17
|
+
ctx.usedNames.add(baseName);
|
|
18
|
+
return baseName;
|
|
19
|
+
}
|
|
20
|
+
let i = 1;
|
|
21
|
+
while (ctx.usedNames.has(`${baseName}${i}`)) i++;
|
|
22
|
+
const name = `${baseName}${i}`;
|
|
23
|
+
ctx.usedNames.add(name);
|
|
24
|
+
return name;
|
|
25
|
+
}
|
|
9
26
|
const argsKey = "__args";
|
|
10
|
-
function
|
|
27
|
+
function makeOperation({ operationVerb, queryName, schema, input, autoIncludeIdField }) {
|
|
11
28
|
const otwQueryName = `${(0, es_toolkit.capitalize)(queryName)}${(0, es_toolkit.capitalize)(operationVerb)}`;
|
|
12
29
|
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);
|
|
13
30
|
const types = schema.__schema.types;
|
|
31
|
+
const varCtx = {
|
|
32
|
+
variables: {},
|
|
33
|
+
declarations: [],
|
|
34
|
+
usedNames: /* @__PURE__ */ new Set()
|
|
35
|
+
};
|
|
14
36
|
const selectionString = input ? stringifySelection({
|
|
15
37
|
field,
|
|
16
38
|
selection: input,
|
|
17
39
|
types,
|
|
18
|
-
autoIncludeIdField
|
|
40
|
+
autoIncludeIdField,
|
|
41
|
+
varCtx
|
|
19
42
|
}) : "";
|
|
20
|
-
|
|
43
|
+
const argumentString = input?.["__args"] ? serializeArguments({
|
|
21
44
|
args: input[argsKey],
|
|
22
45
|
fieldArgs: field.args,
|
|
23
|
-
types
|
|
24
|
-
|
|
46
|
+
types,
|
|
47
|
+
varCtx
|
|
48
|
+
}) : "";
|
|
49
|
+
return {
|
|
50
|
+
operationString: `${operationVerb} ${otwQueryName}${varCtx.declarations.length ? `(${varCtx.declarations.join(", ")})` : ""} { ${queryName}${argumentString} ${selectionString}}`,
|
|
51
|
+
variables: varCtx.variables
|
|
52
|
+
};
|
|
25
53
|
}
|
|
26
54
|
function makeGraphQLQueryRequest({ queryName, schema, input, client, enableSubscription = false, forceReactivity, autoIncludeIdField }) {
|
|
27
55
|
let currentData;
|
|
@@ -37,34 +65,40 @@ function makeGraphQLQueryRequest({ queryName, schema, input, client, enableSubsc
|
|
|
37
65
|
});
|
|
38
66
|
return () => unsub.unsubscribe();
|
|
39
67
|
});
|
|
40
|
-
const
|
|
68
|
+
const { operationString, variables } = makeOperation({
|
|
41
69
|
operationVerb: "query",
|
|
42
70
|
queryName,
|
|
43
71
|
input,
|
|
44
72
|
schema,
|
|
45
73
|
autoIncludeIdField
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
74
|
+
});
|
|
75
|
+
const observableSources = [client.query(operationString, variables)];
|
|
76
|
+
if (enableSubscription) observableSources.push((() => {
|
|
77
|
+
const { operationString: subOpString, variables: subVars } = makeOperation({
|
|
78
|
+
operationVerb: "subscription",
|
|
79
|
+
queryName,
|
|
80
|
+
input,
|
|
81
|
+
schema,
|
|
82
|
+
autoIncludeIdField
|
|
83
|
+
});
|
|
84
|
+
return client.subscription(subOpString, subVars);
|
|
85
|
+
})());
|
|
86
|
+
const observable = (0, wonka.toObservable)((0, wonka.pipe)((0, wonka.merge)(observableSources), wonka.share, (0, wonka.map)((v) => {
|
|
54
87
|
if (v.error) throw v.error;
|
|
55
88
|
const data = v.data?.[queryName];
|
|
56
|
-
|
|
57
|
-
|
|
89
|
+
if (typeof data === "object" && data !== null) {
|
|
90
|
+
currentData = data;
|
|
91
|
+
return dataProxy();
|
|
92
|
+
}
|
|
58
93
|
return data;
|
|
59
94
|
})));
|
|
60
95
|
const promise = new Promise((resolve, reject) => {
|
|
61
|
-
(0, wonka.pipe)(
|
|
96
|
+
(0, wonka.pipe)(client.query(operationString, variables), (0, wonka.take)(1), (0, wonka.subscribe)((v) => {
|
|
62
97
|
if (v.error) {
|
|
63
98
|
reject(v.error);
|
|
64
99
|
return;
|
|
65
100
|
}
|
|
66
101
|
const data = v.data?.[queryName];
|
|
67
|
-
currentData = data;
|
|
68
102
|
if (typeof data !== "object" || data === null) {
|
|
69
103
|
resolve(data);
|
|
70
104
|
return;
|
|
@@ -73,9 +107,12 @@ function makeGraphQLQueryRequest({ queryName, schema, input, client, enableSubsc
|
|
|
73
107
|
resolve(observable);
|
|
74
108
|
return;
|
|
75
109
|
}
|
|
110
|
+
currentData = data;
|
|
111
|
+
observableSources.push((0, wonka.fromValue)(data));
|
|
76
112
|
try {
|
|
77
|
-
|
|
78
|
-
|
|
113
|
+
const r = dataProxy();
|
|
114
|
+
Object.assign(r, observable);
|
|
115
|
+
resolve(r);
|
|
79
116
|
} catch (err) {
|
|
80
117
|
reject(err);
|
|
81
118
|
}
|
|
@@ -85,19 +122,19 @@ function makeGraphQLQueryRequest({ queryName, schema, input, client, enableSubsc
|
|
|
85
122
|
return promise;
|
|
86
123
|
}
|
|
87
124
|
function makeGraphQLMutationRequest({ mutationName, input, client, schema, autoIncludeIdField }) {
|
|
88
|
-
const
|
|
125
|
+
const { operationString, variables } = makeOperation({
|
|
89
126
|
operationVerb: "mutation",
|
|
90
127
|
queryName: mutationName,
|
|
91
128
|
input,
|
|
92
129
|
schema,
|
|
93
130
|
autoIncludeIdField
|
|
94
|
-
})
|
|
95
|
-
const observable = (0, wonka.toObservable)((0, wonka.pipe)(
|
|
131
|
+
});
|
|
132
|
+
const observable = (0, wonka.toObservable)((0, wonka.pipe)((0, wonka.pipe)(client.mutation(operationString, variables), wonka.share), (0, wonka.map)((v) => {
|
|
96
133
|
if (v.error) throw v.error;
|
|
97
134
|
return v.data?.[mutationName];
|
|
98
135
|
})));
|
|
99
136
|
const promise = new Promise((resolve, reject) => {
|
|
100
|
-
(0, wonka.pipe)(
|
|
137
|
+
(0, wonka.pipe)(client.mutation(operationString, variables), (0, wonka.take)(1), (0, wonka.subscribe)((v) => {
|
|
101
138
|
if (v.error) {
|
|
102
139
|
reject(v.error);
|
|
103
140
|
return;
|
|
@@ -109,18 +146,19 @@ function makeGraphQLMutationRequest({ mutationName, input, client, schema, autoI
|
|
|
109
146
|
return promise;
|
|
110
147
|
}
|
|
111
148
|
function makeGraphQLSubscriptionRequest({ subscriptionName, input, client, schema, autoIncludeIdField }) {
|
|
112
|
-
|
|
149
|
+
const { operationString, variables } = makeOperation({
|
|
113
150
|
operationVerb: "subscription",
|
|
114
151
|
queryName: subscriptionName,
|
|
115
152
|
input,
|
|
116
153
|
schema,
|
|
117
154
|
autoIncludeIdField
|
|
118
|
-
})
|
|
155
|
+
});
|
|
156
|
+
return (0, wonka.pipe)(client.subscription(operationString, variables), (0, wonka.map)((v) => {
|
|
119
157
|
if (v.error) throw v.error;
|
|
120
158
|
return v.data?.[subscriptionName];
|
|
121
159
|
}), wonka.toObservable);
|
|
122
160
|
}
|
|
123
|
-
function stringifySelection({ field, selection, types, autoIncludeIdField }) {
|
|
161
|
+
function stringifySelection({ field, selection, types, autoIncludeIdField, varCtx }) {
|
|
124
162
|
if (autoIncludeIdField && typeof selection[autoIncludeIdField] === "undefined") selection[autoIncludeIdField] = true;
|
|
125
163
|
return `{
|
|
126
164
|
${Object.entries(selection).filter(([key]) => key !== argsKey).reduce((acc, [key, value]) => {
|
|
@@ -132,16 +170,18 @@ ${Object.entries(selection).filter(([key]) => key !== argsKey).reduce((acc, [key
|
|
|
132
170
|
if (type.kind === "LIST") type = type.ofType;
|
|
133
171
|
if (type.kind === "NON_NULL") type = type.ofType;
|
|
134
172
|
const referenceObject = types.find((t) => t.name === type.name).fields.find((f) => f.name === key);
|
|
135
|
-
argsString =
|
|
173
|
+
argsString = serializeArguments({
|
|
136
174
|
args: value[argsKey],
|
|
137
175
|
types,
|
|
138
|
-
fieldArgs: referenceObject.args
|
|
176
|
+
fieldArgs: referenceObject.args,
|
|
177
|
+
varCtx
|
|
139
178
|
});
|
|
140
179
|
}
|
|
141
180
|
acc += `${key}${argsString} ${stringifySelection({
|
|
142
181
|
field,
|
|
143
182
|
selection: value,
|
|
144
|
-
types
|
|
183
|
+
types,
|
|
184
|
+
varCtx
|
|
145
185
|
})}
|
|
146
186
|
`;
|
|
147
187
|
} else if (typeof value === "boolean" && value) acc += `${key}
|
|
@@ -149,28 +189,31 @@ ${Object.entries(selection).filter(([key]) => key !== argsKey).reduce((acc, [key
|
|
|
149
189
|
return acc;
|
|
150
190
|
}, "")} }`;
|
|
151
191
|
}
|
|
152
|
-
function
|
|
192
|
+
function serializeArguments({ args, fieldArgs, types, varCtx }) {
|
|
153
193
|
const entries = Object.entries(args);
|
|
154
194
|
if (entries.length > 0) return `(${entries.map(([key, value]) => {
|
|
155
195
|
const gqlArg = fieldArgs.find((a) => a.name === key);
|
|
156
196
|
if (!gqlArg) throw new Error(`Argument ${key} not found in field args list ${JSON.stringify(fieldArgs.map((a) => a.name))}`);
|
|
157
|
-
|
|
197
|
+
const varName = allocateVarName(varCtx, key);
|
|
198
|
+
varCtx.declarations.push(`$${varName}: ${typeToString(gqlArg.type)}`);
|
|
199
|
+
varCtx.variables[varName] = serializeArgValue({
|
|
158
200
|
arg: value,
|
|
159
201
|
gqlArg,
|
|
160
202
|
types
|
|
161
|
-
})
|
|
203
|
+
});
|
|
204
|
+
return `${key}: $${varName}`;
|
|
162
205
|
}).join(", ")})`;
|
|
163
206
|
return "";
|
|
164
207
|
}
|
|
165
|
-
function
|
|
166
|
-
if (arg === null) return
|
|
167
|
-
if (Array.isArray(arg)) return
|
|
168
|
-
return
|
|
208
|
+
function serializeArgValue({ arg, gqlArg, types }) {
|
|
209
|
+
if (arg === null) return null;
|
|
210
|
+
if (Array.isArray(arg)) return arg.map((v) => {
|
|
211
|
+
return serializeArgValue({
|
|
169
212
|
arg: v,
|
|
170
213
|
types,
|
|
171
214
|
gqlArg
|
|
172
215
|
});
|
|
173
|
-
})
|
|
216
|
+
});
|
|
174
217
|
if (typeof arg === "object" && !(arg instanceof Date)) {
|
|
175
218
|
let type = gqlArg.type;
|
|
176
219
|
if (type.kind === "NON_NULL") type = type.ofType;
|
|
@@ -179,15 +222,17 @@ function stringifyArgumentValue({ arg, gqlArg, types }) {
|
|
|
179
222
|
const referenceInputObject = types.find((t) => t.name === type.name);
|
|
180
223
|
if (!referenceInputObject) throw new Error(`Expected an INPUT_OBJECT hit in name based lookup for name ${type.name} with arg ${JSON.stringify(arg)}`);
|
|
181
224
|
if (referenceInputObject.kind !== "INPUT_OBJECT") throw new Error("Expected an INPUT_OBJECT hit in named based lookup");
|
|
182
|
-
|
|
225
|
+
const result = {};
|
|
226
|
+
for (const [key, value] of Object.entries(arg)) {
|
|
183
227
|
const subArgType = referenceInputObject.inputFields.find((t) => t.name === key);
|
|
184
228
|
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(", ")}`);
|
|
185
|
-
|
|
229
|
+
result[key] = serializeArgValue({
|
|
186
230
|
arg: value,
|
|
187
231
|
types,
|
|
188
232
|
gqlArg: subArgType
|
|
189
|
-
})
|
|
190
|
-
}
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
return result;
|
|
191
236
|
}
|
|
192
237
|
let type = gqlArg.type;
|
|
193
238
|
if (type.kind === "NON_NULL") type = type.ofType;
|
|
@@ -203,15 +248,15 @@ function stringifyArgumentValue({ arg, gqlArg, types }) {
|
|
|
203
248
|
break;
|
|
204
249
|
default: throw new Error(`Unrecognized date type ${name}, expected Date or DateTime`);
|
|
205
250
|
}
|
|
206
|
-
return
|
|
251
|
+
return value;
|
|
207
252
|
}
|
|
208
253
|
switch (typeof arg) {
|
|
209
|
-
case "string":
|
|
210
|
-
case "number":
|
|
211
|
-
case "bigint":
|
|
212
|
-
case "boolean": return
|
|
254
|
+
case "string":
|
|
255
|
+
case "number":
|
|
256
|
+
case "bigint":
|
|
257
|
+
case "boolean": return arg;
|
|
213
258
|
case "symbol": throw new Error("Cannot stringify a symbol to send as gql arg");
|
|
214
|
-
case "undefined": return
|
|
259
|
+
case "undefined": return null;
|
|
215
260
|
case "function": throw new Error("Cannot stringify a function to send as gql arg");
|
|
216
261
|
}
|
|
217
262
|
throw new Error("Cannot stringify an unknown type");
|
package/out/client.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.cjs","names":["lazy","empty","share","toObservable","DateResolver","DateTimeISOResolver"],"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 { DateResolver, DateTimeISOResolver } from \"graphql-scalars\";\nimport { createSubscriber } from \"svelte/reactivity\";\n\nimport {\n empty,\n map,\n merge,\n pipe,\n share,\n subscribe,\n take,\n toObservable,\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 autoIncludeIdField,\n}: {\n operationVerb: \"query\" | \"subscription\" | \"mutation\";\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n autoIncludeIdField?: string;\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, autoIncludeIdField })\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 autoIncludeIdField,\n}: {\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n client: Client;\n enableSubscription?: boolean;\n forceReactivity?: boolean;\n autoIncludeIdField?: string;\n}) {\n let currentData: any;\n const dataProxy = lazy(\n () =>\n new Proxy(currentData, {\n get(target, prop, receiver) {\n svelteSubscriber();\n const val = Reflect.get(currentData, prop, receiver);\n if (typeof val === \"function\") {\n return val.bind(currentData);\n }\n return val;\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 sharedSource = pipe(\n merge([\n client.query(\n makeOperationString({\n operationVerb: \"query\",\n queryName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n ),\n enableSubscription\n ? client.subscription(\n makeOperationString({\n operationVerb: \"subscription\",\n queryName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n )\n : empty,\n ]),\n share,\n );\n\n const observable = toObservable(\n pipe(\n sharedSource,\n map((v: any) => {\n if (v.error) {\n throw v.error;\n }\n\n const data = v.data?.[queryName];\n currentData = data;\n if (typeof data === \"object\" && data !== null) {\n return dataProxy();\n }\n return data;\n }),\n ),\n );\n\n const promise = new Promise<any>((resolve, reject) => {\n pipe(\n sharedSource,\n take(1),\n subscribe((v: any) => {\n if (v.error) {\n reject(v.error);\n return;\n }\n\n const data = v.data?.[queryName];\n currentData = data;\n if (typeof data !== \"object\" || data === null) {\n resolve(data);\n return;\n }\n if (typeof forceReactivity === \"boolean\" && forceReactivity) {\n resolve(observable);\n return;\n }\n try {\n Object.assign(data, observable);\n resolve(data);\n } catch (err) {\n reject(err);\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 autoIncludeIdField,\n}: {\n mutationName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n const sharedSource = pipe(\n client.mutation(\n makeOperationString({\n operationVerb: \"mutation\",\n queryName: mutationName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n ),\n share,\n );\n\n const observable = toObservable(\n pipe(\n sharedSource,\n map((v) => {\n if (v.error) {\n throw v.error;\n }\n\n const data = v.data?.[mutationName];\n return data;\n }),\n ),\n );\n\n const promise = new Promise<any>((resolve, reject) => {\n pipe(\n sharedSource,\n take(1),\n subscribe((v: any) => {\n if (v.error) {\n reject(v.error);\n return;\n }\n\n resolve(v.data?.[mutationName]);\n }),\n );\n });\n\n Object.assign(promise, observable);\n return promise;\n}\n\nexport function makeGraphQLSubscriptionRequest({\n subscriptionName,\n input,\n client,\n schema,\n autoIncludeIdField,\n}: {\n subscriptionName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n return pipe(\n client.subscription(\n makeOperationString({\n operationVerb: \"subscription\",\n queryName: subscriptionName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n ),\n map((v) => {\n if (v.error) {\n throw v.error;\n }\n\n return v.data?.[subscriptionName];\n }),\n toObservable,\n ) as any;\n}\n\nfunction stringifySelection({\n field,\n selection,\n types,\n autoIncludeIdField,\n}: {\n selection: Record<string, any>;\n field: IntrospectionField;\n types: readonly IntrospectionType[];\n autoIncludeIdField?: string;\n}) {\n if (\n autoIncludeIdField &&\n typeof selection[autoIncludeIdField] === \"undefined\"\n ) {\n selection[autoIncludeIdField] = true;\n }\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\" && !(arg instanceof Date)) {\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 if (arg instanceof Date) {\n const name = (type as any).name;\n let value: string;\n switch (name) {\n case \"Date\":\n value = DateResolver.serialize(arg);\n break;\n case \"DateTime\":\n value = DateTimeISOResolver.serialize(arg);\n break;\n default:\n throw new Error(\n `Unrecognized date type ${name}, expected Date or DateTime`,\n );\n }\n return `\"${value}\"`;\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n availableSubscriptions: Set<string>;\n forceReactivity?: ForceReactivity;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n forceReactivity?: ForceReactivity;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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","share","toObservable","DateResolver","DateTimeISOResolver"],"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, createRequest } from \"@urql/core\";\nimport { capitalize } from \"es-toolkit\";\nimport type {\n IntrospectionField,\n IntrospectionInputValue,\n IntrospectionQuery,\n IntrospectionType,\n} from \"graphql\";\nimport { DateResolver, DateTimeISOResolver } from \"graphql-scalars\";\nimport { createSubscriber } from \"svelte/reactivity\";\n\nimport {\n empty,\n fromValue,\n map,\n merge,\n onEnd,\n onStart,\n pipe,\n type Source,\n share,\n subscribe,\n take,\n toObservable,\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\nfunction typeToString(type: any): string {\n if (type.kind === \"NON_NULL\") return `${typeToString(type.ofType)}!`;\n if (type.kind === \"LIST\") return `[${typeToString(type.ofType)}]`;\n return type.name;\n}\n\ntype VarContext = {\n variables: Record<string, any>;\n declarations: string[];\n usedNames: Set<string>;\n};\n\nfunction allocateVarName(ctx: VarContext, baseName: string): string {\n if (!ctx.usedNames.has(baseName)) {\n ctx.usedNames.add(baseName);\n return baseName;\n }\n let i = 1;\n while (ctx.usedNames.has(`${baseName}${i}`)) i++;\n const name = `${baseName}${i}`;\n ctx.usedNames.add(name);\n return name;\n}\n\nexport const argsKey = \"__args\";\n\nfunction makeOperation({\n operationVerb,\n queryName,\n schema,\n input,\n autoIncludeIdField,\n}: {\n operationVerb: \"query\" | \"subscription\" | \"mutation\";\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n autoIncludeIdField?: string;\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 varCtx: VarContext = {\n variables: {},\n declarations: [],\n usedNames: new Set(),\n };\n\n const selectionString = input\n ? stringifySelection({\n field,\n selection: input,\n types,\n autoIncludeIdField,\n varCtx,\n })\n : \"\";\n\n const argumentString = input?.[argsKey]\n ? serializeArguments({\n args: input[argsKey],\n fieldArgs: field.args,\n types,\n varCtx,\n })\n : \"\";\n\n const varDecl = varCtx.declarations.length\n ? `(${varCtx.declarations.join(\", \")})`\n : \"\";\n\n return {\n operationString: `${operationVerb} ${otwQueryName}${varDecl} { ${queryName}${argumentString} ${selectionString}}`,\n variables: varCtx.variables,\n };\n}\n\nexport function makeGraphQLQueryRequest({\n queryName,\n schema,\n input,\n client,\n enableSubscription = false,\n forceReactivity,\n autoIncludeIdField,\n}: {\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n client: Client;\n enableSubscription?: boolean;\n forceReactivity?: boolean;\n autoIncludeIdField?: string;\n}) {\n let currentData: any;\n const dataProxy = lazy(\n () =>\n new Proxy(currentData, {\n get(target, prop, receiver) {\n svelteSubscriber();\n const val = Reflect.get(currentData, prop, receiver);\n if (typeof val === \"function\") {\n return val.bind(currentData);\n }\n return val;\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 { operationString, variables } = makeOperation({\n operationVerb: \"query\",\n queryName,\n input,\n schema,\n autoIncludeIdField,\n });\n\n const observableSources: Source<any>[] = [\n client.query(operationString, variables),\n ];\n if (enableSubscription) {\n observableSources.push(\n (() => {\n const { operationString: subOpString, variables: subVars } =\n makeOperation({\n operationVerb: \"subscription\",\n queryName,\n input,\n schema,\n autoIncludeIdField,\n });\n return client.subscription(subOpString, subVars);\n })(),\n );\n }\n const observable = toObservable(\n pipe(\n merge(observableSources),\n share,\n map((v: any) => {\n if (v.error) {\n throw v.error;\n }\n\n const data = v.data?.[queryName];\n if (typeof data === \"object\" && data !== null) {\n currentData = data;\n return dataProxy();\n }\n return data;\n }),\n ),\n );\n\n const promise = new Promise<any>((resolve, reject) => {\n pipe(\n client.query(operationString, variables),\n take(1),\n subscribe((v: any) => {\n if (v.error) {\n reject(v.error);\n return;\n }\n\n const data = v.data?.[queryName];\n if (typeof data !== \"object\" || data === null) {\n resolve(data);\n return;\n }\n if (typeof forceReactivity === \"boolean\" && forceReactivity) {\n resolve(observable);\n return;\n }\n\n currentData = data;\n observableSources.push(fromValue(data));\n\n try {\n const r = dataProxy();\n Object.assign(r, observable);\n resolve(r);\n } catch (err) {\n reject(err);\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 autoIncludeIdField,\n}: {\n mutationName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n const { operationString, variables } = makeOperation({\n operationVerb: \"mutation\",\n queryName: mutationName,\n input,\n schema,\n autoIncludeIdField,\n });\n\n const observable = toObservable(\n pipe(\n pipe(client.mutation(operationString, variables), share),\n map((v) => {\n if (v.error) {\n throw v.error;\n }\n\n const data = v.data?.[mutationName];\n return data;\n }),\n ),\n );\n\n const promise = new Promise<any>((resolve, reject) => {\n pipe(\n client.mutation(operationString, variables),\n take(1),\n subscribe((v: any) => {\n if (v.error) {\n reject(v.error);\n return;\n }\n\n resolve(v.data?.[mutationName]);\n }),\n );\n });\n\n Object.assign(promise, observable);\n return promise;\n}\n\nexport function makeGraphQLSubscriptionRequest({\n subscriptionName,\n input,\n client,\n schema,\n autoIncludeIdField,\n}: {\n subscriptionName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n const { operationString, variables } = makeOperation({\n operationVerb: \"subscription\",\n queryName: subscriptionName,\n input,\n schema,\n autoIncludeIdField,\n });\n\n return pipe(\n client.subscription(operationString, variables),\n map((v) => {\n if (v.error) {\n throw v.error;\n }\n\n return v.data?.[subscriptionName];\n }),\n toObservable,\n ) as any;\n}\n\nfunction stringifySelection({\n field,\n selection,\n types,\n autoIncludeIdField,\n varCtx,\n}: {\n selection: Record<string, any>;\n field: IntrospectionField;\n types: readonly IntrospectionType[];\n autoIncludeIdField?: string;\n varCtx: VarContext;\n}) {\n if (\n autoIncludeIdField &&\n typeof selection[autoIncludeIdField] === \"undefined\"\n ) {\n selection[autoIncludeIdField] = true;\n }\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 = serializeArguments({\n args: value[argsKey],\n types,\n fieldArgs: referenceObject.args,\n varCtx,\n });\n }\n\n acc += `${key}${argsString} ${stringifySelection({\n field,\n selection: value,\n types,\n varCtx,\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 serializeArguments({\n args,\n fieldArgs,\n types,\n varCtx,\n}: {\n args: Record<any, any>;\n fieldArgs: readonly IntrospectionInputValue[];\n types: readonly IntrospectionType[];\n varCtx: VarContext;\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 const varName = allocateVarName(varCtx, key);\n varCtx.declarations.push(`$${varName}: ${typeToString(gqlArg.type)}`);\n varCtx.variables[varName] = serializeArgValue({\n arg: value,\n gqlArg,\n types,\n });\n\n return `${key}: $${varName}`;\n })\n .join(\", \")})`;\n }\n\n return \"\";\n}\n\nfunction serializeArgValue({\n arg,\n gqlArg,\n types,\n}: {\n arg: any;\n gqlArg: IntrospectionInputValue;\n types: readonly IntrospectionType[];\n}): any {\n if (arg === null) {\n return null;\n }\n\n if (Array.isArray(arg)) {\n return arg.map((v) => {\n return serializeArgValue({\n arg: v,\n types,\n gqlArg,\n });\n });\n }\n\n const argtype = typeof arg;\n\n if (argtype === \"object\" && !(arg instanceof Date)) {\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 const result: Record<string, any> = {};\n for (const [key, value] of Object.entries(arg)) {\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 result[key] = serializeArgValue({\n arg: value,\n types,\n gqlArg: subArgType,\n });\n }\n return result;\n }\n\n let type = gqlArg.type;\n\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n\n if (arg instanceof Date) {\n const name = (type as any).name;\n let value: string;\n switch (name) {\n case \"Date\":\n value = DateResolver.serialize(arg);\n break;\n case \"DateTime\":\n value = DateTimeISOResolver.serialize(arg);\n break;\n default:\n throw new Error(\n `Unrecognized date type ${name}, expected Date or DateTime`,\n );\n }\n return value;\n }\n\n switch (typeof arg) {\n case \"string\":\n case \"number\":\n case \"bigint\":\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n availableSubscriptions: Set<string>;\n forceReactivity?: ForceReactivity;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n forceReactivity?: ForceReactivity;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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.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"],"mappings":";;;;
|
|
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.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"],"mappings":";;;;
|
|
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,25 +1,53 @@
|
|
|
1
1
|
import { t as lazy } from "./lazy-BgeBy3-B.mjs";
|
|
2
2
|
import { capitalize } from "es-toolkit";
|
|
3
3
|
import { DateResolver, DateTimeISOResolver } from "graphql-scalars";
|
|
4
|
+
import "@urql/core";
|
|
4
5
|
import { createSubscriber } from "svelte/reactivity";
|
|
5
|
-
import {
|
|
6
|
+
import { fromValue, map, merge as merge$1, pipe, share, subscribe, take, toObservable } from "wonka";
|
|
6
7
|
//#region lib/client/request.ts
|
|
8
|
+
function typeToString(type) {
|
|
9
|
+
if (type.kind === "NON_NULL") return `${typeToString(type.ofType)}!`;
|
|
10
|
+
if (type.kind === "LIST") return `[${typeToString(type.ofType)}]`;
|
|
11
|
+
return type.name;
|
|
12
|
+
}
|
|
13
|
+
function allocateVarName(ctx, baseName) {
|
|
14
|
+
if (!ctx.usedNames.has(baseName)) {
|
|
15
|
+
ctx.usedNames.add(baseName);
|
|
16
|
+
return baseName;
|
|
17
|
+
}
|
|
18
|
+
let i = 1;
|
|
19
|
+
while (ctx.usedNames.has(`${baseName}${i}`)) i++;
|
|
20
|
+
const name = `${baseName}${i}`;
|
|
21
|
+
ctx.usedNames.add(name);
|
|
22
|
+
return name;
|
|
23
|
+
}
|
|
7
24
|
const argsKey = "__args";
|
|
8
|
-
function
|
|
25
|
+
function makeOperation({ operationVerb, queryName, schema, input, autoIncludeIdField }) {
|
|
9
26
|
const otwQueryName = `${capitalize(queryName)}${capitalize(operationVerb)}`;
|
|
10
27
|
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);
|
|
11
28
|
const types = schema.__schema.types;
|
|
29
|
+
const varCtx = {
|
|
30
|
+
variables: {},
|
|
31
|
+
declarations: [],
|
|
32
|
+
usedNames: /* @__PURE__ */ new Set()
|
|
33
|
+
};
|
|
12
34
|
const selectionString = input ? stringifySelection({
|
|
13
35
|
field,
|
|
14
36
|
selection: input,
|
|
15
37
|
types,
|
|
16
|
-
autoIncludeIdField
|
|
38
|
+
autoIncludeIdField,
|
|
39
|
+
varCtx
|
|
17
40
|
}) : "";
|
|
18
|
-
|
|
41
|
+
const argumentString = input?.["__args"] ? serializeArguments({
|
|
19
42
|
args: input[argsKey],
|
|
20
43
|
fieldArgs: field.args,
|
|
21
|
-
types
|
|
22
|
-
|
|
44
|
+
types,
|
|
45
|
+
varCtx
|
|
46
|
+
}) : "";
|
|
47
|
+
return {
|
|
48
|
+
operationString: `${operationVerb} ${otwQueryName}${varCtx.declarations.length ? `(${varCtx.declarations.join(", ")})` : ""} { ${queryName}${argumentString} ${selectionString}}`,
|
|
49
|
+
variables: varCtx.variables
|
|
50
|
+
};
|
|
23
51
|
}
|
|
24
52
|
function makeGraphQLQueryRequest({ queryName, schema, input, client, enableSubscription = false, forceReactivity, autoIncludeIdField }) {
|
|
25
53
|
let currentData;
|
|
@@ -35,34 +63,40 @@ function makeGraphQLQueryRequest({ queryName, schema, input, client, enableSubsc
|
|
|
35
63
|
});
|
|
36
64
|
return () => unsub.unsubscribe();
|
|
37
65
|
});
|
|
38
|
-
const
|
|
66
|
+
const { operationString, variables } = makeOperation({
|
|
39
67
|
operationVerb: "query",
|
|
40
68
|
queryName,
|
|
41
69
|
input,
|
|
42
70
|
schema,
|
|
43
71
|
autoIncludeIdField
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
72
|
+
});
|
|
73
|
+
const observableSources = [client.query(operationString, variables)];
|
|
74
|
+
if (enableSubscription) observableSources.push((() => {
|
|
75
|
+
const { operationString: subOpString, variables: subVars } = makeOperation({
|
|
76
|
+
operationVerb: "subscription",
|
|
77
|
+
queryName,
|
|
78
|
+
input,
|
|
79
|
+
schema,
|
|
80
|
+
autoIncludeIdField
|
|
81
|
+
});
|
|
82
|
+
return client.subscription(subOpString, subVars);
|
|
83
|
+
})());
|
|
84
|
+
const observable = toObservable(pipe(merge$1(observableSources), share, map((v) => {
|
|
52
85
|
if (v.error) throw v.error;
|
|
53
86
|
const data = v.data?.[queryName];
|
|
54
|
-
|
|
55
|
-
|
|
87
|
+
if (typeof data === "object" && data !== null) {
|
|
88
|
+
currentData = data;
|
|
89
|
+
return dataProxy();
|
|
90
|
+
}
|
|
56
91
|
return data;
|
|
57
92
|
})));
|
|
58
93
|
const promise = new Promise((resolve, reject) => {
|
|
59
|
-
pipe(
|
|
94
|
+
pipe(client.query(operationString, variables), take(1), subscribe((v) => {
|
|
60
95
|
if (v.error) {
|
|
61
96
|
reject(v.error);
|
|
62
97
|
return;
|
|
63
98
|
}
|
|
64
99
|
const data = v.data?.[queryName];
|
|
65
|
-
currentData = data;
|
|
66
100
|
if (typeof data !== "object" || data === null) {
|
|
67
101
|
resolve(data);
|
|
68
102
|
return;
|
|
@@ -71,9 +105,12 @@ function makeGraphQLQueryRequest({ queryName, schema, input, client, enableSubsc
|
|
|
71
105
|
resolve(observable);
|
|
72
106
|
return;
|
|
73
107
|
}
|
|
108
|
+
currentData = data;
|
|
109
|
+
observableSources.push(fromValue(data));
|
|
74
110
|
try {
|
|
75
|
-
|
|
76
|
-
|
|
111
|
+
const r = dataProxy();
|
|
112
|
+
Object.assign(r, observable);
|
|
113
|
+
resolve(r);
|
|
77
114
|
} catch (err) {
|
|
78
115
|
reject(err);
|
|
79
116
|
}
|
|
@@ -83,19 +120,19 @@ function makeGraphQLQueryRequest({ queryName, schema, input, client, enableSubsc
|
|
|
83
120
|
return promise;
|
|
84
121
|
}
|
|
85
122
|
function makeGraphQLMutationRequest({ mutationName, input, client, schema, autoIncludeIdField }) {
|
|
86
|
-
const
|
|
123
|
+
const { operationString, variables } = makeOperation({
|
|
87
124
|
operationVerb: "mutation",
|
|
88
125
|
queryName: mutationName,
|
|
89
126
|
input,
|
|
90
127
|
schema,
|
|
91
128
|
autoIncludeIdField
|
|
92
|
-
})
|
|
93
|
-
const observable = toObservable(pipe(
|
|
129
|
+
});
|
|
130
|
+
const observable = toObservable(pipe(pipe(client.mutation(operationString, variables), share), map((v) => {
|
|
94
131
|
if (v.error) throw v.error;
|
|
95
132
|
return v.data?.[mutationName];
|
|
96
133
|
})));
|
|
97
134
|
const promise = new Promise((resolve, reject) => {
|
|
98
|
-
pipe(
|
|
135
|
+
pipe(client.mutation(operationString, variables), take(1), subscribe((v) => {
|
|
99
136
|
if (v.error) {
|
|
100
137
|
reject(v.error);
|
|
101
138
|
return;
|
|
@@ -107,18 +144,19 @@ function makeGraphQLMutationRequest({ mutationName, input, client, schema, autoI
|
|
|
107
144
|
return promise;
|
|
108
145
|
}
|
|
109
146
|
function makeGraphQLSubscriptionRequest({ subscriptionName, input, client, schema, autoIncludeIdField }) {
|
|
110
|
-
|
|
147
|
+
const { operationString, variables } = makeOperation({
|
|
111
148
|
operationVerb: "subscription",
|
|
112
149
|
queryName: subscriptionName,
|
|
113
150
|
input,
|
|
114
151
|
schema,
|
|
115
152
|
autoIncludeIdField
|
|
116
|
-
})
|
|
153
|
+
});
|
|
154
|
+
return pipe(client.subscription(operationString, variables), map((v) => {
|
|
117
155
|
if (v.error) throw v.error;
|
|
118
156
|
return v.data?.[subscriptionName];
|
|
119
157
|
}), toObservable);
|
|
120
158
|
}
|
|
121
|
-
function stringifySelection({ field, selection, types, autoIncludeIdField }) {
|
|
159
|
+
function stringifySelection({ field, selection, types, autoIncludeIdField, varCtx }) {
|
|
122
160
|
if (autoIncludeIdField && typeof selection[autoIncludeIdField] === "undefined") selection[autoIncludeIdField] = true;
|
|
123
161
|
return `{
|
|
124
162
|
${Object.entries(selection).filter(([key]) => key !== argsKey).reduce((acc, [key, value]) => {
|
|
@@ -130,16 +168,18 @@ ${Object.entries(selection).filter(([key]) => key !== argsKey).reduce((acc, [key
|
|
|
130
168
|
if (type.kind === "LIST") type = type.ofType;
|
|
131
169
|
if (type.kind === "NON_NULL") type = type.ofType;
|
|
132
170
|
const referenceObject = types.find((t) => t.name === type.name).fields.find((f) => f.name === key);
|
|
133
|
-
argsString =
|
|
171
|
+
argsString = serializeArguments({
|
|
134
172
|
args: value[argsKey],
|
|
135
173
|
types,
|
|
136
|
-
fieldArgs: referenceObject.args
|
|
174
|
+
fieldArgs: referenceObject.args,
|
|
175
|
+
varCtx
|
|
137
176
|
});
|
|
138
177
|
}
|
|
139
178
|
acc += `${key}${argsString} ${stringifySelection({
|
|
140
179
|
field,
|
|
141
180
|
selection: value,
|
|
142
|
-
types
|
|
181
|
+
types,
|
|
182
|
+
varCtx
|
|
143
183
|
})}
|
|
144
184
|
`;
|
|
145
185
|
} else if (typeof value === "boolean" && value) acc += `${key}
|
|
@@ -147,28 +187,31 @@ ${Object.entries(selection).filter(([key]) => key !== argsKey).reduce((acc, [key
|
|
|
147
187
|
return acc;
|
|
148
188
|
}, "")} }`;
|
|
149
189
|
}
|
|
150
|
-
function
|
|
190
|
+
function serializeArguments({ args, fieldArgs, types, varCtx }) {
|
|
151
191
|
const entries = Object.entries(args);
|
|
152
192
|
if (entries.length > 0) return `(${entries.map(([key, value]) => {
|
|
153
193
|
const gqlArg = fieldArgs.find((a) => a.name === key);
|
|
154
194
|
if (!gqlArg) throw new Error(`Argument ${key} not found in field args list ${JSON.stringify(fieldArgs.map((a) => a.name))}`);
|
|
155
|
-
|
|
195
|
+
const varName = allocateVarName(varCtx, key);
|
|
196
|
+
varCtx.declarations.push(`$${varName}: ${typeToString(gqlArg.type)}`);
|
|
197
|
+
varCtx.variables[varName] = serializeArgValue({
|
|
156
198
|
arg: value,
|
|
157
199
|
gqlArg,
|
|
158
200
|
types
|
|
159
|
-
})
|
|
201
|
+
});
|
|
202
|
+
return `${key}: $${varName}`;
|
|
160
203
|
}).join(", ")})`;
|
|
161
204
|
return "";
|
|
162
205
|
}
|
|
163
|
-
function
|
|
164
|
-
if (arg === null) return
|
|
165
|
-
if (Array.isArray(arg)) return
|
|
166
|
-
return
|
|
206
|
+
function serializeArgValue({ arg, gqlArg, types }) {
|
|
207
|
+
if (arg === null) return null;
|
|
208
|
+
if (Array.isArray(arg)) return arg.map((v) => {
|
|
209
|
+
return serializeArgValue({
|
|
167
210
|
arg: v,
|
|
168
211
|
types,
|
|
169
212
|
gqlArg
|
|
170
213
|
});
|
|
171
|
-
})
|
|
214
|
+
});
|
|
172
215
|
if (typeof arg === "object" && !(arg instanceof Date)) {
|
|
173
216
|
let type = gqlArg.type;
|
|
174
217
|
if (type.kind === "NON_NULL") type = type.ofType;
|
|
@@ -177,15 +220,17 @@ function stringifyArgumentValue({ arg, gqlArg, types }) {
|
|
|
177
220
|
const referenceInputObject = types.find((t) => t.name === type.name);
|
|
178
221
|
if (!referenceInputObject) throw new Error(`Expected an INPUT_OBJECT hit in name based lookup for name ${type.name} with arg ${JSON.stringify(arg)}`);
|
|
179
222
|
if (referenceInputObject.kind !== "INPUT_OBJECT") throw new Error("Expected an INPUT_OBJECT hit in named based lookup");
|
|
180
|
-
|
|
223
|
+
const result = {};
|
|
224
|
+
for (const [key, value] of Object.entries(arg)) {
|
|
181
225
|
const subArgType = referenceInputObject.inputFields.find((t) => t.name === key);
|
|
182
226
|
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(", ")}`);
|
|
183
|
-
|
|
227
|
+
result[key] = serializeArgValue({
|
|
184
228
|
arg: value,
|
|
185
229
|
types,
|
|
186
230
|
gqlArg: subArgType
|
|
187
|
-
})
|
|
188
|
-
}
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
return result;
|
|
189
234
|
}
|
|
190
235
|
let type = gqlArg.type;
|
|
191
236
|
if (type.kind === "NON_NULL") type = type.ofType;
|
|
@@ -201,15 +246,15 @@ function stringifyArgumentValue({ arg, gqlArg, types }) {
|
|
|
201
246
|
break;
|
|
202
247
|
default: throw new Error(`Unrecognized date type ${name}, expected Date or DateTime`);
|
|
203
248
|
}
|
|
204
|
-
return
|
|
249
|
+
return value;
|
|
205
250
|
}
|
|
206
251
|
switch (typeof arg) {
|
|
207
|
-
case "string":
|
|
208
|
-
case "number":
|
|
209
|
-
case "bigint":
|
|
210
|
-
case "boolean": return
|
|
252
|
+
case "string":
|
|
253
|
+
case "number":
|
|
254
|
+
case "bigint":
|
|
255
|
+
case "boolean": return arg;
|
|
211
256
|
case "symbol": throw new Error("Cannot stringify a symbol to send as gql arg");
|
|
212
|
-
case "undefined": return
|
|
257
|
+
case "undefined": return null;
|
|
213
258
|
case "function": throw new Error("Cannot stringify a function to send as gql arg");
|
|
214
259
|
}
|
|
215
260
|
throw new Error("Cannot stringify an unknown type");
|
package/out/client.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.mjs","names":["merge"],"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 { DateResolver, DateTimeISOResolver } from \"graphql-scalars\";\nimport { createSubscriber } from \"svelte/reactivity\";\n\nimport {\n empty,\n map,\n merge,\n pipe,\n share,\n subscribe,\n take,\n toObservable,\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 autoIncludeIdField,\n}: {\n operationVerb: \"query\" | \"subscription\" | \"mutation\";\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n autoIncludeIdField?: string;\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, autoIncludeIdField })\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 autoIncludeIdField,\n}: {\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n client: Client;\n enableSubscription?: boolean;\n forceReactivity?: boolean;\n autoIncludeIdField?: string;\n}) {\n let currentData: any;\n const dataProxy = lazy(\n () =>\n new Proxy(currentData, {\n get(target, prop, receiver) {\n svelteSubscriber();\n const val = Reflect.get(currentData, prop, receiver);\n if (typeof val === \"function\") {\n return val.bind(currentData);\n }\n return val;\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 sharedSource = pipe(\n merge([\n client.query(\n makeOperationString({\n operationVerb: \"query\",\n queryName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n ),\n enableSubscription\n ? client.subscription(\n makeOperationString({\n operationVerb: \"subscription\",\n queryName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n )\n : empty,\n ]),\n share,\n );\n\n const observable = toObservable(\n pipe(\n sharedSource,\n map((v: any) => {\n if (v.error) {\n throw v.error;\n }\n\n const data = v.data?.[queryName];\n currentData = data;\n if (typeof data === \"object\" && data !== null) {\n return dataProxy();\n }\n return data;\n }),\n ),\n );\n\n const promise = new Promise<any>((resolve, reject) => {\n pipe(\n sharedSource,\n take(1),\n subscribe((v: any) => {\n if (v.error) {\n reject(v.error);\n return;\n }\n\n const data = v.data?.[queryName];\n currentData = data;\n if (typeof data !== \"object\" || data === null) {\n resolve(data);\n return;\n }\n if (typeof forceReactivity === \"boolean\" && forceReactivity) {\n resolve(observable);\n return;\n }\n try {\n Object.assign(data, observable);\n resolve(data);\n } catch (err) {\n reject(err);\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 autoIncludeIdField,\n}: {\n mutationName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n const sharedSource = pipe(\n client.mutation(\n makeOperationString({\n operationVerb: \"mutation\",\n queryName: mutationName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n ),\n share,\n );\n\n const observable = toObservable(\n pipe(\n sharedSource,\n map((v) => {\n if (v.error) {\n throw v.error;\n }\n\n const data = v.data?.[mutationName];\n return data;\n }),\n ),\n );\n\n const promise = new Promise<any>((resolve, reject) => {\n pipe(\n sharedSource,\n take(1),\n subscribe((v: any) => {\n if (v.error) {\n reject(v.error);\n return;\n }\n\n resolve(v.data?.[mutationName]);\n }),\n );\n });\n\n Object.assign(promise, observable);\n return promise;\n}\n\nexport function makeGraphQLSubscriptionRequest({\n subscriptionName,\n input,\n client,\n schema,\n autoIncludeIdField,\n}: {\n subscriptionName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n return pipe(\n client.subscription(\n makeOperationString({\n operationVerb: \"subscription\",\n queryName: subscriptionName,\n input,\n schema,\n autoIncludeIdField,\n }),\n {},\n ),\n map((v) => {\n if (v.error) {\n throw v.error;\n }\n\n return v.data?.[subscriptionName];\n }),\n toObservable,\n ) as any;\n}\n\nfunction stringifySelection({\n field,\n selection,\n types,\n autoIncludeIdField,\n}: {\n selection: Record<string, any>;\n field: IntrospectionField;\n types: readonly IntrospectionType[];\n autoIncludeIdField?: string;\n}) {\n if (\n autoIncludeIdField &&\n typeof selection[autoIncludeIdField] === \"undefined\"\n ) {\n selection[autoIncludeIdField] = true;\n }\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\" && !(arg instanceof Date)) {\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 if (arg instanceof Date) {\n const name = (type as any).name;\n let value: string;\n switch (name) {\n case \"Date\":\n value = DateResolver.serialize(arg);\n break;\n case \"DateTime\":\n value = DateTimeISOResolver.serialize(arg);\n break;\n default:\n throw new Error(\n `Unrecognized date type ${name}, expected Date or DateTime`,\n );\n }\n return `\"${value}\"`;\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n availableSubscriptions: Set<string>;\n forceReactivity?: ForceReactivity;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n forceReactivity?: ForceReactivity;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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.mjs","names":["merge"],"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, createRequest } from \"@urql/core\";\nimport { capitalize } from \"es-toolkit\";\nimport type {\n IntrospectionField,\n IntrospectionInputValue,\n IntrospectionQuery,\n IntrospectionType,\n} from \"graphql\";\nimport { DateResolver, DateTimeISOResolver } from \"graphql-scalars\";\nimport { createSubscriber } from \"svelte/reactivity\";\n\nimport {\n empty,\n fromValue,\n map,\n merge,\n onEnd,\n onStart,\n pipe,\n type Source,\n share,\n subscribe,\n take,\n toObservable,\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\nfunction typeToString(type: any): string {\n if (type.kind === \"NON_NULL\") return `${typeToString(type.ofType)}!`;\n if (type.kind === \"LIST\") return `[${typeToString(type.ofType)}]`;\n return type.name;\n}\n\ntype VarContext = {\n variables: Record<string, any>;\n declarations: string[];\n usedNames: Set<string>;\n};\n\nfunction allocateVarName(ctx: VarContext, baseName: string): string {\n if (!ctx.usedNames.has(baseName)) {\n ctx.usedNames.add(baseName);\n return baseName;\n }\n let i = 1;\n while (ctx.usedNames.has(`${baseName}${i}`)) i++;\n const name = `${baseName}${i}`;\n ctx.usedNames.add(name);\n return name;\n}\n\nexport const argsKey = \"__args\";\n\nfunction makeOperation({\n operationVerb,\n queryName,\n schema,\n input,\n autoIncludeIdField,\n}: {\n operationVerb: \"query\" | \"subscription\" | \"mutation\";\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n autoIncludeIdField?: string;\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 varCtx: VarContext = {\n variables: {},\n declarations: [],\n usedNames: new Set(),\n };\n\n const selectionString = input\n ? stringifySelection({\n field,\n selection: input,\n types,\n autoIncludeIdField,\n varCtx,\n })\n : \"\";\n\n const argumentString = input?.[argsKey]\n ? serializeArguments({\n args: input[argsKey],\n fieldArgs: field.args,\n types,\n varCtx,\n })\n : \"\";\n\n const varDecl = varCtx.declarations.length\n ? `(${varCtx.declarations.join(\", \")})`\n : \"\";\n\n return {\n operationString: `${operationVerb} ${otwQueryName}${varDecl} { ${queryName}${argumentString} ${selectionString}}`,\n variables: varCtx.variables,\n };\n}\n\nexport function makeGraphQLQueryRequest({\n queryName,\n schema,\n input,\n client,\n enableSubscription = false,\n forceReactivity,\n autoIncludeIdField,\n}: {\n queryName: string;\n schema: IntrospectionQuery;\n input?: Record<string, any>;\n client: Client;\n enableSubscription?: boolean;\n forceReactivity?: boolean;\n autoIncludeIdField?: string;\n}) {\n let currentData: any;\n const dataProxy = lazy(\n () =>\n new Proxy(currentData, {\n get(target, prop, receiver) {\n svelteSubscriber();\n const val = Reflect.get(currentData, prop, receiver);\n if (typeof val === \"function\") {\n return val.bind(currentData);\n }\n return val;\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 { operationString, variables } = makeOperation({\n operationVerb: \"query\",\n queryName,\n input,\n schema,\n autoIncludeIdField,\n });\n\n const observableSources: Source<any>[] = [\n client.query(operationString, variables),\n ];\n if (enableSubscription) {\n observableSources.push(\n (() => {\n const { operationString: subOpString, variables: subVars } =\n makeOperation({\n operationVerb: \"subscription\",\n queryName,\n input,\n schema,\n autoIncludeIdField,\n });\n return client.subscription(subOpString, subVars);\n })(),\n );\n }\n const observable = toObservable(\n pipe(\n merge(observableSources),\n share,\n map((v: any) => {\n if (v.error) {\n throw v.error;\n }\n\n const data = v.data?.[queryName];\n if (typeof data === \"object\" && data !== null) {\n currentData = data;\n return dataProxy();\n }\n return data;\n }),\n ),\n );\n\n const promise = new Promise<any>((resolve, reject) => {\n pipe(\n client.query(operationString, variables),\n take(1),\n subscribe((v: any) => {\n if (v.error) {\n reject(v.error);\n return;\n }\n\n const data = v.data?.[queryName];\n if (typeof data !== \"object\" || data === null) {\n resolve(data);\n return;\n }\n if (typeof forceReactivity === \"boolean\" && forceReactivity) {\n resolve(observable);\n return;\n }\n\n currentData = data;\n observableSources.push(fromValue(data));\n\n try {\n const r = dataProxy();\n Object.assign(r, observable);\n resolve(r);\n } catch (err) {\n reject(err);\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 autoIncludeIdField,\n}: {\n mutationName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n const { operationString, variables } = makeOperation({\n operationVerb: \"mutation\",\n queryName: mutationName,\n input,\n schema,\n autoIncludeIdField,\n });\n\n const observable = toObservable(\n pipe(\n pipe(client.mutation(operationString, variables), share),\n map((v) => {\n if (v.error) {\n throw v.error;\n }\n\n const data = v.data?.[mutationName];\n return data;\n }),\n ),\n );\n\n const promise = new Promise<any>((resolve, reject) => {\n pipe(\n client.mutation(operationString, variables),\n take(1),\n subscribe((v: any) => {\n if (v.error) {\n reject(v.error);\n return;\n }\n\n resolve(v.data?.[mutationName]);\n }),\n );\n });\n\n Object.assign(promise, observable);\n return promise;\n}\n\nexport function makeGraphQLSubscriptionRequest({\n subscriptionName,\n input,\n client,\n schema,\n autoIncludeIdField,\n}: {\n subscriptionName: string;\n input: Record<string, any>;\n client: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\n}) {\n const { operationString, variables } = makeOperation({\n operationVerb: \"subscription\",\n queryName: subscriptionName,\n input,\n schema,\n autoIncludeIdField,\n });\n\n return pipe(\n client.subscription(operationString, variables),\n map((v) => {\n if (v.error) {\n throw v.error;\n }\n\n return v.data?.[subscriptionName];\n }),\n toObservable,\n ) as any;\n}\n\nfunction stringifySelection({\n field,\n selection,\n types,\n autoIncludeIdField,\n varCtx,\n}: {\n selection: Record<string, any>;\n field: IntrospectionField;\n types: readonly IntrospectionType[];\n autoIncludeIdField?: string;\n varCtx: VarContext;\n}) {\n if (\n autoIncludeIdField &&\n typeof selection[autoIncludeIdField] === \"undefined\"\n ) {\n selection[autoIncludeIdField] = true;\n }\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 = serializeArguments({\n args: value[argsKey],\n types,\n fieldArgs: referenceObject.args,\n varCtx,\n });\n }\n\n acc += `${key}${argsString} ${stringifySelection({\n field,\n selection: value,\n types,\n varCtx,\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 serializeArguments({\n args,\n fieldArgs,\n types,\n varCtx,\n}: {\n args: Record<any, any>;\n fieldArgs: readonly IntrospectionInputValue[];\n types: readonly IntrospectionType[];\n varCtx: VarContext;\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 const varName = allocateVarName(varCtx, key);\n varCtx.declarations.push(`$${varName}: ${typeToString(gqlArg.type)}`);\n varCtx.variables[varName] = serializeArgValue({\n arg: value,\n gqlArg,\n types,\n });\n\n return `${key}: $${varName}`;\n })\n .join(\", \")})`;\n }\n\n return \"\";\n}\n\nfunction serializeArgValue({\n arg,\n gqlArg,\n types,\n}: {\n arg: any;\n gqlArg: IntrospectionInputValue;\n types: readonly IntrospectionType[];\n}): any {\n if (arg === null) {\n return null;\n }\n\n if (Array.isArray(arg)) {\n return arg.map((v) => {\n return serializeArgValue({\n arg: v,\n types,\n gqlArg,\n });\n });\n }\n\n const argtype = typeof arg;\n\n if (argtype === \"object\" && !(arg instanceof Date)) {\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 const result: Record<string, any> = {};\n for (const [key, value] of Object.entries(arg)) {\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 result[key] = serializeArgValue({\n arg: value,\n types,\n gqlArg: subArgType,\n });\n }\n return result;\n }\n\n let type = gqlArg.type;\n\n if (type.kind === \"NON_NULL\") {\n type = type.ofType;\n }\n\n if (arg instanceof Date) {\n const name = (type as any).name;\n let value: string;\n switch (name) {\n case \"Date\":\n value = DateResolver.serialize(arg);\n break;\n case \"DateTime\":\n value = DateTimeISOResolver.serialize(arg);\n break;\n default:\n throw new Error(\n `Unrecognized date type ${name}, expected Date or DateTime`,\n );\n }\n return value;\n }\n\n switch (typeof arg) {\n case \"string\":\n case \"number\":\n case \"bigint\":\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n availableSubscriptions: Set<string>;\n forceReactivity?: ForceReactivity;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n forceReactivity?: ForceReactivity;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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 autoIncludeIdField,\n}: {\n urqlClient: Client;\n schema: IntrospectionQuery;\n autoIncludeIdField?: string;\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 autoIncludeIdField,\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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"}
|
|
@@ -5,9 +5,15 @@ let node_path = require("node:path");
|
|
|
5
5
|
let _urql_introspection = require("@urql/introspection");
|
|
6
6
|
let devalue = require("devalue");
|
|
7
7
|
//#region lib/client/generate/client.ts
|
|
8
|
+
const autoGenerationPreamble = `// This file is auto-generated. Do not edit manually.
|
|
9
|
+
// @generated
|
|
10
|
+
/* eslint-disable */
|
|
11
|
+
// biome-ignore-all lint: This file is auto-generated
|
|
12
|
+
// biome-ignore-all assist: This file is auto-generated
|
|
13
|
+
// biome-ignore-all syntax: This file is auto-generated`;
|
|
8
14
|
function generateClient({ apiUrl, rumbleImportPath, useExternalUrqlClient, availableSubscriptions, schemaPath, forceReactivity, autoIncludeId }) {
|
|
9
15
|
const imports = [];
|
|
10
|
-
let code =
|
|
16
|
+
let code = autoGenerationPreamble;
|
|
11
17
|
const idInclude = typeof autoIncludeId === "string" ? `\n autoIncludeIdField: '${autoIncludeId}'` : autoIncludeId === true ? `\n autoIncludeIdField: 'id'` : "";
|
|
12
18
|
if (typeof useExternalUrqlClient === "string") imports.push(`import { urqlClient } from "${useExternalUrqlClient}";`);
|
|
13
19
|
imports.push(`import { Client, fetchExchange } from '@urql/core';`);
|
|
@@ -206,7 +212,7 @@ export type ${key} = ${rep};
|
|
|
206
212
|
});
|
|
207
213
|
imports.push(...c.imports);
|
|
208
214
|
code += c.code;
|
|
209
|
-
await Promise.all([(0, node_fs_promises.writeFile)((0, node_path.join)(outputPath, "client.ts"), `${imports.join("\n")}\n${code}`), (0, node_fs_promises.writeFile)((0, node_path.join)(outputPath, `${schemaFileName}.ts`), `
|
|
215
|
+
await Promise.all([(0, node_fs_promises.writeFile)((0, node_path.join)(outputPath, "client.ts"), `${imports.join("\n")}\n${code}`), (0, node_fs_promises.writeFile)((0, node_path.join)(outputPath, `${schemaFileName}.ts`), autoGenerationPreamble + `
|
|
210
216
|
import type { IntrospectionQuery } from "graphql";
|
|
211
217
|
export const schema = ${(0, devalue.uneval)((0, _urql_introspection.minifyIntrospectionQuery)((0, _urql_introspection.getIntrospectedSchema)(schema), {
|
|
212
218
|
includeEnums: true,
|
|
@@ -222,4 +228,4 @@ Object.defineProperty(exports, "generateFromSchema", {
|
|
|
222
228
|
}
|
|
223
229
|
});
|
|
224
230
|
|
|
225
|
-
//# sourceMappingURL=generate-
|
|
231
|
+
//# sourceMappingURL=generate-CqpjHD9X.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-CqpjHD9X.cjs","names":["GraphQLObjectType","GraphQLScalarType","GraphQLEnumType","GraphQLInputObjectType","GraphQLList","GraphQLNonNull"],"sources":["../lib/client/generate/client.ts","../lib/client/generate/tsRepresentation.ts","../lib/client/generate/generate.ts"],"sourcesContent":["export const autoGenerationPreamble = `// This file is auto-generated. Do not edit manually.\n// @generated\n/* eslint-disable */\n// biome-ignore-all lint: This file is auto-generated\n// biome-ignore-all assist: This file is auto-generated\n// biome-ignore-all syntax: This file is auto-generated`;\n\nexport function generateClient({\n apiUrl,\n rumbleImportPath,\n useExternalUrqlClient,\n availableSubscriptions,\n schemaPath,\n forceReactivity,\n autoIncludeId,\n}: {\n rumbleImportPath: string;\n useExternalUrqlClient: string | boolean;\n apiUrl?: string;\n availableSubscriptions: Set<string>;\n schemaPath: string;\n forceReactivity?: boolean;\n autoIncludeId?: string | boolean;\n}) {\n const imports: string[] = [];\n let code: string = autoGenerationPreamble;\n\n const idInclude =\n typeof autoIncludeId === \"string\"\n ? `\\n autoIncludeIdField: '${autoIncludeId}'`\n : autoIncludeId === true\n ? `\\n autoIncludeIdField: 'id'`\n : \"\";\n\n if (typeof useExternalUrqlClient === \"string\") {\n imports.push(`import { urqlClient } from \"${useExternalUrqlClient}\";`);\n }\n\n imports.push(`import { Client, fetchExchange } from '@urql/core';`);\n imports.push(`import { cacheExchange } from '@urql/exchange-graphcache';`);\n imports.push(`import { nativeDateExchange } from '${rumbleImportPath}';`);\n imports.push(`import { schema } from '${schemaPath}';`);\n\n imports.push(\n `import { makeLiveQuery, makeMutation, makeSubscription, makeQuery } from '${rumbleImportPath}';`,\n );\n\n const forceReactivityFieldString =\n typeof forceReactivity === \"boolean\" && forceReactivity\n ? `\\n forceReactivity: true`\n : \"\";\n const forceReactivityTypeString =\n typeof forceReactivity === \"boolean\" && forceReactivity ? \", true\" : \"\";\n\n code += `\nexport const defaultOptions: ConstructorParameters<Client>[0] = {\n url: \"${apiUrl ?? \"PLEASE PROVIDE A URL WHEN GENERATING OR IMPORT AN EXTERNAL URQL CLIENT\"}\",\n fetchSubscriptions: true,\n exchanges: [cacheExchange({ schema }), nativeDateExchange, fetchExchange],\n fetchOptions: {\n credentials: \"include\",\n },\n requestPolicy: \"cache-and-network\",\n}\n`;\n\n if (!useExternalUrqlClient) {\n code += `\nconst urqlClient = new Client(defaultOptions);\n`;\n }\n\n code += `\nexport const client = {\n /**\n * A query and subscription combination. First queries and if exists, also subscribes to a subscription of the same name.\n * Combines the results of both, so the result is first the query result and then live updates from the subscription.\n * Assumes that the query and subscription return the same fields as per default when using the rumble query helpers.\n * If no subscription with the same name exists, this will just be a query.\n *\n * Internally, this does some magic to make the data reactive with Svelte's reactivity system. But it can be used with other frameworks as well.\n */\n liveQuery: makeLiveQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t availableSubscriptions: new Set([${availableSubscriptions\n .values()\n .toArray()\n .map((value) => `\"${value}\"`)\n .join(\", \")}]),\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n /**\n * A mutation that can be used to e.g. create, update or delete data.\n */\n mutate: makeMutation<Mutation>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A continuous stream of results that updates when the server sends new data.\n */\n subscribe: makeSubscription<Subscription>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A one-time fetch of data.\n */\n query: makeQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n}`;\n\n return {\n imports,\n code,\n };\n}\n","import {\n type GraphQLArgument,\n GraphQLEnumType,\n GraphQLInputObjectType,\n type GraphQLInputType,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n type GraphQLOutputType,\n GraphQLScalarType,\n} from \"graphql\";\n\ntype GraphQLType =\n | GraphQLObjectType<any, any>\n | GraphQLEnumType\n | GraphQLInputObjectType\n | GraphQLScalarType;\n\nexport function makeTSRepresentation(model: GraphQLType) {\n if (model instanceof GraphQLObjectType) {\n return makeTSTypeFromObject(model);\n } else if (model instanceof GraphQLScalarType) {\n return mapGraphqlScalarToTSTypeString(model);\n } else if (model instanceof GraphQLEnumType) {\n return makeStringLiteralUnionFromEnum(model);\n } else if (model instanceof GraphQLInputObjectType) {\n return makeTSTypeFromInputObject(model);\n }\n\n throw new Error(`Unknown model type: ${model}`);\n}\n\nfunction makeTSTypeFromObject(model: GraphQLObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSObjectTypeField(value.type, value.args));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(([key, value]) => `${key}: ${value}`)\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSTypeFromInputObject(model: GraphQLInputObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSInputObjectTypeField(value.type));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(\n ([key, value]) =>\n `${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSObjectTypeField(\n returnType: GraphQLOutputType,\n args?: readonly GraphQLArgument[],\n) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null\";\n }\n\n const isRelationType = returnType instanceof GraphQLObjectType;\n\n const argsStringMap = new Map<string, string>();\n\n for (const arg of args ?? []) {\n argsStringMap.set(arg.name, stringifyTSObjectArg(arg.type));\n }\n\n if (isRelationType) {\n const makePOptional = argsStringMap\n .entries()\n .every(([, value]) => value.includes(\"| undefined\"));\n const argsString =\n (args ?? []).length > 0\n ? `p${makePOptional ? \"?\" : \"\"}: {\n ${argsStringMap\n .entries()\n .map(\n ([key, value]) =>\n ` ${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")}\n }`\n : \"\";\n\n return `(${argsString}) => ${returnTypeString}`;\n } else {\n return returnTypeString;\n }\n}\n\nfunction makeTSInputObjectTypeField(returnType: GraphQLInputType) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null | undefined\";\n } else if (isList) {\n returnTypeString += \" | undefined\";\n }\n\n return returnTypeString;\n}\n\nfunction stringifyTSObjectArg(arg: any) {\n let ret = \"unknown\";\n let isNullable = true;\n\n if (arg instanceof GraphQLNonNull) {\n isNullable = false;\n arg = arg.ofType;\n }\n\n if (\n arg instanceof GraphQLInputObjectType ||\n arg instanceof GraphQLScalarType\n ) {\n ret = arg.name;\n }\n\n if (isNullable) {\n ret += \" | null | undefined\"; // we also want undefined in args\n }\n\n return ret;\n}\n\nfunction mapGraphqlScalarToTSTypeString(arg: any) {\n switch (arg.name) {\n case \"ID\":\n return \"string\";\n case \"String\":\n return \"string\";\n case \"Boolean\":\n return \"boolean\";\n case \"Int\":\n return \"number\";\n case \"Float\":\n return \"number\";\n case \"Date\":\n return \"Date\";\n case \"DateTime\":\n return \"Date\";\n case \"JSON\":\n return \"any\";\n default:\n return \"unknown\";\n }\n}\n\nfunction makeStringLiteralUnionFromEnum(enumType: GraphQLEnumType) {\n return enumType\n .getValues()\n .map((value) => `\"${value.name}\"`)\n .join(\" | \");\n}\n","import { access, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n getIntrospectedSchema,\n minifyIntrospectionQuery,\n} from \"@urql/introspection\";\nimport { uneval } from \"devalue\";\nimport type { GraphQLSchema } from \"graphql\";\nimport { autoGenerationPreamble, generateClient } from \"./client\";\nimport { makeTSRepresentation } from \"./tsRepresentation\";\n\nexport async function generateFromSchema({\n outputPath,\n schema,\n rumbleImportPath = \"@m1212e/rumble/client\",\n apiUrl,\n useExternalUrqlClient = false,\n removeExisting = true,\n forceReactivity,\n autoIncludeIdField,\n}: {\n schema: GraphQLSchema;\n outputPath: string;\n rumbleImportPath?: string;\n apiUrl?: string;\n useExternalUrqlClient?: boolean | string;\n removeExisting?: boolean;\n forceReactivity?: boolean;\n autoIncludeIdField?: string | boolean;\n}) {\n if (removeExisting) {\n try {\n await access(outputPath);\n await rm(outputPath, { recursive: true, force: true });\n } catch (_error) {}\n }\n\n await mkdir(outputPath, { recursive: true });\n\n if (!outputPath.endsWith(\"/\")) {\n outputPath += \"/\";\n }\n\n const imports: string[] = [];\n let code = \"\";\n\n const typeMap = new Map<string, any>();\n for (const [key, object] of Object.entries(schema.getTypeMap())) {\n if (key.startsWith(\"__\")) continue;\n typeMap.set(key, object);\n }\n\n for (const [key, object] of typeMap.entries()) {\n const rep = makeTSRepresentation(object);\n\n if (rep === key) {\n continue;\n }\n\n code += `\nexport type ${key} = ${rep};\n\t\t`;\n }\n\n const schemaFileName = \"schema\";\n\n const c = generateClient({\n apiUrl,\n schemaPath: `./${schemaFileName}`,\n useExternalUrqlClient,\n rumbleImportPath,\n availableSubscriptions: new Set(\n Object.keys(schema.getSubscriptionType()?.getFields() || {}),\n ),\n forceReactivity,\n autoIncludeId: autoIncludeIdField,\n });\n\n imports.push(...c.imports);\n code += c.code;\n\n await Promise.all([\n writeFile(join(outputPath, \"client.ts\"), `${imports.join(\"\\n\")}\\n${code}`),\n writeFile(\n join(outputPath, `${schemaFileName}.ts`),\n autoGenerationPreamble +\n `\nimport type { IntrospectionQuery } from \"graphql\";\nexport const schema = ${uneval(minifyIntrospectionQuery(getIntrospectedSchema(schema), { includeEnums: true, includeScalars: true, includeInputs: true }))} as IntrospectionQuery`,\n ),\n ]);\n}\n"],"mappings":"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"}
|
|
@@ -4,9 +4,15 @@ import { join } from "node:path";
|
|
|
4
4
|
import { getIntrospectedSchema, minifyIntrospectionQuery } from "@urql/introspection";
|
|
5
5
|
import { uneval } from "devalue";
|
|
6
6
|
//#region lib/client/generate/client.ts
|
|
7
|
+
const autoGenerationPreamble = `// This file is auto-generated. Do not edit manually.
|
|
8
|
+
// @generated
|
|
9
|
+
/* eslint-disable */
|
|
10
|
+
// biome-ignore-all lint: This file is auto-generated
|
|
11
|
+
// biome-ignore-all assist: This file is auto-generated
|
|
12
|
+
// biome-ignore-all syntax: This file is auto-generated`;
|
|
7
13
|
function generateClient({ apiUrl, rumbleImportPath, useExternalUrqlClient, availableSubscriptions, schemaPath, forceReactivity, autoIncludeId }) {
|
|
8
14
|
const imports = [];
|
|
9
|
-
let code =
|
|
15
|
+
let code = autoGenerationPreamble;
|
|
10
16
|
const idInclude = typeof autoIncludeId === "string" ? `\n autoIncludeIdField: '${autoIncludeId}'` : autoIncludeId === true ? `\n autoIncludeIdField: 'id'` : "";
|
|
11
17
|
if (typeof useExternalUrqlClient === "string") imports.push(`import { urqlClient } from "${useExternalUrqlClient}";`);
|
|
12
18
|
imports.push(`import { Client, fetchExchange } from '@urql/core';`);
|
|
@@ -205,7 +211,7 @@ export type ${key} = ${rep};
|
|
|
205
211
|
});
|
|
206
212
|
imports.push(...c.imports);
|
|
207
213
|
code += c.code;
|
|
208
|
-
await Promise.all([writeFile(join(outputPath, "client.ts"), `${imports.join("\n")}\n${code}`), writeFile(join(outputPath, `${schemaFileName}.ts`), `
|
|
214
|
+
await Promise.all([writeFile(join(outputPath, "client.ts"), `${imports.join("\n")}\n${code}`), writeFile(join(outputPath, `${schemaFileName}.ts`), autoGenerationPreamble + `
|
|
209
215
|
import type { IntrospectionQuery } from "graphql";
|
|
210
216
|
export const schema = ${uneval(minifyIntrospectionQuery(getIntrospectedSchema(schema), {
|
|
211
217
|
includeEnums: true,
|
|
@@ -216,4 +222,4 @@ export const schema = ${uneval(minifyIntrospectionQuery(getIntrospectedSchema(sc
|
|
|
216
222
|
//#endregion
|
|
217
223
|
export { generateFromSchema as t };
|
|
218
224
|
|
|
219
|
-
//# sourceMappingURL=generate-
|
|
225
|
+
//# sourceMappingURL=generate-D2VqOgQa.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-D2VqOgQa.mjs","names":[],"sources":["../lib/client/generate/client.ts","../lib/client/generate/tsRepresentation.ts","../lib/client/generate/generate.ts"],"sourcesContent":["export const autoGenerationPreamble = `// This file is auto-generated. Do not edit manually.\n// @generated\n/* eslint-disable */\n// biome-ignore-all lint: This file is auto-generated\n// biome-ignore-all assist: This file is auto-generated\n// biome-ignore-all syntax: This file is auto-generated`;\n\nexport function generateClient({\n apiUrl,\n rumbleImportPath,\n useExternalUrqlClient,\n availableSubscriptions,\n schemaPath,\n forceReactivity,\n autoIncludeId,\n}: {\n rumbleImportPath: string;\n useExternalUrqlClient: string | boolean;\n apiUrl?: string;\n availableSubscriptions: Set<string>;\n schemaPath: string;\n forceReactivity?: boolean;\n autoIncludeId?: string | boolean;\n}) {\n const imports: string[] = [];\n let code: string = autoGenerationPreamble;\n\n const idInclude =\n typeof autoIncludeId === \"string\"\n ? `\\n autoIncludeIdField: '${autoIncludeId}'`\n : autoIncludeId === true\n ? `\\n autoIncludeIdField: 'id'`\n : \"\";\n\n if (typeof useExternalUrqlClient === \"string\") {\n imports.push(`import { urqlClient } from \"${useExternalUrqlClient}\";`);\n }\n\n imports.push(`import { Client, fetchExchange } from '@urql/core';`);\n imports.push(`import { cacheExchange } from '@urql/exchange-graphcache';`);\n imports.push(`import { nativeDateExchange } from '${rumbleImportPath}';`);\n imports.push(`import { schema } from '${schemaPath}';`);\n\n imports.push(\n `import { makeLiveQuery, makeMutation, makeSubscription, makeQuery } from '${rumbleImportPath}';`,\n );\n\n const forceReactivityFieldString =\n typeof forceReactivity === \"boolean\" && forceReactivity\n ? `\\n forceReactivity: true`\n : \"\";\n const forceReactivityTypeString =\n typeof forceReactivity === \"boolean\" && forceReactivity ? \", true\" : \"\";\n\n code += `\nexport const defaultOptions: ConstructorParameters<Client>[0] = {\n url: \"${apiUrl ?? \"PLEASE PROVIDE A URL WHEN GENERATING OR IMPORT AN EXTERNAL URQL CLIENT\"}\",\n fetchSubscriptions: true,\n exchanges: [cacheExchange({ schema }), nativeDateExchange, fetchExchange],\n fetchOptions: {\n credentials: \"include\",\n },\n requestPolicy: \"cache-and-network\",\n}\n`;\n\n if (!useExternalUrqlClient) {\n code += `\nconst urqlClient = new Client(defaultOptions);\n`;\n }\n\n code += `\nexport const client = {\n /**\n * A query and subscription combination. First queries and if exists, also subscribes to a subscription of the same name.\n * Combines the results of both, so the result is first the query result and then live updates from the subscription.\n * Assumes that the query and subscription return the same fields as per default when using the rumble query helpers.\n * If no subscription with the same name exists, this will just be a query.\n *\n * Internally, this does some magic to make the data reactive with Svelte's reactivity system. But it can be used with other frameworks as well.\n */\n liveQuery: makeLiveQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t availableSubscriptions: new Set([${availableSubscriptions\n .values()\n .toArray()\n .map((value) => `\"${value}\"`)\n .join(\", \")}]),\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n /**\n * A mutation that can be used to e.g. create, update or delete data.\n */\n mutate: makeMutation<Mutation>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A continuous stream of results that updates when the server sends new data.\n */\n subscribe: makeSubscription<Subscription>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A one-time fetch of data.\n */\n query: makeQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n}`;\n\n return {\n imports,\n code,\n };\n}\n","import {\n type GraphQLArgument,\n GraphQLEnumType,\n GraphQLInputObjectType,\n type GraphQLInputType,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n type GraphQLOutputType,\n GraphQLScalarType,\n} from \"graphql\";\n\ntype GraphQLType =\n | GraphQLObjectType<any, any>\n | GraphQLEnumType\n | GraphQLInputObjectType\n | GraphQLScalarType;\n\nexport function makeTSRepresentation(model: GraphQLType) {\n if (model instanceof GraphQLObjectType) {\n return makeTSTypeFromObject(model);\n } else if (model instanceof GraphQLScalarType) {\n return mapGraphqlScalarToTSTypeString(model);\n } else if (model instanceof GraphQLEnumType) {\n return makeStringLiteralUnionFromEnum(model);\n } else if (model instanceof GraphQLInputObjectType) {\n return makeTSTypeFromInputObject(model);\n }\n\n throw new Error(`Unknown model type: ${model}`);\n}\n\nfunction makeTSTypeFromObject(model: GraphQLObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSObjectTypeField(value.type, value.args));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(([key, value]) => `${key}: ${value}`)\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSTypeFromInputObject(model: GraphQLInputObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSInputObjectTypeField(value.type));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(\n ([key, value]) =>\n `${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSObjectTypeField(\n returnType: GraphQLOutputType,\n args?: readonly GraphQLArgument[],\n) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null\";\n }\n\n const isRelationType = returnType instanceof GraphQLObjectType;\n\n const argsStringMap = new Map<string, string>();\n\n for (const arg of args ?? []) {\n argsStringMap.set(arg.name, stringifyTSObjectArg(arg.type));\n }\n\n if (isRelationType) {\n const makePOptional = argsStringMap\n .entries()\n .every(([, value]) => value.includes(\"| undefined\"));\n const argsString =\n (args ?? []).length > 0\n ? `p${makePOptional ? \"?\" : \"\"}: {\n ${argsStringMap\n .entries()\n .map(\n ([key, value]) =>\n ` ${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")}\n }`\n : \"\";\n\n return `(${argsString}) => ${returnTypeString}`;\n } else {\n return returnTypeString;\n }\n}\n\nfunction makeTSInputObjectTypeField(returnType: GraphQLInputType) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null | undefined\";\n } else if (isList) {\n returnTypeString += \" | undefined\";\n }\n\n return returnTypeString;\n}\n\nfunction stringifyTSObjectArg(arg: any) {\n let ret = \"unknown\";\n let isNullable = true;\n\n if (arg instanceof GraphQLNonNull) {\n isNullable = false;\n arg = arg.ofType;\n }\n\n if (\n arg instanceof GraphQLInputObjectType ||\n arg instanceof GraphQLScalarType\n ) {\n ret = arg.name;\n }\n\n if (isNullable) {\n ret += \" | null | undefined\"; // we also want undefined in args\n }\n\n return ret;\n}\n\nfunction mapGraphqlScalarToTSTypeString(arg: any) {\n switch (arg.name) {\n case \"ID\":\n return \"string\";\n case \"String\":\n return \"string\";\n case \"Boolean\":\n return \"boolean\";\n case \"Int\":\n return \"number\";\n case \"Float\":\n return \"number\";\n case \"Date\":\n return \"Date\";\n case \"DateTime\":\n return \"Date\";\n case \"JSON\":\n return \"any\";\n default:\n return \"unknown\";\n }\n}\n\nfunction makeStringLiteralUnionFromEnum(enumType: GraphQLEnumType) {\n return enumType\n .getValues()\n .map((value) => `\"${value.name}\"`)\n .join(\" | \");\n}\n","import { access, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n getIntrospectedSchema,\n minifyIntrospectionQuery,\n} from \"@urql/introspection\";\nimport { uneval } from \"devalue\";\nimport type { GraphQLSchema } from \"graphql\";\nimport { autoGenerationPreamble, generateClient } from \"./client\";\nimport { makeTSRepresentation } from \"./tsRepresentation\";\n\nexport async function generateFromSchema({\n outputPath,\n schema,\n rumbleImportPath = \"@m1212e/rumble/client\",\n apiUrl,\n useExternalUrqlClient = false,\n removeExisting = true,\n forceReactivity,\n autoIncludeIdField,\n}: {\n schema: GraphQLSchema;\n outputPath: string;\n rumbleImportPath?: string;\n apiUrl?: string;\n useExternalUrqlClient?: boolean | string;\n removeExisting?: boolean;\n forceReactivity?: boolean;\n autoIncludeIdField?: string | boolean;\n}) {\n if (removeExisting) {\n try {\n await access(outputPath);\n await rm(outputPath, { recursive: true, force: true });\n } catch (_error) {}\n }\n\n await mkdir(outputPath, { recursive: true });\n\n if (!outputPath.endsWith(\"/\")) {\n outputPath += \"/\";\n }\n\n const imports: string[] = [];\n let code = \"\";\n\n const typeMap = new Map<string, any>();\n for (const [key, object] of Object.entries(schema.getTypeMap())) {\n if (key.startsWith(\"__\")) continue;\n typeMap.set(key, object);\n }\n\n for (const [key, object] of typeMap.entries()) {\n const rep = makeTSRepresentation(object);\n\n if (rep === key) {\n continue;\n }\n\n code += `\nexport type ${key} = ${rep};\n\t\t`;\n }\n\n const schemaFileName = \"schema\";\n\n const c = generateClient({\n apiUrl,\n schemaPath: `./${schemaFileName}`,\n useExternalUrqlClient,\n rumbleImportPath,\n availableSubscriptions: new Set(\n Object.keys(schema.getSubscriptionType()?.getFields() || {}),\n ),\n forceReactivity,\n autoIncludeId: autoIncludeIdField,\n });\n\n imports.push(...c.imports);\n code += c.code;\n\n await Promise.all([\n writeFile(join(outputPath, \"client.ts\"), `${imports.join(\"\\n\")}\\n${code}`),\n writeFile(\n join(outputPath, `${schemaFileName}.ts`),\n autoGenerationPreamble +\n `\nimport type { IntrospectionQuery } from \"graphql\";\nexport const schema = ${uneval(minifyIntrospectionQuery(getIntrospectedSchema(schema), { includeEnums: true, includeScalars: true, includeInputs: true }))} as IntrospectionQuery`,\n ),\n ]);\n}\n"],"mappings":"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"}
|
package/out/index.cjs
CHANGED
|
@@ -22,7 +22,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
22
22
|
}) : target, mod));
|
|
23
23
|
//#endregion
|
|
24
24
|
const require_lazy = require("./lazy-DT--QoPa.cjs");
|
|
25
|
-
const require_generate = require("./generate-
|
|
25
|
+
const require_generate = require("./generate-CqpjHD9X.cjs");
|
|
26
26
|
let graphql = require("graphql");
|
|
27
27
|
let _escape_tech_graphql_armor = require("@escape.tech/graphql-armor");
|
|
28
28
|
let _graphql_yoga_plugin_disable_introspection = require("@graphql-yoga/plugin-disable-introspection");
|
|
@@ -209,7 +209,7 @@ function mapNullFieldsToUndefined(obj) {
|
|
|
209
209
|
}
|
|
210
210
|
//#endregion
|
|
211
211
|
//#region package.json
|
|
212
|
-
var version = "0.16.
|
|
212
|
+
var version = "0.16.41";
|
|
213
213
|
//#endregion
|
|
214
214
|
//#region lib/helpers/mergeFilters.ts
|
|
215
215
|
function mergeFilters(filterA, filterB) {
|
package/out/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as lazy } from "./lazy-BgeBy3-B.mjs";
|
|
2
|
-
import { t as generateFromSchema } from "./generate-
|
|
2
|
+
import { t as generateFromSchema } from "./generate-D2VqOgQa.mjs";
|
|
3
3
|
import { GraphQLError } from "graphql";
|
|
4
4
|
import { EnvelopArmorPlugin } from "@escape.tech/graphql-armor";
|
|
5
5
|
import { useDisableIntrospection } from "@graphql-yoga/plugin-disable-introspection";
|
|
@@ -181,7 +181,7 @@ function mapNullFieldsToUndefined(obj) {
|
|
|
181
181
|
}
|
|
182
182
|
//#endregion
|
|
183
183
|
//#region package.json
|
|
184
|
-
var version = "0.16.
|
|
184
|
+
var version = "0.16.41";
|
|
185
185
|
//#endregion
|
|
186
186
|
//#region lib/helpers/mergeFilters.ts
|
|
187
187
|
function mergeFilters(filterA, filterB) {
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-CwAZQRah.mjs","names":[],"sources":["../lib/client/generate/client.ts","../lib/client/generate/tsRepresentation.ts","../lib/client/generate/generate.ts"],"sourcesContent":["export function generateClient({\n apiUrl,\n rumbleImportPath,\n useExternalUrqlClient,\n availableSubscriptions,\n schemaPath,\n forceReactivity,\n autoIncludeId,\n}: {\n rumbleImportPath: string;\n useExternalUrqlClient: string | boolean;\n apiUrl?: string;\n availableSubscriptions: Set<string>;\n schemaPath: string;\n forceReactivity?: boolean;\n autoIncludeId?: string | boolean;\n}) {\n const imports: string[] = [];\n let code: string = \"\";\n\n const idInclude =\n typeof autoIncludeId === \"string\"\n ? `\\n autoIncludeIdField: '${autoIncludeId}'`\n : autoIncludeId === true\n ? `\\n autoIncludeIdField: 'id'`\n : \"\";\n\n if (typeof useExternalUrqlClient === \"string\") {\n imports.push(`import { urqlClient } from \"${useExternalUrqlClient}\";`);\n }\n\n imports.push(`import { Client, fetchExchange } from '@urql/core';`);\n imports.push(`import { cacheExchange } from '@urql/exchange-graphcache';`);\n imports.push(`import { nativeDateExchange } from '${rumbleImportPath}';`);\n imports.push(`import { schema } from '${schemaPath}';`);\n\n imports.push(\n `import { makeLiveQuery, makeMutation, makeSubscription, makeQuery } from '${rumbleImportPath}';`,\n );\n\n const forceReactivityFieldString =\n typeof forceReactivity === \"boolean\" && forceReactivity\n ? `\\n forceReactivity: true`\n : \"\";\n const forceReactivityTypeString =\n typeof forceReactivity === \"boolean\" && forceReactivity ? \", true\" : \"\";\n\n code += `\nexport const defaultOptions: ConstructorParameters<Client>[0] = {\n url: \"${apiUrl ?? \"PLEASE PROVIDE A URL WHEN GENERATING OR IMPORT AN EXTERNAL URQL CLIENT\"}\",\n fetchSubscriptions: true,\n exchanges: [cacheExchange({ schema }), nativeDateExchange, fetchExchange],\n fetchOptions: {\n credentials: \"include\",\n },\n requestPolicy: \"cache-and-network\",\n}\n`;\n\n if (!useExternalUrqlClient) {\n code += `\nconst urqlClient = new Client(defaultOptions);\n`;\n }\n\n code += `\nexport const client = {\n /**\n * A query and subscription combination. First queries and if exists, also subscribes to a subscription of the same name.\n * Combines the results of both, so the result is first the query result and then live updates from the subscription.\n * Assumes that the query and subscription return the same fields as per default when using the rumble query helpers.\n * If no subscription with the same name exists, this will just be a query.\n *\n * Internally, this does some magic to make the data reactive with Svelte's reactivity system. But it can be used with other frameworks as well.\n */\n liveQuery: makeLiveQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t availableSubscriptions: new Set([${availableSubscriptions\n .values()\n .toArray()\n .map((value) => `\"${value}\"`)\n .join(\", \")}]),\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n /**\n * A mutation that can be used to e.g. create, update or delete data.\n */\n mutate: makeMutation<Mutation>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A continuous stream of results that updates when the server sends new data.\n */\n subscribe: makeSubscription<Subscription>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A one-time fetch of data.\n */\n query: makeQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n}`;\n\n return {\n imports,\n code,\n };\n}\n","import {\n type GraphQLArgument,\n GraphQLEnumType,\n GraphQLInputObjectType,\n type GraphQLInputType,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n type GraphQLOutputType,\n GraphQLScalarType,\n} from \"graphql\";\n\ntype GraphQLType =\n | GraphQLObjectType<any, any>\n | GraphQLEnumType\n | GraphQLInputObjectType\n | GraphQLScalarType;\n\nexport function makeTSRepresentation(model: GraphQLType) {\n if (model instanceof GraphQLObjectType) {\n return makeTSTypeFromObject(model);\n } else if (model instanceof GraphQLScalarType) {\n return mapGraphqlScalarToTSTypeString(model);\n } else if (model instanceof GraphQLEnumType) {\n return makeStringLiteralUnionFromEnum(model);\n } else if (model instanceof GraphQLInputObjectType) {\n return makeTSTypeFromInputObject(model);\n }\n\n throw new Error(`Unknown model type: ${model}`);\n}\n\nfunction makeTSTypeFromObject(model: GraphQLObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSObjectTypeField(value.type, value.args));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(([key, value]) => `${key}: ${value}`)\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSTypeFromInputObject(model: GraphQLInputObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSInputObjectTypeField(value.type));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(\n ([key, value]) =>\n `${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSObjectTypeField(\n returnType: GraphQLOutputType,\n args?: readonly GraphQLArgument[],\n) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null\";\n }\n\n const isRelationType = returnType instanceof GraphQLObjectType;\n\n const argsStringMap = new Map<string, string>();\n\n for (const arg of args ?? []) {\n argsStringMap.set(arg.name, stringifyTSObjectArg(arg.type));\n }\n\n if (isRelationType) {\n const makePOptional = argsStringMap\n .entries()\n .every(([, value]) => value.includes(\"| undefined\"));\n const argsString =\n (args ?? []).length > 0\n ? `p${makePOptional ? \"?\" : \"\"}: {\n ${argsStringMap\n .entries()\n .map(\n ([key, value]) =>\n ` ${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")}\n }`\n : \"\";\n\n return `(${argsString}) => ${returnTypeString}`;\n } else {\n return returnTypeString;\n }\n}\n\nfunction makeTSInputObjectTypeField(returnType: GraphQLInputType) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null | undefined\";\n } else if (isList) {\n returnTypeString += \" | undefined\";\n }\n\n return returnTypeString;\n}\n\nfunction stringifyTSObjectArg(arg: any) {\n let ret = \"unknown\";\n let isNullable = true;\n\n if (arg instanceof GraphQLNonNull) {\n isNullable = false;\n arg = arg.ofType;\n }\n\n if (\n arg instanceof GraphQLInputObjectType ||\n arg instanceof GraphQLScalarType\n ) {\n ret = arg.name;\n }\n\n if (isNullable) {\n ret += \" | null | undefined\"; // we also want undefined in args\n }\n\n return ret;\n}\n\nfunction mapGraphqlScalarToTSTypeString(arg: any) {\n switch (arg.name) {\n case \"ID\":\n return \"string\";\n case \"String\":\n return \"string\";\n case \"Boolean\":\n return \"boolean\";\n case \"Int\":\n return \"number\";\n case \"Float\":\n return \"number\";\n case \"Date\":\n return \"Date\";\n case \"DateTime\":\n return \"Date\";\n case \"JSON\":\n return \"any\";\n default:\n return \"unknown\";\n }\n}\n\nfunction makeStringLiteralUnionFromEnum(enumType: GraphQLEnumType) {\n return enumType\n .getValues()\n .map((value) => `\"${value.name}\"`)\n .join(\" | \");\n}\n","import { access, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n getIntrospectedSchema,\n minifyIntrospectionQuery,\n} from \"@urql/introspection\";\nimport { uneval } from \"devalue\";\nimport type { GraphQLSchema } from \"graphql\";\nimport { generateClient } from \"./client\";\nimport { makeTSRepresentation } from \"./tsRepresentation\";\n\nexport async function generateFromSchema({\n outputPath,\n schema,\n rumbleImportPath = \"@m1212e/rumble/client\",\n apiUrl,\n useExternalUrqlClient = false,\n removeExisting = true,\n forceReactivity,\n autoIncludeIdField,\n}: {\n schema: GraphQLSchema;\n outputPath: string;\n rumbleImportPath?: string;\n apiUrl?: string;\n useExternalUrqlClient?: boolean | string;\n removeExisting?: boolean;\n forceReactivity?: boolean;\n autoIncludeIdField?: string | boolean;\n}) {\n if (removeExisting) {\n try {\n await access(outputPath);\n await rm(outputPath, { recursive: true, force: true });\n } catch (_error) {}\n }\n\n await mkdir(outputPath, { recursive: true });\n\n if (!outputPath.endsWith(\"/\")) {\n outputPath += \"/\";\n }\n\n const imports: string[] = [];\n let code = \"\";\n\n const typeMap = new Map<string, any>();\n for (const [key, object] of Object.entries(schema.getTypeMap())) {\n if (key.startsWith(\"__\")) continue;\n typeMap.set(key, object);\n }\n\n for (const [key, object] of typeMap.entries()) {\n const rep = makeTSRepresentation(object);\n\n if (rep === key) {\n continue;\n }\n\n code += `\nexport type ${key} = ${rep};\n\t\t`;\n }\n\n const schemaFileName = \"schema\";\n\n const c = generateClient({\n apiUrl,\n schemaPath: `./${schemaFileName}`,\n useExternalUrqlClient,\n rumbleImportPath,\n availableSubscriptions: new Set(\n Object.keys(schema.getSubscriptionType()?.getFields() || {}),\n ),\n forceReactivity,\n autoIncludeId: autoIncludeIdField,\n });\n\n imports.push(...c.imports);\n code += c.code;\n\n await Promise.all([\n writeFile(join(outputPath, \"client.ts\"), `${imports.join(\"\\n\")}\\n${code}`),\n writeFile(\n join(outputPath, `${schemaFileName}.ts`),\n `\nimport type { IntrospectionQuery } from \"graphql\";\nexport const schema = ${uneval(minifyIntrospectionQuery(getIntrospectedSchema(schema), { includeEnums: true, includeScalars: true, includeInputs: true }))} as IntrospectionQuery`,\n ),\n ]);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-kjqygrmB.cjs","names":["GraphQLObjectType","GraphQLScalarType","GraphQLEnumType","GraphQLInputObjectType","GraphQLList","GraphQLNonNull"],"sources":["../lib/client/generate/client.ts","../lib/client/generate/tsRepresentation.ts","../lib/client/generate/generate.ts"],"sourcesContent":["export function generateClient({\n apiUrl,\n rumbleImportPath,\n useExternalUrqlClient,\n availableSubscriptions,\n schemaPath,\n forceReactivity,\n autoIncludeId,\n}: {\n rumbleImportPath: string;\n useExternalUrqlClient: string | boolean;\n apiUrl?: string;\n availableSubscriptions: Set<string>;\n schemaPath: string;\n forceReactivity?: boolean;\n autoIncludeId?: string | boolean;\n}) {\n const imports: string[] = [];\n let code: string = \"\";\n\n const idInclude =\n typeof autoIncludeId === \"string\"\n ? `\\n autoIncludeIdField: '${autoIncludeId}'`\n : autoIncludeId === true\n ? `\\n autoIncludeIdField: 'id'`\n : \"\";\n\n if (typeof useExternalUrqlClient === \"string\") {\n imports.push(`import { urqlClient } from \"${useExternalUrqlClient}\";`);\n }\n\n imports.push(`import { Client, fetchExchange } from '@urql/core';`);\n imports.push(`import { cacheExchange } from '@urql/exchange-graphcache';`);\n imports.push(`import { nativeDateExchange } from '${rumbleImportPath}';`);\n imports.push(`import { schema } from '${schemaPath}';`);\n\n imports.push(\n `import { makeLiveQuery, makeMutation, makeSubscription, makeQuery } from '${rumbleImportPath}';`,\n );\n\n const forceReactivityFieldString =\n typeof forceReactivity === \"boolean\" && forceReactivity\n ? `\\n forceReactivity: true`\n : \"\";\n const forceReactivityTypeString =\n typeof forceReactivity === \"boolean\" && forceReactivity ? \", true\" : \"\";\n\n code += `\nexport const defaultOptions: ConstructorParameters<Client>[0] = {\n url: \"${apiUrl ?? \"PLEASE PROVIDE A URL WHEN GENERATING OR IMPORT AN EXTERNAL URQL CLIENT\"}\",\n fetchSubscriptions: true,\n exchanges: [cacheExchange({ schema }), nativeDateExchange, fetchExchange],\n fetchOptions: {\n credentials: \"include\",\n },\n requestPolicy: \"cache-and-network\",\n}\n`;\n\n if (!useExternalUrqlClient) {\n code += `\nconst urqlClient = new Client(defaultOptions);\n`;\n }\n\n code += `\nexport const client = {\n /**\n * A query and subscription combination. First queries and if exists, also subscribes to a subscription of the same name.\n * Combines the results of both, so the result is first the query result and then live updates from the subscription.\n * Assumes that the query and subscription return the same fields as per default when using the rumble query helpers.\n * If no subscription with the same name exists, this will just be a query.\n *\n * Internally, this does some magic to make the data reactive with Svelte's reactivity system. But it can be used with other frameworks as well.\n */\n liveQuery: makeLiveQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t availableSubscriptions: new Set([${availableSubscriptions\n .values()\n .toArray()\n .map((value) => `\"${value}\"`)\n .join(\", \")}]),\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n /**\n * A mutation that can be used to e.g. create, update or delete data.\n */\n mutate: makeMutation<Mutation>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A continuous stream of results that updates when the server sends new data.\n */\n subscribe: makeSubscription<Subscription>({\n\t urqlClient,\n\t\tschema,${idInclude}\n }),\n /**\n * A one-time fetch of data.\n */\n query: makeQuery<Query${forceReactivityTypeString}>({\n\t urqlClient,\n\t\tschema,${forceReactivityFieldString}${idInclude}\n }),\n}`;\n\n return {\n imports,\n code,\n };\n}\n","import {\n type GraphQLArgument,\n GraphQLEnumType,\n GraphQLInputObjectType,\n type GraphQLInputType,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n type GraphQLOutputType,\n GraphQLScalarType,\n} from \"graphql\";\n\ntype GraphQLType =\n | GraphQLObjectType<any, any>\n | GraphQLEnumType\n | GraphQLInputObjectType\n | GraphQLScalarType;\n\nexport function makeTSRepresentation(model: GraphQLType) {\n if (model instanceof GraphQLObjectType) {\n return makeTSTypeFromObject(model);\n } else if (model instanceof GraphQLScalarType) {\n return mapGraphqlScalarToTSTypeString(model);\n } else if (model instanceof GraphQLEnumType) {\n return makeStringLiteralUnionFromEnum(model);\n } else if (model instanceof GraphQLInputObjectType) {\n return makeTSTypeFromInputObject(model);\n }\n\n throw new Error(`Unknown model type: ${model}`);\n}\n\nfunction makeTSTypeFromObject(model: GraphQLObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSObjectTypeField(value.type, value.args));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(([key, value]) => `${key}: ${value}`)\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSTypeFromInputObject(model: GraphQLInputObjectType) {\n const stringifiedFields = new Map<string, string>();\n for (const [key, value] of Object.entries(model.getFields())) {\n stringifiedFields.set(key, makeTSInputObjectTypeField(value.type));\n }\n\n return `{\n ${stringifiedFields\n .entries()\n .map(\n ([key, value]) =>\n `${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")} \n}`;\n}\n\nfunction makeTSObjectTypeField(\n returnType: GraphQLOutputType,\n args?: readonly GraphQLArgument[],\n) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null\";\n }\n\n const isRelationType = returnType instanceof GraphQLObjectType;\n\n const argsStringMap = new Map<string, string>();\n\n for (const arg of args ?? []) {\n argsStringMap.set(arg.name, stringifyTSObjectArg(arg.type));\n }\n\n if (isRelationType) {\n const makePOptional = argsStringMap\n .entries()\n .every(([, value]) => value.includes(\"| undefined\"));\n const argsString =\n (args ?? []).length > 0\n ? `p${makePOptional ? \"?\" : \"\"}: {\n ${argsStringMap\n .entries()\n .map(\n ([key, value]) =>\n ` ${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n )\n .toArray()\n .join(\",\\n \")}\n }`\n : \"\";\n\n return `(${argsString}) => ${returnTypeString}`;\n } else {\n return returnTypeString;\n }\n}\n\nfunction makeTSInputObjectTypeField(returnType: GraphQLInputType) {\n let isNonNullReturnType = false;\n let isList = false;\n\n for (let index = 0; index < 3; index++) {\n if (returnType instanceof GraphQLList) {\n isList = true;\n returnType = returnType.ofType;\n }\n\n if (returnType instanceof GraphQLNonNull) {\n isNonNullReturnType = true;\n returnType = returnType.ofType;\n }\n }\n\n let returnTypeString = (returnType as any).name;\n\n if (isList) {\n returnTypeString += \"[]\";\n }\n\n if (!isNonNullReturnType) {\n returnTypeString += \" | null | undefined\";\n } else if (isList) {\n returnTypeString += \" | undefined\";\n }\n\n return returnTypeString;\n}\n\nfunction stringifyTSObjectArg(arg: any) {\n let ret = \"unknown\";\n let isNullable = true;\n\n if (arg instanceof GraphQLNonNull) {\n isNullable = false;\n arg = arg.ofType;\n }\n\n if (\n arg instanceof GraphQLInputObjectType ||\n arg instanceof GraphQLScalarType\n ) {\n ret = arg.name;\n }\n\n if (isNullable) {\n ret += \" | null | undefined\"; // we also want undefined in args\n }\n\n return ret;\n}\n\nfunction mapGraphqlScalarToTSTypeString(arg: any) {\n switch (arg.name) {\n case \"ID\":\n return \"string\";\n case \"String\":\n return \"string\";\n case \"Boolean\":\n return \"boolean\";\n case \"Int\":\n return \"number\";\n case \"Float\":\n return \"number\";\n case \"Date\":\n return \"Date\";\n case \"DateTime\":\n return \"Date\";\n case \"JSON\":\n return \"any\";\n default:\n return \"unknown\";\n }\n}\n\nfunction makeStringLiteralUnionFromEnum(enumType: GraphQLEnumType) {\n return enumType\n .getValues()\n .map((value) => `\"${value.name}\"`)\n .join(\" | \");\n}\n","import { access, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n getIntrospectedSchema,\n minifyIntrospectionQuery,\n} from \"@urql/introspection\";\nimport { uneval } from \"devalue\";\nimport type { GraphQLSchema } from \"graphql\";\nimport { generateClient } from \"./client\";\nimport { makeTSRepresentation } from \"./tsRepresentation\";\n\nexport async function generateFromSchema({\n outputPath,\n schema,\n rumbleImportPath = \"@m1212e/rumble/client\",\n apiUrl,\n useExternalUrqlClient = false,\n removeExisting = true,\n forceReactivity,\n autoIncludeIdField,\n}: {\n schema: GraphQLSchema;\n outputPath: string;\n rumbleImportPath?: string;\n apiUrl?: string;\n useExternalUrqlClient?: boolean | string;\n removeExisting?: boolean;\n forceReactivity?: boolean;\n autoIncludeIdField?: string | boolean;\n}) {\n if (removeExisting) {\n try {\n await access(outputPath);\n await rm(outputPath, { recursive: true, force: true });\n } catch (_error) {}\n }\n\n await mkdir(outputPath, { recursive: true });\n\n if (!outputPath.endsWith(\"/\")) {\n outputPath += \"/\";\n }\n\n const imports: string[] = [];\n let code = \"\";\n\n const typeMap = new Map<string, any>();\n for (const [key, object] of Object.entries(schema.getTypeMap())) {\n if (key.startsWith(\"__\")) continue;\n typeMap.set(key, object);\n }\n\n for (const [key, object] of typeMap.entries()) {\n const rep = makeTSRepresentation(object);\n\n if (rep === key) {\n continue;\n }\n\n code += `\nexport type ${key} = ${rep};\n\t\t`;\n }\n\n const schemaFileName = \"schema\";\n\n const c = generateClient({\n apiUrl,\n schemaPath: `./${schemaFileName}`,\n useExternalUrqlClient,\n rumbleImportPath,\n availableSubscriptions: new Set(\n Object.keys(schema.getSubscriptionType()?.getFields() || {}),\n ),\n forceReactivity,\n autoIncludeId: autoIncludeIdField,\n });\n\n imports.push(...c.imports);\n code += c.code;\n\n await Promise.all([\n writeFile(join(outputPath, \"client.ts\"), `${imports.join(\"\\n\")}\\n${code}`),\n writeFile(\n join(outputPath, `${schemaFileName}.ts`),\n `\nimport type { IntrospectionQuery } from \"graphql\";\nexport const schema = ${uneval(minifyIntrospectionQuery(getIntrospectedSchema(schema), { includeEnums: true, includeScalars: true, includeInputs: true }))} as IntrospectionQuery`,\n ),\n ]);\n}\n"],"mappings":"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"}
|