{"ast":null,"code":"\"use strict\";\n\nvar _slicedToArray = require(\"@babel/runtime/helpers/slicedToArray\");\n\nexports.__esModule = true;\nexports[\"default\"] = initHeadManager;\n\nvar _react = require(\"react\");\n\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 : Array.isArray(children) ? children.join('') : '';\n  }\n\n  return el;\n}\n\nfunction updateElements(elements, components, removeOldTags) {\n  var headEl = document.getElementsByTagName('head')[0];\n  var oldTags = new Set(elements);\n  components.forEach(function (tag) {\n    if (tag.type === 'title') {\n      var title = '';\n\n      if (tag) {\n        var children = tag.props.children;\n        title = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';\n      }\n\n      if (title !== document.title) document.title = title;\n      return;\n    }\n\n    var newTag = reactElementToDOM(tag);\n    var elementIter = elements.values();\n\n    while (true) {\n      // Note: We don't use for-of here to avoid needing to polyfill it.\n      var _elementIter$next = elementIter.next(),\n          done = _elementIter$next.done,\n          value = _elementIter$next.value;\n\n      if (value == null ? void 0 : value.isEqualNode(newTag)) {\n        oldTags[\"delete\"](value);\n        return;\n      }\n\n      if (done) {\n        break;\n      }\n    }\n\n    elements.add(newTag);\n    headEl.appendChild(newTag);\n  });\n  oldTags.forEach(function (oldTag) {\n    if (removeOldTags) {\n      oldTag.parentNode.removeChild(oldTag);\n    }\n\n    elements[\"delete\"](oldTag);\n  });\n}\n\nfunction initHeadManager(initialHeadEntries) {\n  var headEl = document.getElementsByTagName('head')[0];\n  var elements = new Set(headEl.children);\n  updateElements(elements, initialHeadEntries.map(function (_ref2) {\n    var _ref3 = _slicedToArray(_ref2, 2),\n        type = _ref3[0],\n        props = _ref3[1];\n\n    return /*#__PURE__*/(0, _react.createElement)(type, props);\n  }), false);\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        updateElements(elements, head, true);\n      });\n    }\n  };\n}","map":null,"metadata":{},"sourceType":"script"}