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
JavaScript
// 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
};