static.vendor.graphiql.graphiql-subscriptions-fetcher-browser-client.js Maven / Gradle / Ivy
The newest version!
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);
}
/***/
})
/******/]);