You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			205 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			205 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											9 months ago
										 | "use strict"; | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |     value: true | ||
|  | }); | ||
|  | 0 && (module.exports = { | ||
|  |     DOMAttributeNames: null, | ||
|  |     isEqualNode: null, | ||
|  |     default: null | ||
|  | }); | ||
|  | function _export(target, all) { | ||
|  |     for(var name in all)Object.defineProperty(target, name, { | ||
|  |         enumerable: true, | ||
|  |         get: all[name] | ||
|  |     }); | ||
|  | } | ||
|  | _export(exports, { | ||
|  |     DOMAttributeNames: function() { | ||
|  |         return DOMAttributeNames; | ||
|  |     }, | ||
|  |     isEqualNode: function() { | ||
|  |         return isEqualNode; | ||
|  |     }, | ||
|  |     default: function() { | ||
|  |         return initHeadManager; | ||
|  |     } | ||
|  | }); | ||
|  | const DOMAttributeNames = { | ||
|  |     acceptCharset: "accept-charset", | ||
|  |     className: "class", | ||
|  |     htmlFor: "for", | ||
|  |     httpEquiv: "http-equiv", | ||
|  |     noModule: "noModule" | ||
|  | }; | ||
|  | function reactElementToDOM(param) { | ||
|  |     let { type, props } = param; | ||
|  |     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); | ||
|  | } | ||
|  | let updateElements; | ||
|  | if (process.env.__NEXT_STRICT_NEXT_HEAD) { | ||
|  |     updateElements = (type, components)=>{ | ||
|  |         const headEl = document.querySelector("head"); | ||
|  |         if (!headEl) return; | ||
|  |         const headMetaTags = headEl.querySelectorAll('meta[name="next-head"]') || []; | ||
|  |         const oldTags = []; | ||
|  |         if (type === "meta") { | ||
|  |             const metaCharset = headEl.querySelector("meta[charset]"); | ||
|  |             if (metaCharset) { | ||
|  |                 oldTags.push(metaCharset); | ||
|  |             } | ||
|  |         } | ||
|  |         for(let i = 0; i < headMetaTags.length; i++){ | ||
|  |             var _headTag_tagName; | ||
|  |             const metaTag = headMetaTags[i]; | ||
|  |             const headTag = metaTag.nextSibling; | ||
|  |             if ((headTag == null ? void 0 : (_headTag_tagName = headTag.tagName) == null ? void 0 : _headTag_tagName.toLowerCase()) === type) { | ||
|  |                 oldTags.push(headTag); | ||
|  |             } | ||
|  |         } | ||
|  |         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 _t_parentNode; | ||
|  |             const metaTag = t.previousSibling; | ||
|  |             if (metaTag && metaTag.getAttribute("name") === "next-head") { | ||
|  |                 var _t_parentNode1; | ||
|  |                 (_t_parentNode1 = t.parentNode) == null ? void 0 : _t_parentNode1.removeChild(metaTag); | ||
|  |             } | ||
|  |             (_t_parentNode = t.parentNode) == null ? void 0 : _t_parentNode.removeChild(t); | ||
|  |         }); | ||
|  |         newTags.forEach((t)=>{ | ||
|  |             var _t_tagName; | ||
|  |             const meta = document.createElement("meta"); | ||
|  |             meta.name = "next-head"; | ||
|  |             meta.content = "1"; | ||
|  |             // meta[charset] must be first element so special case
 | ||
|  |             if (!(((_t_tagName = t.tagName) == null ? void 0 : _t_tagName.toLowerCase()) === "meta" && t.getAttribute("charset"))) { | ||
|  |                 headEl.appendChild(meta); | ||
|  |             } | ||
|  |             headEl.appendChild(t); | ||
|  |         }); | ||
|  |     }; | ||
|  | } else { | ||
|  |     updateElements = (type, components)=>{ | ||
|  |         const headEl = document.getElementsByTagName("head")[0]; | ||
|  |         const headCountEl = headEl.querySelector("meta[name=next-head-count]"); | ||
|  |         if (process.env.NODE_ENV !== "production") { | ||
|  |             if (!headCountEl) { | ||
|  |                 console.error("Warning: next-head-count is missing. https://nextjs.org/docs/messages/next-head-count-missing"); | ||
|  |                 return; | ||
|  |             } | ||
|  |         } | ||
|  |         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 _j_tagName; | ||
|  |             if ((j == null ? void 0 : (_j_tagName = j.tagName) == null ? void 0 : _j_tagName.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 _t_parentNode; | ||
|  |             return (_t_parentNode = t.parentNode) == null ? void 0 : _t_parentNode.removeChild(t); | ||
|  |         }); | ||
|  |         newTags.forEach((t)=>headEl.insertBefore(t, headCountEl)); | ||
|  |         headCountEl.content = (headCount - oldTags.length + newTags.length).toString(); | ||
|  |     }; | ||
|  | } | ||
|  | function initHeadManager() { | ||
|  |     return { | ||
|  |         mountedInstances: new Set(), | ||
|  |         updateHead: (head)=>{ | ||
|  |             const tags = {}; | ||
|  |             head.forEach((h)=>{ | ||
|  |                 if (// If the font tag is loaded only on client navigation
 | ||
|  |                 // 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] || []); | ||
|  |             }); | ||
|  |         } | ||
|  |     }; | ||
|  | } | ||
|  | 
 | ||
|  | 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
 |