1 | import { isValidPath, parseGraphQLSDL } from '@graphql-tools/utils';
|
2 | import { isAbsolute, resolve } from 'path';
|
3 | import { pathExists, pathExistsSync, readFile, readFileSync } from 'fs-extra';
|
4 | import { cwd } from 'process';
|
5 | import { processImport } from '@graphql-tools/import';
|
6 |
|
7 | const FILE_EXTENSIONS = ['.gql', '.gqls', '.graphql', '.graphqls'];
|
8 | function isGraphQLImportFile(rawSDL) {
|
9 | const trimmedRawSDL = rawSDL.trim();
|
10 | return trimmedRawSDL.startsWith('# import') || trimmedRawSDL.startsWith('#import');
|
11 | }
|
12 | class GraphQLFileLoader {
|
13 | loaderId() {
|
14 | return 'graphql-file';
|
15 | }
|
16 | async canLoad(pointer, options) {
|
17 | if (isValidPath(pointer)) {
|
18 | if (FILE_EXTENSIONS.find(extension => pointer.endsWith(extension))) {
|
19 | const normalizedFilePath = isAbsolute(pointer) ? pointer : resolve(options.cwd, pointer);
|
20 | return pathExists(normalizedFilePath);
|
21 | }
|
22 | }
|
23 | return false;
|
24 | }
|
25 | canLoadSync(pointer, options) {
|
26 | if (isValidPath(pointer)) {
|
27 | if (FILE_EXTENSIONS.find(extension => pointer.endsWith(extension))) {
|
28 | const normalizedFilePath = isAbsolute(pointer) ? pointer : resolve(options.cwd, pointer);
|
29 | return pathExistsSync(normalizedFilePath);
|
30 | }
|
31 | }
|
32 | return false;
|
33 | }
|
34 | async load(pointer, options) {
|
35 | const normalizedFilePath = isAbsolute(pointer) ? pointer : resolve(options.cwd, pointer);
|
36 | const rawSDL = await readFile(normalizedFilePath, { encoding: 'utf8' });
|
37 | return this.handleFileContent(rawSDL, pointer, options);
|
38 | }
|
39 | loadSync(pointer, options) {
|
40 | const cwd$1 = options.cwd || cwd();
|
41 | const normalizedFilePath = isAbsolute(pointer) ? pointer : resolve(cwd$1, pointer);
|
42 | const rawSDL = readFileSync(normalizedFilePath, { encoding: 'utf8' });
|
43 | return this.handleFileContent(rawSDL, pointer, options);
|
44 | }
|
45 | handleFileContent(rawSDL, pointer, options) {
|
46 | if (!options.skipGraphQLImport && isGraphQLImportFile(rawSDL)) {
|
47 | return {
|
48 | location: pointer,
|
49 | document: processImport(pointer, options.cwd),
|
50 | };
|
51 | }
|
52 | return parseGraphQLSDL(pointer, rawSDL.trim(), options);
|
53 | }
|
54 | }
|
55 |
|
56 | export { GraphQLFileLoader };
|
57 |
|