UNPKG

@graphql-tools/executor

Version:

Fork of GraphQL.js' execute function

59 lines (58 loc) 2.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.normalizedExecutor = void 0; const utils_1 = require("@graphql-tools/utils"); const graphql_1 = require("graphql"); const execute_js_1 = require("./execute.js"); const repeater_1 = require("@repeaterjs/repeater"); const value_or_promise_1 = require("value-or-promise"); function normalizedExecutor(args) { const operationAST = (0, graphql_1.getOperationAST)(args.document, args.operationName); if (operationAST == null) { throw new Error('Must provide an operation.'); } if (operationAST.operation === 'subscription') { return new value_or_promise_1.ValueOrPromise(() => (0, execute_js_1.subscribe)(args)) .then((result) => { if ((0, utils_1.isAsyncIterable)(result)) { return new repeater_1.Repeater(async (push, stop) => { let stopped = false; stop.then(() => { stopped = true; }); for await (const value of result) { if (stopped) { break; } push(value); } stop(); }); } return result; }) .resolve(); } return new value_or_promise_1.ValueOrPromise(() => (0, execute_js_1.execute)(args)) .then((result) => { if ('initialResult' in result) { return new repeater_1.Repeater(async (push, stop) => { let stopped = false; stop.then(() => { stopped = true; }); push(result.initialResult); for await (const value of result.subsequentResults) { if (stopped) { break; } push(value); } stop(); }); } return result; }) .resolve(); } exports.normalizedExecutor = normalizedExecutor;