'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.introspectionTypes = 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; exports.isIntrospectionType = isIntrospectionType; var _isInvalid = require('../jsutils/isInvalid'); var _isInvalid2 = _interopRequireDefault(_isInvalid); var _objectValues = require('../jsutils/objectValues'); var _objectValues2 = _interopRequireDefault(_objectValues); var _astFromValue = require('../utilities/astFromValue'); var _printer = require('../language/printer'); var _definition = require('./definition'); var _scalars = require('./scalars'); var _directiveLocation = require('../language/directiveLocation'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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: (0, _definition.GraphQLNonNull)((0, _definition.GraphQLList)((0, _definition.GraphQLNonNull)(__Type))), resolve: function resolve(schema) { return (0, _objectValues2.default)(schema.getTypeMap()); } }, queryType: { description: 'The type that query operations will be rooted at.', type: (0, _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: (0, _definition.GraphQLNonNull)((0, _definition.GraphQLList)((0, _definition.GraphQLNonNull)(__Directive))), resolve: function resolve(schema) { return schema.getDirectives(); } } }; } }); /** * Copyright (c) 2015-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * strict */ 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: (0, _definition.GraphQLNonNull)(_scalars.GraphQLString) }, description: { type: _scalars.GraphQLString }, locations: { type: (0, _definition.GraphQLNonNull)((0, _definition.GraphQLList)((0, _definition.GraphQLNonNull)(__DirectiveLocation))) }, args: { type: (0, _definition.GraphQLNonNull)((0, _definition.GraphQLList)((0, _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: (0, _definition.GraphQLNonNull)(_scalars.GraphQLBoolean), resolve: function resolve(d) { return d.locations.indexOf(_directiveLocation.DirectiveLocation.QUERY) !== -1 || d.locations.indexOf(_directiveLocation.DirectiveLocation.MUTATION) !== -1 || d.locations.indexOf(_directiveLocation.DirectiveLocation.SUBSCRIPTION) !== -1; } }, onFragment: { deprecationReason: 'Use `locations`.', type: (0, _definition.GraphQLNonNull)(_scalars.GraphQLBoolean), resolve: function resolve(d) { return d.locations.indexOf(_directiveLocation.DirectiveLocation.FRAGMENT_SPREAD) !== -1 || d.locations.indexOf(_directiveLocation.DirectiveLocation.INLINE_FRAGMENT) !== -1 || d.locations.indexOf(_directiveLocation.DirectiveLocation.FRAGMENT_DEFINITION) !== -1; } }, onField: { deprecationReason: 'Use `locations`.', type: (0, _definition.GraphQLNonNull)(_scalars.GraphQLBoolean), resolve: function resolve(d) { return d.locations.indexOf(_directiveLocation.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: _directiveLocation.DirectiveLocation.QUERY, description: 'Location adjacent to a query operation.' }, MUTATION: { value: _directiveLocation.DirectiveLocation.MUTATION, description: 'Location adjacent to a mutation operation.' }, SUBSCRIPTION: { value: _directiveLocation.DirectiveLocation.SUBSCRIPTION, description: 'Location adjacent to a subscription operation.' }, FIELD: { value: _directiveLocation.DirectiveLocation.FIELD, description: 'Location adjacent to a field.' }, FRAGMENT_DEFINITION: { value: _directiveLocation.DirectiveLocation.FRAGMENT_DEFINITION, description: 'Location adjacent to a fragment definition.' }, FRAGMENT_SPREAD: { value: _directiveLocation.DirectiveLocation.FRAGMENT_SPREAD, description: 'Location adjacent to a fragment spread.' }, INLINE_FRAGMENT: { value: _directiveLocation.DirectiveLocation.INLINE_FRAGMENT, description: 'Location adjacent to an inline fragment.' }, SCHEMA: { value: _directiveLocation.DirectiveLocation.SCHEMA, description: 'Location adjacent to a schema definition.' }, SCALAR: { value: _directiveLocation.DirectiveLocation.SCALAR, description: 'Location adjacent to a scalar definition.' }, OBJECT: { value: _directiveLocation.DirectiveLocation.OBJECT, description: 'Location adjacent to an object type definition.' }, FIELD_DEFINITION: { value: _directiveLocation.DirectiveLocation.FIELD_DEFINITION, description: 'Location adjacent to a field definition.' }, ARGUMENT_DEFINITION: { value: _directiveLocation.DirectiveLocation.ARGUMENT_DEFINITION, description: 'Location adjacent to an argument definition.' }, INTERFACE: { value: _directiveLocation.DirectiveLocation.INTERFACE, description: 'Location adjacent to an interface definition.' }, UNION: { value: _directiveLocation.DirectiveLocation.UNION, description: 'Location adjacent to a union definition.' }, ENUM: { value: _directiveLocation.DirectiveLocation.ENUM, description: 'Location adjacent to an enum definition.' }, ENUM_VALUE: { value: _directiveLocation.DirectiveLocation.ENUM_VALUE, description: 'Location adjacent to an enum value definition.' }, INPUT_OBJECT: { value: _directiveLocation.DirectiveLocation.INPUT_OBJECT, description: 'Location adjacent to an input object type definition.' }, INPUT_FIELD_DEFINITION: { value: _directiveLocation.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: (0, _definition.GraphQLNonNull)(__TypeKind), resolve: function resolve(type) { if ((0, _definition.isScalarType)(type)) { return TypeKind.SCALAR; } else if ((0, _definition.isObjectType)(type)) { return TypeKind.OBJECT; } else if ((0, _definition.isInterfaceType)(type)) { return TypeKind.INTERFACE; } else if ((0, _definition.isUnionType)(type)) { return TypeKind.UNION; } else if ((0, _definition.isEnumType)(type)) { return TypeKind.ENUM; } else if ((0, _definition.isInputObjectType)(type)) { return TypeKind.INPUT_OBJECT; } else if ((0, _definition.isListType)(type)) { return TypeKind.LIST; } else if ((0, _definition.isNonNullType)(type)) { return TypeKind.NON_NULL; } throw new Error('Unknown kind of type: ' + type); } }, name: { type: _scalars.GraphQLString }, description: { type: _scalars.GraphQLString }, fields: { type: (0, _definition.GraphQLList)((0, _definition.GraphQLNonNull)(__Field)), args: { includeDeprecated: { type: _scalars.GraphQLBoolean, defaultValue: false } }, resolve: function resolve(type, _ref) { var includeDeprecated = _ref.includeDeprecated; if ((0, _definition.isObjectType)(type) || (0, _definition.isInterfaceType)(type)) { var fields = (0, _objectValues2.default)(type.getFields()); if (!includeDeprecated) { fields = fields.filter(function (field) { return !field.deprecationReason; }); } return fields; } return null; } }, interfaces: { type: (0, _definition.GraphQLList)((0, _definition.GraphQLNonNull)(__Type)), resolve: function resolve(type) { if ((0, _definition.isObjectType)(type)) { return type.getInterfaces(); } } }, possibleTypes: { type: (0, _definition.GraphQLList)((0, _definition.GraphQLNonNull)(__Type)), resolve: function resolve(type, args, context, _ref2) { var schema = _ref2.schema; if ((0, _definition.isAbstractType)(type)) { return schema.getPossibleTypes(type); } } }, enumValues: { type: (0, _definition.GraphQLList)((0, _definition.GraphQLNonNull)(__EnumValue)), args: { includeDeprecated: { type: _scalars.GraphQLBoolean, defaultValue: false } }, resolve: function resolve(type, _ref3) { var includeDeprecated = _ref3.includeDeprecated; if ((0, _definition.isEnumType)(type)) { var values = type.getValues(); if (!includeDeprecated) { values = values.filter(function (value) { return !value.deprecationReason; }); } return values; } } }, inputFields: { type: (0, _definition.GraphQLList)((0, _definition.GraphQLNonNull)(__InputValue)), resolve: function resolve(type) { if ((0, _definition.isInputObjectType)(type)) { return (0, _objectValues2.default)(type.getFields()); } } }, 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: (0, _definition.GraphQLNonNull)(_scalars.GraphQLString) }, description: { type: _scalars.GraphQLString }, args: { type: (0, _definition.GraphQLNonNull)((0, _definition.GraphQLList)((0, _definition.GraphQLNonNull)(__InputValue))), resolve: function resolve(field) { return field.args || []; } }, type: { type: (0, _definition.GraphQLNonNull)(__Type) }, isDeprecated: { type: (0, _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: (0, _definition.GraphQLNonNull)(_scalars.GraphQLString) }, description: { type: _scalars.GraphQLString }, type: { type: (0, _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: (0, _definition.GraphQLNonNull)(_scalars.GraphQLString) }, description: { type: _scalars.GraphQLString }, isDeprecated: { type: (0, _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: (0, _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: (0, _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: (0, _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; } }; var introspectionTypes = exports.introspectionTypes = [__Schema, __Directive, __DirectiveLocation, __Type, __Field, __InputValue, __EnumValue, __TypeKind]; function isIntrospectionType(type) { return (0, _definition.isNamedType)(type) && ( // Would prefer to use introspectionTypes.some(), however %checks needs // a simple expression. type.name === __Schema.name || type.name === __Directive.name || type.name === __DirectiveLocation.name || type.name === __Type.name || type.name === __Field.name || type.name === __InputValue.name || type.name === __EnumValue.name || type.name === __TypeKind.name); }