gatsby
Version:
Blazing fast modern site generator for React
86 lines (83 loc) • 2.37 kB
JavaScript
var _typeBuilders = require("./type-builders");
const {
parse,
Kind: GraphQLASTNodeKind
} = require(`graphql`);
const {
inferExtensionName,
dontInferExtensionName
} = require(`../extensions`);
const report = require(`gatsby-cli/lib/reporter`);
const isASTDocument = typeOrTypeDef => typeof typeOrTypeDef === `object` && typeOrTypeDef.kind && GraphQLASTNodeKind.DOCUMENT === typeOrTypeDef.kind;
/**
* Parses type definition represented as an SDL string into an AST Document.
* Type definitions of other formats (other than SDL) are returned as is
*/
const parseTypeDef = typeOrTypeDef => {
if (typeof typeOrTypeDef === `string`) {
try {
return parse(typeOrTypeDef);
} catch (error) {
reportParsingError(error);
}
}
return typeOrTypeDef;
};
const reportParsingError = error => {
const {
message,
source,
locations
} = error;
if (source && locations && locations.length) {
const {
codeFrameColumns
} = require(`@babel/code-frame`);
const frame = codeFrameColumns(source.body, {
start: locations[0]
}, {
linesAbove: 5,
linesBelow: 5
});
report.panic(`Encountered an error parsing the provided GraphQL type definitions:\n` + message + `\n\n` + frame + `\n`);
} else {
throw error;
}
};
/**
* Given a type definition, collects type names that should skip the inference process
*/
const typesWithoutInference = (typeNames = [], typeOrTypeDef) => {
if (typeof typeOrTypeDef === `string`) {
typeOrTypeDef = parseTypeDef(typeOrTypeDef);
}
if (isASTDocument(typeOrTypeDef)) {
typeOrTypeDef.definitions.forEach(def => {
if (!def.directives) return;
def.directives.forEach(directive => {
if (directive.name.value === dontInferExtensionName && def.name.value) {
typeNames.push(def.name.value);
}
});
});
return typeNames;
}
if ((0, _typeBuilders.isGatsbyType)(typeOrTypeDef) && typeOrTypeDef.config) {
const {
extensions = {},
name
} = typeOrTypeDef.config;
if (name && (extensions[dontInferExtensionName] || extensions[inferExtensionName] === false)) {
typeNames.push(name);
}
}
return typeNames;
};
module.exports = {
parseTypeDef,
reportParsingError,
typesWithoutInference,
isASTDocument
};
//# sourceMappingURL=type-defs.js.map
;