"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 0 && (module.exports = { isHangingPromiseRejectionError: null, makeDevtoolsIOAwarePromise: null, makeHangingPromise: null }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { isHangingPromiseRejectionError: function() { return isHangingPromiseRejectionError; }, makeDevtoolsIOAwarePromise: function() { return makeDevtoolsIOAwarePromise; }, makeHangingPromise: function() { return makeHangingPromise; } }); function isHangingPromiseRejectionError(err) { if (typeof err !== 'object' || err === null || !('digest' in err)) { return false; } return err.digest === HANGING_PROMISE_REJECTION; } const HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'; class HangingPromiseRejectionError extends Error { constructor(route, expression){ super(`During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${route}".`), this.route = route, this.expression = expression, this.digest = HANGING_PROMISE_REJECTION; } } const abortListenersBySignal = new WeakMap(); function makeHangingPromise(signal, route, expression) { if (signal.aborted) { return Promise.reject(new HangingPromiseRejectionError(route, expression)); } else { const hangingPromise = new Promise((_, reject)=>{ const boundRejection = reject.bind(null, new HangingPromiseRejectionError(route, expression)); let currentListeners = abortListenersBySignal.get(signal); if (currentListeners) { currentListeners.push(boundRejection); } else { const listeners = [ boundRejection ]; abortListenersBySignal.set(signal, listeners); signal.addEventListener('abort', ()=>{ for(let i = 0; i < listeners.length; i++){ listeners[i](); } }, { once: true }); } }); // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct // your own promise out of it you'll need to ensure you handle the error when it rejects. hangingPromise.catch(ignoreReject); return hangingPromise; } } function ignoreReject() {} function makeDevtoolsIOAwarePromise(underlying) { // in React DevTools if we resolve in a setTimeout we will observe // the promise resolution as something that can suspend a boundary or root. return new Promise((resolve)=>{ // Must use setTimeout to be considered IO React DevTools. setImmediate will not work. setTimeout(()=>{ resolve(underlying); }, 0); }); } //# sourceMappingURL=dynamic-rendering-utils.js.map