@chassdev/client-sdk 2.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/application-CMx2Si6C.mjs +58980 -0
  4. package/dist/application-DUpOI260.js +58 -0
  5. package/dist/chunk-Dqa2HsxW.mjs +20 -0
  6. package/dist/chunk-mLOUI7ql.js +1 -0
  7. package/dist/core/generated/index.d.ts +7 -0
  8. package/dist/core/generated/schema.d.ts +1 -0
  9. package/dist/core/index.d.ts +2 -0
  10. package/dist/core.cjs +1 -0
  11. package/dist/core.mjs +9 -0
  12. package/dist/generate/client-wrapper.d.ts +7 -0
  13. package/dist/generate/fs-utils.d.ts +4 -0
  14. package/dist/generate/generate-core-client.d.ts +10 -0
  15. package/dist/generate/generate-metadata-client.d.ts +5 -0
  16. package/dist/generate/genql/config.d.ts +9 -0
  17. package/dist/generate/genql/helpers/files.d.ts +2 -0
  18. package/dist/generate/genql/helpers/prettify.d.ts +2 -0
  19. package/dist/generate/genql/index.d.ts +2 -0
  20. package/dist/generate/genql/main.d.ts +2 -0
  21. package/dist/generate/genql/render/client/renderClient.d.ts +3 -0
  22. package/dist/generate/genql/render/common/RenderContext.d.ts +24 -0
  23. package/dist/generate/genql/render/common/comment.d.ts +8 -0
  24. package/dist/generate/genql/render/common/excludedTypes.d.ts +1 -0
  25. package/dist/generate/genql/render/common/relativeImportPath.d.ts +1 -0
  26. package/dist/generate/genql/render/common/renderTyping.d.ts +2 -0
  27. package/dist/generate/genql/render/common/support.d.ts +2 -0
  28. package/dist/generate/genql/render/requestTypes/inputObjectType.d.ts +3 -0
  29. package/dist/generate/genql/render/requestTypes/objectType.d.ts +4 -0
  30. package/dist/generate/genql/render/requestTypes/renderRequestTypes.d.ts +3 -0
  31. package/dist/generate/genql/render/requestTypes/requestTypeName.d.ts +2 -0
  32. package/dist/generate/genql/render/requestTypes/unionType.d.ts +3 -0
  33. package/dist/generate/genql/render/responseTypes/enumType.d.ts +3 -0
  34. package/dist/generate/genql/render/responseTypes/interfaceType.d.ts +3 -0
  35. package/dist/generate/genql/render/responseTypes/objectType.d.ts +3 -0
  36. package/dist/generate/genql/render/responseTypes/renderResponseTypes.d.ts +3 -0
  37. package/dist/generate/genql/render/responseTypes/scalarType.d.ts +3 -0
  38. package/dist/generate/genql/render/responseTypes/typeMappedAlias.d.ts +3 -0
  39. package/dist/generate/genql/render/responseTypes/unionType.d.ts +3 -0
  40. package/dist/generate/genql/render/schema/renderSchema.d.ts +3 -0
  41. package/dist/generate/genql/render/typeGuards/renderTypeGuards.d.ts +3 -0
  42. package/dist/generate/genql/render/typeMap/objectType.d.ts +4 -0
  43. package/dist/generate/genql/render/typeMap/renderTypeMap.d.ts +5 -0
  44. package/dist/generate/genql/render/typeMap/scalarType.d.ts +4 -0
  45. package/dist/generate/genql/render/typeMap/support.d.ts +1 -0
  46. package/dist/generate/genql/render/typeMap/unionType.d.ts +4 -0
  47. package/dist/generate/genql/runtime/batcher.d.ts +105 -0
  48. package/dist/generate/genql/runtime/createClient.d.ts +23 -0
  49. package/dist/generate/genql/runtime/error.d.ts +18 -0
  50. package/dist/generate/genql/runtime/fetcher.d.ts +10 -0
  51. package/dist/generate/genql/runtime/generateGraphqlOperation.d.ts +30 -0
  52. package/dist/generate/genql/runtime/index.d.ts +11 -0
  53. package/dist/generate/genql/runtime/linkTypeMap.d.ts +9 -0
  54. package/dist/generate/genql/runtime/typeSelection.d.ts +28 -0
  55. package/dist/generate/genql/runtime/types.d.ts +55 -0
  56. package/dist/generate/genql/tasks/clientTasks.d.ts +3 -0
  57. package/dist/generate/genql/tasks/schemaTask.d.ts +3 -0
  58. package/dist/generate/index.d.ts +2 -0
  59. package/dist/generate/runtime-templates.d.ts +4 -0
  60. package/dist/generate/twenty-client-template.d.ts +53 -0
  61. package/dist/generate.cjs +2082 -0
  62. package/dist/generate.mjs +595 -0
  63. package/dist/metadata/generated/index.d.ts +71 -0
  64. package/dist/metadata/generated/runtime/batcher.d.ts +105 -0
  65. package/dist/metadata/generated/runtime/createClient.d.ts +23 -0
  66. package/dist/metadata/generated/runtime/error.d.ts +18 -0
  67. package/dist/metadata/generated/runtime/fetcher.d.ts +10 -0
  68. package/dist/metadata/generated/runtime/generateGraphqlOperation.d.ts +30 -0
  69. package/dist/metadata/generated/runtime/index.d.ts +11 -0
  70. package/dist/metadata/generated/runtime/linkTypeMap.d.ts +9 -0
  71. package/dist/metadata/generated/runtime/typeSelection.d.ts +28 -0
  72. package/dist/metadata/generated/runtime/types.d.ts +55 -0
  73. package/dist/metadata/generated/schema.d.ts +11648 -0
  74. package/dist/metadata/generated/types.d.ts +5616 -0
  75. package/dist/metadata/index.d.ts +2 -0
  76. package/dist/metadata.cjs +6 -0
  77. package/dist/metadata.mjs +7653 -0
  78. package/dist/rest/index.d.ts +54 -0
  79. package/dist/rest.cjs +1 -0
  80. package/dist/rest.mjs +112 -0
  81. package/dist/shared/twenty-client-options.type.d.ts +9 -0
  82. package/dist/shared/twenty-client-run-as.type.d.ts +1 -0
  83. package/package.json +78 -0
