This repository has been archived by the owner on Apr 17, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 5
/
GraphbackClient.ts
84 lines (70 loc) · 2.07 KB
/
GraphbackClient.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import { createClient, ClientDocument } from "@graphback/codegen-client";
import { InputModelTypeContext } from "graphback";
interface StringDic {
[key: string]: string;
}
/**
* Inserts the implementations of the items of source into a destination as its
* properties.
* @param source An array containing operations and their implementation
* @param destination An object with string properties and values
*/
function insertImplInto(
source: ClientDocument[],
destination: StringDic
): void {
source.forEach(item => {
destination[item.name] = item.implementation;
});
}
export class GraphbackClient {
private readonly queries: StringDic;
private readonly mutations: StringDic;
private readonly fragments: StringDic;
private readonly subscriptions: StringDic;
constructor(
queries: StringDic,
mutations: StringDic,
fragments: StringDic,
subscriptions: StringDic
) {
this.queries = queries;
this.mutations = mutations;
this.fragments = fragments;
this.subscriptions = subscriptions;
}
public getQueries(): StringDic {
return this.queries;
}
public getMutations(): StringDic {
return this.mutations;
}
public getFragments(): StringDic {
return this.fragments;
}
public getSubscriptions(): StringDic {
return this.subscriptions;
}
}
export async function initGraphbackClient(
context: InputModelTypeContext[]
): Promise<GraphbackClient> {
const fragments: StringDic = {};
const queries: StringDic = {};
const mutations: StringDic = {};
const subscriptions: StringDic = {};
const client = await createClient(context, { output: "gqlwithfragment" });
if (client.fragments !== undefined) {
insertImplInto(client.fragments, fragments);
}
if (client.queries !== undefined) {
insertImplInto(client.queries, queries);
}
if (client.mutations !== undefined) {
insertImplInto(client.mutations, mutations);
}
if (client.subscriptions !== undefined) {
insertImplInto(client.subscriptions, subscriptions);
}
return new GraphbackClient(queries, mutations, fragments, subscriptions);
}