@graphql-tools/load
Version:
A set of utils for faster development of GraphQL tools
59 lines (58 loc) • 1.97 kB
JavaScript
import { printSchemaWithDirectives, parseGraphQLSDL, printWithComments, resetComments, } from '@graphql-tools/utils';
import { filterKind } from '../filter-document-kind.js';
export function parseSource({ partialSource, options, pointerOptionMap, addValidSource }) {
if (partialSource) {
const input = prepareInput({
source: partialSource,
options,
pointerOptionMap,
});
parseSchema(input);
parseRawSDL(input);
if (input.source.document) {
useKindsFilter(input);
useComments(input);
collectValidSources(input, addValidSource);
}
}
}
//
function prepareInput({ source, options, pointerOptionMap, }) {
let specificOptions = {
...options,
};
if (source.location) {
specificOptions = {
...specificOptions,
...pointerOptionMap[source.location],
};
}
return { source: { ...source }, options: specificOptions };
}
function parseSchema(input) {
if (input.source.schema) {
input.source.rawSDL = printSchemaWithDirectives(input.source.schema, input.options);
}
}
function parseRawSDL(input) {
if (input.source.rawSDL) {
input.source.document = parseGraphQLSDL(input.source.location, input.source.rawSDL, input.options).document;
}
}
function useKindsFilter(input) {
if (input.options.filterKinds) {
input.source.document = filterKind(input.source.document, input.options.filterKinds);
}
}
function useComments(input) {
if (!input.source.rawSDL && input.source.document) {
input.source.rawSDL = printWithComments(input.source.document);
resetComments();
}
}
function collectValidSources(input, addValidSource) {
var _a;
if (((_a = input.source.document) === null || _a === void 0 ? void 0 : _a.definitions) && input.source.document.definitions.length > 0) {
addValidSource(input.source);
}
}