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
		
	
| "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
 |