santi
Version:
Isomorphic framework for base on create-react-app and jsdom
776 lines (753 loc) • 25.2 kB
TypeScript
import React, { createContext, forwardRef, useContext, useMemo, useState as useState$1, useRef, useEffect } from 'react';
import hoistStatics from 'hoist-non-react-statics';
import NodeKey from 'react-node-key';
import ReactDOM from 'react-dom';
function _arrayLikeToArray(r, a) {
(null == a || a > r.length) && (a = r.length);
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
return n;
}
function _arrayWithHoles(r) {
if (Array.isArray(r)) return r;
}
function asyncGeneratorStep(n, t, e, r, o, a, c) {
try {
var i = n[a](c),
u = i.value;
} catch (n) {
return void e(n);
}
i.done ? t(u) : Promise.resolve(u).then(r, o);
}
function _asyncToGenerator(n) {
return function () {
var t = this,
e = arguments;
return new Promise(function (r, o) {
var a = n.apply(t, e);
function _next(n) {
asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
}
function _throw(n) {
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
}
_next(void 0);
});
};
}
function _defineProperty(e, r, t) {
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r] = t, e;
}
function _extends() {
return _extends = Object.assign ? Object.assign.bind() : function (n) {
for (var e = 1; e < arguments.length; e++) {
var t = arguments[e];
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
}
return n;
}, _extends.apply(null, arguments);
}
function _iterableToArrayLimit(r, l) {
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (null != t) {
var e,
n,
i,
u,
a = [],
f = !0,
o = !1;
try {
if (i = (t = t.call(r)).next, 0 === l) {
if (Object(t) !== t) return;
f = !1;
} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
} catch (r) {
o = !0, n = r;
} finally {
try {
if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
} finally {
if (o) throw n;
}
}
return a;
}
}
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function ownKeys(e, r) {
var t = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
r && (o = o.filter(function (r) {
return Object.getOwnPropertyDescriptor(e, r).enumerable;
})), t.push.apply(t, o);
}
return t;
}
function _objectSpread2(e) {
for (var r = 1; r < arguments.length; r++) {
var t = null != arguments[r] ? arguments[r] : {};
r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
_defineProperty(e, r, t[r]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
});
}
return e;
}
function _objectWithoutProperties(e, t) {
if (null == e) return {};
var o,
r,
i = _objectWithoutPropertiesLoose(e, t);
if (Object.getOwnPropertySymbols) {
var n = Object.getOwnPropertySymbols(e);
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
}
return i;
}
function _objectWithoutPropertiesLoose(r, e) {
if (null == r) return {};
var t = {};
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
if (-1 !== e.indexOf(n)) continue;
t[n] = r[n];
}
return t;
}
function _regenerator() {
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
var e,
t,
r = "function" == typeof Symbol ? Symbol : {},
n = r.iterator || "@@iterator",
o = r.toStringTag || "@@toStringTag";
function i(r, n, o, i) {
var c = n && n.prototype instanceof Generator ? n : Generator,
u = Object.create(c.prototype);
return _regeneratorDefine(u, "_invoke", function (r, n, o) {
var i,
c,
u,
f = 0,
p = o || [],
y = !1,
G = {
p: 0,
n: 0,
v: e,
a: d,
f: d.bind(e, 4),
d: function (t, r) {
return i = t, c = 0, u = e, G.n = r, a;
}
};
function d(r, n) {
for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {
var o,
i = p[t],
d = G.p,
l = i[2];
r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));
}
if (o || r > 1) return a;
throw y = !0, n;
}
return function (o, p, l) {
if (f > 1) throw TypeError("Generator is already running");
for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {
i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);
try {
if (f = 2, i) {
if (c || (o = "next"), t = i[o]) {
if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");
if (!t.done) return t;
u = t.value, c < 2 && (c = 0);
} else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);
i = e;
} else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;
} catch (t) {
i = e, c = 1, u = t;
} finally {
f = 1;
}
}
return {
value: t,
done: y
};
};
}(r, o, i), !0), u;
}
var a = {};
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
t = Object.getPrototypeOf;
var c = [][n] ? t(t([][n]())) : (_regeneratorDefine(t = {}, n, function () {
return this;
}), t),
u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);
function f(e) {
return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;
}
return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine(u), _regeneratorDefine(u, o, "Generator"), _regeneratorDefine(u, n, function () {
return this;
}), _regeneratorDefine(u, "toString", function () {
return "[object Generator]";
}), (_regenerator = function () {
return {
w: i,
m: f
};
})();
}
function _regeneratorDefine(e, r, n, t) {
var i = Object.defineProperty;
try {
i({}, "", {});
} catch (e) {
i = 0;
}
_regeneratorDefine = function (e, r, n, t) {
function o(r, n) {
_regeneratorDefine(e, r, function (e) {
return this._invoke(r, n, e);
});
}
r ? i ? i(e, r, {
value: n,
enumerable: !t,
configurable: !t,
writable: !t
}) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
}, _regeneratorDefine(e, r, n, t);
}
function _slicedToArray(r, e) {
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
}
function _toPrimitive(t, r) {
if ("object" != typeof t || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != typeof i) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == typeof i ? i : i + "";
}
function _unsupportedIterableToArray(r, a) {
if (r) {
if ("string" == typeof r) return _arrayLikeToArray(r, a);
var t = {}.toString.call(r).slice(8, -1);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
}
}
// 值类型判断 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var isUndefined = function isUndefined(val) {
return typeof val === 'undefined';
};
var isNull = function isNull(val) {
return val === null;
};
var isFunction = function isFunction(val) {
return typeof val === 'function';
};
var isString = function isString(val) {
return typeof val === 'string';
};
var isExist = function isExist(val) {
return !(isUndefined(val) || isNull(val));
};
var isNaN = function isNaN(val) {
return isFunction(Number.isNaN) ? Number.isNaN(val) : val !== val;
}; // eslint-disable-line
var isNumber = function isNumber(val) {
return typeof val === 'number' && !isNaN(val);
};
var isPromiseLike = function isPromiseLike(val) {
return isExist(val) && isFunction(val.then);
};
// 值类型判断 -------------------------------------------------------------
var get = function get(obj) {
var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var defaultValue = arguments.length > 2 ? arguments[2] : undefined;
try {
if (isNumber(keys)) {
keys = String(keys);
}
var result = (isString(keys) ? keys.split('.') : keys).reduce(function (res, key) {
return res[key];
}, obj);
return isUndefined(result) ? defaultValue : result;
} catch (e) {
return defaultValue;
}
};
var run = function run(obj) {
var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
keys = isString(keys) ? keys.split('.') : keys;
var func = get(obj, keys);
var context = get(obj, keys.slice(0, -1));
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
return isFunction(func) ? func.call.apply(func, [context].concat(args)) : func;
};
var delay = function delay(time) {
return new Promise(function (resolve) {
return setTimeout(resolve, time);
});
};
/**
* [防抖]
* @param {Function} func 执行函数
* @param {Number} wait 多少毫秒后运行一次
*/
var debounce = function debounce(func) {
var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;
var timeout;
return function () {
var _this = this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
clearTimeout(timeout);
timeout = setTimeout(function () {
func.apply(_this, args);
}, wait);
return timeout;
};
};
/**
* [用来智能处理Promise类型返回值]
* 当值生成过程为 promise 时,将得到 promise 类型返回值,按约定 resolve 最终值
* 当过程不为 promise 时将直接得到值
* @param {Function} executor 执行过程获取
* @param {Function} valuer 值处理过程
*/
var promiseGuess = function promiseGuess(executor, valuer) {
return function () {
var _this2 = this;
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
var value = executor.apply(this, args);
return isPromiseLike(value) ? new Promise(function (resolve) {
return value.then(function (value) {
return resolve(valuer.call.apply(valuer, [_this2, null, value].concat(args)));
})["catch"](function (err) {
return resolve(valuer.call.apply(valuer, [_this2, err, undefined].concat(args)));
});
}) : valuer.call.apply(valuer, [this, null, value].concat(args));
};
};
var _excluded = ["forwardRef", "__key"];
var _filehash = "mj54";
var context = createContext();
var Provider = context.Provider;
function withSanti(Component) {
function WrappedComponent(_ref) {
var forwardRef = _ref.forwardRef,
nodeKey = _ref.__key,
props = _objectWithoutProperties(_ref, _excluded);
var count = 0;
var contextValue = useMemo(function () {
return {
nodeKey: nodeKey,
getCountedKey: function getCountedKey() {
return nodeKey ? "".concat(nodeKey, ":").concat(count++) : undefined;
}
};
}, [nodeKey]);
return /*#__PURE__*/React.createElement(Provider, {
value: contextValue,
_nk: "".concat(_filehash, "11")
}, /*#__PURE__*/React.createElement(Component, _extends({}, props, {
ref: forwardRef,
_nk: "".concat(_filehash, "21")
})));
}
var ForwardedRefHOC = forwardRef(function (props, ref) {
return /*#__PURE__*/React.createElement(NodeKey, {
_nk: "".concat(_filehash, "31")
}, function (nodeKey) {
return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, {
forwardedRef: ref,
__key: nodeKey,
_nk: "".concat(_filehash, "41")
}));
});
});
return hoistStatics(ForwardedRefHOC, WrappedComponent);
}
function useNodeKey() {
return useContext(context) || {
nodeKey: undefined,
getCountedKey: function getCountedKey() {
return undefined;
}
};
}
function useSID() {
var _useNodeKey = useNodeKey(),
sid = _useNodeKey.nodeKey,
getCountedSID = _useNodeKey.getCountedKey;
return {
sid: sid,
getCountedSID: getCountedSID
};
}
var KEY = '__SSRDATA__';
function inject() {
var script = document.getElementById(KEY) || document.createElement('script');
script.id = KEY;
script.innerHTML = "window.".concat(KEY, "={};");
document.head.appendChild(script);
}
function bootstrap() {
if (window.__SSR__) {
inject();
} else {
if (isExist(document.getElementById(KEY))) {
window.__SSRED__ = true;
}
}
var data = window[KEY] || {};
function remove(key) {
delete data[key];
}
function set(key, value) {
if (!window.__SSR__) {
return;
}
data[key] = value;
document.getElementById(KEY).innerHTML = "window.".concat(KEY, "=").concat(JSON.stringify(data), ";");
}
function get(key) {
var value = data[key];
remove(key); // 初始值只在 html 就绪后使用一次,使用即销毁
return value;
}
return {
set: set,
get: get,
remove: remove
};
}
var store = bootstrap();
var store$1 = {
get: promiseGuess(function (key, builder) {
if (!key && window.__SSR__) {
// 若无 key 则 SSR 阶段不计算
return undefined;
}
var value;
if (!window.__SSR__) {
value = store.get(key);
}
if (isUndefined(value)) {
value = run(builder);
}
return value;
}, function (err, value, key) {
if (!key) {
return [null, value];
}
if (err) {
store.remove(key);
return [err, undefined];
}
if (window.__SSR__) {
store.set(key, value);
}
return [null, value];
}),
set: store.set
};
var warningMissingKey = debounce(function () {
if (window.__SSR__) {
return;
}
console.warn('You shouldn\'t use "santi.useState" outside a "withSanti"');
}, 32);
function useState(initialState, key) {
var _useNodeKey = useNodeKey(),
getCountedKey = _useNodeKey.getCountedKey;
var nodeKey = key || run(getCountedKey);
var _useReactState = useState$1(function () {
if (!nodeKey) {
warningMissingKey();
}
var _store$get = store$1.get(nodeKey, initialState),
_store$get2 = _slicedToArray(_store$get, 2),
err = _store$get2[0],
value = _store$get2[1];
if (err) {
console.error(err);
}
return value;
}),
_useReactState2 = _slicedToArray(_useReactState, 2),
state = _useReactState2[0],
setState = _useReactState2[1];
return [state, function (getNextState) {
var nextState = run(getNextState, undefined, state);
store$1.set(nodeKey, nextState);
return setState(nextState);
}, nodeKey];
}
var _excluded$1 = ["forwardedRef"];
var _filehash$1 = "DQeO";
var getInitialProps = function getInitialProps(fetch) {
var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var key = arguments.length > 2 ? arguments[2] : undefined;
return function (Component) {
function WrappedComponent(_ref) {
var forwardedRef = _ref.forwardedRef,
props = _objectWithoutProperties(_ref, _excluded$1);
var _useState = useState$1(false),
_useState2 = _slicedToArray(_useState, 2),
ready = _useState2[0],
setReady = _useState2[1];
var _useState3 = useState$1({}),
_useState4 = _slicedToArray(_useState3, 2),
ssrProps = _useState4[0],
setSsrProps = _useState4[1];
var mounted = useRef(true);
var _useNodeKey = useNodeKey(),
getCountedKey = _useNodeKey.getCountedKey;
var nodeKey = key || run(getCountedKey);
useEffect(function () {
function init() {
return _init.apply(this, arguments);
}
function _init() {
_init = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
var _yield$store$get, _yield$store$get2, err, ssrProps;
return _regenerator().w(function (_context) {
while (1) switch (_context.n) {
case 0:
_context.n = 1;
return store$1.get(nodeKey, function () {
return run(fetch, undefined, props);
});
case 1:
_yield$store$get = _context.v;
_yield$store$get2 = _slicedToArray(_yield$store$get, 2);
err = _yield$store$get2[0];
ssrProps = _yield$store$get2[1];
if (!err) {
_context.n = 2;
break;
}
console.error('[getInitialProps error]', err);
return _context.a(2);
case 2:
if (mounted.current && ssrProps) {
setSsrProps(ssrProps);
setReady(true);
}
case 3:
return _context.a(2);
}
}, _callee);
}));
return _init.apply(this, arguments);
}
init();
return function () {
mounted.current = false;
};
}, []);
return ready ? /*#__PURE__*/React.createElement(Component, _extends({}, _objectSpread2(_objectSpread2({}, props), ssrProps), {
ref: forwardedRef,
_nk: "".concat(_filehash$1, "11")
})) : run(fallback, undefined, props);
}
var ForwardedRefHOC = forwardRef(function (props, ref) {
return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, {
forwardedRef: ref,
_nk: "".concat(_filehash$1, "21")
}));
});
return withSanti(hoistStatics(ForwardedRefHOC, WrappedComponent));
};
};
var ready = /*#__PURE__*/function () {
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
var delayMillisecond,
script,
_args = arguments;
return _regenerator().w(function (_context) {
while (1) switch (_context.p = _context.n) {
case 0:
delayMillisecond = _args.length > 0 && _args[0] !== undefined ? _args[0] : -1;
_context.p = 1;
if (!(delayMillisecond && Number(delayMillisecond) >= 0)) {
_context.n = 2;
break;
}
_context.n = 2;
return delay(delayMillisecond);
case 2:
if (window.__SSR__ && !window.__SSRREADY__) {
script = document.createElement('script');
script.innerHTML = 'window.__SSRREADY__=true';
document.head.appendChild(script);
}
// ssr 阶段:通知 santi 可以采集页面内容
// csr 阶段:通知 santi/render 已完成呈现
document.dispatchEvent(new Event('ssr-ready'));
case 3:
_context.p = 3;
return _context.f(3);
case 4:
return _context.a(2);
}
}, _callee, null, [[1,, 3, 4]]);
}));
return function ready() {
return _ref.apply(this, arguments);
};
}();
var Container = withSanti(function (_ref) {
var children = _ref.children;
return children;
});
var _filehash$2 = "q8Vs";
var ROOT_KEY = 'ssr-root';
function render(content, container, callback) {
var element = /*#__PURE__*/React.createElement(Container, {
_nk: "".concat(_filehash$2, "11")
}, content);
// 支持热加载
// FIXME: Dev 阶段会导致渲染抖动
if (module.hot) {
return ReactDOM.render(element, container, callback);
}
// ssr 阶段将内容渲染至动态生成的 ssr-root 节点中
if (window.__SSR__) {
var ssrRoot = document.getElementById(ROOT_KEY);
if (!ssrRoot) {
ssrRoot = document.createElement('div');
ssrRoot.style.cssText = 'width:100%;height:100%;';
ssrRoot.id = ROOT_KEY;
document.body.insertBefore(ssrRoot, container);
}
return ReactDOM.render(element, ssrRoot, callback);
}
// csr 阶段若为 ssr 渲染结果,则在 csr 完成后替换 ssr 结果
// 注:不使用水合操作(ReactDOM.hydrate)因为可能造成节点错误问题
if (window.__SSRED__) {
var display = function display() {
// 做一定延时,尽可能保证平滑呈现
setTimeout(function () {
var ssrRoot = document.getElementById(ROOT_KEY);
if (ssrRoot) {
try {
ssrRoot.parentNode.removeChild(ssrRoot);
} finally {
// nothing
}
}
container.style.display = '';
}, 56);
}; // 若为快照 ssr 则 csr 阶段将同样收到 ssr-ready 事件,在此事件后平滑呈现真实可用交互
var _ssrRoot = document.getElementById(ROOT_KEY);
var renderCallback = callback;
container.style.display = 'none';
container.innerHTML = _ssrRoot.innerHTML;
if (window.__SSRREADY__) {
var _onReady = function onReady() {
display();
document.removeEventListener('ssr-ready', _onReady);
};
document.addEventListener('ssr-ready', _onReady);
} else {
// 若不为快照 ssr(一般为超时自动快照),则在 render 回调结束后呈现真实结果
renderCallback = function renderCallback() {
// FIXME: 超时快照可能造成呈现不平滑,具体表现为 SSR 切到真实内容过程中有轻微空屏现象,通俗为 “闪一下”,此问题待完美修正
display();
if (isFunction(callback)) {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
callback.apply(this, args);
}
};
}
return ReactDOM.render(element, container, renderCallback);
}
// csr 若不为 ssr 渲染结果则正常渲染
return ReactDOM.render(element, container, callback);
}
var _filehash$3 = "YwT1";
function Ready(_ref) {
var children = _ref.children,
delay = _ref.delay,
_ref$onMount = _ref.onMount,
onMount = _ref$onMount === void 0 ? false : _ref$onMount,
_ref$when = _ref.when,
when = _ref$when === void 0 ? false : _ref$when;
useEffect(function () {
if (onMount) {
ready(delay);
}
}, []);
useEffect(function () {
if (when) {
ready(delay);
}
}, [when]);
return children;
}
function ReadyOnMount(_ref2) {
var children = _ref2.children,
delay = _ref2.delay;
var _useState = useState$1(false),
_useState2 = _slicedToArray(_useState, 2),
ready = _useState2[0],
setReady = _useState2[1];
useEffect(function () {
setReady(true);
}, []);
return /*#__PURE__*/React.createElement(Ready, {
delay: delay,
when: ready,
_nk: "".concat(_filehash$3, "11")
}, children);
}
Ready.OnMount = ReadyOnMount;
function NoSSR(_ref) {
var children = _ref.children,
_ref$fallback = _ref.fallback,
fallback = _ref$fallback === void 0 ? null : _ref$fallback;
return window.__SSR__ ? run(fallback) : children;
}
var index = {
render: render,
store: store$1,
useState: useState,
getInitialProps: getInitialProps,
ready: ready,
withSanti: withSanti,
useNodeKey: useNodeKey,
useSID: useSID,
Ready: Ready,
NoSSR: NoSSR
};
export default index;
export { NoSSR, Ready, getInitialProps, ready, render, store$1 as store, useNodeKey, useSID, useState, withSanti };