UNPKG

graphql-add-id-document-transform

Version:

GraphQL document transform ensuring cache normalization by adding an `id` field if available

52 lines (51 loc) 1.37 kB
// src/addIdDocumentTransform.ts import { Kind, TypeInfo, buildASTSchema, isObjectType, visit, visitWithTypeInfo } from "graphql"; var addIdDocumentTransform = { transform: ({ schema: astSchema, documents }) => { const schema = buildASTSchema(astSchema); const typeInfo = new TypeInfo(schema); return documents.map((documentFile) => { if (!documentFile.document) { return documentFile; } documentFile.document = visit( documentFile.document, visitWithTypeInfo(typeInfo, { SelectionSet(node) { const parentType = typeInfo.getParentType(); if (isObjectType(parentType)) { const fields = parentType.getFields(); const selectionHasIdField = node.selections.some( (selection) => selection.kind === Kind.FIELD && selection.name.value === "id" ); if ("id" in fields && !selectionHasIdField) { node.selections = [ ...node.selections, { kind: Kind.FIELD, name: { kind: Kind.NAME, value: "id" } } ]; } } return node; } }) ); return documentFile; }); } }; export { addIdDocumentTransform };