var GraphiQLSubscriptionsFetcher = /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // identity function for calling harmony imports with the correct context /******/ __webpack_require__.i = function(value) { return value; }; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 37); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _GraphQLError = __webpack_require__(13); Object.defineProperty(exports, 'GraphQLError', { enumerable: true, get: function get() { return _GraphQLError.GraphQLError; } }); var _syntaxError = __webpack_require__(40); Object.defineProperty(exports, 'syntaxError', { enumerable: true, get: function get() { return _syntaxError.syntaxError; } }); var _locatedError = __webpack_require__(39); Object.defineProperty(exports, 'locatedError', { enumerable: true, get: function get() { return _locatedError.locatedError; } }); var _formatError = __webpack_require__(38); Object.defineProperty(exports, 'formatError', { enumerable: true, get: function get() { return _formatError.formatError; } }); /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GraphQLNonNull = exports.GraphQLList = exports.GraphQLInputObjectType = exports.GraphQLEnumType = exports.GraphQLUnionType = exports.GraphQLInterfaceType = exports.GraphQLObjectType = exports.GraphQLScalarType = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports.isType = isType; exports.assertType = assertType; exports.isInputType = isInputType; exports.assertInputType = assertInputType; exports.isOutputType = isOutputType; exports.assertOutputType = assertOutputType; exports.isLeafType = isLeafType; exports.assertLeafType = assertLeafType; exports.isCompositeType = isCompositeType; exports.assertCompositeType = assertCompositeType; exports.isAbstractType = isAbstractType; exports.assertAbstractType = assertAbstractType; exports.getNullableType = getNullableType; exports.isNamedType = isNamedType; exports.assertNamedType = assertNamedType; exports.getNamedType = getNamedType; var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _isNullish = __webpack_require__(6); var _isNullish2 = _interopRequireDefault(_isNullish); var _kinds = __webpack_require__(2); var _assertValidName = __webpack_require__(28); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ // Predicates & Assertions /** * These are all of the possible kinds of types. */ function isType(type) { return type instanceof GraphQLScalarType || type instanceof GraphQLObjectType || type instanceof GraphQLInterfaceType || type instanceof GraphQLUnionType || type instanceof GraphQLEnumType || type instanceof GraphQLInputObjectType || type instanceof GraphQLList || type instanceof GraphQLNonNull; } function assertType(type) { (0, _invariant2.default)(isType(type), 'Expected ' + String(type) + ' to be a GraphQL type.'); return type; } /** * These types may be used as input types for arguments and directives. */ function isInputType(type) { var namedType = getNamedType(type); return namedType instanceof GraphQLScalarType || namedType instanceof GraphQLEnumType || namedType instanceof GraphQLInputObjectType; } function assertInputType(type) { (0, _invariant2.default)(isInputType(type), 'Expected ' + String(type) + ' to be a GraphQL input type.'); return type; } /** * These types may be used as output types as the result of fields. */ function isOutputType(type) { var namedType = getNamedType(type); return namedType instanceof GraphQLScalarType || namedType instanceof GraphQLObjectType || namedType instanceof GraphQLInterfaceType || namedType instanceof GraphQLUnionType || namedType instanceof GraphQLEnumType; } function assertOutputType(type) { (0, _invariant2.default)(isOutputType(type), 'Expected ' + String(type) + ' to be a GraphQL output type.'); return type; } /** * These types may describe types which may be leaf values. */ function isLeafType(type) { var namedType = getNamedType(type); return namedType instanceof GraphQLScalarType || namedType instanceof GraphQLEnumType; } function assertLeafType(type) { (0, _invariant2.default)(isLeafType(type), 'Expected ' + String(type) + ' to be a GraphQL leaf type.'); return type; } /** * These types may describe the parent context of a selection set. */ function isCompositeType(type) { return type instanceof GraphQLObjectType || type instanceof GraphQLInterfaceType || type instanceof GraphQLUnionType; } function assertCompositeType(type) { (0, _invariant2.default)(isCompositeType(type), 'Expected ' + String(type) + ' to be a GraphQL composite type.'); return type; } /** * These types may describe the parent context of a selection set. */ function isAbstractType(type) { return type instanceof GraphQLInterfaceType || type instanceof GraphQLUnionType; } function assertAbstractType(type) { (0, _invariant2.default)(isAbstractType(type), 'Expected ' + String(type) + ' to be a GraphQL abstract type.'); return type; } /** * These types can all accept null as a value. */ function getNullableType(type) { return type instanceof GraphQLNonNull ? type.ofType : type; } /** * These named types do not include modifiers like List or NonNull. */ function isNamedType(type) { return type instanceof GraphQLScalarType || type instanceof GraphQLObjectType || type instanceof GraphQLInterfaceType || type instanceof GraphQLUnionType || type instanceof GraphQLEnumType || type instanceof GraphQLInputObjectType; } function assertNamedType(type) { (0, _invariant2.default)(isNamedType(type), 'Expected ' + String(type) + ' to be a GraphQL named type.'); return type; } function getNamedType(type) { var unmodifiedType = type; while (unmodifiedType instanceof GraphQLList || unmodifiedType instanceof GraphQLNonNull) { unmodifiedType = unmodifiedType.ofType; } return unmodifiedType; } /** * Used while defining GraphQL types to allow for circular references in * otherwise immutable type definitions. */ function resolveThunk(thunk) { return typeof thunk === 'function' ? thunk() : thunk; } /** * Scalar Type Definition * * The leaf values of any request and input values to arguments are * Scalars (or Enums) and are defined with a name and a series of functions * used to parse input from ast or variables and to ensure validity. * * Example: * * const OddType = new GraphQLScalarType({ * name: 'Odd', * serialize(value) { * return value % 2 === 1 ? value : null; * } * }); * */ var GraphQLScalarType = exports.GraphQLScalarType = function () { function GraphQLScalarType(config) { _classCallCheck(this, GraphQLScalarType); (0, _assertValidName.assertValidName)(config.name); this.name = config.name; this.description = config.description; (0, _invariant2.default)(typeof config.serialize === 'function', this.name + ' must provide "serialize" function. If this custom Scalar ' + 'is also used as an input type, ensure "parseValue" and "parseLiteral" ' + 'functions are also provided.'); if (config.parseValue || config.parseLiteral) { (0, _invariant2.default)(typeof config.parseValue === 'function' && typeof config.parseLiteral === 'function', this.name + ' must provide both "parseValue" and "parseLiteral" ' + 'functions.'); } this._scalarConfig = config; } // Serializes an internal value to include in a response. GraphQLScalarType.prototype.serialize = function serialize(value) { var serializer = this._scalarConfig.serialize; return serializer(value); }; // Parses an externally provided value to use as an input. GraphQLScalarType.prototype.parseValue = function parseValue(value) { var parser = this._scalarConfig.parseValue; return parser ? parser(value) : null; }; // Parses an externally provided literal value to use as an input. GraphQLScalarType.prototype.parseLiteral = function parseLiteral(valueNode) { var parser = this._scalarConfig.parseLiteral; return parser ? parser(valueNode) : null; }; GraphQLScalarType.prototype.toString = function toString() { return this.name; }; return GraphQLScalarType; }(); // Also provide toJSON and inspect aliases for toString. GraphQLScalarType.prototype.toJSON = GraphQLScalarType.prototype.inspect = GraphQLScalarType.prototype.toString; /** * Object Type Definition * * Almost all of the GraphQL types you define will be object types. Object types * have a name, but most importantly describe their fields. * * Example: * * const AddressType = new GraphQLObjectType({ * name: 'Address', * fields: { * street: { type: GraphQLString }, * number: { type: GraphQLInt }, * formatted: { * type: GraphQLString, * resolve(obj) { * return obj.number + ' ' + obj.street * } * } * } * }); * * When two types need to refer to each other, or a type needs to refer to * itself in a field, you can use a function expression (aka a closure or a * thunk) to supply the fields lazily. * * Example: * * const PersonType = new GraphQLObjectType({ * name: 'Person', * fields: () => ({ * name: { type: GraphQLString }, * bestFriend: { type: PersonType }, * }) * }); * */ var GraphQLObjectType = exports.GraphQLObjectType = function () { function GraphQLObjectType(config) { _classCallCheck(this, GraphQLObjectType); (0, _assertValidName.assertValidName)(config.name, config.isIntrospection); this.name = config.name; this.description = config.description; if (config.isTypeOf) { (0, _invariant2.default)(typeof config.isTypeOf === 'function', this.name + ' must provide "isTypeOf" as a function.'); } this.isTypeOf = config.isTypeOf; this._typeConfig = config; } GraphQLObjectType.prototype.getFields = function getFields() { return this._fields || (this._fields = defineFieldMap(this, this._typeConfig.fields)); }; GraphQLObjectType.prototype.getInterfaces = function getInterfaces() { return this._interfaces || (this._interfaces = defineInterfaces(this, this._typeConfig.interfaces)); }; GraphQLObjectType.prototype.toString = function toString() { return this.name; }; return GraphQLObjectType; }(); // Also provide toJSON and inspect aliases for toString. GraphQLObjectType.prototype.toJSON = GraphQLObjectType.prototype.inspect = GraphQLObjectType.prototype.toString; function defineInterfaces(type, interfacesThunk) { var interfaces = resolveThunk(interfacesThunk); if (!interfaces) { return []; } (0, _invariant2.default)(Array.isArray(interfaces), type.name + ' interfaces must be an Array or a function which returns ' + 'an Array.'); interfaces.forEach(function (iface) { (0, _invariant2.default)(iface instanceof GraphQLInterfaceType, type.name + ' may only implement Interface types, it cannot ' + ('implement: ' + String(iface) + '.')); if (typeof iface.resolveType !== 'function') { (0, _invariant2.default)(typeof type.isTypeOf === 'function', 'Interface Type ' + iface.name + ' does not provide a "resolveType" ' + ('function and implementing Type ' + type.name + ' does not provide a ') + '"isTypeOf" function. There is no way to resolve this implementing ' + 'type during execution.'); } }); return interfaces; } function defineFieldMap(type, fieldsThunk) { var fieldMap = resolveThunk(fieldsThunk); (0, _invariant2.default)(isPlainObj(fieldMap), type.name + ' fields must be an object with field names as keys or a ' + 'function which returns such an object.'); var fieldNames = Object.keys(fieldMap); (0, _invariant2.default)(fieldNames.length > 0, type.name + ' fields must be an object with field names as keys or a ' + 'function which returns such an object.'); var resultFieldMap = {}; fieldNames.forEach(function (fieldName) { (0, _assertValidName.assertValidName)(fieldName); var fieldConfig = fieldMap[fieldName]; (0, _invariant2.default)(!fieldConfig.hasOwnProperty('isDeprecated'), type.name + '.' + fieldName + ' should provide "deprecationReason" instead ' + 'of "isDeprecated".'); var field = _extends({}, fieldConfig, { isDeprecated: Boolean(fieldConfig.deprecationReason), name: fieldName }); (0, _invariant2.default)(isOutputType(field.type), type.name + '.' + fieldName + ' field type must be Output Type but ' + ('got: ' + String(field.type) + '.')); (0, _invariant2.default)(isValidResolver(field.resolve), type.name + '.' + fieldName + ' field resolver must be a function if ' + ('provided, but got: ' + String(field.resolve) + '.')); var argsConfig = fieldConfig.args; if (!argsConfig) { field.args = []; } else { (0, _invariant2.default)(isPlainObj(argsConfig), type.name + '.' + fieldName + ' args must be an object with argument ' + 'names as keys.'); field.args = Object.keys(argsConfig).map(function (argName) { (0, _assertValidName.assertValidName)(argName); var arg = argsConfig[argName]; (0, _invariant2.default)(isInputType(arg.type), type.name + '.' + fieldName + '(' + argName + ':) argument type must be ' + ('Input Type but got: ' + String(arg.type) + '.')); return { name: argName, description: arg.description === undefined ? null : arg.description, type: arg.type, defaultValue: arg.defaultValue }; }); } resultFieldMap[fieldName] = field; }); return resultFieldMap; } function isPlainObj(obj) { return obj && typeof obj === 'object' && !Array.isArray(obj); } // If a resolver is defined, it must be a function. function isValidResolver(resolver) { return resolver == null || typeof resolver === 'function'; } /** * Interface Type Definition * * When a field can return one of a heterogeneous set of types, a Interface type * is used to describe what types are possible, what fields are in common across * all types, as well as a function to determine which type is actually used * when the field is resolved. * * Example: * * const EntityType = new GraphQLInterfaceType({ * name: 'Entity', * fields: { * name: { type: GraphQLString } * } * }); * */ var GraphQLInterfaceType = exports.GraphQLInterfaceType = function () { function GraphQLInterfaceType(config) { _classCallCheck(this, GraphQLInterfaceType); (0, _assertValidName.assertValidName)(config.name); this.name = config.name; this.description = config.description; if (config.resolveType) { (0, _invariant2.default)(typeof config.resolveType === 'function', this.name + ' must provide "resolveType" as a function.'); } this.resolveType = config.resolveType; this._typeConfig = config; } GraphQLInterfaceType.prototype.getFields = function getFields() { return this._fields || (this._fields = defineFieldMap(this, this._typeConfig.fields)); }; GraphQLInterfaceType.prototype.toString = function toString() { return this.name; }; return GraphQLInterfaceType; }(); // Also provide toJSON and inspect aliases for toString. GraphQLInterfaceType.prototype.toJSON = GraphQLInterfaceType.prototype.inspect = GraphQLInterfaceType.prototype.toString; /** * Union Type Definition * * When a field can return one of a heterogeneous set of types, a Union type * is used to describe what types are possible as well as providing a function * to determine which type is actually used when the field is resolved. * * Example: * * const PetType = new GraphQLUnionType({ * name: 'Pet', * types: [ DogType, CatType ], * resolveType(value) { * if (value instanceof Dog) { * return DogType; * } * if (value instanceof Cat) { * return CatType; * } * } * }); * */ var GraphQLUnionType = exports.GraphQLUnionType = function () { function GraphQLUnionType(config) { _classCallCheck(this, GraphQLUnionType); (0, _assertValidName.assertValidName)(config.name); this.name = config.name; this.description = config.description; if (config.resolveType) { (0, _invariant2.default)(typeof config.resolveType === 'function', this.name + ' must provide "resolveType" as a function.'); } this.resolveType = config.resolveType; this._typeConfig = config; } GraphQLUnionType.prototype.getTypes = function getTypes() { return this._types || (this._types = defineTypes(this, this._typeConfig.types)); }; GraphQLUnionType.prototype.toString = function toString() { return this.name; }; return GraphQLUnionType; }(); // Also provide toJSON and inspect aliases for toString. GraphQLUnionType.prototype.toJSON = GraphQLUnionType.prototype.inspect = GraphQLUnionType.prototype.toString; function defineTypes(unionType, typesThunk) { var types = resolveThunk(typesThunk); (0, _invariant2.default)(Array.isArray(types) && types.length > 0, 'Must provide Array of types or a function which returns ' + ('such an array for Union ' + unionType.name + '.')); types.forEach(function (objType) { (0, _invariant2.default)(objType instanceof GraphQLObjectType, unionType.name + ' may only contain Object types, it cannot contain: ' + (String(objType) + '.')); if (typeof unionType.resolveType !== 'function') { (0, _invariant2.default)(typeof objType.isTypeOf === 'function', 'Union type "' + unionType.name + '" does not provide a "resolveType" ' + ('function and possible type "' + objType.name + '" does not provide an ') + '"isTypeOf" function. There is no way to resolve this possible type ' + 'during execution.'); } }); return types; } /** * Enum Type Definition * * Some leaf values of requests and input values are Enums. GraphQL serializes * Enum values as strings, however internally Enums can be represented by any * kind of type, often integers. * * Example: * * const RGBType = new GraphQLEnumType({ * name: 'RGB', * values: { * RED: { value: 0 }, * GREEN: { value: 1 }, * BLUE: { value: 2 } * } * }); * * Note: If a value is not provided in a definition, the name of the enum value * will be used as its internal value. */ var GraphQLEnumType /* */ = exports.GraphQLEnumType = function () { function GraphQLEnumType(config /* */) { _classCallCheck(this, GraphQLEnumType); this.name = config.name; (0, _assertValidName.assertValidName)(config.name, config.isIntrospection); this.description = config.description; this._values = defineEnumValues(this, config.values); this._enumConfig = config; } GraphQLEnumType.prototype.getValues = function getValues() { return this._values; }; GraphQLEnumType.prototype.getValue = function getValue(name) { return this._getNameLookup()[name]; }; GraphQLEnumType.prototype.serialize = function serialize(value /* T */) { var enumValue = this._getValueLookup().get(value); return enumValue ? enumValue.name : null; }; GraphQLEnumType.prototype.parseValue = function parseValue(value) /* T */{ if (typeof value === 'string') { var enumValue = this._getNameLookup()[value]; if (enumValue) { return enumValue.value; } } }; GraphQLEnumType.prototype.parseLiteral = function parseLiteral(valueNode) /* T */{ if (valueNode.kind === _kinds.ENUM) { var enumValue = this._getNameLookup()[valueNode.value]; if (enumValue) { return enumValue.value; } } }; GraphQLEnumType.prototype._getValueLookup = function _getValueLookup() { var _this = this; if (!this._valueLookup) { (function () { var lookup = new Map(); _this.getValues().forEach(function (value) { lookup.set(value.value, value); }); _this._valueLookup = lookup; })(); } return this._valueLookup; }; GraphQLEnumType.prototype._getNameLookup = function _getNameLookup() { var _this2 = this; if (!this._nameLookup) { (function () { var lookup = Object.create(null); _this2.getValues().forEach(function (value) { lookup[value.name] = value; }); _this2._nameLookup = lookup; })(); } return this._nameLookup; }; GraphQLEnumType.prototype.toString = function toString() { return this.name; }; return GraphQLEnumType; }(); // Also provide toJSON and inspect aliases for toString. GraphQLEnumType.prototype.toJSON = GraphQLEnumType.prototype.inspect = GraphQLEnumType.prototype.toString; function defineEnumValues(type, valueMap /* */ ) { (0, _invariant2.default)(isPlainObj(valueMap), type.name + ' values must be an object with value names as keys.'); var valueNames = Object.keys(valueMap); (0, _invariant2.default)(valueNames.length > 0, type.name + ' values must be an object with value names as keys.'); return valueNames.map(function (valueName) { (0, _assertValidName.assertValidName)(valueName); var value = valueMap[valueName]; (0, _invariant2.default)(isPlainObj(value), type.name + '.' + valueName + ' must refer to an object with a "value" key ' + ('representing an internal value but got: ' + String(value) + '.')); (0, _invariant2.default)(!value.hasOwnProperty('isDeprecated'), type.name + '.' + valueName + ' should provide "deprecationReason" instead ' + 'of "isDeprecated".'); return { name: valueName, description: value.description, isDeprecated: Boolean(value.deprecationReason), deprecationReason: value.deprecationReason, value: (0, _isNullish2.default)(value.value) ? valueName : value.value }; }); } /* */ /** * Input Object Type Definition * * An input object defines a structured collection of fields which may be * supplied to a field argument. * * Using `NonNull` will ensure that a value must be provided by the query * * Example: * * const GeoPoint = new GraphQLInputObjectType({ * name: 'GeoPoint', * fields: { * lat: { type: new GraphQLNonNull(GraphQLFloat) }, * lon: { type: new GraphQLNonNull(GraphQLFloat) }, * alt: { type: GraphQLFloat, defaultValue: 0 }, * } * }); * */ var GraphQLInputObjectType = exports.GraphQLInputObjectType = function () { function GraphQLInputObjectType(config) { _classCallCheck(this, GraphQLInputObjectType); (0, _assertValidName.assertValidName)(config.name); this.name = config.name; this.description = config.description; this._typeConfig = config; } GraphQLInputObjectType.prototype.getFields = function getFields() { return this._fields || (this._fields = this._defineFieldMap()); }; GraphQLInputObjectType.prototype._defineFieldMap = function _defineFieldMap() { var _this3 = this; var fieldMap = resolveThunk(this._typeConfig.fields); (0, _invariant2.default)(isPlainObj(fieldMap), this.name + ' fields must be an object with field names as keys or a ' + 'function which returns such an object.'); var fieldNames = Object.keys(fieldMap); (0, _invariant2.default)(fieldNames.length > 0, this.name + ' fields must be an object with field names as keys or a ' + 'function which returns such an object.'); var resultFieldMap = {}; fieldNames.forEach(function (fieldName) { (0, _assertValidName.assertValidName)(fieldName); var field = _extends({}, fieldMap[fieldName], { name: fieldName }); (0, _invariant2.default)(isInputType(field.type), _this3.name + '.' + fieldName + ' field type must be Input Type but ' + ('got: ' + String(field.type) + '.')); (0, _invariant2.default)(field.resolve == null, _this3.name + '.' + fieldName + ' field type has a resolve property, but ' + 'Input Types cannot define resolvers.'); resultFieldMap[fieldName] = field; }); return resultFieldMap; }; GraphQLInputObjectType.prototype.toString = function toString() { return this.name; }; return GraphQLInputObjectType; }(); // Also provide toJSON and inspect aliases for toString. GraphQLInputObjectType.prototype.toJSON = GraphQLInputObjectType.prototype.inspect = GraphQLInputObjectType.prototype.toString; /** * List Modifier * * A list is a kind of type marker, a wrapping type which points to another * type. Lists are often created within the context of defining the fields of * an object type. * * Example: * * const PersonType = new GraphQLObjectType({ * name: 'Person', * fields: () => ({ * parents: { type: new GraphQLList(Person) }, * children: { type: new GraphQLList(Person) }, * }) * }) * */ var GraphQLList = exports.GraphQLList = function () { function GraphQLList(type) { _classCallCheck(this, GraphQLList); (0, _invariant2.default)(isType(type), 'Can only create List of a GraphQLType but got: ' + String(type) + '.'); this.ofType = type; } GraphQLList.prototype.toString = function toString() { return '[' + String(this.ofType) + ']'; }; return GraphQLList; }(); // Also provide toJSON and inspect aliases for toString. GraphQLList.prototype.toJSON = GraphQLList.prototype.inspect = GraphQLList.prototype.toString; /** * Non-Null Modifier * * A non-null is a kind of type marker, a wrapping type which points to another * type. Non-null types enforce that their values are never null and can ensure * an error is raised if this ever occurs during a request. It is useful for * fields which you can make a strong guarantee on non-nullability, for example * usually the id field of a database row will never be null. * * Example: * * const RowType = new GraphQLObjectType({ * name: 'Row', * fields: () => ({ * id: { type: new GraphQLNonNull(GraphQLString) }, * }) * }) * * Note: the enforcement of non-nullability occurs within the executor. */ var GraphQLNonNull = exports.GraphQLNonNull = function () { function GraphQLNonNull(type) { _classCallCheck(this, GraphQLNonNull); (0, _invariant2.default)(isType(type) && !(type instanceof GraphQLNonNull), 'Can only create NonNull of a Nullable GraphQLType but got: ' + (String(type) + '.')); this.ofType = type; } GraphQLNonNull.prototype.toString = function toString() { return this.ofType.toString() + '!'; }; return GraphQLNonNull; }(); // Also provide toJSON and inspect aliases for toString. GraphQLNonNull.prototype.toJSON = GraphQLNonNull.prototype.inspect = GraphQLNonNull.prototype.toString; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ // Name var NAME = exports.NAME = 'Name'; // Document var DOCUMENT = exports.DOCUMENT = 'Document'; var OPERATION_DEFINITION = exports.OPERATION_DEFINITION = 'OperationDefinition'; var VARIABLE_DEFINITION = exports.VARIABLE_DEFINITION = 'VariableDefinition'; var VARIABLE = exports.VARIABLE = 'Variable'; var SELECTION_SET = exports.SELECTION_SET = 'SelectionSet'; var FIELD = exports.FIELD = 'Field'; var ARGUMENT = exports.ARGUMENT = 'Argument'; // Fragments var FRAGMENT_SPREAD = exports.FRAGMENT_SPREAD = 'FragmentSpread'; var INLINE_FRAGMENT = exports.INLINE_FRAGMENT = 'InlineFragment'; var FRAGMENT_DEFINITION = exports.FRAGMENT_DEFINITION = 'FragmentDefinition'; // Values var INT = exports.INT = 'IntValue'; var FLOAT = exports.FLOAT = 'FloatValue'; var STRING = exports.STRING = 'StringValue'; var BOOLEAN = exports.BOOLEAN = 'BooleanValue'; var NULL = exports.NULL = 'NullValue'; var ENUM = exports.ENUM = 'EnumValue'; var LIST = exports.LIST = 'ListValue'; var OBJECT = exports.OBJECT = 'ObjectValue'; var OBJECT_FIELD = exports.OBJECT_FIELD = 'ObjectField'; // Directives var DIRECTIVE = exports.DIRECTIVE = 'Directive'; // Types var NAMED_TYPE = exports.NAMED_TYPE = 'NamedType'; var LIST_TYPE = exports.LIST_TYPE = 'ListType'; var NON_NULL_TYPE = exports.NON_NULL_TYPE = 'NonNullType'; // Type System Definitions var SCHEMA_DEFINITION = exports.SCHEMA_DEFINITION = 'SchemaDefinition'; var OPERATION_TYPE_DEFINITION = exports.OPERATION_TYPE_DEFINITION = 'OperationTypeDefinition'; // Type Definitions var SCALAR_TYPE_DEFINITION = exports.SCALAR_TYPE_DEFINITION = 'ScalarTypeDefinition'; var OBJECT_TYPE_DEFINITION = exports.OBJECT_TYPE_DEFINITION = 'ObjectTypeDefinition'; var FIELD_DEFINITION = exports.FIELD_DEFINITION = 'FieldDefinition'; var INPUT_VALUE_DEFINITION = exports.INPUT_VALUE_DEFINITION = 'InputValueDefinition'; var INTERFACE_TYPE_DEFINITION = exports.INTERFACE_TYPE_DEFINITION = 'InterfaceTypeDefinition'; var UNION_TYPE_DEFINITION = exports.UNION_TYPE_DEFINITION = 'UnionTypeDefinition'; var ENUM_TYPE_DEFINITION = exports.ENUM_TYPE_DEFINITION = 'EnumTypeDefinition'; var ENUM_VALUE_DEFINITION = exports.ENUM_VALUE_DEFINITION = 'EnumValueDefinition'; var INPUT_OBJECT_TYPE_DEFINITION = exports.INPUT_OBJECT_TYPE_DEFINITION = 'InputObjectTypeDefinition'; // Type Extensions var TYPE_EXTENSION_DEFINITION = exports.TYPE_EXTENSION_DEFINITION = 'TypeExtensionDefinition'; // Directive Definitions var DIRECTIVE_DEFINITION = exports.DIRECTIVE_DEFINITION = 'DirectiveDefinition'; /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = invariant; /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function invariant(condition, message) { if (!condition) { throw new Error(message); } } /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.print = print; var _visitor = __webpack_require__(15); /** * Converts an AST into a string, using one set of reasonable * formatting rules. */ function print(ast) { return (0, _visitor.visit)(ast, { leave: printDocASTReducer }); } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var printDocASTReducer = { Name: function Name(node) { return node.value; }, Variable: function Variable(node) { return '$' + node.name; }, // Document Document: function Document(node) { return join(node.definitions, '\n\n') + '\n'; }, OperationDefinition: function OperationDefinition(node) { var op = node.operation; var name = node.name; var varDefs = wrap('(', join(node.variableDefinitions, ', '), ')'); var directives = join(node.directives, ' '); var selectionSet = node.selectionSet; // Anonymous queries with no directives or variable definitions can use // the query short form. return !name && !directives && !varDefs && op === 'query' ? selectionSet : join([op, join([name, varDefs]), directives, selectionSet], ' '); }, VariableDefinition: function VariableDefinition(_ref) { var variable = _ref.variable, type = _ref.type, defaultValue = _ref.defaultValue; return variable + ': ' + type + wrap(' = ', defaultValue); }, SelectionSet: function SelectionSet(_ref2) { var selections = _ref2.selections; return block(selections); }, Field: function Field(_ref3) { var alias = _ref3.alias, name = _ref3.name, args = _ref3.arguments, directives = _ref3.directives, selectionSet = _ref3.selectionSet; return join([wrap('', alias, ': ') + name + wrap('(', join(args, ', '), ')'), join(directives, ' '), selectionSet], ' '); }, Argument: function Argument(_ref4) { var name = _ref4.name, value = _ref4.value; return name + ': ' + value; }, // Fragments FragmentSpread: function FragmentSpread(_ref5) { var name = _ref5.name, directives = _ref5.directives; return '...' + name + wrap(' ', join(directives, ' ')); }, InlineFragment: function InlineFragment(_ref6) { var typeCondition = _ref6.typeCondition, directives = _ref6.directives, selectionSet = _ref6.selectionSet; return join(['...', wrap('on ', typeCondition), join(directives, ' '), selectionSet], ' '); }, FragmentDefinition: function FragmentDefinition(_ref7) { var name = _ref7.name, typeCondition = _ref7.typeCondition, directives = _ref7.directives, selectionSet = _ref7.selectionSet; return 'fragment ' + name + ' on ' + typeCondition + ' ' + wrap('', join(directives, ' '), ' ') + selectionSet; }, // Value IntValue: function IntValue(_ref8) { var value = _ref8.value; return value; }, FloatValue: function FloatValue(_ref9) { var value = _ref9.value; return value; }, StringValue: function StringValue(_ref10) { var value = _ref10.value; return JSON.stringify(value); }, BooleanValue: function BooleanValue(_ref11) { var value = _ref11.value; return JSON.stringify(value); }, NullValue: function NullValue() { return 'null'; }, EnumValue: function EnumValue(_ref12) { var value = _ref12.value; return value; }, ListValue: function ListValue(_ref13) { var values = _ref13.values; return '[' + join(values, ', ') + ']'; }, ObjectValue: function ObjectValue(_ref14) { var fields = _ref14.fields; return '{' + join(fields, ', ') + '}'; }, ObjectField: function ObjectField(_ref15) { var name = _ref15.name, value = _ref15.value; return name + ': ' + value; }, // Directive Directive: function Directive(_ref16) { var name = _ref16.name, args = _ref16.arguments; return '@' + name + wrap('(', join(args, ', '), ')'); }, // Type NamedType: function NamedType(_ref17) { var name = _ref17.name; return name; }, ListType: function ListType(_ref18) { var type = _ref18.type; return '[' + type + ']'; }, NonNullType: function NonNullType(_ref19) { var type = _ref19.type; return type + '!'; }, // Type System Definitions SchemaDefinition: function SchemaDefinition(_ref20) { var directives = _ref20.directives, operationTypes = _ref20.operationTypes; return join(['schema', join(directives, ' '), block(operationTypes)], ' '); }, OperationTypeDefinition: function OperationTypeDefinition(_ref21) { var operation = _ref21.operation, type = _ref21.type; return operation + ': ' + type; }, ScalarTypeDefinition: function ScalarTypeDefinition(_ref22) { var name = _ref22.name, directives = _ref22.directives; return join(['scalar', name, join(directives, ' ')], ' '); }, ObjectTypeDefinition: function ObjectTypeDefinition(_ref23) { var name = _ref23.name, interfaces = _ref23.interfaces, directives = _ref23.directives, fields = _ref23.fields; return join(['type', name, wrap('implements ', join(interfaces, ', ')), join(directives, ' '), block(fields)], ' '); }, FieldDefinition: function FieldDefinition(_ref24) { var name = _ref24.name, args = _ref24.arguments, type = _ref24.type, directives = _ref24.directives; return name + wrap('(', join(args, ', '), ')') + ': ' + type + wrap(' ', join(directives, ' ')); }, InputValueDefinition: function InputValueDefinition(_ref25) { var name = _ref25.name, type = _ref25.type, defaultValue = _ref25.defaultValue, directives = _ref25.directives; return join([name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')], ' '); }, InterfaceTypeDefinition: function InterfaceTypeDefinition(_ref26) { var name = _ref26.name, directives = _ref26.directives, fields = _ref26.fields; return join(['interface', name, join(directives, ' '), block(fields)], ' '); }, UnionTypeDefinition: function UnionTypeDefinition(_ref27) { var name = _ref27.name, directives = _ref27.directives, types = _ref27.types; return join(['union', name, join(directives, ' '), '= ' + join(types, ' | ')], ' '); }, EnumTypeDefinition: function EnumTypeDefinition(_ref28) { var name = _ref28.name, directives = _ref28.directives, values = _ref28.values; return join(['enum', name, join(directives, ' '), block(values)], ' '); }, EnumValueDefinition: function EnumValueDefinition(_ref29) { var name = _ref29.name, directives = _ref29.directives; return join([name, join(directives, ' ')], ' '); }, InputObjectTypeDefinition: function InputObjectTypeDefinition(_ref30) { var name = _ref30.name, directives = _ref30.directives, fields = _ref30.fields; return join(['input', name, join(directives, ' '), block(fields)], ' '); }, TypeExtensionDefinition: function TypeExtensionDefinition(_ref31) { var definition = _ref31.definition; return 'extend ' + definition; }, DirectiveDefinition: function DirectiveDefinition(_ref32) { var name = _ref32.name, args = _ref32.arguments, locations = _ref32.locations; return 'directive @' + name + wrap('(', join(args, ', '), ')') + ' on ' + join(locations, ' | '); } }; /** * Given maybeArray, print an empty string if it is null or empty, otherwise * print all items together separated by separator if provided */ function join(maybeArray, separator) { return maybeArray ? maybeArray.filter(function (x) { return x; }).join(separator || '') : ''; } /** * Given array, print each item on its own line, wrapped in an * indented "{ }" block. */ function block(array) { return array && array.length !== 0 ? indent('{\n' + join(array, '\n')) + '\n}' : '{}'; } /** * If maybeString is not null or empty, then wrap with start and end, otherwise * print an empty string. */ function wrap(start, maybeString, end) { return maybeString ? start + maybeString + (end || '') : ''; } function indent(maybeString) { return maybeString && maybeString.replace(/\n/g, '\n '); } /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.specifiedDirectives = exports.GraphQLDeprecatedDirective = exports.DEFAULT_DEPRECATION_REASON = exports.GraphQLSkipDirective = exports.GraphQLIncludeDirective = exports.GraphQLDirective = exports.DirectiveLocation = undefined; var _definition = __webpack_require__(1); var _scalars = __webpack_require__(7); var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _assertValidName = __webpack_require__(28); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var DirectiveLocation = exports.DirectiveLocation = { // Operations QUERY: 'QUERY', MUTATION: 'MUTATION', SUBSCRIPTION: 'SUBSCRIPTION', FIELD: 'FIELD', FRAGMENT_DEFINITION: 'FRAGMENT_DEFINITION', FRAGMENT_SPREAD: 'FRAGMENT_SPREAD', INLINE_FRAGMENT: 'INLINE_FRAGMENT', // Schema Definitions SCHEMA: 'SCHEMA', SCALAR: 'SCALAR', OBJECT: 'OBJECT', FIELD_DEFINITION: 'FIELD_DEFINITION', ARGUMENT_DEFINITION: 'ARGUMENT_DEFINITION', INTERFACE: 'INTERFACE', UNION: 'UNION', ENUM: 'ENUM', ENUM_VALUE: 'ENUM_VALUE', INPUT_OBJECT: 'INPUT_OBJECT', INPUT_FIELD_DEFINITION: 'INPUT_FIELD_DEFINITION' }; // eslint-disable-line /** * Directives are used by the GraphQL runtime as a way of modifying execution * behavior. Type system creators will usually not create these directly. */ var GraphQLDirective = exports.GraphQLDirective = function GraphQLDirective(config) { _classCallCheck(this, GraphQLDirective); (0, _invariant2.default)(config.name, 'Directive must be named.'); (0, _assertValidName.assertValidName)(config.name); (0, _invariant2.default)(Array.isArray(config.locations), 'Must provide locations for directive.'); this.name = config.name; this.description = config.description; this.locations = config.locations; var args = config.args; if (!args) { this.args = []; } else { (0, _invariant2.default)(!Array.isArray(args), '@' + config.name + ' args must be an object with argument names as keys.'); this.args = Object.keys(args).map(function (argName) { (0, _assertValidName.assertValidName)(argName); var arg = args[argName]; (0, _invariant2.default)((0, _definition.isInputType)(arg.type), '@' + config.name + '(' + argName + ':) argument type must be ' + ('Input Type but got: ' + String(arg.type) + '.')); return { name: argName, description: arg.description === undefined ? null : arg.description, type: arg.type, defaultValue: arg.defaultValue }; }); } }; /** * Used to conditionally include fields or fragments. */ var GraphQLIncludeDirective = exports.GraphQLIncludeDirective = new GraphQLDirective({ name: 'include', description: 'Directs the executor to include this field or fragment only when ' + 'the `if` argument is true.', locations: [DirectiveLocation.FIELD, DirectiveLocation.FRAGMENT_SPREAD, DirectiveLocation.INLINE_FRAGMENT], args: { 'if': { type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean), description: 'Included when true.' } } }); /** * Used to conditionally skip (exclude) fields or fragments. */ var GraphQLSkipDirective = exports.GraphQLSkipDirective = new GraphQLDirective({ name: 'skip', description: 'Directs the executor to skip this field or fragment when the `if` ' + 'argument is true.', locations: [DirectiveLocation.FIELD, DirectiveLocation.FRAGMENT_SPREAD, DirectiveLocation.INLINE_FRAGMENT], args: { 'if': { type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean), description: 'Skipped when true.' } } }); /** * Constant string used for default reason for a deprecation. */ var DEFAULT_DEPRECATION_REASON = exports.DEFAULT_DEPRECATION_REASON = 'No longer supported'; /** * Used to declare element of a GraphQL schema as deprecated. */ var GraphQLDeprecatedDirective = exports.GraphQLDeprecatedDirective = new GraphQLDirective({ name: 'deprecated', description: 'Marks an element of a GraphQL schema as no longer supported.', locations: [DirectiveLocation.FIELD_DEFINITION, DirectiveLocation.ENUM_VALUE], args: { reason: { type: _scalars.GraphQLString, description: 'Explains why this element was deprecated, usually also including a ' + 'suggestion for how to access supported similar data. Formatted ' + 'in [Markdown](https://daringfireball.net/projects/markdown/).', defaultValue: DEFAULT_DEPRECATION_REASON } } }); /** * The full list of specified directives. */ var specifiedDirectives = exports.specifiedDirectives = [GraphQLIncludeDirective, GraphQLSkipDirective, GraphQLDeprecatedDirective]; /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isNullish; /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /** * Returns true if a value is null, undefined, or NaN. */ function isNullish(value) { return value === null || value === undefined || value !== value; } /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GraphQLID = exports.GraphQLBoolean = exports.GraphQLString = exports.GraphQLFloat = exports.GraphQLInt = undefined; var _definition = __webpack_require__(1); var _kinds = __webpack_require__(2); var Kind = _interopRequireWildcard(_kinds); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } // As per the GraphQL Spec, Integers are only treated as valid when a valid // 32-bit signed integer, providing the broadest support across platforms. // // n.b. JavaScript's integers are safe between -(2^53 - 1) and 2^53 - 1 because // they are internally represented as IEEE 754 doubles. /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var MAX_INT = 2147483647; var MIN_INT = -2147483648; function coerceInt(value) { if (value === '') { throw new TypeError('Int cannot represent non 32-bit signed integer value: (empty string)'); } var num = Number(value); if (num === num && num <= MAX_INT && num >= MIN_INT) { return (num < 0 ? Math.ceil : Math.floor)(num); } throw new TypeError('Int cannot represent non 32-bit signed integer value: ' + String(value)); } var GraphQLInt = exports.GraphQLInt = new _definition.GraphQLScalarType({ name: 'Int', description: 'The `Int` scalar type represents non-fractional signed whole numeric ' + 'values. Int can represent values between -(2^31) and 2^31 - 1. ', serialize: coerceInt, parseValue: coerceInt, parseLiteral: function parseLiteral(ast) { if (ast.kind === Kind.INT) { var num = parseInt(ast.value, 10); if (num <= MAX_INT && num >= MIN_INT) { return num; } } return null; } }); function coerceFloat(value) { if (value === '') { throw new TypeError('Float cannot represent non numeric value: (empty string)'); } var num = Number(value); if (num === num) { return num; } throw new TypeError('Float cannot represent non numeric value: ' + String(value)); } var GraphQLFloat = exports.GraphQLFloat = new _definition.GraphQLScalarType({ name: 'Float', description: 'The `Float` scalar type represents signed double-precision fractional ' + 'values as specified by ' + '[IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point). ', serialize: coerceFloat, parseValue: coerceFloat, parseLiteral: function parseLiteral(ast) { return ast.kind === Kind.FLOAT || ast.kind === Kind.INT ? parseFloat(ast.value) : null; } }); var GraphQLString = exports.GraphQLString = new _definition.GraphQLScalarType({ name: 'String', description: 'The `String` scalar type represents textual data, represented as UTF-8 ' + 'character sequences. The String type is most often used by GraphQL to ' + 'represent free-form human-readable text.', serialize: String, parseValue: String, parseLiteral: function parseLiteral(ast) { return ast.kind === Kind.STRING ? ast.value : null; } }); var GraphQLBoolean = exports.GraphQLBoolean = new _definition.GraphQLScalarType({ name: 'Boolean', description: 'The `Boolean` scalar type represents `true` or `false`.', serialize: Boolean, parseValue: Boolean, parseLiteral: function parseLiteral(ast) { return ast.kind === Kind.BOOLEAN ? ast.value : null; } }); var GraphQLID = exports.GraphQLID = new _definition.GraphQLScalarType({ name: 'ID', description: 'The `ID` scalar type represents a unique identifier, often used to ' + 'refetch an object or as key for a cache. The ID type appears in a JSON ' + 'response as a String; however, it is not intended to be human-readable. ' + 'When expected as an input type, any string (such as `"4"`) or integer ' + '(such as `4`) input value will be accepted as an ID.', serialize: String, parseValue: String, parseLiteral: function parseLiteral(ast) { return ast.kind === Kind.STRING || ast.kind === Kind.INT ? ast.value : null; } }); /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GraphQLSchema = undefined; var _definition = __webpack_require__(1); var _directives = __webpack_require__(5); var _introspection = __webpack_require__(11); var _find = __webpack_require__(10); var _find2 = _interopRequireDefault(_find); var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _typeComparators = __webpack_require__(19); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /** * Schema Definition * * A Schema is created by supplying the root types of each type of operation, * query and mutation (optional). A schema definition is then supplied to the * validator and executor. * * Example: * * const MyAppSchema = new GraphQLSchema({ * query: MyAppQueryRootType, * mutation: MyAppMutationRootType, * }) * * Note: If an array of `directives` are provided to GraphQLSchema, that will be * the exact list of directives represented and allowed. If `directives` is not * provided then a default set of the specified directives (e.g. @include and * @skip) will be used. If you wish to provide *additional* directives to these * specified directives, you must explicitly declare them. Example: * * const MyAppSchema = new GraphQLSchema({ * ... * directives: specifiedDirectives.concat([ myCustomDirective ]), * }) * */ var GraphQLSchema = exports.GraphQLSchema = function () { function GraphQLSchema(config) { var _this = this; _classCallCheck(this, GraphQLSchema); (0, _invariant2.default)(typeof config === 'object', 'Must provide configuration object.'); (0, _invariant2.default)(config.query instanceof _definition.GraphQLObjectType, 'Schema query must be Object Type but got: ' + String(config.query) + '.'); this._queryType = config.query; (0, _invariant2.default)(!config.mutation || config.mutation instanceof _definition.GraphQLObjectType, 'Schema mutation must be Object Type if provided but got: ' + String(config.mutation) + '.'); this._mutationType = config.mutation; (0, _invariant2.default)(!config.subscription || config.subscription instanceof _definition.GraphQLObjectType, 'Schema subscription must be Object Type if provided but got: ' + String(config.subscription) + '.'); this._subscriptionType = config.subscription; (0, _invariant2.default)(!config.types || Array.isArray(config.types), 'Schema types must be Array if provided but got: ' + String(config.types) + '.'); (0, _invariant2.default)(!config.directives || Array.isArray(config.directives) && config.directives.every(function (directive) { return directive instanceof _directives.GraphQLDirective; }), 'Schema directives must be Array if provided but got: ' + String(config.directives) + '.'); // Provide specified directives (e.g. @include and @skip) by default. this._directives = config.directives || _directives.specifiedDirectives; // Build type map now to detect any errors within this schema. var initialTypes = [this.getQueryType(), this.getMutationType(), this.getSubscriptionType(), _introspection.__Schema]; var types = config.types; if (types) { initialTypes = initialTypes.concat(types); } this._typeMap = initialTypes.reduce(typeMapReducer, Object.create(null)); // Keep track of all implementations by interface name. this._implementations = Object.create(null); Object.keys(this._typeMap).forEach(function (typeName) { var type = _this._typeMap[typeName]; if (type instanceof _definition.GraphQLObjectType) { type.getInterfaces().forEach(function (iface) { var impls = _this._implementations[iface.name]; if (impls) { impls.push(type); } else { _this._implementations[iface.name] = [type]; } }); } }); // Enforce correct interface implementations. Object.keys(this._typeMap).forEach(function (typeName) { var type = _this._typeMap[typeName]; if (type instanceof _definition.GraphQLObjectType) { type.getInterfaces().forEach(function (iface) { return assertObjectImplementsInterface(_this, type, iface); }); } }); } GraphQLSchema.prototype.getQueryType = function getQueryType() { return this._queryType; }; GraphQLSchema.prototype.getMutationType = function getMutationType() { return this._mutationType; }; GraphQLSchema.prototype.getSubscriptionType = function getSubscriptionType() { return this._subscriptionType; }; GraphQLSchema.prototype.getTypeMap = function getTypeMap() { return this._typeMap; }; GraphQLSchema.prototype.getType = function getType(name) { return this.getTypeMap()[name]; }; GraphQLSchema.prototype.getPossibleTypes = function getPossibleTypes(abstractType) { if (abstractType instanceof _definition.GraphQLUnionType) { return abstractType.getTypes(); } (0, _invariant2.default)(abstractType instanceof _definition.GraphQLInterfaceType); return this._implementations[abstractType.name]; }; GraphQLSchema.prototype.isPossibleType = function isPossibleType(abstractType, possibleType) { var possibleTypeMap = this._possibleTypeMap; if (!possibleTypeMap) { this._possibleTypeMap = possibleTypeMap = Object.create(null); } if (!possibleTypeMap[abstractType.name]) { var possibleTypes = this.getPossibleTypes(abstractType); (0, _invariant2.default)(Array.isArray(possibleTypes), 'Could not find possible implementing types for ' + abstractType.name + ' ' + 'in schema. Check that schema.types is defined and is an array of ' + 'all possible types in the schema.'); possibleTypeMap[abstractType.name] = possibleTypes.reduce(function (map, type) { return map[type.name] = true, map; }, Object.create(null)); } return Boolean(possibleTypeMap[abstractType.name][possibleType.name]); }; GraphQLSchema.prototype.getDirectives = function getDirectives() { return this._directives; }; GraphQLSchema.prototype.getDirective = function getDirective(name) { return (0, _find2.default)(this.getDirectives(), function (directive) { return directive.name === name; }); }; return GraphQLSchema; }(); function typeMapReducer(map, type) { if (!type) { return map; } if (type instanceof _definition.GraphQLList || type instanceof _definition.GraphQLNonNull) { return typeMapReducer(map, type.ofType); } if (map[type.name]) { (0, _invariant2.default)(map[type.name] === type, 'Schema must contain unique named types but contains multiple ' + ('types named "' + type.name + '".')); return map; } map[type.name] = type; var reducedMap = map; if (type instanceof _definition.GraphQLUnionType) { reducedMap = type.getTypes().reduce(typeMapReducer, reducedMap); } if (type instanceof _definition.GraphQLObjectType) { reducedMap = type.getInterfaces().reduce(typeMapReducer, reducedMap); } if (type instanceof _definition.GraphQLObjectType || type instanceof _definition.GraphQLInterfaceType) { (function () { var fieldMap = type.getFields(); Object.keys(fieldMap).forEach(function (fieldName) { var field = fieldMap[fieldName]; if (field.args) { var fieldArgTypes = field.args.map(function (arg) { return arg.type; }); reducedMap = fieldArgTypes.reduce(typeMapReducer, reducedMap); } reducedMap = typeMapReducer(reducedMap, field.type); }); })(); } if (type instanceof _definition.GraphQLInputObjectType) { (function () { var fieldMap = type.getFields(); Object.keys(fieldMap).forEach(function (fieldName) { var field = fieldMap[fieldName]; reducedMap = typeMapReducer(reducedMap, field.type); }); })(); } return reducedMap; } function assertObjectImplementsInterface(schema, object, iface) { var objectFieldMap = object.getFields(); var ifaceFieldMap = iface.getFields(); // Assert each interface field is implemented. Object.keys(ifaceFieldMap).forEach(function (fieldName) { var objectField = objectFieldMap[fieldName]; var ifaceField = ifaceFieldMap[fieldName]; // Assert interface field exists on object. (0, _invariant2.default)(objectField, '"' + iface.name + '" expects field "' + fieldName + '" but "' + object.name + '" ' + 'does not provide it.'); // Assert interface field type is satisfied by object field type, by being // a valid subtype. (covariant) (0, _invariant2.default)((0, _typeComparators.isTypeSubTypeOf)(schema, objectField.type, ifaceField.type), iface.name + '.' + fieldName + ' expects type "' + String(ifaceField.type) + '" ' + 'but ' + (object.name + '.' + fieldName + ' provides type "' + String(objectField.type) + '".')); // Assert each interface field arg is implemented. ifaceField.args.forEach(function (ifaceArg) { var argName = ifaceArg.name; var objectArg = (0, _find2.default)(objectField.args, function (arg) { return arg.name === argName; }); // Assert interface field arg exists on object field. (0, _invariant2.default)(objectArg, iface.name + '.' + fieldName + ' expects argument "' + argName + '" but ' + (object.name + '.' + fieldName + ' does not provide it.')); // Assert interface field arg type matches object field arg type. // (invariant) (0, _invariant2.default)((0, _typeComparators.isEqualType)(ifaceArg.type, objectArg.type), iface.name + '.' + fieldName + '(' + argName + ':) expects type ' + ('"' + String(ifaceArg.type) + '" but ') + (object.name + '.' + fieldName + '(' + argName + ':) provides type ') + ('"' + String(objectArg.type) + '".')); }); // Assert additional arguments must not be required. objectField.args.forEach(function (objectArg) { var argName = objectArg.name; var ifaceArg = (0, _find2.default)(ifaceField.args, function (arg) { return arg.name === argName; }); if (!ifaceArg) { (0, _invariant2.default)(!(objectArg.type instanceof _definition.GraphQLNonNull), object.name + '.' + fieldName + '(' + argName + ':) is of required type ' + ('"' + String(objectArg.type) + '" but is not also provided by the ') + ('interface ' + iface.name + '.' + fieldName + '.')); } }); }); } /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.typeFromAST = typeFromAST; var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _kinds = __webpack_require__(2); var _definition = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function typeFromAST(schema, typeNode) { var innerType = void 0; if (typeNode.kind === _kinds.LIST_TYPE) { innerType = typeFromAST(schema, typeNode.type); return innerType && new _definition.GraphQLList(innerType); } if (typeNode.kind === _kinds.NON_NULL_TYPE) { innerType = typeFromAST(schema, typeNode.type); return innerType && new _definition.GraphQLNonNull(innerType); } (0, _invariant2.default)(typeNode.kind === _kinds.NAMED_TYPE, 'Must be a named type.'); return schema.getType(typeNode.name.value); } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /***/ }), /* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = find; /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function find(list, predicate) { for (var i = 0; i < list.length; i++) { if (predicate(list[i])) { return list[i]; } } } /***/ }), /* 11 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TypeNameMetaFieldDef = exports.TypeMetaFieldDef = exports.SchemaMetaFieldDef = exports.__TypeKind = exports.TypeKind = exports.__EnumValue = exports.__InputValue = exports.__Field = exports.__Type = exports.__DirectiveLocation = exports.__Directive = exports.__Schema = undefined; var _isInvalid = __webpack_require__(14); var _isInvalid2 = _interopRequireDefault(_isInvalid); var _astFromValue = __webpack_require__(29); var _printer = __webpack_require__(4); var _definition = __webpack_require__(1); var _scalars = __webpack_require__(7); var _directives = __webpack_require__(5); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var __Schema = exports.__Schema = new _definition.GraphQLObjectType({ name: '__Schema', isIntrospection: true, description: 'A GraphQL Schema defines the capabilities of a GraphQL server. It ' + 'exposes all available types and directives on the server, as well as ' + 'the entry points for query, mutation, and subscription operations.', fields: function fields() { return { types: { description: 'A list of all types supported by this server.', type: new _definition.GraphQLNonNull(new _definition.GraphQLList(new _definition.GraphQLNonNull(__Type))), resolve: function resolve(schema) { var typeMap = schema.getTypeMap(); return Object.keys(typeMap).map(function (key) { return typeMap[key]; }); } }, queryType: { description: 'The type that query operations will be rooted at.', type: new _definition.GraphQLNonNull(__Type), resolve: function resolve(schema) { return schema.getQueryType(); } }, mutationType: { description: 'If this server supports mutation, the type that ' + 'mutation operations will be rooted at.', type: __Type, resolve: function resolve(schema) { return schema.getMutationType(); } }, subscriptionType: { description: 'If this server support subscription, the type that ' + 'subscription operations will be rooted at.', type: __Type, resolve: function resolve(schema) { return schema.getSubscriptionType(); } }, directives: { description: 'A list of all directives supported by this server.', type: new _definition.GraphQLNonNull(new _definition.GraphQLList(new _definition.GraphQLNonNull(__Directive))), resolve: function resolve(schema) { return schema.getDirectives(); } } }; } }); var __Directive = exports.__Directive = new _definition.GraphQLObjectType({ name: '__Directive', isIntrospection: true, description: 'A Directive provides a way to describe alternate runtime execution and ' + 'type validation behavior in a GraphQL document.' + '\n\nIn some cases, you need to provide options to alter GraphQL\'s ' + 'execution behavior in ways field arguments will not suffice, such as ' + 'conditionally including or skipping a field. Directives provide this by ' + 'describing additional information to the executor.', fields: function fields() { return { name: { type: new _definition.GraphQLNonNull(_scalars.GraphQLString) }, description: { type: _scalars.GraphQLString }, locations: { type: new _definition.GraphQLNonNull(new _definition.GraphQLList(new _definition.GraphQLNonNull(__DirectiveLocation))) }, args: { type: new _definition.GraphQLNonNull(new _definition.GraphQLList(new _definition.GraphQLNonNull(__InputValue))), resolve: function resolve(directive) { return directive.args || []; } }, // NOTE: the following three fields are deprecated and are no longer part // of the GraphQL specification. onOperation: { deprecationReason: 'Use `locations`.', type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean), resolve: function resolve(d) { return d.locations.indexOf(_directives.DirectiveLocation.QUERY) !== -1 || d.locations.indexOf(_directives.DirectiveLocation.MUTATION) !== -1 || d.locations.indexOf(_directives.DirectiveLocation.SUBSCRIPTION) !== -1; } }, onFragment: { deprecationReason: 'Use `locations`.', type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean), resolve: function resolve(d) { return d.locations.indexOf(_directives.DirectiveLocation.FRAGMENT_SPREAD) !== -1 || d.locations.indexOf(_directives.DirectiveLocation.INLINE_FRAGMENT) !== -1 || d.locations.indexOf(_directives.DirectiveLocation.FRAGMENT_DEFINITION) !== -1; } }, onField: { deprecationReason: 'Use `locations`.', type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean), resolve: function resolve(d) { return d.locations.indexOf(_directives.DirectiveLocation.FIELD) !== -1; } } }; } }); var __DirectiveLocation = exports.__DirectiveLocation = new _definition.GraphQLEnumType({ name: '__DirectiveLocation', isIntrospection: true, description: 'A Directive can be adjacent to many parts of the GraphQL language, a ' + '__DirectiveLocation describes one such possible adjacencies.', values: { QUERY: { value: _directives.DirectiveLocation.QUERY, description: 'Location adjacent to a query operation.' }, MUTATION: { value: _directives.DirectiveLocation.MUTATION, description: 'Location adjacent to a mutation operation.' }, SUBSCRIPTION: { value: _directives.DirectiveLocation.SUBSCRIPTION, description: 'Location adjacent to a subscription operation.' }, FIELD: { value: _directives.DirectiveLocation.FIELD, description: 'Location adjacent to a field.' }, FRAGMENT_DEFINITION: { value: _directives.DirectiveLocation.FRAGMENT_DEFINITION, description: 'Location adjacent to a fragment definition.' }, FRAGMENT_SPREAD: { value: _directives.DirectiveLocation.FRAGMENT_SPREAD, description: 'Location adjacent to a fragment spread.' }, INLINE_FRAGMENT: { value: _directives.DirectiveLocation.INLINE_FRAGMENT, description: 'Location adjacent to an inline fragment.' }, SCHEMA: { value: _directives.DirectiveLocation.SCHEMA, description: 'Location adjacent to a schema definition.' }, SCALAR: { value: _directives.DirectiveLocation.SCALAR, description: 'Location adjacent to a scalar definition.' }, OBJECT: { value: _directives.DirectiveLocation.OBJECT, description: 'Location adjacent to an object type definition.' }, FIELD_DEFINITION: { value: _directives.DirectiveLocation.FIELD_DEFINITION, description: 'Location adjacent to a field definition.' }, ARGUMENT_DEFINITION: { value: _directives.DirectiveLocation.ARGUMENT_DEFINITION, description: 'Location adjacent to an argument definition.' }, INTERFACE: { value: _directives.DirectiveLocation.INTERFACE, description: 'Location adjacent to an interface definition.' }, UNION: { value: _directives.DirectiveLocation.UNION, description: 'Location adjacent to a union definition.' }, ENUM: { value: _directives.DirectiveLocation.ENUM, description: 'Location adjacent to an enum definition.' }, ENUM_VALUE: { value: _directives.DirectiveLocation.ENUM_VALUE, description: 'Location adjacent to an enum value definition.' }, INPUT_OBJECT: { value: _directives.DirectiveLocation.INPUT_OBJECT, description: 'Location adjacent to an input object type definition.' }, INPUT_FIELD_DEFINITION: { value: _directives.DirectiveLocation.INPUT_FIELD_DEFINITION, description: 'Location adjacent to an input object field definition.' } } }); var __Type = exports.__Type = new _definition.GraphQLObjectType({ name: '__Type', isIntrospection: true, description: 'The fundamental unit of any GraphQL Schema is the type. There are ' + 'many kinds of types in GraphQL as represented by the `__TypeKind` enum.' + '\n\nDepending on the kind of a type, certain fields describe ' + 'information about that type. Scalar types provide no information ' + 'beyond a name and description, while Enum types provide their values. ' + 'Object and Interface types provide the fields they describe. Abstract ' + 'types, Union and Interface, provide the Object types possible ' + 'at runtime. List and NonNull types compose other types.', fields: function fields() { return { kind: { type: new _definition.GraphQLNonNull(__TypeKind), resolve: function resolve(type) { if (type instanceof _definition.GraphQLScalarType) { return TypeKind.SCALAR; } else if (type instanceof _definition.GraphQLObjectType) { return TypeKind.OBJECT; } else if (type instanceof _definition.GraphQLInterfaceType) { return TypeKind.INTERFACE; } else if (type instanceof _definition.GraphQLUnionType) { return TypeKind.UNION; } else if (type instanceof _definition.GraphQLEnumType) { return TypeKind.ENUM; } else if (type instanceof _definition.GraphQLInputObjectType) { return TypeKind.INPUT_OBJECT; } else if (type instanceof _definition.GraphQLList) { return TypeKind.LIST; } else if (type instanceof _definition.GraphQLNonNull) { return TypeKind.NON_NULL; } throw new Error('Unknown kind of type: ' + type); } }, name: { type: _scalars.GraphQLString }, description: { type: _scalars.GraphQLString }, fields: { type: new _definition.GraphQLList(new _definition.GraphQLNonNull(__Field)), args: { includeDeprecated: { type: _scalars.GraphQLBoolean, defaultValue: false } }, resolve: function resolve(type, _ref) { var includeDeprecated = _ref.includeDeprecated; if (type instanceof _definition.GraphQLObjectType || type instanceof _definition.GraphQLInterfaceType) { var _ret = function () { var fieldMap = type.getFields(); var fields = Object.keys(fieldMap).map(function (fieldName) { return fieldMap[fieldName]; }); if (!includeDeprecated) { fields = fields.filter(function (field) { return !field.deprecationReason; }); } return { v: fields }; }(); if (typeof _ret === "object") return _ret.v; } return null; } }, interfaces: { type: new _definition.GraphQLList(new _definition.GraphQLNonNull(__Type)), resolve: function resolve(type) { if (type instanceof _definition.GraphQLObjectType) { return type.getInterfaces(); } } }, possibleTypes: { type: new _definition.GraphQLList(new _definition.GraphQLNonNull(__Type)), resolve: function resolve(type, args, context, _ref2) { var schema = _ref2.schema; if (type instanceof _definition.GraphQLInterfaceType || type instanceof _definition.GraphQLUnionType) { return schema.getPossibleTypes(type); } } }, enumValues: { type: new _definition.GraphQLList(new _definition.GraphQLNonNull(__EnumValue)), args: { includeDeprecated: { type: _scalars.GraphQLBoolean, defaultValue: false } }, resolve: function resolve(type, _ref3) { var includeDeprecated = _ref3.includeDeprecated; if (type instanceof _definition.GraphQLEnumType) { var values = type.getValues(); if (!includeDeprecated) { values = values.filter(function (value) { return !value.deprecationReason; }); } return values; } } }, inputFields: { type: new _definition.GraphQLList(new _definition.GraphQLNonNull(__InputValue)), resolve: function resolve(type) { if (type instanceof _definition.GraphQLInputObjectType) { var _ret2 = function () { var fieldMap = type.getFields(); return { v: Object.keys(fieldMap).map(function (fieldName) { return fieldMap[fieldName]; }) }; }(); if (typeof _ret2 === "object") return _ret2.v; } } }, ofType: { type: __Type } }; } }); var __Field = exports.__Field = new _definition.GraphQLObjectType({ name: '__Field', isIntrospection: true, description: 'Object and Interface types are described by a list of Fields, each of ' + 'which has a name, potentially a list of arguments, and a return type.', fields: function fields() { return { name: { type: new _definition.GraphQLNonNull(_scalars.GraphQLString) }, description: { type: _scalars.GraphQLString }, args: { type: new _definition.GraphQLNonNull(new _definition.GraphQLList(new _definition.GraphQLNonNull(__InputValue))), resolve: function resolve(field) { return field.args || []; } }, type: { type: new _definition.GraphQLNonNull(__Type) }, isDeprecated: { type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean) }, deprecationReason: { type: _scalars.GraphQLString } }; } }); var __InputValue = exports.__InputValue = new _definition.GraphQLObjectType({ name: '__InputValue', isIntrospection: true, description: 'Arguments provided to Fields or Directives and the input fields of an ' + 'InputObject are represented as Input Values which describe their type ' + 'and optionally a default value.', fields: function fields() { return { name: { type: new _definition.GraphQLNonNull(_scalars.GraphQLString) }, description: { type: _scalars.GraphQLString }, type: { type: new _definition.GraphQLNonNull(__Type) }, defaultValue: { type: _scalars.GraphQLString, description: 'A GraphQL-formatted string representing the default value for this ' + 'input value.', resolve: function resolve(inputVal) { return (0, _isInvalid2.default)(inputVal.defaultValue) ? null : (0, _printer.print)((0, _astFromValue.astFromValue)(inputVal.defaultValue, inputVal.type)); } } }; } }); var __EnumValue = exports.__EnumValue = new _definition.GraphQLObjectType({ name: '__EnumValue', isIntrospection: true, description: 'One possible value for a given Enum. Enum values are unique values, not ' + 'a placeholder for a string or numeric value. However an Enum value is ' + 'returned in a JSON response as a string.', fields: function fields() { return { name: { type: new _definition.GraphQLNonNull(_scalars.GraphQLString) }, description: { type: _scalars.GraphQLString }, isDeprecated: { type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean) }, deprecationReason: { type: _scalars.GraphQLString } }; } }); var TypeKind = exports.TypeKind = { SCALAR: 'SCALAR', OBJECT: 'OBJECT', INTERFACE: 'INTERFACE', UNION: 'UNION', ENUM: 'ENUM', INPUT_OBJECT: 'INPUT_OBJECT', LIST: 'LIST', NON_NULL: 'NON_NULL' }; var __TypeKind = exports.__TypeKind = new _definition.GraphQLEnumType({ name: '__TypeKind', isIntrospection: true, description: 'An enum describing what kind of type a given `__Type` is.', values: { SCALAR: { value: TypeKind.SCALAR, description: 'Indicates this type is a scalar.' }, OBJECT: { value: TypeKind.OBJECT, description: 'Indicates this type is an object. ' + '`fields` and `interfaces` are valid fields.' }, INTERFACE: { value: TypeKind.INTERFACE, description: 'Indicates this type is an interface. ' + '`fields` and `possibleTypes` are valid fields.' }, UNION: { value: TypeKind.UNION, description: 'Indicates this type is a union. ' + '`possibleTypes` is a valid field.' }, ENUM: { value: TypeKind.ENUM, description: 'Indicates this type is an enum. ' + '`enumValues` is a valid field.' }, INPUT_OBJECT: { value: TypeKind.INPUT_OBJECT, description: 'Indicates this type is an input object. ' + '`inputFields` is a valid field.' }, LIST: { value: TypeKind.LIST, description: 'Indicates this type is a list. ' + '`ofType` is a valid field.' }, NON_NULL: { value: TypeKind.NON_NULL, description: 'Indicates this type is a non-null. ' + '`ofType` is a valid field.' } } }); /** * Note that these are GraphQLField and not GraphQLFieldConfig, * so the format for args is different. */ var SchemaMetaFieldDef = exports.SchemaMetaFieldDef = { name: '__schema', type: new _definition.GraphQLNonNull(__Schema), description: 'Access the current type schema of this server.', args: [], resolve: function resolve(source, args, context, _ref4) { var schema = _ref4.schema; return schema; } }; var TypeMetaFieldDef = exports.TypeMetaFieldDef = { name: '__type', type: __Type, description: 'Request the type information of a single type.', args: [{ name: 'name', type: new _definition.GraphQLNonNull(_scalars.GraphQLString) }], resolve: function resolve(source, _ref5, context, _ref6) { var name = _ref5.name; var schema = _ref6.schema; return schema.getType(name); } }; var TypeNameMetaFieldDef = exports.TypeNameMetaFieldDef = { name: '__typename', type: new _definition.GraphQLNonNull(_scalars.GraphQLString), description: 'The name of the current Object type at runtime.', args: [], resolve: function resolve(source, args, context, _ref7) { var parentType = _ref7.parentType; return parentType.name; } }; /***/ }), /* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = keyMap; /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /** * Creates a keyed JS object from an array, given a function to produce the keys * for each value in the array. * * This provides a convenient lookup for the array items if the key function * produces unique results. * * const phoneBook = [ * { name: 'Jon', num: '555-1234' }, * { name: 'Jenny', num: '867-5309' } * ] * * // { Jon: { name: 'Jon', num: '555-1234' }, * // Jenny: { name: 'Jenny', num: '867-5309' } } * const entriesByName = keyMap( * phoneBook, * entry => entry.name * ) * * // { name: 'Jenny', num: '857-6309' } * const jennyEntry = entriesByName['Jenny'] * */ function keyMap(list, keyFn) { return list.reduce(function (map, item) { return map[keyFn(item)] = item, map; }, {}); } /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GraphQLError = GraphQLError; var _location = __webpack_require__(25); /** * A GraphQLError describes an Error found during the parse, validate, or * execute phases of performing a GraphQL operation. In addition to a message * and stack trace, it also includes information about the locations in a * GraphQL document and/or execution result that correspond to the Error. */ function GraphQLError( // eslint-disable-line no-redeclare message, nodes, source, positions, path, originalError) { // Include (non-enumerable) stack trace. if (originalError && originalError.stack) { Object.defineProperty(this, 'stack', { value: originalError.stack, writable: true, configurable: true }); } else if (Error.captureStackTrace) { Error.captureStackTrace(this, GraphQLError); } else { Object.defineProperty(this, 'stack', { value: Error().stack, writable: true, configurable: true }); } // Compute locations in the source for the given nodes/positions. var _source = source; if (!_source && nodes && nodes.length > 0) { var node = nodes[0]; _source = node && node.loc && node.loc.source; } var _positions = positions; if (!_positions && nodes) { _positions = nodes.filter(function (node) { return Boolean(node.loc); }).map(function (node) { return node.loc.start; }); } if (_positions && _positions.length === 0) { _positions = undefined; } var _locations = void 0; var _source2 = _source; // seems here Flow need a const to resolve type. if (_source2 && _positions) { _locations = _positions.map(function (pos) { return (0, _location.getLocation)(_source2, pos); }); } Object.defineProperties(this, { message: { value: message, // By being enumerable, JSON.stringify will include `message` in the // resulting output. This ensures that the simplist possible GraphQL // service adheres to the spec. enumerable: true, writable: true }, locations: { // Coercing falsey values to undefined ensures they will not be included // in JSON.stringify() when not provided. value: _locations || undefined, // By being enumerable, JSON.stringify will include `locations` in the // resulting output. This ensures that the simplist possible GraphQL // service adheres to the spec. enumerable: true }, path: { // Coercing falsey values to undefined ensures they will not be included // in JSON.stringify() when not provided. value: path || undefined, // By being enumerable, JSON.stringify will include `path` in the // resulting output. This ensures that the simplist possible GraphQL // service adheres to the spec. enumerable: true }, nodes: { value: nodes || undefined }, source: { value: _source || undefined }, positions: { value: _positions || undefined }, originalError: { value: originalError } }); } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ GraphQLError.prototype = Object.create(Error.prototype, { constructor: { value: GraphQLError }, name: { value: 'GraphQLError' } }); /***/ }), /* 14 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isInvalid; /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /** * Returns true if a value is undefined, or NaN. */ function isInvalid(value) { return value === undefined || value !== value; } /***/ }), /* 15 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.visit = visit; exports.visitInParallel = visitInParallel; exports.visitWithTypeInfo = visitWithTypeInfo; /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var QueryDocumentKeys = exports.QueryDocumentKeys = { Name: [], Document: ['definitions'], OperationDefinition: ['name', 'variableDefinitions', 'directives', 'selectionSet'], VariableDefinition: ['variable', 'type', 'defaultValue'], Variable: ['name'], SelectionSet: ['selections'], Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'], Argument: ['name', 'value'], FragmentSpread: ['name', 'directives'], InlineFragment: ['typeCondition', 'directives', 'selectionSet'], FragmentDefinition: ['name', 'typeCondition', 'directives', 'selectionSet'], IntValue: [], FloatValue: [], StringValue: [], BooleanValue: [], NullValue: [], EnumValue: [], ListValue: ['values'], ObjectValue: ['fields'], ObjectField: ['name', 'value'], Directive: ['name', 'arguments'], NamedType: ['name'], ListType: ['type'], NonNullType: ['type'], SchemaDefinition: ['directives', 'operationTypes'], OperationTypeDefinition: ['type'], ScalarTypeDefinition: ['name', 'directives'], ObjectTypeDefinition: ['name', 'interfaces', 'directives', 'fields'], FieldDefinition: ['name', 'arguments', 'type', 'directives'], InputValueDefinition: ['name', 'type', 'defaultValue', 'directives'], InterfaceTypeDefinition: ['name', 'directives', 'fields'], UnionTypeDefinition: ['name', 'directives', 'types'], EnumTypeDefinition: ['name', 'directives', 'values'], EnumValueDefinition: ['name', 'directives'], InputObjectTypeDefinition: ['name', 'directives', 'fields'], TypeExtensionDefinition: ['definition'], DirectiveDefinition: ['name', 'arguments', 'locations'] }; var BREAK = exports.BREAK = {}; /** * visit() will walk through an AST using a depth first traversal, calling * the visitor's enter function at each node in the traversal, and calling the * leave function after visiting that node and all of its child nodes. * * By returning different values from the enter and leave functions, the * behavior of the visitor can be altered, including skipping over a sub-tree of * the AST (by returning false), editing the AST by returning a value or null * to remove the value, or to stop the whole traversal by returning BREAK. * * When using visit() to edit an AST, the original AST will not be modified, and * a new version of the AST with the changes applied will be returned from the * visit function. * * const editedAST = visit(ast, { * enter(node, key, parent, path, ancestors) { * // @return * // undefined: no action * // false: skip visiting this node * // visitor.BREAK: stop visiting altogether * // null: delete this node * // any value: replace this node with the returned value * }, * leave(node, key, parent, path, ancestors) { * // @return * // undefined: no action * // false: no action * // visitor.BREAK: stop visiting altogether * // null: delete this node * // any value: replace this node with the returned value * } * }); * * Alternatively to providing enter() and leave() functions, a visitor can * instead provide functions named the same as the kinds of AST nodes, or * enter/leave visitors at a named key, leading to four permutations of * visitor API: * * 1) Named visitors triggered when entering a node a specific kind. * * visit(ast, { * Kind(node) { * // enter the "Kind" node * } * }) * * 2) Named visitors that trigger upon entering and leaving a node of * a specific kind. * * visit(ast, { * Kind: { * enter(node) { * // enter the "Kind" node * } * leave(node) { * // leave the "Kind" node * } * } * }) * * 3) Generic visitors that trigger upon entering and leaving any node. * * visit(ast, { * enter(node) { * // enter any node * }, * leave(node) { * // leave any node * } * }) * * 4) Parallel visitors for entering and leaving nodes of a specific kind. * * visit(ast, { * enter: { * Kind(node) { * // enter the "Kind" node * } * }, * leave: { * Kind(node) { * // leave the "Kind" node * } * } * }) */ function visit(root, visitor, keyMap) { var visitorKeys = keyMap || QueryDocumentKeys; var stack = void 0; var inArray = Array.isArray(root); var keys = [root]; var index = -1; var edits = []; var parent = void 0; var path = []; var ancestors = []; var newRoot = root; do { index++; var isLeaving = index === keys.length; var key = void 0; var node = void 0; var isEdited = isLeaving && edits.length !== 0; if (isLeaving) { key = ancestors.length === 0 ? undefined : path.pop(); node = parent; parent = ancestors.pop(); if (isEdited) { if (inArray) { node = node.slice(); } else { var clone = {}; for (var k in node) { if (node.hasOwnProperty(k)) { clone[k] = node[k]; } } node = clone; } var editOffset = 0; for (var ii = 0; ii < edits.length; ii++) { var editKey = edits[ii][0]; var editValue = edits[ii][1]; if (inArray) { editKey -= editOffset; } if (inArray && editValue === null) { node.splice(editKey, 1); editOffset++; } else { node[editKey] = editValue; } } } index = stack.index; keys = stack.keys; edits = stack.edits; inArray = stack.inArray; stack = stack.prev; } else { key = parent ? inArray ? index : keys[index] : undefined; node = parent ? parent[key] : newRoot; if (node === null || node === undefined) { continue; } if (parent) { path.push(key); } } var result = void 0; if (!Array.isArray(node)) { if (!isNode(node)) { throw new Error('Invalid AST Node: ' + JSON.stringify(node)); } var visitFn = getVisitFn(visitor, node.kind, isLeaving); if (visitFn) { result = visitFn.call(visitor, node, key, parent, path, ancestors); if (result === BREAK) { break; } if (result === false) { if (!isLeaving) { path.pop(); continue; } } else if (result !== undefined) { edits.push([key, result]); if (!isLeaving) { if (isNode(result)) { node = result; } else { path.pop(); continue; } } } } } if (result === undefined && isEdited) { edits.push([key, node]); } if (!isLeaving) { stack = { inArray: inArray, index: index, keys: keys, edits: edits, prev: stack }; inArray = Array.isArray(node); keys = inArray ? node : visitorKeys[node.kind] || []; index = -1; edits = []; if (parent) { ancestors.push(parent); } parent = node; } } while (stack !== undefined); if (edits.length !== 0) { newRoot = edits[edits.length - 1][1]; } return newRoot; } function isNode(maybeNode) { return maybeNode && typeof maybeNode.kind === 'string'; } /** * Creates a new visitor instance which delegates to many visitors to run in * parallel. Each visitor will be visited for each node before moving on. * * If a prior visitor edits a node, no following visitors will see that node. */ function visitInParallel(visitors) { var skipping = new Array(visitors.length); return { enter: function enter(node) { for (var i = 0; i < visitors.length; i++) { if (!skipping[i]) { var fn = getVisitFn(visitors[i], node.kind, /* isLeaving */false); if (fn) { var result = fn.apply(visitors[i], arguments); if (result === false) { skipping[i] = node; } else if (result === BREAK) { skipping[i] = BREAK; } else if (result !== undefined) { return result; } } } } }, leave: function leave(node) { for (var i = 0; i < visitors.length; i++) { if (!skipping[i]) { var fn = getVisitFn(visitors[i], node.kind, /* isLeaving */true); if (fn) { var result = fn.apply(visitors[i], arguments); if (result === BREAK) { skipping[i] = BREAK; } else if (result !== undefined && result !== false) { return result; } } } else if (skipping[i] === node) { skipping[i] = null; } } } }; } /** * Creates a new visitor instance which maintains a provided TypeInfo instance * along with visiting visitor. */ function visitWithTypeInfo(typeInfo, visitor) { return { enter: function enter(node) { typeInfo.enter(node); var fn = getVisitFn(visitor, node.kind, /* isLeaving */false); if (fn) { var result = fn.apply(visitor, arguments); if (result !== undefined) { typeInfo.leave(node); if (isNode(result)) { typeInfo.enter(result); } } return result; } }, leave: function leave(node) { var fn = getVisitFn(visitor, node.kind, /* isLeaving */true); var result = void 0; if (fn) { result = fn.apply(visitor, arguments); } typeInfo.leave(node); return result; } }; } /** * Given a visitor instance, if it is leaving or not, and a node kind, return * the function the visitor runtime should call. */ function getVisitFn(visitor, kind, isLeaving) { var kindVisitor = visitor[kind]; if (kindVisitor) { if (!isLeaving && typeof kindVisitor === 'function') { // { Kind() {} } return kindVisitor; } var kindSpecificVisitor = isLeaving ? kindVisitor.leave : kindVisitor.enter; if (typeof kindSpecificVisitor === 'function') { // { Kind: { enter() {}, leave() {} } } return kindSpecificVisitor; } } else { var specificVisitor = isLeaving ? visitor.leave : visitor.enter; if (specificVisitor) { if (typeof specificVisitor === 'function') { // { enter() {}, leave() {} } return specificVisitor; } var specificKindVisitor = specificVisitor[kind]; if (typeof specificKindVisitor === 'function') { // { enter: { Kind() {} }, leave: { Kind() {} } } return specificKindVisitor; } } } } /***/ }), /* 16 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.valueFromAST = valueFromAST; var _keyMap = __webpack_require__(12); var _keyMap2 = _interopRequireDefault(_keyMap); var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _isNullish = __webpack_require__(6); var _isNullish2 = _interopRequireDefault(_isNullish); var _isInvalid = __webpack_require__(14); var _isInvalid2 = _interopRequireDefault(_isInvalid); var _kinds = __webpack_require__(2); var Kind = _interopRequireWildcard(_kinds); var _definition = __webpack_require__(1); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Produces a JavaScript value given a GraphQL Value AST. * * A GraphQL type must be provided, which will be used to interpret different * GraphQL Value literals. * * Returns `undefined` when the value could not be validly coerced according to * the provided type. * * | GraphQL Value | JSON Value | * | -------------------- | ------------- | * | Input Object | Object | * | List | Array | * | Boolean | Boolean | * | String | String | * | Int / Float | Number | * | Enum Value | Mixed | * | NullValue | null | * */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function valueFromAST(valueNode, type, variables) { if (!valueNode) { // When there is no node, then there is also no value. // Importantly, this is different from returning the value null. return; } if (type instanceof _definition.GraphQLNonNull) { if (valueNode.kind === Kind.NULL) { return; // Invalid: intentionally return no value. } return valueFromAST(valueNode, type.ofType, variables); } if (valueNode.kind === Kind.NULL) { // This is explicitly returning the value null. return null; } if (valueNode.kind === Kind.VARIABLE) { var variableName = valueNode.name.value; if (!variables || (0, _isInvalid2.default)(variables[variableName])) { // No valid return value. return; } // Note: we're not doing any checking that this variable is correct. We're // assuming that this query has been validated and the variable usage here // is of the correct type. return variables[variableName]; } if (type instanceof _definition.GraphQLList) { var itemType = type.ofType; if (valueNode.kind === Kind.LIST) { var coercedValues = []; var itemNodes = valueNode.values; for (var i = 0; i < itemNodes.length; i++) { if (isMissingVariable(itemNodes[i], variables)) { // If an array contains a missing variable, it is either coerced to // null or if the item type is non-null, it considered invalid. if (itemType instanceof _definition.GraphQLNonNull) { return; // Invalid: intentionally return no value. } coercedValues.push(null); } else { var itemValue = valueFromAST(itemNodes[i], itemType, variables); if ((0, _isInvalid2.default)(itemValue)) { return; // Invalid: intentionally return no value. } coercedValues.push(itemValue); } } return coercedValues; } var coercedValue = valueFromAST(valueNode, itemType, variables); if ((0, _isInvalid2.default)(coercedValue)) { return; // Invalid: intentionally return no value. } return [coercedValue]; } if (type instanceof _definition.GraphQLInputObjectType) { if (valueNode.kind !== Kind.OBJECT) { return; // Invalid: intentionally return no value. } var coercedObj = Object.create(null); var fields = type.getFields(); var fieldNodes = (0, _keyMap2.default)(valueNode.fields, function (field) { return field.name.value; }); var fieldNames = Object.keys(fields); for (var _i = 0; _i < fieldNames.length; _i++) { var fieldName = fieldNames[_i]; var field = fields[fieldName]; var fieldNode = fieldNodes[fieldName]; if (!fieldNode || isMissingVariable(fieldNode.value, variables)) { if (!(0, _isInvalid2.default)(field.defaultValue)) { coercedObj[fieldName] = field.defaultValue; } else if (field.type instanceof _definition.GraphQLNonNull) { return; // Invalid: intentionally return no value. } continue; } var fieldValue = valueFromAST(fieldNode.value, field.type, variables); if ((0, _isInvalid2.default)(fieldValue)) { return; // Invalid: intentionally return no value. } coercedObj[fieldName] = fieldValue; } return coercedObj; } (0, _invariant2.default)(type instanceof _definition.GraphQLScalarType || type instanceof _definition.GraphQLEnumType, 'Must be input type'); var parsed = type.parseLiteral(valueNode); if ((0, _isNullish2.default)(parsed)) { // null or invalid values represent a failure to parse correctly, // in which case no value is returned. return; } return parsed; } // Returns true if the provided valueNode is a variable which is not defined // in the set of variables. function isMissingVariable(valueNode, variables) { return valueNode.kind === Kind.VARIABLE && (!variables || (0, _isInvalid2.default)(variables[valueNode.name.value])); } /***/ }), /* 17 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parse = parse; exports.parseValue = parseValue; exports.parseType = parseType; exports.parseConstValue = parseConstValue; exports.parseTypeReference = parseTypeReference; exports.parseNamedType = parseNamedType; var _source = __webpack_require__(26); var _error = __webpack_require__(0); var _lexer = __webpack_require__(24); var _kinds = __webpack_require__(2); /** * Given a GraphQL source, parses it into a Document. * Throws GraphQLError if a syntax error is encountered. */ /** * Configuration options to control parser behavior */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function parse(source, options) { var sourceObj = typeof source === 'string' ? new _source.Source(source) : source; var lexer = (0, _lexer.createLexer)(sourceObj, options || {}); return parseDocument(lexer); } /** * Given a string containing a GraphQL value (ex. `[42]`), parse the AST for * that value. * Throws GraphQLError if a syntax error is encountered. * * This is useful within tools that operate upon GraphQL Values directly and * in isolation of complete GraphQL documents. * * Consider providing the results to the utility function: valueFromAST(). */ function parseValue(source, options) { var sourceObj = typeof source === 'string' ? new _source.Source(source) : source; var lexer = (0, _lexer.createLexer)(sourceObj, options || {}); expect(lexer, _lexer.TokenKind.SOF); var value = parseValueLiteral(lexer, false); expect(lexer, _lexer.TokenKind.EOF); return value; } /** * Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for * that type. * Throws GraphQLError if a syntax error is encountered. * * This is useful within tools that operate upon GraphQL Types directly and * in isolation of complete GraphQL documents. * * Consider providing the results to the utility function: typeFromAST(). */ function parseType(source, options) { var sourceObj = typeof source === 'string' ? new _source.Source(source) : source; var lexer = (0, _lexer.createLexer)(sourceObj, options || {}); expect(lexer, _lexer.TokenKind.SOF); var type = parseTypeReference(lexer); expect(lexer, _lexer.TokenKind.EOF); return type; } /** * Converts a name lex token into a name parse node. */ function parseName(lexer) { var token = expect(lexer, _lexer.TokenKind.NAME); return { kind: _kinds.NAME, value: token.value, loc: loc(lexer, token) }; } // Implements the parsing rules in the Document section. /** * Document : Definition+ */ function parseDocument(lexer) { var start = lexer.token; expect(lexer, _lexer.TokenKind.SOF); var definitions = []; do { definitions.push(parseDefinition(lexer)); } while (!skip(lexer, _lexer.TokenKind.EOF)); return { kind: _kinds.DOCUMENT, definitions: definitions, loc: loc(lexer, start) }; } /** * Definition : * - OperationDefinition * - FragmentDefinition * - TypeSystemDefinition */ function parseDefinition(lexer) { if (peek(lexer, _lexer.TokenKind.BRACE_L)) { return parseOperationDefinition(lexer); } if (peek(lexer, _lexer.TokenKind.NAME)) { switch (lexer.token.value) { // Note: subscription is an experimental non-spec addition. case 'query': case 'mutation': case 'subscription': return parseOperationDefinition(lexer); case 'fragment': return parseFragmentDefinition(lexer); // Note: the Type System IDL is an experimental non-spec addition. case 'schema': case 'scalar': case 'type': case 'interface': case 'union': case 'enum': case 'input': case 'extend': case 'directive': return parseTypeSystemDefinition(lexer); } } throw unexpected(lexer); } // Implements the parsing rules in the Operations section. /** * OperationDefinition : * - SelectionSet * - OperationType Name? VariableDefinitions? Directives? SelectionSet */ function parseOperationDefinition(lexer) { var start = lexer.token; if (peek(lexer, _lexer.TokenKind.BRACE_L)) { return { kind: _kinds.OPERATION_DEFINITION, operation: 'query', name: null, variableDefinitions: null, directives: [], selectionSet: parseSelectionSet(lexer), loc: loc(lexer, start) }; } var operation = parseOperationType(lexer); var name = void 0; if (peek(lexer, _lexer.TokenKind.NAME)) { name = parseName(lexer); } return { kind: _kinds.OPERATION_DEFINITION, operation: operation, name: name, variableDefinitions: parseVariableDefinitions(lexer), directives: parseDirectives(lexer), selectionSet: parseSelectionSet(lexer), loc: loc(lexer, start) }; } /** * OperationType : one of query mutation subscription */ function parseOperationType(lexer) { var operationToken = expect(lexer, _lexer.TokenKind.NAME); switch (operationToken.value) { case 'query': return 'query'; case 'mutation': return 'mutation'; // Note: subscription is an experimental non-spec addition. case 'subscription': return 'subscription'; } throw unexpected(lexer, operationToken); } /** * VariableDefinitions : ( VariableDefinition+ ) */ function parseVariableDefinitions(lexer) { return peek(lexer, _lexer.TokenKind.PAREN_L) ? many(lexer, _lexer.TokenKind.PAREN_L, parseVariableDefinition, _lexer.TokenKind.PAREN_R) : []; } /** * VariableDefinition : Variable : Type DefaultValue? */ function parseVariableDefinition(lexer) { var start = lexer.token; return { kind: _kinds.VARIABLE_DEFINITION, variable: parseVariable(lexer), type: (expect(lexer, _lexer.TokenKind.COLON), parseTypeReference(lexer)), defaultValue: skip(lexer, _lexer.TokenKind.EQUALS) ? parseValueLiteral(lexer, true) : null, loc: loc(lexer, start) }; } /** * Variable : $ Name */ function parseVariable(lexer) { var start = lexer.token; expect(lexer, _lexer.TokenKind.DOLLAR); return { kind: _kinds.VARIABLE, name: parseName(lexer), loc: loc(lexer, start) }; } /** * SelectionSet : { Selection+ } */ function parseSelectionSet(lexer) { var start = lexer.token; return { kind: _kinds.SELECTION_SET, selections: many(lexer, _lexer.TokenKind.BRACE_L, parseSelection, _lexer.TokenKind.BRACE_R), loc: loc(lexer, start) }; } /** * Selection : * - Field * - FragmentSpread * - InlineFragment */ function parseSelection(lexer) { return peek(lexer, _lexer.TokenKind.SPREAD) ? parseFragment(lexer) : parseField(lexer); } /** * Field : Alias? Name Arguments? Directives? SelectionSet? * * Alias : Name : */ function parseField(lexer) { var start = lexer.token; var nameOrAlias = parseName(lexer); var alias = void 0; var name = void 0; if (skip(lexer, _lexer.TokenKind.COLON)) { alias = nameOrAlias; name = parseName(lexer); } else { alias = null; name = nameOrAlias; } return { kind: _kinds.FIELD, alias: alias, name: name, arguments: parseArguments(lexer), directives: parseDirectives(lexer), selectionSet: peek(lexer, _lexer.TokenKind.BRACE_L) ? parseSelectionSet(lexer) : null, loc: loc(lexer, start) }; } /** * Arguments : ( Argument+ ) */ function parseArguments(lexer) { return peek(lexer, _lexer.TokenKind.PAREN_L) ? many(lexer, _lexer.TokenKind.PAREN_L, parseArgument, _lexer.TokenKind.PAREN_R) : []; } /** * Argument : Name : Value */ function parseArgument(lexer) { var start = lexer.token; return { kind: _kinds.ARGUMENT, name: parseName(lexer), value: (expect(lexer, _lexer.TokenKind.COLON), parseValueLiteral(lexer, false)), loc: loc(lexer, start) }; } // Implements the parsing rules in the Fragments section. /** * Corresponds to both FragmentSpread and InlineFragment in the spec. * * FragmentSpread : ... FragmentName Directives? * * InlineFragment : ... TypeCondition? Directives? SelectionSet */ function parseFragment(lexer) { var start = lexer.token; expect(lexer, _lexer.TokenKind.SPREAD); if (peek(lexer, _lexer.TokenKind.NAME) && lexer.token.value !== 'on') { return { kind: _kinds.FRAGMENT_SPREAD, name: parseFragmentName(lexer), directives: parseDirectives(lexer), loc: loc(lexer, start) }; } var typeCondition = null; if (lexer.token.value === 'on') { lexer.advance(); typeCondition = parseNamedType(lexer); } return { kind: _kinds.INLINE_FRAGMENT, typeCondition: typeCondition, directives: parseDirectives(lexer), selectionSet: parseSelectionSet(lexer), loc: loc(lexer, start) }; } /** * FragmentDefinition : * - fragment FragmentName on TypeCondition Directives? SelectionSet * * TypeCondition : NamedType */ function parseFragmentDefinition(lexer) { var start = lexer.token; expectKeyword(lexer, 'fragment'); return { kind: _kinds.FRAGMENT_DEFINITION, name: parseFragmentName(lexer), typeCondition: (expectKeyword(lexer, 'on'), parseNamedType(lexer)), directives: parseDirectives(lexer), selectionSet: parseSelectionSet(lexer), loc: loc(lexer, start) }; } /** * FragmentName : Name but not `on` */ function parseFragmentName(lexer) { if (lexer.token.value === 'on') { throw unexpected(lexer); } return parseName(lexer); } // Implements the parsing rules in the Values section. /** * Value[Const] : * - [~Const] Variable * - IntValue * - FloatValue * - StringValue * - BooleanValue * - NullValue * - EnumValue * - ListValue[?Const] * - ObjectValue[?Const] * * BooleanValue : one of `true` `false` * * NullValue : `null` * * EnumValue : Name but not `true`, `false` or `null` */ function parseValueLiteral(lexer, isConst) { var token = lexer.token; switch (token.kind) { case _lexer.TokenKind.BRACKET_L: return parseList(lexer, isConst); case _lexer.TokenKind.BRACE_L: return parseObject(lexer, isConst); case _lexer.TokenKind.INT: lexer.advance(); return { kind: _kinds.INT, value: token.value, loc: loc(lexer, token) }; case _lexer.TokenKind.FLOAT: lexer.advance(); return { kind: _kinds.FLOAT, value: token.value, loc: loc(lexer, token) }; case _lexer.TokenKind.STRING: lexer.advance(); return { kind: _kinds.STRING, value: token.value, loc: loc(lexer, token) }; case _lexer.TokenKind.NAME: if (token.value === 'true' || token.value === 'false') { lexer.advance(); return { kind: _kinds.BOOLEAN, value: token.value === 'true', loc: loc(lexer, token) }; } else if (token.value === 'null') { lexer.advance(); return { kind: _kinds.NULL, loc: loc(lexer, token) }; } lexer.advance(); return { kind: _kinds.ENUM, value: token.value, loc: loc(lexer, token) }; case _lexer.TokenKind.DOLLAR: if (!isConst) { return parseVariable(lexer); } break; } throw unexpected(lexer); } function parseConstValue(lexer) { return parseValueLiteral(lexer, true); } function parseValueValue(lexer) { return parseValueLiteral(lexer, false); } /** * ListValue[Const] : * - [ ] * - [ Value[?Const]+ ] */ function parseList(lexer, isConst) { var start = lexer.token; var item = isConst ? parseConstValue : parseValueValue; return { kind: _kinds.LIST, values: any(lexer, _lexer.TokenKind.BRACKET_L, item, _lexer.TokenKind.BRACKET_R), loc: loc(lexer, start) }; } /** * ObjectValue[Const] : * - { } * - { ObjectField[?Const]+ } */ function parseObject(lexer, isConst) { var start = lexer.token; expect(lexer, _lexer.TokenKind.BRACE_L); var fields = []; while (!skip(lexer, _lexer.TokenKind.BRACE_R)) { fields.push(parseObjectField(lexer, isConst)); } return { kind: _kinds.OBJECT, fields: fields, loc: loc(lexer, start) }; } /** * ObjectField[Const] : Name : Value[?Const] */ function parseObjectField(lexer, isConst) { var start = lexer.token; return { kind: _kinds.OBJECT_FIELD, name: parseName(lexer), value: (expect(lexer, _lexer.TokenKind.COLON), parseValueLiteral(lexer, isConst)), loc: loc(lexer, start) }; } // Implements the parsing rules in the Directives section. /** * Directives : Directive+ */ function parseDirectives(lexer) { var directives = []; while (peek(lexer, _lexer.TokenKind.AT)) { directives.push(parseDirective(lexer)); } return directives; } /** * Directive : @ Name Arguments? */ function parseDirective(lexer) { var start = lexer.token; expect(lexer, _lexer.TokenKind.AT); return { kind: _kinds.DIRECTIVE, name: parseName(lexer), arguments: parseArguments(lexer), loc: loc(lexer, start) }; } // Implements the parsing rules in the Types section. /** * Type : * - NamedType * - ListType * - NonNullType */ function parseTypeReference(lexer) { var start = lexer.token; var type = void 0; if (skip(lexer, _lexer.TokenKind.BRACKET_L)) { type = parseTypeReference(lexer); expect(lexer, _lexer.TokenKind.BRACKET_R); type = { kind: _kinds.LIST_TYPE, type: type, loc: loc(lexer, start) }; } else { type = parseNamedType(lexer); } if (skip(lexer, _lexer.TokenKind.BANG)) { return { kind: _kinds.NON_NULL_TYPE, type: type, loc: loc(lexer, start) }; } return type; } /** * NamedType : Name */ function parseNamedType(lexer) { var start = lexer.token; return { kind: _kinds.NAMED_TYPE, name: parseName(lexer), loc: loc(lexer, start) }; } // Implements the parsing rules in the Type Definition section. /** * TypeSystemDefinition : * - SchemaDefinition * - TypeDefinition * - TypeExtensionDefinition * - DirectiveDefinition * * TypeDefinition : * - ScalarTypeDefinition * - ObjectTypeDefinition * - InterfaceTypeDefinition * - UnionTypeDefinition * - EnumTypeDefinition * - InputObjectTypeDefinition */ function parseTypeSystemDefinition(lexer) { if (peek(lexer, _lexer.TokenKind.NAME)) { switch (lexer.token.value) { case 'schema': return parseSchemaDefinition(lexer); case 'scalar': return parseScalarTypeDefinition(lexer); case 'type': return parseObjectTypeDefinition(lexer); case 'interface': return parseInterfaceTypeDefinition(lexer); case 'union': return parseUnionTypeDefinition(lexer); case 'enum': return parseEnumTypeDefinition(lexer); case 'input': return parseInputObjectTypeDefinition(lexer); case 'extend': return parseTypeExtensionDefinition(lexer); case 'directive': return parseDirectiveDefinition(lexer); } } throw unexpected(lexer); } /** * SchemaDefinition : schema Directives? { OperationTypeDefinition+ } * * OperationTypeDefinition : OperationType : NamedType */ function parseSchemaDefinition(lexer) { var start = lexer.token; expectKeyword(lexer, 'schema'); var directives = parseDirectives(lexer); var operationTypes = many(lexer, _lexer.TokenKind.BRACE_L, parseOperationTypeDefinition, _lexer.TokenKind.BRACE_R); return { kind: _kinds.SCHEMA_DEFINITION, directives: directives, operationTypes: operationTypes, loc: loc(lexer, start) }; } function parseOperationTypeDefinition(lexer) { var start = lexer.token; var operation = parseOperationType(lexer); expect(lexer, _lexer.TokenKind.COLON); var type = parseNamedType(lexer); return { kind: _kinds.OPERATION_TYPE_DEFINITION, operation: operation, type: type, loc: loc(lexer, start) }; } /** * ScalarTypeDefinition : scalar Name Directives? */ function parseScalarTypeDefinition(lexer) { var start = lexer.token; expectKeyword(lexer, 'scalar'); var name = parseName(lexer); var directives = parseDirectives(lexer); return { kind: _kinds.SCALAR_TYPE_DEFINITION, name: name, directives: directives, loc: loc(lexer, start) }; } /** * ObjectTypeDefinition : * - type Name ImplementsInterfaces? Directives? { FieldDefinition+ } */ function parseObjectTypeDefinition(lexer) { var start = lexer.token; expectKeyword(lexer, 'type'); var name = parseName(lexer); var interfaces = parseImplementsInterfaces(lexer); var directives = parseDirectives(lexer); var fields = any(lexer, _lexer.TokenKind.BRACE_L, parseFieldDefinition, _lexer.TokenKind.BRACE_R); return { kind: _kinds.OBJECT_TYPE_DEFINITION, name: name, interfaces: interfaces, directives: directives, fields: fields, loc: loc(lexer, start) }; } /** * ImplementsInterfaces : implements NamedType+ */ function parseImplementsInterfaces(lexer) { var types = []; if (lexer.token.value === 'implements') { lexer.advance(); do { types.push(parseNamedType(lexer)); } while (peek(lexer, _lexer.TokenKind.NAME)); } return types; } /** * FieldDefinition : Name ArgumentsDefinition? : Type Directives? */ function parseFieldDefinition(lexer) { var start = lexer.token; var name = parseName(lexer); var args = parseArgumentDefs(lexer); expect(lexer, _lexer.TokenKind.COLON); var type = parseTypeReference(lexer); var directives = parseDirectives(lexer); return { kind: _kinds.FIELD_DEFINITION, name: name, arguments: args, type: type, directives: directives, loc: loc(lexer, start) }; } /** * ArgumentsDefinition : ( InputValueDefinition+ ) */ function parseArgumentDefs(lexer) { if (!peek(lexer, _lexer.TokenKind.PAREN_L)) { return []; } return many(lexer, _lexer.TokenKind.PAREN_L, parseInputValueDef, _lexer.TokenKind.PAREN_R); } /** * InputValueDefinition : Name : Type DefaultValue? Directives? */ function parseInputValueDef(lexer) { var start = lexer.token; var name = parseName(lexer); expect(lexer, _lexer.TokenKind.COLON); var type = parseTypeReference(lexer); var defaultValue = null; if (skip(lexer, _lexer.TokenKind.EQUALS)) { defaultValue = parseConstValue(lexer); } var directives = parseDirectives(lexer); return { kind: _kinds.INPUT_VALUE_DEFINITION, name: name, type: type, defaultValue: defaultValue, directives: directives, loc: loc(lexer, start) }; } /** * InterfaceTypeDefinition : interface Name Directives? { FieldDefinition+ } */ function parseInterfaceTypeDefinition(lexer) { var start = lexer.token; expectKeyword(lexer, 'interface'); var name = parseName(lexer); var directives = parseDirectives(lexer); var fields = any(lexer, _lexer.TokenKind.BRACE_L, parseFieldDefinition, _lexer.TokenKind.BRACE_R); return { kind: _kinds.INTERFACE_TYPE_DEFINITION, name: name, directives: directives, fields: fields, loc: loc(lexer, start) }; } /** * UnionTypeDefinition : union Name Directives? = UnionMembers */ function parseUnionTypeDefinition(lexer) { var start = lexer.token; expectKeyword(lexer, 'union'); var name = parseName(lexer); var directives = parseDirectives(lexer); expect(lexer, _lexer.TokenKind.EQUALS); var types = parseUnionMembers(lexer); return { kind: _kinds.UNION_TYPE_DEFINITION, name: name, directives: directives, types: types, loc: loc(lexer, start) }; } /** * UnionMembers : * - NamedType * - UnionMembers | NamedType */ function parseUnionMembers(lexer) { var members = []; do { members.push(parseNamedType(lexer)); } while (skip(lexer, _lexer.TokenKind.PIPE)); return members; } /** * EnumTypeDefinition : enum Name Directives? { EnumValueDefinition+ } */ function parseEnumTypeDefinition(lexer) { var start = lexer.token; expectKeyword(lexer, 'enum'); var name = parseName(lexer); var directives = parseDirectives(lexer); var values = many(lexer, _lexer.TokenKind.BRACE_L, parseEnumValueDefinition, _lexer.TokenKind.BRACE_R); return { kind: _kinds.ENUM_TYPE_DEFINITION, name: name, directives: directives, values: values, loc: loc(lexer, start) }; } /** * EnumValueDefinition : EnumValue Directives? * * EnumValue : Name */ function parseEnumValueDefinition(lexer) { var start = lexer.token; var name = parseName(lexer); var directives = parseDirectives(lexer); return { kind: _kinds.ENUM_VALUE_DEFINITION, name: name, directives: directives, loc: loc(lexer, start) }; } /** * InputObjectTypeDefinition : input Name Directives? { InputValueDefinition+ } */ function parseInputObjectTypeDefinition(lexer) { var start = lexer.token; expectKeyword(lexer, 'input'); var name = parseName(lexer); var directives = parseDirectives(lexer); var fields = any(lexer, _lexer.TokenKind.BRACE_L, parseInputValueDef, _lexer.TokenKind.BRACE_R); return { kind: _kinds.INPUT_OBJECT_TYPE_DEFINITION, name: name, directives: directives, fields: fields, loc: loc(lexer, start) }; } /** * TypeExtensionDefinition : extend ObjectTypeDefinition */ function parseTypeExtensionDefinition(lexer) { var start = lexer.token; expectKeyword(lexer, 'extend'); var definition = parseObjectTypeDefinition(lexer); return { kind: _kinds.TYPE_EXTENSION_DEFINITION, definition: definition, loc: loc(lexer, start) }; } /** * DirectiveDefinition : * - directive @ Name ArgumentsDefinition? on DirectiveLocations */ function parseDirectiveDefinition(lexer) { var start = lexer.token; expectKeyword(lexer, 'directive'); expect(lexer, _lexer.TokenKind.AT); var name = parseName(lexer); var args = parseArgumentDefs(lexer); expectKeyword(lexer, 'on'); var locations = parseDirectiveLocations(lexer); return { kind: _kinds.DIRECTIVE_DEFINITION, name: name, arguments: args, locations: locations, loc: loc(lexer, start) }; } /** * DirectiveLocations : * - Name * - DirectiveLocations | Name */ function parseDirectiveLocations(lexer) { var locations = []; do { locations.push(parseName(lexer)); } while (skip(lexer, _lexer.TokenKind.PIPE)); return locations; } // Core parsing utility functions /** * Returns a location object, used to identify the place in * the source that created a given parsed object. */ function loc(lexer, startToken) { if (!lexer.options.noLocation) { return new Loc(startToken, lexer.lastToken, lexer.source); } } function Loc(startToken, endToken, source) { this.start = startToken.start; this.end = endToken.end; this.startToken = startToken; this.endToken = endToken; this.source = source; } // Print a simplified form when appearing in JSON/util.inspect. Loc.prototype.toJSON = Loc.prototype.inspect = function toJSON() { return { start: this.start, end: this.end }; }; /** * Determines if the next token is of a given kind */ function peek(lexer, kind) { return lexer.token.kind === kind; } /** * If the next token is of the given kind, return true after advancing * the lexer. Otherwise, do not change the parser state and return false. */ function skip(lexer, kind) { var match = lexer.token.kind === kind; if (match) { lexer.advance(); } return match; } /** * If the next token is of the given kind, return that token after advancing * the lexer. Otherwise, do not change the parser state and throw an error. */ function expect(lexer, kind) { var token = lexer.token; if (token.kind === kind) { lexer.advance(); return token; } throw (0, _error.syntaxError)(lexer.source, token.start, 'Expected ' + kind + ', found ' + (0, _lexer.getTokenDesc)(token)); } /** * If the next token is a keyword with the given value, return that token after * advancing the lexer. Otherwise, do not change the parser state and return * false. */ function expectKeyword(lexer, value) { var token = lexer.token; if (token.kind === _lexer.TokenKind.NAME && token.value === value) { lexer.advance(); return token; } throw (0, _error.syntaxError)(lexer.source, token.start, 'Expected "' + value + '", found ' + (0, _lexer.getTokenDesc)(token)); } /** * Helper function for creating an error when an unexpected lexed token * is encountered. */ function unexpected(lexer, atToken) { var token = atToken || lexer.token; return (0, _error.syntaxError)(lexer.source, token.start, 'Unexpected ' + (0, _lexer.getTokenDesc)(token)); } /** * Returns a possibly empty list of parse nodes, determined by * the parseFn. This list begins with a lex token of openKind * and ends with a lex token of closeKind. Advances the parser * to the next lex token after the closing token. */ function any(lexer, openKind, parseFn, closeKind) { expect(lexer, openKind); var nodes = []; while (!skip(lexer, closeKind)) { nodes.push(parseFn(lexer)); } return nodes; } /** * Returns a non-empty list of parse nodes, determined by * the parseFn. This list begins with a lex token of openKind * and ends with a lex token of closeKind. Advances the parser * to the next lex token after the closing token. */ function many(lexer, openKind, parseFn, closeKind) { expect(lexer, openKind); var nodes = [parseFn(lexer)]; while (!skip(lexer, closeKind)) { nodes.push(parseFn(lexer)); } return nodes; } /***/ }), /* 18 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isValidLiteralValue = isValidLiteralValue; var _printer = __webpack_require__(4); var _kinds = __webpack_require__(2); var _definition = __webpack_require__(1); var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _keyMap = __webpack_require__(12); var _keyMap2 = _interopRequireDefault(_keyMap); var _isNullish = __webpack_require__(6); var _isNullish2 = _interopRequireDefault(_isNullish); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Utility for validators which determines if a value literal node is valid * given an input type. * * Note that this only validates literal values, variables are assumed to * provide values of the correct type. */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function isValidLiteralValue(type, valueNode) { // A value must be provided if the type is non-null. if (type instanceof _definition.GraphQLNonNull) { if (!valueNode || valueNode.kind === _kinds.NULL) { return ['Expected "' + String(type) + '", found null.']; } return isValidLiteralValue(type.ofType, valueNode); } if (!valueNode || valueNode.kind === _kinds.NULL) { return []; } // This function only tests literals, and assumes variables will provide // values of the correct type. if (valueNode.kind === _kinds.VARIABLE) { return []; } // Lists accept a non-list value as a list of one. if (type instanceof _definition.GraphQLList) { var _ret = function () { var itemType = type.ofType; if (valueNode.kind === _kinds.LIST) { return { v: valueNode.values.reduce(function (acc, item, index) { var errors = isValidLiteralValue(itemType, item); return acc.concat(errors.map(function (error) { return 'In element #' + index + ': ' + error; })); }, []) }; } return { v: isValidLiteralValue(itemType, valueNode) }; }(); if (typeof _ret === "object") return _ret.v; } // Input objects check each defined field and look for undefined fields. if (type instanceof _definition.GraphQLInputObjectType) { var _ret2 = function () { if (valueNode.kind !== _kinds.OBJECT) { return { v: ['Expected "' + type.name + '", found not an object.'] }; } var fields = type.getFields(); var errors = []; // Ensure every provided field is defined. var fieldNodes = valueNode.fields; fieldNodes.forEach(function (providedFieldNode) { if (!fields[providedFieldNode.name.value]) { errors.push('In field "' + providedFieldNode.name.value + '": Unknown field.'); } }); // Ensure every defined field is valid. var fieldNodeMap = (0, _keyMap2.default)(fieldNodes, function (fieldNode) { return fieldNode.name.value; }); Object.keys(fields).forEach(function (fieldName) { var result = isValidLiteralValue(fields[fieldName].type, fieldNodeMap[fieldName] && fieldNodeMap[fieldName].value); errors.push.apply(errors, result.map(function (error) { return 'In field "' + fieldName + '": ' + error; })); }); return { v: errors }; }(); if (typeof _ret2 === "object") return _ret2.v; } (0, _invariant2.default)(type instanceof _definition.GraphQLScalarType || type instanceof _definition.GraphQLEnumType, 'Must be input type'); // Scalar/Enum input checks to ensure the type can parse the value to // a non-null value. var parseResult = type.parseLiteral(valueNode); if ((0, _isNullish2.default)(parseResult)) { return ['Expected type "' + type.name + '", found ' + (0, _printer.print)(valueNode) + '.']; } return []; } /***/ }), /* 19 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isEqualType = isEqualType; exports.isTypeSubTypeOf = isTypeSubTypeOf; exports.doTypesOverlap = doTypesOverlap; var _definition = __webpack_require__(1); /** * Provided two types, return true if the types are equal (invariant). */ function isEqualType(typeA, typeB) { // Equivalent types are equal. if (typeA === typeB) { return true; } // If either type is non-null, the other must also be non-null. if (typeA instanceof _definition.GraphQLNonNull && typeB instanceof _definition.GraphQLNonNull) { return isEqualType(typeA.ofType, typeB.ofType); } // If either type is a list, the other must also be a list. if (typeA instanceof _definition.GraphQLList && typeB instanceof _definition.GraphQLList) { return isEqualType(typeA.ofType, typeB.ofType); } // Otherwise the types are not equal. return false; } /** * Provided a type and a super type, return true if the first type is either * equal or a subset of the second super type (covariant). */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function isTypeSubTypeOf(schema, maybeSubType, superType) { // Equivalent type is a valid subtype if (maybeSubType === superType) { return true; } // If superType is non-null, maybeSubType must also be non-null. if (superType instanceof _definition.GraphQLNonNull) { if (maybeSubType instanceof _definition.GraphQLNonNull) { return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType); } return false; } else if (maybeSubType instanceof _definition.GraphQLNonNull) { // If superType is nullable, maybeSubType may be non-null or nullable. return isTypeSubTypeOf(schema, maybeSubType.ofType, superType); } // If superType type is a list, maybeSubType type must also be a list. if (superType instanceof _definition.GraphQLList) { if (maybeSubType instanceof _definition.GraphQLList) { return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType); } return false; } else if (maybeSubType instanceof _definition.GraphQLList) { // If superType is not a list, maybeSubType must also be not a list. return false; } // If superType type is an abstract type, maybeSubType type may be a currently // possible object type. if ((0, _definition.isAbstractType)(superType) && maybeSubType instanceof _definition.GraphQLObjectType && schema.isPossibleType(superType, maybeSubType)) { return true; } // Otherwise, the child type is not a valid subtype of the parent type. return false; } /** * Provided two composite types, determine if they "overlap". Two composite * types overlap when the Sets of possible concrete types for each intersect. * * This is often used to determine if a fragment of a given type could possibly * be visited in a context of another type. * * This function is commutative. */ function doTypesOverlap(schema, typeA, typeB) { // So flow is aware this is constant var _typeB = typeB; // Equivalent types overlap if (typeA === _typeB) { return true; } if (typeA instanceof _definition.GraphQLInterfaceType || typeA instanceof _definition.GraphQLUnionType) { if (_typeB instanceof _definition.GraphQLInterfaceType || _typeB instanceof _definition.GraphQLUnionType) { // If both types are abstract, then determine if there is any intersection // between possible concrete types of each. return schema.getPossibleTypes(typeA).some(function (type) { return schema.isPossibleType(_typeB, type); }); } // Determine if the latter type is a possible concrete type of the former. return schema.isPossibleType(typeA, _typeB); } if (_typeB instanceof _definition.GraphQLInterfaceType || _typeB instanceof _definition.GraphQLUnionType) { // Determine if the former type is a possible concrete type of the latter. return schema.isPossibleType(_typeB, typeA); } // Otherwise the types do not overlap. return false; } /***/ }), /* 20 */ /***/ (function(module, exports) { /** * Copyright (c) 2016, Lee Byron * All rights reserved. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @ignore */ /** * [Iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterator) * is a *protocol* which describes a standard way to produce a sequence of * values, typically the values of the Iterable represented by this Iterator. * * While described by the [ES2015 version of JavaScript](http://www.ecma-international.org/ecma-262/6.0/#sec-iterator-interface) * it can be utilized by any version of JavaScript. * * @typedef {Object} Iterator * @template T The type of each iterated value * @property {function (): { value: T, done: boolean }} next * A method which produces either the next value in a sequence or a result * where the `done` property is `true` indicating the end of the Iterator. */ /** * [Iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable) * is a *protocol* which when implemented allows a JavaScript object to define * their iteration behavior, such as what values are looped over in a `for..of` * loop or `iterall`'s `forEach` function. Many [built-in types](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#Builtin_iterables) * implement the Iterable protocol, including `Array` and `Map`. * * While described by the [ES2015 version of JavaScript](http://www.ecma-international.org/ecma-262/6.0/#sec-iterable-interface) * it can be utilized by any version of JavaScript. * * @typedef {Object} Iterable * @template T The type of each iterated value * @property {function (): Iterator} Symbol.iterator * A method which produces an Iterator for this Iterable. */ // In ES2015 (or a polyfilled) environment, this will be Symbol.iterator var SYMBOL_ITERATOR = typeof Symbol === 'function' && Symbol.iterator /** * A property name to be used as the name of an Iterable's method responsible * for producing an Iterator, referred to as `@@iterator`. Typically represents * the value `Symbol.iterator` but falls back to the string `"@@iterator"` when * `Symbol.iterator` is not defined. * * Use `$$iterator` for defining new Iterables instead of `Symbol.iterator`, * but do not use it for accessing existing Iterables, instead use * `getIterator()` or `isIterable()`. * * @example * * var $$iterator = require('iterall').$$iterator * * function Counter (to) { * this.to = to * } * * Counter.prototype[$$iterator] = function () { * return { * to: this.to, * num: 0, * next () { * if (this.num >= this.to) { * return { value: undefined, done: true } * } * return { value: this.num++, done: false } * } * } * } * * var counter = new Counter(3) * for (var number of counter) { * console.log(number) // 0 ... 1 ... 2 * } * * @type {Symbol|string} */ var $$iterator = SYMBOL_ITERATOR || '@@iterator' exports.$$iterator = $$iterator /** * Returns true if the provided object implements the Iterator protocol via * either implementing a `Symbol.iterator` or `"@@iterator"` method. * * @example * * var isIterable = require('iterall').isIterable * isIterable([ 1, 2, 3 ]) // true * isIterable('ABC') // true * isIterable({ length: 1, 0: 'Alpha' }) // false * isIterable({ key: 'value' }) // false * isIterable(new Map()) // true * * @param obj * A value which might implement the Iterable protocol. * @return {boolean} true if Iterable. */ function isIterable (obj) { return !!getIteratorMethod(obj) } exports.isIterable = isIterable /** * Returns true if the provided object implements the Array-like protocol via * defining a positive-integer `length` property. * * @example * * var isArrayLike = require('iterall').isArrayLike * isArrayLike([ 1, 2, 3 ]) // true * isArrayLike('ABC') // true * isArrayLike({ length: 1, 0: 'Alpha' }) // true * isArrayLike({ key: 'value' }) // false * isArrayLike(new Map()) // false * * @param obj * A value which might implement the Array-like protocol. * @return {boolean} true if Array-like. */ function isArrayLike (obj) { var length = obj != null && obj.length return typeof length === 'number' && length >= 0 && length % 1 === 0 } exports.isArrayLike = isArrayLike /** * Returns true if the provided object is an Object (i.e. not a string literal) * and is either Iterable or Array-like. * * This may be used in place of [Array.isArray()][isArray] to determine if an * object should be iterated-over. It always excludes string literals and * includes Arrays (regardless of if it is Iterable). It also includes other * Array-like objects such as NodeList, TypedArray, and Buffer. * * @example * * var isCollection = require('iterall').isCollection * isCollection([ 1, 2, 3 ]) // true * isCollection('ABC') // false * isCollection({ length: 1, 0: 'Alpha' }) // true * isCollection({ key: 'value' }) // false * isCollection(new Map()) // true * * @example * * var forEach = require('iterall').forEach * if (isCollection(obj)) { * forEach(obj, function (value) { * console.log(value) * }) * } * * @param obj * An Object value which might implement the Iterable or Array-like protocols. * @return {boolean} true if Iterable or Array-like Object. */ function isCollection (obj) { return Object(obj) === obj && (isArrayLike(obj) || isIterable(obj)) } exports.isCollection = isCollection /** * If the provided object implements the Iterator protocol, its Iterator object * is returned. Otherwise returns undefined. * * @example * * var getIterator = require('iterall').getIterator * var iterator = getIterator([ 1, 2, 3 ]) * iterator.next() // { value: 1, done: false } * iterator.next() // { value: 2, done: false } * iterator.next() // { value: 3, done: false } * iterator.next() // { value: undefined, done: true } * * @template T the type of each iterated value * @param {Iterable} iterable * An Iterable object which is the source of an Iterator. * @return {Iterator} new Iterator instance. */ function getIterator (iterable) { var method = getIteratorMethod(iterable) if (method) { return method.call(iterable) } } exports.getIterator = getIterator /** * If the provided object implements the Iterator protocol, the method * responsible for producing its Iterator object is returned. * * This is used in rare cases for performance tuning. This method must be called * with obj as the contextual this-argument. * * @example * * var getIteratorMethod = require('iterall').getIteratorMethod * var myArray = [ 1, 2, 3 ] * var method = getIteratorMethod(myArray) * if (method) { * var iterator = method.call(myArray) * } * * @template T the type of each iterated value * @param {Iterable} iterable * An Iterable object which defines an `@@iterator` method. * @return {function(): Iterator} `@@iterator` method. */ function getIteratorMethod (iterable) { if (iterable != null) { var method = SYMBOL_ITERATOR && iterable[SYMBOL_ITERATOR] || iterable['@@iterator'] if (typeof method === 'function') { return method } } } exports.getIteratorMethod = getIteratorMethod /** * Given an object which either implements the Iterable protocol or is * Array-like, iterate over it, calling the `callback` at each iteration. * * Use `forEach` where you would expect to use a `for ... of` loop in ES6. * However `forEach` adheres to the behavior of [Array#forEach][] described in * the ECMAScript specification, skipping over "holes" in Array-likes. It will * also delegate to a `forEach` method on `collection` if one is defined, * ensuring native performance for `Arrays`. * * Similar to [Array#forEach][], the `callback` function accepts three * arguments, and is provided with `thisArg` as the calling context. * * Note: providing an infinite Iterator to forEach will produce an error. * * [Array#forEach]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach * * @example * * var forEach = require('iterall').forEach * * forEach(myIterable, function (value, index, iterable) { * console.log(value, index, iterable === myIterable) * }) * * @example * * // ES6: * for (let value of myIterable) { * console.log(value) * } * * // Any JavaScript environment: * forEach(myIterable, function (value) { * console.log(value) * }) * * @template T the type of each iterated value * @param {Iterable|{ length: number }} collection * The Iterable or array to iterate over. * @param {function(T, number, object)} callback * Function to execute for each iteration, taking up to three arguments * @param [thisArg] * Optional. Value to use as `this` when executing `callback`. */ function forEach (collection, callback, thisArg) { if (collection != null) { if (typeof collection.forEach === 'function') { return collection.forEach(callback, thisArg) } var i = 0 var iterator = getIterator(collection) if (iterator) { var step while (!(step = iterator.next()).done) { callback.call(thisArg, step.value, i++, collection) // Infinite Iterators could cause forEach to run forever. // After a very large number of iterations, produce an error. /* istanbul ignore if */ if (i > 9999999) { throw new TypeError('Near-infinite iteration.') } } } else if (isArrayLike(collection)) { for (; i < collection.length; i++) { if (collection.hasOwnProperty(i)) { callback.call(thisArg, collection[i], i, collection) } } } } } exports.forEach = forEach /** * Similar to `getIterator()`, this method returns a new Iterator given an * Iterable. However it will also create an Iterator for a non-Iterable * Array-like collection, such as Array in a non-ES2015 environment. * * `createIterator` is complimentary to `forEach`, but allows a "pull"-based * iteration as opposed to `forEach`'s "push"-based iteration. * * `createIterator` produces an Iterator for Array-likes with the same behavior * as ArrayIteratorPrototype described in the ECMAScript specification, and * does *not* skip over "holes". * * @example * * var createIterator = require('iterall').createIterator * * var myArraylike = { length: 3, 0: 'Alpha', 1: 'Bravo', 2: 'Charlie' } * var iterator = createIterator(myArraylike) * iterator.next() // { value: 'Alpha', done: false } * iterator.next() // { value: 'Bravo', done: false } * iterator.next() // { value: 'Charlie', done: false } * iterator.next() // { value: undefined, done: true } * * @template T the type of each iterated value * @param {Iterable|{ length: number }} collection * An Iterable or Array-like object to produce an Iterator. * @return {Iterator} new Iterator instance. */ function createIterator (collection) { if (collection != null) { var iterator = getIterator(collection) if (iterator) { return iterator } if (isArrayLike(collection)) { return new ArrayLikeIterator(collection) } } } exports.createIterator = createIterator // When the object provided to `createIterator` is not Iterable but is // Array-like, this simple Iterator is created. function ArrayLikeIterator (obj) { this._o = obj this._i = 0 } // Note: all Iterators are themselves Iterable. ArrayLikeIterator.prototype[$$iterator] = function () { return this } // A simple state-machine determines the IteratorResult returned, yielding // each value in the Array-like object in order of their indicies. ArrayLikeIterator.prototype.next = function () { if (this._o === void 0 || this._i >= this._o.length) { this._o = void 0 return { value: void 0, done: true } } return { value: this._o[this._i++], done: false } } /***/ }), /* 21 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = keyValMap; /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /** * Creates a keyed JS object from an array, given a function to produce the keys * and a function to produce the values from each item in the array. * * const phoneBook = [ * { name: 'Jon', num: '555-1234' }, * { name: 'Jenny', num: '867-5309' } * ] * * // { Jon: '555-1234', Jenny: '867-5309' } * const phonesByName = keyValMap( * phoneBook, * entry => entry.name, * entry => entry.num * ) * */ function keyValMap(list, keyFn, valFn) { return list.reduce(function (map, item) { return map[keyFn(item)] = valFn(item), map; }, {}); } /***/ }), /* 22 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = quotedOrList; /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var MAX_LENGTH = 5; /** * Given [ A, B, C ] return '"A", "B", or "C"'. */ function quotedOrList(items) { var selected = items.slice(0, MAX_LENGTH); return selected.map(function (item) { return '"' + item + '"'; }).reduce(function (list, quoted, index) { return list + (selected.length > 2 ? ', ' : ' ') + (index === selected.length - 1 ? 'or ' : '') + quoted; }); } /***/ }), /* 23 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = suggestionList; /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /** * Given an invalid input string and a list of valid options, returns a filtered * list of valid options sorted based on their similarity with the input. */ function suggestionList(input, options) { var optionsByDistance = Object.create(null); var oLength = options.length; var inputThreshold = input.length / 2; for (var i = 0; i < oLength; i++) { var distance = lexicalDistance(input, options[i]); var threshold = Math.max(inputThreshold, options[i].length / 2, 1); if (distance <= threshold) { optionsByDistance[options[i]] = distance; } } return Object.keys(optionsByDistance).sort(function (a, b) { return optionsByDistance[a] - optionsByDistance[b]; }); } /** * Computes the lexical distance between strings A and B. * * The "distance" between two strings is given by counting the minimum number * of edits needed to transform string A into string B. An edit can be an * insertion, deletion, or substitution of a single character, or a swap of two * adjacent characters. * * This distance can be useful for detecting typos in input or sorting * * @param {string} a * @param {string} b * @return {int} distance in number of edits */ function lexicalDistance(a, b) { var i = void 0; var j = void 0; var d = []; var aLength = a.length; var bLength = b.length; for (i = 0; i <= aLength; i++) { d[i] = [i]; } for (j = 1; j <= bLength; j++) { d[0][j] = j; } for (i = 1; i <= aLength; i++) { for (j = 1; j <= bLength; j++) { var cost = a[i - 1] === b[j - 1] ? 0 : 1; d[i][j] = Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost); if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) { d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + cost); } } } return d[aLength][bLength]; } /***/ }), /* 24 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TokenKind = undefined; exports.createLexer = createLexer; exports.getTokenDesc = getTokenDesc; var _error = __webpack_require__(0); /** * Given a Source object, this returns a Lexer for that source. * A Lexer is a stateful stream generator in that every time * it is advanced, it returns the next token in the Source. Assuming the * source lexes, the final Token emitted by the lexer will be of kind * EOF, after which the lexer will repeatedly return the same EOF token * whenever called. */ function createLexer(source, options) { var startOfFileToken = new Tok(SOF, 0, 0, 0, 0, null); var lexer = { source: source, options: options, lastToken: startOfFileToken, token: startOfFileToken, line: 1, lineStart: 0, advance: advanceLexer }; return lexer; } /* / /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function advanceLexer() { var token = this.lastToken = this.token; if (token.kind !== EOF) { do { token = token.next = readToken(this, token); } while (token.kind === COMMENT); this.token = token; } return token; } /** * The return type of createLexer. */ // Each kind of token. var SOF = ''; var EOF = ''; var BANG = '!'; var DOLLAR = '$'; var PAREN_L = '('; var PAREN_R = ')'; var SPREAD = '...'; var COLON = ':'; var EQUALS = '='; var AT = '@'; var BRACKET_L = '['; var BRACKET_R = ']'; var BRACE_L = '{'; var PIPE = '|'; var BRACE_R = '}'; var NAME = 'Name'; var INT = 'Int'; var FLOAT = 'Float'; var STRING = 'String'; var COMMENT = 'Comment'; /** * An exported enum describing the different kinds of tokens that the * lexer emits. */ var TokenKind = exports.TokenKind = { SOF: SOF, EOF: EOF, BANG: BANG, DOLLAR: DOLLAR, PAREN_L: PAREN_L, PAREN_R: PAREN_R, SPREAD: SPREAD, COLON: COLON, EQUALS: EQUALS, AT: AT, BRACKET_L: BRACKET_L, BRACKET_R: BRACKET_R, BRACE_L: BRACE_L, PIPE: PIPE, BRACE_R: BRACE_R, NAME: NAME, INT: INT, FLOAT: FLOAT, STRING: STRING, COMMENT: COMMENT }; /** * A helper function to describe a token as a string for debugging */ function getTokenDesc(token) { var value = token.value; return value ? token.kind + ' "' + value + '"' : token.kind; } var charCodeAt = String.prototype.charCodeAt; var slice = String.prototype.slice; /** * Helper function for constructing the Token object. */ function Tok(kind, start, end, line, column, prev, value) { this.kind = kind; this.start = start; this.end = end; this.line = line; this.column = column; this.value = value; this.prev = prev; this.next = null; } // Print a simplified form when appearing in JSON/util.inspect. Tok.prototype.toJSON = Tok.prototype.inspect = function toJSON() { return { kind: this.kind, value: this.value, line: this.line, column: this.column }; }; function printCharCode(code) { return ( // NaN/undefined represents access beyond the end of the file. isNaN(code) ? EOF : // Trust JSON for ASCII. code < 0x007F ? JSON.stringify(String.fromCharCode(code)) : // Otherwise print the escaped form. '"\\u' + ('00' + code.toString(16).toUpperCase()).slice(-4) + '"' ); } /** * Gets the next token from the source starting at the given position. * * This skips over whitespace and comments until it finds the next lexable * token, then lexes punctuators immediately or calls the appropriate helper * function for more complicated tokens. */ function readToken(lexer, prev) { var source = lexer.source; var body = source.body; var bodyLength = body.length; var position = positionAfterWhitespace(body, prev.end, lexer); var line = lexer.line; var col = 1 + position - lexer.lineStart; if (position >= bodyLength) { return new Tok(EOF, bodyLength, bodyLength, line, col, prev); } var code = charCodeAt.call(body, position); // SourceCharacter if (code < 0x0020 && code !== 0x0009 && code !== 0x000A && code !== 0x000D) { throw (0, _error.syntaxError)(source, position, 'Cannot contain the invalid character ' + printCharCode(code) + '.'); } switch (code) { // ! case 33: return new Tok(BANG, position, position + 1, line, col, prev); // # case 35: return readComment(source, position, line, col, prev); // $ case 36: return new Tok(DOLLAR, position, position + 1, line, col, prev); // ( case 40: return new Tok(PAREN_L, position, position + 1, line, col, prev); // ) case 41: return new Tok(PAREN_R, position, position + 1, line, col, prev); // . case 46: if (charCodeAt.call(body, position + 1) === 46 && charCodeAt.call(body, position + 2) === 46) { return new Tok(SPREAD, position, position + 3, line, col, prev); } break; // : case 58: return new Tok(COLON, position, position + 1, line, col, prev); // = case 61: return new Tok(EQUALS, position, position + 1, line, col, prev); // @ case 64: return new Tok(AT, position, position + 1, line, col, prev); // [ case 91: return new Tok(BRACKET_L, position, position + 1, line, col, prev); // ] case 93: return new Tok(BRACKET_R, position, position + 1, line, col, prev); // { case 123: return new Tok(BRACE_L, position, position + 1, line, col, prev); // | case 124: return new Tok(PIPE, position, position + 1, line, col, prev); // } case 125: return new Tok(BRACE_R, position, position + 1, line, col, prev); // A-Z _ a-z case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72: case 73:case 74:case 75:case 76:case 77:case 78:case 79:case 80: case 81:case 82:case 83:case 84:case 85:case 86:case 87:case 88: case 89:case 90: case 95: case 97:case 98:case 99:case 100:case 101:case 102:case 103:case 104: case 105:case 106:case 107:case 108:case 109:case 110:case 111: case 112:case 113:case 114:case 115:case 116:case 117:case 118: case 119:case 120:case 121:case 122: return readName(source, position, line, col, prev); // - 0-9 case 45: case 48:case 49:case 50:case 51:case 52: case 53:case 54:case 55:case 56:case 57: return readNumber(source, position, code, line, col, prev); // " case 34: return readString(source, position, line, col, prev); } throw (0, _error.syntaxError)(source, position, unexpectedCharacterMessage(code)); } /** * Report a message that an unexpected character was encountered. */ function unexpectedCharacterMessage(code) { if (code === 39) { // ' return 'Unexpected single quote character (\'), did you mean to use ' + 'a double quote (")?'; } return 'Cannot parse the unexpected character ' + printCharCode(code) + '.'; } /** * Reads from body starting at startPosition until it finds a non-whitespace * or commented character, then returns the position of that character for * lexing. */ function positionAfterWhitespace(body, startPosition, lexer) { var bodyLength = body.length; var position = startPosition; while (position < bodyLength) { var code = charCodeAt.call(body, position); // tab | space | comma | BOM if (code === 9 || code === 32 || code === 44 || code === 0xFEFF) { ++position; } else if (code === 10) { // new line ++position; ++lexer.line; lexer.lineStart = position; } else if (code === 13) { // carriage return if (charCodeAt.call(body, position + 1) === 10) { position += 2; } else { ++position; } ++lexer.line; lexer.lineStart = position; } else { break; } } return position; } /** * Reads a comment token from the source file. * * #[\u0009\u0020-\uFFFF]* */ function readComment(source, start, line, col, prev) { var body = source.body; var code = void 0; var position = start; do { code = charCodeAt.call(body, ++position); } while (code !== null && ( // SourceCharacter but not LineTerminator code > 0x001F || code === 0x0009)); return new Tok(COMMENT, start, position, line, col, prev, slice.call(body, start + 1, position)); } /** * Reads a number token from the source file, either a float * or an int depending on whether a decimal point appears. * * Int: -?(0|[1-9][0-9]*) * Float: -?(0|[1-9][0-9]*)(\.[0-9]+)?((E|e)(+|-)?[0-9]+)? */ function readNumber(source, start, firstCode, line, col, prev) { var body = source.body; var code = firstCode; var position = start; var isFloat = false; if (code === 45) { // - code = charCodeAt.call(body, ++position); } if (code === 48) { // 0 code = charCodeAt.call(body, ++position); if (code >= 48 && code <= 57) { throw (0, _error.syntaxError)(source, position, 'Invalid number, unexpected digit after 0: ' + printCharCode(code) + '.'); } } else { position = readDigits(source, position, code); code = charCodeAt.call(body, position); } if (code === 46) { // . isFloat = true; code = charCodeAt.call(body, ++position); position = readDigits(source, position, code); code = charCodeAt.call(body, position); } if (code === 69 || code === 101) { // E e isFloat = true; code = charCodeAt.call(body, ++position); if (code === 43 || code === 45) { // + - code = charCodeAt.call(body, ++position); } position = readDigits(source, position, code); } return new Tok(isFloat ? FLOAT : INT, start, position, line, col, prev, slice.call(body, start, position)); } /** * Returns the new position in the source after reading digits. */ function readDigits(source, start, firstCode) { var body = source.body; var position = start; var code = firstCode; if (code >= 48 && code <= 57) { // 0 - 9 do { code = charCodeAt.call(body, ++position); } while (code >= 48 && code <= 57); // 0 - 9 return position; } throw (0, _error.syntaxError)(source, position, 'Invalid number, expected digit but got: ' + printCharCode(code) + '.'); } /** * Reads a string token from the source file. * * "([^"\\\u000A\u000D]|(\\(u[0-9a-fA-F]{4}|["\\/bfnrt])))*" */ function readString(source, start, line, col, prev) { var body = source.body; var position = start + 1; var chunkStart = position; var code = 0; var value = ''; while (position < body.length && (code = charCodeAt.call(body, position)) !== null && // not LineTerminator code !== 0x000A && code !== 0x000D && // not Quote (") code !== 34) { // SourceCharacter if (code < 0x0020 && code !== 0x0009) { throw (0, _error.syntaxError)(source, position, 'Invalid character within String: ' + printCharCode(code) + '.'); } ++position; if (code === 92) { // \ value += slice.call(body, chunkStart, position - 1); code = charCodeAt.call(body, position); switch (code) { case 34: value += '"';break; case 47: value += '/';break; case 92: value += '\\';break; case 98: value += '\b';break; case 102: value += '\f';break; case 110: value += '\n';break; case 114: value += '\r';break; case 116: value += '\t';break; case 117: // u var charCode = uniCharCode(charCodeAt.call(body, position + 1), charCodeAt.call(body, position + 2), charCodeAt.call(body, position + 3), charCodeAt.call(body, position + 4)); if (charCode < 0) { throw (0, _error.syntaxError)(source, position, 'Invalid character escape sequence: ' + ('\\u' + body.slice(position + 1, position + 5) + '.')); } value += String.fromCharCode(charCode); position += 4; break; default: throw (0, _error.syntaxError)(source, position, 'Invalid character escape sequence: \\' + String.fromCharCode(code) + '.'); } ++position; chunkStart = position; } } if (code !== 34) { // quote (") throw (0, _error.syntaxError)(source, position, 'Unterminated string.'); } value += slice.call(body, chunkStart, position); return new Tok(STRING, start, position + 1, line, col, prev, value); } /** * Converts four hexidecimal chars to the integer that the * string represents. For example, uniCharCode('0','0','0','f') * will return 15, and uniCharCode('0','0','f','f') returns 255. * * Returns a negative number on error, if a char was invalid. * * This is implemented by noting that char2hex() returns -1 on error, * which means the result of ORing the char2hex() will also be negative. */ function uniCharCode(a, b, c, d) { return char2hex(a) << 12 | char2hex(b) << 8 | char2hex(c) << 4 | char2hex(d); } /** * Converts a hex character to its integer value. * '0' becomes 0, '9' becomes 9 * 'A' becomes 10, 'F' becomes 15 * 'a' becomes 10, 'f' becomes 15 * * Returns -1 on error. */ function char2hex(a) { return a >= 48 && a <= 57 ? a - 48 : // 0-9 a >= 65 && a <= 70 ? a - 55 : // A-F a >= 97 && a <= 102 ? a - 87 : // a-f -1; } /** * Reads an alphanumeric + underscore name from the source. * * [_A-Za-z][_0-9A-Za-z]* */ function readName(source, position, line, col, prev) { var body = source.body; var bodyLength = body.length; var end = position + 1; var code = 0; while (end !== bodyLength && (code = charCodeAt.call(body, end)) !== null && (code === 95 || // _ code >= 48 && code <= 57 || // 0-9 code >= 65 && code <= 90 || // A-Z code >= 97 && code <= 122 // a-z )) { ++end; } return new Tok(NAME, position, end, line, col, prev, slice.call(body, position, end)); } /***/ }), /* 25 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getLocation = getLocation; /** * Takes a Source and a UTF-8 character offset, and returns the corresponding * line and column as a SourceLocation. */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function getLocation(source, position) { var lineRegexp = /\r\n|[\n\r]/g; var line = 1; var column = position + 1; var match = void 0; while ((match = lineRegexp.exec(source.body)) && match.index < position) { line += 1; column = position + 1 - (match.index + match[0].length); } return { line: line, column: column }; } /** * Represents a location in a Source. */ /***/ }), /* 26 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /** * A representation of source input to GraphQL. The name is optional, * but is mostly useful for clients who store GraphQL documents in * source files; for example, if the GraphQL input is in a file Foo.graphql, * it might be useful for name to be "Foo.graphql". */ var Source = exports.Source = function Source(body, name) { _classCallCheck(this, Source); this.body = body; this.name = name || 'GraphQL'; }; /***/ }), /* 27 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TypeInfo = undefined; var _kinds = __webpack_require__(2); var Kind = _interopRequireWildcard(_kinds); var _definition = __webpack_require__(1); var _introspection = __webpack_require__(11); var _typeFromAST = __webpack_require__(9); var _find = __webpack_require__(10); var _find2 = _interopRequireDefault(_find); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /** * TypeInfo is a utility class which, given a GraphQL schema, can keep track * of the current field and type definitions at any point in a GraphQL document * AST during a recursive descent by calling `enter(node)` and `leave(node)`. */ var TypeInfo = exports.TypeInfo = function () { function TypeInfo(schema, // NOTE: this experimental optional second parameter is only needed in order // to support non-spec-compliant codebases. You should never need to use it. getFieldDefFn) { _classCallCheck(this, TypeInfo); this._schema = schema; this._typeStack = []; this._parentTypeStack = []; this._inputTypeStack = []; this._fieldDefStack = []; this._directive = null; this._argument = null; this._enumValue = null; this._getFieldDef = getFieldDefFn || getFieldDef; } TypeInfo.prototype.getType = function getType() { if (this._typeStack.length > 0) { return this._typeStack[this._typeStack.length - 1]; } }; TypeInfo.prototype.getParentType = function getParentType() { if (this._parentTypeStack.length > 0) { return this._parentTypeStack[this._parentTypeStack.length - 1]; } }; TypeInfo.prototype.getInputType = function getInputType() { if (this._inputTypeStack.length > 0) { return this._inputTypeStack[this._inputTypeStack.length - 1]; } }; TypeInfo.prototype.getFieldDef = function getFieldDef() { if (this._fieldDefStack.length > 0) { return this._fieldDefStack[this._fieldDefStack.length - 1]; } }; TypeInfo.prototype.getDirective = function getDirective() { return this._directive; }; TypeInfo.prototype.getArgument = function getArgument() { return this._argument; }; TypeInfo.prototype.getEnumValue = function getEnumValue() { return this._enumValue; }; // Flow does not yet handle this case. TypeInfo.prototype.enter = function enter(node /* ASTNode */) { var schema = this._schema; switch (node.kind) { case Kind.SELECTION_SET: var namedType = (0, _definition.getNamedType)(this.getType()); var compositeType = void 0; if ((0, _definition.isCompositeType)(namedType)) { // isCompositeType is a type refining predicate, so this is safe. compositeType = namedType; } this._parentTypeStack.push(compositeType); break; case Kind.FIELD: var parentType = this.getParentType(); var fieldDef = void 0; if (parentType) { fieldDef = this._getFieldDef(schema, parentType, node); } this._fieldDefStack.push(fieldDef); this._typeStack.push(fieldDef && fieldDef.type); break; case Kind.DIRECTIVE: this._directive = schema.getDirective(node.name.value); break; case Kind.OPERATION_DEFINITION: var type = void 0; if (node.operation === 'query') { type = schema.getQueryType(); } else if (node.operation === 'mutation') { type = schema.getMutationType(); } else if (node.operation === 'subscription') { type = schema.getSubscriptionType(); } this._typeStack.push(type); break; case Kind.INLINE_FRAGMENT: case Kind.FRAGMENT_DEFINITION: var typeConditionAST = node.typeCondition; var outputType = typeConditionAST ? (0, _typeFromAST.typeFromAST)(schema, typeConditionAST) : this.getType(); this._typeStack.push(outputType); break; case Kind.VARIABLE_DEFINITION: var inputType = (0, _typeFromAST.typeFromAST)(schema, node.type); this._inputTypeStack.push(inputType); break; case Kind.ARGUMENT: var argDef = void 0; var argType = void 0; var fieldOrDirective = this.getDirective() || this.getFieldDef(); if (fieldOrDirective) { argDef = (0, _find2.default)(fieldOrDirective.args, function (arg) { return arg.name === node.name.value; }); if (argDef) { argType = argDef.type; } } this._argument = argDef; this._inputTypeStack.push(argType); break; case Kind.LIST: var listType = (0, _definition.getNullableType)(this.getInputType()); this._inputTypeStack.push(listType instanceof _definition.GraphQLList ? listType.ofType : undefined); break; case Kind.OBJECT_FIELD: var objectType = (0, _definition.getNamedType)(this.getInputType()); var fieldType = void 0; if (objectType instanceof _definition.GraphQLInputObjectType) { var inputField = objectType.getFields()[node.name.value]; fieldType = inputField ? inputField.type : undefined; } this._inputTypeStack.push(fieldType); break; case Kind.ENUM: var enumType = (0, _definition.getNamedType)(this.getInputType()); var enumValue = void 0; if (enumType instanceof _definition.GraphQLEnumType) { enumValue = enumType.getValue(node.value); } this._enumValue = enumValue; break; } }; TypeInfo.prototype.leave = function leave(node) { switch (node.kind) { case Kind.SELECTION_SET: this._parentTypeStack.pop(); break; case Kind.FIELD: this._fieldDefStack.pop(); this._typeStack.pop(); break; case Kind.DIRECTIVE: this._directive = null; break; case Kind.OPERATION_DEFINITION: case Kind.INLINE_FRAGMENT: case Kind.FRAGMENT_DEFINITION: this._typeStack.pop(); break; case Kind.VARIABLE_DEFINITION: this._inputTypeStack.pop(); break; case Kind.ARGUMENT: this._argument = null; this._inputTypeStack.pop(); break; case Kind.LIST: case Kind.OBJECT_FIELD: this._inputTypeStack.pop(); break; case Kind.ENUM: this._enumValue = null; break; } }; return TypeInfo; }(); /** * Not exactly the same as the executor's definition of getFieldDef, in this * statically evaluated environment we do not always have an Object type, * and need to handle Interface and Union types. */ function getFieldDef(schema, parentType, fieldNode) { var name = fieldNode.name.value; if (name === _introspection.SchemaMetaFieldDef.name && schema.getQueryType() === parentType) { return _introspection.SchemaMetaFieldDef; } if (name === _introspection.TypeMetaFieldDef.name && schema.getQueryType() === parentType) { return _introspection.TypeMetaFieldDef; } if (name === _introspection.TypeNameMetaFieldDef.name && (parentType instanceof _definition.GraphQLObjectType || parentType instanceof _definition.GraphQLInterfaceType || parentType instanceof _definition.GraphQLUnionType)) { return _introspection.TypeNameMetaFieldDef; } if (parentType instanceof _definition.GraphQLObjectType || parentType instanceof _definition.GraphQLInterfaceType) { return parentType.getFields()[name]; } } /***/ }), /* 28 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.assertValidName = assertValidName; /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var NAME_RX = /^[_a-zA-Z][_a-zA-Z0-9]*$/; // Ensures console warnings are only issued once. var hasWarnedAboutDunder = false; /** * Upholds the spec rules about naming. */ function assertValidName(name, isIntrospection) { if (!name || typeof name !== 'string') { throw new Error('Must be named. Unexpected name: ' + name + '.'); } if (!isIntrospection && name.slice(0, 2) === '__' && !hasWarnedAboutDunder) { hasWarnedAboutDunder = true; /* eslint-disable no-console */ if (console && console.error) { var error = new Error('Name "' + name + '" must not begin with "__", which is reserved by ' + 'GraphQL introspection.'); console.error(error.stack || String(error)); } /* eslint-enable no-console */ } if (!NAME_RX.test(name)) { throw new Error('Names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ but "' + name + '" does not.'); } } /***/ }), /* 29 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.astFromValue = astFromValue; var _iterall = __webpack_require__(20); var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _isNullish = __webpack_require__(6); var _isNullish2 = _interopRequireDefault(_isNullish); var _isInvalid = __webpack_require__(14); var _isInvalid2 = _interopRequireDefault(_isInvalid); var _kinds = __webpack_require__(2); var _definition = __webpack_require__(1); var _scalars = __webpack_require__(7); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Produces a GraphQL Value AST given a JavaScript value. * * A GraphQL type must be provided, which will be used to interpret different * JavaScript values. * * | JSON Value | GraphQL Value | * | ------------- | -------------------- | * | Object | Input Object | * | Array | List | * | Boolean | Boolean | * | String | String / Enum Value | * | Number | Int / Float | * | Mixed | Enum Value | * | null | NullValue | * */ function astFromValue(value, type) { // Ensure flow knows that we treat function params as const. var _value = value; if (type instanceof _definition.GraphQLNonNull) { var astValue = astFromValue(_value, type.ofType); if (astValue && astValue.kind === _kinds.NULL) { return null; } return astValue; } // only explicit null, not undefined, NaN if (_value === null) { return { kind: _kinds.NULL }; } // undefined, NaN if ((0, _isInvalid2.default)(_value)) { return null; } // Convert JavaScript array to GraphQL list. If the GraphQLType is a list, but // the value is not an array, convert the value using the list's item type. if (type instanceof _definition.GraphQLList) { var _ret = function () { var itemType = type.ofType; if ((0, _iterall.isCollection)(_value)) { var _ret2 = function () { var valuesNodes = []; (0, _iterall.forEach)(_value, function (item) { var itemNode = astFromValue(item, itemType); if (itemNode) { valuesNodes.push(itemNode); } }); return { v: { v: { kind: _kinds.LIST, values: valuesNodes } } }; }(); if (typeof _ret2 === "object") return _ret2.v; } return { v: astFromValue(_value, itemType) }; }(); if (typeof _ret === "object") return _ret.v; } // Populate the fields of the input object by creating ASTs from each value // in the JavaScript object according to the fields in the input type. if (type instanceof _definition.GraphQLInputObjectType) { var _ret3 = function () { if (_value === null || typeof _value !== 'object') { return { v: null }; } var fields = type.getFields(); var fieldNodes = []; Object.keys(fields).forEach(function (fieldName) { var fieldType = fields[fieldName].type; var fieldValue = astFromValue(_value[fieldName], fieldType); if (fieldValue) { fieldNodes.push({ kind: _kinds.OBJECT_FIELD, name: { kind: _kinds.NAME, value: fieldName }, value: fieldValue }); } }); return { v: { kind: _kinds.OBJECT, fields: fieldNodes } }; }(); if (typeof _ret3 === "object") return _ret3.v; } (0, _invariant2.default)(type instanceof _definition.GraphQLScalarType || type instanceof _definition.GraphQLEnumType, 'Must provide Input Type, cannot use: ' + String(type)); // Since value is an internally represented value, it must be serialized // to an externally represented value before converting into an AST. var serialized = type.serialize(_value); if ((0, _isNullish2.default)(serialized)) { return null; } // Others serialize based on their corresponding JavaScript scalar types. if (typeof serialized === 'boolean') { return { kind: _kinds.BOOLEAN, value: serialized }; } // JavaScript numbers can be Int or Float values. if (typeof serialized === 'number') { var stringNum = String(serialized); return (/^[0-9]+$/.test(stringNum) ? { kind: _kinds.INT, value: stringNum } : { kind: _kinds.FLOAT, value: stringNum } ); } if (typeof serialized === 'string') { // Enum types use Enum literals. if (type instanceof _definition.GraphQLEnumType) { return { kind: _kinds.ENUM, value: serialized }; } // ID types can use Int literals. if (type === _scalars.GraphQLID && /^[0-9]+$/.test(serialized)) { return { kind: _kinds.INT, value: serialized }; } // Use JSON stringify, which uses the same string encoding as GraphQL, // then remove the quotes. return { kind: _kinds.STRING, value: JSON.stringify(serialized).slice(1, -1) }; } throw new TypeError('Cannot convert value to AST: ' + String(serialized)); } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /***/ }), /* 30 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultFieldResolver = undefined; exports.execute = execute; exports.responsePathAsArray = responsePathAsArray; var _iterall = __webpack_require__(20); var _error = __webpack_require__(0); var _find = __webpack_require__(10); var _find2 = _interopRequireDefault(_find); var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _isNullish = __webpack_require__(6); var _isNullish2 = _interopRequireDefault(_isNullish); var _typeFromAST = __webpack_require__(9); var _kinds = __webpack_require__(2); var Kind = _interopRequireWildcard(_kinds); var _values = __webpack_require__(31); var _definition = __webpack_require__(1); var _schema = __webpack_require__(8); var _introspection = __webpack_require__(11); var _directives = __webpack_require__(5); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Implements the "Evaluating requests" section of the GraphQL specification. * * Returns a Promise that will eventually be resolved and never rejected. * * If the arguments to this function do not result in a legal execution context, * a GraphQLError will be thrown immediately explaining the invalid input. */ /** * Terminology * * "Definitions" are the generic name for top-level statements in the document. * Examples of this include: * 1) Operations (such as a query) * 2) Fragments * * "Operations" are a generic name for requests in the document. * Examples of this include: * 1) query, * 2) mutation * * "Selections" are the definitions that can appear legally and at * single level of the query. These include: * 1) field references e.g "a" * 2) fragment "spreads" e.g. "...c" * 3) inline fragment "spreads" e.g. "...on Type { a }" */ /** * Data that must be available at all points during query execution. * * Namely, schema of the type system that is currently executing, * and the fragments defined in the query document */ /** * The result of GraphQL execution. * * - `data` is the result of a successful execution of the query. * - `errors` is included when any errors occurred as a non-empty array. */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function execute(schema, document, rootValue, contextValue, variableValues, operationName) { (0, _invariant2.default)(schema, 'Must provide schema'); (0, _invariant2.default)(document, 'Must provide document'); (0, _invariant2.default)(schema instanceof _schema.GraphQLSchema, 'Schema must be an instance of GraphQLSchema. Also ensure that there are ' + 'not multiple versions of GraphQL installed in your node_modules directory.'); // Variables, if provided, must be an object. (0, _invariant2.default)(!variableValues || typeof variableValues === 'object', 'Variables must be provided as an Object where each property is a ' + 'variable value. Perhaps look to see if an unparsed JSON string ' + 'was provided.'); // If a valid context cannot be created due to incorrect arguments, // this will throw an error. var context = buildExecutionContext(schema, document, rootValue, contextValue, variableValues, operationName); // Return a Promise that will eventually resolve to the data described by // The "Response" section of the GraphQL specification. // // If errors are encountered while executing a GraphQL field, only that // field and its descendants will be omitted, and sibling fields will still // be executed. An execution which encounters errors will still result in a // resolved Promise. return new Promise(function (resolve) { resolve(executeOperation(context, context.operation, rootValue)); }).then(undefined, function (error) { // Errors from sub-fields of a NonNull type may propagate to the top level, // at which point we still log the error and null the parent field, which // in this case is the entire response. context.errors.push(error); return null; }).then(function (data) { if (!context.errors.length) { return { data: data }; } return { data: data, errors: context.errors }; }); } /** * Given a ResponsePath (found in the `path` entry in the information provided * as the last argument to a field resolver), return an Array of the path keys. */ function responsePathAsArray(path) { var flattened = []; var curr = path; while (curr) { flattened.push(curr.key); curr = curr.prev; } return flattened.reverse(); } function addPath(prev, key) { return { prev: prev, key: key }; } /** * Constructs a ExecutionContext object from the arguments passed to * execute, which we will pass throughout the other execution methods. * * Throws a GraphQLError if a valid execution context cannot be created. */ function buildExecutionContext(schema, document, rootValue, contextValue, rawVariableValues, operationName) { var errors = []; var operation = void 0; var fragments = Object.create(null); document.definitions.forEach(function (definition) { switch (definition.kind) { case Kind.OPERATION_DEFINITION: if (!operationName && operation) { throw new _error.GraphQLError('Must provide operation name if query contains multiple operations.'); } if (!operationName || definition.name && definition.name.value === operationName) { operation = definition; } break; case Kind.FRAGMENT_DEFINITION: fragments[definition.name.value] = definition; break; default: throw new _error.GraphQLError('GraphQL cannot execute a request containing a ' + definition.kind + '.', [definition]); } }); if (!operation) { if (operationName) { throw new _error.GraphQLError('Unknown operation named "' + operationName + '".'); } else { throw new _error.GraphQLError('Must provide an operation.'); } } var variableValues = (0, _values.getVariableValues)(schema, operation.variableDefinitions || [], rawVariableValues || {}); return { schema: schema, fragments: fragments, rootValue: rootValue, contextValue: contextValue, operation: operation, variableValues: variableValues, errors: errors }; } /** * Implements the "Evaluating operations" section of the spec. */ function executeOperation(exeContext, operation, rootValue) { var type = getOperationRootType(exeContext.schema, operation); var fields = collectFields(exeContext, type, operation.selectionSet, Object.create(null), Object.create(null)); var path = undefined; if (operation.operation === 'mutation') { return executeFieldsSerially(exeContext, type, rootValue, path, fields); } return executeFields(exeContext, type, rootValue, path, fields); } /** * Extracts the root type of the operation from the schema. */ function getOperationRootType(schema, operation) { switch (operation.operation) { case 'query': return schema.getQueryType(); case 'mutation': var mutationType = schema.getMutationType(); if (!mutationType) { throw new _error.GraphQLError('Schema is not configured for mutations', [operation]); } return mutationType; case 'subscription': var subscriptionType = schema.getSubscriptionType(); if (!subscriptionType) { throw new _error.GraphQLError('Schema is not configured for subscriptions', [operation]); } return subscriptionType; default: throw new _error.GraphQLError('Can only execute queries, mutations and subscriptions', [operation]); } } /** * Implements the "Evaluating selection sets" section of the spec * for "write" mode. */ function executeFieldsSerially(exeContext, parentType, sourceValue, path, fields) { return Object.keys(fields).reduce(function (prevPromise, responseName) { return prevPromise.then(function (results) { var fieldNodes = fields[responseName]; var fieldPath = addPath(path, responseName); var result = resolveField(exeContext, parentType, sourceValue, fieldNodes, fieldPath); if (result === undefined) { return results; } if (isThenable(result)) { return result.then(function (resolvedResult) { results[responseName] = resolvedResult; return results; }); } results[responseName] = result; return results; }); }, Promise.resolve({})); } /** * Implements the "Evaluating selection sets" section of the spec * for "read" mode. */ function executeFields(exeContext, parentType, sourceValue, path, fields) { var containsPromise = false; var finalResults = Object.keys(fields).reduce(function (results, responseName) { var fieldNodes = fields[responseName]; var fieldPath = addPath(path, responseName); var result = resolveField(exeContext, parentType, sourceValue, fieldNodes, fieldPath); if (result === undefined) { return results; } results[responseName] = result; if (isThenable(result)) { containsPromise = true; } return results; }, Object.create(null)); // If there are no promises, we can just return the object if (!containsPromise) { return finalResults; } // Otherwise, results is a map from field name to the result // of resolving that field, which is possibly a promise. Return // a promise that will return this same map, but with any // promises replaced with the values they resolved to. return promiseForObject(finalResults); } /** * Given a selectionSet, adds all of the fields in that selection to * the passed in map of fields, and returns it at the end. * * CollectFields requires the "runtime type" of an object. For a field which * returns and Interface or Union type, the "runtime type" will be the actual * Object type returned by that field. */ function collectFields(exeContext, runtimeType, selectionSet, fields, visitedFragmentNames) { for (var i = 0; i < selectionSet.selections.length; i++) { var selection = selectionSet.selections[i]; switch (selection.kind) { case Kind.FIELD: if (!shouldIncludeNode(exeContext, selection.directives)) { continue; } var _name = getFieldEntryKey(selection); if (!fields[_name]) { fields[_name] = []; } fields[_name].push(selection); break; case Kind.INLINE_FRAGMENT: if (!shouldIncludeNode(exeContext, selection.directives) || !doesFragmentConditionMatch(exeContext, selection, runtimeType)) { continue; } collectFields(exeContext, runtimeType, selection.selectionSet, fields, visitedFragmentNames); break; case Kind.FRAGMENT_SPREAD: var fragName = selection.name.value; if (visitedFragmentNames[fragName] || !shouldIncludeNode(exeContext, selection.directives)) { continue; } visitedFragmentNames[fragName] = true; var fragment = exeContext.fragments[fragName]; if (!fragment || !doesFragmentConditionMatch(exeContext, fragment, runtimeType)) { continue; } collectFields(exeContext, runtimeType, fragment.selectionSet, fields, visitedFragmentNames); break; } } return fields; } /** * Determines if a field should be included based on the @include and @skip * directives, where @skip has higher precidence than @include. */ function shouldIncludeNode(exeContext, directives) { var skipNode = directives && (0, _find2.default)(directives, function (directive) { return directive.name.value === _directives.GraphQLSkipDirective.name; }); if (skipNode) { var _getArgumentValues = (0, _values.getArgumentValues)(_directives.GraphQLSkipDirective, skipNode, exeContext.variableValues), skipIf = _getArgumentValues.if; if (skipIf === true) { return false; } } var includeNode = directives && (0, _find2.default)(directives, function (directive) { return directive.name.value === _directives.GraphQLIncludeDirective.name; }); if (includeNode) { var _getArgumentValues2 = (0, _values.getArgumentValues)(_directives.GraphQLIncludeDirective, includeNode, exeContext.variableValues), includeIf = _getArgumentValues2.if; if (includeIf === false) { return false; } } return true; } /** * Determines if a fragment is applicable to the given type. */ function doesFragmentConditionMatch(exeContext, fragment, type) { var typeConditionNode = fragment.typeCondition; if (!typeConditionNode) { return true; } var conditionalType = (0, _typeFromAST.typeFromAST)(exeContext.schema, typeConditionNode); if (conditionalType === type) { return true; } if ((0, _definition.isAbstractType)(conditionalType)) { var abstractType = conditionalType; return exeContext.schema.isPossibleType(abstractType, type); } return false; } /** * This function transforms a JS object `{[key: string]: Promise}` into * a `Promise<{[key: string]: T}>` * * This is akin to bluebird's `Promise.props`, but implemented only using * `Promise.all` so it will work with any implementation of ES6 promises. */ function promiseForObject(object) { var keys = Object.keys(object); var valuesAndPromises = keys.map(function (name) { return object[name]; }); return Promise.all(valuesAndPromises).then(function (values) { return values.reduce(function (resolvedObject, value, i) { resolvedObject[keys[i]] = value; return resolvedObject; }, Object.create(null)); }); } /** * Implements the logic to compute the key of a given field's entry */ function getFieldEntryKey(node) { return node.alias ? node.alias.value : node.name.value; } /** * Resolves the field on the given source object. In particular, this * figures out the value that the field returns by calling its resolve function, * then calls completeValue to complete promises, serialize scalars, or execute * the sub-selection-set for objects. */ function resolveField(exeContext, parentType, source, fieldNodes, path) { var fieldNode = fieldNodes[0]; var fieldName = fieldNode.name.value; var fieldDef = getFieldDef(exeContext.schema, parentType, fieldName); if (!fieldDef) { return; } var returnType = fieldDef.type; var resolveFn = fieldDef.resolve || defaultFieldResolver; // The resolve function's optional third argument is a context value that // is provided to every resolve function within an execution. It is commonly // used to represent an authenticated user, or request-specific caches. var context = exeContext.contextValue; // The resolve function's optional fourth argument is a collection of // information about the current execution state. var info = { fieldName: fieldName, fieldNodes: fieldNodes, returnType: returnType, parentType: parentType, path: path, schema: exeContext.schema, fragments: exeContext.fragments, rootValue: exeContext.rootValue, operation: exeContext.operation, variableValues: exeContext.variableValues }; // Get the resolve function, regardless of if its result is normal // or abrupt (error). var result = resolveOrError(exeContext, fieldDef, fieldNode, resolveFn, source, context, info); return completeValueCatchingError(exeContext, returnType, fieldNodes, info, path, result); } // Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField` // function. Returns the result of resolveFn or the abrupt-return Error object. function resolveOrError(exeContext, fieldDef, fieldNode, resolveFn, source, context, info) { try { // Build a JS object of arguments from the field.arguments AST, using the // variables scope to fulfill any variable references. // TODO: find a way to memoize, in case this field is within a List type. var args = (0, _values.getArgumentValues)(fieldDef, fieldNode, exeContext.variableValues); return resolveFn(source, args, context, info); } catch (error) { // Sometimes a non-error is thrown, wrap it as an Error for a // consistent interface. return error instanceof Error ? error : new Error(error); } } // This is a small wrapper around completeValue which detects and logs errors // in the execution context. function completeValueCatchingError(exeContext, returnType, fieldNodes, info, path, result) { // If the field type is non-nullable, then it is resolved without any // protection from errors, however it still properly locates the error. if (returnType instanceof _definition.GraphQLNonNull) { return completeValueWithLocatedError(exeContext, returnType, fieldNodes, info, path, result); } // Otherwise, error protection is applied, logging the error and resolving // a null value for this field if one is encountered. try { var completed = completeValueWithLocatedError(exeContext, returnType, fieldNodes, info, path, result); if (isThenable(completed)) { // If `completeValueWithLocatedError` returned a rejected promise, log // the rejection error and resolve to null. // Note: we don't rely on a `catch` method, but we do expect "thenable" // to take a second callback for the error case. return completed.then(undefined, function (error) { exeContext.errors.push(error); return Promise.resolve(null); }); } return completed; } catch (error) { // If `completeValueWithLocatedError` returned abruptly (threw an error), // log the error and return null. exeContext.errors.push(error); return null; } } // This is a small wrapper around completeValue which annotates errors with // location information. function completeValueWithLocatedError(exeContext, returnType, fieldNodes, info, path, result) { try { var completed = completeValue(exeContext, returnType, fieldNodes, info, path, result); if (isThenable(completed)) { return completed.then(undefined, function (error) { return Promise.reject((0, _error.locatedError)(error, fieldNodes, responsePathAsArray(path))); }); } return completed; } catch (error) { throw (0, _error.locatedError)(error, fieldNodes, responsePathAsArray(path)); } } /** * Implements the instructions for completeValue as defined in the * "Field entries" section of the spec. * * If the field type is Non-Null, then this recursively completes the value * for the inner type. It throws a field error if that completion returns null, * as per the "Nullability" section of the spec. * * If the field type is a List, then this recursively completes the value * for the inner type on each item in the list. * * If the field type is a Scalar or Enum, ensures the completed value is a legal * value of the type by calling the `serialize` method of GraphQL type * definition. * * If the field is an abstract type, determine the runtime type of the value * and then complete based on that type * * Otherwise, the field type expects a sub-selection set, and will complete the * value by evaluating all sub-selections. */ function completeValue(exeContext, returnType, fieldNodes, info, path, result) { // If result is a Promise, apply-lift over completeValue. if (isThenable(result)) { return result.then(function (resolved) { return completeValue(exeContext, returnType, fieldNodes, info, path, resolved); }); } // If result is an Error, throw a located error. if (result instanceof Error) { throw result; } // If field type is NonNull, complete for inner type, and throw field error // if result is null. if (returnType instanceof _definition.GraphQLNonNull) { var completed = completeValue(exeContext, returnType.ofType, fieldNodes, info, path, result); if (completed === null) { throw new Error('Cannot return null for non-nullable field ' + info.parentType.name + '.' + info.fieldName + '.'); } return completed; } // If result value is null-ish (null, undefined, or NaN) then return null. if ((0, _isNullish2.default)(result)) { return null; } // If field type is List, complete each item in the list with the inner type if (returnType instanceof _definition.GraphQLList) { return completeListValue(exeContext, returnType, fieldNodes, info, path, result); } // If field type is a leaf type, Scalar or Enum, serialize to a valid value, // returning null if serialization is not possible. if (returnType instanceof _definition.GraphQLScalarType || returnType instanceof _definition.GraphQLEnumType) { return completeLeafValue(returnType, result); } // If field type is an abstract type, Interface or Union, determine the // runtime Object type and complete for that type. if (returnType instanceof _definition.GraphQLInterfaceType || returnType instanceof _definition.GraphQLUnionType) { return completeAbstractValue(exeContext, returnType, fieldNodes, info, path, result); } // If field type is Object, execute and complete all sub-selections. if (returnType instanceof _definition.GraphQLObjectType) { return completeObjectValue(exeContext, returnType, fieldNodes, info, path, result); } // Not reachable. All possible output types have been considered. throw new Error('Cannot complete value of unexpected type "' + String(returnType) + '".'); } /** * Complete a list value by completing each item in the list with the * inner type */ function completeListValue(exeContext, returnType, fieldNodes, info, path, result) { (0, _invariant2.default)((0, _iterall.isCollection)(result), 'Expected Iterable, but did not find one for field ' + info.parentType.name + '.' + info.fieldName + '.'); // This is specified as a simple map, however we're optimizing the path // where the list contains no Promises by avoiding creating another Promise. var itemType = returnType.ofType; var containsPromise = false; var completedResults = []; (0, _iterall.forEach)(result, function (item, index) { // No need to modify the info object containing the path, // since from here on it is not ever accessed by resolver functions. var fieldPath = addPath(path, index); var completedItem = completeValueCatchingError(exeContext, itemType, fieldNodes, info, fieldPath, item); if (!containsPromise && isThenable(completedItem)) { containsPromise = true; } completedResults.push(completedItem); }); return containsPromise ? Promise.all(completedResults) : completedResults; } /** * Complete a Scalar or Enum by serializing to a valid value, returning * null if serialization is not possible. */ function completeLeafValue(returnType, result) { (0, _invariant2.default)(returnType.serialize, 'Missing serialize method on type'); var serializedResult = returnType.serialize(result); if ((0, _isNullish2.default)(serializedResult)) { throw new Error('Expected a value of type "' + String(returnType) + '" but ' + ('received: ' + String(result))); } return serializedResult; } /** * Complete a value of an abstract type by determining the runtime object type * of that value, then complete the value for that type. */ function completeAbstractValue(exeContext, returnType, fieldNodes, info, path, result) { var runtimeType = returnType.resolveType ? returnType.resolveType(result, exeContext.contextValue, info) : defaultResolveTypeFn(result, exeContext.contextValue, info, returnType); if (isThenable(runtimeType)) { // Cast to Promise var runtimeTypePromise = runtimeType; return runtimeTypePromise.then(function (resolvedRuntimeType) { return completeObjectValue(exeContext, ensureValidRuntimeType(resolvedRuntimeType, exeContext, returnType, fieldNodes, info, result), fieldNodes, info, path, result); }); } return completeObjectValue(exeContext, ensureValidRuntimeType(runtimeType, exeContext, returnType, fieldNodes, info, result), fieldNodes, info, path, result); } function ensureValidRuntimeType(runtimeTypeOrName, exeContext, returnType, fieldNodes, info, result) { var runtimeType = typeof runtimeTypeOrName === 'string' ? exeContext.schema.getType(runtimeTypeOrName) : runtimeTypeOrName; if (!(runtimeType instanceof _definition.GraphQLObjectType)) { throw new _error.GraphQLError('Abstract type ' + returnType.name + ' must resolve to an Object type at ' + ('runtime for field ' + info.parentType.name + '.' + info.fieldName + ' with ') + ('value "' + String(result) + '", received "' + String(runtimeType) + '".'), fieldNodes); } if (!exeContext.schema.isPossibleType(returnType, runtimeType)) { throw new _error.GraphQLError('Runtime Object type "' + runtimeType.name + '" is not a possible type ' + ('for "' + returnType.name + '".'), fieldNodes); } return runtimeType; } /** * Complete an Object value by executing all sub-selections. */ function completeObjectValue(exeContext, returnType, fieldNodes, info, path, result) { // If there is an isTypeOf predicate function, call it with the // current result. If isTypeOf returns false, then raise an error rather // than continuing execution. if (returnType.isTypeOf) { var isTypeOf = returnType.isTypeOf(result, exeContext.contextValue, info); if (isThenable(isTypeOf)) { return isTypeOf.then(function (isTypeOfResult) { if (!isTypeOfResult) { throw invalidReturnTypeError(returnType, result, fieldNodes); } return collectAndExecuteSubfields(exeContext, returnType, fieldNodes, info, path, result); }); } if (!isTypeOf) { throw invalidReturnTypeError(returnType, result, fieldNodes); } } return collectAndExecuteSubfields(exeContext, returnType, fieldNodes, info, path, result); } function invalidReturnTypeError(returnType, result, fieldNodes) { return new _error.GraphQLError('Expected value of type "' + returnType.name + '" but got: ' + String(result) + '.', fieldNodes); } function collectAndExecuteSubfields(exeContext, returnType, fieldNodes, info, path, result) { // Collect sub-fields to execute to complete this value. var subFieldNodes = Object.create(null); var visitedFragmentNames = Object.create(null); for (var i = 0; i < fieldNodes.length; i++) { var selectionSet = fieldNodes[i].selectionSet; if (selectionSet) { subFieldNodes = collectFields(exeContext, returnType, selectionSet, subFieldNodes, visitedFragmentNames); } } return executeFields(exeContext, returnType, result, path, subFieldNodes); } /** * If a resolveType function is not given, then a default resolve behavior is * used which tests each possible type for the abstract type by calling * isTypeOf for the object being coerced, returning the first type that matches. */ function defaultResolveTypeFn(value, context, info, abstractType) { var possibleTypes = info.schema.getPossibleTypes(abstractType); var promisedIsTypeOfResults = []; for (var i = 0; i < possibleTypes.length; i++) { var type = possibleTypes[i]; if (type.isTypeOf) { var isTypeOfResult = type.isTypeOf(value, context, info); if (isThenable(isTypeOfResult)) { promisedIsTypeOfResults[i] = isTypeOfResult; } else if (isTypeOfResult) { return type; } } } if (promisedIsTypeOfResults.length) { return Promise.all(promisedIsTypeOfResults).then(function (isTypeOfResults) { for (var _i = 0; _i < isTypeOfResults.length; _i++) { if (isTypeOfResults[_i]) { return possibleTypes[_i]; } } }); } } /** * If a resolve function is not given, then a default resolve behavior is used * which takes the property of the source object of the same name as the field * and returns it as the result, or if it's a function, returns the result * of calling that function while passing along args and context. */ var defaultFieldResolver = exports.defaultFieldResolver = function defaultFieldResolver(source, args, context, info) { // ensure source is a value for which property access is acceptable. if (typeof source === 'object' || typeof source === 'function') { var property = source[info.fieldName]; if (typeof property === 'function') { return source[info.fieldName](args, context, info); } return property; } }; /** * Checks to see if this object acts like a Promise, i.e. has a "then" * function. */ function isThenable(value) { return typeof value === 'object' && value !== null && typeof value.then === 'function'; } /** * This method looks up the field on the given type defintion. * It has special casing for the two introspection fields, __schema * and __typename. __typename is special because it can always be * queried as a field, even in situations where no other fields * are allowed, like on a Union. __schema could get automatically * added to the query type, but that would require mutating type * definitions, which would cause issues. */ function getFieldDef(schema, parentType, fieldName) { if (fieldName === _introspection.SchemaMetaFieldDef.name && schema.getQueryType() === parentType) { return _introspection.SchemaMetaFieldDef; } else if (fieldName === _introspection.TypeMetaFieldDef.name && schema.getQueryType() === parentType) { return _introspection.TypeMetaFieldDef; } else if (fieldName === _introspection.TypeNameMetaFieldDef.name) { return _introspection.TypeNameMetaFieldDef; } return parentType.getFields()[fieldName]; } /***/ }), /* 31 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getVariableValues = getVariableValues; exports.getArgumentValues = getArgumentValues; var _iterall = __webpack_require__(20); var _error = __webpack_require__(0); var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _isNullish = __webpack_require__(6); var _isNullish2 = _interopRequireDefault(_isNullish); var _isInvalid = __webpack_require__(14); var _isInvalid2 = _interopRequireDefault(_isInvalid); var _keyMap = __webpack_require__(12); var _keyMap2 = _interopRequireDefault(_keyMap); var _typeFromAST = __webpack_require__(9); var _valueFromAST = __webpack_require__(16); var _isValidJSValue = __webpack_require__(33); var _isValidLiteralValue = __webpack_require__(18); var _kinds = __webpack_require__(2); var Kind = _interopRequireWildcard(_kinds); var _printer = __webpack_require__(4); var _definition = __webpack_require__(1); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Prepares an object map of variableValues of the correct type based on the * provided variable definitions and arbitrary input. If the input cannot be * parsed to match the variable definitions, a GraphQLError will be thrown. */ function getVariableValues(schema, varDefNodes, inputs) { var coercedValues = Object.create(null); for (var i = 0; i < varDefNodes.length; i++) { var varDefNode = varDefNodes[i]; var varName = varDefNode.variable.name.value; var varType = (0, _typeFromAST.typeFromAST)(schema, varDefNode.type); if (!(0, _definition.isInputType)(varType)) { throw new _error.GraphQLError('Variable "$' + varName + '" expected value of type ' + ('"' + (0, _printer.print)(varDefNode.type) + '" which cannot be used as an input type.'), [varDefNode.type]); } varType = varType; var value = inputs[varName]; if ((0, _isInvalid2.default)(value)) { var defaultValue = varDefNode.defaultValue; if (defaultValue) { coercedValues[varName] = (0, _valueFromAST.valueFromAST)(defaultValue, varType); } if (varType instanceof _definition.GraphQLNonNull) { throw new _error.GraphQLError('Variable "$' + varName + '" of required type ' + ('"' + String(varType) + '" was not provided.'), [varDefNode]); } } else { var errors = (0, _isValidJSValue.isValidJSValue)(value, varType); if (errors.length) { var message = errors ? '\n' + errors.join('\n') : ''; throw new _error.GraphQLError('Variable "$' + varName + '" got invalid value ' + (JSON.stringify(value) + '.' + message), [varDefNode]); } var coercedValue = coerceValue(varType, value); (0, _invariant2.default)(!(0, _isInvalid2.default)(coercedValue), 'Should have reported error.'); coercedValues[varName] = coercedValue; } } return coercedValues; } /** * Prepares an object map of argument values given a list of argument * definitions and list of argument AST nodes. */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function getArgumentValues(def, node, variableValues) { var argDefs = def.args; var argNodes = node.arguments; if (!argDefs || !argNodes) { return {}; } var coercedValues = Object.create(null); var argNodeMap = (0, _keyMap2.default)(argNodes, function (arg) { return arg.name.value; }); for (var i = 0; i < argDefs.length; i++) { var argDef = argDefs[i]; var name = argDef.name; var argType = argDef.type; var argumentNode = argNodeMap[name]; var defaultValue = argDef.defaultValue; if (!argumentNode) { if (!(0, _isInvalid2.default)(defaultValue)) { coercedValues[name] = defaultValue; } else if (argType instanceof _definition.GraphQLNonNull) { throw new _error.GraphQLError('Argument "' + name + '" of required type ' + ('"' + String(argType) + '" was not provided.'), [node]); } } else if (argumentNode.value.kind === Kind.VARIABLE) { var variableName = argumentNode.value.name.value; if (variableValues && !(0, _isInvalid2.default)(variableValues[variableName])) { // Note: this does not check that this variable value is correct. // This assumes that this query has been validated and the variable // usage here is of the correct type. coercedValues[name] = variableValues[variableName]; } else if (!(0, _isInvalid2.default)(defaultValue)) { coercedValues[name] = defaultValue; } else if (argType instanceof _definition.GraphQLNonNull) { throw new _error.GraphQLError('Argument "' + name + '" of required type "' + String(argType) + '" was ' + ('provided the variable "$' + variableName + '" which was not provided ') + 'a runtime value.', [argumentNode.value]); } } else { var valueNode = argumentNode.value; var coercedValue = (0, _valueFromAST.valueFromAST)(valueNode, argType, variableValues); if ((0, _isInvalid2.default)(coercedValue)) { var errors = (0, _isValidLiteralValue.isValidLiteralValue)(argType, valueNode); var message = errors ? '\n' + errors.join('\n') : ''; throw new _error.GraphQLError('Argument "' + name + '" got invalid value ' + (0, _printer.print)(valueNode) + '.' + message, [argumentNode.value]); } coercedValues[name] = coercedValue; } } return coercedValues; } /** * Given a type and any value, return a runtime value coerced to match the type. */ function coerceValue(type, value) { // Ensure flow knows that we treat function params as const. var _value = value; if ((0, _isInvalid2.default)(_value)) { return; // Intentionally return no value. } if (type instanceof _definition.GraphQLNonNull) { if (_value === null) { return; // Intentionally return no value. } return coerceValue(type.ofType, _value); } if (_value === null) { // Intentionally return the value null. return null; } if (type instanceof _definition.GraphQLList) { var itemType = type.ofType; if ((0, _iterall.isCollection)(_value)) { var coercedValues = []; var valueIter = (0, _iterall.createIterator)(_value); if (!valueIter) { return; // Intentionally return no value. } var step = void 0; while (!(step = valueIter.next()).done) { var itemValue = coerceValue(itemType, step.value); if ((0, _isInvalid2.default)(itemValue)) { return; // Intentionally return no value. } coercedValues.push(itemValue); } return coercedValues; } var coercedValue = coerceValue(itemType, _value); if ((0, _isInvalid2.default)(coercedValue)) { return; // Intentionally return no value. } return [coerceValue(itemType, _value)]; } if (type instanceof _definition.GraphQLInputObjectType) { if (typeof _value !== 'object') { return; // Intentionally return no value. } var coercedObj = Object.create(null); var fields = type.getFields(); var fieldNames = Object.keys(fields); for (var i = 0; i < fieldNames.length; i++) { var fieldName = fieldNames[i]; var field = fields[fieldName]; if ((0, _isInvalid2.default)(_value[fieldName])) { if (!(0, _isInvalid2.default)(field.defaultValue)) { coercedObj[fieldName] = field.defaultValue; } else if (field.type instanceof _definition.GraphQLNonNull) { return; // Intentionally return no value. } continue; } var fieldValue = coerceValue(field.type, _value[fieldName]); if ((0, _isInvalid2.default)(fieldValue)) { return; // Intentionally return no value. } coercedObj[fieldName] = fieldValue; } return coercedObj; } (0, _invariant2.default)(type instanceof _definition.GraphQLScalarType || type instanceof _definition.GraphQLEnumType, 'Must be input type'); var parsed = type.parseValue(_value); if ((0, _isNullish2.default)(parsed)) { // null or invalid values represent a failure to parse correctly, // in which case no value is returned. return; } return parsed; } /***/ }), /* 32 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildASTSchema = buildASTSchema; exports.getDescription = getDescription; exports.buildSchema = buildSchema; var _find = __webpack_require__(10); var _find2 = _interopRequireDefault(_find); var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _keyValMap = __webpack_require__(21); var _keyValMap2 = _interopRequireDefault(_keyValMap); var _valueFromAST = __webpack_require__(16); var _lexer = __webpack_require__(24); var _parser = __webpack_require__(17); var _values = __webpack_require__(31); var _kinds = __webpack_require__(2); var _schema = __webpack_require__(8); var _scalars = __webpack_require__(7); var _definition = __webpack_require__(1); var _directives = __webpack_require__(5); var _introspection = __webpack_require__(11); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function buildWrappedType(innerType, inputTypeNode) { if (inputTypeNode.kind === _kinds.LIST_TYPE) { return new _definition.GraphQLList(buildWrappedType(innerType, inputTypeNode.type)); } if (inputTypeNode.kind === _kinds.NON_NULL_TYPE) { var wrappedType = buildWrappedType(innerType, inputTypeNode.type); (0, _invariant2.default)(!(wrappedType instanceof _definition.GraphQLNonNull), 'No nesting nonnull.'); return new _definition.GraphQLNonNull(wrappedType); } return innerType; } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function getNamedTypeNode(typeNode) { var namedType = typeNode; while (namedType.kind === _kinds.LIST_TYPE || namedType.kind === _kinds.NON_NULL_TYPE) { namedType = namedType.type; } return namedType; } /** * This takes the ast of a schema document produced by the parse function in * src/language/parser.js. * * If no schema definition is provided, then it will look for types named Query * and Mutation. * * Given that AST it constructs a GraphQLSchema. The resulting schema * has no resolve methods, so execution will use default resolvers. */ function buildASTSchema(ast) { if (!ast || ast.kind !== _kinds.DOCUMENT) { throw new Error('Must provide a document ast.'); } var schemaDef = void 0; var typeDefs = []; var nodeMap = Object.create(null); var directiveDefs = []; for (var i = 0; i < ast.definitions.length; i++) { var d = ast.definitions[i]; switch (d.kind) { case _kinds.SCHEMA_DEFINITION: if (schemaDef) { throw new Error('Must provide only one schema definition.'); } schemaDef = d; break; case _kinds.SCALAR_TYPE_DEFINITION: case _kinds.OBJECT_TYPE_DEFINITION: case _kinds.INTERFACE_TYPE_DEFINITION: case _kinds.ENUM_TYPE_DEFINITION: case _kinds.UNION_TYPE_DEFINITION: case _kinds.INPUT_OBJECT_TYPE_DEFINITION: typeDefs.push(d); nodeMap[d.name.value] = d; break; case _kinds.DIRECTIVE_DEFINITION: directiveDefs.push(d); break; } } var queryTypeName = void 0; var mutationTypeName = void 0; var subscriptionTypeName = void 0; if (schemaDef) { schemaDef.operationTypes.forEach(function (operationType) { var typeName = operationType.type.name.value; if (operationType.operation === 'query') { if (queryTypeName) { throw new Error('Must provide only one query type in schema.'); } if (!nodeMap[typeName]) { throw new Error('Specified query type "' + typeName + '" not found in document.'); } queryTypeName = typeName; } else if (operationType.operation === 'mutation') { if (mutationTypeName) { throw new Error('Must provide only one mutation type in schema.'); } if (!nodeMap[typeName]) { throw new Error('Specified mutation type "' + typeName + '" not found in document.'); } mutationTypeName = typeName; } else if (operationType.operation === 'subscription') { if (subscriptionTypeName) { throw new Error('Must provide only one subscription type in schema.'); } if (!nodeMap[typeName]) { throw new Error('Specified subscription type "' + typeName + '" not found in document.'); } subscriptionTypeName = typeName; } }); } else { if (nodeMap.Query) { queryTypeName = 'Query'; } if (nodeMap.Mutation) { mutationTypeName = 'Mutation'; } if (nodeMap.Subscription) { subscriptionTypeName = 'Subscription'; } } if (!queryTypeName) { throw new Error('Must provide schema definition with query type or a type named Query.'); } var innerTypeMap = { String: _scalars.GraphQLString, Int: _scalars.GraphQLInt, Float: _scalars.GraphQLFloat, Boolean: _scalars.GraphQLBoolean, ID: _scalars.GraphQLID, __Schema: _introspection.__Schema, __Directive: _introspection.__Directive, __DirectiveLocation: _introspection.__DirectiveLocation, __Type: _introspection.__Type, __Field: _introspection.__Field, __InputValue: _introspection.__InputValue, __EnumValue: _introspection.__EnumValue, __TypeKind: _introspection.__TypeKind }; var types = typeDefs.map(function (def) { return typeDefNamed(def.name.value); }); var directives = directiveDefs.map(getDirective); // If specified directives were not explicitly declared, add them. if (!directives.some(function (directive) { return directive.name === 'skip'; })) { directives.push(_directives.GraphQLSkipDirective); } if (!directives.some(function (directive) { return directive.name === 'include'; })) { directives.push(_directives.GraphQLIncludeDirective); } if (!directives.some(function (directive) { return directive.name === 'deprecated'; })) { directives.push(_directives.GraphQLDeprecatedDirective); } return new _schema.GraphQLSchema({ query: getObjectType(nodeMap[queryTypeName]), mutation: mutationTypeName ? getObjectType(nodeMap[mutationTypeName]) : null, subscription: subscriptionTypeName ? getObjectType(nodeMap[subscriptionTypeName]) : null, types: types, directives: directives }); function getDirective(directiveNode) { return new _directives.GraphQLDirective({ name: directiveNode.name.value, description: getDescription(directiveNode), locations: directiveNode.locations.map(function (node) { return node.value; }), args: directiveNode.arguments && makeInputValues(directiveNode.arguments) }); } function getObjectType(typeNode) { var type = typeDefNamed(typeNode.name.value); (0, _invariant2.default)(type instanceof _definition.GraphQLObjectType, 'AST must provide object type.'); return type; } function produceType(typeNode) { var typeName = getNamedTypeNode(typeNode).name.value; var typeDef = typeDefNamed(typeName); return buildWrappedType(typeDef, typeNode); } function produceInputType(typeNode) { var type = produceType(typeNode); (0, _invariant2.default)((0, _definition.isInputType)(type), 'Expected Input type.'); return type; } function produceOutputType(typeNode) { var type = produceType(typeNode); (0, _invariant2.default)((0, _definition.isOutputType)(type), 'Expected Output type.'); return type; } function produceObjectType(typeNode) { var type = produceType(typeNode); (0, _invariant2.default)(type instanceof _definition.GraphQLObjectType, 'Expected Object type.'); return type; } function produceInterfaceType(typeNode) { var type = produceType(typeNode); (0, _invariant2.default)(type instanceof _definition.GraphQLInterfaceType, 'Expected Interface type.'); return type; } function typeDefNamed(typeName) { if (innerTypeMap[typeName]) { return innerTypeMap[typeName]; } if (!nodeMap[typeName]) { throw new Error('Type "' + typeName + '" not found in document.'); } var innerTypeDef = makeSchemaDef(nodeMap[typeName]); if (!innerTypeDef) { throw new Error('Nothing constructed for "' + typeName + '".'); } innerTypeMap[typeName] = innerTypeDef; return innerTypeDef; } function makeSchemaDef(def) { if (!def) { throw new Error('def must be defined'); } switch (def.kind) { case _kinds.OBJECT_TYPE_DEFINITION: return makeTypeDef(def); case _kinds.INTERFACE_TYPE_DEFINITION: return makeInterfaceDef(def); case _kinds.ENUM_TYPE_DEFINITION: return makeEnumDef(def); case _kinds.UNION_TYPE_DEFINITION: return makeUnionDef(def); case _kinds.SCALAR_TYPE_DEFINITION: return makeScalarDef(def); case _kinds.INPUT_OBJECT_TYPE_DEFINITION: return makeInputObjectDef(def); default: throw new Error('Type kind "' + def.kind + '" not supported.'); } } function makeTypeDef(def) { var typeName = def.name.value; return new _definition.GraphQLObjectType({ name: typeName, description: getDescription(def), fields: function fields() { return makeFieldDefMap(def); }, interfaces: function interfaces() { return makeImplementedInterfaces(def); } }); } function makeFieldDefMap(def) { return (0, _keyValMap2.default)(def.fields, function (field) { return field.name.value; }, function (field) { return { type: produceOutputType(field.type), description: getDescription(field), args: makeInputValues(field.arguments), deprecationReason: getDeprecationReason(field.directives) }; }); } function makeImplementedInterfaces(def) { return def.interfaces && def.interfaces.map(function (iface) { return produceInterfaceType(iface); }); } function makeInputValues(values) { return (0, _keyValMap2.default)(values, function (value) { return value.name.value; }, function (value) { var type = produceInputType(value.type); return { type: type, description: getDescription(value), defaultValue: (0, _valueFromAST.valueFromAST)(value.defaultValue, type) }; }); } function makeInterfaceDef(def) { var typeName = def.name.value; return new _definition.GraphQLInterfaceType({ name: typeName, description: getDescription(def), fields: function fields() { return makeFieldDefMap(def); }, resolveType: cannotExecuteSchema }); } function makeEnumDef(def) { var enumType = new _definition.GraphQLEnumType({ name: def.name.value, description: getDescription(def), values: (0, _keyValMap2.default)(def.values, function (enumValue) { return enumValue.name.value; }, function (enumValue) { return { description: getDescription(enumValue), deprecationReason: getDeprecationReason(enumValue.directives) }; }) }); return enumType; } function makeUnionDef(def) { return new _definition.GraphQLUnionType({ name: def.name.value, description: getDescription(def), types: def.types.map(function (t) { return produceObjectType(t); }), resolveType: cannotExecuteSchema }); } function makeScalarDef(def) { return new _definition.GraphQLScalarType({ name: def.name.value, description: getDescription(def), serialize: function serialize() { return null; }, // Note: validation calls the parse functions to determine if a // literal value is correct. Returning null would cause use of custom // scalars to always fail validation. Returning false causes them to // always pass validation. parseValue: function parseValue() { return false; }, parseLiteral: function parseLiteral() { return false; } }); } function makeInputObjectDef(def) { return new _definition.GraphQLInputObjectType({ name: def.name.value, description: getDescription(def), fields: function fields() { return makeInputValues(def.fields); } }); } } function getDeprecationReason(directives) { var deprecatedAST = directives && (0, _find2.default)(directives, function (directive) { return directive.name.value === _directives.GraphQLDeprecatedDirective.name; }); if (!deprecatedAST) { return; } var _getArgumentValues = (0, _values.getArgumentValues)(_directives.GraphQLDeprecatedDirective, deprecatedAST), reason = _getArgumentValues.reason; return reason; } /** * Given an ast node, returns its string description based on a contiguous * block full-line of comments preceding it. */ function getDescription(node) { var loc = node.loc; if (!loc) { return; } var comments = []; var minSpaces = void 0; var token = loc.startToken.prev; while (token && token.kind === _lexer.TokenKind.COMMENT && token.next && token.prev && token.line + 1 === token.next.line && token.line !== token.prev.line) { var value = String(token.value); var spaces = leadingSpaces(value); if (minSpaces === undefined || spaces < minSpaces) { minSpaces = spaces; } comments.push(value); token = token.prev; } return comments.reverse().map(function (comment) { return comment.slice(minSpaces); }).join('\n'); } /** * A helper function to build a GraphQLSchema directly from a source * document. */ function buildSchema(source) { return buildASTSchema((0, _parser.parse)(source)); } // Count the number of spaces on the starting side of a string. function leadingSpaces(str) { var i = 0; for (; i < str.length; i++) { if (str[i] !== ' ') { break; } } return i; } function cannotExecuteSchema() { throw new Error('Generated Schema cannot use Interface or Union types for execution.'); } /***/ }), /* 33 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isValidJSValue = isValidJSValue; var _iterall = __webpack_require__(20); var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _isNullish = __webpack_require__(6); var _isNullish2 = _interopRequireDefault(_isNullish); var _definition = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Given a JavaScript value and a GraphQL type, determine if the value will be * accepted for that type. This is primarily useful for validating the * runtime values of query variables. */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function isValidJSValue(value, type) { // A value must be provided if the type is non-null. if (type instanceof _definition.GraphQLNonNull) { if ((0, _isNullish2.default)(value)) { return ['Expected "' + String(type) + '", found null.']; } return isValidJSValue(value, type.ofType); } if ((0, _isNullish2.default)(value)) { return []; } // Lists accept a non-list value as a list of one. if (type instanceof _definition.GraphQLList) { var _ret = function () { var itemType = type.ofType; if ((0, _iterall.isCollection)(value)) { var _ret2 = function () { var errors = []; (0, _iterall.forEach)(value, function (item, index) { errors.push.apply(errors, isValidJSValue(item, itemType).map(function (error) { return 'In element #' + index + ': ' + error; })); }); return { v: { v: errors } }; }(); if (typeof _ret2 === "object") return _ret2.v; } return { v: isValidJSValue(value, itemType) }; }(); if (typeof _ret === "object") return _ret.v; } // Input objects check each defined field. if (type instanceof _definition.GraphQLInputObjectType) { var _ret3 = function () { if (typeof value !== 'object' || value === null) { return { v: ['Expected "' + type.name + '", found not an object.'] }; } var fields = type.getFields(); var errors = []; // Ensure every provided field is defined. Object.keys(value).forEach(function (providedField) { if (!fields[providedField]) { errors.push('In field "' + providedField + '": Unknown field.'); } }); // Ensure every defined field is valid. Object.keys(fields).forEach(function (fieldName) { var newErrors = isValidJSValue(value[fieldName], fields[fieldName].type); errors.push.apply(errors, newErrors.map(function (error) { return 'In field "' + fieldName + '": ' + error; })); }); return { v: errors }; }(); if (typeof _ret3 === "object") return _ret3.v; } (0, _invariant2.default)(type instanceof _definition.GraphQLScalarType || type instanceof _definition.GraphQLEnumType, 'Must be input type'); // Scalar/Enum input checks to ensure the type can parse the value to // a non-null value. try { var parseResult = type.parseValue(value); if ((0, _isNullish2.default)(parseResult)) { return ['Expected type "' + type.name + '", found ' + JSON.stringify(value) + '.']; } } catch (error) { return ['Expected type "' + type.name + '", found ' + JSON.stringify(value) + ': ' + error.message]; } return []; } /***/ }), /* 34 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.specifiedRules = undefined; var _UniqueOperationNames = __webpack_require__(77); var _LoneAnonymousOperation = __webpack_require__(64); var _KnownTypeNames = __webpack_require__(63); var _FragmentsOnCompositeTypes = __webpack_require__(59); var _VariablesAreInputTypes = __webpack_require__(79); var _ScalarLeafs = __webpack_require__(72); var _FieldsOnCorrectType = __webpack_require__(58); var _UniqueFragmentNames = __webpack_require__(75); var _KnownFragmentNames = __webpack_require__(62); var _NoUnusedFragments = __webpack_require__(67); var _PossibleFragmentSpreads = __webpack_require__(70); var _NoFragmentCycles = __webpack_require__(65); var _UniqueVariableNames = __webpack_require__(78); var _NoUndefinedVariables = __webpack_require__(66); var _NoUnusedVariables = __webpack_require__(68); var _KnownDirectives = __webpack_require__(61); var _UniqueDirectivesPerLocation = __webpack_require__(74); var _KnownArgumentNames = __webpack_require__(60); var _UniqueArgumentNames = __webpack_require__(73); var _ArgumentsOfCorrectType = __webpack_require__(56); var _ProvidedNonNullArguments = __webpack_require__(71); var _DefaultValuesOfCorrectType = __webpack_require__(57); var _VariablesInAllowedPosition = __webpack_require__(80); var _OverlappingFieldsCanBeMerged = __webpack_require__(69); var _UniqueInputFieldNames = __webpack_require__(76); /** * This set includes all validation rules defined by the GraphQL spec. */ // Spec Section: "Field Selection Merging" // Spec Section: "Variable Default Values Are Correctly Typed" // Spec Section: "Argument Values Type Correctness" // Spec Section: "Argument Names" // Spec Section: "Directives Are Defined" // Spec Section: "All Variable Used Defined" // Spec Section: "Fragments must not form cycles" // Spec Section: "Fragments must be used" // Spec Section: "Fragment Name Uniqueness" // Spec Section: "Leaf Field Selections" // Spec Section: "Fragments on Composite Types" // Spec Section: "Lone Anonymous Operation" var specifiedRules = exports.specifiedRules = [_UniqueOperationNames.UniqueOperationNames, _LoneAnonymousOperation.LoneAnonymousOperation, _KnownTypeNames.KnownTypeNames, _FragmentsOnCompositeTypes.FragmentsOnCompositeTypes, _VariablesAreInputTypes.VariablesAreInputTypes, _ScalarLeafs.ScalarLeafs, _FieldsOnCorrectType.FieldsOnCorrectType, _UniqueFragmentNames.UniqueFragmentNames, _KnownFragmentNames.KnownFragmentNames, _NoUnusedFragments.NoUnusedFragments, _PossibleFragmentSpreads.PossibleFragmentSpreads, _NoFragmentCycles.NoFragmentCycles, _UniqueVariableNames.UniqueVariableNames, _NoUndefinedVariables.NoUndefinedVariables, _NoUnusedVariables.NoUnusedVariables, _KnownDirectives.KnownDirectives, _UniqueDirectivesPerLocation.UniqueDirectivesPerLocation, _KnownArgumentNames.KnownArgumentNames, _UniqueArgumentNames.UniqueArgumentNames, _ArgumentsOfCorrectType.ArgumentsOfCorrectType, _ProvidedNonNullArguments.ProvidedNonNullArguments, _DefaultValuesOfCorrectType.DefaultValuesOfCorrectType, _VariablesInAllowedPosition.VariablesInAllowedPosition, _OverlappingFieldsCanBeMerged.OverlappingFieldsCanBeMerged, _UniqueInputFieldNames.UniqueInputFieldNames]; // Spec Section: "Input Object Field Uniqueness" // Spec Section: "All Variable Usages Are Allowed" // Spec Section: "Argument Optionality" // Spec Section: "Argument Uniqueness" // Spec Section: "Directives Are Unique Per Location" // Spec Section: "All Variables Used" // Spec Section: "Variable Uniqueness" // Spec Section: "Fragment spread is possible" // Spec Section: "Fragment spread target defined" // Spec Section: "Field Selections on Objects, Interfaces, and Unions Types" // Spec Section: "Variables are Input Types" // Spec Section: "Fragment Spread Type Existence" /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ // Spec Section: "Operation Name Uniqueness" /***/ }), /* 35 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ValidationContext = undefined; exports.validate = validate; exports.visitUsingRules = visitUsingRules; var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _error = __webpack_require__(0); var _visitor = __webpack_require__(15); var _kinds = __webpack_require__(2); var Kind = _interopRequireWildcard(_kinds); var _schema = __webpack_require__(8); var _TypeInfo = __webpack_require__(27); var _specifiedRules = __webpack_require__(34); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /** * Implements the "Validation" section of the spec. * * Validation runs synchronously, returning an array of encountered errors, or * an empty array if no errors were encountered and the document is valid. * * A list of specific validation rules may be provided. If not provided, the * default list of rules defined by the GraphQL specification will be used. * * Each validation rules is a function which returns a visitor * (see the language/visitor API). Visitor methods are expected to return * GraphQLErrors, or Arrays of GraphQLErrors when invalid. */ function validate(schema, ast, rules) { (0, _invariant2.default)(schema, 'Must provide schema'); (0, _invariant2.default)(ast, 'Must provide document'); (0, _invariant2.default)(schema instanceof _schema.GraphQLSchema, 'Schema must be an instance of GraphQLSchema. Also ensure that there are ' + 'not multiple versions of GraphQL installed in your node_modules directory.'); var typeInfo = new _TypeInfo.TypeInfo(schema); return visitUsingRules(schema, typeInfo, ast, rules || _specifiedRules.specifiedRules); } /** * This uses a specialized visitor which runs multiple visitors in parallel, * while maintaining the visitor skip and break API. * * @internal */ function visitUsingRules(schema, typeInfo, documentAST, rules) { var context = new ValidationContext(schema, documentAST, typeInfo); var visitors = rules.map(function (rule) { return rule(context); }); // Visit the whole document with each instance of all provided rules. (0, _visitor.visit)(documentAST, (0, _visitor.visitWithTypeInfo)(typeInfo, (0, _visitor.visitInParallel)(visitors))); return context.getErrors(); } /** * An instance of this class is passed as the "this" context to all validators, * allowing access to commonly useful contextual information from within a * validation rule. */ var ValidationContext = exports.ValidationContext = function () { function ValidationContext(schema, ast, typeInfo) { _classCallCheck(this, ValidationContext); this._schema = schema; this._ast = ast; this._typeInfo = typeInfo; this._errors = []; this._fragmentSpreads = new Map(); this._recursivelyReferencedFragments = new Map(); this._variableUsages = new Map(); this._recursiveVariableUsages = new Map(); } ValidationContext.prototype.reportError = function reportError(error) { this._errors.push(error); }; ValidationContext.prototype.getErrors = function getErrors() { return this._errors; }; ValidationContext.prototype.getSchema = function getSchema() { return this._schema; }; ValidationContext.prototype.getDocument = function getDocument() { return this._ast; }; ValidationContext.prototype.getFragment = function getFragment(name) { var fragments = this._fragments; if (!fragments) { this._fragments = fragments = this.getDocument().definitions.reduce(function (frags, statement) { if (statement.kind === Kind.FRAGMENT_DEFINITION) { frags[statement.name.value] = statement; } return frags; }, {}); } return fragments[name]; }; ValidationContext.prototype.getFragmentSpreads = function getFragmentSpreads(node) { var spreads = this._fragmentSpreads.get(node); if (!spreads) { spreads = []; var setsToVisit = [node]; while (setsToVisit.length !== 0) { var set = setsToVisit.pop(); for (var i = 0; i < set.selections.length; i++) { var selection = set.selections[i]; if (selection.kind === Kind.FRAGMENT_SPREAD) { spreads.push(selection); } else if (selection.selectionSet) { setsToVisit.push(selection.selectionSet); } } } this._fragmentSpreads.set(node, spreads); } return spreads; }; ValidationContext.prototype.getRecursivelyReferencedFragments = function getRecursivelyReferencedFragments(operation) { var fragments = this._recursivelyReferencedFragments.get(operation); if (!fragments) { fragments = []; var collectedNames = Object.create(null); var nodesToVisit = [operation.selectionSet]; while (nodesToVisit.length !== 0) { var _node = nodesToVisit.pop(); var spreads = this.getFragmentSpreads(_node); for (var i = 0; i < spreads.length; i++) { var fragName = spreads[i].name.value; if (collectedNames[fragName] !== true) { collectedNames[fragName] = true; var fragment = this.getFragment(fragName); if (fragment) { fragments.push(fragment); nodesToVisit.push(fragment.selectionSet); } } } } this._recursivelyReferencedFragments.set(operation, fragments); } return fragments; }; ValidationContext.prototype.getVariableUsages = function getVariableUsages(node) { var _this = this; var usages = this._variableUsages.get(node); if (!usages) { (function () { var newUsages = []; var typeInfo = new _TypeInfo.TypeInfo(_this._schema); (0, _visitor.visit)(node, (0, _visitor.visitWithTypeInfo)(typeInfo, { VariableDefinition: function VariableDefinition() { return false; }, Variable: function Variable(variable) { newUsages.push({ node: variable, type: typeInfo.getInputType() }); } })); usages = newUsages; _this._variableUsages.set(node, usages); })(); } return usages; }; ValidationContext.prototype.getRecursiveVariableUsages = function getRecursiveVariableUsages(operation) { var usages = this._recursiveVariableUsages.get(operation); if (!usages) { usages = this.getVariableUsages(operation); var fragments = this.getRecursivelyReferencedFragments(operation); for (var i = 0; i < fragments.length; i++) { Array.prototype.push.apply(usages, this.getVariableUsages(fragments[i])); } this._recursiveVariableUsages.set(operation, usages); } return usages; }; ValidationContext.prototype.getType = function getType() { return this._typeInfo.getType(); }; ValidationContext.prototype.getParentType = function getParentType() { return this._typeInfo.getParentType(); }; ValidationContext.prototype.getInputType = function getInputType() { return this._typeInfo.getInputType(); }; ValidationContext.prototype.getFieldDef = function getFieldDef() { return this._typeInfo.getFieldDef(); }; ValidationContext.prototype.getDirective = function getDirective() { return this._typeInfo.getDirective(); }; ValidationContext.prototype.getArgument = function getArgument() { return this._typeInfo.getArgument(); }; return ValidationContext; }(); /***/ }), /* 36 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _graphql = __webpack_require__(42); Object.defineProperty(exports, 'graphql', { enumerable: true, get: function get() { return _graphql.graphql; } }); var _type = __webpack_require__(44); Object.defineProperty(exports, 'GraphQLSchema', { enumerable: true, get: function get() { return _type.GraphQLSchema; } }); Object.defineProperty(exports, 'GraphQLScalarType', { enumerable: true, get: function get() { return _type.GraphQLScalarType; } }); Object.defineProperty(exports, 'GraphQLObjectType', { enumerable: true, get: function get() { return _type.GraphQLObjectType; } }); Object.defineProperty(exports, 'GraphQLInterfaceType', { enumerable: true, get: function get() { return _type.GraphQLInterfaceType; } }); Object.defineProperty(exports, 'GraphQLUnionType', { enumerable: true, get: function get() { return _type.GraphQLUnionType; } }); Object.defineProperty(exports, 'GraphQLEnumType', { enumerable: true, get: function get() { return _type.GraphQLEnumType; } }); Object.defineProperty(exports, 'GraphQLInputObjectType', { enumerable: true, get: function get() { return _type.GraphQLInputObjectType; } }); Object.defineProperty(exports, 'GraphQLList', { enumerable: true, get: function get() { return _type.GraphQLList; } }); Object.defineProperty(exports, 'GraphQLNonNull', { enumerable: true, get: function get() { return _type.GraphQLNonNull; } }); Object.defineProperty(exports, 'GraphQLDirective', { enumerable: true, get: function get() { return _type.GraphQLDirective; } }); Object.defineProperty(exports, 'TypeKind', { enumerable: true, get: function get() { return _type.TypeKind; } }); Object.defineProperty(exports, 'DirectiveLocation', { enumerable: true, get: function get() { return _type.DirectiveLocation; } }); Object.defineProperty(exports, 'GraphQLInt', { enumerable: true, get: function get() { return _type.GraphQLInt; } }); Object.defineProperty(exports, 'GraphQLFloat', { enumerable: true, get: function get() { return _type.GraphQLFloat; } }); Object.defineProperty(exports, 'GraphQLString', { enumerable: true, get: function get() { return _type.GraphQLString; } }); Object.defineProperty(exports, 'GraphQLBoolean', { enumerable: true, get: function get() { return _type.GraphQLBoolean; } }); Object.defineProperty(exports, 'GraphQLID', { enumerable: true, get: function get() { return _type.GraphQLID; } }); Object.defineProperty(exports, 'specifiedDirectives', { enumerable: true, get: function get() { return _type.specifiedDirectives; } }); Object.defineProperty(exports, 'GraphQLIncludeDirective', { enumerable: true, get: function get() { return _type.GraphQLIncludeDirective; } }); Object.defineProperty(exports, 'GraphQLSkipDirective', { enumerable: true, get: function get() { return _type.GraphQLSkipDirective; } }); Object.defineProperty(exports, 'GraphQLDeprecatedDirective', { enumerable: true, get: function get() { return _type.GraphQLDeprecatedDirective; } }); Object.defineProperty(exports, 'DEFAULT_DEPRECATION_REASON', { enumerable: true, get: function get() { return _type.DEFAULT_DEPRECATION_REASON; } }); Object.defineProperty(exports, 'SchemaMetaFieldDef', { enumerable: true, get: function get() { return _type.SchemaMetaFieldDef; } }); Object.defineProperty(exports, 'TypeMetaFieldDef', { enumerable: true, get: function get() { return _type.TypeMetaFieldDef; } }); Object.defineProperty(exports, 'TypeNameMetaFieldDef', { enumerable: true, get: function get() { return _type.TypeNameMetaFieldDef; } }); Object.defineProperty(exports, '__Schema', { enumerable: true, get: function get() { return _type.__Schema; } }); Object.defineProperty(exports, '__Directive', { enumerable: true, get: function get() { return _type.__Directive; } }); Object.defineProperty(exports, '__DirectiveLocation', { enumerable: true, get: function get() { return _type.__DirectiveLocation; } }); Object.defineProperty(exports, '__Type', { enumerable: true, get: function get() { return _type.__Type; } }); Object.defineProperty(exports, '__Field', { enumerable: true, get: function get() { return _type.__Field; } }); Object.defineProperty(exports, '__InputValue', { enumerable: true, get: function get() { return _type.__InputValue; } }); Object.defineProperty(exports, '__EnumValue', { enumerable: true, get: function get() { return _type.__EnumValue; } }); Object.defineProperty(exports, '__TypeKind', { enumerable: true, get: function get() { return _type.__TypeKind; } }); Object.defineProperty(exports, 'isType', { enumerable: true, get: function get() { return _type.isType; } }); Object.defineProperty(exports, 'isInputType', { enumerable: true, get: function get() { return _type.isInputType; } }); Object.defineProperty(exports, 'isOutputType', { enumerable: true, get: function get() { return _type.isOutputType; } }); Object.defineProperty(exports, 'isLeafType', { enumerable: true, get: function get() { return _type.isLeafType; } }); Object.defineProperty(exports, 'isCompositeType', { enumerable: true, get: function get() { return _type.isCompositeType; } }); Object.defineProperty(exports, 'isAbstractType', { enumerable: true, get: function get() { return _type.isAbstractType; } }); Object.defineProperty(exports, 'isNamedType', { enumerable: true, get: function get() { return _type.isNamedType; } }); Object.defineProperty(exports, 'assertType', { enumerable: true, get: function get() { return _type.assertType; } }); Object.defineProperty(exports, 'assertInputType', { enumerable: true, get: function get() { return _type.assertInputType; } }); Object.defineProperty(exports, 'assertOutputType', { enumerable: true, get: function get() { return _type.assertOutputType; } }); Object.defineProperty(exports, 'assertLeafType', { enumerable: true, get: function get() { return _type.assertLeafType; } }); Object.defineProperty(exports, 'assertCompositeType', { enumerable: true, get: function get() { return _type.assertCompositeType; } }); Object.defineProperty(exports, 'assertAbstractType', { enumerable: true, get: function get() { return _type.assertAbstractType; } }); Object.defineProperty(exports, 'assertNamedType', { enumerable: true, get: function get() { return _type.assertNamedType; } }); Object.defineProperty(exports, 'getNullableType', { enumerable: true, get: function get() { return _type.getNullableType; } }); Object.defineProperty(exports, 'getNamedType', { enumerable: true, get: function get() { return _type.getNamedType; } }); var _language = __webpack_require__(43); Object.defineProperty(exports, 'Source', { enumerable: true, get: function get() { return _language.Source; } }); Object.defineProperty(exports, 'getLocation', { enumerable: true, get: function get() { return _language.getLocation; } }); Object.defineProperty(exports, 'parse', { enumerable: true, get: function get() { return _language.parse; } }); Object.defineProperty(exports, 'parseValue', { enumerable: true, get: function get() { return _language.parseValue; } }); Object.defineProperty(exports, 'parseType', { enumerable: true, get: function get() { return _language.parseType; } }); Object.defineProperty(exports, 'print', { enumerable: true, get: function get() { return _language.print; } }); Object.defineProperty(exports, 'visit', { enumerable: true, get: function get() { return _language.visit; } }); Object.defineProperty(exports, 'visitInParallel', { enumerable: true, get: function get() { return _language.visitInParallel; } }); Object.defineProperty(exports, 'visitWithTypeInfo', { enumerable: true, get: function get() { return _language.visitWithTypeInfo; } }); Object.defineProperty(exports, 'Kind', { enumerable: true, get: function get() { return _language.Kind; } }); Object.defineProperty(exports, 'TokenKind', { enumerable: true, get: function get() { return _language.TokenKind; } }); Object.defineProperty(exports, 'BREAK', { enumerable: true, get: function get() { return _language.BREAK; } }); var _execution = __webpack_require__(41); Object.defineProperty(exports, 'execute', { enumerable: true, get: function get() { return _execution.execute; } }); Object.defineProperty(exports, 'defaultFieldResolver', { enumerable: true, get: function get() { return _execution.defaultFieldResolver; } }); Object.defineProperty(exports, 'responsePathAsArray', { enumerable: true, get: function get() { return _execution.responsePathAsArray; } }); var _validation = __webpack_require__(55); Object.defineProperty(exports, 'validate', { enumerable: true, get: function get() { return _validation.validate; } }); Object.defineProperty(exports, 'ValidationContext', { enumerable: true, get: function get() { return _validation.ValidationContext; } }); Object.defineProperty(exports, 'specifiedRules', { enumerable: true, get: function get() { return _validation.specifiedRules; } }); var _error = __webpack_require__(0); Object.defineProperty(exports, 'GraphQLError', { enumerable: true, get: function get() { return _error.GraphQLError; } }); Object.defineProperty(exports, 'formatError', { enumerable: true, get: function get() { return _error.formatError; } }); var _utilities = __webpack_require__(51); Object.defineProperty(exports, 'introspectionQuery', { enumerable: true, get: function get() { return _utilities.introspectionQuery; } }); Object.defineProperty(exports, 'getOperationAST', { enumerable: true, get: function get() { return _utilities.getOperationAST; } }); Object.defineProperty(exports, 'buildClientSchema', { enumerable: true, get: function get() { return _utilities.buildClientSchema; } }); Object.defineProperty(exports, 'buildASTSchema', { enumerable: true, get: function get() { return _utilities.buildASTSchema; } }); Object.defineProperty(exports, 'buildSchema', { enumerable: true, get: function get() { return _utilities.buildSchema; } }); Object.defineProperty(exports, 'extendSchema', { enumerable: true, get: function get() { return _utilities.extendSchema; } }); Object.defineProperty(exports, 'printSchema', { enumerable: true, get: function get() { return _utilities.printSchema; } }); Object.defineProperty(exports, 'printType', { enumerable: true, get: function get() { return _utilities.printType; } }); Object.defineProperty(exports, 'typeFromAST', { enumerable: true, get: function get() { return _utilities.typeFromAST; } }); Object.defineProperty(exports, 'valueFromAST', { enumerable: true, get: function get() { return _utilities.valueFromAST; } }); Object.defineProperty(exports, 'astFromValue', { enumerable: true, get: function get() { return _utilities.astFromValue; } }); Object.defineProperty(exports, 'TypeInfo', { enumerable: true, get: function get() { return _utilities.TypeInfo; } }); Object.defineProperty(exports, 'isValidJSValue', { enumerable: true, get: function get() { return _utilities.isValidJSValue; } }); Object.defineProperty(exports, 'isValidLiteralValue', { enumerable: true, get: function get() { return _utilities.isValidLiteralValue; } }); Object.defineProperty(exports, 'concatAST', { enumerable: true, get: function get() { return _utilities.concatAST; } }); Object.defineProperty(exports, 'separateOperations', { enumerable: true, get: function get() { return _utilities.separateOperations; } }); Object.defineProperty(exports, 'isEqualType', { enumerable: true, get: function get() { return _utilities.isEqualType; } }); Object.defineProperty(exports, 'isTypeSubTypeOf', { enumerable: true, get: function get() { return _utilities.isTypeSubTypeOf; } }); Object.defineProperty(exports, 'doTypesOverlap', { enumerable: true, get: function get() { return _utilities.doTypesOverlap; } }); Object.defineProperty(exports, 'assertValidName', { enumerable: true, get: function get() { return _utilities.assertValidName; } }); Object.defineProperty(exports, 'findBreakingChanges', { enumerable: true, get: function get() { return _utilities.findBreakingChanges; } }); Object.defineProperty(exports, 'findDeprecatedUsages', { enumerable: true, get: function get() { return _utilities.findDeprecatedUsages; } }); /***/ }), /* 37 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var graphql_1 = __webpack_require__(36); var hasSubscriptionOperation = function (graphQlParams) { var queryDoc = graphql_1.parse(graphQlParams.query); for (var _i = 0, _a = queryDoc.definitions; _i < _a.length; _i++) { var definition = _a[_i]; if (definition.kind === 'OperationDefinition') { var operation = definition.operation; if (operation === 'subscription') { return true; } } } return false; }; exports.graphQLFetcher = function (subscriptionsClient, fallbackFetcher) { var activeSubscriptionId = null; return function (graphQLParams) { if (subscriptionsClient && activeSubscriptionId !== null) { subscriptionsClient.unsubscribe(activeSubscriptionId); } if (subscriptionsClient && hasSubscriptionOperation(graphQLParams)) { return { subscribe: function (observer) { observer.next('Your subscription data will appear here after server publication!'); activeSubscriptionId = subscriptionsClient.subscribe({ query: graphQLParams.query, variables: graphQLParams.variables, }, function (error, result) { if (error) { observer.error(error); } else { observer.next(result); } }); }, }; } else { return fallbackFetcher(graphQLParams); } }; }; //# sourceMappingURL=fetcher.js.map /***/ }), /* 38 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatError = formatError; var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Given a GraphQLError, format it according to the rules described by the * Response Format, Errors section of the GraphQL Specification. */ function formatError(error) { (0, _invariant2.default)(error, 'Received null or undefined error.'); return { message: error.message, locations: error.locations, path: error.path }; } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /***/ }), /* 39 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.locatedError = locatedError; var _GraphQLError = __webpack_require__(13); /** * Given an arbitrary Error, presumably thrown while attempting to execute a * GraphQL operation, produce a new GraphQLError aware of the location in the * document responsible for the original Error. */ function locatedError(originalError, nodes, path) { // Note: this uses a brand-check to support GraphQL errors originating from // other contexts. if (originalError && originalError.path) { return originalError; } var message = originalError ? originalError.message || String(originalError) : 'An unknown error occurred.'; return new _GraphQLError.GraphQLError(message, originalError && originalError.nodes || nodes, originalError && originalError.source, originalError && originalError.positions, path, originalError); } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /***/ }), /* 40 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.syntaxError = syntaxError; var _location = __webpack_require__(25); var _GraphQLError = __webpack_require__(13); /** * Produces a GraphQLError representing a syntax error, containing useful * descriptive information about the syntax error's position in the source. */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function syntaxError(source, position, description) { var location = (0, _location.getLocation)(source, position); var error = new _GraphQLError.GraphQLError('Syntax Error ' + source.name + ' (' + location.line + ':' + location.column + ') ' + description + '\n\n' + highlightSourceAtLocation(source, location), undefined, source, [position]); return error; } /** * Render a helpful description of the location of the error in the GraphQL * Source document. */ function highlightSourceAtLocation(source, location) { var line = location.line; var prevLineNum = (line - 1).toString(); var lineNum = line.toString(); var nextLineNum = (line + 1).toString(); var padLen = nextLineNum.length; var lines = source.body.split(/\r\n|[\n\r]/g); return (line >= 2 ? lpad(padLen, prevLineNum) + ': ' + lines[line - 2] + '\n' : '') + lpad(padLen, lineNum) + ': ' + lines[line - 1] + '\n' + Array(2 + padLen + location.column).join(' ') + '^\n' + (line < lines.length ? lpad(padLen, nextLineNum) + ': ' + lines[line] + '\n' : ''); } function lpad(len, str) { return Array(len - str.length + 1).join(' ') + str; } /***/ }), /* 41 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _execute = __webpack_require__(30); Object.defineProperty(exports, 'execute', { enumerable: true, get: function get() { return _execute.execute; } }); Object.defineProperty(exports, 'defaultFieldResolver', { enumerable: true, get: function get() { return _execute.defaultFieldResolver; } }); Object.defineProperty(exports, 'responsePathAsArray', { enumerable: true, get: function get() { return _execute.responsePathAsArray; } }); /***/ }), /* 42 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.graphql = graphql; var _source = __webpack_require__(26); var _parser = __webpack_require__(17); var _validate = __webpack_require__(35); var _execute = __webpack_require__(30); /** * This is the primary entry point function for fulfilling GraphQL operations * by parsing, validating, and executing a GraphQL document along side a * GraphQL schema. * * More sophisticated GraphQL servers, such as those which persist queries, * may wish to separate the validation and execution phases to a static time * tooling step, and a server runtime step. * * schema: * The GraphQL type system to use when validating and executing a query. * requestString: * A GraphQL language formatted string representing the requested operation. * rootValue: * The value provided as the first argument to resolver functions on the top * level type (e.g. the query object type). * variableValues: * A mapping of variable name to runtime value to use for all variables * defined in the requestString. * operationName: * The name of the operation to use if requestString contains multiple * possible operations. Can be omitted if requestString contains only * one operation. */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function graphql(schema, requestString, rootValue, contextValue, variableValues, operationName) { return new Promise(function (resolve) { var source = new _source.Source(requestString || '', 'GraphQL request'); var documentAST = (0, _parser.parse)(source); var validationErrors = (0, _validate.validate)(schema, documentAST); if (validationErrors.length > 0) { resolve({ errors: validationErrors }); } else { resolve((0, _execute.execute)(schema, documentAST, rootValue, contextValue, variableValues, operationName)); } }).then(undefined, function (error) { return { errors: [error] }; }); } /***/ }), /* 43 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BREAK = exports.visitWithTypeInfo = exports.visitInParallel = exports.visit = exports.Source = exports.print = exports.parseType = exports.parseValue = exports.parse = exports.TokenKind = exports.createLexer = exports.Kind = exports.getLocation = undefined; var _location = __webpack_require__(25); Object.defineProperty(exports, 'getLocation', { enumerable: true, get: function get() { return _location.getLocation; } }); var _lexer = __webpack_require__(24); Object.defineProperty(exports, 'createLexer', { enumerable: true, get: function get() { return _lexer.createLexer; } }); Object.defineProperty(exports, 'TokenKind', { enumerable: true, get: function get() { return _lexer.TokenKind; } }); var _parser = __webpack_require__(17); Object.defineProperty(exports, 'parse', { enumerable: true, get: function get() { return _parser.parse; } }); Object.defineProperty(exports, 'parseValue', { enumerable: true, get: function get() { return _parser.parseValue; } }); Object.defineProperty(exports, 'parseType', { enumerable: true, get: function get() { return _parser.parseType; } }); var _printer = __webpack_require__(4); Object.defineProperty(exports, 'print', { enumerable: true, get: function get() { return _printer.print; } }); var _source = __webpack_require__(26); Object.defineProperty(exports, 'Source', { enumerable: true, get: function get() { return _source.Source; } }); var _visitor = __webpack_require__(15); Object.defineProperty(exports, 'visit', { enumerable: true, get: function get() { return _visitor.visit; } }); Object.defineProperty(exports, 'visitInParallel', { enumerable: true, get: function get() { return _visitor.visitInParallel; } }); Object.defineProperty(exports, 'visitWithTypeInfo', { enumerable: true, get: function get() { return _visitor.visitWithTypeInfo; } }); Object.defineProperty(exports, 'BREAK', { enumerable: true, get: function get() { return _visitor.BREAK; } }); var _kinds = __webpack_require__(2); var Kind = _interopRequireWildcard(_kinds); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } exports.Kind = Kind; /***/ }), /* 44 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _schema = __webpack_require__(8); Object.defineProperty(exports, 'GraphQLSchema', { enumerable: true, get: function get() { return _schema.GraphQLSchema; } }); var _definition = __webpack_require__(1); Object.defineProperty(exports, 'isType', { enumerable: true, get: function get() { return _definition.isType; } }); Object.defineProperty(exports, 'isInputType', { enumerable: true, get: function get() { return _definition.isInputType; } }); Object.defineProperty(exports, 'isOutputType', { enumerable: true, get: function get() { return _definition.isOutputType; } }); Object.defineProperty(exports, 'isLeafType', { enumerable: true, get: function get() { return _definition.isLeafType; } }); Object.defineProperty(exports, 'isCompositeType', { enumerable: true, get: function get() { return _definition.isCompositeType; } }); Object.defineProperty(exports, 'isAbstractType', { enumerable: true, get: function get() { return _definition.isAbstractType; } }); Object.defineProperty(exports, 'isNamedType', { enumerable: true, get: function get() { return _definition.isNamedType; } }); Object.defineProperty(exports, 'assertType', { enumerable: true, get: function get() { return _definition.assertType; } }); Object.defineProperty(exports, 'assertInputType', { enumerable: true, get: function get() { return _definition.assertInputType; } }); Object.defineProperty(exports, 'assertOutputType', { enumerable: true, get: function get() { return _definition.assertOutputType; } }); Object.defineProperty(exports, 'assertLeafType', { enumerable: true, get: function get() { return _definition.assertLeafType; } }); Object.defineProperty(exports, 'assertCompositeType', { enumerable: true, get: function get() { return _definition.assertCompositeType; } }); Object.defineProperty(exports, 'assertAbstractType', { enumerable: true, get: function get() { return _definition.assertAbstractType; } }); Object.defineProperty(exports, 'assertNamedType', { enumerable: true, get: function get() { return _definition.assertNamedType; } }); Object.defineProperty(exports, 'getNullableType', { enumerable: true, get: function get() { return _definition.getNullableType; } }); Object.defineProperty(exports, 'getNamedType', { enumerable: true, get: function get() { return _definition.getNamedType; } }); Object.defineProperty(exports, 'GraphQLScalarType', { enumerable: true, get: function get() { return _definition.GraphQLScalarType; } }); Object.defineProperty(exports, 'GraphQLObjectType', { enumerable: true, get: function get() { return _definition.GraphQLObjectType; } }); Object.defineProperty(exports, 'GraphQLInterfaceType', { enumerable: true, get: function get() { return _definition.GraphQLInterfaceType; } }); Object.defineProperty(exports, 'GraphQLUnionType', { enumerable: true, get: function get() { return _definition.GraphQLUnionType; } }); Object.defineProperty(exports, 'GraphQLEnumType', { enumerable: true, get: function get() { return _definition.GraphQLEnumType; } }); Object.defineProperty(exports, 'GraphQLInputObjectType', { enumerable: true, get: function get() { return _definition.GraphQLInputObjectType; } }); Object.defineProperty(exports, 'GraphQLList', { enumerable: true, get: function get() { return _definition.GraphQLList; } }); Object.defineProperty(exports, 'GraphQLNonNull', { enumerable: true, get: function get() { return _definition.GraphQLNonNull; } }); var _directives = __webpack_require__(5); Object.defineProperty(exports, 'DirectiveLocation', { enumerable: true, get: function get() { return _directives.DirectiveLocation; } }); Object.defineProperty(exports, 'GraphQLDirective', { enumerable: true, get: function get() { return _directives.GraphQLDirective; } }); Object.defineProperty(exports, 'specifiedDirectives', { enumerable: true, get: function get() { return _directives.specifiedDirectives; } }); Object.defineProperty(exports, 'GraphQLIncludeDirective', { enumerable: true, get: function get() { return _directives.GraphQLIncludeDirective; } }); Object.defineProperty(exports, 'GraphQLSkipDirective', { enumerable: true, get: function get() { return _directives.GraphQLSkipDirective; } }); Object.defineProperty(exports, 'GraphQLDeprecatedDirective', { enumerable: true, get: function get() { return _directives.GraphQLDeprecatedDirective; } }); Object.defineProperty(exports, 'DEFAULT_DEPRECATION_REASON', { enumerable: true, get: function get() { return _directives.DEFAULT_DEPRECATION_REASON; } }); var _scalars = __webpack_require__(7); Object.defineProperty(exports, 'GraphQLInt', { enumerable: true, get: function get() { return _scalars.GraphQLInt; } }); Object.defineProperty(exports, 'GraphQLFloat', { enumerable: true, get: function get() { return _scalars.GraphQLFloat; } }); Object.defineProperty(exports, 'GraphQLString', { enumerable: true, get: function get() { return _scalars.GraphQLString; } }); Object.defineProperty(exports, 'GraphQLBoolean', { enumerable: true, get: function get() { return _scalars.GraphQLBoolean; } }); Object.defineProperty(exports, 'GraphQLID', { enumerable: true, get: function get() { return _scalars.GraphQLID; } }); var _introspection = __webpack_require__(11); Object.defineProperty(exports, 'TypeKind', { enumerable: true, get: function get() { return _introspection.TypeKind; } }); Object.defineProperty(exports, '__Schema', { enumerable: true, get: function get() { return _introspection.__Schema; } }); Object.defineProperty(exports, '__Directive', { enumerable: true, get: function get() { return _introspection.__Directive; } }); Object.defineProperty(exports, '__DirectiveLocation', { enumerable: true, get: function get() { return _introspection.__DirectiveLocation; } }); Object.defineProperty(exports, '__Type', { enumerable: true, get: function get() { return _introspection.__Type; } }); Object.defineProperty(exports, '__Field', { enumerable: true, get: function get() { return _introspection.__Field; } }); Object.defineProperty(exports, '__InputValue', { enumerable: true, get: function get() { return _introspection.__InputValue; } }); Object.defineProperty(exports, '__EnumValue', { enumerable: true, get: function get() { return _introspection.__EnumValue; } }); Object.defineProperty(exports, '__TypeKind', { enumerable: true, get: function get() { return _introspection.__TypeKind; } }); Object.defineProperty(exports, 'SchemaMetaFieldDef', { enumerable: true, get: function get() { return _introspection.SchemaMetaFieldDef; } }); Object.defineProperty(exports, 'TypeMetaFieldDef', { enumerable: true, get: function get() { return _introspection.TypeMetaFieldDef; } }); Object.defineProperty(exports, 'TypeNameMetaFieldDef', { enumerable: true, get: function get() { return _introspection.TypeNameMetaFieldDef; } }); /***/ }), /* 45 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildClientSchema = buildClientSchema; var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _keyMap = __webpack_require__(12); var _keyMap2 = _interopRequireDefault(_keyMap); var _keyValMap = __webpack_require__(21); var _keyValMap2 = _interopRequireDefault(_keyValMap); var _valueFromAST = __webpack_require__(16); var _parser = __webpack_require__(17); var _schema = __webpack_require__(8); var _definition = __webpack_require__(1); var _introspection = __webpack_require__(11); var _scalars = __webpack_require__(7); var _directives = __webpack_require__(5); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Build a GraphQLSchema for use by client tools. * * Given the result of a client running the introspection query, creates and * returns a GraphQLSchema instance which can be then used with all graphql-js * tools, but cannot be used to execute a query, as introspection does not * represent the "resolver", "parse" or "serialize" functions or any other * server-internal mechanisms. */ function buildClientSchema(introspection) { // Get the schema from the introspection result. var schemaIntrospection = introspection.__schema; // Converts the list of types into a keyMap based on the type names. var typeIntrospectionMap = (0, _keyMap2.default)(schemaIntrospection.types, function (type) { return type.name; }); // A cache to use to store the actual GraphQLType definition objects by name. // Initialize to the GraphQL built in scalars. All functions below are inline // so that this type def cache is within the scope of the closure. var typeDefCache = { String: _scalars.GraphQLString, Int: _scalars.GraphQLInt, Float: _scalars.GraphQLFloat, Boolean: _scalars.GraphQLBoolean, ID: _scalars.GraphQLID, __Schema: _introspection.__Schema, __Directive: _introspection.__Directive, __DirectiveLocation: _introspection.__DirectiveLocation, __Type: _introspection.__Type, __Field: _introspection.__Field, __InputValue: _introspection.__InputValue, __EnumValue: _introspection.__EnumValue, __TypeKind: _introspection.__TypeKind }; // Given a type reference in introspection, return the GraphQLType instance. // preferring cached instances before building new instances. function getType(typeRef) { if (typeRef.kind === _introspection.TypeKind.LIST) { var itemRef = typeRef.ofType; if (!itemRef) { throw new Error('Decorated type deeper than introspection query.'); } return new _definition.GraphQLList(getType(itemRef)); } if (typeRef.kind === _introspection.TypeKind.NON_NULL) { var nullableRef = typeRef.ofType; if (!nullableRef) { throw new Error('Decorated type deeper than introspection query.'); } var nullableType = getType(nullableRef); (0, _invariant2.default)(!(nullableType instanceof _definition.GraphQLNonNull), 'No nesting nonnull.'); return new _definition.GraphQLNonNull(nullableType); } return getNamedType(typeRef.name); } function getNamedType(typeName) { if (typeDefCache[typeName]) { return typeDefCache[typeName]; } var typeIntrospection = typeIntrospectionMap[typeName]; if (!typeIntrospection) { throw new Error('Invalid or incomplete schema, unknown type: ' + typeName + '. Ensure ' + 'that a full introspection query is used in order to build a ' + 'client schema.'); } var typeDef = buildType(typeIntrospection); typeDefCache[typeName] = typeDef; return typeDef; } function getInputType(typeRef) { var type = getType(typeRef); (0, _invariant2.default)((0, _definition.isInputType)(type), 'Introspection must provide input type for arguments.'); return type; } function getOutputType(typeRef) { var type = getType(typeRef); (0, _invariant2.default)((0, _definition.isOutputType)(type), 'Introspection must provide output type for fields.'); return type; } function getObjectType(typeRef) { var type = getType(typeRef); (0, _invariant2.default)(type instanceof _definition.GraphQLObjectType, 'Introspection must provide object type for possibleTypes.'); return type; } function getInterfaceType(typeRef) { var type = getType(typeRef); (0, _invariant2.default)(type instanceof _definition.GraphQLInterfaceType, 'Introspection must provide interface type for interfaces.'); return type; } // Given a type's introspection result, construct the correct // GraphQLType instance. function buildType(type) { switch (type.kind) { case _introspection.TypeKind.SCALAR: return buildScalarDef(type); case _introspection.TypeKind.OBJECT: return buildObjectDef(type); case _introspection.TypeKind.INTERFACE: return buildInterfaceDef(type); case _introspection.TypeKind.UNION: return buildUnionDef(type); case _introspection.TypeKind.ENUM: return buildEnumDef(type); case _introspection.TypeKind.INPUT_OBJECT: return buildInputObjectDef(type); default: throw new Error('Invalid or incomplete schema, unknown kind: ' + type.kind + '. Ensure ' + 'that a full introspection query is used in order to build a ' + 'client schema.'); } } function buildScalarDef(scalarIntrospection) { return new _definition.GraphQLScalarType({ name: scalarIntrospection.name, description: scalarIntrospection.description, serialize: function serialize(id) { return id; }, // Note: validation calls the parse functions to determine if a // literal value is correct. Returning null would cause use of custom // scalars to always fail validation. Returning false causes them to // always pass validation. parseValue: function parseValue() { return false; }, parseLiteral: function parseLiteral() { return false; } }); } function buildObjectDef(objectIntrospection) { return new _definition.GraphQLObjectType({ name: objectIntrospection.name, description: objectIntrospection.description, interfaces: objectIntrospection.interfaces.map(getInterfaceType), fields: function fields() { return buildFieldDefMap(objectIntrospection); } }); } function buildInterfaceDef(interfaceIntrospection) { return new _definition.GraphQLInterfaceType({ name: interfaceIntrospection.name, description: interfaceIntrospection.description, fields: function fields() { return buildFieldDefMap(interfaceIntrospection); }, resolveType: cannotExecuteClientSchema }); } function buildUnionDef(unionIntrospection) { return new _definition.GraphQLUnionType({ name: unionIntrospection.name, description: unionIntrospection.description, types: unionIntrospection.possibleTypes.map(getObjectType), resolveType: cannotExecuteClientSchema }); } function buildEnumDef(enumIntrospection) { return new _definition.GraphQLEnumType({ name: enumIntrospection.name, description: enumIntrospection.description, values: (0, _keyValMap2.default)(enumIntrospection.enumValues, function (valueIntrospection) { return valueIntrospection.name; }, function (valueIntrospection) { return { description: valueIntrospection.description, deprecationReason: valueIntrospection.deprecationReason }; }) }); } function buildInputObjectDef(inputObjectIntrospection) { return new _definition.GraphQLInputObjectType({ name: inputObjectIntrospection.name, description: inputObjectIntrospection.description, fields: function fields() { return buildInputValueDefMap(inputObjectIntrospection.inputFields); } }); } function buildFieldDefMap(typeIntrospection) { return (0, _keyValMap2.default)(typeIntrospection.fields, function (fieldIntrospection) { return fieldIntrospection.name; }, function (fieldIntrospection) { return { description: fieldIntrospection.description, deprecationReason: fieldIntrospection.deprecationReason, type: getOutputType(fieldIntrospection.type), args: buildInputValueDefMap(fieldIntrospection.args) }; }); } function buildInputValueDefMap(inputValueIntrospections) { return (0, _keyValMap2.default)(inputValueIntrospections, function (inputValue) { return inputValue.name; }, buildInputValue); } function buildInputValue(inputValueIntrospection) { var type = getInputType(inputValueIntrospection.type); var defaultValue = inputValueIntrospection.defaultValue ? (0, _valueFromAST.valueFromAST)((0, _parser.parseValue)(inputValueIntrospection.defaultValue), type) : undefined; return { name: inputValueIntrospection.name, description: inputValueIntrospection.description, type: type, defaultValue: defaultValue }; } function buildDirective(directiveIntrospection) { // Support deprecated `on****` fields for building `locations`, as this // is used by GraphiQL which may need to support outdated servers. var locations = directiveIntrospection.locations ? directiveIntrospection.locations.slice() : [].concat(!directiveIntrospection.onField ? [] : [_directives.DirectiveLocation.FIELD], !directiveIntrospection.onOperation ? [] : [_directives.DirectiveLocation.QUERY, _directives.DirectiveLocation.MUTATION, _directives.DirectiveLocation.SUBSCRIPTION], !directiveIntrospection.onFragment ? [] : [_directives.DirectiveLocation.FRAGMENT_DEFINITION, _directives.DirectiveLocation.FRAGMENT_SPREAD, _directives.DirectiveLocation.INLINE_FRAGMENT]); return new _directives.GraphQLDirective({ name: directiveIntrospection.name, description: directiveIntrospection.description, locations: locations, args: buildInputValueDefMap(directiveIntrospection.args) }); } // Iterate through all types, getting the type definition for each, ensuring // that any type not directly referenced by a field will get created. var types = schemaIntrospection.types.map(function (typeIntrospection) { return getNamedType(typeIntrospection.name); }); // Get the root Query, Mutation, and Subscription types. var queryType = getObjectType(schemaIntrospection.queryType); var mutationType = schemaIntrospection.mutationType ? getObjectType(schemaIntrospection.mutationType) : null; var subscriptionType = schemaIntrospection.subscriptionType ? getObjectType(schemaIntrospection.subscriptionType) : null; // Get the directives supported by Introspection, assuming empty-set if // directives were not queried for. var directives = schemaIntrospection.directives ? schemaIntrospection.directives.map(buildDirective) : []; // Then produce and return a Schema with these types. return new _schema.GraphQLSchema({ query: queryType, mutation: mutationType, subscription: subscriptionType, types: types, directives: directives }); } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function cannotExecuteClientSchema() { throw new Error('Client Schema cannot use Interface or Union types for execution.'); } /***/ }), /* 46 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.concatAST = concatAST; /** * Provided a collection of ASTs, presumably each from different files, * concatenate the ASTs together into batched AST, useful for validating many * GraphQL source files which together represent one conceptual application. */ function concatAST(asts) { var batchDefinitions = []; for (var i = 0; i < asts.length; i++) { var definitions = asts[i].definitions; for (var j = 0; j < definitions.length; j++) { batchDefinitions.push(definitions[j]); } } return { kind: 'Document', definitions: batchDefinitions }; } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /***/ }), /* 47 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.extendSchema = extendSchema; var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _keyMap = __webpack_require__(12); var _keyMap2 = _interopRequireDefault(_keyMap); var _keyValMap = __webpack_require__(21); var _keyValMap2 = _interopRequireDefault(_keyValMap); var _buildASTSchema = __webpack_require__(32); var _valueFromAST = __webpack_require__(16); var _GraphQLError = __webpack_require__(13); var _schema = __webpack_require__(8); var _definition = __webpack_require__(1); var _directives = __webpack_require__(5); var _introspection = __webpack_require__(11); var _scalars = __webpack_require__(7); var _kinds = __webpack_require__(2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Produces a new schema given an existing schema and a document which may * contain GraphQL type extensions and definitions. The original schema will * remain unaltered. * * Because a schema represents a graph of references, a schema cannot be * extended without effectively making an entire copy. We do not know until it's * too late if subgraphs remain unchanged. * * This algorithm copies the provided schema, applying extensions while * producing the copy. The original schema remains unaltered. */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function extendSchema(schema, documentAST) { (0, _invariant2.default)(schema instanceof _schema.GraphQLSchema, 'Must provide valid GraphQLSchema'); (0, _invariant2.default)(documentAST && documentAST.kind === _kinds.DOCUMENT, 'Must provide valid Document AST'); // Collect the type definitions and extensions found in the document. var typeDefinitionMap = {}; var typeExtensionsMap = {}; // New directives and types are separate because a directives and types can // have the same name. For example, a type named "skip". var directiveDefinitions = []; for (var i = 0; i < documentAST.definitions.length; i++) { var def = documentAST.definitions[i]; switch (def.kind) { case _kinds.OBJECT_TYPE_DEFINITION: case _kinds.INTERFACE_TYPE_DEFINITION: case _kinds.ENUM_TYPE_DEFINITION: case _kinds.UNION_TYPE_DEFINITION: case _kinds.SCALAR_TYPE_DEFINITION: case _kinds.INPUT_OBJECT_TYPE_DEFINITION: // Sanity check that none of the defined types conflict with the // schema's existing types. var typeName = def.name.value; if (schema.getType(typeName)) { throw new _GraphQLError.GraphQLError('Type "' + typeName + '" already exists in the schema. It cannot also ' + 'be defined in this type definition.', [def]); } typeDefinitionMap[typeName] = def; break; case _kinds.TYPE_EXTENSION_DEFINITION: // Sanity check that this type extension exists within the // schema's existing types. var extendedTypeName = def.definition.name.value; var existingType = schema.getType(extendedTypeName); if (!existingType) { throw new _GraphQLError.GraphQLError('Cannot extend type "' + extendedTypeName + '" because it does not ' + 'exist in the existing schema.', [def.definition]); } if (!(existingType instanceof _definition.GraphQLObjectType)) { throw new _GraphQLError.GraphQLError('Cannot extend non-object type "' + extendedTypeName + '".', [def.definition]); } var extensions = typeExtensionsMap[extendedTypeName]; if (extensions) { extensions.push(def); } else { extensions = [def]; } typeExtensionsMap[extendedTypeName] = extensions; break; case _kinds.DIRECTIVE_DEFINITION: var directiveName = def.name.value; var existingDirective = schema.getDirective(directiveName); if (existingDirective) { throw new _GraphQLError.GraphQLError('Directive "' + directiveName + '" already exists in the schema. It ' + 'cannot be redefined.', [def]); } directiveDefinitions.push(def); break; } } // If this document contains no new types, extensions, or directives then // return the same unmodified GraphQLSchema instance. if (Object.keys(typeExtensionsMap).length === 0 && Object.keys(typeDefinitionMap).length === 0 && directiveDefinitions.length === 0) { return schema; } // A cache to use to store the actual GraphQLType definition objects by name. // Initialize to the GraphQL built in scalars and introspection types. All // functions below are inline so that this type def cache is within the scope // of the closure. var typeDefCache = { String: _scalars.GraphQLString, Int: _scalars.GraphQLInt, Float: _scalars.GraphQLFloat, Boolean: _scalars.GraphQLBoolean, ID: _scalars.GraphQLID, __Schema: _introspection.__Schema, __Directive: _introspection.__Directive, __DirectiveLocation: _introspection.__DirectiveLocation, __Type: _introspection.__Type, __Field: _introspection.__Field, __InputValue: _introspection.__InputValue, __EnumValue: _introspection.__EnumValue, __TypeKind: _introspection.__TypeKind }; // Get the root Query, Mutation, and Subscription object types. var queryType = getTypeFromDef(schema.getQueryType()); var existingMutationType = schema.getMutationType(); var mutationType = existingMutationType ? getTypeFromDef(existingMutationType) : null; var existingSubscriptionType = schema.getSubscriptionType(); var subscriptionType = existingSubscriptionType ? getTypeFromDef(existingSubscriptionType) : null; // Iterate through all types, getting the type definition for each, ensuring // that any type not directly referenced by a field will get created. var typeMap = schema.getTypeMap(); var types = Object.keys(typeMap).map(function (typeName) { return getTypeFromDef(typeMap[typeName]); }); // Do the same with new types, appending to the list of defined types. Object.keys(typeDefinitionMap).forEach(function (typeName) { types.push(getTypeFromAST(typeDefinitionMap[typeName])); }); // Then produce and return a Schema with these types. return new _schema.GraphQLSchema({ query: queryType, mutation: mutationType, subscription: subscriptionType, types: types, directives: getMergedDirectives() }); // Below are functions used for producing this schema that have closed over // this scope and have access to the schema, cache, and newly defined types. function getMergedDirectives() { var existingDirectives = schema.getDirectives(); (0, _invariant2.default)(existingDirectives, 'schema must have default directives'); var newDirectives = directiveDefinitions.map(function (directiveNode) { return getDirective(directiveNode); }); return existingDirectives.concat(newDirectives); } function getTypeFromDef(typeDef) { var type = _getNamedType(typeDef.name); (0, _invariant2.default)(type, 'Missing type from schema'); return type; } function getTypeFromAST(node) { var type = _getNamedType(node.name.value); if (!type) { throw new _GraphQLError.GraphQLError('Unknown type: "' + node.name.value + '". Ensure that this type exists ' + 'either in the original schema, or is added in a type definition.', [node]); } return type; } function getObjectTypeFromAST(node) { var type = getTypeFromAST(node); (0, _invariant2.default)(type instanceof _definition.GraphQLObjectType, 'Must be Object type.'); return type; } function getInterfaceTypeFromAST(node) { var type = getTypeFromAST(node); (0, _invariant2.default)(type instanceof _definition.GraphQLInterfaceType, 'Must be Interface type.'); return type; } function getInputTypeFromAST(node) { var type = getTypeFromAST(node); (0, _invariant2.default)((0, _definition.isInputType)(type), 'Must be Input type.'); return type; } function getOutputTypeFromAST(node) { var type = getTypeFromAST(node); (0, _invariant2.default)((0, _definition.isOutputType)(type), 'Must be Output type.'); return type; } // Given a name, returns a type from either the existing schema or an // added type. function _getNamedType(typeName) { var cachedTypeDef = typeDefCache[typeName]; if (cachedTypeDef) { return cachedTypeDef; } var existingType = schema.getType(typeName); if (existingType) { var typeDef = extendType(existingType); typeDefCache[typeName] = typeDef; return typeDef; } var typeNode = typeDefinitionMap[typeName]; if (typeNode) { var _typeDef = buildType(typeNode); typeDefCache[typeName] = _typeDef; return _typeDef; } } // Given a type's introspection result, construct the correct // GraphQLType instance. function extendType(type) { if (type instanceof _definition.GraphQLObjectType) { return extendObjectType(type); } if (type instanceof _definition.GraphQLInterfaceType) { return extendInterfaceType(type); } if (type instanceof _definition.GraphQLUnionType) { return extendUnionType(type); } return type; } function extendObjectType(type) { return new _definition.GraphQLObjectType({ name: type.name, description: type.description, interfaces: function interfaces() { return extendImplementedInterfaces(type); }, fields: function fields() { return extendFieldMap(type); }, isTypeOf: type.isTypeOf }); } function extendInterfaceType(type) { return new _definition.GraphQLInterfaceType({ name: type.name, description: type.description, fields: function fields() { return extendFieldMap(type); }, resolveType: type.resolveType }); } function extendUnionType(type) { return new _definition.GraphQLUnionType({ name: type.name, description: type.description, types: type.getTypes().map(getTypeFromDef), resolveType: type.resolveType }); } function extendImplementedInterfaces(type) { var interfaces = type.getInterfaces().map(getTypeFromDef); // If there are any extensions to the interfaces, apply those here. var extensions = typeExtensionsMap[type.name]; if (extensions) { extensions.forEach(function (extension) { extension.definition.interfaces.forEach(function (namedType) { var interfaceName = namedType.name.value; if (interfaces.some(function (def) { return def.name === interfaceName; })) { throw new _GraphQLError.GraphQLError('Type "' + type.name + '" already implements "' + interfaceName + '". ' + 'It cannot also be implemented in this type extension.', [namedType]); } interfaces.push(getInterfaceTypeFromAST(namedType)); }); }); } return interfaces; } function extendFieldMap(type) { var newFieldMap = {}; var oldFieldMap = type.getFields(); Object.keys(oldFieldMap).forEach(function (fieldName) { var field = oldFieldMap[fieldName]; newFieldMap[fieldName] = { description: field.description, deprecationReason: field.deprecationReason, type: extendFieldType(field.type), args: (0, _keyMap2.default)(field.args, function (arg) { return arg.name; }), resolve: field.resolve }; }); // If there are any extensions to the fields, apply those here. var extensions = typeExtensionsMap[type.name]; if (extensions) { extensions.forEach(function (extension) { extension.definition.fields.forEach(function (field) { var fieldName = field.name.value; if (oldFieldMap[fieldName]) { throw new _GraphQLError.GraphQLError('Field "' + type.name + '.' + fieldName + '" already exists in the ' + 'schema. It cannot also be defined in this type extension.', [field]); } newFieldMap[fieldName] = { description: (0, _buildASTSchema.getDescription)(field), type: buildOutputFieldType(field.type), args: buildInputValues(field.arguments) }; }); }); } return newFieldMap; } function extendFieldType(typeDef) { if (typeDef instanceof _definition.GraphQLList) { return new _definition.GraphQLList(extendFieldType(typeDef.ofType)); } if (typeDef instanceof _definition.GraphQLNonNull) { return new _definition.GraphQLNonNull(extendFieldType(typeDef.ofType)); } return getTypeFromDef(typeDef); } function buildType(typeNode) { switch (typeNode.kind) { case _kinds.OBJECT_TYPE_DEFINITION: return buildObjectType(typeNode); case _kinds.INTERFACE_TYPE_DEFINITION: return buildInterfaceType(typeNode); case _kinds.UNION_TYPE_DEFINITION: return buildUnionType(typeNode); case _kinds.SCALAR_TYPE_DEFINITION: return buildScalarType(typeNode); case _kinds.ENUM_TYPE_DEFINITION: return buildEnumType(typeNode); case _kinds.INPUT_OBJECT_TYPE_DEFINITION: return buildInputObjectType(typeNode); } throw new TypeError('Unknown type kind ' + typeNode.kind); } function buildObjectType(typeNode) { return new _definition.GraphQLObjectType({ name: typeNode.name.value, description: (0, _buildASTSchema.getDescription)(typeNode), interfaces: function interfaces() { return buildImplementedInterfaces(typeNode); }, fields: function fields() { return buildFieldMap(typeNode); } }); } function buildInterfaceType(typeNode) { return new _definition.GraphQLInterfaceType({ name: typeNode.name.value, description: (0, _buildASTSchema.getDescription)(typeNode), fields: function fields() { return buildFieldMap(typeNode); }, resolveType: cannotExecuteExtendedSchema }); } function buildUnionType(typeNode) { return new _definition.GraphQLUnionType({ name: typeNode.name.value, description: (0, _buildASTSchema.getDescription)(typeNode), types: typeNode.types.map(getObjectTypeFromAST), resolveType: cannotExecuteExtendedSchema }); } function buildScalarType(typeNode) { return new _definition.GraphQLScalarType({ name: typeNode.name.value, description: (0, _buildASTSchema.getDescription)(typeNode), serialize: function serialize(id) { return id; }, // Note: validation calls the parse functions to determine if a // literal value is correct. Returning null would cause use of custom // scalars to always fail validation. Returning false causes them to // always pass validation. parseValue: function parseValue() { return false; }, parseLiteral: function parseLiteral() { return false; } }); } function buildEnumType(typeNode) { return new _definition.GraphQLEnumType({ name: typeNode.name.value, description: (0, _buildASTSchema.getDescription)(typeNode), values: (0, _keyValMap2.default)(typeNode.values, function (v) { return v.name.value; }, function () { return {}; }) }); } function buildInputObjectType(typeNode) { return new _definition.GraphQLInputObjectType({ name: typeNode.name.value, description: (0, _buildASTSchema.getDescription)(typeNode), fields: function fields() { return buildInputValues(typeNode.fields); } }); } function getDirective(directiveNode) { return new _directives.GraphQLDirective({ name: directiveNode.name.value, locations: directiveNode.locations.map(function (node) { return node.value; }), args: directiveNode.arguments && buildInputValues(directiveNode.arguments) }); } function buildImplementedInterfaces(typeNode) { return typeNode.interfaces && typeNode.interfaces.map(getInterfaceTypeFromAST); } function buildFieldMap(typeNode) { return (0, _keyValMap2.default)(typeNode.fields, function (field) { return field.name.value; }, function (field) { return { type: buildOutputFieldType(field.type), description: (0, _buildASTSchema.getDescription)(field), args: buildInputValues(field.arguments) }; }); } function buildInputValues(values) { return (0, _keyValMap2.default)(values, function (value) { return value.name.value; }, function (value) { var type = buildInputFieldType(value.type); return { type: type, description: (0, _buildASTSchema.getDescription)(value), defaultValue: (0, _valueFromAST.valueFromAST)(value.defaultValue, type) }; }); } function buildInputFieldType(typeNode) { if (typeNode.kind === _kinds.LIST_TYPE) { return new _definition.GraphQLList(buildInputFieldType(typeNode.type)); } if (typeNode.kind === _kinds.NON_NULL_TYPE) { var nullableType = buildInputFieldType(typeNode.type); (0, _invariant2.default)(!(nullableType instanceof _definition.GraphQLNonNull), 'Must be nullable'); return new _definition.GraphQLNonNull(nullableType); } return getInputTypeFromAST(typeNode); } function buildOutputFieldType(typeNode) { if (typeNode.kind === _kinds.LIST_TYPE) { return new _definition.GraphQLList(buildOutputFieldType(typeNode.type)); } if (typeNode.kind === _kinds.NON_NULL_TYPE) { var nullableType = buildOutputFieldType(typeNode.type); (0, _invariant2.default)(!(nullableType instanceof _definition.GraphQLNonNull), 'Must be nullable'); return new _definition.GraphQLNonNull(nullableType); } return getOutputTypeFromAST(typeNode); } } function cannotExecuteExtendedSchema() { throw new Error('Extended Schema cannot use Interface or Union types for execution.'); } /***/ }), /* 48 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BreakingChangeType = undefined; exports.findBreakingChanges = findBreakingChanges; exports.findRemovedTypes = findRemovedTypes; exports.findTypesThatChangedKind = findTypesThatChangedKind; exports.findFieldsThatChangedType = findFieldsThatChangedType; exports.findTypesRemovedFromUnions = findTypesRemovedFromUnions; exports.findValuesRemovedFromEnums = findValuesRemovedFromEnums; var _definition = __webpack_require__(1); var _schema = __webpack_require__(8); /** * Copyright (c) 2016, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ var BreakingChangeType = exports.BreakingChangeType = { FIELD_CHANGED_KIND: 'FIELD_CHANGED_KIND', FIELD_REMOVED: 'FIELD_REMOVED', TYPE_CHANGED_KIND: 'TYPE_CHANGED_KIND', TYPE_REMOVED: 'TYPE_REMOVED', TYPE_REMOVED_FROM_UNION: 'TYPE_REMOVED_FROM_UNION', VALUE_REMOVED_FROM_ENUM: 'VALUE_REMOVED_FROM_ENUM' }; /** * Given two schemas, returns an Array containing descriptions of all the types * of breaking changes covered by the other functions down below. */ function findBreakingChanges(oldSchema, newSchema) { return [].concat(findRemovedTypes(oldSchema, newSchema), findTypesThatChangedKind(oldSchema, newSchema), findFieldsThatChangedType(oldSchema, newSchema), findTypesRemovedFromUnions(oldSchema, newSchema), findValuesRemovedFromEnums(oldSchema, newSchema)); } /** * Given two schemas, returns an Array containing descriptions of any breaking * changes in the newSchema related to removing an entire type. */ function findRemovedTypes(oldSchema, newSchema) { var oldTypeMap = oldSchema.getTypeMap(); var newTypeMap = newSchema.getTypeMap(); var breakingChanges = []; Object.keys(oldTypeMap).forEach(function (typeName) { if (!newTypeMap[typeName]) { breakingChanges.push({ type: BreakingChangeType.TYPE_REMOVED, description: typeName + ' was removed.' }); } }); return breakingChanges; } /** * Given two schemas, returns an Array containing descriptions of any breaking * changes in the newSchema related to changing the type of a type. */ function findTypesThatChangedKind(oldSchema, newSchema) { var oldTypeMap = oldSchema.getTypeMap(); var newTypeMap = newSchema.getTypeMap(); var breakingChanges = []; Object.keys(oldTypeMap).forEach(function (typeName) { if (!newTypeMap[typeName]) { return; } var oldType = oldTypeMap[typeName]; var newType = newTypeMap[typeName]; if (!(oldType instanceof newType.constructor)) { breakingChanges.push({ type: BreakingChangeType.TYPE_CHANGED_KIND, description: typeName + ' changed from ' + (typeKindName(oldType) + ' to ' + typeKindName(newType) + '.') }); } }); return breakingChanges; } function typeKindName(type) { if (type instanceof _definition.GraphQLScalarType) { return 'a Scalar type'; } if (type instanceof _definition.GraphQLObjectType) { return 'an Object type'; } if (type instanceof _definition.GraphQLInterfaceType) { return 'an Interface type'; } if (type instanceof _definition.GraphQLUnionType) { return 'a Union type'; } if (type instanceof _definition.GraphQLEnumType) { return 'an Enum type'; } if (type instanceof _definition.GraphQLInputObjectType) { return 'an Input type'; } throw new TypeError('Unknown type ' + type.constructor.name); } /** * Given two schemas, returns an Array containing descriptions of any breaking * changes in the newSchema related to the fields on a type. This includes if * a field has been removed from a type or if a field has changed type. */ function findFieldsThatChangedType(oldSchema, newSchema) { var oldTypeMap = oldSchema.getTypeMap(); var newTypeMap = newSchema.getTypeMap(); var breakingFieldChanges = []; Object.keys(oldTypeMap).forEach(function (typeName) { var oldType = oldTypeMap[typeName]; var newType = newTypeMap[typeName]; if (!(oldType instanceof _definition.GraphQLObjectType || oldType instanceof _definition.GraphQLInterfaceType || oldType instanceof _definition.GraphQLInputObjectType) || !(newType instanceof oldType.constructor)) { return; } var oldTypeFieldsDef = oldType.getFields(); var newTypeFieldsDef = newType.getFields(); Object.keys(oldTypeFieldsDef).forEach(function (fieldName) { // Check if the field is missing on the type in the new schema. if (!(fieldName in newTypeFieldsDef)) { breakingFieldChanges.push({ type: BreakingChangeType.FIELD_REMOVED, description: typeName + '.' + fieldName + ' was removed.' }); } else { // Check if the field's type has changed in the new schema. var oldFieldType = (0, _definition.getNamedType)(oldTypeFieldsDef[fieldName].type); var newFieldType = (0, _definition.getNamedType)(newTypeFieldsDef[fieldName].type); if (oldFieldType && newFieldType && oldFieldType.name !== newFieldType.name) { breakingFieldChanges.push({ type: BreakingChangeType.FIELD_CHANGED_KIND, description: typeName + '.' + fieldName + ' changed type from ' + (oldFieldType.name + ' to ' + newFieldType.name + '.') }); } } }); }); return breakingFieldChanges; } /** * Given two schemas, returns an Array containing descriptions of any breaking * changes in the newSchema related to removing types from a union type. */ function findTypesRemovedFromUnions(oldSchema, newSchema) { var oldTypeMap = oldSchema.getTypeMap(); var newTypeMap = newSchema.getTypeMap(); var typesRemovedFromUnion = []; Object.keys(oldTypeMap).forEach(function (typeName) { var oldType = oldTypeMap[typeName]; var newType = newTypeMap[typeName]; if (!(oldType instanceof _definition.GraphQLUnionType) || !(newType instanceof _definition.GraphQLUnionType)) { return; } var typeNamesInNewUnion = Object.create(null); newType.getTypes().forEach(function (type) { typeNamesInNewUnion[type.name] = true; }); oldType.getTypes().forEach(function (type) { if (!typeNamesInNewUnion[type.name]) { typesRemovedFromUnion.push({ type: BreakingChangeType.TYPE_REMOVED_FROM_UNION, description: type.name + ' was removed from union type ' + typeName + '.' }); } }); }); return typesRemovedFromUnion; } /** * Given two schemas, returns an Array containing descriptions of any breaking * changes in the newSchema related to removing values from an enum type. */ function findValuesRemovedFromEnums(oldSchema, newSchema) { var oldTypeMap = oldSchema.getTypeMap(); var newTypeMap = newSchema.getTypeMap(); var valuesRemovedFromEnums = []; Object.keys(oldTypeMap).forEach(function (typeName) { var oldType = oldTypeMap[typeName]; var newType = newTypeMap[typeName]; if (!(oldType instanceof _definition.GraphQLEnumType) || !(newType instanceof _definition.GraphQLEnumType)) { return; } var valuesInNewEnum = Object.create(null); newType.getValues().forEach(function (value) { valuesInNewEnum[value.name] = true; }); oldType.getValues().forEach(function (value) { if (!valuesInNewEnum[value.name]) { valuesRemovedFromEnums.push({ type: BreakingChangeType.VALUE_REMOVED_FROM_ENUM, description: value.name + ' was removed from enum type ' + typeName + '.' }); } }); }); return valuesRemovedFromEnums; } /***/ }), /* 49 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.findDeprecatedUsages = findDeprecatedUsages; var _GraphQLError = __webpack_require__(13); var _visitor = __webpack_require__(15); var _definition = __webpack_require__(1); var _schema = __webpack_require__(8); var _TypeInfo = __webpack_require__(27); /** * A validation rule which reports deprecated usages. * * Returns a list of GraphQLError instances describing each deprecated use. */ function findDeprecatedUsages(schema, ast) { var errors = []; var typeInfo = new _TypeInfo.TypeInfo(schema); (0, _visitor.visit)(ast, (0, _visitor.visitWithTypeInfo)(typeInfo, { Field: function Field(node) { var fieldDef = typeInfo.getFieldDef(); if (fieldDef && fieldDef.isDeprecated) { var parentType = typeInfo.getParentType(); if (parentType) { var reason = fieldDef.deprecationReason; errors.push(new _GraphQLError.GraphQLError('The field ' + parentType.name + '.' + fieldDef.name + ' is deprecated.' + (reason ? ' ' + reason : ''), [node])); } } }, EnumValue: function EnumValue(node) { var enumVal = typeInfo.getEnumValue(); if (enumVal && enumVal.isDeprecated) { var type = (0, _definition.getNamedType)(typeInfo.getInputType()); if (type) { var reason = enumVal.deprecationReason; errors.push(new _GraphQLError.GraphQLError('The enum value ' + type.name + '.' + enumVal.name + ' is deprecated.' + (reason ? ' ' + reason : ''), [node])); } } } })); return errors; } /** * Copyright (c) Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /***/ }), /* 50 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getOperationAST = getOperationAST; var _kinds = __webpack_require__(2); /** * Returns an operation AST given a document AST and optionally an operation * name. If a name is not provided, an operation is only returned if only one is * provided in the document. */ function getOperationAST(documentAST, operationName) { var operation = null; for (var i = 0; i < documentAST.definitions.length; i++) { var definition = documentAST.definitions[i]; if (definition.kind === _kinds.OPERATION_DEFINITION) { if (!operationName) { // If no operation name was provided, only return an Operation if there // is one defined in the document. Upon encountering the second, return // null. if (operation) { return null; } operation = definition; } else if (definition.name && definition.name.value === operationName) { return definition; } } } return operation; } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /***/ }), /* 51 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _introspectionQuery = __webpack_require__(52); Object.defineProperty(exports, 'introspectionQuery', { enumerable: true, get: function get() { return _introspectionQuery.introspectionQuery; } }); var _getOperationAST = __webpack_require__(50); Object.defineProperty(exports, 'getOperationAST', { enumerable: true, get: function get() { return _getOperationAST.getOperationAST; } }); var _buildClientSchema = __webpack_require__(45); Object.defineProperty(exports, 'buildClientSchema', { enumerable: true, get: function get() { return _buildClientSchema.buildClientSchema; } }); var _buildASTSchema = __webpack_require__(32); Object.defineProperty(exports, 'buildASTSchema', { enumerable: true, get: function get() { return _buildASTSchema.buildASTSchema; } }); Object.defineProperty(exports, 'buildSchema', { enumerable: true, get: function get() { return _buildASTSchema.buildSchema; } }); var _extendSchema = __webpack_require__(47); Object.defineProperty(exports, 'extendSchema', { enumerable: true, get: function get() { return _extendSchema.extendSchema; } }); var _schemaPrinter = __webpack_require__(53); Object.defineProperty(exports, 'printSchema', { enumerable: true, get: function get() { return _schemaPrinter.printSchema; } }); Object.defineProperty(exports, 'printType', { enumerable: true, get: function get() { return _schemaPrinter.printType; } }); Object.defineProperty(exports, 'printIntrospectionSchema', { enumerable: true, get: function get() { return _schemaPrinter.printIntrospectionSchema; } }); var _typeFromAST = __webpack_require__(9); Object.defineProperty(exports, 'typeFromAST', { enumerable: true, get: function get() { return _typeFromAST.typeFromAST; } }); var _valueFromAST = __webpack_require__(16); Object.defineProperty(exports, 'valueFromAST', { enumerable: true, get: function get() { return _valueFromAST.valueFromAST; } }); var _astFromValue = __webpack_require__(29); Object.defineProperty(exports, 'astFromValue', { enumerable: true, get: function get() { return _astFromValue.astFromValue; } }); var _TypeInfo = __webpack_require__(27); Object.defineProperty(exports, 'TypeInfo', { enumerable: true, get: function get() { return _TypeInfo.TypeInfo; } }); var _isValidJSValue = __webpack_require__(33); Object.defineProperty(exports, 'isValidJSValue', { enumerable: true, get: function get() { return _isValidJSValue.isValidJSValue; } }); var _isValidLiteralValue = __webpack_require__(18); Object.defineProperty(exports, 'isValidLiteralValue', { enumerable: true, get: function get() { return _isValidLiteralValue.isValidLiteralValue; } }); var _concatAST = __webpack_require__(46); Object.defineProperty(exports, 'concatAST', { enumerable: true, get: function get() { return _concatAST.concatAST; } }); var _separateOperations = __webpack_require__(54); Object.defineProperty(exports, 'separateOperations', { enumerable: true, get: function get() { return _separateOperations.separateOperations; } }); var _typeComparators = __webpack_require__(19); Object.defineProperty(exports, 'isEqualType', { enumerable: true, get: function get() { return _typeComparators.isEqualType; } }); Object.defineProperty(exports, 'isTypeSubTypeOf', { enumerable: true, get: function get() { return _typeComparators.isTypeSubTypeOf; } }); Object.defineProperty(exports, 'doTypesOverlap', { enumerable: true, get: function get() { return _typeComparators.doTypesOverlap; } }); var _assertValidName = __webpack_require__(28); Object.defineProperty(exports, 'assertValidName', { enumerable: true, get: function get() { return _assertValidName.assertValidName; } }); var _findBreakingChanges = __webpack_require__(48); Object.defineProperty(exports, 'findBreakingChanges', { enumerable: true, get: function get() { return _findBreakingChanges.findBreakingChanges; } }); var _findDeprecatedUsages = __webpack_require__(49); Object.defineProperty(exports, 'findDeprecatedUsages', { enumerable: true, get: function get() { return _findDeprecatedUsages.findDeprecatedUsages; } }); /***/ }), /* 52 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var introspectionQuery = exports.introspectionQuery = '\n query IntrospectionQuery {\n __schema {\n queryType { name }\n mutationType { name }\n subscriptionType { name }\n types {\n ...FullType\n }\n directives {\n name\n description\n locations\n args {\n ...InputValue\n }\n }\n }\n }\n\n fragment FullType on __Type {\n kind\n name\n description\n fields(includeDeprecated: true) {\n name\n description\n args {\n ...InputValue\n }\n type {\n ...TypeRef\n }\n isDeprecated\n deprecationReason\n }\n inputFields {\n ...InputValue\n }\n interfaces {\n ...TypeRef\n }\n enumValues(includeDeprecated: true) {\n name\n description\n isDeprecated\n deprecationReason\n }\n possibleTypes {\n ...TypeRef\n }\n }\n\n fragment InputValue on __InputValue {\n name\n description\n type { ...TypeRef }\n defaultValue\n }\n\n fragment TypeRef on __Type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n }\n'; /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /***/ }), /* 53 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.printSchema = printSchema; exports.printIntrospectionSchema = printIntrospectionSchema; exports.printType = printType; var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _isNullish = __webpack_require__(6); var _isNullish2 = _interopRequireDefault(_isNullish); var _isInvalid = __webpack_require__(14); var _isInvalid2 = _interopRequireDefault(_isInvalid); var _astFromValue = __webpack_require__(29); var _printer = __webpack_require__(4); var _definition = __webpack_require__(1); var _scalars = __webpack_require__(7); var _directives = __webpack_require__(5); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function printSchema(schema) { return printFilteredSchema(schema, function (n) { return !isSpecDirective(n); }, isDefinedType); } function printIntrospectionSchema(schema) { return printFilteredSchema(schema, isSpecDirective, isIntrospectionType); } function isSpecDirective(directiveName) { return directiveName === 'skip' || directiveName === 'include' || directiveName === 'deprecated'; } function isDefinedType(typename) { return !isIntrospectionType(typename) && !isBuiltInScalar(typename); } function isIntrospectionType(typename) { return typename.indexOf('__') === 0; } function isBuiltInScalar(typename) { return typename === 'String' || typename === 'Boolean' || typename === 'Int' || typename === 'Float' || typename === 'ID'; } function printFilteredSchema(schema, directiveFilter, typeFilter) { var directives = schema.getDirectives().filter(function (directive) { return directiveFilter(directive.name); }); var typeMap = schema.getTypeMap(); var types = Object.keys(typeMap).filter(typeFilter).sort(function (name1, name2) { return name1.localeCompare(name2); }).map(function (typeName) { return typeMap[typeName]; }); return [printSchemaDefinition(schema)].concat(directives.map(printDirective), types.map(printType)).filter(Boolean).join('\n\n') + '\n'; } function printSchemaDefinition(schema) { if (isSchemaOfCommonNames(schema)) { return; } var operationTypes = []; var queryType = schema.getQueryType(); if (queryType) { operationTypes.push(' query: ' + queryType.name); } var mutationType = schema.getMutationType(); if (mutationType) { operationTypes.push(' mutation: ' + mutationType.name); } var subscriptionType = schema.getSubscriptionType(); if (subscriptionType) { operationTypes.push(' subscription: ' + subscriptionType.name); } return 'schema {\n' + operationTypes.join('\n') + '\n}'; } /** * GraphQL schema define root types for each type of operation. These types are * the same as any other type and can be named in any manner, however there is * a common naming convention: * * schema { * query: Query * mutation: Mutation * } * * When using this naming convention, the schema description can be omitted. */ function isSchemaOfCommonNames(schema) { var queryType = schema.getQueryType(); if (queryType && queryType.name !== 'Query') { return false; } var mutationType = schema.getMutationType(); if (mutationType && mutationType.name !== 'Mutation') { return false; } var subscriptionType = schema.getSubscriptionType(); if (subscriptionType && subscriptionType.name !== 'Subscription') { return false; } return true; } function printType(type) { if (type instanceof _definition.GraphQLScalarType) { return printScalar(type); } else if (type instanceof _definition.GraphQLObjectType) { return printObject(type); } else if (type instanceof _definition.GraphQLInterfaceType) { return printInterface(type); } else if (type instanceof _definition.GraphQLUnionType) { return printUnion(type); } else if (type instanceof _definition.GraphQLEnumType) { return printEnum(type); } (0, _invariant2.default)(type instanceof _definition.GraphQLInputObjectType); return printInputObject(type); } function printScalar(type) { return printDescription(type) + ('scalar ' + type.name); } function printObject(type) { var interfaces = type.getInterfaces(); var implementedInterfaces = interfaces.length ? ' implements ' + interfaces.map(function (i) { return i.name; }).join(', ') : ''; return printDescription(type) + ('type ' + type.name + implementedInterfaces + ' {\n') + printFields(type) + '\n' + '}'; } function printInterface(type) { return printDescription(type) + ('interface ' + type.name + ' {\n') + printFields(type) + '\n' + '}'; } function printUnion(type) { return printDescription(type) + ('union ' + type.name + ' = ' + type.getTypes().join(' | ')); } function printEnum(type) { return printDescription(type) + ('enum ' + type.name + ' {\n') + printEnumValues(type.getValues()) + '\n' + '}'; } function printEnumValues(values) { return values.map(function (value, i) { return printDescription(value, ' ', !i) + ' ' + value.name + printDeprecated(value); }).join('\n'); } function printInputObject(type) { var fieldMap = type.getFields(); var fields = Object.keys(fieldMap).map(function (fieldName) { return fieldMap[fieldName]; }); return printDescription(type) + ('input ' + type.name + ' {\n') + fields.map(function (f, i) { return printDescription(f, ' ', !i) + ' ' + printInputValue(f); }).join('\n') + '\n' + '}'; } function printFields(type) { var fieldMap = type.getFields(); var fields = Object.keys(fieldMap).map(function (fieldName) { return fieldMap[fieldName]; }); return fields.map(function (f, i) { return printDescription(f, ' ', !i) + ' ' + f.name + printArgs(f.args, ' ') + ': ' + String(f.type) + printDeprecated(f); }).join('\n'); } function printArgs(args) { var indentation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; if (args.length === 0) { return ''; } // If every arg does not have a description, print them on one line. if (args.every(function (arg) { return !arg.description; })) { return '(' + args.map(printInputValue).join(', ') + ')'; } return '(\n' + args.map(function (arg, i) { return printDescription(arg, ' ' + indentation, !i) + ' ' + indentation + printInputValue(arg); }).join('\n') + '\n' + indentation + ')'; } function printInputValue(arg) { var argDecl = arg.name + ': ' + String(arg.type); if (!(0, _isInvalid2.default)(arg.defaultValue)) { argDecl += ' = ' + (0, _printer.print)((0, _astFromValue.astFromValue)(arg.defaultValue, arg.type)); } return argDecl; } function printDirective(directive) { return printDescription(directive) + 'directive @' + directive.name + printArgs(directive.args) + ' on ' + directive.locations.join(' | '); } function printDeprecated(fieldOrEnumVal) { var reason = fieldOrEnumVal.deprecationReason; if ((0, _isNullish2.default)(reason)) { return ''; } if (reason === '' || reason === _directives.DEFAULT_DEPRECATION_REASON) { return ' @deprecated'; } return ' @deprecated(reason: ' + (0, _printer.print)((0, _astFromValue.astFromValue)(reason, _scalars.GraphQLString)) + ')'; } function printDescription(def) { var indentation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var firstInBlock = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; if (!def.description) { return ''; } var lines = def.description.split('\n'); var description = indentation && !firstInBlock ? '\n' : ''; for (var i = 0; i < lines.length; i++) { if (lines[i] === '') { description += indentation + '#\n'; } else { // For > 120 character long lines, cut at space boundaries into sublines // of ~80 chars. var sublines = breakLine(lines[i], 120 - indentation.length); for (var j = 0; j < sublines.length; j++) { description += indentation + '# ' + sublines[j] + '\n'; } } } return description; } function breakLine(line, len) { if (line.length < len + 5) { return [line]; } var parts = line.split(new RegExp('((?: |^).{15,' + (len - 40) + '}(?= |$))')); if (parts.length < 4) { return [line]; } var sublines = [parts[0] + parts[1] + parts[2]]; for (var i = 3; i < parts.length; i += 2) { sublines.push(parts[i].slice(1) + parts[i + 1]); } return sublines; } /***/ }), /* 54 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.separateOperations = separateOperations; var _visitor = __webpack_require__(15); /** * separateOperations accepts a single AST document which may contain many * operations and fragments and returns a collection of AST documents each of * which contains a single operation as well the fragment definitions it * refers to. */ function separateOperations(documentAST) { var operations = []; var depGraph = Object.create(null); var fromName = void 0; // Populate the list of operations and build a dependency graph. (0, _visitor.visit)(documentAST, { OperationDefinition: function OperationDefinition(node) { operations.push(node); fromName = opName(node); }, FragmentDefinition: function FragmentDefinition(node) { fromName = node.name.value; }, FragmentSpread: function FragmentSpread(node) { var toName = node.name.value; (depGraph[fromName] || (depGraph[fromName] = Object.create(null)))[toName] = true; } }); // For each operation, produce a new synthesized AST which includes only what // is necessary for completing that operation. var separatedDocumentASTs = Object.create(null); operations.forEach(function (operation) { var operationName = opName(operation); var dependencies = Object.create(null); collectTransitiveDependencies(dependencies, depGraph, operationName); separatedDocumentASTs[operationName] = { kind: 'Document', definitions: documentAST.definitions.filter(function (def) { return def === operation || def.kind === 'FragmentDefinition' && dependencies[def.name.value]; }) }; }); return separatedDocumentASTs; } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ // Provides the empty string for anonymous operations. function opName(operation) { return operation.name ? operation.name.value : ''; } // From a dependency graph, collects a list of transitive dependencies by // recursing through a dependency graph. function collectTransitiveDependencies(collected, depGraph, fromName) { var immediateDeps = depGraph[fromName]; if (immediateDeps) { Object.keys(immediateDeps).forEach(function (toName) { if (!collected[toName]) { collected[toName] = true; collectTransitiveDependencies(collected, depGraph, toName); } }); } } /***/ }), /* 55 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _validate = __webpack_require__(35); Object.defineProperty(exports, 'validate', { enumerable: true, get: function get() { return _validate.validate; } }); Object.defineProperty(exports, 'ValidationContext', { enumerable: true, get: function get() { return _validate.ValidationContext; } }); var _specifiedRules = __webpack_require__(34); Object.defineProperty(exports, 'specifiedRules', { enumerable: true, get: function get() { return _specifiedRules.specifiedRules; } }); /***/ }), /* 56 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.badValueMessage = badValueMessage; exports.ArgumentsOfCorrectType = ArgumentsOfCorrectType; var _error = __webpack_require__(0); var _printer = __webpack_require__(4); var _isValidLiteralValue = __webpack_require__(18); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function badValueMessage(argName, type, value, verboseErrors) { var message = verboseErrors ? '\n' + verboseErrors.join('\n') : ''; return 'Argument "' + argName + '" has invalid value ' + value + '.' + message; } /** * Argument values of correct type * * A GraphQL document is only valid if all field argument literal values are * of the type expected by their position. */ function ArgumentsOfCorrectType(context) { return { Argument: function Argument(node) { var argDef = context.getArgument(); if (argDef) { var errors = (0, _isValidLiteralValue.isValidLiteralValue)(argDef.type, node.value); if (errors && errors.length > 0) { context.reportError(new _error.GraphQLError(badValueMessage(node.name.value, argDef.type, (0, _printer.print)(node.value), errors), [node.value])); } } return false; } }; } /***/ }), /* 57 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultForNonNullArgMessage = defaultForNonNullArgMessage; exports.badValueForDefaultArgMessage = badValueForDefaultArgMessage; exports.DefaultValuesOfCorrectType = DefaultValuesOfCorrectType; var _error = __webpack_require__(0); var _printer = __webpack_require__(4); var _definition = __webpack_require__(1); var _isValidLiteralValue = __webpack_require__(18); function defaultForNonNullArgMessage(varName, type, guessType) { return 'Variable "$' + varName + '" of type "' + String(type) + '" is required and ' + 'will not use the default value. ' + ('Perhaps you meant to use type "' + String(guessType) + '".'); } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function badValueForDefaultArgMessage(varName, type, value, verboseErrors) { var message = verboseErrors ? '\n' + verboseErrors.join('\n') : ''; return 'Variable "$' + varName + '" of type "' + String(type) + '" has invalid ' + ('default value ' + value + '.' + message); } /** * Variable default values of correct type * * A GraphQL document is only valid if all variable default values are of the * type expected by their definition. */ function DefaultValuesOfCorrectType(context) { return { VariableDefinition: function VariableDefinition(node) { var name = node.variable.name.value; var defaultValue = node.defaultValue; var type = context.getInputType(); if (type instanceof _definition.GraphQLNonNull && defaultValue) { context.reportError(new _error.GraphQLError(defaultForNonNullArgMessage(name, type, type.ofType), [defaultValue])); } if (type && defaultValue) { var errors = (0, _isValidLiteralValue.isValidLiteralValue)(type, defaultValue); if (errors && errors.length > 0) { context.reportError(new _error.GraphQLError(badValueForDefaultArgMessage(name, type, (0, _printer.print)(defaultValue), errors), [defaultValue])); } } return false; }, SelectionSet: function SelectionSet() { return false; }, FragmentDefinition: function FragmentDefinition() { return false; } }; } /***/ }), /* 58 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.undefinedFieldMessage = undefinedFieldMessage; exports.FieldsOnCorrectType = FieldsOnCorrectType; var _error = __webpack_require__(0); var _suggestionList = __webpack_require__(23); var _suggestionList2 = _interopRequireDefault(_suggestionList); var _quotedOrList = __webpack_require__(22); var _quotedOrList2 = _interopRequireDefault(_quotedOrList); var _definition = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function undefinedFieldMessage(fieldName, type, suggestedTypeNames, suggestedFieldNames) { var message = 'Cannot query field "' + fieldName + '" on type "' + type + '".'; if (suggestedTypeNames.length !== 0) { var suggestions = (0, _quotedOrList2.default)(suggestedTypeNames); message += ' Did you mean to use an inline fragment on ' + suggestions + '?'; } else if (suggestedFieldNames.length !== 0) { message += ' Did you mean ' + (0, _quotedOrList2.default)(suggestedFieldNames) + '?'; } return message; } /** * Fields on correct type * * A GraphQL document is only valid if all fields selected are defined by the * parent type, or are an allowed meta field such as __typename. */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function FieldsOnCorrectType(context) { return { Field: function Field(node) { var type = context.getParentType(); if (type) { var fieldDef = context.getFieldDef(); if (!fieldDef) { // This field doesn't exist, lets look for suggestions. var schema = context.getSchema(); var fieldName = node.name.value; // First determine if there are any suggested types to condition on. var suggestedTypeNames = getSuggestedTypeNames(schema, type, fieldName); // If there are no suggested types, then perhaps this was a typo? var suggestedFieldNames = suggestedTypeNames.length !== 0 ? [] : getSuggestedFieldNames(schema, type, fieldName); // Report an error, including helpful suggestions. context.reportError(new _error.GraphQLError(undefinedFieldMessage(fieldName, type.name, suggestedTypeNames, suggestedFieldNames), [node])); } } } }; } /** * Go through all of the implementations of type, as well as the interfaces * that they implement. If any of those types include the provided field, * suggest them, sorted by how often the type is referenced, starting * with Interfaces. */ function getSuggestedTypeNames(schema, type, fieldName) { if (type instanceof _definition.GraphQLInterfaceType || type instanceof _definition.GraphQLUnionType) { var _ret = function () { var suggestedObjectTypes = []; var interfaceUsageCount = Object.create(null); schema.getPossibleTypes(type).forEach(function (possibleType) { if (!possibleType.getFields()[fieldName]) { return; } // This object type defines this field. suggestedObjectTypes.push(possibleType.name); possibleType.getInterfaces().forEach(function (possibleInterface) { if (!possibleInterface.getFields()[fieldName]) { return; } // This interface type defines this field. interfaceUsageCount[possibleInterface.name] = (interfaceUsageCount[possibleInterface.name] || 0) + 1; }); }); // Suggest interface types based on how common they are. var suggestedInterfaceTypes = Object.keys(interfaceUsageCount).sort(function (a, b) { return interfaceUsageCount[b] - interfaceUsageCount[a]; }); // Suggest both interface and object types. return { v: suggestedInterfaceTypes.concat(suggestedObjectTypes) }; }(); if (typeof _ret === "object") return _ret.v; } // Otherwise, must be an Object type, which does not have possible fields. return []; } /** * For the field name provided, determine if there are any similar field names * that may be the result of a typo. */ function getSuggestedFieldNames(schema, type, fieldName) { if (type instanceof _definition.GraphQLObjectType || type instanceof _definition.GraphQLInterfaceType) { var possibleFieldNames = Object.keys(type.getFields()); return (0, _suggestionList2.default)(fieldName, possibleFieldNames); } // Otherwise, must be a Union type, which does not define fields. return []; } /***/ }), /* 59 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.inlineFragmentOnNonCompositeErrorMessage = inlineFragmentOnNonCompositeErrorMessage; exports.fragmentOnNonCompositeErrorMessage = fragmentOnNonCompositeErrorMessage; exports.FragmentsOnCompositeTypes = FragmentsOnCompositeTypes; var _error = __webpack_require__(0); var _printer = __webpack_require__(4); var _definition = __webpack_require__(1); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function inlineFragmentOnNonCompositeErrorMessage(type) { return 'Fragment cannot condition on non composite type "' + String(type) + '".'; } function fragmentOnNonCompositeErrorMessage(fragName, type) { return 'Fragment "' + fragName + '" cannot condition on non composite ' + ('type "' + String(type) + '".'); } /** * Fragments on composite type * * Fragments use a type condition to determine if they apply, since fragments * can only be spread into a composite type (object, interface, or union), the * type condition must also be a composite type. */ function FragmentsOnCompositeTypes(context) { return { InlineFragment: function InlineFragment(node) { var type = context.getType(); if (node.typeCondition && type && !(0, _definition.isCompositeType)(type)) { context.reportError(new _error.GraphQLError(inlineFragmentOnNonCompositeErrorMessage((0, _printer.print)(node.typeCondition)), [node.typeCondition])); } }, FragmentDefinition: function FragmentDefinition(node) { var type = context.getType(); if (type && !(0, _definition.isCompositeType)(type)) { context.reportError(new _error.GraphQLError(fragmentOnNonCompositeErrorMessage(node.name.value, (0, _printer.print)(node.typeCondition)), [node.typeCondition])); } } }; } /***/ }), /* 60 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.unknownArgMessage = unknownArgMessage; exports.unknownDirectiveArgMessage = unknownDirectiveArgMessage; exports.KnownArgumentNames = KnownArgumentNames; var _error = __webpack_require__(0); var _find = __webpack_require__(10); var _find2 = _interopRequireDefault(_find); var _invariant = __webpack_require__(3); var _invariant2 = _interopRequireDefault(_invariant); var _suggestionList = __webpack_require__(23); var _suggestionList2 = _interopRequireDefault(_suggestionList); var _quotedOrList = __webpack_require__(22); var _quotedOrList2 = _interopRequireDefault(_quotedOrList); var _kinds = __webpack_require__(2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function unknownArgMessage(argName, fieldName, type, suggestedArgs) { var message = 'Unknown argument "' + argName + '" on field "' + fieldName + '" of ' + ('type "' + String(type) + '".'); if (suggestedArgs.length) { message += ' Did you mean ' + (0, _quotedOrList2.default)(suggestedArgs) + '?'; } return message; } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function unknownDirectiveArgMessage(argName, directiveName, suggestedArgs) { var message = 'Unknown argument "' + argName + '" on directive "@' + directiveName + '".'; if (suggestedArgs.length) { message += ' Did you mean ' + (0, _quotedOrList2.default)(suggestedArgs) + '?'; } return message; } /** * Known argument names * * A GraphQL field is only valid if all supplied arguments are defined by * that field. */ function KnownArgumentNames(context) { return { Argument: function Argument(node, key, parent, path, ancestors) { var argumentOf = ancestors[ancestors.length - 1]; if (argumentOf.kind === _kinds.FIELD) { var fieldDef = context.getFieldDef(); if (fieldDef) { var fieldArgDef = (0, _find2.default)(fieldDef.args, function (arg) { return arg.name === node.name.value; }); if (!fieldArgDef) { var parentType = context.getParentType(); (0, _invariant2.default)(parentType); context.reportError(new _error.GraphQLError(unknownArgMessage(node.name.value, fieldDef.name, parentType.name, (0, _suggestionList2.default)(node.name.value, fieldDef.args.map(function (arg) { return arg.name; }))), [node])); } } } else if (argumentOf.kind === _kinds.DIRECTIVE) { var directive = context.getDirective(); if (directive) { var directiveArgDef = (0, _find2.default)(directive.args, function (arg) { return arg.name === node.name.value; }); if (!directiveArgDef) { context.reportError(new _error.GraphQLError(unknownDirectiveArgMessage(node.name.value, directive.name, (0, _suggestionList2.default)(node.name.value, directive.args.map(function (arg) { return arg.name; }))), [node])); } } } } }; } /***/ }), /* 61 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.unknownDirectiveMessage = unknownDirectiveMessage; exports.misplacedDirectiveMessage = misplacedDirectiveMessage; exports.KnownDirectives = KnownDirectives; var _error = __webpack_require__(0); var _find = __webpack_require__(10); var _find2 = _interopRequireDefault(_find); var _kinds = __webpack_require__(2); var _directives = __webpack_require__(5); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function unknownDirectiveMessage(directiveName) { return 'Unknown directive "' + directiveName + '".'; } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function misplacedDirectiveMessage(directiveName, location) { return 'Directive "' + directiveName + '" may not be used on ' + location + '.'; } /** * Known directives * * A GraphQL document is only valid if all `@directives` are known by the * schema and legally positioned. */ function KnownDirectives(context) { return { Directive: function Directive(node, key, parent, path, ancestors) { var directiveDef = (0, _find2.default)(context.getSchema().getDirectives(), function (def) { return def.name === node.name.value; }); if (!directiveDef) { context.reportError(new _error.GraphQLError(unknownDirectiveMessage(node.name.value), [node])); return; } var candidateLocation = getDirectiveLocationForASTPath(ancestors); if (!candidateLocation) { context.reportError(new _error.GraphQLError(misplacedDirectiveMessage(node.name.value, node.type), [node])); } else if (directiveDef.locations.indexOf(candidateLocation) === -1) { context.reportError(new _error.GraphQLError(misplacedDirectiveMessage(node.name.value, candidateLocation), [node])); } } }; } function getDirectiveLocationForASTPath(ancestors) { var appliedTo = ancestors[ancestors.length - 1]; switch (appliedTo.kind) { case _kinds.OPERATION_DEFINITION: switch (appliedTo.operation) { case 'query': return _directives.DirectiveLocation.QUERY; case 'mutation': return _directives.DirectiveLocation.MUTATION; case 'subscription': return _directives.DirectiveLocation.SUBSCRIPTION; } break; case _kinds.FIELD: return _directives.DirectiveLocation.FIELD; case _kinds.FRAGMENT_SPREAD: return _directives.DirectiveLocation.FRAGMENT_SPREAD; case _kinds.INLINE_FRAGMENT: return _directives.DirectiveLocation.INLINE_FRAGMENT; case _kinds.FRAGMENT_DEFINITION: return _directives.DirectiveLocation.FRAGMENT_DEFINITION; case _kinds.SCHEMA_DEFINITION: return _directives.DirectiveLocation.SCHEMA; case _kinds.SCALAR_TYPE_DEFINITION: return _directives.DirectiveLocation.SCALAR; case _kinds.OBJECT_TYPE_DEFINITION: return _directives.DirectiveLocation.OBJECT; case _kinds.FIELD_DEFINITION: return _directives.DirectiveLocation.FIELD_DEFINITION; case _kinds.INTERFACE_TYPE_DEFINITION: return _directives.DirectiveLocation.INTERFACE; case _kinds.UNION_TYPE_DEFINITION: return _directives.DirectiveLocation.UNION; case _kinds.ENUM_TYPE_DEFINITION: return _directives.DirectiveLocation.ENUM; case _kinds.ENUM_VALUE_DEFINITION: return _directives.DirectiveLocation.ENUM_VALUE; case _kinds.INPUT_OBJECT_TYPE_DEFINITION: return _directives.DirectiveLocation.INPUT_OBJECT; case _kinds.INPUT_VALUE_DEFINITION: var parentNode = ancestors[ancestors.length - 3]; return parentNode.kind === _kinds.INPUT_OBJECT_TYPE_DEFINITION ? _directives.DirectiveLocation.INPUT_FIELD_DEFINITION : _directives.DirectiveLocation.ARGUMENT_DEFINITION; } } /***/ }), /* 62 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.unknownFragmentMessage = unknownFragmentMessage; exports.KnownFragmentNames = KnownFragmentNames; var _error = __webpack_require__(0); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function unknownFragmentMessage(fragName) { return 'Unknown fragment "' + fragName + '".'; } /** * Known fragment names * * A GraphQL document is only valid if all `...Fragment` fragment spreads refer * to fragments defined in the same document. */ function KnownFragmentNames(context) { return { FragmentSpread: function FragmentSpread(node) { var fragmentName = node.name.value; var fragment = context.getFragment(fragmentName); if (!fragment) { context.reportError(new _error.GraphQLError(unknownFragmentMessage(fragmentName), [node.name])); } } }; } /***/ }), /* 63 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.unknownTypeMessage = unknownTypeMessage; exports.KnownTypeNames = KnownTypeNames; var _error = __webpack_require__(0); var _suggestionList = __webpack_require__(23); var _suggestionList2 = _interopRequireDefault(_suggestionList); var _quotedOrList = __webpack_require__(22); var _quotedOrList2 = _interopRequireDefault(_quotedOrList); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function unknownTypeMessage(type, suggestedTypes) { var message = 'Unknown type "' + String(type) + '".'; if (suggestedTypes.length) { message += ' Did you mean ' + (0, _quotedOrList2.default)(suggestedTypes) + '?'; } return message; } /** * Known type names * * A GraphQL document is only valid if referenced types (specifically * variable definitions and fragment conditions) are defined by the type schema. */ function KnownTypeNames(context) { return { // TODO: when validating IDL, re-enable these. Experimental version does not // add unreferenced types, resulting in false-positive errors. Squelched // errors for now. ObjectTypeDefinition: function ObjectTypeDefinition() { return false; }, InterfaceTypeDefinition: function InterfaceTypeDefinition() { return false; }, UnionTypeDefinition: function UnionTypeDefinition() { return false; }, InputObjectTypeDefinition: function InputObjectTypeDefinition() { return false; }, NamedType: function NamedType(node) { var schema = context.getSchema(); var typeName = node.name.value; var type = schema.getType(typeName); if (!type) { context.reportError(new _error.GraphQLError(unknownTypeMessage(typeName, (0, _suggestionList2.default)(typeName, Object.keys(schema.getTypeMap()))), [node])); } } }; } /***/ }), /* 64 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.anonOperationNotAloneMessage = anonOperationNotAloneMessage; exports.LoneAnonymousOperation = LoneAnonymousOperation; var _error = __webpack_require__(0); var _kinds = __webpack_require__(2); function anonOperationNotAloneMessage() { return 'This anonymous operation must be the only defined operation.'; } /** * Lone anonymous operation * * A GraphQL document is only valid if when it contains an anonymous operation * (the query short-hand) that it contains only that one operation definition. */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function LoneAnonymousOperation(context) { var operationCount = 0; return { Document: function Document(node) { operationCount = node.definitions.filter(function (definition) { return definition.kind === _kinds.OPERATION_DEFINITION; }).length; }, OperationDefinition: function OperationDefinition(node) { if (!node.name && operationCount > 1) { context.reportError(new _error.GraphQLError(anonOperationNotAloneMessage(), [node])); } } }; } /***/ }), /* 65 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.cycleErrorMessage = cycleErrorMessage; exports.NoFragmentCycles = NoFragmentCycles; var _error = __webpack_require__(0); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function cycleErrorMessage(fragName, spreadNames) { var via = spreadNames.length ? ' via ' + spreadNames.join(', ') : ''; return 'Cannot spread fragment "' + fragName + '" within itself' + via + '.'; } function NoFragmentCycles(context) { // Tracks already visited fragments to maintain O(N) and to ensure that cycles // are not redundantly reported. var visitedFrags = Object.create(null); // Array of AST nodes used to produce meaningful errors var spreadPath = []; // Position in the spread path var spreadPathIndexByName = Object.create(null); return { OperationDefinition: function OperationDefinition() { return false; }, FragmentDefinition: function FragmentDefinition(node) { if (!visitedFrags[node.name.value]) { detectCycleRecursive(node); } return false; } }; // This does a straight-forward DFS to find cycles. // It does not terminate when a cycle was found but continues to explore // the graph to find all possible cycles. function detectCycleRecursive(fragment) { var fragmentName = fragment.name.value; visitedFrags[fragmentName] = true; var spreadNodes = context.getFragmentSpreads(fragment.selectionSet); if (spreadNodes.length === 0) { return; } spreadPathIndexByName[fragmentName] = spreadPath.length; for (var i = 0; i < spreadNodes.length; i++) { var spreadNode = spreadNodes[i]; var spreadName = spreadNode.name.value; var cycleIndex = spreadPathIndexByName[spreadName]; if (cycleIndex === undefined) { spreadPath.push(spreadNode); if (!visitedFrags[spreadName]) { var spreadFragment = context.getFragment(spreadName); if (spreadFragment) { detectCycleRecursive(spreadFragment); } } spreadPath.pop(); } else { var cyclePath = spreadPath.slice(cycleIndex); context.reportError(new _error.GraphQLError(cycleErrorMessage(spreadName, cyclePath.map(function (s) { return s.name.value; })), cyclePath.concat(spreadNode))); } } spreadPathIndexByName[fragmentName] = undefined; } } /***/ }), /* 66 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.undefinedVarMessage = undefinedVarMessage; exports.NoUndefinedVariables = NoUndefinedVariables; var _error = __webpack_require__(0); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function undefinedVarMessage(varName, opName) { return opName ? 'Variable "$' + varName + '" is not defined by operation "' + opName + '".' : 'Variable "$' + varName + '" is not defined.'; } /** * No undefined variables * * A GraphQL operation is only valid if all variables encountered, both directly * and via fragment spreads, are defined by that operation. */ function NoUndefinedVariables(context) { var variableNameDefined = Object.create(null); return { OperationDefinition: { enter: function enter() { variableNameDefined = Object.create(null); }, leave: function leave(operation) { var usages = context.getRecursiveVariableUsages(operation); usages.forEach(function (_ref) { var node = _ref.node; var varName = node.name.value; if (variableNameDefined[varName] !== true) { context.reportError(new _error.GraphQLError(undefinedVarMessage(varName, operation.name && operation.name.value), [node, operation])); } }); } }, VariableDefinition: function VariableDefinition(node) { variableNameDefined[node.variable.name.value] = true; } }; } /***/ }), /* 67 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.unusedFragMessage = unusedFragMessage; exports.NoUnusedFragments = NoUnusedFragments; var _error = __webpack_require__(0); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function unusedFragMessage(fragName) { return 'Fragment "' + fragName + '" is never used.'; } /** * No unused fragments * * A GraphQL document is only valid if all fragment definitions are spread * within operations, or spread within other fragments spread within operations. */ function NoUnusedFragments(context) { var operationDefs = []; var fragmentDefs = []; return { OperationDefinition: function OperationDefinition(node) { operationDefs.push(node); return false; }, FragmentDefinition: function FragmentDefinition(node) { fragmentDefs.push(node); return false; }, Document: { leave: function leave() { var fragmentNameUsed = Object.create(null); operationDefs.forEach(function (operation) { context.getRecursivelyReferencedFragments(operation).forEach(function (fragment) { fragmentNameUsed[fragment.name.value] = true; }); }); fragmentDefs.forEach(function (fragmentDef) { var fragName = fragmentDef.name.value; if (fragmentNameUsed[fragName] !== true) { context.reportError(new _error.GraphQLError(unusedFragMessage(fragName), [fragmentDef])); } }); } } }; } /***/ }), /* 68 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.unusedVariableMessage = unusedVariableMessage; exports.NoUnusedVariables = NoUnusedVariables; var _error = __webpack_require__(0); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function unusedVariableMessage(varName, opName) { return opName ? 'Variable "$' + varName + '" is never used in operation "' + opName + '".' : 'Variable "$' + varName + '" is never used.'; } /** * No unused variables * * A GraphQL operation is only valid if all variables defined by an operation * are used, either directly or within a spread fragment. */ function NoUnusedVariables(context) { var variableDefs = []; return { OperationDefinition: { enter: function enter() { variableDefs = []; }, leave: function leave(operation) { var variableNameUsed = Object.create(null); var usages = context.getRecursiveVariableUsages(operation); var opName = operation.name ? operation.name.value : null; usages.forEach(function (_ref) { var node = _ref.node; variableNameUsed[node.name.value] = true; }); variableDefs.forEach(function (variableDef) { var variableName = variableDef.variable.name.value; if (variableNameUsed[variableName] !== true) { context.reportError(new _error.GraphQLError(unusedVariableMessage(variableName, opName), [variableDef])); } }); } }, VariableDefinition: function VariableDefinition(def) { variableDefs.push(def); } }; } /***/ }), /* 69 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fieldsConflictMessage = fieldsConflictMessage; exports.OverlappingFieldsCanBeMerged = OverlappingFieldsCanBeMerged; var _error = __webpack_require__(0); var _find = __webpack_require__(10); var _find2 = _interopRequireDefault(_find); var _kinds = __webpack_require__(2); var _printer = __webpack_require__(4); var _definition = __webpack_require__(1); var _typeFromAST = __webpack_require__(9); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function fieldsConflictMessage(responseName, reason) { return 'Fields "' + responseName + '" conflict because ' + reasonMessage(reason) + '. Use different aliases on the fields to fetch both if this was ' + 'intentional.'; } function reasonMessage(reason) { if (Array.isArray(reason)) { return reason.map(function (_ref) { var responseName = _ref[0], subreason = _ref[1]; return 'subfields "' + responseName + '" conflict because ' + reasonMessage(subreason); }).join(' and '); } return reason; } /** * Overlapping fields can be merged * * A selection set is only valid if all fields (including spreading any * fragments) either correspond to distinct response names or can be merged * without ambiguity. */ function OverlappingFieldsCanBeMerged(context) { // A memoization for when two fragments are compared "between" each other for // conflicts. Two fragments may be compared many times, so memoizing this can // dramatically improve the performance of this validator. var comparedFragments = new PairSet(); // A cache for the "field map" and list of fragment names found in any given // selection set. Selection sets may be asked for this information multiple // times, so this improves the performance of this validator. var cachedFieldsAndFragmentNames = new Map(); return { SelectionSet: function SelectionSet(selectionSet) { var conflicts = findConflictsWithinSelectionSet(context, cachedFieldsAndFragmentNames, comparedFragments, context.getParentType(), selectionSet); conflicts.forEach(function (_ref2) { var _ref2$ = _ref2[0], responseName = _ref2$[0], reason = _ref2$[1], fields1 = _ref2[1], fields2 = _ref2[2]; return context.reportError(new _error.GraphQLError(fieldsConflictMessage(responseName, reason), fields1.concat(fields2))); }); } }; } // Field name and reason. // Reason is a string, or a nested list of conflicts. // Tuple defining a field node in a context. // Map of array of those. /** * Algorithm: * * Conflicts occur when two fields exist in a query which will produce the same * response name, but represent differing values, thus creating a conflict. * The algorithm below finds all conflicts via making a series of comparisons * between fields. In order to compare as few fields as possible, this makes * a series of comparisons "within" sets of fields and "between" sets of fields. * * Given any selection set, a collection produces both a set of fields by * also including all inline fragments, as well as a list of fragments * referenced by fragment spreads. * * A) Each selection set represented in the document first compares "within" its * collected set of fields, finding any conflicts between every pair of * overlapping fields. * Note: This is the *only time* that a the fields "within" a set are compared * to each other. After this only fields "between" sets are compared. * * B) Also, if any fragment is referenced in a selection set, then a * comparison is made "between" the original set of fields and the * referenced fragment. * * C) Also, if multiple fragments are referenced, then comparisons * are made "between" each referenced fragment. * * D) When comparing "between" a set of fields and a referenced fragment, first * a comparison is made between each field in the original set of fields and * each field in the the referenced set of fields. * * E) Also, if any fragment is referenced in the referenced selection set, * then a comparison is made "between" the original set of fields and the * referenced fragment (recursively referring to step D). * * F) When comparing "between" two fragments, first a comparison is made between * each field in the first referenced set of fields and each field in the the * second referenced set of fields. * * G) Also, any fragments referenced by the first must be compared to the * second, and any fragments referenced by the second must be compared to the * first (recursively referring to step F). * * H) When comparing two fields, if both have selection sets, then a comparison * is made "between" both selection sets, first comparing the set of fields in * the first selection set with the set of fields in the second. * * I) Also, if any fragment is referenced in either selection set, then a * comparison is made "between" the other set of fields and the * referenced fragment. * * J) Also, if two fragments are referenced in both selection sets, then a * comparison is made "between" the two fragments. * */ // Find all conflicts found "within" a selection set, including those found // via spreading in fragments. Called when visiting each SelectionSet in the // GraphQL Document. function findConflictsWithinSelectionSet(context, cachedFieldsAndFragmentNames, comparedFragments, parentType, selectionSet) { var conflicts = []; var _getFieldsAndFragment = getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType, selectionSet), fieldMap = _getFieldsAndFragment[0], fragmentNames = _getFieldsAndFragment[1]; // (A) Find find all conflicts "within" the fields of this selection set. // Note: this is the *only place* `collectConflictsWithin` is called. collectConflictsWithin(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, fieldMap); // (B) Then collect conflicts between these fields and those represented by // each spread fragment name found. for (var i = 0; i < fragmentNames.length; i++) { collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, false, fieldMap, fragmentNames[i]); // (C) Then compare this fragment with all other fragments found in this // selection set to collect conflicts between fragments spread together. // This compares each item in the list of fragment names to every other item // in that same list (except for itself). for (var j = i + 1; j < fragmentNames.length; j++) { collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, false, fragmentNames[i], fragmentNames[j]); } } return conflicts; } // Collect all conflicts found between a set of fields and a fragment reference // including via spreading in any nested fragments. function collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, fieldMap, fragmentName) { var fragment = context.getFragment(fragmentName); if (!fragment) { return; } var _getReferencedFieldsA = getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment), fieldMap2 = _getReferencedFieldsA[0], fragmentNames2 = _getReferencedFieldsA[1]; // (D) First collect any conflicts between the provided collection of fields // and the collection of fields represented by the given fragment. collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, fieldMap, fieldMap2); // (E) Then collect any conflicts between the provided collection of fields // and any fragment names found in the given fragment. for (var i = 0; i < fragmentNames2.length; i++) { collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, fieldMap, fragmentNames2[i]); } } // Collect all conflicts found between two fragments, including via spreading in // any nested fragments. function collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, fragmentName1, fragmentName2) { var fragment1 = context.getFragment(fragmentName1); var fragment2 = context.getFragment(fragmentName2); if (!fragment1 || !fragment2) { return; } // No need to compare a fragment to itself. if (fragment1 === fragment2) { return; } // Memoize so two fragments are not compared for conflicts more than once. if (comparedFragments.has(fragmentName1, fragmentName2, areMutuallyExclusive)) { return; } comparedFragments.add(fragmentName1, fragmentName2, areMutuallyExclusive); var _getReferencedFieldsA2 = getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment1), fieldMap1 = _getReferencedFieldsA2[0], fragmentNames1 = _getReferencedFieldsA2[1]; var _getReferencedFieldsA3 = getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment2), fieldMap2 = _getReferencedFieldsA3[0], fragmentNames2 = _getReferencedFieldsA3[1]; // (F) First, collect all conflicts between these two collections of fields // (not including any nested fragments). collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, fieldMap1, fieldMap2); // (G) Then collect conflicts between the first fragment and any nested // fragments spread in the second fragment. for (var j = 0; j < fragmentNames2.length; j++) { collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, fragmentName1, fragmentNames2[j]); } // (G) Then collect conflicts between the second fragment and any nested // fragments spread in the first fragment. for (var i = 0; i < fragmentNames1.length; i++) { collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, fragmentNames1[i], fragmentName2); } } // Find all conflicts found between two selection sets, including those found // via spreading in fragments. Called when determining if conflicts exist // between the sub-fields of two overlapping fields. function findConflictsBetweenSubSelectionSets(context, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, parentType1, selectionSet1, parentType2, selectionSet2) { var conflicts = []; var _getFieldsAndFragment2 = getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType1, selectionSet1), fieldMap1 = _getFieldsAndFragment2[0], fragmentNames1 = _getFieldsAndFragment2[1]; var _getFieldsAndFragment3 = getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType2, selectionSet2), fieldMap2 = _getFieldsAndFragment3[0], fragmentNames2 = _getFieldsAndFragment3[1]; // (H) First, collect all conflicts between these two collections of field. collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, fieldMap1, fieldMap2); // (I) Then collect conflicts between the first collection of fields and // those referenced by each fragment name associated with the second. for (var j = 0; j < fragmentNames2.length; j++) { collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, fieldMap1, fragmentNames2[j]); } // (I) Then collect conflicts between the second collection of fields and // those referenced by each fragment name associated with the first. for (var i = 0; i < fragmentNames1.length; i++) { collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, fieldMap2, fragmentNames1[i]); } // (J) Also collect conflicts between any fragment names by the first and // fragment names by the second. This compares each item in the first set of // names to each item in the second set of names. for (var _i = 0; _i < fragmentNames1.length; _i++) { for (var _j = 0; _j < fragmentNames2.length; _j++) { collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, fragmentNames1[_i], fragmentNames2[_j]); } } return conflicts; } // Collect all Conflicts "within" one collection of fields. function collectConflictsWithin(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, fieldMap) { // A field map is a keyed collection, where each key represents a response // name and the value at that key is a list of all fields which provide that // response name. For every response name, if there are multiple fields, they // must be compared to find a potential conflict. Object.keys(fieldMap).forEach(function (responseName) { var fields = fieldMap[responseName]; // This compares every field in the list to every other field in this list // (except to itself). If the list only has one item, nothing needs to // be compared. if (fields.length > 1) { for (var i = 0; i < fields.length; i++) { for (var j = i + 1; j < fields.length; j++) { var conflict = findConflict(context, cachedFieldsAndFragmentNames, comparedFragments, false, // within one collection is never mutually exclusive responseName, fields[i], fields[j]); if (conflict) { conflicts.push(conflict); } } } } }); } // Collect all Conflicts between two collections of fields. This is similar to, // but different from the `collectConflictsWithin` function above. This check // assumes that `collectConflictsWithin` has already been called on each // provided collection of fields. This is true because this validator traverses // each individual selection set. function collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, parentFieldsAreMutuallyExclusive, fieldMap1, fieldMap2) { // A field map is a keyed collection, where each key represents a response // name and the value at that key is a list of all fields which provide that // response name. For any response name which appears in both provided field // maps, each field from the first field map must be compared to every field // in the second field map to find potential conflicts. Object.keys(fieldMap1).forEach(function (responseName) { var fields2 = fieldMap2[responseName]; if (fields2) { var fields1 = fieldMap1[responseName]; for (var i = 0; i < fields1.length; i++) { for (var j = 0; j < fields2.length; j++) { var conflict = findConflict(context, cachedFieldsAndFragmentNames, comparedFragments, parentFieldsAreMutuallyExclusive, responseName, fields1[i], fields2[j]); if (conflict) { conflicts.push(conflict); } } } } }); } // Determines if there is a conflict between two particular fields, including // comparing their sub-fields. function findConflict(context, cachedFieldsAndFragmentNames, comparedFragments, parentFieldsAreMutuallyExclusive, responseName, field1, field2) { var parentType1 = field1[0], node1 = field1[1], def1 = field1[2]; var parentType2 = field2[0], node2 = field2[1], def2 = field2[2]; // If it is known that two fields could not possibly apply at the same // time, due to the parent types, then it is safe to permit them to diverge // in aliased field or arguments used as they will not present any ambiguity // by differing. // It is known that two parent types could never overlap if they are // different Object types. Interface or Union types might overlap - if not // in the current state of the schema, then perhaps in some future version, // thus may not safely diverge. var areMutuallyExclusive = parentFieldsAreMutuallyExclusive || parentType1 !== parentType2 && parentType1 instanceof _definition.GraphQLObjectType && parentType2 instanceof _definition.GraphQLObjectType; // The return type for each field. var type1 = def1 && def1.type; var type2 = def2 && def2.type; if (!areMutuallyExclusive) { // Two aliases must refer to the same field. var name1 = node1.name.value; var name2 = node2.name.value; if (name1 !== name2) { return [[responseName, name1 + ' and ' + name2 + ' are different fields'], [node1], [node2]]; } // Two field calls must have the same arguments. if (!sameArguments(node1.arguments || [], node2.arguments || [])) { return [[responseName, 'they have differing arguments'], [node1], [node2]]; } } if (type1 && type2 && doTypesConflict(type1, type2)) { return [[responseName, 'they return conflicting types ' + String(type1) + ' and ' + String(type2)], [node1], [node2]]; } // Collect and compare sub-fields. Use the same "visited fragment names" list // for both collections so fields in a fragment reference are never // compared to themselves. var selectionSet1 = node1.selectionSet; var selectionSet2 = node2.selectionSet; if (selectionSet1 && selectionSet2) { var conflicts = findConflictsBetweenSubSelectionSets(context, cachedFieldsAndFragmentNames, comparedFragments, areMutuallyExclusive, (0, _definition.getNamedType)(type1), selectionSet1, (0, _definition.getNamedType)(type2), selectionSet2); return subfieldConflicts(conflicts, responseName, node1, node2); } } function sameArguments(arguments1, arguments2) { if (arguments1.length !== arguments2.length) { return false; } return arguments1.every(function (argument1) { var argument2 = (0, _find2.default)(arguments2, function (argument) { return argument.name.value === argument1.name.value; }); if (!argument2) { return false; } return sameValue(argument1.value, argument2.value); }); } function sameValue(value1, value2) { return !value1 && !value2 || (0, _printer.print)(value1) === (0, _printer.print)(value2); } // Two types conflict if both types could not apply to a value simultaneously. // Composite types are ignored as their individual field types will be compared // later recursively. However List and Non-Null types must match. function doTypesConflict(type1, type2) { if (type1 instanceof _definition.GraphQLList) { return type2 instanceof _definition.GraphQLList ? doTypesConflict(type1.ofType, type2.ofType) : true; } if (type2 instanceof _definition.GraphQLList) { return type1 instanceof _definition.GraphQLList ? doTypesConflict(type1.ofType, type2.ofType) : true; } if (type1 instanceof _definition.GraphQLNonNull) { return type2 instanceof _definition.GraphQLNonNull ? doTypesConflict(type1.ofType, type2.ofType) : true; } if (type2 instanceof _definition.GraphQLNonNull) { return type1 instanceof _definition.GraphQLNonNull ? doTypesConflict(type1.ofType, type2.ofType) : true; } if ((0, _definition.isLeafType)(type1) || (0, _definition.isLeafType)(type2)) { return type1 !== type2; } return false; } // Given a selection set, return the collection of fields (a mapping of response // name to field nodes and definitions) as well as a list of fragment names // referenced via fragment spreads. function getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType, selectionSet) { var cached = cachedFieldsAndFragmentNames.get(selectionSet); if (!cached) { var nodeAndDefs = {}; var fragmentNames = {}; _collectFieldsAndFragmentNames(context, parentType, selectionSet, nodeAndDefs, fragmentNames); cached = [nodeAndDefs, Object.keys(fragmentNames)]; cachedFieldsAndFragmentNames.set(selectionSet, cached); } return cached; } // Given a reference to a fragment, return the represented collection of fields // as well as a list of nested fragment names referenced via fragment spreads. function getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment) { // Short-circuit building a type from the node if possible. var cached = cachedFieldsAndFragmentNames.get(fragment.selectionSet); if (cached) { return cached; } var fragmentType = (0, _typeFromAST.typeFromAST)(context.getSchema(), fragment.typeCondition); return getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragmentType, fragment.selectionSet); } function _collectFieldsAndFragmentNames(context, parentType, selectionSet, nodeAndDefs, fragmentNames) { for (var i = 0; i < selectionSet.selections.length; i++) { var selection = selectionSet.selections[i]; switch (selection.kind) { case _kinds.FIELD: var fieldName = selection.name.value; var fieldDef = void 0; if (parentType instanceof _definition.GraphQLObjectType || parentType instanceof _definition.GraphQLInterfaceType) { fieldDef = parentType.getFields()[fieldName]; } var responseName = selection.alias ? selection.alias.value : fieldName; if (!nodeAndDefs[responseName]) { nodeAndDefs[responseName] = []; } nodeAndDefs[responseName].push([parentType, selection, fieldDef]); break; case _kinds.FRAGMENT_SPREAD: fragmentNames[selection.name.value] = true; break; case _kinds.INLINE_FRAGMENT: var typeCondition = selection.typeCondition; var inlineFragmentType = typeCondition ? (0, _typeFromAST.typeFromAST)(context.getSchema(), typeCondition) : parentType; _collectFieldsAndFragmentNames(context, inlineFragmentType, selection.selectionSet, nodeAndDefs, fragmentNames); break; } } } // Given a series of Conflicts which occurred between two sub-fields, generate // a single Conflict. function subfieldConflicts(conflicts, responseName, node1, node2) { if (conflicts.length > 0) { return [[responseName, conflicts.map(function (_ref3) { var reason = _ref3[0]; return reason; })], conflicts.reduce(function (allFields, _ref4) { var fields1 = _ref4[1]; return allFields.concat(fields1); }, [node1]), conflicts.reduce(function (allFields, _ref5) { var fields2 = _ref5[2]; return allFields.concat(fields2); }, [node2])]; } } /** * A way to keep track of pairs of things when the ordering of the pair does * not matter. We do this by maintaining a sort of double adjacency sets. */ var PairSet = function () { function PairSet() { _classCallCheck(this, PairSet); this._data = Object.create(null); } PairSet.prototype.has = function has(a, b, areMutuallyExclusive) { var first = this._data[a]; var result = first && first[b]; if (result === undefined) { return false; } // areMutuallyExclusive being false is a superset of being true, // hence if we want to know if this PairSet "has" these two with no // exclusivity, we have to ensure it was added as such. if (areMutuallyExclusive === false) { return result === false; } return true; }; PairSet.prototype.add = function add(a, b, areMutuallyExclusive) { _pairSetAdd(this._data, a, b, areMutuallyExclusive); _pairSetAdd(this._data, b, a, areMutuallyExclusive); }; return PairSet; }(); function _pairSetAdd(data, a, b, areMutuallyExclusive) { var map = data[a]; if (!map) { map = Object.create(null); data[a] = map; } map[b] = areMutuallyExclusive; } /***/ }), /* 70 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.typeIncompatibleSpreadMessage = typeIncompatibleSpreadMessage; exports.typeIncompatibleAnonSpreadMessage = typeIncompatibleAnonSpreadMessage; exports.PossibleFragmentSpreads = PossibleFragmentSpreads; var _error = __webpack_require__(0); var _typeComparators = __webpack_require__(19); var _typeFromAST = __webpack_require__(9); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function typeIncompatibleSpreadMessage(fragName, parentType, fragType) { return 'Fragment "' + fragName + '" cannot be spread here as objects of ' + ('type "' + String(parentType) + '" can never be of type "' + String(fragType) + '".'); } function typeIncompatibleAnonSpreadMessage(parentType, fragType) { return 'Fragment cannot be spread here as objects of ' + ('type "' + String(parentType) + '" can never be of type "' + String(fragType) + '".'); } /** * Possible fragment spread * * A fragment spread is only valid if the type condition could ever possibly * be true: if there is a non-empty intersection of the possible parent types, * and possible types which pass the type condition. */ function PossibleFragmentSpreads(context) { return { InlineFragment: function InlineFragment(node) { var fragType = context.getType(); var parentType = context.getParentType(); if (fragType && parentType && !(0, _typeComparators.doTypesOverlap)(context.getSchema(), fragType, parentType)) { context.reportError(new _error.GraphQLError(typeIncompatibleAnonSpreadMessage(parentType, fragType), [node])); } }, FragmentSpread: function FragmentSpread(node) { var fragName = node.name.value; var fragType = getFragmentType(context, fragName); var parentType = context.getParentType(); if (fragType && parentType && !(0, _typeComparators.doTypesOverlap)(context.getSchema(), fragType, parentType)) { context.reportError(new _error.GraphQLError(typeIncompatibleSpreadMessage(fragName, parentType, fragType), [node])); } } }; } function getFragmentType(context, name) { var frag = context.getFragment(name); return frag && (0, _typeFromAST.typeFromAST)(context.getSchema(), frag.typeCondition); } /***/ }), /* 71 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.missingFieldArgMessage = missingFieldArgMessage; exports.missingDirectiveArgMessage = missingDirectiveArgMessage; exports.ProvidedNonNullArguments = ProvidedNonNullArguments; var _error = __webpack_require__(0); var _keyMap = __webpack_require__(12); var _keyMap2 = _interopRequireDefault(_keyMap); var _definition = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function missingFieldArgMessage(fieldName, argName, type) { return 'Field "' + fieldName + '" argument "' + argName + '" of type ' + ('"' + String(type) + '" is required but not provided.'); } function missingDirectiveArgMessage(directiveName, argName, type) { return 'Directive "@' + directiveName + '" argument "' + argName + '" of type ' + ('"' + String(type) + '" is required but not provided.'); } /** * Provided required arguments * * A field or directive is only valid if all required (non-null) field arguments * have been provided. */ function ProvidedNonNullArguments(context) { return { Field: { // Validate on leave to allow for deeper errors to appear first. leave: function leave(node) { var fieldDef = context.getFieldDef(); if (!fieldDef) { return false; } var argNodes = node.arguments || []; var argNodeMap = (0, _keyMap2.default)(argNodes, function (arg) { return arg.name.value; }); fieldDef.args.forEach(function (argDef) { var argNode = argNodeMap[argDef.name]; if (!argNode && argDef.type instanceof _definition.GraphQLNonNull) { context.reportError(new _error.GraphQLError(missingFieldArgMessage(node.name.value, argDef.name, argDef.type), [node])); } }); } }, Directive: { // Validate on leave to allow for deeper errors to appear first. leave: function leave(node) { var directiveDef = context.getDirective(); if (!directiveDef) { return false; } var argNodes = node.arguments || []; var argNodeMap = (0, _keyMap2.default)(argNodes, function (arg) { return arg.name.value; }); directiveDef.args.forEach(function (argDef) { var argNode = argNodeMap[argDef.name]; if (!argNode && argDef.type instanceof _definition.GraphQLNonNull) { context.reportError(new _error.GraphQLError(missingDirectiveArgMessage(node.name.value, argDef.name, argDef.type), [node])); } }); } } }; } /***/ }), /* 72 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.noSubselectionAllowedMessage = noSubselectionAllowedMessage; exports.requiredSubselectionMessage = requiredSubselectionMessage; exports.ScalarLeafs = ScalarLeafs; var _error = __webpack_require__(0); var _definition = __webpack_require__(1); function noSubselectionAllowedMessage(fieldName, type) { return 'Field "' + fieldName + '" must not have a selection since ' + ('type "' + String(type) + '" has no subfields.'); } /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function requiredSubselectionMessage(fieldName, type) { return 'Field "' + fieldName + '" of type "' + String(type) + '" must have a ' + ('selection of subfields. Did you mean "' + fieldName + ' { ... }"?'); } /** * Scalar leafs * * A GraphQL document is valid only if all leaf fields (fields without * sub selections) are of scalar or enum types. */ function ScalarLeafs(context) { return { Field: function Field(node) { var type = context.getType(); if (type) { if ((0, _definition.isLeafType)(type)) { if (node.selectionSet) { context.reportError(new _error.GraphQLError(noSubselectionAllowedMessage(node.name.value, type), [node.selectionSet])); } } else if (!node.selectionSet) { context.reportError(new _error.GraphQLError(requiredSubselectionMessage(node.name.value, type), [node])); } } } }; } /***/ }), /* 73 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.duplicateArgMessage = duplicateArgMessage; exports.UniqueArgumentNames = UniqueArgumentNames; var _error = __webpack_require__(0); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function duplicateArgMessage(argName) { return 'There can be only one argument named "' + argName + '".'; } /** * Unique argument names * * A GraphQL field or directive is only valid if all supplied arguments are * uniquely named. */ function UniqueArgumentNames(context) { var knownArgNames = Object.create(null); return { Field: function Field() { knownArgNames = Object.create(null); }, Directive: function Directive() { knownArgNames = Object.create(null); }, Argument: function Argument(node) { var argName = node.name.value; if (knownArgNames[argName]) { context.reportError(new _error.GraphQLError(duplicateArgMessage(argName), [knownArgNames[argName], node.name])); } else { knownArgNames[argName] = node.name; } return false; } }; } /***/ }), /* 74 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.duplicateDirectiveMessage = duplicateDirectiveMessage; exports.UniqueDirectivesPerLocation = UniqueDirectivesPerLocation; var _error = __webpack_require__(0); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function duplicateDirectiveMessage(directiveName) { return 'The directive "' + directiveName + '" can only be used once at ' + 'this location.'; } /** * Unique directive names per location * * A GraphQL document is only valid if all directives at a given location * are uniquely named. */ function UniqueDirectivesPerLocation(context) { return { // Many different AST nodes may contain directives. Rather than listing // them all, just listen for entering any node, and check to see if it // defines any directives. enter: function enter(node) { if (node.directives) { (function () { var knownDirectives = Object.create(null); node.directives.forEach(function (directive) { var directiveName = directive.name.value; if (knownDirectives[directiveName]) { context.reportError(new _error.GraphQLError(duplicateDirectiveMessage(directiveName), [knownDirectives[directiveName], directive])); } else { knownDirectives[directiveName] = directive; } }); })(); } } }; } /***/ }), /* 75 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.duplicateFragmentNameMessage = duplicateFragmentNameMessage; exports.UniqueFragmentNames = UniqueFragmentNames; var _error = __webpack_require__(0); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function duplicateFragmentNameMessage(fragName) { return 'There can only be one fragment named "' + fragName + '".'; } /** * Unique fragment names * * A GraphQL document is only valid if all defined fragments have unique names. */ function UniqueFragmentNames(context) { var knownFragmentNames = Object.create(null); return { OperationDefinition: function OperationDefinition() { return false; }, FragmentDefinition: function FragmentDefinition(node) { var fragmentName = node.name.value; if (knownFragmentNames[fragmentName]) { context.reportError(new _error.GraphQLError(duplicateFragmentNameMessage(fragmentName), [knownFragmentNames[fragmentName], node.name])); } else { knownFragmentNames[fragmentName] = node.name; } return false; } }; } /***/ }), /* 76 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.duplicateInputFieldMessage = duplicateInputFieldMessage; exports.UniqueInputFieldNames = UniqueInputFieldNames; var _error = __webpack_require__(0); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function duplicateInputFieldMessage(fieldName) { return 'There can be only one input field named "' + fieldName + '".'; } /** * Unique input field names * * A GraphQL input object value is only valid if all supplied fields are * uniquely named. */ function UniqueInputFieldNames(context) { var knownNameStack = []; var knownNames = Object.create(null); return { ObjectValue: { enter: function enter() { knownNameStack.push(knownNames); knownNames = Object.create(null); }, leave: function leave() { knownNames = knownNameStack.pop(); } }, ObjectField: function ObjectField(node) { var fieldName = node.name.value; if (knownNames[fieldName]) { context.reportError(new _error.GraphQLError(duplicateInputFieldMessage(fieldName), [knownNames[fieldName], node.name])); } else { knownNames[fieldName] = node.name; } return false; } }; } /***/ }), /* 77 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.duplicateOperationNameMessage = duplicateOperationNameMessage; exports.UniqueOperationNames = UniqueOperationNames; var _error = __webpack_require__(0); /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function duplicateOperationNameMessage(operationName) { return 'There can only be one operation named "' + operationName + '".'; } /** * Unique operation names * * A GraphQL document is only valid if all defined operations have unique names. */ function UniqueOperationNames(context) { var knownOperationNames = Object.create(null); return { OperationDefinition: function OperationDefinition(node) { var operationName = node.name; if (operationName) { if (knownOperationNames[operationName.value]) { context.reportError(new _error.GraphQLError(duplicateOperationNameMessage(operationName.value), [knownOperationNames[operationName.value], operationName])); } else { knownOperationNames[operationName.value] = operationName; } } return false; }, FragmentDefinition: function FragmentDefinition() { return false; } }; } /***/ }), /* 78 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.duplicateVariableMessage = duplicateVariableMessage; exports.UniqueVariableNames = UniqueVariableNames; var _error = __webpack_require__(0); function duplicateVariableMessage(variableName) { return 'There can be only one variable named "' + variableName + '".'; } /** * Unique variable names * * A GraphQL operation is only valid if all its variables are uniquely named. */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function UniqueVariableNames(context) { var knownVariableNames = Object.create(null); return { OperationDefinition: function OperationDefinition() { knownVariableNames = Object.create(null); }, VariableDefinition: function VariableDefinition(node) { var variableName = node.variable.name.value; if (knownVariableNames[variableName]) { context.reportError(new _error.GraphQLError(duplicateVariableMessage(variableName), [knownVariableNames[variableName], node.variable.name])); } else { knownVariableNames[variableName] = node.variable.name; } } }; } /***/ }), /* 79 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.nonInputTypeOnVarMessage = nonInputTypeOnVarMessage; exports.VariablesAreInputTypes = VariablesAreInputTypes; var _error = __webpack_require__(0); var _printer = __webpack_require__(4); var _definition = __webpack_require__(1); var _typeFromAST = __webpack_require__(9); function nonInputTypeOnVarMessage(variableName, typeName) { return 'Variable "$' + variableName + '" cannot be non-input type "' + typeName + '".'; } /** * Variables are input types * * A GraphQL operation is only valid if all the variables it defines are of * input types (scalar, enum, or input object). */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function VariablesAreInputTypes(context) { return { VariableDefinition: function VariableDefinition(node) { var type = (0, _typeFromAST.typeFromAST)(context.getSchema(), node.type); // If the variable type is not an input type, return an error. if (type && !(0, _definition.isInputType)(type)) { var variableName = node.variable.name.value; context.reportError(new _error.GraphQLError(nonInputTypeOnVarMessage(variableName, (0, _printer.print)(node.type)), [node.type])); } } }; } /***/ }), /* 80 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.badVarPosMessage = badVarPosMessage; exports.VariablesInAllowedPosition = VariablesInAllowedPosition; var _error = __webpack_require__(0); var _definition = __webpack_require__(1); var _typeComparators = __webpack_require__(19); var _typeFromAST = __webpack_require__(9); function badVarPosMessage(varName, varType, expectedType) { return 'Variable "$' + varName + '" of type "' + String(varType) + '" used in ' + ('position expecting type "' + String(expectedType) + '".'); } /** * Variables passed to field arguments conform to type */ /** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ function VariablesInAllowedPosition(context) { var varDefMap = Object.create(null); return { OperationDefinition: { enter: function enter() { varDefMap = Object.create(null); }, leave: function leave(operation) { var usages = context.getRecursiveVariableUsages(operation); usages.forEach(function (_ref) { var node = _ref.node, type = _ref.type; var varName = node.name.value; var varDef = varDefMap[varName]; if (varDef && type) { // A var type is allowed if it is the same or more strict (e.g. is // a subtype of) than the expected type. It can be more strict if // the variable type is non-null when the expected type is nullable. // If both are list types, the variable item type can be more strict // than the expected item type (contravariant). var schema = context.getSchema(); var varType = (0, _typeFromAST.typeFromAST)(schema, varDef.type); if (varType && !(0, _typeComparators.isTypeSubTypeOf)(schema, effectiveType(varType, varDef), type)) { context.reportError(new _error.GraphQLError(badVarPosMessage(varName, varType, type), [varDef, node])); } } }); } }, VariableDefinition: function VariableDefinition(node) { varDefMap[node.variable.name.value] = node; } }; } // If a variable definition has a default value, it's effectively non-null. function effectiveType(varType, varDef) { return !varDef.defaultValue || varType instanceof _definition.GraphQLNonNull ? varType : new _definition.GraphQLNonNull(varType); } /***/ }) /******/ ]);