react-ssr-prepass
Version:
A custom partial React SSR renderer for prefetching and suspense
912 lines (800 loc) • 18.9 kB
JavaScript
;
var e = require("react");
function _interopDefaultLegacy(e) {
return e && "object" == typeof e && "default" in e ? e : {
default: e
};
}
var r = _interopDefaultLegacy(e);
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 t = 60103;
var n = 60106;
var u = 60107;
var o = 60108;
var a = 60114;
var i = 60109;
var c = 60110;
var l = 60111;
var f = 60112;
var s = 60113;
var v = 60115;
var p = 60116;
if ("function" == typeof Symbol && Symbol.for) {
var d = Symbol.for;
t = d("react.element");
n = d("react.portal");
u = d("react.fragment");
o = d("react.strict_mode");
a = d("react.profiler");
i = d("react.provider");
c = d("react.context");
l = Symbol.for("react.concurrent_mode");
f = d("react.forward_ref");
s = d("react.suspense");
v = d("react.memo");
p = d("react.lazy");
}
var m = t;
var h = n;
var y = u;
var _ = o;
var S = a;
var x = i;
var b = c;
var g = l;
var M = f;
var E = s;
var k = v;
var w = p;
var F = e.Children.toArray;
var isAbstractElement = function(e) {
return null !== e && "object" == typeof e;
};
var getChildrenArray = function(e) {
return F(e).filter(isAbstractElement);
};
var computeProps = function(e, r) {
return "object" == typeof r ? _extends({}, r, e) : e;
};
var I = new Map;
var D = {};
var q = void 0;
var C = void 0;
var getCurrentContextMap = function() {
return _extends({}, D);
};
var getCurrentContextStore = function() {
return new Map(I);
};
var flushPrevContextMap = function() {
var e = q;
q = void 0;
return e;
};
var flushPrevContextStore = function() {
var e = C;
C = void 0;
return e;
};
var restoreContextMap = function(e) {
if (void 0 !== e) {
_extends(D, e);
}
};
var restoreContextStore = function(e) {
if (void 0 !== e) {
I.set(e[0], e[1]);
}
};
var setCurrentContextMap = function(e) {
q = void 0;
D = e;
};
var setCurrentContextStore = function(e) {
C = void 0;
I = e;
};
var readContextValue = function(e) {
var r = I.get(e);
if (void 0 !== r) {
return r;
}
return e._currentValue;
};
var R = {};
var maskContext = function(e) {
var r = e.contextType;
var t = e.contextTypes;
if (r) {
return readContextValue(r);
} else if (!t) {
return R;
}
var n = {};
for (var u in t) {
n[u] = D[u];
}
return n;
};
var O = null;
var getCurrentErrorFrame = function() {
return O;
};
var setCurrentErrorFrame = function(e) {
O = e || null;
};
var P = {
current: {
uniqueID: 0
}
};
var z = "function" == typeof Object.is ? Object.is : function is(e, r) {
return e === r && (0 !== e || 1 / e == 1 / r) || e != e && r != r;
};
var W = null;
var setCurrentIdentity = function(e) {
W = e;
};
var getCurrentIdentity = function() {
if (null === W) {
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 W;
};
var j = null;
var N = null;
var T = !1;
var A = null;
var U = 0;
var setFirstHook = function(e) {
j = e;
};
function createWorkInProgressHook() {
if (null === N) {
if (null === j) {
return j = N = {
memoizedState: null,
queue: null,
next: null
};
} else {
return N = j;
}
} else if (null === N.next) {
return N = N.next = {
memoizedState: null,
queue: null,
next: null
};
} else {
return N = N.next;
}
}
function basicStateReducer(e, r) {
return "function" == typeof r ? r(e) : r;
}
function useReducer(e, r, t) {
var n = getCurrentIdentity();
if (null === (N = createWorkInProgressHook()).queue) {
var u;
if (e === basicStateReducer) {
u = "function" == typeof r ? r() : r;
} else {
u = void 0 !== t ? t(r) : r;
}
N.memoizedState = u;
}
var o = N.queue || (N.queue = {
last: null,
dispatch: null
});
var a = o.dispatch || (o.dispatch = dispatchAction.bind(null, n, o));
if (null !== A) {
var i = A.get(o);
if (void 0 !== i) {
A.delete(o);
var c = N.memoizedState;
var l = i;
do {
c = e(c, l.action);
l = l.next;
} while (null !== l);
N.memoizedState = c;
}
}
return [ N.memoizedState, a ];
}
function useMemo(e, r) {
getCurrentIdentity();
var t = void 0 === r ? null : r;
var n = (N = 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 (!z(e[t], r[t])) {
return !1;
}
}
return !0;
}(t, n[1])) {
return n[0];
}
}
var u = e();
N.memoizedState = [ u, t ];
return u;
}
function useOpaqueIdentifier() {
getCurrentIdentity();
if (!(N = createWorkInProgressHook()).memoizedState) {
N.memoizedState = "R:" + (P.current.uniqueID++).toString(36);
}
return N.memoizedState;
}
function dispatchAction(e, r, t) {
if (e === W) {
T = !0;
var n = {
action: t,
next: null
};
if (null === A) {
A = new Map;
}
var u = A.get(r);
if (void 0 === u) {
A.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 H = {
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 = (N = createWorkInProgressHook()).memoizedState;
if (null === r) {
var t = {
current: e
};
N.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(r, t, n) {
var u = r._payload || r;
if (1 === u._status) {
return e.createElement(u._result, t);
}
return null;
};
var makeFrame$1 = function(e, r, t) {
return {
contextMap: getCurrentContextMap(),
contextStore: getCurrentContextStore(),
id: getCurrentIdentity(),
hook: j,
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) {
N = null;
var n = e(r, t);
while (U < 25 && T) {
T = !1;
U += 1;
N = null;
n = e(r, t);
}
U = 0;
A = null;
N = 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) {
q = {};
for (var r in e) {
q[r] = D[r];
D[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 = (r.default.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED || r.default.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE).ReactCurrentDispatcher;
var $ = "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(r, t, n) {
switch (function(e) {
switch (e.$$typeof) {
case h:
return h;
case m:
switch (e.type) {
case g:
return g;
case y:
return y;
case S:
return S;
case _:
return _;
case E:
return E;
default:
switch (e.type && e.type.$$typeof) {
case w:
return w;
case k:
return k;
case b:
return b;
case x:
return x;
case M:
return M;
default:
return m;
}
}
default:
return;
}
}(r)) {
case E:
case _:
case g:
case S:
case y:
return getChildrenArray(r.props.children);
case x:
var u = r.props;
var o = u.children;
!function(e, r) {
C = [ e, I.get(e) ];
I.set(e, r);
}(r.type._context, u.value);
return getChildrenArray(o);
case b:
var a = r.props.children;
if ("function" == typeof a) {
var i = r.type;
var c = readContextValue("object" == typeof i._context ? i._context : i);
return getChildrenArray(a(c));
} else {
return [];
}
case w:
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);
}(r.type, r.props, t);
return getChildrenArray(l);
case k:
var f = e.createElement(r.type.type, r.props);
return getChildrenArray(f);
case M:
var s = r.type;
var v = s.render;
var p = computeProps(r.props, s.defaultProps);
var d = e.createElement(v, p);
return getChildrenArray(d);
case m:
if ("string" == typeof r.type) {
return getChildrenArray(r.props.children);
} else {
var F = render(r.type, r.props, t, n, r);
return getChildrenArray(F);
}
default:
return [];
}
};
var visitLoop = function(e, r, t, n, u, o) {
var a = L.current;
var i = Date.now();
try {
L.current = H;
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 ($ && 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 = H;
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 ($ && "frame.yield" === n.kind) {
n.thenable = new Promise(_ref);
}
return Promise.resolve(n.thenable).then((function() {
!function(e) {
P.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;
};
module.exports = function(e, r) {
if (!r) {
r = defaultVisitor;
}
var t = [];
var n = P.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);
};
//# sourceMappingURL=react-ssr-prepass.js.map