@aikidosec/firewall
Version:
Zen by Aikido is an embedded Web Application Firewall that autonomously protects Node.js apps against common and critical attacks
42 lines (41 loc) • 1.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractTopLevelFieldsFromDocument = extractTopLevelFieldsFromDocument;
function extractTopLevelFieldsFromDocument(document, operationName) {
const operations = document.definitions.filter(isOperationDefinition);
if (operations.length === 0) {
return undefined;
}
if (!operationName && operations.length === 1) {
return extractFields(operations[0]);
}
if (operationName) {
const operation = operations.find((operation) => { var _a; return ((_a = operation.name) === null || _a === void 0 ? void 0 : _a.value) === operationName; });
if (operation) {
return extractFields(operation);
}
}
return undefined;
}
function extractFields(node) {
const fields = node.selectionSet.selections.filter(isField);
if (node.operation === "query") {
return {
type: "query",
fields: fields,
};
}
if (node.operation === "mutation") {
return {
type: "mutation",
fields: fields,
};
}
return undefined;
}
function isField(node) {
return node.kind === "Field";
}
function isOperationDefinition(node) {
return node.kind === "OperationDefinition";
}