{"ast":null,"code":"\"use strict\";\n\nexports.__esModule = true;\nexports.defaultHead = defaultHead;\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _sideEffect = _interopRequireDefault(require(\"./side-effect\"));\n\nvar _ampContext = require(\"./amp-context\");\n\nvar _headManagerContext = require(\"./head-manager-context\");\n\nvar _amp = require(\"./amp\");\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \"default\": obj\n  };\n}\n\nfunction defaultHead() {\n  var inAmpMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n  var head = [/*#__PURE__*/_react[\"default\"].createElement(\"meta\", {\n    charSet: \"utf-8\"\n  })];\n\n  if (!inAmpMode) {\n    head.push( /*#__PURE__*/_react[\"default\"].createElement(\"meta\", {\n      name: \"viewport\",\n      content: \"width=device-width\"\n    }));\n  }\n\n  return head;\n}\n\nfunction onlyReactElement(list, child) {\n  // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n  if (typeof child === 'string' || typeof child === 'number') {\n    return list;\n  } // Adds support for React.Fragment\n\n\n  if (child.type === _react[\"default\"].Fragment) {\n    return list.concat(_react[\"default\"].Children.toArray(child.props.children).reduce(function (fragmentList, fragmentChild) {\n      if (typeof fragmentChild === 'string' || typeof fragmentChild === 'number') {\n        return fragmentList;\n      }\n\n      return fragmentList.concat(fragmentChild);\n    }, []));\n  }\n\n  return list.concat(child);\n}\n\nvar METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp'];\n/*\nreturns a function for filtering head child elements\nwhich shouldn't be duplicated, like <title/>\nAlso adds support for deduplicated `key` properties\n*/\n\nfunction unique() {\n  var keys = new Set();\n  var tags = new Set();\n  var metaTypes = new Set();\n  var metaCategories = {};\n  return function (h) {\n    var unique = true;\n\n    if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n      var key = h.key.slice(h.key.indexOf('$') + 1);\n\n      if (keys.has(key)) {\n        unique = false;\n      } else {\n        keys.add(key);\n      }\n    } // eslint-disable-next-line default-case\n\n\n    switch (h.type) {\n      case 'title':\n      case 'base':\n        if (tags.has(h.type)) {\n          unique = false;\n        } else {\n          tags.add(h.type);\n        }\n\n        break;\n\n      case 'meta':\n        for (var i = 0, len = METATYPES.length; i < len; i++) {\n          var metatype = METATYPES[i];\n          if (!h.props.hasOwnProperty(metatype)) continue;\n\n          if (metatype === 'charSet') {\n            if (metaTypes.has(metatype)) {\n              unique = false;\n            } else {\n              metaTypes.add(metatype);\n            }\n          } else {\n            var category = h.props[metatype];\n            var categories = metaCategories[metatype] || new Set();\n\n            if (categories.has(category)) {\n              unique = false;\n            } else {\n              categories.add(category);\n              metaCategories[metatype] = categories;\n            }\n          }\n        }\n\n        break;\n    }\n\n    return unique;\n  };\n}\n/**\n*\n* @param headElements List of multiple <Head> instances\n*/\n\n\nfunction reduceComponents(headElements, props) {\n  return headElements.reduce(function (list, headElement) {\n    var headElementChildren = _react[\"default\"].Children.toArray(headElement.props.children);\n\n    return list.concat(headElementChildren);\n  }, []).reduce(onlyReactElement, []).reverse().concat(defaultHead(props.inAmpMode)).filter(unique()).reverse().map(function (c, i) {\n    var key = c.key || i;\n    return _react[\"default\"].cloneElement(c, {\n      key: key\n    });\n  });\n}\n\nvar Effect = (0, _sideEffect[\"default\"])();\n/**\n* This component injects elements to `<head>` of your page.\n* To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n*/\n\nfunction Head(_ref) {\n  var children = _ref.children;\n  return /*#__PURE__*/_react[\"default\"].createElement(_ampContext.AmpStateContext.Consumer, null, function (ampState) {\n    return /*#__PURE__*/_react[\"default\"].createElement(_headManagerContext.HeadManagerContext.Consumer, null, function (updateHead) {\n      return /*#__PURE__*/_react[\"default\"].createElement(Effect, {\n        reduceComponentsToState: reduceComponents,\n        handleStateChange: updateHead,\n        inAmpMode: (0, _amp.isInAmpMode)(ampState)\n      }, children);\n    });\n  });\n}\n\n_c = Head;\nHead.rewind = Effect.rewind;\nvar _default = Head;\nexports[\"default\"] = _default;\n\nvar _c;\n\n$RefreshReg$(_c, \"Head\");","map":{"version":3,"sources":["../../../next-server/lib/head.tsx"],"names":["inAmpMode","head","child","React","list","fragmentList","METATYPES","keys","tags","metaTypes","metaCategories","h","unique","key","i","len","metatype","category","categories","headElements","headElementChildren","headElement","defaultHead","props","c","Effect","ampState","updateHead","Head"],"mappings":";;;;;;AAAA,IAAA,MAAA,GAAA,sBAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA;;AACA,IAAA,WAAA,GAAA,sBAAA,CAAA,OAAA,CAAA,eAAA,CAAA,CAAA;;AACA,IAAA,WAAA,GAAA,OAAA,CAAA,eAAA,CAAA;;AACA,IAAA,mBAAA,GAAA,OAAA,CAAA,wBAAA,CAAA;;AACA,IAAA,IAAA,GAAA,OAAA,CAAA,OAAA,CAAA;;;;;;AAMO;;AAAA,SAAA,WAAA,GAAuD;AAAA,MAAlCA,SAAkC,uEAAvD,KAAuD;AAC5D,MAAMC,IAAI,GAAG,CAAA,aAAC,MAAA,WAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAM,IAAA,OAAO,EAA3B;AAAc,GAAA,CAAD,CAAb;;AACA,MAAI,CAAJ,SAAA,EAAgB;AACdA,IAAAA,IAAI,CAAJA,IAAAA,EAAAA,aAAU,MAAA,WAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAM,MAAA,IAAI,EAAV,UAAA;AAAsB,MAAA,OAAO,EAAvCA;AAAU,KAAA,CAAVA;AAEF;;AAAA,SAAA,IAAA;AAGF;;AAAA,SAAA,gBAAA,CAAA,IAAA,EAAA,KAAA,EAGkC;AAChC;AACA,MAAI,OAAA,KAAA,KAAA,QAAA,IAA6B,OAAA,KAAA,KAAjC,QAAA,EAA4D;AAC1D,WAAA,IAAA;AAEF,GALgC,CAKhC;;;AACA,MAAIC,KAAK,CAALA,IAAAA,KAAeC,MAAAA,WAAAA,CAAnB,QAAA,EAAmC;AACjC,WAAOC,IAAI,CAAJA,MAAAA,CACLD,MAAAA,WAAAA,CAAAA,QAAAA,CAAAA,OAAAA,CAAuBD,KAAK,CAALA,KAAAA,CAAvBC,QAAAA,EAAAA,MAAAA,CACE,UAAA,YAAA,EAAA,aAAA,EAGqC;AACnC,UACE,OAAA,aAAA,KAAA,QAAA,IACA,OAAA,aAAA,KAFF,QAAA,EAGE;AACA,eAAA,YAAA;AAEF;;AAAA,aAAOE,YAAY,CAAZA,MAAAA,CAAP,aAAOA,CAAP;AAXJF,KAAAA,EADF,EACEA,CADKC,CAAP;AAkBF;;AAAA,SAAOA,IAAI,CAAJA,MAAAA,CAAP,KAAOA,CAAP;AAGF;;AAAA,IAAME,SAAS,GAAG,CAAA,MAAA,EAAA,WAAA,EAAA,SAAA,EAAlB,UAAkB,CAAlB;AAEA;;;;;;AAKA,SAAA,MAAA,GAAkB;AAChB,MAAMC,IAAI,GAAG,IAAb,GAAa,EAAb;AACA,MAAMC,IAAI,GAAG,IAAb,GAAa,EAAb;AACA,MAAMC,SAAS,GAAG,IAAlB,GAAkB,EAAlB;AACA,MAAMC,cAAmD,GAAzD,EAAA;AAEA,SAAQC,UAAAA,CAAD,EAAgC;AACrC,QAAIC,MAAM,GAAV,IAAA;;AAEA,QAAID,CAAC,CAADA,GAAAA,IAAS,OAAOA,CAAC,CAAR,GAAA,KAATA,QAAAA,IAAsCA,CAAC,CAADA,GAAAA,CAAAA,OAAAA,CAAAA,GAAAA,IAA1C,CAAA,EAAkE;AAChE,UAAME,GAAG,GAAGF,CAAC,CAADA,GAAAA,CAAAA,KAAAA,CAAYA,CAAC,CAADA,GAAAA,CAAAA,OAAAA,CAAAA,GAAAA,IAAxB,CAAYA,CAAZ;;AACA,UAAIJ,IAAI,CAAJA,GAAAA,CAAJ,GAAIA,CAAJ,EAAmB;AACjBK,QAAAA,MAAM,GAANA,KAAAA;AADF,OAAA,MAEO;AACLL,QAAAA,IAAI,CAAJA,GAAAA,CAAAA,GAAAA;AAEH;AAED,KAZqC,CAYrC;;;AACA,YAAQI,CAAC,CAAT,IAAA;AACE,WAAA,OAAA;AACA,WAAA,MAAA;AACE,YAAIH,IAAI,CAAJA,GAAAA,CAASG,CAAC,CAAd,IAAIH,CAAJ,EAAsB;AACpBI,UAAAA,MAAM,GAANA,KAAAA;AADF,SAAA,MAEO;AACLJ,UAAAA,IAAI,CAAJA,GAAAA,CAASG,CAAC,CAAVH,IAAAA;AAEF;;AAAA;;AACF,WAAA,MAAA;AACE,aAAK,IAAIM,CAAC,GAAL,CAAA,EAAWC,GAAG,GAAGT,SAAS,CAA/B,MAAA,EAAwCQ,CAAC,GAAzC,GAAA,EAAiDA,CAAjD,EAAA,EAAsD;AACpD,cAAME,QAAQ,GAAGV,SAAS,CAA1B,CAA0B,CAA1B;AACA,cAAI,CAACK,CAAC,CAADA,KAAAA,CAAAA,cAAAA,CAAL,QAAKA,CAAL,EAAuC;;AAEvC,cAAIK,QAAQ,KAAZ,SAAA,EAA4B;AAC1B,gBAAIP,SAAS,CAATA,GAAAA,CAAJ,QAAIA,CAAJ,EAA6B;AAC3BG,cAAAA,MAAM,GAANA,KAAAA;AADF,aAAA,MAEO;AACLH,cAAAA,SAAS,CAATA,GAAAA,CAAAA,QAAAA;AAEH;AAND,WAAA,MAMO;AACL,gBAAMQ,QAAQ,GAAGN,CAAC,CAADA,KAAAA,CAAjB,QAAiBA,CAAjB;AACA,gBAAMO,UAAU,GAAGR,cAAc,CAAdA,QAAc,CAAdA,IAA4B,IAA/C,GAA+C,EAA/C;;AACA,gBAAIQ,UAAU,CAAVA,GAAAA,CAAJ,QAAIA,CAAJ,EAA8B;AAC5BN,cAAAA,MAAM,GAANA,KAAAA;AADF,aAAA,MAEO;AACLM,cAAAA,UAAU,CAAVA,GAAAA,CAAAA,QAAAA;AACAR,cAAAA,cAAc,CAAdA,QAAc,CAAdA,GAAAA,UAAAA;AAEH;AACF;AA9BL;;AAAA;AAAA;;AAkCA,WAAA,MAAA;AA/CF,GAAA;AAmDF;AAAA;;;;;;AAIA,SAAA,gBAAA,CAAA,YAAA,EAAA,KAAA,EAGE;AACA,SAAOS,YAAY,CAAZA,MAAAA,CAEH,UAAA,IAAA,EAAA,WAAA,EAAoE;AAClE,QAAMC,mBAAmB,GAAGjB,MAAAA,WAAAA,CAAAA,QAAAA,CAAAA,OAAAA,CAC1BkB,WAAW,CAAXA,KAAAA,CADF,QAA4BlB,CAA5B;;AAGA,WAAOC,IAAI,CAAJA,MAAAA,CAAP,mBAAOA,CAAP;AANCe,GAAAA,EAAAA,EAAAA,EAAAA,MAAAA,CAAAA,gBAAAA,EAAAA,EAAAA,EAAAA,OAAAA,GAAAA,MAAAA,CAYGG,WAAW,CAACC,KAAK,CAZpBJ,SAYc,CAZdA,EAAAA,MAAAA,CAaGP,MAbHO,EAAAA,EAAAA,OAAAA,GAAAA,GAAAA,CAeA,UAAA,CAAA,EAAA,CAAA,EAA2C;AAC9C,QAAMN,GAAG,GAAGW,CAAC,CAADA,GAAAA,IAAZ,CAAA;AACA,WAAOrB,MAAAA,WAAAA,CAAAA,YAAAA,CAAAA,CAAAA,EAAsB;AAAEU,MAAAA,GAA/B,EAA+BA;AAAF,KAAtBV,CAAP;AAjBJ,GAAOgB,CAAP;AAqBF;;AAAA,IAAMM,MAAM,GAAG,CAAA,GAAA,WAAf,WAAe,GAAf;AAEA;;;;;AAIA,SAAA,IAAA,OAA2D;AAAA,MAA3D,QAA2D,QAA3D,QAA2D;AACzD,SAAA,aACE,MAAA,WAAA,CAAA,aAAA,CAAC,WAAA,CAAD,eAAC,CAAD,QAAA,EAAA,IAAA,EACIC,UAAAA,QAAD;AAAA,WAAA,aACC,MAAA,WAAA,CAAA,aAAA,CAAC,mBAAA,CAAD,kBAAC,CAAD,QAAA,EAAA,IAAA,EACIC,UAAAA,UAAD;AAAA,aAAA,aACC,MAAA,WAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AACE,QAAA,uBAAuB,EADzB,gBAAA;AAEE,QAAA,iBAAiB,EAFnB,UAAA;AAGE,QAAA,SAAS,EAAE,CAAA,GAAA,IAAA,CAAA,WAAA,EAHb,QAGa;AAHb,OAAA,EALV,QAKU,CADD;AAAA,KADH,CADD;AAAA,GADH,CADF;AAmBFC;;KApBA,I;AAoBAA,IAAI,CAAJA,MAAAA,GAAcH,MAAM,CAApBG,MAAAA;eAEeA,I","sourcesContent":["import React from 'react'\nimport withSideEffect from './side-effect'\nimport { AmpStateContext } from './amp-context'\nimport { HeadManagerContext } from './head-manager-context'\nimport { isInAmpMode } from './amp'\n\ntype WithInAmpMode = {\n  inAmpMode?: boolean\n}\n\nexport function defaultHead(inAmpMode = false): JSX.Element[] {\n  const head = [<meta charSet=\"utf-8\" />]\n  if (!inAmpMode) {\n    head.push(<meta name=\"viewport\" content=\"width=device-width\" />)\n  }\n  return head\n}\n\nfunction onlyReactElement(\n  list: Array<React.ReactElement<any>>,\n  child: React.ReactChild\n): Array<React.ReactElement<any>> {\n  // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n  if (typeof child === 'string' || typeof child === 'number') {\n    return list\n  }\n  // Adds support for React.Fragment\n  if (child.type === React.Fragment) {\n    return list.concat(\n      React.Children.toArray(child.props.children).reduce(\n        (\n          fragmentList: Array<React.ReactElement<any>>,\n          fragmentChild: React.ReactChild\n        ): Array<React.ReactElement<any>> => {\n          if (\n            typeof fragmentChild === 'string' ||\n            typeof fragmentChild === 'number'\n          ) {\n            return fragmentList\n          }\n          return fragmentList.concat(fragmentChild)\n        },\n        []\n      )\n    )\n  }\n  return list.concat(child)\n}\n\nconst METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp']\n\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like <title/>\n Also adds support for deduplicated `key` properties\n*/\nfunction unique() {\n  const keys = new Set()\n  const tags = new Set()\n  const metaTypes = new Set()\n  const metaCategories: { [metatype: string]: Set<string> } = {}\n\n  return (h: React.ReactElement<any>) => {\n    let unique = true\n\n    if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n      const key = h.key.slice(h.key.indexOf('$') + 1)\n      if (keys.has(key)) {\n        unique = false\n      } else {\n        keys.add(key)\n      }\n    }\n\n    // eslint-disable-next-line default-case\n    switch (h.type) {\n      case 'title':\n      case 'base':\n        if (tags.has(h.type)) {\n          unique = false\n        } else {\n          tags.add(h.type)\n        }\n        break\n      case 'meta':\n        for (let i = 0, len = METATYPES.length; i < len; i++) {\n          const metatype = METATYPES[i]\n          if (!h.props.hasOwnProperty(metatype)) continue\n\n          if (metatype === 'charSet') {\n            if (metaTypes.has(metatype)) {\n              unique = false\n            } else {\n              metaTypes.add(metatype)\n            }\n          } else {\n            const category = h.props[metatype]\n            const categories = metaCategories[metatype] || new Set()\n            if (categories.has(category)) {\n              unique = false\n            } else {\n              categories.add(category)\n              metaCategories[metatype] = categories\n            }\n          }\n        }\n        break\n    }\n\n    return unique\n  }\n}\n\n/**\n *\n * @param headElements List of multiple <Head> instances\n */\nfunction reduceComponents(\n  headElements: Array<React.ReactElement<any>>,\n  props: WithInAmpMode\n) {\n  return headElements\n    .reduce(\n      (list: React.ReactChild[], headElement: React.ReactElement<any>) => {\n        const headElementChildren = React.Children.toArray(\n          headElement.props.children\n        )\n        return list.concat(headElementChildren)\n      },\n      []\n    )\n    .reduce(onlyReactElement, [])\n    .reverse()\n    .concat(defaultHead(props.inAmpMode))\n    .filter(unique())\n    .reverse()\n    .map((c: React.ReactElement<any>, i: number) => {\n      const key = c.key || i\n      return React.cloneElement(c, { key })\n    })\n}\n\nconst Effect = withSideEffect()\n\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */\nfunction Head({ children }: { children: React.ReactNode }) {\n  return (\n    <AmpStateContext.Consumer>\n      {(ampState) => (\n        <HeadManagerContext.Consumer>\n          {(updateHead) => (\n            <Effect\n              reduceComponentsToState={reduceComponents}\n              handleStateChange={updateHead}\n              inAmpMode={isInAmpMode(ampState)}\n            >\n              {children}\n            </Effect>\n          )}\n        </HeadManagerContext.Consumer>\n      )}\n    </AmpStateContext.Consumer>\n  )\n}\n\nHead.rewind = Effect.rewind\n\nexport default Head\n"]},"metadata":{},"sourceType":"script"}