UNPKG

2.05 kBJavaScriptView Raw
1import { loadConfig } from 'graphql-config';
2import { ApolloEngineLoader } from '@graphql-tools/apollo-engine-loader';
3import { CodeFileLoader } from '@graphql-tools/code-file-loader';
4import { GitLoader } from '@graphql-tools/git-loader';
5import { GithubLoader } from '@graphql-tools/github-loader';
6import { PrismaLoader } from '@graphql-tools/prisma-loader';
7export const CodegenExtension = (api) => {
8 // Schema
9 api.loaders.schema.register(new CodeFileLoader({
10 pluckConfig: {
11 skipIndent: true,
12 },
13 }));
14 api.loaders.schema.register(new GitLoader());
15 api.loaders.schema.register(new GithubLoader());
16 api.loaders.schema.register(new ApolloEngineLoader());
17 api.loaders.schema.register(new PrismaLoader());
18 // Documents
19 api.loaders.documents.register(new CodeFileLoader({
20 pluckConfig: {
21 skipIndent: true,
22 },
23 }));
24 api.loaders.documents.register(new GitLoader());
25 api.loaders.documents.register(new GithubLoader());
26 return {
27 name: 'codegen',
28 };
29};
30export async function findAndLoadGraphQLConfig(filepath) {
31 const config = await loadConfig({
32 filepath,
33 rootDir: process.cwd(),
34 extensions: [CodegenExtension],
35 throwOnEmpty: false,
36 throwOnMissing: false,
37 });
38 if (isGraphQLConfig(config)) {
39 return config;
40 }
41}
42// Kamil: user might load a config that is not GraphQL Config
43// so we need to check if it's a regular config or not
44function isGraphQLConfig(config) {
45 if (!config) {
46 return false;
47 }
48 try {
49 return config.getDefault().hasExtension('codegen');
50 }
51 catch (e) { }
52 try {
53 for (const projectName in config.projects) {
54 if (config.projects.hasOwnProperty(projectName)) {
55 const project = config.projects[projectName];
56 if (project.hasExtension('codegen')) {
57 return true;
58 }
59 }
60 }
61 }
62 catch (e) { }
63 return false;
64}