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.
		
		
		
		
		
			
		
			
				
	
	
		
			189 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			189 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			JavaScript
		
	
| "use client";
 | |
| 
 | |
| "use strict";
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|     value: true
 | |
| });
 | |
| 0 && (module.exports = {
 | |
|     defaultHead: null,
 | |
|     default: null
 | |
| });
 | |
| function _export(target, all) {
 | |
|     for(var name in all)Object.defineProperty(target, name, {
 | |
|         enumerable: true,
 | |
|         get: all[name]
 | |
|     });
 | |
| }
 | |
| _export(exports, {
 | |
|     defaultHead: function() {
 | |
|         return defaultHead;
 | |
|     },
 | |
|     default: function() {
 | |
|         return _default;
 | |
|     }
 | |
| });
 | |
| const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
 | |
| const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
 | |
| const _jsxruntime = require("react/jsx-runtime");
 | |
| const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
 | |
| const _sideeffect = /*#__PURE__*/ _interop_require_default._(require("./side-effect"));
 | |
| const _ampcontextsharedruntime = require("./amp-context.shared-runtime");
 | |
| const _headmanagercontextsharedruntime = require("./head-manager-context.shared-runtime");
 | |
| const _ampmode = require("./amp-mode");
 | |
| const _warnonce = require("./utils/warn-once");
 | |
| function defaultHead(inAmpMode) {
 | |
|     if (inAmpMode === void 0) inAmpMode = false;
 | |
|     const head = [
 | |
|         /*#__PURE__*/ (0, _jsxruntime.jsx)("meta", {
 | |
|             charSet: "utf-8"
 | |
|         })
 | |
|     ];
 | |
|     if (!inAmpMode) {
 | |
|         head.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", {
 | |
|             name: "viewport",
 | |
|             content: "width=device-width"
 | |
|         }));
 | |
|     }
 | |
|     return head;
 | |
| }
 | |
| function onlyReactElement(list, child) {
 | |
|     // React children can be "string" or "number" in this case we ignore them for backwards compat
 | |
|     if (typeof child === "string" || typeof child === "number") {
 | |
|         return list;
 | |
|     }
 | |
|     // Adds support for React.Fragment
 | |
|     if (child.type === _react.default.Fragment) {
 | |
|         return list.concat(// @ts-expect-error @types/react does not remove fragments but this could also return ReactPortal[]
 | |
|         _react.default.Children.toArray(child.props.children).reduce(// @ts-expect-error @types/react does not remove fragments but this could also return ReactPortal[]
 | |
|         (fragmentList, fragmentChild)=>{
 | |
|             if (typeof fragmentChild === "string" || typeof fragmentChild === "number") {
 | |
|                 return fragmentList;
 | |
|             }
 | |
|             return fragmentList.concat(fragmentChild);
 | |
|         }, []));
 | |
|     }
 | |
|     return list.concat(child);
 | |
| }
 | |
| const METATYPES = [
 | |
|     "name",
 | |
|     "httpEquiv",
 | |
|     "charSet",
 | |
|     "itemProp"
 | |
| ];
 | |
