UNPKG

graphql

Version:

A Query Language and Runtime which can target any service.

1 lines 22.6 kB
{"version":3,"file":"directives.js","sourceRoot":"","sources":["../../src/type/directives.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Directives */\n\nimport { devAssert } from '../jsutils/devAssert.ts';\nimport { inspect } from '../jsutils/inspect.ts';\nimport { instanceOf } from '../jsutils/instanceOf.ts';\nimport { isObjectLike } from '../jsutils/isObjectLike.ts';\nimport { keyValMap } from '../jsutils/keyValMap.ts';\nimport type { Maybe } from '../jsutils/Maybe.ts';\nimport type { ObjMap } from '../jsutils/ObjMap.ts';\nimport { toObjMapWithSymbols } from '../jsutils/toObjMap.ts';\n\nimport type {\n DirectiveDefinitionNode,\n DirectiveExtensionNode,\n} from '../language/ast.ts';\nimport { DirectiveLocation } from '../language/directiveLocation.ts';\n\nimport { assertName } from './assertName.ts';\nimport type {\n GraphQLArgumentConfig,\n GraphQLFieldNormalizedConfigArgumentMap,\n GraphQLSchemaElement,\n} from './definition.ts';\nimport { GraphQLArgument, GraphQLNonNull } from './definition.ts';\nimport { GraphQLBoolean, GraphQLInt, GraphQLString } from './scalars.ts';\n\n/** @private */\nconst directiveSymbol: unique symbol = Symbol('Directive');\n\n/**\n * Test if the given value is a GraphQL directive.\n * @param directive - Value to inspect.\n * @returns True when the value is a GraphQLDirective.\n * @example\n * ```ts\n * import { DirectiveLocation } from 'graphql/language';\n * import { GraphQLDirective, GraphQLString, isDirective } from 'graphql/type';\n *\n * const upper = new GraphQLDirective({\n * name: 'upper',\n * locations: [DirectiveLocation.FIELD_DEFINITION],\n * });\n *\n * isDirective(upper); // => true\n * isDirective(GraphQLString); // => false\n * ```\n */\nexport function isDirective(directive: unknown): directive is GraphQLDirective {\n return instanceOf(directive, directiveSymbol, GraphQLDirective);\n}\n\n/**\n * Returns the value as a GraphQLDirective, or throws if it is not a directive.\n * @param directive - Value to inspect.\n * @returns The value typed as a GraphQLDirective.\n * @example\n * ```ts\n * import { DirectiveLocation } from 'graphql/language';\n * import { assertDirective, GraphQLDirective, GraphQLString } from 'graphql/type';\n *\n * const upper = new GraphQLDirective({\n * name: 'upper',\n * locations: [DirectiveLocation.FIELD_DEFINITION],\n * });\n *\n * assertDirective(upper); // => upper\n * assertDirective(GraphQLString); // throws an error\n * ```\n */\nexport function assertDirective(directive: unknown): GraphQLDirective {\n if (!isDirective(directive)) {\n throw new Error(\n `Expected ${inspect(directive)} to be a GraphQL directive.`,\n );\n }\n return directive;\n}\n\n/**\n * Custom extensions\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLDirectiveExtensions {\n [attributeName: string | symbol]: unknown;\n}\n\n/**\n * Directives are used by the GraphQL runtime as a way of modifying execution\n * behavior. Type system creators will usually not create these directly.\n */\nexport class GraphQLDirective implements GraphQLSchemaElement {\n /**\n * Internal runtime marker used to identify GraphQLDirective instances.\n * @private\n */\n readonly __kind: symbol;\n /** The GraphQL name for this schema element. */\n name: string;\n /** Human-readable description for this schema element, if provided. */\n description: Maybe<string>;\n /** Locations where this directive may be applied. */\n locations: ReadonlyArray<DirectiveLocation>;\n /** Arguments accepted by this field or directive. */\n args: ReadonlyArray<GraphQLArgument>;\n /** Whether this directive may appear more than once at the same location. */\n isRepeatable: boolean;\n /** Reason this element is deprecated, if one was provided. */\n deprecationReason: Maybe<string>;\n /** Custom extension fields reserved for users. */\n extensions: Readonly<GraphQLDirectiveExtensions>;\n /** AST node from which this schema element was built, if available. */\n astNode: Maybe<DirectiveDefinitionNode>;\n /** AST extension nodes applied to this schema element. */\n extensionASTNodes: ReadonlyArray<DirectiveExtensionNode>;\n\n /**\n * Creates a GraphQLDirective instance.\n * @param config - Configuration describing this object.\n * @example\n * ```ts\n * import { DirectiveLocation, parse } from 'graphql/language';\n * import {\n * GraphQLBoolean,\n * GraphQLDirective,\n * GraphQLInt,\n * GraphQLNonNull,\n * } from 'graphql/type';\n *\n * const document = parse(`\n * directive @cacheControl(maxAge: Int) repeatable on FIELD_DEFINITION\n * extend directive @cacheControl(maxAge: Int) on FIELD_DEFINITION\n * `);\n * const definition = document.definitions[0];\n *\n * const cacheControl = new GraphQLDirective({\n * name: 'cacheControl',\n * description: 'Controls HTTP cache hints for a field.',\n * locations: [DirectiveLocation.FIELD_DEFINITION],\n * args: {\n * inheritMaxAge: {\n * description: 'Inherit the parent cache hint.',\n * type: new GraphQLNonNull(GraphQLBoolean),\n * default: { value: false },\n * deprecationReason: 'Use maxAge instead.',\n * extensions: { scope: 'cache' },\n * },\n * maxAge: {\n * type: GraphQLInt,\n * astNode: definition.arguments[0],\n * },\n * },\n * isRepeatable: true,\n * deprecationReason: 'Use @cache instead.',\n * extensions: { scope: 'cache' },\n * astNode: definition,\n * extensionASTNodes: [document.definitions[1]],\n * });\n *\n * cacheControl.name; // => 'cacheControl'\n * cacheControl.description; // => 'Controls HTTP cache hints for a field.'\n * cacheControl.args[0].name; // => 'inheritMaxAge'\n * cacheControl.args[0].default.value; // => false\n * cacheControl.isRepeatable; // => true\n * cacheControl.extensions; // => { scope: 'cache' }\n * ```\n */\n constructor(config: Readonly<GraphQLDirectiveConfig>) {\n this.__kind = directiveSymbol;\n this.name = assertName(config.name);\n this.description = config.description;\n this.locations = config.locations;\n this.isRepeatable = config.isRepeatable ?? false;\n this.deprecationReason = config.deprecationReason;\n this.extensions = toObjMapWithSymbols(config.extensions);\n this.astNode = config.astNode;\n this.extensionASTNodes = config.extensionASTNodes ?? [];\n\n devAssert(\n Array.isArray(config.locations),\n `@${this.name} locations must be an Array.`,\n );\n\n const args = config.args ?? {};\n devAssert(\n isObjectLike(args) && !Array.isArray(args),\n `@${this.name} args must be an object with argument names as keys.`,\n );\n\n this.args = Object.entries(args).map(\n ([argName, argConfig]) => new GraphQLArgument(this, argName, argConfig),\n );\n }\n\n /**\n * Returns the value used by `Object.prototype.toString`.\n * @returns The built-in string tag for this object.\n */\n get [Symbol.toStringTag](): string {\n return 'GraphQLDirective';\n }\n\n /**\n * Returns a normalized configuration object for this object.\n * @returns A configuration object that can be used to recreate this object.\n * @example\n * ```ts\n * import { DirectiveLocation } from 'graphql/language';\n * import { GraphQLDirective, GraphQLString } from 'graphql/type';\n *\n * const tag = new GraphQLDirective({\n * name: 'tag',\n * locations: [DirectiveLocation.FIELD_DEFINITION],\n * args: {\n * name: { type: GraphQLString },\n * },\n * });\n *\n * const config = tag.toConfig();\n * const tagCopy = new GraphQLDirective(config);\n *\n * config.args.name.type; // => GraphQLString\n * tagCopy.args[0].name; // => 'name'\n * ```\n */\n toConfig(): GraphQLDirectiveNormalizedConfig {\n return {\n name: this.name,\n description: this.description,\n locations: this.locations,\n args: keyValMap(\n this.args,\n (arg) => arg.name,\n (arg) => arg.toConfig(),\n ),\n isRepeatable: this.isRepeatable,\n deprecationReason: this.deprecationReason,\n extensions: this.extensions,\n astNode: this.astNode,\n extensionASTNodes: this.extensionASTNodes,\n };\n }\n\n /**\n * Returns the schema coordinate identifying this directive.\n * @returns The directive schema coordinate.\n * @example\n * ```ts\n * import { DirectiveLocation } from 'graphql/language';\n * import { GraphQLDirective } from 'graphql/type';\n *\n * const tag = new GraphQLDirective({\n * name: 'tag',\n * locations: [DirectiveLocation.FIELD_DEFINITION],\n * });\n *\n * tag.toString(); // => '@tag'\n * ```\n */\n toString(): string {\n return '@' + this.name;\n }\n\n /**\n * Returns the JSON representation used when this object is serialized.\n * @returns The JSON-serializable representation.\n * @example\n * ```ts\n * import { DirectiveLocation } from 'graphql/language';\n * import { GraphQLDirective } from 'graphql/type';\n *\n * const tag = new GraphQLDirective({\n * name: 'tag',\n * locations: [DirectiveLocation.FIELD_DEFINITION],\n * });\n *\n * tag.toJSON(); // => '@tag'\n * JSON.stringify({ directive: tag }); // => '{\"directive\":\"@tag\"}'\n * ```\n */\n toJSON(): string {\n return this.toString();\n }\n}\n\n/** Configuration used to construct a GraphQLDirective. */\nexport interface GraphQLDirectiveConfig {\n /** The GraphQL name for this schema element. */\n name: string;\n /** Human-readable description for this schema element, if provided. */\n description?: Maybe<string>;\n /** Locations where this directive may be applied. */\n locations: ReadonlyArray<DirectiveLocation>;\n /** Arguments accepted by this field or directive. */\n args?: Maybe<ObjMap<GraphQLArgumentConfig>>;\n /** Whether this directive may appear more than once at the same location. */\n isRepeatable?: Maybe<boolean>;\n /** Reason this element is deprecated, if one was provided. */\n deprecationReason?: Maybe<string>;\n /** Custom extension fields reserved for users. */\n extensions?: Maybe<Readonly<GraphQLDirectiveExtensions>>;\n /** AST node from which this schema element was built, if available. */\n astNode?: Maybe<DirectiveDefinitionNode>;\n /** AST extension nodes applied to this schema element. */\n extensionASTNodes?: Maybe<ReadonlyArray<DirectiveExtensionNode>>;\n}\n\n/** @internal */\nexport interface GraphQLDirectiveNormalizedConfig extends GraphQLDirectiveConfig {\n args: GraphQLFieldNormalizedConfigArgumentMap;\n isRepeatable: boolean;\n extensions: Readonly<GraphQLDirectiveExtensions>;\n extensionASTNodes: ReadonlyArray<DirectiveExtensionNode>;\n}\n\n/** Used to conditionally include fields or fragments. */\nexport const GraphQLIncludeDirective: GraphQLDirective = new GraphQLDirective({\n name: 'include',\n description:\n 'Directs the executor to include this field or fragment only when the `if` argument is true.',\n locations: [\n DirectiveLocation.FIELD,\n DirectiveLocation.FRAGMENT_SPREAD,\n DirectiveLocation.INLINE_FRAGMENT,\n ],\n args: {\n if: {\n type: new GraphQLNonNull(GraphQLBoolean),\n description: 'Included when true.',\n },\n },\n});\n\n/** Used to conditionally skip (exclude) fields or fragments. */\nexport const GraphQLSkipDirective: GraphQLDirective = new GraphQLDirective({\n name: 'skip',\n description:\n 'Directs the executor to skip this field or fragment when the `if` argument is true.',\n locations: [\n DirectiveLocation.FIELD,\n DirectiveLocation.FRAGMENT_SPREAD,\n DirectiveLocation.INLINE_FRAGMENT,\n ],\n args: {\n if: {\n type: new GraphQLNonNull(GraphQLBoolean),\n description: 'Skipped when true.',\n },\n },\n});\n\n/**\n * Experimental directive used to conditionally defer fragments.\n *\n * This directive is exported for schemas that explicitly opt in to incremental\n * delivery. It is not included in `specifiedDirectives`.\n */\nexport const GraphQLDeferDirective: GraphQLDirective = new GraphQLDirective({\n name: 'defer',\n description:\n 'Directs the executor to defer this fragment when the `if` argument is true or undefined.',\n locations: [\n DirectiveLocation.FRAGMENT_SPREAD,\n DirectiveLocation.INLINE_FRAGMENT,\n ],\n args: {\n if: {\n type: new GraphQLNonNull(GraphQLBoolean),\n description: 'Deferred when true or undefined.',\n default: { value: true },\n },\n label: {\n type: GraphQLString,\n description: 'Unique name',\n },\n },\n});\n\n/**\n * Experimental directive used to conditionally stream list fields.\n *\n * This directive is exported for schemas that explicitly opt in to incremental\n * delivery. It is not included in `specifiedDirectives`.\n */\nexport const GraphQLStreamDirective: GraphQLDirective = new GraphQLDirective({\n name: 'stream',\n description:\n 'Directs the executor to stream plural fields when the `if` argument is true or undefined.',\n locations: [DirectiveLocation.FIELD],\n args: {\n initialCount: {\n default: { value: 0 },\n type: new GraphQLNonNull(GraphQLInt),\n description: 'Number of items to return immediately',\n },\n if: {\n type: new GraphQLNonNull(GraphQLBoolean),\n description: 'Stream when true or undefined.',\n default: { value: true },\n },\n label: {\n type: GraphQLString,\n description: 'Unique name',\n },\n },\n});\n\n/** Constant string used for default reason for a deprecation. */\nexport const DEFAULT_DEPRECATION_REASON = 'No longer supported';\n\n/**\n * Used to declare element of a GraphQL schema as deprecated.\n *\n * The `reason` argument is non-null and defaults to\n * `DEFAULT_DEPRECATION_REASON`.\n */\nexport const GraphQLDeprecatedDirective: GraphQLDirective =\n new GraphQLDirective({\n name: 'deprecated',\n description: 'Marks an element of a GraphQL schema as no longer supported.',\n locations: [\n DirectiveLocation.FIELD_DEFINITION,\n DirectiveLocation.ARGUMENT_DEFINITION,\n DirectiveLocation.INPUT_FIELD_DEFINITION,\n DirectiveLocation.ENUM_VALUE,\n DirectiveLocation.DIRECTIVE_DEFINITION,\n ],\n args: {\n reason: {\n type: new GraphQLNonNull(GraphQLString),\n description:\n 'Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).',\n default: { value: DEFAULT_DEPRECATION_REASON },\n },\n },\n });\n\n/** Used to provide a URL for specifying the behavior of custom scalar definitions. */\nexport const GraphQLSpecifiedByDirective: GraphQLDirective =\n new GraphQLDirective({\n name: 'specifiedBy',\n description: 'Exposes a URL that specifies the behavior of this scalar.',\n locations: [DirectiveLocation.SCALAR],\n args: {\n url: {\n type: new GraphQLNonNull(GraphQLString),\n description: 'The URL that specifies the behavior of this scalar.',\n },\n },\n });\n\n/** Used to indicate an Input Object is a OneOf Input Object. */\nexport const GraphQLOneOfDirective: GraphQLDirective = new GraphQLDirective({\n name: 'oneOf',\n description:\n 'Indicates exactly one field must be supplied and this field must not be `null`.',\n locations: [DirectiveLocation.INPUT_OBJECT],\n args: {},\n});\n\n/**\n * Disables error propagation (experimental).\n *\n * @internal\n */\nexport const GraphQLDisableErrorPropagationDirective: GraphQLDirective =\n new GraphQLDirective({\n name: 'experimental_disableErrorPropagation',\n description: 'Disables error propagation.',\n locations: [\n DirectiveLocation.QUERY,\n DirectiveLocation.MUTATION,\n DirectiveLocation.SUBSCRIPTION,\n ],\n });\n\n/**\n * Full list of stable directives specified by GraphQL.js.\n *\n * Experimental `@defer` and `@stream` are exported separately and are not\n * included in this list.\n */\nexport const specifiedDirectives: ReadonlyArray<GraphQLDirective> =\n Object.freeze([\n GraphQLIncludeDirective,\n GraphQLSkipDirective,\n GraphQLDeprecatedDirective,\n GraphQLSpecifiedByDirective,\n GraphQLOneOfDirective,\n ]);\n\n/**\n * Returns true when the directive is one of the directives specified by GraphQL.\n * @param directive - Directive to inspect.\n * @returns True when the directive is specified by GraphQL.\n * @example\n * ```ts\n * import {\n * GraphQLDirective,\n * GraphQLIncludeDirective,\n * isSpecifiedDirective,\n * } from 'graphql/type';\n * import { DirectiveLocation } from 'graphql/language';\n *\n * const customDirective = new GraphQLDirective({\n * name: 'auth',\n * locations: [DirectiveLocation.FIELD_DEFINITION],\n * });\n *\n * isSpecifiedDirective(GraphQLIncludeDirective); // => true\n * isSpecifiedDirective(customDirective); // => false\n * ```\n */\nexport function isSpecifiedDirective(directive: GraphQLDirective): boolean {\n return specifiedDirectives.some(({ name }) => name === directive.name);\n}\n"]}