@apollo/client
Version:
A fully-featured caching GraphQL client.
30 lines • 1.17 kB
JavaScript
import { Kind, visit } from "graphql";
import { getDirectiveArgValue } from "./getDirectiveArgValue.js";
const RESERVED_PREFIX = "ac_";
export function addDeferFragmentLabels(document) {
let count = 0;
return visit(document, {
Directive(node) {
if (node.name.value !== "defer")
return;
// Keep user defined labels
const label = getDirectiveArgValue(node, "label", Kind.STRING);
if (label && !label.startsWith(RESERVED_PREFIX))
return;
const args = node.arguments ?? [];
const index = args.findIndex((arg) => arg.name.value === "label");
const labelArg = {
kind: Kind.ARGUMENT,
name: { kind: Kind.NAME, value: "label" },
value: { kind: Kind.STRING, value: RESERVED_PREFIX + count++ },
};
return {
...node,
arguments: index === -1 ?
[...args, labelArg]
: args.map((arg, i) => (i === index ? labelArg : arg)),
};
},
});
}
//# sourceMappingURL=addDeferFragmentLabels.js.map