@graphql-tools/external-fragment-loader
Version:
A GraphQL loader that resolves cross-package fragment dependencies from external packages
28 lines (27 loc) • 1.16 kB
JavaScript
import { concatAST } from 'graphql';
import { resolveExternalFragmentsSyncWithSources, resolveExternalFragmentsWithSources, } from './resolve.js';
function mergeResolvedDocuments(resolvedFiles) {
return concatAST(resolvedFiles.flatMap(file => file.sources.map(source => source.document)));
}
export default function externalFragmentLoader(_pointer, options) {
if (options.async === true) {
return resolveExternalFragmentsWithSources(options).then(mergeResolvedDocuments);
}
return mergeResolvedDocuments(resolveExternalFragmentsSyncWithSources(options));
}
export class ExternalFragmentLoader {
async load(_pointer, options) {
const resolvedFiles = await resolveExternalFragmentsWithSources(options);
return resolvedFiles.flatMap(file => file.sources.map(source => ({
location: file.filePath,
...source,
})));
}
loadSync(_pointer, options) {
const resolvedFiles = resolveExternalFragmentsSyncWithSources(options);
return resolvedFiles.flatMap(file => file.sources.map(source => ({
location: file.filePath,
...source,
})));
}
}