in src/components/operations/operation-details/ko/runtime/graphql-console.ts [206:276]
public documentToTree(): void {
try {
const ast = GraphQL.parse(this.document(), { noLocation: true });
for (const node of this.globalNodes()) {
node?.clear();
node?.toggle(true, false);
}
let curNode: GraphQLTreeNode;
let variables = [];
// Go through every node in a new generated parsed graphQL, associate the node with the created tree from init and toggle checkmark.
GraphQL.visit(ast, {
enter: node => {
if (node.kind === GraphQL.Kind.OPERATION_DEFINITION) {
variables = [];
curNode = this.globalNodes().find(mainNode => mainNode.label() == node.operation);
} else if (node.kind === GraphQL.Kind.FIELD || node.kind === GraphQL.Kind.ARGUMENT
|| node.kind === GraphQL.Kind.OBJECT_FIELD || node.kind === GraphQL.Kind.INLINE_FRAGMENT) {
let targetNode: GraphQLTreeNode;
if (node.kind === GraphQL.Kind.FIELD) {
targetNode = curNode.children().find(n => !n.isInputNode() && n.label() === node.name.value);
} else if (node.kind === GraphQL.Kind.INLINE_FRAGMENT) {
targetNode = curNode.children().find(n => !n.isInputNode() && n.label() === node.typeCondition.name.value);
} else {
const inputNode = <GraphQLInputTreeNode>curNode.children().find(n => n.isInputNode() && n.label() === node.name.value);
if (node.value.kind === GraphQL.Kind.STRING) {
inputNode.inputValue(`"${node.value.value}"`);
} else if (node.value.kind === GraphQL.Kind.BOOLEAN || node.value.kind === GraphQL.Kind.INT
|| node.value.kind === GraphQL.Kind.FLOAT || node.value.kind === GraphQL.Kind.ENUM) {
inputNode.inputValue(`${node.value.value}`);
} else if (node.value.kind === GraphQL.Kind.VARIABLE) {
inputNode.inputValue(`$${node.value.name.value}`);
}
targetNode = inputNode;
}
if (targetNode) {
curNode = targetNode;
curNode.toggle(true, false);
}
} else if (node.kind === GraphQL.Kind.VARIABLE_DEFINITION &&
(node.type.kind === GraphQL.Kind.NAMED_TYPE || node.type.kind === GraphQL.Kind.NON_NULL_TYPE)) {
let typeString;
if (node.type.kind === GraphQL.Kind.NON_NULL_TYPE && node.type.type.kind === GraphQL.Kind.NAMED_TYPE) {
typeString = `${node.type.type.name.value}!`;
} else if (node.type.kind === GraphQL.Kind.NAMED_TYPE) {
typeString = node.type.name.value;
}
variables.push({
name: node.variable.name.value,
type: typeString
});
}
},
leave: node => {
if (curNode && (node.kind === GraphQL.Kind.FIELD || node.kind === GraphQL.Kind.ARGUMENT
|| node.kind === GraphQL.Kind.OBJECT_FIELD || node.kind === GraphQL.Kind.INLINE_FRAGMENT
|| node.kind === GraphQL.Kind.OPERATION_DEFINITION)) {
if (node.kind === GraphQL.Kind.OPERATION_DEFINITION) {
(<GraphQLOutputTreeNode>curNode).variables = variables;
}
if (!(node.kind === GraphQL.Kind.FIELD && node.name.value === GraphqlMetaField.typename)) {
curNode = curNode.parent();
}
}
}
});
} catch (err) {
// Do nothing here as the doc is invalidated
return;
}
}