@graphql-mesh/runtime
Version:
45 lines (44 loc) • 1.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isStreamOperation = exports.iterateAsync = void 0;
const graphql_1 = require("graphql");
const utils_1 = require("@graphql-tools/utils");
function iterateAsync(iterable, callback, results) {
const iterator = iterable[Symbol.iterator]();
function iterate() {
const { done: endOfIterator, value } = iterator.next();
if (endOfIterator) {
return;
}
const result$ = callback(value);
if ((0, utils_1.isPromise)(result$)) {
return result$.then(result => {
if (result) {
results?.push(result);
}
return iterate();
});
}
if (result$) {
results?.push(result$);
}
return iterate();
}
return iterate();
}
exports.iterateAsync = iterateAsync;
exports.isStreamOperation = (0, utils_1.memoize1)(function isStreamOperation(astNode) {
let isStream = false;
(0, graphql_1.visit)(astNode, {
Field: {
enter(node) {
if (node.directives?.some(d => d.name.value === 'stream')) {
isStream = true;
return graphql_1.BREAK;
}
return undefined;
},
},
});
return isStream;
});