mirror of
https://github.com/BradNut/gQuery
synced 2025-09-08 17:40:18 +00:00
51 lines
No EOL
1.5 KiB
JavaScript
51 lines
No EOL
1.5 KiB
JavaScript
import { Kind, visit, } from "graphql";
|
|
const collectTypes = (obj, types) => {
|
|
if (Array.isArray(obj)) {
|
|
for (let i = 0; i < obj.length; i++)
|
|
collectTypes(obj[i], types);
|
|
}
|
|
else if (typeof obj === "object" && obj !== null) {
|
|
for (const key in obj) {
|
|
if (key === "__typename" && typeof obj[key] === "string") {
|
|
types[obj[key]] = 0;
|
|
}
|
|
else {
|
|
collectTypes(obj[key], types);
|
|
}
|
|
}
|
|
}
|
|
return types;
|
|
};
|
|
export const collectTypesFromResponse = (response) => Object.keys(collectTypes(response, {}));
|
|
const formatNode = (node) => {
|
|
if (node.selectionSet &&
|
|
!node.selectionSet.selections.some((node) => node.kind === Kind.FIELD &&
|
|
node.name.value === "__typename" &&
|
|
!node.alias)) {
|
|
let formattedNode = {
|
|
...node,
|
|
selectionSet: {
|
|
...node.selectionSet,
|
|
selections: [
|
|
...node.selectionSet.selections,
|
|
{
|
|
kind: Kind.FIELD,
|
|
name: {
|
|
kind: Kind.NAME,
|
|
value: "__typename",
|
|
},
|
|
},
|
|
],
|
|
},
|
|
};
|
|
return formattedNode;
|
|
}
|
|
};
|
|
export const formatDocument = (node) => {
|
|
let result = visit(node, {
|
|
Field: formatNode,
|
|
InlineFragment: formatNode,
|
|
});
|
|
return result;
|
|
};
|
|
//# sourceMappingURL=format.js.map
|