UNPKG

2.35 kBJavaScriptView Raw
1import { isValidPath, parseGraphQLSDL } from '@graphql-tools/utils';
2import { isAbsolute, resolve } from 'path';
3import { pathExists, pathExistsSync, readFile, readFileSync } from 'fs-extra';
4import { cwd } from 'process';
5import { processImport } from '@graphql-tools/import';
6
7const FILE_EXTENSIONS = ['.gql', '.gqls', '.graphql', '.graphqls'];
8function isGraphQLImportFile(rawSDL) {
9 const trimmedRawSDL = rawSDL.trim();
10 return trimmedRawSDL.startsWith('# import') || trimmedRawSDL.startsWith('#import');
11}
12class 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
56export { GraphQLFileLoader };
57//# sourceMappingURL=index.esm.js.map