graphql
Version:
A Query Language and Runtime which can target any service.
546 lines (510 loc) • 19.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isIntrospectionType = isIntrospectionType;
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 = void 0;
var _objectValues = _interopRequireDefault(require("../polyfills/objectValues"));
var _isInvalid = _interopRequireDefault(require("../jsutils/isInvalid"));
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 }; }
/**
* 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.
*
*
*/
var __Schema = new _definition.GraphQLObjectType({
name: '__Schema',
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, _objectValues.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();
}
}
};
}
});
exports.__Schema = __Schema;
var __Directive = new _definition.GraphQLObjectType({
name: '__Directive',
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),
resolve: function resolve(obj) {
return obj.name;
}
},
description: {
type: _scalars.GraphQLString,
resolve: function resolve(obj) {
return obj.description;
}
},
locations: {
type: (0, _definition.GraphQLNonNull)((0, _definition.GraphQLList)((0, _definition.GraphQLNonNull)(__DirectiveLocation))),
resolve: function resolve(obj) {
return obj.locations;
}
},
args: {
type: (0, _definition.GraphQLNonNull)((0, _definition.GraphQLList)((0, _definition.GraphQLNonNull)(__InputValue))),
resolve: function resolve(directive) {
return directive.args || [];
}
}
};
}
});
exports.__Directive = __Directive;
var __DirectiveLocation = new _definition.GraphQLEnumType({
name: '__DirectiveLocation',
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.'
},
VARIABLE_DEFINITION: {
value: _directiveLocation.DirectiveLocation.VARIABLE_DEFINITION,
description: 'Location adjacent to a variable definition.'
},
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.'
}
}
});
exports.__DirectiveLocation = __DirectiveLocation;
var __Type = new _definition.GraphQLObjectType({
name: '__Type',
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,
resolve: function resolve(obj) {
return obj.name;
}
},
description: {
type: _scalars.GraphQLString,
resolve: function resolve(obj) {
return obj.description;
}
},
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, _objectValues.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, _objectValues.default)(type.getFields());
}
}
},
ofType: {
type: __Type,
resolve: function resolve(obj) {
return obj.ofType;
}
}
};
}
});
exports.__Type = __Type;
var __Field = new _definition.GraphQLObjectType({
name: '__Field',
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),
resolve: function resolve(obj) {
return obj.name;
}
},
description: {
type: _scalars.GraphQLString,
resolve: function resolve(obj) {
return obj.description;
}
},
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),
resolve: function resolve(obj) {
return obj.type;
}
},
isDeprecated: {
type: (0, _definition.GraphQLNonNull)(_scalars.GraphQLBoolean),
resolve: function resolve(obj) {
return obj.isDeprecated;
}
},
deprecationReason: {
type: _scalars.GraphQLString,
resolve: function resolve(obj) {
return obj.deprecationReason;
}
}
};
}
});
exports.__Field = __Field;
var __InputValue = new _definition.GraphQLObjectType({
name: '__InputValue',
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),
resolve: function resolve(obj) {
return obj.name;
}
},
description: {
type: _scalars.GraphQLString,
resolve: function resolve(obj) {
return obj.description;
}
},
type: {
type: (0, _definition.GraphQLNonNull)(__Type),
resolve: function resolve(obj) {
return obj.type;
}
},
defaultValue: {
type: _scalars.GraphQLString,
description: 'A GraphQL-formatted string representing the default value for this ' + 'input value.',
resolve: function resolve(inputVal) {
return (0, _isInvalid.default)(inputVal.defaultValue) ? null : (0, _printer.print)((0, _astFromValue.astFromValue)(inputVal.defaultValue, inputVal.type));
}
}
};
}
});
exports.__InputValue = __InputValue;
var __EnumValue = new _definition.GraphQLObjectType({
name: '__EnumValue',
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),
resolve: function resolve(obj) {
return obj.name;
}
},
description: {
type: _scalars.GraphQLString,
resolve: function resolve(obj) {
return obj.description;
}
},
isDeprecated: {
type: (0, _definition.GraphQLNonNull)(_scalars.GraphQLBoolean),
resolve: function resolve(obj) {
return obj.isDeprecated;
}
},
deprecationReason: {
type: _scalars.GraphQLString,
resolve: function resolve(obj) {
return obj.deprecationReason;
}
}
};
}
});
exports.__EnumValue = __EnumValue;
var TypeKind = {
SCALAR: 'SCALAR',
OBJECT: 'OBJECT',
INTERFACE: 'INTERFACE',
UNION: 'UNION',
ENUM: 'ENUM',
INPUT_OBJECT: 'INPUT_OBJECT',
LIST: 'LIST',
NON_NULL: 'NON_NULL'
};
exports.TypeKind = TypeKind;
var __TypeKind = new _definition.GraphQLEnumType({
name: '__TypeKind',
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.
*/
exports.__TypeKind = __TypeKind;
var 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;
}
};
exports.SchemaMetaFieldDef = SchemaMetaFieldDef;
var 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);
}
};
exports.TypeMetaFieldDef = TypeMetaFieldDef;
var 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;
}
};
exports.TypeNameMetaFieldDef = TypeNameMetaFieldDef;
var introspectionTypes = [__Schema, __Directive, __DirectiveLocation, __Type, __Field, __InputValue, __EnumValue, __TypeKind];
exports.introspectionTypes = introspectionTypes;
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);
}