UNPKG

react-ssr-prepass

Version:

A custom partial React SSR renderer for prefetching and suspense

904 lines (794 loc) 18.8 kB
import e, { Children as r, createElement as t } from "react"; function _extends() { _extends = Object.assign || function(e) { for (var r = 1; r < arguments.length; r++) { var t = arguments[r]; for (var n in t) { if (Object.prototype.hasOwnProperty.call(t, n)) { e[n] = t[n]; } } } return e; }; return _extends.apply(this, arguments); } var n = 60103; var u = 60106; var o = 60107; var a = 60108; var i = 60114; var c = 60109; var l = 60110; var f = 60111; var s = 60112; var v = 60113; var p = 60115; var d = 60116; if ("function" == typeof Symbol && Symbol.for) { var m = Symbol.for; n = m("react.element"); u = m("react.portal"); o = m("react.fragment"); a = m("react.strict_mode"); i = m("react.profiler"); c = m("react.provider"); l = m("react.context"); f = Symbol.for("react.concurrent_mode"); s = m("react.forward_ref"); v = m("react.suspense"); p = m("react.memo"); d = m("react.lazy"); } var h = n; var y = u; var _ = o; var S = a; var x = i; var b = c; var M = l; var g = f; var k = s; var w = v; var E = p; var F = d; var I = r.toArray; var isAbstractElement = function(e) { return null !== e && "object" == typeof e; }; var getChildrenArray = function(e) { return I(e).filter(isAbstractElement); }; var computeProps = function(e, r) { return "object" == typeof r ? _extends({}, r, e) : e; }; var q = new Map; var C = {}; var D = void 0; var R = void 0; var getCurrentContextMap = function() { return _extends({}, C); }; var getCurrentContextStore = function() { return new Map(q); }; var flushPrevContextMap = function() { var e = D; D = void 0; return e; }; var flushPrevContextStore = function() { var e = R; R = void 0; return e; }; var restoreContextMap = function(e) { if (void 0 !== e) { _extends(C, e); } }; var restoreContextStore = function(e) { if (void 0 !== e) { q.set(e[0], e[1]); } }; var setCurrentContextMap = function(e) { D = void 0; C = e; }; var setCurrentContextStore = function(e) { R = void 0; q = e; }; var readContextValue = function(e) { var r = q.get(e); if (void 0 !== r) { return r; } return e._currentValue; }; var O = {}; var maskContext = function(e) { var r = e.contextType; var t = e.contextTypes; if (r) { return readContextValue(r); } else if (!t) { return O; } var n = {}; for (var u in t) { n[u] = C[u]; } return n; }; var P = null; var getCurrentErrorFrame = function() { return P; }; var setCurrentErrorFrame = function(e) { P = e || null; }; var z = { current: { uniqueID: 0 } }; var W = "function" == typeof Object.is ? Object.is : function is(e, r) { return e === r && (0 !== e || 1 / e == 1 / r) || e != e && r != r; }; var N = null; var setCurrentIdentity = function(e) { N = e; }; var getCurrentIdentity = function() { if (null === N) { throw new Error("[react-ssr-prepass] Hooks can only be called inside the body of a function component. (https://fb.me/react-invalid-hook-call)"); } return N; }; var T = null; var j = null; var A = !1; var U = null; var H = 0; var setFirstHook = function(e) { T = e; }; function createWorkInProgressHook() { if (null === j) { if (null === T) { return T = j = { memoizedState: null, queue: null, next: null }; } else { return j = T; } } else if (null === j.next) { return j = j.next = { memoizedState: null, queue: null, next: null }; } else { return j = j.next; } } function basicStateReducer(e, r) { return "function" == typeof r ? r(e) : r; } function useReducer(e, r, t) { var n = getCurrentIdentity(); if (null === (j = createWorkInProgressHook()).queue) { var u; if (e === basicStateReducer) { u = "function" == typeof r ? r() : r; } else { u = void 0 !== t ? t(r) : r; } j.memoizedState = u; } var o = j.queue || (j.queue = { last: null, dispatch: null }); var a = o.dispatch || (o.dispatch = dispatchAction.bind(null, n, o)); if (null !== U) { var i = U.get(o); if (void 0 !== i) { U.delete(o); var c = j.memoizedState; var l = i; do { c = e(c, l.action); l = l.next; } while (null !== l); j.memoizedState = c; } } return [ j.memoizedState, a ]; } function useMemo(e, r) { getCurrentIdentity(); var t = void 0 === r ? null : r; var n = (j = createWorkInProgressHook()).memoizedState; if (null !== n && null !== t) { if (function areHookInputsEqual(e, r) { if (null === r) { return !1; } for (var t = 0; t < r.length && t < e.length; t++) { if (!W(e[t], r[t])) { return !1; } } return !0; }(t, n[1])) { return n[0]; } } var u = e(); j.memoizedState = [ u, t ]; return u; } function useOpaqueIdentifier() { getCurrentIdentity(); if (!(j = createWorkInProgressHook()).memoizedState) { j.memoizedState = "R:" + (z.current.uniqueID++).toString(36); } return j.memoizedState; } function dispatchAction(e, r, t) { if (e === N) { A = !0; var n = { action: t, next: null }; if (null === U) { U = new Map; } var u = U.get(r); if (void 0 === u) { U.set(r, n); } else { var o = u; while (null !== o.next) { o = o.next; } o.next = n; } } } function noop() {} function _ref$2(e) { e(); } var $ = { readContext: function readContext(e, r) { return readContextValue(e); }, useSyncExternalStore: function useSyncExternalStore(e, r, t) { return r(); }, useContext: function useContext(e, r) { getCurrentIdentity(); return readContextValue(e); }, useMemo: useMemo, useReducer: useReducer, useRef: function useRef(e) { getCurrentIdentity(); var r = (j = createWorkInProgressHook()).memoizedState; if (null === r) { var t = { current: e }; j.memoizedState = t; return t; } else { return r; } }, useState: function useState(e) { return useReducer(basicStateReducer, e); }, useCallback: function useCallback(e, r) { return useMemo((function() { return e; }), r); }, useMutableSource: function useMutableSource(e, r, t) { getCurrentIdentity(); return r(e._source); }, useTransition: function useTransition() { return [ _ref$2, !1 ]; }, useDeferredValue: function useDeferredValue(e) { return e; }, useOpaqueIdentifier: useOpaqueIdentifier, useId: useOpaqueIdentifier, unstable_useId: useOpaqueIdentifier, unstable_useOpaqueIdentifier: useOpaqueIdentifier, useLayoutEffect: noop, useImperativeHandle: noop, useEffect: noop, useDebugValue: noop }; var resolve = function(e) { var r = e._payload || e; if (0 === r._status) { return r._result; } else if (1 === r._status) { return Promise.resolve(r._result); } else if (2 === r._status) { return Promise.reject(r._result); } r._status = 0; return r._result = (r._ctor || r._result)().then((function(e) { r._result = e; if ("function" == typeof e) { r._status = 1; } else if (null !== e && "object" == typeof e && "function" == typeof e.default) { r._result = e.default; r._status = 1; } else { r._status = 2; } })).catch((function(e) { r._status = 2; r._result = e; return Promise.reject(e); })); }; var render$3 = function(e, r, n) { var u = e._payload || e; if (1 === u._status) { return t(u._result, r); } return null; }; var makeFrame$1 = function(e, r, t) { return { contextMap: getCurrentContextMap(), contextStore: getCurrentContextStore(), id: getCurrentIdentity(), hook: T, kind: "frame.hooks", errorFrame: getCurrentErrorFrame(), thenable: t, props: r, type: e }; }; var render$2 = function(e, r, t) { try { return function renderWithHooks(e, r, t) { j = null; var n = e(r, t); while (H < 25 && A) { A = !1; H += 1; j = null; n = e(r, t); } H = 0; U = null; j = null; return n; }(e, computeProps(r, e.defaultProps), maskContext(e)); } catch (n) { if ("function" != typeof n.then) { throw n; } t.push(makeFrame$1(e, r, n)); return null; } }; function _ref$1() { return !1; } function _ref2() { return null; } var createInstance = function(e, r) { var t = { _thrown: 0, queue: n = [], isMounted: _ref$1, enqueueForceUpdate: _ref2, enqueueReplaceState: function(e, r) { if (e._isMounted) { n.length = 0; n.push(r); } }, enqueueSetState: function(e, r) { if (e._isMounted) { n.push(r); } } }; var n; var u = computeProps(r, e.defaultProps); var o = maskContext(e); var a = new e(u, o, t); a.props = u; a.context = o; a.updater = t; a._isMounted = !0; if (void 0 === a.state) { a.state = null; } if ("function" == typeof a.componentDidCatch || "function" == typeof e.getDerivedStateFromError) { var i = makeFrame(e, a, null); i.errorFrame = i; setCurrentErrorFrame(i); } if ("function" == typeof e.getDerivedStateFromProps) { var c = (0, e.getDerivedStateFromProps)(a.props, a.state); if (null != c) { a.state = _extends({}, a.state, c); } } else if ("function" == typeof a.componentWillMount) { a.componentWillMount(); } else if ("function" == typeof a.UNSAFE_componentWillMount) { a.UNSAFE_componentWillMount(); } return a; }; var makeFrame = function(e, r, t) { return { contextMap: getCurrentContextMap(), contextStore: getCurrentContextStore(), errorFrame: getCurrentErrorFrame(), thenable: t, kind: "frame.class", error: null, instance: r, type: e }; }; var render$1 = function(e, r, t) { !function(e) { var r = e.updater.queue; if (r.length > 0) { var t = _extends({}, e.state); for (var n = 0, u = r.length; n < u; n++) { var o = r[n]; var a = "function" == typeof o ? o.call(e, t, e.props, e.context) : o; if (null !== a) { _extends(t, a); } } e.state = t; r.length = 0; } }(r); var n = null; try { n = r.render(); } catch (n) { if ("function" != typeof n.then) { throw n; } t.push(makeFrame(e, r, n)); return null; } if (void 0 !== e.childContextTypes && "function" == typeof r.getChildContext) { var u = r.getChildContext(); if (null !== u && "object" == typeof u) { !function(e) { D = {}; for (var r in e) { D[r] = C[r]; C[r] = e[r]; } }(u); } } if ("function" != typeof r.getDerivedStateFromProps && ("function" == typeof r.componentWillMount || "function" == typeof r.UNSAFE_componentWillMount) && "function" == typeof r.componentWillUnmount) { try { r.componentWillUnmount(); } catch (e) {} } r._isMounted = !1; return n; }; var L = (e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED || e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE).ReactCurrentDispatcher; var V = "function" == typeof setImmediate; var render = function(e, r, t, n, u) { return (o = e).prototype && o.prototype.isReactComponent ? function(e, r, t, n, u) { setCurrentIdentity(null); var o = createInstance(e, r); var a = n(u, o); if (a) { t.push(makeFrame(e, o, a)); return null; } return render$1(e, o, t); }(e, r, t, n, u) : function(e, r, t, n, u) { setFirstHook(null); setCurrentIdentity({}); var o = n(u); if (o) { t.push(makeFrame$1(e, r, o)); return null; } return render$2(e, r, t); }(e, r, t, n, u); var o; }; var visitElement = function(e, r, n) { switch (function(e) { switch (e.$$typeof) { case y: return y; case h: switch (e.type) { case g: return g; case _: return _; case x: return x; case S: return S; case w: return w; default: switch (e.type && e.type.$$typeof) { case F: return F; case E: return E; case M: return M; case b: return b; case k: return k; default: return h; } } default: return; } }(e)) { case w: case S: case g: case x: case _: return getChildrenArray(e.props.children); case b: var u = e.props; var o = u.children; !function(e, r) { R = [ e, q.get(e) ]; q.set(e, r); }(e.type._context, u.value); return getChildrenArray(o); case M: var a = e.props.children; if ("function" == typeof a) { var i = e.type; var c = readContextValue("object" == typeof i._context ? i._context : i); return getChildrenArray(a(c)); } else { return []; } case F: var l = function(e, r, t) { if ((e._payload || e)._status <= 0) { t.push({ kind: "frame.lazy", contextMap: getCurrentContextMap(), contextStore: getCurrentContextStore(), errorFrame: getCurrentErrorFrame(), thenable: resolve(e), props: r, type: e }); return null; } return render$3(e, r); }(e.type, e.props, r); return getChildrenArray(l); case E: var f = t(e.type.type, e.props); return getChildrenArray(f); case k: var s = e.type; var v = s.render; var p = computeProps(e.props, s.defaultProps); var d = t(v, p); return getChildrenArray(d); case h: if ("string" == typeof e.type) { return getChildrenArray(e.props.children); } else { var m = render(e.type, e.props, r, n, e); return getChildrenArray(m); } default: return []; } }; var visitLoop = function(e, r, t, n, u, o) { var a = L.current; var i = Date.now(); try { L.current = $; while (e.length > 0) { var c = e[e.length - 1].shift(); if (void 0 !== c) { var l = visitElement(c, u, o); e.push(l); r.push(flushPrevContextMap()); t.push(flushPrevContextStore()); n.push(getCurrentErrorFrame()); } else { e.pop(); restoreContextMap(r.pop()); restoreContextStore(t.pop()); setCurrentErrorFrame(n.pop()); } if (V && Date.now() - i > 5) { return !0; } } return !1; } catch (e) { var f = getCurrentErrorFrame(); if (!f) { throw e; } f.error = e; u.unshift(f); return !1; } finally { L.current = a; } }; var makeYieldFrame = function(e, r, t, n) { return { contextMap: getCurrentContextMap(), contextStore: getCurrentContextStore(), errorFrame: getCurrentErrorFrame(), thenable: null, kind: "frame.yield", traversalChildren: e, traversalMap: r, traversalStore: t, traversalErrorFrame: n }; }; var visit = function(e, r, t) { var n = [ e ]; var u = [ flushPrevContextMap() ]; var o = [ flushPrevContextStore() ]; var a = [ getCurrentErrorFrame() ]; if (visitLoop(n, u, o, a, r, t)) { r.unshift(makeYieldFrame(n, u, o, a)); } }; var update = function(e, r, t) { if ("frame.yield" === e.kind) { setCurrentIdentity(null); setCurrentContextMap(e.contextMap); setCurrentContextStore(e.contextStore); setCurrentErrorFrame(e.errorFrame); if (visitLoop(e.traversalChildren, e.traversalMap, e.traversalStore, e.traversalErrorFrame, r, t)) { r.unshift(makeYieldFrame(e.traversalChildren, e.traversalMap, e.traversalStore, e.traversalErrorFrame)); } } else { var n = L.current; var u = null; L.current = $; try { if ("frame.class" === e.kind) { u = function(e, r) { setCurrentIdentity(null); setCurrentContextMap(r.contextMap); setCurrentContextStore(r.contextStore); setCurrentErrorFrame(r.errorFrame); if (r.error) { if (++r.instance.updater._thrown >= 25) { return null; } r.instance._isMounted = !0; if ("function" == typeof r.instance.componentDidCatch) { r.instance.componentDidCatch(r.error); } if ("function" == typeof r.type.getDerivedStateFromError) { r.instance.updater.enqueueSetState(r.instance, r.type.getDerivedStateFromError(r.error)); } } return render$1(r.type, r.instance, e); }(r, e); } else if ("frame.hooks" === e.kind) { u = function(e, r) { setFirstHook(r.hook); setCurrentIdentity(r.id); setCurrentContextMap(r.contextMap); setCurrentContextStore(r.contextStore); setCurrentErrorFrame(r.errorFrame); return render$2(r.type, r.props, e); }(r, e); } else if ("frame.lazy" === e.kind) { u = function(e, r) { setCurrentIdentity(null); setCurrentContextMap(r.contextMap); setCurrentContextStore(r.contextStore); setCurrentErrorFrame(r.errorFrame); return render$3(r.type, r.props); }(0, e); } } catch (e) { var o = getCurrentErrorFrame(); if (!o) { throw e; } o.error = e; r.unshift(o); u = null; } finally { L.current = n; } visit(getChildrenArray(u), r, t); } }; function _ref(e, r) { setImmediate(e); } var flushFrames = function(e, r, t) { var n = e.shift(); if (!n) { return Promise.resolve(); } if (V && "frame.yield" === n.kind) { n.thenable = new Promise(_ref); } return Promise.resolve(n.thenable).then((function() { !function(e) { z.current = e; }(t); update(n, e, r); return flushFrames(e, r, t); }), (function(t) { if (!n.errorFrame) { throw t; } n.errorFrame.error = t; update(n.errorFrame, e, r); })); }; var defaultVisitor = function() { return; }; var renderPrepass = function(e, r) { if (!r) { r = defaultVisitor; } var t = []; var n = z.current = { uniqueID: 0 }; setCurrentContextMap({}); setCurrentContextStore(new Map); setCurrentErrorFrame(null); try { visit(getChildrenArray(e), t, r); } catch (e) { return Promise.reject(e); } return flushFrames(t, r, n); }; export { renderPrepass as default }; //# sourceMappingURL=react-ssr-prepass.es.js.map