123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- "client";
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.defaultHead = defaultHead;
- exports.default = void 0;
- var _extends = require("@swc/helpers/lib/_extends.js").default;
- var _interop_require_default = require("@swc/helpers/lib/_interop_require_default.js").default;
- var _interop_require_wildcard = require("@swc/helpers/lib/_interop_require_wildcard.js").default;
- var _react = _interop_require_wildcard(require("react"));
- var _sideEffect = _interop_require_default(require("./side-effect"));
- var _ampContext = require("./amp-context");
- var _headManagerContext = require("./head-manager-context");
- var _ampMode = require("./amp-mode");
- var _utils = require("./utils");
- 'client';
- function defaultHead(inAmpMode = false) {
- const head = [
- _react.default.createElement("meta", {
- charSet: "utf-8"
- })
- ];
- if (!inAmpMode) {
- head.push( _react.default.createElement("meta", {
- name: "viewport",
- content: "width=device-width"
- }));
- }
- return head;
- }
- function onlyReactElement(list, child) {
-
- if (typeof child === 'string' || typeof child === 'number') {
- return list;
- }
-
- if (child.type === _react.default.Fragment) {
- return list.concat(_react.default.Children.toArray(child.props.children).reduce((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'
- ];
- 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);
- }
- }
-
- 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;
- };
- }
- 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'] &&
- [
- 'https://fonts.googleapis.com/css',
- 'https://use.typekit.net/'
- ].some((url)=>c.props['href'].startsWith(url))) {
- const newProps = _extends({}, c.props || {});
- newProps['data-href'] = newProps['href'];
- newProps['href'] = undefined;
-
- newProps['data-optimized-fonts'] = true;
- return _react.default.cloneElement(c, newProps);
- }
- }
- if (process.env.NODE_ENV === 'development' && process.env.__NEXT_REACT_ROOT) {
-
- 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, _utils).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, _utils).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 _react.default.cloneElement(c, {
- key
- });
- });
- }
- function Head({ children }) {
- const ampState = (0, _react).useContext(_ampContext.AmpStateContext);
- const headManager = (0, _react).useContext(_headManagerContext.HeadManagerContext);
- return _react.default.createElement(_sideEffect.default, {
- reduceComponentsToState: reduceComponents,
- headManager: headManager,
- inAmpMode: (0, _ampMode).isInAmpMode(ampState)
- }, children);
- }
- var _default = Head;
- 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;
- }
|