-
Notifications
You must be signed in to change notification settings - Fork 0
/
codegen.ts
81 lines (67 loc) · 1.83 KB
/
codegen.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
import { CodegenConfig } from '@graphql-codegen/cli';
export const graphqlApiDomain: string =
process.env.BIGCOMMERCE_GRAPHQL_API_DOMAIN ?? 'mybigcommerce.com';
const getToken = () => {
const token = process.env.BIGCOMMERCE_CUSTOMER_IMPERSONATION_TOKEN;
if (!token) {
throw new Error('Missing customer impersonation token');
}
return token;
};
const getStoreHash = () => {
const storeHash = process.env.BIGCOMMERCE_STORE_HASH;
if (!storeHash) {
throw new Error('Missing store hash');
}
return storeHash;
};
const getChannelId = () => {
const channelId = process.env.BIGCOMMERCE_CHANNEL_ID;
return channelId;
};
const getEndpoint = () => {
const storeHash = getStoreHash();
const channelId = getChannelId();
// Not all sites have the channel-specific canonical URL backfilled.
// Wait till MSF-2643 is resolved before removing and simplifying the endpoint logic.
if (!channelId || channelId === '1') {
return `https://store-${storeHash}.${graphqlApiDomain}/graphql`;
}
return `https://store-${storeHash}-${channelId}.${graphqlApiDomain}/graphql`;
};
const config: CodegenConfig = {
schema: [
{
[getEndpoint()]: {
headers: {
Authorization: `Bearer ${getToken()}`,
},
},
},
],
documents: ['client/queries/**/*.ts', 'client/mutations/**/*.ts', 'client/fragments/**/*.ts'],
generates: {
'./client/generated/': {
preset: 'client',
presetConfig: {
fragmentMasking: false,
},
config: {
documentMode: 'string',
avoidOptionals: {
field: true,
},
scalars: {
DateTime: 'string',
Long: 'number',
BigDecimal: 'number',
},
},
},
'./schema.graphql': {
plugins: ['schema-ast'],
watchPattern: '',
},
},
};
export default config;