123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import { getArgumentValues } from './getArgumentValues.js';
- export function getDirectivesInExtensions(node, pathToDirectivesInExtensions = ['directives']) {
- return pathToDirectivesInExtensions.reduce((acc, pathSegment) => (acc == null ? acc : acc[pathSegment]), node === null || node === void 0 ? void 0 : node.extensions);
- }
- function _getDirectiveInExtensions(directivesInExtensions, directiveName) {
- const directiveInExtensions = directivesInExtensions.filter(directiveAnnotation => directiveAnnotation.name === directiveName);
- if (!directiveInExtensions.length) {
- return undefined;
- }
- return directiveInExtensions.map(directive => { var _a; return (_a = directive.args) !== null && _a !== void 0 ? _a : {}; });
- }
- export function getDirectiveInExtensions(node, directiveName, pathToDirectivesInExtensions = ['directives']) {
- const directivesInExtensions = pathToDirectivesInExtensions.reduce((acc, pathSegment) => (acc == null ? acc : acc[pathSegment]), node === null || node === void 0 ? void 0 : node.extensions);
- if (directivesInExtensions === undefined) {
- return undefined;
- }
- if (Array.isArray(directivesInExtensions)) {
- return _getDirectiveInExtensions(directivesInExtensions, directiveName);
- }
- // Support condensed format by converting to longer format
- // The condensed format does not preserve ordering of directives when repeatable directives are used.
- // See https://github.com/ardatan/graphql-tools/issues/2534
- const reformattedDirectivesInExtensions = [];
- for (const [name, argsOrArrayOfArgs] of Object.entries(directivesInExtensions)) {
- if (Array.isArray(argsOrArrayOfArgs)) {
- for (const args of argsOrArrayOfArgs) {
- reformattedDirectivesInExtensions.push({ name, args });
- }
- }
- else {
- reformattedDirectivesInExtensions.push({ name, args: argsOrArrayOfArgs });
- }
- }
- return _getDirectiveInExtensions(reformattedDirectivesInExtensions, directiveName);
- }
- export function getDirectives(schema, node, pathToDirectivesInExtensions = ['directives']) {
- const directivesInExtensions = getDirectivesInExtensions(node, pathToDirectivesInExtensions);
- if (directivesInExtensions != null && directivesInExtensions.length > 0) {
- return directivesInExtensions;
- }
- const schemaDirectives = schema && schema.getDirectives ? schema.getDirectives() : [];
- const schemaDirectiveMap = schemaDirectives.reduce((schemaDirectiveMap, schemaDirective) => {
- schemaDirectiveMap[schemaDirective.name] = schemaDirective;
- return schemaDirectiveMap;
- }, {});
- let astNodes = [];
- if (node.astNode) {
- astNodes.push(node.astNode);
- }
- if ('extensionASTNodes' in node && node.extensionASTNodes) {
- astNodes = [...astNodes, ...node.extensionASTNodes];
- }
- const result = [];
- for (const astNode of astNodes) {
- if (astNode.directives) {
- for (const directiveNode of astNode.directives) {
- const schemaDirective = schemaDirectiveMap[directiveNode.name.value];
- if (schemaDirective) {
- result.push({ name: directiveNode.name.value, args: getArgumentValues(schemaDirective, directiveNode) });
- }
- }
- }
- }
- return result;
- }
- export function getDirective(schema, node, directiveName, pathToDirectivesInExtensions = ['directives']) {
- const directiveInExtensions = getDirectiveInExtensions(node, directiveName, pathToDirectivesInExtensions);
- if (directiveInExtensions != null) {
- return directiveInExtensions;
- }
- const schemaDirective = schema && schema.getDirective ? schema.getDirective(directiveName) : undefined;
- if (schemaDirective == null) {
- return undefined;
- }
- let astNodes = [];
- if (node.astNode) {
- astNodes.push(node.astNode);
- }
- if ('extensionASTNodes' in node && node.extensionASTNodes) {
- astNodes = [...astNodes, ...node.extensionASTNodes];
- }
- const result = [];
- for (const astNode of astNodes) {
- if (astNode.directives) {
- for (const directiveNode of astNode.directives) {
- if (directiveNode.name.value === directiveName) {
- result.push(getArgumentValues(schemaDirective, directiveNode));
- }
- }
- }
- }
- if (!result.length) {
- return undefined;
- }
- return result;
- }
|