UNPKG

graphql-transformer-core

Version:

A framework to transform from GraphQL SDL to AWS cloudFormation.

110 lines (109 loc) 6.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateModelSchema = exports.EXTRA_DIRECTIVES_DOCUMENT = exports.specifiedRules = void 0; const language_1 = require("graphql/language"); const validation_1 = require("graphql/validation"); const buildASTSchema_1 = require("graphql/utilities/buildASTSchema"); const SingleFieldSubscriptionsRule_1 = require("graphql/validation/rules/SingleFieldSubscriptionsRule"); const KnownTypeNamesRule_1 = require("graphql/validation/rules/KnownTypeNamesRule"); const FragmentsOnCompositeTypesRule_1 = require("graphql/validation/rules/FragmentsOnCompositeTypesRule"); const VariablesAreInputTypesRule_1 = require("graphql/validation/rules/VariablesAreInputTypesRule"); const ScalarLeafsRule_1 = require("graphql/validation/rules/ScalarLeafsRule"); const FieldsOnCorrectTypeRule_1 = require("graphql/validation/rules/FieldsOnCorrectTypeRule"); const KnownDirectivesRule_1 = require("graphql/validation/rules/KnownDirectivesRule"); const KnownArgumentNamesRule_1 = require("graphql/validation/rules/KnownArgumentNamesRule"); const UniqueArgumentNamesRule_1 = require("graphql/validation/rules/UniqueArgumentNamesRule"); const ValuesOfCorrectTypeRule_1 = require("graphql/validation/rules/ValuesOfCorrectTypeRule"); const VariablesInAllowedPositionRule_1 = require("graphql/validation/rules/VariablesInAllowedPositionRule"); const OverlappingFieldsCanBeMergedRule_1 = require("graphql/validation/rules/OverlappingFieldsCanBeMergedRule"); const UniqueInputFieldNamesRule_1 = require("graphql/validation/rules/UniqueInputFieldNamesRule"); const ProvidedRequiredArgumentsRule_1 = require("graphql/validation/rules/ProvidedRequiredArgumentsRule"); const UniqueOperationNamesRule_1 = require("graphql/validation/rules/UniqueOperationNamesRule"); const LoneAnonymousOperationRule_1 = require("graphql/validation/rules/LoneAnonymousOperationRule"); const UniqueFragmentNamesRule_1 = require("graphql/validation/rules/UniqueFragmentNamesRule"); const KnownFragmentNamesRule_1 = require("graphql/validation/rules/KnownFragmentNamesRule"); const NoUnusedFragmentsRule_1 = require("graphql/validation/rules/NoUnusedFragmentsRule"); const PossibleFragmentSpreadsRule_1 = require("graphql/validation/rules/PossibleFragmentSpreadsRule"); const NoFragmentCyclesRule_1 = require("graphql/validation/rules/NoFragmentCyclesRule"); const UniqueVariableNamesRule_1 = require("graphql/validation/rules/UniqueVariableNamesRule"); const NoUndefinedVariablesRule_1 = require("graphql/validation/rules/NoUndefinedVariablesRule"); const NoUnusedVariablesRule_1 = require("graphql/validation/rules/NoUnusedVariablesRule"); const UniqueDirectivesPerLocationRule_1 = require("graphql/validation/rules/UniqueDirectivesPerLocationRule"); const validate_1 = require("graphql/validation/validate"); exports.specifiedRules = [ UniqueOperationNamesRule_1.UniqueOperationNamesRule, LoneAnonymousOperationRule_1.LoneAnonymousOperationRule, SingleFieldSubscriptionsRule_1.SingleFieldSubscriptionsRule, KnownTypeNamesRule_1.KnownTypeNamesRule, FragmentsOnCompositeTypesRule_1.FragmentsOnCompositeTypesRule, VariablesAreInputTypesRule_1.VariablesAreInputTypesRule, ScalarLeafsRule_1.ScalarLeafsRule, FieldsOnCorrectTypeRule_1.FieldsOnCorrectTypeRule, UniqueFragmentNamesRule_1.UniqueFragmentNamesRule, KnownFragmentNamesRule_1.KnownFragmentNamesRule, NoUnusedFragmentsRule_1.NoUnusedFragmentsRule, PossibleFragmentSpreadsRule_1.PossibleFragmentSpreadsRule, NoFragmentCyclesRule_1.NoFragmentCyclesRule, UniqueVariableNamesRule_1.UniqueVariableNamesRule, NoUndefinedVariablesRule_1.NoUndefinedVariablesRule, NoUnusedVariablesRule_1.NoUnusedVariablesRule, KnownDirectivesRule_1.KnownDirectivesRule, UniqueDirectivesPerLocationRule_1.UniqueDirectivesPerLocationRule, KnownArgumentNamesRule_1.KnownArgumentNamesRule, UniqueArgumentNamesRule_1.UniqueArgumentNamesRule, ValuesOfCorrectTypeRule_1.ValuesOfCorrectTypeRule, ProvidedRequiredArgumentsRule_1.ProvidedRequiredArgumentsRule, VariablesInAllowedPositionRule_1.VariablesInAllowedPositionRule, OverlappingFieldsCanBeMergedRule_1.OverlappingFieldsCanBeMergedRule, UniqueInputFieldNamesRule_1.UniqueInputFieldNamesRule, ]; const EXTRA_SCALARS_DOCUMENT = (0, language_1.parse)(` scalar AWSDate scalar AWSTime scalar AWSDateTime scalar AWSTimestamp scalar AWSEmail scalar AWSJSON scalar AWSURL scalar AWSPhone scalar AWSIPAddress scalar BigInt scalar Double `); exports.EXTRA_DIRECTIVES_DOCUMENT = (0, language_1.parse)(` directive @aws_subscribe(mutations: [String!]!) on FIELD_DEFINITION directive @aws_auth(cognito_groups: [String!]!) on FIELD_DEFINITION directive @aws_api_key on FIELD_DEFINITION | OBJECT directive @aws_iam on FIELD_DEFINITION | OBJECT directive @aws_oidc on FIELD_DEFINITION | OBJECT directive @aws_cognito_user_pools(cognito_groups: [String!]) on FIELD_DEFINITION | OBJECT directive @aws_lambda on FIELD_DEFINITION | OBJECT # Allows transformer libraries to deprecate directive arguments. directive @deprecated(reason: String) on FIELD_DEFINITION | INPUT_FIELD_DEFINITION | ENUM | ENUM_VALUE `); const NOOP_QUERY = (0, language_1.parse)(` type Query { noop: String } `); const validateModelSchema = (doc) => { const fullDocument = { kind: language_1.Kind.DOCUMENT, definitions: [...exports.EXTRA_DIRECTIVES_DOCUMENT.definitions, ...doc.definitions, ...EXTRA_SCALARS_DOCUMENT.definitions], }; const schemaDef = doc.definitions.find((d) => d.kind === language_1.Kind.SCHEMA_DEFINITION); const queryOperation = schemaDef ? schemaDef.operationTypes.find((o) => o.operation === 'query') : undefined; const queryName = queryOperation ? queryOperation.type.name.value : 'Query'; const existingQueryType = doc.definitions.find((d) => d.kind !== language_1.Kind.DIRECTIVE_DEFINITION && d.kind !== language_1.Kind.SCHEMA_DEFINITION && d.name && d.name.value === queryName); if (!existingQueryType) { fullDocument.definitions.push(...NOOP_QUERY.definitions); } const errors = (0, validate_1.validateSDL)(fullDocument); if (errors.length > 0) { return errors; } const schema = (0, buildASTSchema_1.buildASTSchema)(fullDocument, { assumeValid: true }); return (0, validation_1.validate)(schema, fullDocument, exports.specifiedRules); }; exports.validateModelSchema = validateModelSchema; //# sourceMappingURL=validation.js.map