Sha256: 5374596c7aa540e6a6148baf83056a64acaa8d3cc183ff75f66472d2003c0c61

Contents?: true

Size: 1.87 KB

Versions: 26

Compression:

Stored size: 1.87 KB

Contents

import { GraphQLError } from '../../error/GraphQLError.mjs';
import { isEnumType } from '../../type/definition.mjs';

/**
 * Unique enum value names
 *
 * A GraphQL enum type is only valid if all its values are uniquely named.
 */
export function UniqueEnumValueNamesRule(context) {
  const schema = context.getSchema();
  const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);
  const knownValueNames = Object.create(null);
  return {
    EnumTypeDefinition: checkValueUniqueness,
    EnumTypeExtension: checkValueUniqueness,
  };

  function checkValueUniqueness(node) {
    var _node$values;

    const typeName = node.name.value;

    if (!knownValueNames[typeName]) {
      knownValueNames[typeName] = Object.create(null);
    } // FIXME: https://github.com/graphql/graphql-js/issues/2203

    /* c8 ignore next */

    const valueNodes =
      (_node$values = node.values) !== null && _node$values !== void 0
        ? _node$values
        : [];
    const valueNames = knownValueNames[typeName];

    for (const valueDef of valueNodes) {
      const valueName = valueDef.name.value;
      const existingType = existingTypeMap[typeName];

      if (isEnumType(existingType) && existingType.getValue(valueName)) {
        context.reportError(
          new GraphQLError(
            `Enum value "${typeName}.${valueName}" already exists in the schema. It cannot also be defined in this type extension.`,
            {
              nodes: valueDef.name,
            },
          ),
        );
      } else if (valueNames[valueName]) {
        context.reportError(
          new GraphQLError(
            `Enum value "${typeName}.${valueName}" can only be defined once.`,
            {
              nodes: [valueNames[valueName], valueDef.name],
            },
          ),
        );
      } else {
        valueNames[valueName] = valueDef.name;
      }
    }

    return false;
  }
}

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
clapton-0.0.26 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.25 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.24 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.23 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.22 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.21 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.20 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.19 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.18 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.17 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.16 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.15 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.14 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.13 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.12 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.11 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.10 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.9 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.8 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs
clapton-0.0.7 lib/clapton/javascripts/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.mjs