UNPKG

@graphql-mesh/utils

Version:
57 lines (56 loc) 1.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.wrapFetchWithHooks = void 0; const utils_1 = require("@graphql-tools/utils"); const iterateAsync_js_1 = require("./iterateAsync.js"); function wrapFetchWithHooks(onFetchHooks) { return function wrappedFetchFn(url, options, context, info) { let fetchFn; const doneHooks = []; function setFetchFn(newFetchFn) { fetchFn = newFetchFn; } const result$ = (0, iterateAsync_js_1.iterateAsync)(onFetchHooks, onFetch => onFetch({ fetchFn, setFetchFn, url, setURL(newUrl) { url = String(newUrl); }, options, setOptions(newOptions) { options = newOptions; }, context, info, }), doneHooks); function handleIterationResult() { const response$ = fetchFn(url, options, context, info); if (doneHooks.length === 0) { return response$; } if ((0, utils_1.isPromise)(response$)) { return response$.then(response => handleOnFetchDone(response, doneHooks)); } return handleOnFetchDone(response$, doneHooks); } if ((0, utils_1.isPromise)(result$)) { return result$.then(handleIterationResult); } return handleIterationResult(); }; } exports.wrapFetchWithHooks = wrapFetchWithHooks; function handleOnFetchDone(response, onFetchDoneHooks) { function setResponse(newResponse) { response = newResponse; } const result$ = (0, iterateAsync_js_1.iterateAsync)(onFetchDoneHooks, onFetchDone => onFetchDone({ response, setResponse, })); if ((0, utils_1.isPromise)(result$)) { return result$.then(() => response); } return response; }