523 lines
18 KiB
JavaScript
523 lines
18 KiB
JavaScript
exports.id = 4298;
|
|
exports.ids = [4298];
|
|
exports.modules = {
|
|
|
|
/***/ 6495:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
var __webpack_unused_export__;
|
|
|
|
__webpack_unused_export__ = ({
|
|
value: true
|
|
});
|
|
exports.Z = _extends;
|
|
function _extends() {
|
|
return extends_.apply(this, arguments);
|
|
}
|
|
function extends_() {
|
|
extends_ = Object.assign || function(target) {
|
|
for(var i = 1; i < arguments.length; i++){
|
|
var source = arguments[i];
|
|
for(var key in source){
|
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
}
|
|
return target;
|
|
};
|
|
return extends_.apply(this, arguments);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1598:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
var __webpack_unused_export__;
|
|
|
|
__webpack_unused_export__ = ({
|
|
value: true
|
|
});
|
|
exports.Z = _interopRequireWildcard;
|
|
function _interopRequireWildcard(obj, nodeInterop) {
|
|
if (!nodeInterop && obj && obj.__esModule) {
|
|
return obj;
|
|
}
|
|
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
return {
|
|
default: obj
|
|
};
|
|
}
|
|
var cache = _getRequireWildcardCache(nodeInterop);
|
|
if (cache && cache.has(obj)) {
|
|
return cache.get(obj);
|
|
}
|
|
var newObj = {};
|
|
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
for(var key in obj){
|
|
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
if (desc && (desc.get || desc.set)) {
|
|
Object.defineProperty(newObj, key, desc);
|
|
} else {
|
|
newObj[key] = obj[key];
|
|
}
|
|
}
|
|
}
|
|
newObj.default = obj;
|
|
if (cache) {
|
|
cache.set(obj, newObj);
|
|
}
|
|
return newObj;
|
|
}
|
|
function _getRequireWildcardCache(nodeInterop1) {
|
|
if (typeof WeakMap !== "function") return null;
|
|
var cacheBabelInterop = new WeakMap();
|
|
var cacheNodeInterop = new WeakMap();
|
|
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
})(nodeInterop1);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7273:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
var __webpack_unused_export__;
|
|
|
|
__webpack_unused_export__ = ({
|
|
value: true
|
|
});
|
|
exports.Z = _objectWithoutPropertiesLoose;
|
|
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
if (source == null) return {};
|
|
var target = {};
|
|
var sourceKeys = Object.keys(source);
|
|
var key, i;
|
|
for(i = 0; i < sourceKeys.length; i++){
|
|
key = sourceKeys[i];
|
|
if (excluded.indexOf(key) >= 0) continue;
|
|
target[key] = source[key];
|
|
}
|
|
return target;
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6007:
|
|
/***/ ((module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = initHeadManager;
|
|
exports.isEqualNode = isEqualNode;
|
|
exports.DOMAttributeNames = void 0;
|
|
function initHeadManager() {
|
|
return {
|
|
mountedInstances: new Set(),
|
|
updateHead: (head)=>{
|
|
const tags = {};
|
|
head.forEach((h)=>{
|
|
if (// it won't be inlined. In this case revert to the original behavior
|
|
h.type === "link" && h.props["data-optimized-fonts"]) {
|
|
if (document.querySelector(`style[data-href="${h.props["data-href"]}"]`)) {
|
|
return;
|
|
} else {
|
|
h.props.href = h.props["data-href"];
|
|
h.props["data-href"] = undefined;
|
|
}
|
|
}
|
|
const components = tags[h.type] || [];
|
|
components.push(h);
|
|
tags[h.type] = components;
|
|
});
|
|
const titleComponent = tags.title ? tags.title[0] : null;
|
|
let title = "";
|
|
if (titleComponent) {
|
|
const { children } = titleComponent.props;
|
|
title = typeof children === "string" ? children : Array.isArray(children) ? children.join("") : "";
|
|
}
|
|
if (title !== document.title) document.title = title;
|
|
[
|
|
"meta",
|
|
"base",
|
|
"link",
|
|
"style",
|
|
"script"
|
|
].forEach((type)=>{
|
|
updateElements(type, tags[type] || []);
|
|
});
|
|
}
|
|
};
|
|
}
|
|
const DOMAttributeNames = {
|
|
acceptCharset: "accept-charset",
|
|
className: "class",
|
|
htmlFor: "for",
|
|
httpEquiv: "http-equiv",
|
|
noModule: "noModule"
|
|
};
|
|
exports.DOMAttributeNames = DOMAttributeNames;
|
|
function reactElementToDOM({ type , props }) {
|
|
const el = document.createElement(type);
|
|
for(const p in props){
|
|
if (!props.hasOwnProperty(p)) continue;
|
|
if (p === "children" || p === "dangerouslySetInnerHTML") continue;
|
|
// we don't render undefined props to the DOM
|
|
if (props[p] === undefined) continue;
|
|
const attr = DOMAttributeNames[p] || p.toLowerCase();
|
|
if (type === "script" && (attr === "async" || attr === "defer" || attr === "noModule")) {
|
|
el[attr] = !!props[p];
|
|
} else {
|
|
el.setAttribute(attr, props[p]);
|
|
}
|
|
}
|
|
const { children , dangerouslySetInnerHTML } = props;
|
|
if (dangerouslySetInnerHTML) {
|
|
el.innerHTML = dangerouslySetInnerHTML.__html || "";
|
|
} else if (children) {
|
|
el.textContent = typeof children === "string" ? children : Array.isArray(children) ? children.join("") : "";
|
|
}
|
|
return el;
|
|
}
|
|
function isEqualNode(oldTag, newTag) {
|
|
if (oldTag instanceof HTMLElement && newTag instanceof HTMLElement) {
|
|
const nonce = newTag.getAttribute("nonce");
|
|
// Only strip the nonce if `oldTag` has had it stripped. An element's nonce attribute will not
|
|
// be stripped if there is no content security policy response header that includes a nonce.
|
|
if (nonce && !oldTag.getAttribute("nonce")) {
|
|
const cloneTag = newTag.cloneNode(true);
|
|
cloneTag.setAttribute("nonce", "");
|
|
cloneTag.nonce = nonce;
|
|
return nonce === oldTag.nonce && oldTag.isEqualNode(cloneTag);
|
|
}
|
|
}
|
|
return oldTag.isEqualNode(newTag);
|
|
}
|
|
function updateElements(type, components) {
|
|
const headEl = document.getElementsByTagName("head")[0];
|
|
const headCountEl = headEl.querySelector("meta[name=next-head-count]");
|
|
if (false) {}
|
|
const headCount = Number(headCountEl.content);
|
|
const oldTags = [];
|
|
for(let i = 0, j = headCountEl.previousElementSibling; i < headCount; i++, j = (j == null ? void 0 : j.previousElementSibling) || null){
|
|
var ref;
|
|
if ((j == null ? void 0 : (ref = j.tagName) == null ? void 0 : ref.toLowerCase()) === type) {
|
|
oldTags.push(j);
|
|
}
|
|
}
|
|
const newTags = components.map(reactElementToDOM).filter((newTag)=>{
|
|
for(let k = 0, len = oldTags.length; k < len; k++){
|
|
const oldTag = oldTags[k];
|
|
if (isEqualNode(oldTag, newTag)) {
|
|
oldTags.splice(k, 1);
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
});
|
|
oldTags.forEach((t)=>{
|
|
var ref;
|
|
return (ref = t.parentNode) == null ? void 0 : ref.removeChild(t);
|
|
});
|
|
newTags.forEach((t)=>headEl.insertBefore(t, headCountEl));
|
|
headCountEl.content = (headCount - oldTags.length + newTags.length).toString();
|
|
}
|
|
if ((typeof exports.default === "function" || typeof exports.default === "object" && exports.default !== null) && typeof exports.default.__esModule === "undefined") {
|
|
Object.defineProperty(exports.default, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.assign(exports.default, exports);
|
|
module.exports = exports.default;
|
|
} //# sourceMappingURL=head-manager.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9311:
|
|
/***/ ((module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports.cancelIdleCallback = exports.requestIdleCallback = void 0;
|
|
const requestIdleCallback = typeof self !== "undefined" && self.requestIdleCallback && self.requestIdleCallback.bind(window) || function(cb) {
|
|
let start = Date.now();
|
|
return setTimeout(function() {
|
|
cb({
|
|
didTimeout: false,
|
|
timeRemaining: function() {
|
|
return Math.max(0, 50 - (Date.now() - start));
|
|
}
|
|
});
|
|
}, 1);
|
|
};
|
|
exports.requestIdleCallback = requestIdleCallback;
|
|
const cancelIdleCallback = typeof self !== "undefined" && self.cancelIdleCallback && self.cancelIdleCallback.bind(window) || function(id) {
|
|
return clearTimeout(id);
|
|
};
|
|
exports.cancelIdleCallback = cancelIdleCallback;
|
|
if ((typeof exports.default === "function" || typeof exports.default === "object" && exports.default !== null) && typeof exports.default.__esModule === "undefined") {
|
|
Object.defineProperty(exports.default, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.assign(exports.default, exports);
|
|
module.exports = exports.default;
|
|
} //# sourceMappingURL=request-idle-callback.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 699:
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
"use strict";
|
|
|
|
"client";
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports.handleClientScriptLoad = handleClientScriptLoad;
|
|
exports.initScriptLoader = initScriptLoader;
|
|
exports["default"] = void 0;
|
|
var _extends = (__webpack_require__(6495)/* ["default"] */ .Z);
|
|
var _interop_require_wildcard = (__webpack_require__(1598)/* ["default"] */ .Z);
|
|
var _object_without_properties_loose = (__webpack_require__(7273)/* ["default"] */ .Z);
|
|
var _react = _interop_require_wildcard(__webpack_require__(6689));
|
|
var _headManagerContext = __webpack_require__(2796);
|
|
var _headManager = __webpack_require__(6007);
|
|
var _requestIdleCallback = __webpack_require__(9311);
|
|
"client";
|
|
const ScriptCache = new Map();
|
|
const LoadCache = new Set();
|
|
const ignoreProps = [
|
|
"onLoad",
|
|
"onReady",
|
|
"dangerouslySetInnerHTML",
|
|
"children",
|
|
"onError",
|
|
"strategy",
|
|
];
|
|
const loadScript = (props)=>{
|
|
const { src , id , onLoad =()=>{} , onReady =null , dangerouslySetInnerHTML , children ="" , strategy ="afterInteractive" , onError , } = props;
|
|
const cacheKey = id || src;
|
|
// Script has already loaded
|
|
if (cacheKey && LoadCache.has(cacheKey)) {
|
|
return;
|
|
}
|
|
// Contents of this script are already loading/loaded
|
|
if (ScriptCache.has(src)) {
|
|
LoadCache.add(cacheKey);
|
|
// It is possible that multiple `next/script` components all have same "src", but has different "onLoad"
|
|
// This is to make sure the same remote script will only load once, but "onLoad" are executed in order
|
|
ScriptCache.get(src).then(onLoad, onError);
|
|
return;
|
|
}
|
|
/** Execute after the script first loaded */ const afterLoad = ()=>{
|
|
// Run onReady for the first time after load event
|
|
if (onReady) {
|
|
onReady();
|
|
}
|
|
// add cacheKey to LoadCache when load successfully
|
|
LoadCache.add(cacheKey);
|
|
};
|
|
const el = document.createElement("script");
|
|
const loadPromise = new Promise((resolve, reject)=>{
|
|
el.addEventListener("load", function(e) {
|
|
resolve();
|
|
if (onLoad) {
|
|
onLoad.call(this, e);
|
|
}
|
|
afterLoad();
|
|
});
|
|
el.addEventListener("error", function(e) {
|
|
reject(e);
|
|
});
|
|
}).catch(function(e) {
|
|
if (onError) {
|
|
onError(e);
|
|
}
|
|
});
|
|
if (dangerouslySetInnerHTML) {
|
|
el.innerHTML = dangerouslySetInnerHTML.__html || "";
|
|
afterLoad();
|
|
} else if (children) {
|
|
el.textContent = typeof children === "string" ? children : Array.isArray(children) ? children.join("") : "";
|
|
afterLoad();
|
|
} else if (src) {
|
|
el.src = src;
|
|
// do not add cacheKey into LoadCache for remote script here
|
|
// cacheKey will be added to LoadCache when it is actually loaded (see loadPromise above)
|
|
ScriptCache.set(src, loadPromise);
|
|
}
|
|
for (const [k, value] of Object.entries(props)){
|
|
if (value === undefined || ignoreProps.includes(k)) {
|
|
continue;
|
|
}
|
|
const attr = _headManager.DOMAttributeNames[k] || k.toLowerCase();
|
|
el.setAttribute(attr, value);
|
|
}
|
|
if (strategy === "worker") {
|
|
el.setAttribute("type", "text/partytown");
|
|
}
|
|
el.setAttribute("data-nscript", strategy);
|
|
document.body.appendChild(el);
|
|
};
|
|
function handleClientScriptLoad(props) {
|
|
const { strategy ="afterInteractive" } = props;
|
|
if (strategy === "lazyOnload") {
|
|
window.addEventListener("load", ()=>{
|
|
(0, _requestIdleCallback).requestIdleCallback(()=>loadScript(props));
|
|
});
|
|
} else {
|
|
loadScript(props);
|
|
}
|
|
}
|
|
function loadLazyScript(props) {
|
|
if (document.readyState === "complete") {
|
|
(0, _requestIdleCallback).requestIdleCallback(()=>loadScript(props));
|
|
} else {
|
|
window.addEventListener("load", ()=>{
|
|
(0, _requestIdleCallback).requestIdleCallback(()=>loadScript(props));
|
|
});
|
|
}
|
|
}
|
|
function addBeforeInteractiveToCache() {
|
|
const scripts = [
|
|
...document.querySelectorAll('[data-nscript="beforeInteractive"]'),
|
|
...document.querySelectorAll('[data-nscript="beforePageRender"]'),
|
|
];
|
|
scripts.forEach((script)=>{
|
|
const cacheKey = script.id || script.getAttribute("src");
|
|
LoadCache.add(cacheKey);
|
|
});
|
|
}
|
|
function initScriptLoader(scriptLoaderItems) {
|
|
scriptLoaderItems.forEach(handleClientScriptLoad);
|
|
addBeforeInteractiveToCache();
|
|
}
|
|
function Script(props) {
|
|
const { id , src ="" , onLoad =()=>{} , onReady =null , strategy ="afterInteractive" , onError } = props, restProps = _object_without_properties_loose(props, [
|
|
"id",
|
|
"src",
|
|
"onLoad",
|
|
"onReady",
|
|
"strategy",
|
|
"onError"
|
|
]);
|
|
// Context is available only during SSR
|
|
const { updateScripts , scripts , getIsSsr } = (0, _react).useContext(_headManagerContext.HeadManagerContext);
|
|
/**
|
|
* - First mount:
|
|
* 1. The useEffect for onReady executes
|
|
* 2. hasOnReadyEffectCalled.current is false, but the script hasn't loaded yet (not in LoadCache)
|
|
* onReady is skipped, set hasOnReadyEffectCalled.current to true
|
|
* 3. The useEffect for loadScript executes
|
|
* 4. hasLoadScriptEffectCalled.current is false, loadScript executes
|
|
* Once the script is loaded, the onLoad and onReady will be called by then
|
|
* [If strict mode is enabled / is wrapped in <OffScreen /> component]
|
|
* 5. The useEffect for onReady executes again
|
|
* 6. hasOnReadyEffectCalled.current is true, so entire effect is skipped
|
|
* 7. The useEffect for loadScript executes again
|
|
* 8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped
|
|
*
|
|
* - Second mount:
|
|
* 1. The useEffect for onReady executes
|
|
* 2. hasOnReadyEffectCalled.current is false, but the script has already loaded (found in LoadCache)
|
|
* onReady is called, set hasOnReadyEffectCalled.current to true
|
|
* 3. The useEffect for loadScript executes
|
|
* 4. The script is already loaded, loadScript bails out
|
|
* [If strict mode is enabled / is wrapped in <OffScreen /> component]
|
|
* 5. The useEffect for onReady executes again
|
|
* 6. hasOnReadyEffectCalled.current is true, so entire effect is skipped
|
|
* 7. The useEffect for loadScript executes again
|
|
* 8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped
|
|
*/ const hasOnReadyEffectCalled = (0, _react).useRef(false);
|
|
(0, _react).useEffect(()=>{
|
|
const cacheKey = id || src;
|
|
if (!hasOnReadyEffectCalled.current) {
|
|
// Run onReady if script has loaded before but component is re-mounted
|
|
if (onReady && cacheKey && LoadCache.has(cacheKey)) {
|
|
onReady();
|
|
}
|
|
hasOnReadyEffectCalled.current = true;
|
|
}
|
|
}, [
|
|
onReady,
|
|
id,
|
|
src
|
|
]);
|
|
const hasLoadScriptEffectCalled = (0, _react).useRef(false);
|
|
(0, _react).useEffect(()=>{
|
|
if (!hasLoadScriptEffectCalled.current) {
|
|
if (strategy === "afterInteractive") {
|
|
loadScript(props);
|
|
} else if (strategy === "lazyOnload") {
|
|
loadLazyScript(props);
|
|
}
|
|
hasLoadScriptEffectCalled.current = true;
|
|
}
|
|
}, [
|
|
props,
|
|
strategy
|
|
]);
|
|
if (strategy === "beforeInteractive" || strategy === "worker") {
|
|
if (updateScripts) {
|
|
scripts[strategy] = (scripts[strategy] || []).concat([
|
|
_extends({
|
|
id,
|
|
src,
|
|
onLoad,
|
|
onReady,
|
|
onError
|
|
}, restProps),
|
|
]);
|
|
updateScripts(scripts);
|
|
} else if (getIsSsr && getIsSsr()) {
|
|
// Script has already loaded during SSR
|
|
LoadCache.add(id || src);
|
|
} else if (getIsSsr && !getIsSsr()) {
|
|
loadScript(props);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
Object.defineProperty(Script, "__nextScript", {
|
|
value: true
|
|
});
|
|
var _default = Script;
|
|
exports["default"] = _default;
|
|
if ((typeof exports.default === "function" || typeof exports.default === "object" && exports.default !== null) && typeof exports.default.__esModule === "undefined") {
|
|
Object.defineProperty(exports.default, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.assign(exports.default, exports);
|
|
module.exports = exports.default;
|
|
} //# sourceMappingURL=script.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4298:
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
module.exports = __webpack_require__(699)
|
|
|
|
|
|
/***/ })
|
|
|
|
};
|
|
; |