1 | import { loadSchema as loadSchemaToolkit, loadDocuments as loadDocumentsToolkit, } from '@graphql-tools/load';
|
2 | import { CodeFileLoader } from '@graphql-tools/code-file-loader';
|
3 | import { GitLoader } from '@graphql-tools/git-loader';
|
4 | import { GithubLoader } from '@graphql-tools/github-loader';
|
5 | import { GraphQLFileLoader } from '@graphql-tools/graphql-file-loader';
|
6 | import { JsonFileLoader } from '@graphql-tools/json-file-loader';
|
7 | import { UrlLoader } from '@graphql-tools/url-loader';
|
8 | import { ApolloEngineLoader } from '@graphql-tools/apollo-engine-loader';
|
9 | import { PrismaLoader } from '@graphql-tools/prisma-loader';
|
10 | import { join, extname } from 'path';
|
11 | export const defaultSchemaLoadOptions = {
|
12 | assumeValidSDL: true,
|
13 | sort: true,
|
14 | convertExtensions: true,
|
15 | includeSources: true,
|
16 | };
|
17 | export const defaultDocumentsLoadOptions = {
|
18 | sort: true,
|
19 | skipGraphQLImport: true,
|
20 | };
|
21 | export async function loadSchema(schemaPointers, config) {
|
22 | try {
|
23 | const loaders = [
|
24 | new CodeFileLoader(),
|
25 | new GitLoader(),
|
26 | new GithubLoader(),
|
27 | new GraphQLFileLoader(),
|
28 | new JsonFileLoader(),
|
29 | new UrlLoader(),
|
30 | new ApolloEngineLoader(),
|
31 | new PrismaLoader(),
|
32 | ];
|
33 | const schema = await loadSchemaToolkit(schemaPointers, {
|
34 | ...defaultSchemaLoadOptions,
|
35 | loaders,
|
36 | ...config,
|
37 | ...config.config,
|
38 | });
|
39 | return schema;
|
40 | }
|
41 | catch (e) {
|
42 | throw new Error(`
|
43 | Failed to load schema from ${Object.keys(schemaPointers).join(',')}:
|
44 |
|
45 | ${e.message || e}
|
46 | ${e.stack || ''}
|
47 |
|
48 | GraphQL Code Generator supports:
|
49 | - ES Modules and CommonJS exports (export as default or named export "schema")
|
50 | - Introspection JSON File
|
51 | - URL of GraphQL endpoint
|
52 | - Multiple files with type definitions (glob expression)
|
53 | - String in config file
|
54 |
|
55 | Try to use one of above options and run codegen again.
|
56 |
|
57 | `);
|
58 | }
|
59 | }
|
60 | export async function loadDocuments(documentPointers, config) {
|
61 | const loaders = [
|
62 | new CodeFileLoader({
|
63 | pluckConfig: {
|
64 | skipIndent: true,
|
65 | },
|
66 | }),
|
67 | new GitLoader(),
|
68 | new GithubLoader(),
|
69 | new GraphQLFileLoader(),
|
70 | ];
|
71 | const ignore = [];
|
72 | for (const generatePath of Object.keys(config.generates)) {
|
73 | if (extname(generatePath) === '') {
|
74 |
|
75 | continue;
|
76 | }
|
77 | ignore.push(join(process.cwd(), generatePath));
|
78 | }
|
79 | try {
|
80 | const loadedFromToolkit = await loadDocumentsToolkit(documentPointers, {
|
81 | ...defaultDocumentsLoadOptions,
|
82 | ignore,
|
83 | loaders,
|
84 | ...config,
|
85 | ...config.config,
|
86 | });
|
87 | return loadedFromToolkit;
|
88 | }
|
89 | catch (error) {
|
90 | if (config.ignoreNoDocuments)
|
91 | return [];
|
92 | throw error;
|
93 | }
|
94 | }
|