UNPKG

@graphql-mesh/fusion-composition

Version:

Basic composition utility for Fusion spec

41 lines (40 loc) 1.95 kB
import { valueFromASTUntyped } from 'graphql'; export function getDirectiveExtensions(directableObj) { const directiveExtensions = {}; if (directableObj.astNode?.directives?.length) { directableObj.astNode.directives.forEach(directive => { let existingDirectiveExtensions = directiveExtensions[directive.name.value]; if (!existingDirectiveExtensions) { existingDirectiveExtensions = []; directiveExtensions[directive.name.value] = existingDirectiveExtensions; } existingDirectiveExtensions.push(directive.arguments ? Object.fromEntries(directive.arguments.map(arg => [arg.name.value, valueFromASTUntyped(arg.value)])) : {}); }); } if (directableObj.extensions?.directives) { for (const directiveName in directableObj.extensions.directives) { const directiveObjs = directableObj.extensions.directives[directiveName]; if (Array.isArray(directiveObjs)) { directiveObjs.forEach(directiveObj => { let existingDirectiveExtensions = directiveExtensions[directiveName]; if (!existingDirectiveExtensions) { existingDirectiveExtensions = []; directiveExtensions[directiveName] = existingDirectiveExtensions; } existingDirectiveExtensions.push(directiveObj); }); } else { let existingDirectiveExtensions = directiveExtensions[directiveName]; if (!existingDirectiveExtensions) { existingDirectiveExtensions = []; directiveExtensions[directiveName] = existingDirectiveExtensions; } existingDirectiveExtensions.push(directiveObjs); } } } return directiveExtensions; }