apollo-codegen
Version:
Generate API code or type annotations based on a GraphQL schema and query documents
43 lines • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const graphql_1 = require("graphql");
const errors_1 = require("./errors");
function validateQueryDocument(schema, document) {
const specifiedRulesToBeRemoved = [graphql_1.NoUnusedFragmentsRule];
const rules = [
NoAnonymousQueries,
NoTypenameAlias,
...graphql_1.specifiedRules.filter(rule => !specifiedRulesToBeRemoved.includes(rule))
];
const validationErrors = graphql_1.validate(schema, document, rules);
if (validationErrors && validationErrors.length > 0) {
for (const error of validationErrors) {
errors_1.logError(error);
}
throw new errors_1.ToolError('Validation of GraphQL query document failed');
}
}
exports.validateQueryDocument = validateQueryDocument;
function NoAnonymousQueries(context) {
return {
OperationDefinition(node) {
if (!node.name) {
context.reportError(new graphql_1.GraphQLError('Apollo does not support anonymous operations', [node]));
}
return false;
}
};
}
exports.NoAnonymousQueries = NoAnonymousQueries;
function NoTypenameAlias(context) {
return {
Field(node) {
const aliasName = node.alias && node.alias.value;
if (aliasName == '__typename') {
context.reportError(new graphql_1.GraphQLError('Apollo needs to be able to insert __typename when needed, please do not use it as an alias', [node]));
}
}
};
}
exports.NoTypenameAlias = NoTypenameAlias;
//# sourceMappingURL=validation.js.map