From 4c7c852af7dce4f8539212d4d90d7ca30f6f3aab Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Fri, 1 Dec 2017 16:44:01 +0100 Subject: [PATCH] Only merge definitions with directives when they are the same --- .../coral-framework/graphql/reduceDocument.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/client/coral-framework/graphql/reduceDocument.js b/client/coral-framework/graphql/reduceDocument.js index d105cbbea..927379ff2 100644 --- a/client/coral-framework/graphql/reduceDocument.js +++ b/client/coral-framework/graphql/reduceDocument.js @@ -6,14 +6,27 @@ import { getOperationDefinition, } from 'apollo-utilities'; +import {murmur3} from 'murmurhash-js'; + +function getDirectivesID(directives) { + return murmur3(JSON.stringify(directives)); +} + +// If two definitions have the same id, they can be merged. function getDefinitionID(definition) { + + // Only merge when directives are exactly the same. + const trailing = definition.directives.length + ? `_${getDirectivesID(definition.directives)}` + : ''; + switch (definition.kind) { case 'FragmentSpread': return `FragmentSpread_${definition.name.value}`; case 'Field': - return `Field_${definition.alias ? definition.alias.value : definition.name.value}`; + return `Field_${definition.alias ? definition.alias.value : definition.name.value}${trailing}`; case 'InlineFragment': - return `InlineFragment_${definition.typeCondition.name.value}`; + return `InlineFragment_${definition.typeCondition.name.value}${trailing}`; default: throw new Error(`unknown definition kind ${definition.kind}`); }