| /*
 | |
|  returns a function for filtering head child elements
 | |
|  which shouldn't be duplicated, like <title/>
 | |
|  Also adds support for deduplicated `key` properties
 | |
| */ function unique() {
 | |
|     const keys = new Set();
 | |
|     const tags = new Set();
 | |
|     const metaTypes = new Set();
 | |
|     const metaCategories = {};
 | |
|     return (h)=>{
 | |
|         let isUnique = true;
 | |
|         let hasKey = false;
 | |
|         if (h.key && typeof h.key !== "number" && h.key.indexOf("$") > 0) {
 | |
|             hasKey = true;
 | |
|             const key = h.key.slice(h.key.indexOf("$") + 1);
 | |
|             if (keys.has(key)) {
 | |
|                 isUnique = false;
 | |
|             } else {
 | |
|                 keys.add(key);
 | |
|             }
 | |
|         }
 | |
|         // eslint-disable-next-line default-case
 | |
|         switch(h.type){
 | |
|             case "title":
 | |
|             case "base":
 | |
|                 if (tags.has(h.type)) {
 | |
|                     isUnique = false;
 | |
|                 } else {
 | |
|                     tags.add(h.type);
 | |
|                 }
 | |
|                 break;
 | |
|             case "meta":
 | |
|                 for(let i = 0, len = METATYPES.length; i < len; i++){
 | |
|                     const metatype = METATYPES[i];
 | |
|                     if (!h.props.hasOwnProperty(metatype)) continue;
 | |
|                     if (metatype === "charSet") {
 | |
|                         if (metaTypes.has(metatype)) {
 | |
|                             isUnique = false;
 | |
|                         } else {
 | |
|                             metaTypes.add(metatype);
 | |
|                         }
 | |
|                     } else {
 | |
|                         const category = h.props[metatype];
 | |
|                         const categories = metaCategories[metatype] || new Set();
 | |
|                         if ((metatype !== "name" || !hasKey) && categories.has(category)) {
 | |
|                             isUnique = false;
 | |
|                         } else {
 | |
|                             categories.add(category);
 | |
|                             metaCategories[metatype] = categories;
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 break;
 | |
|         }
 | |
|         return isUnique;
 | |
|     };
 | |
| }
 | |
| /**
 | |
|  *
 | |
|  * @param headChildrenElements List of children of <Head>
 | |
|  */ function reduceComponents(headChildrenElements, props) {
 | |
|     const { inAmpMode } = props;
 | |
|     return headChildrenElements.reduce(onlyReactElement, []).reverse().concat(defaultHead(inAmpMode).reverse()).filter(unique()).reverse().map((c, i)=>{
 | |
|         const key = c.key || i;
 | |
|         if (process.env.NODE_ENV !== "development" && process.env.__NEXT_OPTIMIZE_FONTS && !inAmpMode) {
 | |
|             if (c.type === "link" && c.props["href"] && // TODO(prateekbh@): Replace this with const from `constants` when the tree shaking works.
 | |
|             [
 | |
|                 "https://fonts.googleapis.com/css",
 | |
|                 "https://use.typekit.net/"
 | |
|             ].some((url)=>c.props["href"].startsWith(url))) {
 | |
|                 const newProps = {
 | |
|                     ...c.props || {}
 | |
|                 };
 | |
|                 newProps["data-href"] = newProps["href"];
 | |
|                 newProps["href"] = undefined;
 | |
|                 // Add this attribute to make it easy to identify optimized tags
 | |
|                 newProps["data-optimized-fonts"] = true;
 | |
|                 return /*#__PURE__*/ _react.default.cloneElement(c, newProps);
 | |
|             }
 | |
|         }
 | |
|         if (process.env.NODE_ENV === "development") {
 | |
|             // omit JSON-LD structured data snippets from the warning
 | |
|             if (c.type === "script" && c.props["type"] !== "application/ld+json") {
 | |
|                 const srcMessage = c.props["src"] ? '<script> tag with src="' + c.props["src"] + '"' : "inline <script>";
 | |
|                 (0, _warnonce.warnOnce)("Do not add <script> tags using next/head (see " + srcMessage + "). Use next/script instead. \nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component");
 | |
|             } else if (c.type === "link" && c.props["rel"] === "stylesheet") {
 | |
|                 (0, _warnonce.warnOnce)('Do not add stylesheets using next/head (see <link rel="stylesheet"> tag with href="' + c.props["href"] + '"). Use Document instead. \nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component');
 | |
|             }
 | |
|         }
 | |
|         return /*#__PURE__*/ _react.default.cloneElement(c, {
 | |
|             key
 | |
|         });
 | |
|     });
 | |
| }
 | |
| /**
 | |
|  * This component injects elements to `<head>` of your page.
 | |
|  * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.
 | |
|  */ function Head(param) {
 | |
|     let { children } = param;
 | |
|     const ampState = (0, _react.useContext)(_ampcontextsharedruntime.AmpStateContext);
 | |
|     const headManager = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);
 | |
|     return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, {
 | |
|         reduceComponentsToState: reduceComponents,
 | |
|         headManager: headManager,
 | |
|         inAmpMode: (0, _ampmode.isInAmpMode)(ampState),
 | |
|         children: children
 | |
|     });
 | |
| }
 | |
| const _default = Head;
 | |
| 
 | |
| 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.js.map
 |