{"ast":null,"code":"\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = initHeadManager;\nvar DOMAttributeNames = {\n  acceptCharset: 'accept-charset',\n  className: 'class',\n  htmlFor: 'for',\n  httpEquiv: 'http-equiv'\n};\n\nfunction reactElementToDOM(_ref) {\n  var type = _ref.type,\n      props = _ref.props;\n  var el = document.createElement(type);\n\n  for (var p in props) {\n    if (!props.hasOwnProperty(p)) continue;\n    if (p === 'children' || p === 'dangerouslySetInnerHTML') continue; // we don't render undefined props to the DOM\n\n    if (props[p] === undefined) continue;\n    var attr = DOMAttributeNames[p] || p.toLowerCase();\n    el.setAttribute(attr, props[p]);\n  }\n\n  var children = props.children,\n      dangerouslySetInnerHTML = props.dangerouslySetInnerHTML;\n\n  if (dangerouslySetInnerHTML) {\n    el.innerHTML = dangerouslySetInnerHTML.__html || '';\n  } else if (children) {\n    el.textContent = typeof children === 'string' ? children : children.join('');\n  }\n\n  return el;\n}\n\nfunction updateElements(type, components) {\n  var headEl = document.getElementsByTagName('head')[0];\n  var headCountEl = headEl.querySelector('meta[name=next-head-count]');\n\n  if (true) {\n    if (!headCountEl) {\n      console.error('Warning: next-head-count is missing. https://err.sh/next.js/next-head-count-missing');\n      return;\n    }\n  }\n\n  var headCount = Number(headCountEl.content);\n  var oldTags = [];\n\n  for (var i = 0, j = headCountEl.previousElementSibling; i < headCount; i++, j = j.previousElementSibling) {\n    if (j.tagName.toLowerCase() === type) {\n      oldTags.push(j);\n    }\n  }\n\n  var newTags = components.map(reactElementToDOM).filter(function (newTag) {\n    for (var k = 0, len = oldTags.length; k < len; k++) {\n      var oldTag = oldTags[k];\n\n      if (oldTag.isEqualNode(newTag)) {\n        oldTags.splice(k, 1);\n        return false;\n      }\n    }\n\n    return true;\n  });\n  oldTags.forEach(function (t) {\n    return t.parentNode.removeChild(t);\n  });\n  newTags.forEach(function (t) {\n    return headEl.insertBefore(t, headCountEl);\n  });\n  headCountEl.content = (headCount - oldTags.length + newTags.length).toString();\n}\n\nfunction initHeadManager() {\n  var updatePromise = null;\n  return {\n    mountedInstances: new Set(),\n    updateHead: function updateHead(head) {\n      var promise = updatePromise = Promise.resolve().then(function () {\n        if (promise !== updatePromise) return;\n        updatePromise = null;\n        var tags = {};\n        head.forEach(function (h) {\n          var components = tags[h.type] || [];\n          components.push(h);\n          tags[h.type] = components;\n        });\n        var titleComponent = tags.title ? tags.title[0] : null;\n        var title = '';\n\n        if (titleComponent) {\n          var children = titleComponent.props.children;\n          title = typeof children === 'string' ? children : children.join('');\n        }\n\n        if (title !== document.title) document.title = title;\n        ['meta', 'base', 'link', 'style', 'script'].forEach(function (type) {\n          updateElements(type, tags[type] || []);\n        });\n      });\n    }\n  };\n}","map":{"version":3,"sources":["../../client/head-manager.ts"],"names":["DOMAttributeNames","acceptCharset","className","htmlFor","httpEquiv","el","document","props","p","attr","dangerouslySetInnerHTML","children","headEl","headCountEl","console","headCount","Number","oldTags","i","j","newTags","components","newTag","k","len","oldTag","t","updatePromise","mountedInstances","updateHead","head","promise","Promise","tags","h","titleComponent","title","type","updateElements"],"mappings":"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","sourcesContent":["const DOMAttributeNames: Record<string, string> = {\n  acceptCharset: 'accept-charset',\n  className: 'class',\n  htmlFor: 'for',\n  httpEquiv: 'http-equiv',\n}\n\nfunction reactElementToDOM({ type, props }: JSX.Element): HTMLElement {\n  const el = document.createElement(type)\n  for (const p in props) {\n    if (!props.hasOwnProperty(p)) continue\n    if (p === 'children' || p === 'dangerouslySetInnerHTML') continue\n\n    // we don't render undefined props to the DOM\n    if (props[p] === undefined) continue\n\n    const attr = DOMAttributeNames[p] || p.toLowerCase()\n    el.setAttribute(attr, props[p])\n  }\n\n  const { children, dangerouslySetInnerHTML } = props\n  if (dangerouslySetInnerHTML) {\n    el.innerHTML = dangerouslySetInnerHTML.__html || ''\n  } else if (children) {\n    el.textContent = typeof children === 'string' ? children : children.join('')\n  }\n  return el\n}\n\nfunction updateElements(type: string, components: JSX.Element[]) {\n  const headEl = document.getElementsByTagName('head')[0]\n  const headCountEl: HTMLMetaElement = headEl.querySelector(\n    'meta[name=next-head-count]'\n  ) as HTMLMetaElement\n  if (process.env.NODE_ENV !== 'production') {\n    if (!headCountEl) {\n      console.error(\n        'Warning: next-head-count is missing. https://err.sh/next.js/next-head-count-missing'\n      )\n      return\n    }\n  }\n\n  const headCount = Number(headCountEl.content)\n  const oldTags: Element[] = []\n\n  for (\n    let i = 0, j = headCountEl.previousElementSibling;\n    i < headCount;\n    i++, j = j!.previousElementSibling\n  ) {\n    if (j!.tagName.toLowerCase() === type) {\n      oldTags.push(j!)\n    }\n  }\n  const newTags = (components.map(reactElementToDOM) as HTMLElement[]).filter(\n    (newTag) => {\n      for (let k = 0, len = oldTags.length; k < len; k++) {\n        const oldTag = oldTags[k]\n        if (oldTag.isEqualNode(newTag)) {\n          oldTags.splice(k, 1)\n          return false\n        }\n      }\n      return true\n    }\n  )\n\n  oldTags.forEach((t) => t.parentNode!.removeChild(t))\n  newTags.forEach((t) => headEl.insertBefore(t, headCountEl))\n  headCountEl.content = (headCount - oldTags.length + newTags.length).toString()\n}\n\nexport default function initHeadManager() {\n  let updatePromise: Promise<void> | null = null\n\n  return {\n    mountedInstances: new Set(),\n    updateHead: (head: JSX.Element[]) => {\n      const promise = (updatePromise = Promise.resolve().then(() => {\n        if (promise !== updatePromise) return\n\n        updatePromise = null\n        const tags: Record<string, JSX.Element[]> = {}\n\n        head.forEach((h) => {\n          const components = tags[h.type] || []\n          components.push(h)\n          tags[h.type] = components\n        })\n\n        const titleComponent = tags.title ? tags.title[0] : null\n        let title = ''\n        if (titleComponent) {\n          const { children } = titleComponent.props\n          title = typeof children === 'string' ? children : children.join('')\n        }\n        if (title !== document.title) document.title = title\n        ;['meta', 'base', 'link', 'style', 'script'].forEach((type) => {\n          updateElements(type, tags[type] || [])\n        })\n      }))\n    },\n  }\n}\n"]},"metadata":{},"sourceType":"script"}