@@ -0,0 +1,595 @@
1
+ import { t as e } from "./application-CMx2Si6C.mjs";
2
+ import { appendFile as t, copyFile as n, cp as r, mkdir as i, readdir as a, rename as o, rm as s, writeFile as c } from "node:fs/promises";
3
+ import { dirname as l, join as u, parse as ee, relative as d, resolve as f } from "node:path";
4
+ import { build as p } from "esbuild";
5
+ import { assertValidSchema as te, buildSchema as ne, getNamedType as m, isEnumType as h, isInputObjectType as g, isInterfaceType as _, isListType as re, isNamedType as ie, isNonNullType as ae, isObjectType as v, isScalarType as y, isUnionType as b, lexicographicSortSchema as oe, printSchema as se } from "graphql";
6
+ import ce from "lodash/camelCase.js";
7
+ import { promises as x, readFileSync as le } from "node:fs";
8
+ import { homedir as ue } from "node:os";
9
+ import de from "prettier/standalone";
10
+ import * as fe from "prettier/plugins/graphql";
11
+ import * as pe from "prettier/plugins/typescript";
12
+ import * as S from "prettier/plugins/estree";
13
+ import C from "lodash/uniq.js";
14
+ import { fileURLToPath as me } from "node:url";
15
+ //#region src/generate/client-wrapper.ts
16
+ var he = "// __STRIPPED_DURING_INJECTION_START__", ge = "// __STRIPPED_DURING_INJECTION_END__", w = "// __UPLOAD_FILE_START__", T = "// __UPLOAD_FILE_END__", E = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), D = (e, t) => {
17
+ let n = e;
18
+ return n = n.replace(RegExp(`${E(he)}[\\s\\S]*?${E(ge)}\\n?`), ""), n = n.replace("'__TWENTY_DEFAULT_URL__'", t.defaultUrl), n = n.replace(/TwentyGeneratedClient/g, t.apiClientName), t.includeUploadFile ? (n = n.replace(RegExp(`\\s*${E(w)}\\n`), "\n"), n = n.replace(RegExp(`\\s*${E(T)}\\n`), "\n")) : n = n.replace(RegExp(`\\s*${E(w)}[\\s\\S]*?${E(T)}\\n?`), "\n"), `\n// ${t.apiClientName} (auto-injected by twenty-client-sdk)\n${n}`;
19
+ }, O = (e) => i(e, { recursive: !0 }), k = async (e) => {
20
+ let t;
21
+ try {
22
+ t = await a(e);
23
+ } catch (t) {
24
+ if (t instanceof Error && "code" in t && t.code === "ENOENT") {
25
+ await i(e, { recursive: !0 });
26
+ return;
27
+ }
28
+ throw t;
29
+ }
30
+ await Promise.all(t.map((t) => s(u(e, t), {
31
+ recursive: !0,
32
+ force: !0
33
+ })));
34
+ }, _e = async (e, t) => {
35
+ try {
36
+ await o(e, t);
37
+ } catch (n) {
38
+ if (n instanceof Error && "code" in n && n.code === "EXDEV") await r(e, t, { recursive: !0 }), await s(e, {
39
+ recursive: !0,
40
+ force: !0
41
+ });
42
+ else throw n;
43
+ }
44
+ }, A = (e) => s(e, {
45
+ recursive: !0,
46
+ force: !0
47
+ }), ve = (e) => {
48
+ let { root: t } = ee(e), n = e.slice(t.length).split(/[\\/]/).filter(Boolean).length, r = f(ue()), i = e === r || r.startsWith(`${e}/`);
49
+ if (e === t || n < 2 || i) throw Error(`Refusing to recursively clear unsafe path: ${e}`);
50
+ }, j = async (e, t = !1) => {
51
+ let n = f(...e);
52
+ t && (ve(n), await x.rm(n, {
53
+ recursive: !0,
54
+ force: !0
55
+ })), await x.mkdir(n, { recursive: !0 });
56
+ }, M = async (e, t) => {
57
+ let n = f(...e, "..");
58
+ await x.mkdir(n, { recursive: !0 }), await x.writeFile(f(...e), t);
59
+ }, N = "./runtime", P = (e) => e ? `${e.name}GenqlSelection` : "", F = (e) => {
60
+ let t = e.config?.endpoint ? `"${e.config.endpoint}"` : "undefined", n = e.config?.fetchImport;
61
+ return `
62
+ function(options${t ? "?" : ""}: ClientOptions): Client {
63
+ return createClientOriginal({
64
+ url: ${t},
65
+ ${n ? "fetch," : ""}
66
+ ...options,
67
+ queryRoot: typeMap.Query!,
68
+ mutationRoot: typeMap.Mutation!,
69
+ subscriptionRoot: typeMap.Subscription!,
70
+ }) as any
71
+ }`;
72
+ }, ye = (e, t) => {
73
+ let n = e.getQueryType(), r = e.getMutationType(), i = e.getSubscriptionType(), a = t.config?.fetchImport || "";
74
+ t.addCodeBlock(`
75
+ ${a}
76
+ ${be({
77
+ mutationType: r,
78
+ queryType: n,
79
+ subscriptionType: i
80
+ })}
81
+ import {
82
+ linkTypeMap,
83
+ createClient as createClientOriginal,
84
+ generateGraphqlOperation,
85
+ type FieldsSelection, type GraphqlOperation, type ClientOptions, GenqlError
86
+ } from '${N}'
87
+ export type { FieldsSelection } from '${N}'
88
+ export { GenqlError }
89
+
90
+ import types from './types'
91
+ export * from './schema'
92
+ const typeMap = linkTypeMap(types as any)
93
+
94
+ ${xe({
95
+ mutationType: r,
96
+ queryType: n,
97
+ subscriptionType: i
98
+ })}
99
+
100
+ export const createClient = ${F(t)}
101
+
102
+ export const everything = {
103
+ __scalar: true
104
+ }
105
+ `), n && t.addCodeBlock(`
106
+ export type QueryResult<fields extends ${P(n)}> = FieldsSelection<${n.name}, fields>
107
+ export const generateQueryOp: (fields: ${P(n)} & { __name?: string }) => GraphqlOperation = function(fields) {
108
+ return generateGraphqlOperation('query', typeMap.Query!, fields as any)
109
+ }
110
+ `), r && t.addCodeBlock(`
111
+ export type MutationResult<fields extends ${P(r)}> = FieldsSelection<${r.name}, fields>
112
+ export const generateMutationOp: (fields: ${P(r)} & { __name?: string }) => GraphqlOperation = function(fields) {
113
+ return generateGraphqlOperation('mutation', typeMap.Mutation!, fields as any)
114
+ }
115
+ `), i && t.addCodeBlock(`
116
+ export type SubscriptionResult<fields extends ${P(i)}> = FieldsSelection<${i.name}, fields>
117
+ export const generateSubscriptionOp: (fields: ${P(i)} & { __name?: string }) => GraphqlOperation = function(fields) {
118
+ return generateGraphqlOperation('subscription', typeMap.Subscription!, fields as any)
119
+ }
120
+ `);
121
+ };
122
+ function be({ queryType: e, mutationType: t, subscriptionType: n }) {
123
+ let r = [];
124
+ return e && r.push(P(e), e.name), t && r.push(P(t), t.name), n && r.push(P(n), n.name), r.length > 0 ? `import type {${r.join(",")}} from './schema'` : "";
125
+ }
126
+ function xe({ queryType: e, mutationType: t, subscriptionType: n }) {
127
+ let r = "";
128
+ return e && (r += `
129
+ query<R extends ${P(e)}>(
130
+ request: R & { __name?: string },
131
+ ): Promise<FieldsSelection<${e.name}, R>>
132
+ `), t && (r += `
133
+ mutation<R extends ${P(t)}>(
134
+ request: R & { __name?: string },
135
+ ): Promise<FieldsSelection<${t.name}, R>>
136
+ `), `
137
+ export interface Client {
138
+ ${r}
139
+ }
140
+ `;
141
+ }
142
+ //#endregion
143
+ //#region src/generate/genql/render/common/excludedTypes.ts
144
+ var I = [
145
+ "__Schema",
146
+ "__Type",
147
+ "__TypeKind",
148
+ "__Field",
149
+ "__InputValue",
150
+ "__EnumValue",
151
+ "__Directive",
152
+ "__DirectiveLocation"
153
+ ], Se = async (e, t) => {
154
+ try {
155
+ return await de.format(e, {
156
+ parser: t,
157
+ plugins: [
158
+ fe,
159
+ pe,
160
+ S
161
+ ],
162
+ semi: !1,
163
+ singleQuote: !0,
164
+ trailingComma: "all",
165
+ printWidth: 80
166
+ });
167
+ } catch {
168
+ return e;
169
+ }
170
+ }, Ce = (e, t) => {
171
+ let n = d(e, t);
172
+ return n[0] === "." ? n : `./${n}`;
173
+ }, L = class {
174
+ constructor(e, t) {
175
+ this.schema = e, this.config = t, this.codeBlocks = [], this.imports = {}, this.importAliasCounter = 0;
176
+ }
177
+ addCodeBlock(e) {
178
+ e && this.codeBlocks.push(e);
179
+ }
180
+ addImport(e, t, n, r, i) {
181
+ this.config && this.config.output && (e = r ? e : Ce(this.config.output, e)), this.imports[e] || (this.imports[e] = []);
182
+ let a = this.imports[e], o = a.find((e) => t && e.isDefault || !t && e.module === n);
183
+ if (o) return o.alias;
184
+ this.importAliasCounter++;
185
+ let s = i ? void 0 : `a${this.importAliasCounter}`;
186
+ return a.push({
187
+ isDefault: t,
188
+ module: n,
189
+ alias: s
190
+ }), s;
191
+ }
192
+ getImportBlock() {
193
+ let e = [];
194
+ if (Object.keys(this.imports).forEach((t) => {
195
+ let n = this.imports[t].find((e) => e.isDefault), r = this.imports[t].filter((e) => !e.isDefault), i = [];
196
+ n && i.push(n.alias || ""), r.length > 0 && i.push(`{${r.map((e) => e.alias ? `${e.module} as ${e.alias}` : e.module).join(",")}}`), e.push(`import ${i.join(",")} from '${t}'`);
197
+ }), e.length > 0) return e.join("\n");
198
+ }
199
+ async toCode(e, t = !1) {
200
+ let n = [...this.codeBlocks];
201
+ if (e && (e === "typescript" || e === "babel")) {
202
+ let e = this.getImportBlock();
203
+ e && n.unshift(e);
204
+ }
205
+ return e && t ? Se(n.join("\n\n"), e) : e ? n.join("\n\n") : n.join("");
206
+ }
207
+ }, R = (e) => {
208
+ let t = [];
209
+ return e.deprecated && t.push(`@deprecated ${e.deprecated.replace(/\s/g, " ")}`), e.text && t.push(...e.text.split("\n")), t.length > 0 ? t.length === 1 ? `\n/** ${t[0]} */\n` : `\n/**\n${t.map((e) => ` * ${e}`).join("\n")}\n */\n` : "";
210
+ }, z = (e) => R({ text: e.description }), B = (e) => R({
211
+ deprecated: e.deprecationReason,
212
+ text: e.description
213
+ }), V = (e) => R({ text: e.description }), H = (e, t, n, r, i, a = (e) => e) => {
214
+ if (n) if (i) {
215
+ if (ae(e)) return `: ${H(e.ofType, !0, !1, r, i, a)}`;
216
+ {
217
+ let t = H(e, !0, !1, r, i, a);
218
+ return r ? `?: ${t}` : `?: (${t} | null)`;
219
+ }
220
+ } else return `: ${H(e, !1, !1, r, i, a)}`;
221
+ if (ie(e)) {
222
+ let n = e.name;
223
+ y(e) && (n = `Scalars['${n}']`);
224
+ let i = a(n);
225
+ return r ? t ? i : `(${i} | undefined)` : t ? i : `(${i} | null)`;
226
+ }
227
+ if (re(e)) {
228
+ let n = `${H(e.ofType, !1, !1, r, i, a)}[]`;
229
+ return r ? t ? n : `(${n} | undefined)` : t ? n : `(${n} | null)`;
230
+ }
231
+ return H(e.ofType, !0, !1, r, i, a);
232
+ }, U = (e, t, n, r = !0, i = void 0) => H(e, !1, r, t, n, i);
233
+ //#endregion
234
+ //#region src/generate/genql/render/common/support.ts
235
+ function W(e) {
236
+ e ||= {};
237
+ let t = {};
238
+ return Object.keys(e).sort().forEach(function(n) {
239
+ t[n] = e[n];
240
+ }), t;
241
+ }
242
+ //#endregion
243
+ //#region src/generate/genql/render/requestTypes/inputObjectType.ts
244
+ var we = (e, t) => {
245
+ let n = e.getFields();
246
+ t.config?.sortProperties && (n = W(n));
247
+ let r = Object.keys(n).map((e) => {
248
+ let t = n[e];
249
+ return `${V(t)}${t.name}${U(t.type, !1, !0)}`;
250
+ });
251
+ t.addCodeBlock(`${z(e)}export interface ${e.name} {${r.join(",")}}`);
252
+ }, Te = " ", Ee = (e, t) => {
253
+ let n = e.getFields();
254
+ t.config?.sortProperties && (n = W(n));
255
+ let r = Object.keys(n).map((e) => {
256
+ let t = n[e], r = [], i = m(t.type), a = !(h(i) || y(i)), o = t.args.length > 0, s = De(t), c = !s.match(/[^?]:/);
257
+ return o && (a ? r.push(`(${P(i)} & { __args${c ? "?" : ""}: ${s} })`) : r.push(`{ __args: ${s} }`)), c && !a && r.push("boolean | number"), !o && a && r.push(P(i)), `${B(t)}${t.name}?: ${r.join(" | ")}`;
258
+ });
259
+ if (_(e) && t.schema) {
260
+ let n = t.schema.getPossibleTypes(e).map((e) => `on_${e.name}?: ${P(e)}`);
261
+ t.config?.sortProperties && (n = n.sort()), r = r.concat(n);
262
+ }
263
+ r.push("__typename?: boolean | number"), r.push("__scalar?: boolean | number"), r = r.map((e) => e.split("\n").filter(Boolean).map((e) => Te + e).join("\n")), t.addCodeBlock(`${z(e)}export interface ${P(e)}{\n${r.join("\n")}\n}`);
264
+ }, De = (e) => `{${e.args.map((e) => `${V(e)}${e.name}${U(e.type, !1, !0)}`).join(", ")}}`, Oe = (e, t) => {
265
+ let n = [...e.getTypes()];
266
+ t.config?.sortProperties && (n = n.sort());
267
+ let r = n.map((e) => `on_${e.name}?:${P(e)}`), i = C(n.map((e) => e.getInterfaces()).flat());
268
+ r.push(...i.map((e) => `on_${e.name}?: ${P(e)}`)), r.push("__typename?: boolean | number"), t.addCodeBlock(`${z(e)}export interface ${P(e)}{\n${r.map((e) => " " + e).join(",\n")}\n}`);
269
+ }, ke = (e, t) => {
270
+ let n = e.getTypeMap();
271
+ t.config?.sortProperties && (n = W(n));
272
+ for (let e in n) {
273
+ if (I.includes(e)) continue;
274
+ let r = n[e];
275
+ (v(r) || _(r)) && Ee(r, t), g(r) && we(r, t), b(r) && Oe(r, t);
276
+ }
277
+ let r = [
278
+ {
279
+ type: e.getQueryType(),
280
+ name: "QueryGenqlSelection"
281
+ },
282
+ {
283
+ type: e.getMutationType(),
284
+ name: "MutationGenqlSelection"
285
+ },
286
+ {
287
+ type: e.getSubscriptionType(),
288
+ name: "SubscriptionGenqlSelection"
289
+ }
290
+ ].map(Ae).filter(Boolean).join("\n");
291
+ t.addCodeBlock(r);
292
+ };
293
+ function Ae({ type: e, name: t }) {
294
+ return e && P(e) !== t ? `export type ${t} = ${P(e)}` : "";
295
+ }
296
+ //#endregion
297
+ //#region src/generate/genql/render/responseTypes/enumType.ts
298
+ var je = (e, t) => {
299
+ let n = e.getValues().map((e) => `'${e.name}'`);
300
+ t.addCodeBlock(`${z(e)}export type ${e.name} = ${n.join(" | ")}`);
301
+ }, Me = " ", G = (e, t) => {
302
+ let n = e.getFields();
303
+ t.config?.sortProperties && (n = W(n));
304
+ let r = Object.keys(n).map((e) => n[e]);
305
+ if (!t.schema) throw Error("no schema provided");
306
+ let i = v(e) ? [e.name] : t.schema.getPossibleTypes(e).map((e) => e.name), a = r.map((e) => `${B(e)}${e.name}${U(e.type, !0, !0)}`).concat([`__typename: ${i.length > 0 ? i.map((e) => `'${e}'`).join("|") : "string"}`]);
307
+ a = a.map((e) => e.split("\n").filter(Boolean).map((e) => Me + e).join("\n")), t.addCodeBlock(`${z(e)}export interface ${e.name} {\n${a.join("\n")}\n}`);
308
+ }, Ne = {
309
+ Int: "number",
310
+ Float: "number",
311
+ String: "string",
312
+ Boolean: "boolean",
313
+ ID: "string"
314
+ }, K = (e, t) => ({
315
+ ...Ne,
316
+ ...t?.config?.scalarTypes || {}
317
+ })[e.name] || "any";
318
+ //#endregion
319
+ //#region src/generate/genql/render/responseTypes/scalarType.ts
320
+ function Pe(e, t) {
321
+ let n = "";
322
+ return t.forEach((t) => {
323
+ n += ` ${t.name}: ${K(t, e)},\n`;
324
+ }), `export type Scalars = {\n${n}}`;
325
+ }
326
+ //#endregion
327
+ //#region src/generate/genql/render/responseTypes/unionType.ts
328
+ var Fe = (e, t) => {
329
+ let n = e.getTypes().map((e) => e.name);
330
+ t.config?.sortProperties && (n = n.sort()), t.addCodeBlock(`${z(e)}export type ${e.name} = (${n.join(" | ")}) & { __isUnion?: true }`);
331
+ }, Ie = (e, t) => {
332
+ if (!t.schema) throw Error("schema is required to render unionType");
333
+ let n = t.schema.getPossibleTypes(e).map((e) => e.name);
334
+ n.length ? t.addCodeBlock(`${z(e)}export type ${e.name} = (${n.join(" | ")}) & { __isUnion?: true }`) : G(e, t);
335
+ }, Le = (e, t) => {
336
+ let n = e.getTypeMap();
337
+ t.config?.sortProperties && (n = W(n)), t.addCodeBlock(Pe(t, Object.values(n).filter((e) => y(e))));
338
+ for (let e in n) {
339
+ if (I.includes(e)) continue;
340
+ let r = n[e];
341
+ h(r) && je(r, t), b(r) && Fe(r, t), v(r) && G(r, t), _(r) && Ie(r, t);
342
+ }
343
+ let r = [
344
+ {
345
+ type: e.getQueryType(),
346
+ name: "Query"
347
+ },
348
+ {
349
+ type: e.getMutationType(),
350
+ name: "Mutation"
351
+ },
352
+ {
353
+ type: e.getSubscriptionType(),
354
+ name: "Subscription"
355
+ }
356
+ ].map(Re).filter(Boolean).join("\n");
357
+ t.addCodeBlock(r);
358
+ };
359
+ function Re({ type: e, name: t }) {
360
+ return e && e.name !== t ? `export type ${t} = ${e.name}` : "";
361
+ }
362
+ //#endregion
363
+ //#region src/generate/genql/render/schema/renderSchema.ts
364
+ var ze = (e, t) => {
365
+ t.addCodeBlock(se(e));
366
+ }, q = (e, t) => `
367
+ const ${e}_possibleTypes: string[] = [${t.map((e) => `'${e}'`).join(",")}]
368
+ export const is${e} = (obj?: { __typename?: any } | null): obj is ${e} => {
369
+ if (!obj?.__typename) throw new Error('__typename is missing in "is${e}"')
370
+ return ${e}_possibleTypes.includes(obj.__typename)
371
+ }
372
+ `, Be = (e, t) => {
373
+ let n = e.getTypeMap();
374
+ for (let r in n) {
375
+ if (I.includes(r)) continue;
376
+ let i = n[r];
377
+ if (b(i)) {
378
+ let e = i.getTypes().map((e) => e.name);
379
+ t.addCodeBlock(q(i.name, e));
380
+ } else if (_(i)) {
381
+ let n = e.getPossibleTypes(i).map((e) => e.name);
382
+ t.addCodeBlock(q(i.name, n));
383
+ } else v(i) && t.addCodeBlock(q(i.name, [i.name]));
384
+ }
385
+ };
386
+ //#endregion
387
+ //#region src/generate/genql/render/typeMap/support.ts
388
+ function J(e) {
389
+ return e ? Object.keys(e).length === 0 : !0;
390
+ }
391
+ //#endregion
392
+ //#region src/generate/genql/render/typeMap/objectType.ts
393
+ var Y = (e, t) => {
394
+ let n = Object.keys(e.getFields()).reduce((t, n) => {
395
+ let r = e.getFields()[n], i = { type: m(r.type).name };
396
+ t[n] = i;
397
+ let a = r.args || [];
398
+ return a.length > 0 && (i.args = a.reduce((e, t) => {
399
+ let n = t.type.toString(), r = m(t.type).name;
400
+ return e[t.name] = [r], r !== n && e[t.name]?.push(n), e;
401
+ }, {})), t;
402
+ }, {});
403
+ return _(e) && t.schema && t.schema.getPossibleTypes(e).map((e) => {
404
+ J(n) || (n[`on_${e.name}`] = { type: e.name });
405
+ }), J(n) || (n.__typename = { type: "String" }), n;
406
+ }, Ve = (e, t) => {
407
+ let n = e.getTypes(), r = n.reduce((e, t) => (e[`on_${t.name}`] = { type: t.name }, e), {});
408
+ return C(n.map((e) => e.getInterfaces()).flat()).forEach((e) => {
409
+ r[`on_${e.name}`] = { type: e.name };
410
+ }), r.__typename = { type: "String" }, r;
411
+ }, He = (e, t) => {
412
+ let n = {
413
+ scalars: [],
414
+ types: {}
415
+ };
416
+ Object.keys(e.getTypeMap()).filter((e) => !I.includes(e)).map((t) => e.getTypeMap()[t]).map((e) => {
417
+ v(e) || _(e) || g(e) ? n.types[e.name] = Y(e, t) : b(e) ? n.types[e.name] = Ve(e, t) : (y(e) || h(e)) && (n.scalars.push(e.name), n.types[e.name] = {});
418
+ });
419
+ let r = e.getQueryType();
420
+ r?.name && r?.name !== "Query" && (delete n.types[r.name], n.types.Query = Y(r, t));
421
+ let i = e.getMutationType();
422
+ i?.name && i.name !== "Mutation" && (delete n.types[i.name], n.types.Mutation = Y(i, t));
423
+ let a = e.getSubscriptionType();
424
+ a?.name && a.name !== "Subscription" && (delete n.types[a.name], n.types.Subscription = Y(a, t)), t.addCodeBlock(JSON.stringify(Ue(n), null, 4));
425
+ };
426
+ function Ue(e) {
427
+ let t = Object.assign({}, ...Object.keys(e.types).map((e, t) => ({ [e]: t })));
428
+ return {
429
+ scalars: e.scalars.map((e) => t[e]),
430
+ types: Object.assign({}, ...Object.keys(e.types || {}).map((n) => {
431
+ let r = e.types[n] || {}, i = Object.assign({}, ...Object.keys(r).map((e) => {
432
+ let n = r[e];
433
+ if (!n) throw Error("no content in field " + e);
434
+ let [i, a] = [n.type, n.args], o = [i ? t[i] : -1];
435
+ return a && (o[1] = Object.assign({}, ...Object.keys(a || {}).map((e) => {
436
+ let n = a?.[e];
437
+ if (!n) throw Error("replaceTypeNamesWithIndexes: no arg for " + e);
438
+ return { [e]: [t[n[0]], ...n.slice(1)] };
439
+ }))), { [e]: o };
440
+ }));
441
+ return { [n]: { ...i } };
442
+ }))
443
+ };
444
+ }
445
+ //#endregion
446
+ //#region src/generate/genql/runtime/batcher.ts?raw
447
+ var We = "import type { GraphqlOperation } from './generateGraphqlOperation'\nimport { GenqlError } from './error'\n\ntype Variables = Record<string, any>\n\ntype QueryError = Error & {\n message: string\n\n locations?: Array<{\n line: number\n column: number\n }>\n path?: any\n rid: string\n details?: Record<string, any>\n}\ntype Result = {\n data: Record<string, any>\n errors: Array<QueryError>\n}\ntype Fetcher = (\n batchedQuery: GraphqlOperation | Array<GraphqlOperation>,\n) => Promise<Array<Result>>\ntype Options = {\n batchInterval?: number\n shouldBatch?: boolean\n maxBatchSize?: number\n}\ntype Queue = Array<{\n request: GraphqlOperation\n resolve: (...args: Array<any>) => any\n reject: (...args: Array<any>) => any\n}>\n\n/**\n * takes a list of requests (queue) and batches them into a single server request.\n * It will then resolve each individual requests promise with the appropriate data.\n * @private\n * @param {QueryBatcher} client - the client to use\n * @param {Queue} queue - the list of requests to batch\n */\nfunction dispatchQueueBatch(client: QueryBatcher, queue: Queue): void {\n let batchedQuery: any = queue.map((item) => item.request)\n\n if (batchedQuery.length === 1) {\n batchedQuery = batchedQuery[0]\n }\n\n client.fetcher(batchedQuery).then((responses: any) => {\n if (queue.length === 1 && !Array.isArray(responses)) {\n if (responses.errors && responses.errors.length) {\n queue[0].reject(\n new GenqlError(responses.errors, responses.data),\n )\n return\n }\n\n queue[0].resolve(responses)\n return\n } else if (responses.length !== queue.length) {\n throw new Error('response length did not match query length')\n }\n\n for (let i = 0; i < queue.length; i++) {\n if (responses[i].errors && responses[i].errors.length) {\n queue[i].reject(\n new GenqlError(responses[i].errors, responses[i].data),\n )\n } else {\n queue[i].resolve(responses[i])\n }\n }\n }).catch((error: any) => {\n // Reject every queued request if the batched fetch fails (e.g. network\n // error), otherwise callers hang forever and the rejection is unhandled.\n for (const item of queue) {\n item.reject(error)\n }\n })\n}\n\n/**\n * creates a list of requests to batch according to max batch size.\n * @private\n * @param {QueryBatcher} client - the client to create list of requests from from\n * @param {Options} options - the options for the batch\n */\nfunction dispatchQueue(client: QueryBatcher, options: Options): void {\n const queue = client._queue\n const maxBatchSize = options.maxBatchSize || 0\n client._queue = []\n\n if (maxBatchSize > 0 && maxBatchSize < queue.length) {\n for (let i = 0; i < queue.length / maxBatchSize; i++) {\n dispatchQueueBatch(\n client,\n queue.slice(i * maxBatchSize, (i + 1) * maxBatchSize),\n )\n }\n } else {\n dispatchQueueBatch(client, queue)\n }\n}\n/**\n * Create a batcher client.\n * @param {Fetcher} fetcher - A function that can handle the network requests to graphql endpoint\n * @param {Options} options - the options to be used by client\n * @param {boolean} options.shouldBatch - should the client batch requests. (default true)\n * @param {integer} options.batchInterval - duration (in MS) of each batch window. (default 6)\n * @param {integer} options.maxBatchSize - max number of requests in a batch. (default 0)\n * @param {boolean} options.defaultHeaders - default headers to include with every request\n *\n * @example\n * const fetcher = batchedQuery => fetch('path/to/graphql', {\n * method: 'post',\n * headers: {\n * Accept: 'application/json',\n * 'Content-Type': 'application/json',\n * },\n * body: JSON.stringify(batchedQuery),\n * credentials: 'include',\n * })\n * .then(response => response.json())\n *\n * const client = new QueryBatcher(fetcher, { maxBatchSize: 10 })\n */\n\nexport class QueryBatcher {\n fetcher: Fetcher\n _options: Options\n _queue: Queue\n\n constructor(\n fetcher: Fetcher,\n {\n batchInterval = 6,\n shouldBatch = true,\n maxBatchSize = 0,\n }: Options = {},\n ) {\n this.fetcher = fetcher\n this._options = {\n batchInterval,\n shouldBatch,\n maxBatchSize,\n }\n this._queue = []\n }\n\n /**\n * Fetch will send a graphql request and return the parsed json.\n * @param {string} query - the graphql query.\n * @param {Variables} variables - any variables you wish to inject as key/value pairs.\n * @param {[string]} operationName - the graphql operationName.\n * @param {Options} overrides - the client options overrides.\n *\n * @return {promise} resolves to parsed json of server response\n *\n * @example\n * client.fetch(`\n * query getHuman($id: ID!) {\n * human(id: $id) {\n * name\n * height\n * }\n * }\n * `, { id: \"1001\" }, 'getHuman')\n * .then(human => {\n * // do something with human\n * console.log(human);\n * });\n */\n fetch(\n query: string,\n variables?: Variables,\n operationName?: string,\n overrides: Options = {},\n ): Promise<Result> {\n const request: GraphqlOperation = {\n query,\n }\n const options = Object.assign({}, this._options, overrides)\n\n if (variables) {\n request.variables = variables\n }\n\n if (operationName) {\n request.operationName = operationName\n }\n\n const promise = new Promise<Result>((resolve, reject) => {\n this._queue.push({\n request,\n resolve,\n reject,\n })\n\n if (this._queue.length === 1) {\n if (options.shouldBatch) {\n setTimeout(\n () => dispatchQueue(this, options),\n options.batchInterval,\n )\n } else {\n dispatchQueue(this, options)\n }\n }\n })\n return promise\n }\n\n /**\n * Fetch will send a graphql request and return the parsed json.\n * @param {string} query - the graphql query.\n * @param {Variables} variables - any variables you wish to inject as key/value pairs.\n * @param {[string]} operationName - the graphql operationName.\n * @param {Options} overrides - the client options overrides.\n *\n * @return {Promise<Array<Result>>} resolves to parsed json of server response\n *\n * @example\n * client.forceFetch(`\n * query getHuman($id: ID!) {\n * human(id: $id) {\n * name\n * height\n * }\n * }\n * `, { id: \"1001\" }, 'getHuman')\n * .then(human => {\n * // do something with human\n * console.log(human);\n * });\n */\n forceFetch(\n query: string,\n variables?: Variables,\n operationName?: string,\n overrides: Options = {},\n ): Promise<Result> {\n const request: GraphqlOperation = {\n query,\n }\n const options = Object.assign({}, this._options, overrides, {\n shouldBatch: false,\n })\n\n if (variables) {\n request.variables = variables\n }\n\n if (operationName) {\n request.operationName = operationName\n }\n\n const promise = new Promise<Result>((resolve, reject) => {\n const client = new QueryBatcher(this.fetcher, this._options)\n client._queue = [\n {\n request,\n resolve,\n reject,\n },\n ]\n dispatchQueue(client, options)\n })\n return promise\n }\n}\n", Ge = "\nimport { type BatchOptions, createFetcher } from './fetcher'\nimport type { ExecutionResult, LinkedType } from './types'\nimport {\n generateGraphqlOperation,\n type GraphqlOperation,\n} from './generateGraphqlOperation'\n\nexport type Headers =\n | HeadersInit\n | (() => HeadersInit)\n | (() => Promise<HeadersInit>)\n\nexport type BaseFetcher = (\n operation: GraphqlOperation | GraphqlOperation[],\n) => Promise<ExecutionResult | ExecutionResult[]>\n\nexport type ClientOptions = Omit<RequestInit, 'body' | 'headers'> & {\n url?: string\n batch?: BatchOptions | boolean\n fetcher?: BaseFetcher\n fetch?: Function\n headers?: Headers\n}\n\nexport const createClient = ({\n queryRoot,\n mutationRoot,\n subscriptionRoot,\n ...options\n}: ClientOptions & {\n queryRoot?: LinkedType\n mutationRoot?: LinkedType\n subscriptionRoot?: LinkedType\n}) => {\n const fetcher = createFetcher(options)\n const client: {\n query?: Function\n mutation?: Function\n } = {}\n\n if (queryRoot) {\n client.query = (request: any) => {\n if (!queryRoot) throw new Error('queryRoot argument is missing')\n\n const resultPromise = fetcher(\n generateGraphqlOperation('query', queryRoot, request),\n )\n\n return resultPromise\n }\n }\n if (mutationRoot) {\n client.mutation = (request: any) => {\n if (!mutationRoot)\n throw new Error('mutationRoot argument is missing')\n\n const resultPromise = fetcher(\n generateGraphqlOperation('mutation', mutationRoot, request),\n )\n\n return resultPromise\n }\n }\n\n return client as any\n}\n", Ke = "export class GenqlError extends Error {\n errors: Array<GraphqlError> = []\n /**\n * Partial data returned by the server\n */\n data?: any\n constructor(errors: any[], data: any) {\n let message = Array.isArray(errors)\n ? errors.map((x) => x?.message || '').join('\\n')\n : ''\n if (!message) {\n message = 'GraphQL error'\n }\n super(message)\n this.errors = errors\n this.data = data\n }\n}\n\ninterface GraphqlError {\n message: string\n locations?: Array<{\n line: number\n column: number\n }>\n path?: string[]\n extensions?: Record<string, any>\n}\n", qe = "import { QueryBatcher } from './batcher'\n\nimport type { ClientOptions } from './createClient'\nimport type { GraphqlOperation } from './generateGraphqlOperation'\nimport { GenqlError } from './error'\n\nexport interface Fetcher {\n (gql: GraphqlOperation): Promise<any>\n}\n\nexport type BatchOptions = {\n batchInterval?: number // ms\n maxBatchSize?: number\n}\n\nconst DEFAULT_BATCH_OPTIONS = {\n maxBatchSize: 10,\n batchInterval: 40,\n}\n\nexport const createFetcher = ({\n url,\n headers = {},\n fetcher,\n fetch: _fetch,\n batch = false,\n ...rest\n}: ClientOptions): Fetcher => {\n if (!url && !fetcher) {\n throw new Error('url or fetcher is required')\n }\n if (!fetcher) {\n fetcher = async (body) => {\n let headersObject =\n typeof headers == 'function' ? await headers() : headers\n headersObject = headersObject || {}\n if (typeof fetch === 'undefined' && !_fetch) {\n throw new Error(\n 'Global `fetch` function is not available, pass a fetch polyfill to Genql `createClient`',\n )\n }\n let fetchImpl = _fetch || fetch\n const res = await fetchImpl(url!, {\n headers: {\n 'Content-Type': 'application/json',\n ...headersObject,\n },\n method: 'POST',\n body: JSON.stringify(body),\n ...rest,\n })\n if (!res.ok) {\n throw new Error(`${res.statusText}: ${await res.text()}`)\n }\n const json = await res.json()\n return json\n }\n }\n\n if (!batch) {\n return async (body) => {\n const json = await fetcher!(body)\n if (Array.isArray(json)) {\n return json.map((json) => {\n if (json?.errors?.length) {\n throw new GenqlError(json.errors || [], json.data)\n }\n return json.data\n })\n } else {\n if (json?.errors?.length) {\n throw new GenqlError(json.errors || [], json.data)\n }\n return json.data\n }\n }\n }\n\n const batcher = new QueryBatcher(\n async (batchedQuery) => {\n // console.log(batchedQuery) // [{ query: 'query{user{age}}', variables: {} }, ...]\n const json = await fetcher!(batchedQuery)\n return json as any\n },\n batch === true ? DEFAULT_BATCH_OPTIONS : batch,\n )\n\n return async ({ query, variables }) => {\n const json = await batcher.fetch(query, variables)\n if (json?.data) {\n return json.data\n }\n throw new Error(\n 'Genql batch fetcher returned unexpected result ' + JSON.stringify(json),\n )\n }\n}\n", Je = "import type { LinkedField, LinkedType } from './types'\n\nexport interface Args {\n [arg: string]: any | undefined\n}\n\nexport interface Fields {\n [field: string]: Request\n}\n\nexport type Request = boolean | number | Fields\n\nexport interface Variables {\n [name: string]: {\n value: any\n typing: [LinkedType, string]\n }\n}\n\nexport interface Context {\n root: LinkedType\n varCounter: number\n variables: Variables\n fragmentCounter: number\n fragments: string[]\n}\n\nexport interface GraphqlOperation {\n query: string\n variables?: { [name: string]: any }\n operationName?: string\n}\n\nconst parseRequest = (\n request: Request | undefined,\n ctx: Context,\n path: string[],\n): string => {\n if (typeof request === 'object' && '__args' in request) {\n const args: any = request.__args\n let fields: Request | undefined = { ...request }\n delete fields.__args\n const argNames = Object.keys(args)\n\n if (argNames.length === 0) {\n return parseRequest(fields, ctx, path)\n }\n\n const field = getFieldFromPath(ctx.root, path)\n\n const argStrings = argNames.map((argName) => {\n ctx.varCounter++\n const varName = `v${ctx.varCounter}`\n\n const typing = field.args && field.args[argName] // typeMap used here, .args\n\n if (!typing) {\n throw new Error(\n `no typing defined for argument \\`${argName}\\` in path \\`${path.join(\n '.',\n )}\\``,\n )\n }\n\n ctx.variables[varName] = {\n value: args[argName],\n typing,\n }\n\n return `${argName}:$${varName}`\n })\n return `(${argStrings})${parseRequest(fields, ctx, path)}`\n } else if (typeof request === 'object' && Object.keys(request).length > 0) {\n const fields = request\n const fieldNames = Object.keys(fields).filter((k) => Boolean(fields[k]))\n\n if (fieldNames.length === 0) {\n throw new Error(\n `field selection should not be empty: ${path.join('.')}`,\n )\n }\n\n const type =\n path.length > 0 ? getFieldFromPath(ctx.root, path).type : ctx.root\n const scalarFields = type.scalar\n\n let scalarFieldsFragment: string | undefined\n\n if (fieldNames.includes('__scalar')) {\n const falsyFieldNames = new Set(\n Object.keys(fields).filter((k) => !Boolean(fields[k])),\n )\n if (scalarFields?.length) {\n ctx.fragmentCounter++\n scalarFieldsFragment = `f${ctx.fragmentCounter}`\n\n ctx.fragments.push(\n `fragment ${scalarFieldsFragment} on ${\n type.name\n }{${scalarFields\n .filter((f) => !falsyFieldNames.has(f))\n .join(',')}}`,\n )\n }\n }\n\n const fieldsSelection = fieldNames\n .filter((f) => !['__scalar', '__name'].includes(f))\n .map((f) => {\n const parsed = parseRequest(fields[f], ctx, [...path, f])\n\n if (f.startsWith('on_')) {\n ctx.fragmentCounter++\n const implementationFragment = `f${ctx.fragmentCounter}`\n\n const typeMatch = f.match(/^on_(.+)/)\n\n if (!typeMatch || !typeMatch[1])\n throw new Error('match failed')\n\n ctx.fragments.push(\n `fragment ${implementationFragment} on ${typeMatch[1]}${parsed}`,\n )\n\n return `...${implementationFragment}`\n } else {\n return `${f}${parsed}`\n }\n })\n .concat(scalarFieldsFragment ? [`...${scalarFieldsFragment}`] : [])\n .join(',')\n\n return `{${fieldsSelection}}`\n } else {\n return ''\n }\n}\n\nexport const generateGraphqlOperation = (\n operation: 'query' | 'mutation' | 'subscription',\n root: LinkedType,\n fields?: Fields,\n): GraphqlOperation => {\n const ctx: Context = {\n root: root,\n varCounter: 0,\n variables: {},\n fragmentCounter: 0,\n fragments: [],\n }\n const result = parseRequest(fields, ctx, [])\n\n const varNames = Object.keys(ctx.variables)\n\n const varsString =\n varNames.length > 0\n ? `(${varNames.map((v) => {\n const variableType = ctx.variables[v].typing[1]\n return `$${v}:${variableType}`\n })})`\n : ''\n\n const operationName = fields?.__name || ''\n\n return {\n query: [\n `${operation} ${operationName}${varsString}${result}`,\n ...ctx.fragments,\n ].join(','),\n variables: Object.keys(ctx.variables).reduce<{ [name: string]: any }>(\n (r, v) => {\n r[v] = ctx.variables[v].value\n return r\n },\n {},\n ),\n ...(operationName ? { operationName: operationName.toString() } : {}),\n }\n}\n\nexport const getFieldFromPath = (\n root: LinkedType | undefined,\n path: string[],\n) => {\n let current: LinkedField | undefined\n\n if (!root) throw new Error('root type is not provided')\n\n if (path.length === 0) throw new Error(`path is empty`)\n\n path.forEach((f) => {\n const type = current ? current.type : root\n\n if (!type.fields)\n throw new Error(`type \\`${type.name}\\` does not have fields`)\n\n const possibleTypes = Object.keys(type.fields)\n .filter((i) => i.startsWith('on_'))\n .reduce(\n (types, fieldName) => {\n const field = type.fields && type.fields[fieldName]\n if (field) types.push(field.type)\n return types\n },\n [type],\n )\n\n let field: LinkedField | null = null\n\n possibleTypes.forEach((type) => {\n const found = type.fields && type.fields[f]\n if (found) field = found\n })\n\n if (!field)\n throw new Error(\n `type \\`${type.name}\\` does not have a field \\`${f}\\``,\n )\n\n current = field\n })\n\n return current as LinkedField\n}\n", Ye = "export { createClient } from './createClient'\nexport type { ClientOptions } from './createClient'\nexport type { FieldsSelection } from './typeSelection'\nexport { generateGraphqlOperation } from './generateGraphqlOperation'\nexport type { GraphqlOperation } from './generateGraphqlOperation'\nexport { linkTypeMap } from './linkTypeMap'\n// export { Observable } from 'zen-observable-ts'\nexport { createFetcher } from './fetcher'\nexport { GenqlError } from './error'\nexport const everything = {\n __scalar: true,\n}\n", Xe = "import type {\n CompressedType,\n CompressedTypeMap,\n LinkedArgMap,\n LinkedField,\n LinkedType,\n LinkedTypeMap,\n} from './types'\n\nexport interface PartialLinkedFieldMap {\n [field: string]: {\n type: string\n args?: LinkedArgMap\n }\n}\n\nexport const linkTypeMap = (\n typeMap: CompressedTypeMap<number>,\n): LinkedTypeMap => {\n const indexToName: Record<number, string> = Object.assign(\n {},\n ...Object.keys(typeMap.types).map((k, i) => ({ [i]: k })),\n )\n\n let intermediaryTypeMap = Object.assign(\n {},\n ...Object.keys(typeMap.types || {}).map(\n (k): Record<string, LinkedType> => {\n const type: CompressedType = typeMap.types[k]!\n const fields = type || {}\n return {\n [k]: {\n name: k,\n // type scalar properties\n scalar: Object.keys(fields).filter((f) => {\n const [type] = fields[f] || []\n return type && typeMap.scalars.includes(type)\n }),\n // fields with corresponding `type` and `args`\n fields: Object.assign(\n {},\n ...Object.keys(fields).map(\n (f): PartialLinkedFieldMap => {\n const [typeIndex, args] = fields[f] || []\n if (typeIndex == null) {\n return {}\n }\n return {\n [f]: {\n // replace index with type name\n type: indexToName[typeIndex],\n args: Object.assign(\n {},\n ...Object.keys(args || {}).map(\n (k) => {\n // if argTypeString == argTypeName, argTypeString is missing, need to readd it\n if (!args || !args[k]) {\n return\n }\n const [\n argTypeName,\n argTypeString,\n ] = args[k] as any\n return {\n [k]: [\n indexToName[\n argTypeName\n ],\n argTypeString ||\n indexToName[\n argTypeName\n ],\n ],\n }\n },\n ),\n ),\n },\n }\n },\n ),\n ),\n },\n }\n },\n ),\n )\n const res = resolveConcreteTypes(intermediaryTypeMap)\n return res\n}\n\n// replace typename with concrete type\nexport const resolveConcreteTypes = (linkedTypeMap: LinkedTypeMap) => {\n Object.keys(linkedTypeMap).forEach((typeNameFromKey) => {\n const type: LinkedType = linkedTypeMap[typeNameFromKey]!\n // type.name = typeNameFromKey\n if (!type.fields) {\n return\n }\n\n const fields = type.fields\n\n Object.keys(fields).forEach((f) => {\n const field: LinkedField = fields[f]!\n\n if (field.args) {\n const args = field.args\n Object.keys(args).forEach((key) => {\n const arg = args[key]\n\n if (arg) {\n const [typeName] = arg\n\n if (typeof typeName === 'string') {\n if (!linkedTypeMap[typeName]) {\n linkedTypeMap[typeName] = { name: typeName }\n }\n\n arg[0] = linkedTypeMap[typeName]!\n }\n }\n })\n }\n\n const typeName = field.type as LinkedType | string\n\n if (typeof typeName === 'string') {\n if (!linkedTypeMap[typeName]) {\n linkedTypeMap[typeName] = { name: typeName }\n }\n\n field.type = linkedTypeMap[typeName]!\n }\n })\n })\n\n return linkedTypeMap\n}\n", Ze = "//////////////////////////////////////////////////\n\n// SOME THINGS TO KNOW BEFORE DIVING IN\n/*\n0. DST is the request type, SRC is the response type\n\n1. FieldsSelection uses an object because currently is impossible to make recursive types\n\n2. FieldsSelection is a recursive type that makes a type based on request type and fields\n\n3. HandleObject handles object types\n\n4. Handle__scalar adds all scalar properties excluding non scalar props\n*/\n\nexport type FieldsSelection<SRC extends Anify<DST> | undefined, DST> = {\n scalar: SRC\n union: Handle__isUnion<SRC, DST>\n object: HandleObject<SRC, DST>\n array: SRC extends Nil\n ? never\n : SRC extends (infer T)[]\n ? Array<FieldsSelection<T, DST>>\n : never\n __scalar: Handle__scalar<SRC, DST>\n never: never\n}[DST extends Nil\n ? 'never'\n : SRC extends Nil\n ? 'never'\n : DST extends false | 0\n ? 'never'\n : SRC extends Scalar\n ? 'scalar'\n : SRC extends any[]\n ? 'array'\n : SRC extends { __isUnion?: any }\n ? 'union'\n : DST extends { __scalar?: any }\n ? '__scalar'\n : DST extends {}\n ? 'object'\n : 'never']\n\ntype HandleObject<SRC extends Anify<DST>, DST> = SRC extends Nil\n ? never\n : Pick<\n {\n // using keyof SRC to maintain ?: relations of SRC type\n [Key in keyof SRC]: Key extends keyof DST\n ? FieldsSelection<\n NonNullable<SRC[Key]>,\n NonNullable<DST[Key]>\n >\n : SRC[Key]\n },\n Exclude<keyof DST, FieldsToRemove>\n // {\n // // remove falsy values\n // [Key in keyof DST]: DST[Key] extends false | 0 ? never : Key\n // }[keyof DST]\n >\n\ntype Handle__scalar<SRC extends Anify<DST>, DST> = SRC extends Nil\n ? never\n : Pick<\n // continue processing fields that are in DST, directly pass SRC type if not in DST\n {\n [Key in keyof SRC]: Key extends keyof DST\n ? FieldsSelection<SRC[Key], DST[Key]>\n : SRC[Key]\n },\n // remove fields that are not scalars or are not in DST\n {\n [Key in keyof SRC]: SRC[Key] extends Nil\n ? never\n : Key extends FieldsToRemove\n ? never\n : SRC[Key] extends Scalar\n ? Key\n : Key extends keyof DST\n ? Key\n : never\n }[keyof SRC]\n >\n\ntype Handle__isUnion<SRC extends Anify<DST>, DST> = SRC extends Nil\n ? never\n : Omit<SRC, FieldsToRemove> // just return the union type\n\ntype Scalar = string | number | Date | boolean | null | undefined\n\ntype Anify<T> = { [P in keyof T]?: any }\n\ntype FieldsToRemove = '__isUnion' | '__scalar' | '__name' | '__args'\n\ntype Nil = undefined | null\n", Qe = "\nexport interface ExecutionResult<TData = { [key: string]: any }> {\n errors?: Array<Error>\n data?: TData | null\n}\n\nexport interface ArgMap<keyType = number> {\n [arg: string]: [keyType, string] | [keyType] | undefined\n}\n\nexport type CompressedField<keyType = number> = [\n type: keyType,\n args?: ArgMap<keyType>,\n]\n\nexport interface CompressedFieldMap<keyType = number> {\n [field: string]: CompressedField<keyType> | undefined\n}\n\nexport type CompressedType<keyType = number> = CompressedFieldMap<keyType>\n\nexport interface CompressedTypeMap<keyType = number> {\n scalars: Array<keyType>\n types: {\n [type: string]: CompressedType<keyType> | undefined\n }\n}\n\n// normal types\nexport type Field<keyType = number> = {\n type: keyType\n args?: ArgMap<keyType>\n}\n\nexport interface FieldMap<keyType = number> {\n [field: string]: Field<keyType> | undefined\n}\n\nexport type Type<keyType = number> = FieldMap<keyType>\n\nexport interface TypeMap<keyType = number> {\n scalars: Array<keyType>\n types: {\n [type: string]: Type<keyType> | undefined\n }\n}\n\nexport interface LinkedArgMap {\n [arg: string]: [LinkedType, string] | undefined\n}\nexport interface LinkedField {\n type: LinkedType\n args?: LinkedArgMap\n}\n\nexport interface LinkedFieldMap {\n [field: string]: LinkedField | undefined\n}\n\nexport interface LinkedType {\n name: string\n fields?: LinkedFieldMap\n scalar?: string[]\n}\n\nexport interface LinkedTypeMap {\n [type: string]: LinkedType | undefined\n}\n", X = (e, t) => e === void 0 ? le(u(u(l(me(import.meta.url)), "genql", "runtime"), t), "utf-8") : e, $e = [
448
+ {
449
+ name: "batcher.ts",
450
+ content: X(We, "batcher.ts")
451
+ },
452
+ {
453
+ name: "createClient.ts",
454
+ content: X(Ge, "createClient.ts")
455
+ },
456
+ {
457
+ name: "error.ts",
458
+ content: X(Ke, "error.ts")
459
+ },
460
+ {
461
+ name: "fetcher.ts",
462
+ content: X(qe, "fetcher.ts")
463
+ },
464
+ {
465
+ name: "generateGraphqlOperation.ts",
466
+ content: X(Je, "generateGraphqlOperation.ts")
467
+ },
468
+ {
469
+ name: "index.ts",
470
+ content: X(Ye, "index.ts")
471
+ },
472
+ {
473
+ name: "linkTypeMap.ts",
474
+ content: X(Xe, "linkTypeMap.ts")
475
+ },
476
+ {
477
+ name: "typeSelection.ts",
478
+ content: X(Ze, "typeSelection.ts")
479
+ },
480
+ {
481
+ name: "types.ts",
482
+ content: X(Qe, "types.ts")
483
+ }
484
+ ], et = "schema.ts", tt = "schema.graphql", nt = "types.ts", rt = "index.ts", it = async (e, t) => {
485
+ if (!e.output) throw Error("`output` must be defined in the config");
486
+ let n = e.output;
487
+ await j([n], !0);
488
+ let r = new L(t, e);
489
+ ze(t, r), await M([n, tt], await r.toCode("graphql")), await j([n, "runtime"]);
490
+ for (let { name: e, content: t } of $e) await M([
491
+ n,
492
+ "runtime",
493
+ e
494
+ ], "// @ts-nocheck\n" + t);
495
+ let i = new L(t, e);
496
+ Le(t, i), ke(t, i), Be(t, i), at(t, i), await M([n, et], "// @ts-nocheck\n" + await i.toCode("typescript"));
497
+ let a = new L(t, e);
498
+ He(t, a), await M([n, nt], `export default ${await a.toCode()}`);
499
+ let o = new L(t, e);
500
+ ye(t, o), await M([n, rt], "// @ts-nocheck\n" + await o.toCode("typescript", !0));
501
+ };
502
+ function at(e, t) {
503
+ let n = e.getTypeMap(), r = [];
504
+ for (let e in n) {
505
+ if (I.includes(e)) continue;
506
+ let t = n[e];
507
+ h(t) && r.push(t);
508
+ }
509
+ r.length !== 0 && t.addCodeBlock(r.map((e) => `export const ${ce("enum" + e.name)} = {\n` + e.getValues().map((e) => e?.name ? ` ${e.name}: '${e.name}' as const` : "").join(",\n") + "\n}\n").join("\n"));
510
+ }
511
+ //#endregion
512
+ //#region src/generate/genql/tasks/schemaTask.ts
513
+ var ot = async (e) => {
514
+ if (!e.schema) throw Error("`schema` must be defined in the config");
515
+ let t = ne(e.schema, { assumeValidSDL: !0 }), n = e.sortProperties ? oe(t) : t;
516
+ return n.getQueryType() && te(n), n;
517
+ }, Z = async (e) => {
518
+ if (!e.output) throw Error("`output` must be defined in the config");
519
+ await it(e, await ot(e));
520
+ }, st = {
521
+ DateTime: "string",
522
+ JSON: "Record<string, unknown>",
523
+ UUID: "string"
524
+ }, Q = "core/generated", $ = async ({ schema: n, outputPath: r, clientWrapperTemplateSource: i }) => {
525
+ let a = i ?? "import type { TwentyClientRunAs } from '../shared/twenty-client-run-as.type';\n\n// Ambient stubs for the genql-generated code this template is injected into.\n// __STRIPPED_DURING_INJECTION_START__\ntype QueryGenqlSelection = Record<string, unknown>;\ntype MutationGenqlSelection = Record<string, unknown>;\ntype GraphqlOperation = Record<string, unknown>;\n\ntype ClientOptions = Omit<RequestInit, 'body' | 'headers'> & {\n url?: string;\n headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);\n fetcher?: (\n operation: GraphqlOperation | GraphqlOperation[],\n ) => Promise<unknown>;\n fetch?: typeof globalThis.fetch;\n batch?: unknown;\n};\n\ntype Client = {\n query: (\n request: QueryGenqlSelection & { __name?: string },\n ) => Promise<unknown>;\n mutation: (\n request: MutationGenqlSelection & { __name?: string },\n ) => Promise<unknown>;\n};\n\ndeclare function createClient(options: ClientOptions): Client;\n\ndeclare class GenqlError extends Error {\n constructor(errors: unknown, data: unknown);\n}\n// __STRIPPED_DURING_INJECTION_END__\n\nconst APP_ACCESS_TOKEN_ENV_KEY = 'TWENTY_APP_ACCESS_TOKEN';\nconst APP_APPLICATION_ACCESS_TOKEN_ENV_KEY =\n 'TWENTY_APP_APPLICATION_ACCESS_TOKEN';\nconst API_KEY_ENV_KEY = 'TWENTY_API_KEY';\n\nexport type TwentyGeneratedClientOptions = ClientOptions & {\n runAs?: TwentyClientRunAs;\n};\n\ntype ProcessEnvironment = Record<string, string | undefined>;\n\ntype GraphqlErrorPayloadEntry = {\n message?: string;\n extensions?: { code?: string };\n};\n\ntype GraphqlResponsePayload = {\n data?: Record<string, unknown>;\n errors?: GraphqlErrorPayloadEntry[];\n};\n\ntype GraphqlResponse = {\n status: number;\n statusText: string;\n payload: GraphqlResponsePayload | null;\n rawBody: string;\n};\n\ntype FilesFieldUploadTarget = {\n fileId: string;\n uploadUrl: string;\n contentType: string;\n};\n\ntype FilesFieldUploadedFile = {\n id: string;\n path: string;\n size: number;\n createdAt: string;\n url: string;\n};\n\nconst getProcessEnvironment = (): ProcessEnvironment => {\n const processObject = (\n globalThis as { process?: { env?: ProcessEnvironment } }\n ).process;\n\n return processObject?.env ?? {};\n};\n\nconst getTokenFromAuthorizationHeader = (\n authorizationHeader: string | undefined,\n): string | null => {\n if (typeof authorizationHeader !== 'string') {\n return null;\n }\n\n const trimmedAuthorizationHeader = authorizationHeader.trim();\n\n if (trimmedAuthorizationHeader.length === 0) {\n return null;\n }\n\n if (trimmedAuthorizationHeader === 'Bearer') {\n return null;\n }\n\n if (trimmedAuthorizationHeader.startsWith('Bearer ')) {\n return trimmedAuthorizationHeader.slice('Bearer '.length).trim();\n }\n\n return trimmedAuthorizationHeader;\n};\n\nconst getTokenFromHeaders = (\n headers: HeadersInit | undefined,\n): string | null => {\n if (!headers) {\n return null;\n }\n\n if (headers instanceof Headers) {\n return getTokenFromAuthorizationHeader(\n headers.get('Authorization') ?? undefined,\n );\n }\n\n if (Array.isArray(headers)) {\n const matchedAuthorizationHeader = headers.find(\n ([headerName]) => headerName.toLowerCase() === 'authorization',\n );\n\n return getTokenFromAuthorizationHeader(matchedAuthorizationHeader?.[1]);\n }\n\n const headersRecord = headers as Record<string, string | undefined>;\n\n return getTokenFromAuthorizationHeader(\n headersRecord.Authorization ?? headersRecord.authorization,\n );\n};\n\nconst hasAuthenticationErrorInGraphqlPayload = (\n payload: GraphqlResponsePayload | null,\n): boolean => {\n if (!payload?.errors) {\n return false;\n }\n\n return payload.errors.some((graphqlError) => {\n return (\n graphqlError.extensions?.code === 'UNAUTHENTICATED' ||\n graphqlError.message?.toLowerCase() === 'unauthorized'\n );\n });\n};\n\nconst defaultOptions: TwentyGeneratedClientOptions = {\n url: '__TWENTY_DEFAULT_URL__',\n headers: {\n 'Content-Type': 'application/json',\n },\n};\n\nexport class TwentyGeneratedClient {\n private client: Client;\n private url: string;\n private requestOptions: RequestInit;\n private headers: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);\n private fetchImplementation: typeof globalThis.fetch | null;\n private authorizationToken: string | null;\n private refreshAccessTokenPromise: Promise<string | null> | null = null;\n\n constructor(options?: TwentyGeneratedClientOptions) {\n const merged: TwentyGeneratedClientOptions = {\n ...defaultOptions,\n ...options,\n };\n\n const {\n url,\n headers,\n fetch: customFetchImplementation,\n fetcher: _fetcher,\n batch: _batch,\n runAs,\n ...requestOptions\n } = merged;\n\n this.url = url ?? '';\n this.requestOptions = requestOptions;\n this.headers = headers ?? {};\n this.fetchImplementation =\n customFetchImplementation ?? globalThis.fetch ?? null;\n\n const processEnvironment = getProcessEnvironment();\n const tokenFromHeaders = getTokenFromHeaders(\n typeof headers === 'function' ? undefined : headers,\n );\n\n this.authorizationToken =\n tokenFromHeaders ??\n processEnvironment[\n runAs === 'application'\n ? APP_APPLICATION_ACCESS_TOKEN_ENV_KEY\n : APP_ACCESS_TOKEN_ENV_KEY\n ] ??\n processEnvironment[API_KEY_ENV_KEY] ??\n null;\n\n this.client = createClient({\n ...merged,\n headers: undefined,\n fetcher: async (operation) =>\n this.executeGraphqlRequestWithOptionalRefresh({\n operation,\n }),\n });\n }\n\n query<R extends QueryGenqlSelection>(request: R & { __name?: string }) {\n return this.client.query(request);\n }\n\n mutation<R extends MutationGenqlSelection>(request: R & { __name?: string }) {\n return this.client.mutation(request);\n }\n\n // __UPLOAD_FILE_START__\n async uploadFile({\n fileBuffer,\n filename,\n fieldMetadataUniversalIdentifier,\n }: {\n fileBuffer: Buffer;\n filename: string;\n fieldMetadataUniversalIdentifier: string;\n }): Promise<FilesFieldUploadedFile> {\n const { createFileUpload: uploadTarget } =\n await this.executeMutationOrThrow<{\n createFileUpload: FilesFieldUploadTarget;\n }>({\n query: `mutation CreateFilesFieldFileUpload($filename: String!, $size: Float!, $fieldMetadataUniversalIdentifier: String!) {\n createFileUpload(filename: $filename, size: $size, fileFolder: FilesField, fieldMetadataUniversalIdentifier: $fieldMetadataUniversalIdentifier) { fileId uploadUrl contentType }\n }`,\n variables: {\n filename,\n size: fileBuffer.byteLength,\n fieldMetadataUniversalIdentifier,\n },\n });\n\n await this.putFileToUploadTargetOrThrow({ fileBuffer, uploadTarget });\n\n const { completeFileUpload: uploadedFile } =\n await this.executeMutationOrThrow<{\n completeFileUpload: FilesFieldUploadedFile;\n }>({\n query: `mutation CompleteFilesFieldFileUpload($fileId: String!) {\n completeFileUpload(fileId: $fileId) { id path size createdAt url }\n }`,\n variables: { fileId: uploadTarget.fileId },\n });\n\n return uploadedFile;\n }\n\n private async putFileToUploadTargetOrThrow({\n fileBuffer,\n uploadTarget,\n }: {\n fileBuffer: Buffer;\n uploadTarget: FilesFieldUploadTarget;\n }): Promise<void> {\n const fetchImplementation = this.getFetchImplementationOrThrow();\n\n const response = await fetchImplementation.call(\n globalThis,\n uploadTarget.uploadUrl,\n {\n method: 'PUT',\n headers: { 'Content-Type': uploadTarget.contentType },\n body: fileBuffer as BodyInit,\n credentials: 'omit',\n },\n );\n\n if (!response.ok) {\n throw new Error(\n `File upload failed (${response.status} ${response.statusText}): ${await response.text()}`,\n );\n }\n }\n\n private async executeMutationOrThrow<TData>({\n query,\n variables,\n }: {\n query: string;\n variables: Record<string, unknown>;\n }): Promise<TData> {\n const result = await this.executeGraphqlRequestWithOptionalRefresh({\n operation: { query, variables },\n });\n\n if (result.errors) {\n throw new GenqlError(result.errors, result.data);\n }\n\n if (!result.data) {\n throw new Error('Empty GraphQL response');\n }\n\n return result.data as TData;\n }\n // __UPLOAD_FILE_END__\n\n private async executeGraphqlRequestWithOptionalRefresh({\n operation,\n headers,\n requestInit,\n }: {\n operation: GraphqlOperation | GraphqlOperation[] | FormData;\n headers?: HeadersInit;\n requestInit?: RequestInit;\n }) {\n const firstResponse = await this.executeGraphqlRequest({\n operation,\n headers,\n requestInit,\n token: this.authorizationToken,\n });\n\n if (this.shouldRefreshToken(firstResponse)) {\n const refreshedAccessToken = await this.requestRefreshedAccessToken();\n\n if (refreshedAccessToken) {\n const retryResponse = await this.executeGraphqlRequest({\n operation,\n headers,\n requestInit,\n token: refreshedAccessToken,\n });\n\n return this.assertResponseIsSuccessful(retryResponse);\n }\n }\n\n return this.assertResponseIsSuccessful(firstResponse);\n }\n\n private async executeGraphqlRequest({\n operation,\n headers,\n requestInit,\n token,\n }: {\n operation: GraphqlOperation | GraphqlOperation[] | FormData;\n headers?: HeadersInit;\n requestInit?: RequestInit;\n token: string | null;\n }): Promise<GraphqlResponse> {\n const fetchImplementation = this.getFetchImplementationOrThrow();\n\n const resolvedHeaders = await this.resolveHeaders();\n const requestHeaders = new Headers(resolvedHeaders);\n\n if (headers) {\n new Headers(headers).forEach((value, key) =>\n requestHeaders.set(key, value),\n );\n }\n\n if (operation instanceof FormData) {\n requestHeaders.delete('Content-Type');\n } else {\n requestHeaders.set('Content-Type', 'application/json');\n }\n\n if (token) {\n requestHeaders.set('Authorization', `Bearer ${token}`);\n } else {\n requestHeaders.delete('Authorization');\n }\n\n const response = await fetchImplementation.call(globalThis, this.url, {\n ...this.requestOptions,\n ...requestInit,\n method: requestInit?.method ?? 'POST',\n headers: requestHeaders,\n body:\n operation instanceof FormData ? operation : JSON.stringify(operation),\n });\n\n const rawBody = await response.text();\n let payload: GraphqlResponsePayload | null = null;\n\n if (rawBody.trim().length > 0) {\n try {\n payload = JSON.parse(rawBody) as GraphqlResponsePayload;\n } catch {\n payload = null;\n }\n }\n\n return {\n status: response.status,\n statusText: response.statusText,\n payload,\n rawBody,\n };\n }\n\n private getFetchImplementationOrThrow(): typeof globalThis.fetch {\n if (!this.fetchImplementation) {\n throw new Error(\n 'Global `fetch` function is not available, ' +\n 'pass a fetch implementation to the Chass client',\n );\n }\n\n return this.fetchImplementation;\n }\n\n private async resolveHeaders(): Promise<HeadersInit> {\n if (typeof this.headers === 'function') {\n return (await this.headers()) ?? {};\n }\n\n return this.headers ?? {};\n }\n\n private shouldRefreshToken(response: GraphqlResponse): boolean {\n if (response.status === 401) {\n return true;\n }\n\n return hasAuthenticationErrorInGraphqlPayload(response.payload);\n }\n\n private assertResponseIsSuccessful(response: GraphqlResponse) {\n if (response.status < 200 || response.status >= 300) {\n throw new Error(`${response.statusText}: ${response.rawBody}`);\n }\n\n if (response.payload === null) {\n throw new Error('Invalid JSON response');\n }\n\n return response.payload;\n }\n\n private async requestRefreshedAccessToken(): Promise<string | null> {\n const refreshAccessTokenFunction = (\n globalThis as {\n frontComponentHostCommunicationApi?: {\n requestAccessTokenRefresh?: () => Promise<string>;\n };\n }\n ).frontComponentHostCommunicationApi?.requestAccessTokenRefresh;\n\n if (typeof refreshAccessTokenFunction !== 'function') {\n return null;\n }\n\n if (!this.refreshAccessTokenPromise) {\n this.refreshAccessTokenPromise = refreshAccessTokenFunction()\n .then((refreshedAccessToken) => {\n if (\n typeof refreshedAccessToken !== 'string' ||\n refreshedAccessToken.length === 0\n ) {\n return null;\n }\n\n this.setAuthorizationToken(refreshedAccessToken);\n\n return refreshedAccessToken;\n })\n .catch((refreshError: unknown) => {\n console.error('Chass client: token refresh failed', refreshError);\n\n return null;\n })\n .finally(() => {\n this.refreshAccessTokenPromise = null;\n });\n }\n\n return this.refreshAccessTokenPromise;\n }\n\n private setAuthorizationToken(token: string) {\n this.authorizationToken = token;\n\n const processEnvironment = getProcessEnvironment();\n\n processEnvironment[APP_ACCESS_TOKEN_ENV_KEY] = token;\n }\n}\n", o = `${r}.tmp`;
526
+ await O(o), await k(o);
527
+ try {
528
+ await Z({
529
+ schema: n,
530
+ output: o,
531
+ scalarTypes: st
532
+ });
533
+ let i = D(a, {
534
+ apiClientName: "CoreApiClient",
535
+ defaultUrl: `\`\${process.env.${e}}/graphql\``,
536
+ includeUploadFile: !0
537
+ });
538
+ await t(u(o, "index.ts"), i), await A(r), await _e(o, r), await lt(r);
539
+ } catch (e) {
540
+ throw await A(o), e;
541
+ }
542
+ }, ct = async ({ packageRoot: e, schema: t }) => {
543
+ let r = u(e, "dist", Q);
544
+ await $({
545
+ schema: t,
546
+ outputPath: r
547
+ }), await n(u(r, "index.mjs"), u(e, "dist", "core.mjs")), await n(u(r, "index.cjs"), u(e, "dist", "core.cjs"));
548
+ }, lt = async (e) => {
549
+ let t = u(e, "index.ts"), n = u(e, "index.mjs");
550
+ await p({
551
+ entryPoints: [t],
552
+ outfile: n,
553
+ bundle: !0,
554
+ format: "esm",
555
+ platform: "node",
556
+ target: "node18",
557
+ sourcemap: !1,
558
+ minify: !1
559
+ }), await p({
560
+ entryPoints: [t],
561
+ outfile: u(e, "index.cjs"),
562
+ bundle: !0,
563
+ format: "cjs",
564
+ platform: "node",
565
+ target: "node18",
566
+ sourcemap: !1,
567
+ minify: !1
568
+ }), await c(u(e, "package.json"), JSON.stringify({
569
+ type: "module",
570
+ main: "index.mjs",
571
+ module: "index.mjs"
572
+ }, null, 2));
573
+ }, ut = {
574
+ DateTime: "string",
575
+ JSON: "Record<string, unknown>",
576
+ UUID: "string"
577
+ }, dt = async ({ schema: n, outputPath: r, clientWrapperTemplateSource: i }) => {
578
+ let a = i ?? "import type { TwentyClientRunAs } from '../shared/twenty-client-run-as.type';\n\n// Ambient stubs for the genql-generated code this template is injected into.\n// __STRIPPED_DURING_INJECTION_START__\ntype QueryGenqlSelection = Record<string, unknown>;\ntype MutationGenqlSelection = Record<string, unknown>;\ntype GraphqlOperation = Record<string, unknown>;\n\ntype ClientOptions = Omit<RequestInit, 'body' | 'headers'> & {\n url?: string;\n headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);\n fetcher?: (\n operation: GraphqlOperation | GraphqlOperation[],\n ) => Promise<unknown>;\n fetch?: typeof globalThis.fetch;\n batch?: unknown;\n};\n\ntype Client = {\n query: (\n request: QueryGenqlSelection & { __name?: string },\n ) => Promise<unknown>;\n mutation: (\n request: MutationGenqlSelection & { __name?: string },\n ) => Promise<unknown>;\n};\n\ndeclare function createClient(options: ClientOptions): Client;\n\ndeclare class GenqlError extends Error {\n constructor(errors: unknown, data: unknown);\n}\n// __STRIPPED_DURING_INJECTION_END__\n\nconst APP_ACCESS_TOKEN_ENV_KEY = 'TWENTY_APP_ACCESS_TOKEN';\nconst APP_APPLICATION_ACCESS_TOKEN_ENV_KEY =\n 'TWENTY_APP_APPLICATION_ACCESS_TOKEN';\nconst API_KEY_ENV_KEY = 'TWENTY_API_KEY';\n\nexport type TwentyGeneratedClientOptions = ClientOptions & {\n runAs?: TwentyClientRunAs;\n};\n\ntype ProcessEnvironment = Record<string, string | undefined>;\n\ntype GraphqlErrorPayloadEntry = {\n message?: string;\n extensions?: { code?: string };\n};\n\ntype GraphqlResponsePayload = {\n data?: Record<string, unknown>;\n errors?: GraphqlErrorPayloadEntry[];\n};\n\ntype GraphqlResponse = {\n status: number;\n statusText: string;\n payload: GraphqlResponsePayload | null;\n rawBody: string;\n};\n\ntype FilesFieldUploadTarget = {\n fileId: string;\n uploadUrl: string;\n contentType: string;\n};\n\ntype FilesFieldUploadedFile = {\n id: string;\n path: string;\n size: number;\n createdAt: string;\n url: string;\n};\n\nconst getProcessEnvironment = (): ProcessEnvironment => {\n const processObject = (\n globalThis as { process?: { env?: ProcessEnvironment } }\n ).process;\n\n return processObject?.env ?? {};\n};\n\nconst getTokenFromAuthorizationHeader = (\n authorizationHeader: string | undefined,\n): string | null => {\n if (typeof authorizationHeader !== 'string') {\n return null;\n }\n\n const trimmedAuthorizationHeader = authorizationHeader.trim();\n\n if (trimmedAuthorizationHeader.length === 0) {\n return null;\n }\n\n if (trimmedAuthorizationHeader === 'Bearer') {\n return null;\n }\n\n if (trimmedAuthorizationHeader.startsWith('Bearer ')) {\n return trimmedAuthorizationHeader.slice('Bearer '.length).trim();\n }\n\n return trimmedAuthorizationHeader;\n};\n\nconst getTokenFromHeaders = (\n headers: HeadersInit | undefined,\n): string | null => {\n if (!headers) {\n return null;\n }\n\n if (headers instanceof Headers) {\n return getTokenFromAuthorizationHeader(\n headers.get('Authorization') ?? undefined,\n );\n }\n\n if (Array.isArray(headers)) {\n const matchedAuthorizationHeader = headers.find(\n ([headerName]) => headerName.toLowerCase() === 'authorization',\n );\n\n return getTokenFromAuthorizationHeader(matchedAuthorizationHeader?.[1]);\n }\n\n const headersRecord = headers as Record<string, string | undefined>;\n\n return getTokenFromAuthorizationHeader(\n headersRecord.Authorization ?? headersRecord.authorization,\n );\n};\n\nconst hasAuthenticationErrorInGraphqlPayload = (\n payload: GraphqlResponsePayload | null,\n): boolean => {\n if (!payload?.errors) {\n return false;\n }\n\n return payload.errors.some((graphqlError) => {\n return (\n graphqlError.extensions?.code === 'UNAUTHENTICATED' ||\n graphqlError.message?.toLowerCase() === 'unauthorized'\n );\n });\n};\n\nconst defaultOptions: TwentyGeneratedClientOptions = {\n url: '__TWENTY_DEFAULT_URL__',\n headers: {\n 'Content-Type': 'application/json',\n },\n};\n\nexport class TwentyGeneratedClient {\n private client: Client;\n private url: string;\n private requestOptions: RequestInit;\n private headers: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);\n private fetchImplementation: typeof globalThis.fetch | null;\n private authorizationToken: string | null;\n private refreshAccessTokenPromise: Promise<string | null> | null = null;\n\n constructor(options?: TwentyGeneratedClientOptions) {\n const merged: TwentyGeneratedClientOptions = {\n ...defaultOptions,\n ...options,\n };\n\n const {\n url,\n headers,\n fetch: customFetchImplementation,\n fetcher: _fetcher,\n batch: _batch,\n runAs,\n ...requestOptions\n } = merged;\n\n this.url = url ?? '';\n this.requestOptions = requestOptions;\n this.headers = headers ?? {};\n this.fetchImplementation =\n customFetchImplementation ?? globalThis.fetch ?? null;\n\n const processEnvironment = getProcessEnvironment();\n const tokenFromHeaders = getTokenFromHeaders(\n typeof headers === 'function' ? undefined : headers,\n );\n\n this.authorizationToken =\n tokenFromHeaders ??\n processEnvironment[\n runAs === 'application'\n ? APP_APPLICATION_ACCESS_TOKEN_ENV_KEY\n : APP_ACCESS_TOKEN_ENV_KEY\n ] ??\n processEnvironment[API_KEY_ENV_KEY] ??\n null;\n\n this.client = createClient({\n ...merged,\n headers: undefined,\n fetcher: async (operation) =>\n this.executeGraphqlRequestWithOptionalRefresh({\n operation,\n }),\n });\n }\n\n query<R extends QueryGenqlSelection>(request: R & { __name?: string }) {\n return this.client.query(request);\n }\n\n mutation<R extends MutationGenqlSelection>(request: R & { __name?: string }) {\n return this.client.mutation(request);\n }\n\n // __UPLOAD_FILE_START__\n async uploadFile({\n fileBuffer,\n filename,\n fieldMetadataUniversalIdentifier,\n }: {\n fileBuffer: Buffer;\n filename: string;\n fieldMetadataUniversalIdentifier: string;\n }): Promise<FilesFieldUploadedFile> {\n const { createFileUpload: uploadTarget } =\n await this.executeMutationOrThrow<{\n createFileUpload: FilesFieldUploadTarget;\n }>({\n query: `mutation CreateFilesFieldFileUpload($filename: String!, $size: Float!, $fieldMetadataUniversalIdentifier: String!) {\n createFileUpload(filename: $filename, size: $size, fileFolder: FilesField, fieldMetadataUniversalIdentifier: $fieldMetadataUniversalIdentifier) { fileId uploadUrl contentType }\n }`,\n variables: {\n filename,\n size: fileBuffer.byteLength,\n fieldMetadataUniversalIdentifier,\n },\n });\n\n await this.putFileToUploadTargetOrThrow({ fileBuffer, uploadTarget });\n\n const { completeFileUpload: uploadedFile } =\n await this.executeMutationOrThrow<{\n completeFileUpload: FilesFieldUploadedFile;\n }>({\n query: `mutation CompleteFilesFieldFileUpload($fileId: String!) {\n completeFileUpload(fileId: $fileId) { id path size createdAt url }\n }`,\n variables: { fileId: uploadTarget.fileId },\n });\n\n return uploadedFile;\n }\n\n private async putFileToUploadTargetOrThrow({\n fileBuffer,\n uploadTarget,\n }: {\n fileBuffer: Buffer;\n uploadTarget: FilesFieldUploadTarget;\n }): Promise<void> {\n const fetchImplementation = this.getFetchImplementationOrThrow();\n\n const response = await fetchImplementation.call(\n globalThis,\n uploadTarget.uploadUrl,\n {\n method: 'PUT',\n headers: { 'Content-Type': uploadTarget.contentType },\n body: fileBuffer as BodyInit,\n credentials: 'omit',\n },\n );\n\n if (!response.ok) {\n throw new Error(\n `File upload failed (${response.status} ${response.statusText}): ${await response.text()}`,\n );\n }\n }\n\n private async executeMutationOrThrow<TData>({\n query,\n variables,\n }: {\n query: string;\n variables: Record<string, unknown>;\n }): Promise<TData> {\n const result = await this.executeGraphqlRequestWithOptionalRefresh({\n operation: { query, variables },\n });\n\n if (result.errors) {\n throw new GenqlError(result.errors, result.data);\n }\n\n if (!result.data) {\n throw new Error('Empty GraphQL response');\n }\n\n return result.data as TData;\n }\n // __UPLOAD_FILE_END__\n\n private async executeGraphqlRequestWithOptionalRefresh({\n operation,\n headers,\n requestInit,\n }: {\n operation: GraphqlOperation | GraphqlOperation[] | FormData;\n headers?: HeadersInit;\n requestInit?: RequestInit;\n }) {\n const firstResponse = await this.executeGraphqlRequest({\n operation,\n headers,\n requestInit,\n token: this.authorizationToken,\n });\n\n if (this.shouldRefreshToken(firstResponse)) {\n const refreshedAccessToken = await this.requestRefreshedAccessToken();\n\n if (refreshedAccessToken) {\n const retryResponse = await this.executeGraphqlRequest({\n operation,\n headers,\n requestInit,\n token: refreshedAccessToken,\n });\n\n return this.assertResponseIsSuccessful(retryResponse);\n }\n }\n\n return this.assertResponseIsSuccessful(firstResponse);\n }\n\n private async executeGraphqlRequest({\n operation,\n headers,\n requestInit,\n token,\n }: {\n operation: GraphqlOperation | GraphqlOperation[] | FormData;\n headers?: HeadersInit;\n requestInit?: RequestInit;\n token: string | null;\n }): Promise<GraphqlResponse> {\n const fetchImplementation = this.getFetchImplementationOrThrow();\n\n const resolvedHeaders = await this.resolveHeaders();\n const requestHeaders = new Headers(resolvedHeaders);\n\n if (headers) {\n new Headers(headers).forEach((value, key) =>\n requestHeaders.set(key, value),\n );\n }\n\n if (operation instanceof FormData) {\n requestHeaders.delete('Content-Type');\n } else {\n requestHeaders.set('Content-Type', 'application/json');\n }\n\n if (token) {\n requestHeaders.set('Authorization', `Bearer ${token}`);\n } else {\n requestHeaders.delete('Authorization');\n }\n\n const response = await fetchImplementation.call(globalThis, this.url, {\n ...this.requestOptions,\n ...requestInit,\n method: requestInit?.method ?? 'POST',\n headers: requestHeaders,\n body:\n operation instanceof FormData ? operation : JSON.stringify(operation),\n });\n\n const rawBody = await response.text();\n let payload: GraphqlResponsePayload | null = null;\n\n if (rawBody.trim().length > 0) {\n try {\n payload = JSON.parse(rawBody) as GraphqlResponsePayload;\n } catch {\n payload = null;\n }\n }\n\n return {\n status: response.status,\n statusText: response.statusText,\n payload,\n rawBody,\n };\n }\n\n private getFetchImplementationOrThrow(): typeof globalThis.fetch {\n if (!this.fetchImplementation) {\n throw new Error(\n 'Global `fetch` function is not available, ' +\n 'pass a fetch implementation to the Chass client',\n );\n }\n\n return this.fetchImplementation;\n }\n\n private async resolveHeaders(): Promise<HeadersInit> {\n if (typeof this.headers === 'function') {\n return (await this.headers()) ?? {};\n }\n\n return this.headers ?? {};\n }\n\n private shouldRefreshToken(response: GraphqlResponse): boolean {\n if (response.status === 401) {\n return true;\n }\n\n return hasAuthenticationErrorInGraphqlPayload(response.payload);\n }\n\n private assertResponseIsSuccessful(response: GraphqlResponse) {\n if (response.status < 200 || response.status >= 300) {\n throw new Error(`${response.statusText}: ${response.rawBody}`);\n }\n\n if (response.payload === null) {\n throw new Error('Invalid JSON response');\n }\n\n return response.payload;\n }\n\n private async requestRefreshedAccessToken(): Promise<string | null> {\n const refreshAccessTokenFunction = (\n globalThis as {\n frontComponentHostCommunicationApi?: {\n requestAccessTokenRefresh?: () => Promise<string>;\n };\n }\n ).frontComponentHostCommunicationApi?.requestAccessTokenRefresh;\n\n if (typeof refreshAccessTokenFunction !== 'function') {\n return null;\n }\n\n if (!this.refreshAccessTokenPromise) {\n this.refreshAccessTokenPromise = refreshAccessTokenFunction()\n .then((refreshedAccessToken) => {\n if (\n typeof refreshedAccessToken !== 'string' ||\n refreshedAccessToken.length === 0\n ) {\n return null;\n }\n\n this.setAuthorizationToken(refreshedAccessToken);\n\n return refreshedAccessToken;\n })\n .catch((refreshError: unknown) => {\n console.error('Chass client: token refresh failed', refreshError);\n\n return null;\n })\n .finally(() => {\n this.refreshAccessTokenPromise = null;\n });\n }\n\n return this.refreshAccessTokenPromise;\n }\n\n private setAuthorizationToken(token: string) {\n this.authorizationToken = token;\n\n const processEnvironment = getProcessEnvironment();\n\n processEnvironment[APP_ACCESS_TOKEN_ENV_KEY] = token;\n }\n}\n";
579
+ await O(r), await k(r), await Z({
580
+ schema: n,
581
+ output: r,
582
+ scalarTypes: {
583
+ ...ut,
584
+ Upload: "File"
585
+ }
586
+ });
587
+ let o = D(a, {
588
+ apiClientName: "MetadataApiClient",
589
+ defaultUrl: `\`\${process.env.${e}}/metadata\``,
590
+ includeUploadFile: !0
591
+ });
592
+ await t(u(r, "index.ts"), o);
593
+ };
594
+ //#endregion
595
+ export { Q as GENERATED_CORE_DIR, $ as generateCoreClientFromSchema, dt as generateMetadataClient, ct as replaceCoreClient };